def get_admin_commands(self): locale = get_console_locale(self.env) hints = { 'datetime': get_datetime_format_hint(locale), 'iso8601': get_datetime_format_hint('iso8601'), } yield ('version list', '', "Show versions", None, self._do_list) yield ('version add', '<name> [time]', "Add version", None, self._do_add) yield ('version rename', '<name> <newname>', "Rename version", self._complete_name, self._do_rename) yield ('version remove', '<name>', "Remove version", self._complete_name, self._do_remove) yield ('version time', '<name> <time>', """Set version date The <time> must be specified in the "%(datetime)s" or "%(iso8601)s" (ISO 8601) format. Alternatively, "now" can be used to set the version date to the current time. To remove the date from a version, specify an empty string (""). """ % hints, self._complete_name, self._do_time)
def get_admin_commands(self): hints = { 'datetime': get_datetime_format_hint(get_console_locale(self.env)), 'iso8601': get_datetime_format_hint('iso8601'), } yield ('version list', '', "Show versions", None, self._do_list) yield ('version add', '<name> [time]', "Add version", None, self._do_add) yield ('version rename', '<name> <newname>', "Rename version", self._complete_name, self._do_rename) yield ('version time', '<name> <time>', """Set version date The <time> must be specified in the "%(datetime)s" or "%(iso8601)s" (ISO 8601) format. Alternatively, "now" can be used to set the version date to the current time. To remove the date from a version, specify an empty string (""). """ % hints, self._complete_name, self._do_time) yield ('version remove', '<name>', "Remove version", self._complete_name, self._do_remove)
def get_admin_commands(self): hints = { 'datetime': get_datetime_format_hint(get_console_locale(self.env)), 'iso8601': get_datetime_format_hint('iso8601'), } yield ('milestone list', '', "Show milestones", None, self._do_list) yield ('milestone add', '<name> [due]', "Add milestone", None, self._do_add) yield ('milestone rename', '<name> <newname>', "Rename milestone", self._complete_name, self._do_rename) yield ('milestone due', '<name> <due>', """Set milestone due date The <due> date must be specified in the "%(datetime)s" or "%(iso8601)s" (ISO 8601) format. Alternatively, "now" can be used to set the due date to the current time. To remove the due date from a milestone, specify an empty string (""). """ % hints, self._complete_name, self._do_due) yield ('milestone completed', '<name> <completed>', """Set milestone complete date The <completed> date must be specified in the "%(datetime)s" or "%(iso8601)s" (ISO 8601) format. Alternatively, "now" can be used to set the completion date to the current time. To remove the completion date from a milestone, specify an empty string (""). """ % hints, self._complete_name, self._do_completed) yield ('milestone remove', '<name>', "Remove milestone", self._complete_name, self._do_remove)
def get_admin_commands(self): hints = { 'datetime': get_datetime_format_hint(get_console_locale(self.env)), 'iso8601': get_datetime_format_hint('iso8601'), } yield ('session list', '[sid[:0|1]] [...]', """List the name and email for the given sids Specifying the sid 'anonymous' lists all unauthenticated sessions, and 'authenticated' all authenticated sessions. '*' lists all sessions, and is the default if no sids are given. An sid suffix ':0' operates on an unauthenticated session with the given sid, and a suffix ':1' on an authenticated session (the default).""", self._complete_list, self._do_list) yield ('session add', '<sid[:0|1]> [name] [email]', """Create a session for the given sid Populates the name and email attributes for the given session. Adding a suffix ':0' to the sid makes the session unauthenticated, and a suffix ':1' makes it authenticated (the default if no suffix is specified).""", None, self._do_add) yield ('session set', '<name|email|default_handler> ' '<sid[:0|1]> <value>', """Set the name or email attribute of the given sid An sid suffix ':0' operates on an unauthenticated session with the given sid, and a suffix ':1' on an authenticated session (the default).""", self._complete_set, self._do_set) yield ('session delete', '<sid[:0|1]> [...]', """Delete the session of the specified sid An sid suffix ':0' operates on an unauthenticated session with the given sid, and a suffix ':1' on an authenticated session (the default). Specifying the sid 'anonymous' will delete all anonymous sessions.""", self._complete_delete, self._do_delete) yield ('session purge', '<age>', """Purge anonymous sessions older than given age or date Age may be specified as a relative time like "90 days ago", or as a date in the "%(datetime)s" or "%(iso8601)s" (ISO 8601) format.""" % hints, None, self._do_purge)
def get_admin_commands(self): hints = { 'datetime': get_datetime_format_hint(get_console_locale(self.env)), 'iso8601': get_datetime_format_hint('iso8601'), } yield ('session list', '[sid[:0|1]] [...]', """List the name and email for the given sids Specifying the sid 'anonymous' lists all unauthenticated sessions, and 'authenticated' all authenticated sessions. '*' lists all sessions, and is the default if no sids are given. An sid suffix ':0' operates on an unauthenticated session with the given sid, and a suffix ':1' on an authenticated session (the default).""", self._complete_list, self._do_list) yield ('session add', '<sid[:0|1]> [name] [email]', """Create a session for the given sid Populates the name and email attributes for the given session. Adding a suffix ':0' to the sid makes the session unauthenticated, and a suffix ':1' makes it authenticated (the default if no suffix is specified).""", None, self._do_add) yield ('session set', '<name|email> <sid[:0|1]> <value>', """Set the name or email attribute of the given sid An sid suffix ':0' operates on an unauthenticated session with the given sid, and a suffix ':1' on an authenticated session (the default).""", self._complete_set, self._do_set) yield ('session delete', '<sid[:0|1]> [...]', """Delete the session of the specified sid An sid suffix ':0' operates on an unauthenticated session with the given sid, and a suffix ':1' on an authenticated session (the default). Specifying the sid 'anonymous' will delete all anonymous sessions.""", self._complete_delete, self._do_delete) yield ('session purge', '<age>', """Purge anonymous sessions older than the given age or date Age may be specified as a relative time like "90 days ago", or as a date in the "%(datetime)s" or "%(iso8601)s" (ISO 8601) format.""" % hints, None, self._do_purge)
def test_milestone_completed_invalid_date(self): rv, output = self.execute('milestone completed milestone1 <com>') self.assertEqual(2, rv, output) self.assertExpectedResult(output, { 'hint': self.datetime_format_hint, 'isohint': get_datetime_format_hint('iso8601') })
def test_session_purge_invalid_date(self): rv, output = self.execute('session purge <purge>') self.assertEqual(2, rv, output) self.assertExpectedResult(output, { 'hint': self.datetime_format_hint, 'isohint': get_datetime_format_hint('iso8601') })
def print_edit_view(self, req, error=None, filter=None, warning=None): userMail = self.get_user_email(req.authname) fields = TicketSystem(self.env).get_ticket_fields() customFields = TicketSystem(self.env).get_custom_fields() for f in fields[:]: for cf in customFields: if f['name'] == cf['name']: fields.remove(f) disableSubmitButton = "" if not userMail: userMail = ["No email specified"] disableSubmitButton = "disabled" data = {'userEmail' : userMail, 'submitDisabled': disableSubmitButton, 'datetime_hint': get_datetime_format_hint(), 'fields': fields, 'filter': filter, 'error': error, 'warning': warning} add_stylesheet(req, 'hw/css/style.css') add_script(req, 'hw/js/xmail.js') return 'xmail-edit.html', data, None
def _render_editor(self, req, milestone): # Suggest a default due time of 18:00 in the user's timezone now = datetime.now(req.tz) default_due = datetime(now.year, now.month, now.day, 18) if now.hour > 18: default_due += timedelta(days=1) default_due = to_datetime(default_due, req.tz) data = { 'milestone': milestone, 'datetime_hint': get_datetime_format_hint(req.lc_time), 'default_due': default_due, 'milestone_groups': [], } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_MODIFY') milestones = [m for m in Milestone.select(self.env) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource)] data['milestone_groups'] = group_milestones(milestones, 'TICKET_ADMIN' in req.perm) else: req.perm(milestone.resource).require('MILESTONE_CREATE') chrome = Chrome(self.env) chrome.add_jquery_ui(req) chrome.add_wiki_toolbars(req) return 'milestone_edit.html', data, None
def _render_editor(self, req, db, milestone): data = { 'milestone': milestone, 'ticket': milestone.ticket, 'datefields': self.date_fields, 'date_hint': get_date_format_hint(), 'datetime_hint': get_datetime_format_hint(), 'milestone_groups': [], 'jump_to': req.args.get('jump_to') or referer_module(req) } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_VIEW') milestones = [ m for m in StructuredMilestone.select(self.env, db=db) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource) ] data['milestone_groups'] = group_milestones( milestones, 'TICKET_ADMIN' in req.perm) else: req.perm(milestone.resource).require('MILESTONE_CREATE') TicketModule(self.env)._insert_ticket_data( req, milestone.ticket, data, get_reporter_id(req, 'author'), {}) self._add_tickets_report_data(milestone, req, data) context = Context.from_request(req, milestone.resource) data['attachments'] = AttachmentModule( self.env).attachment_data(context) return 'itteco_milestone_edit.html', data, None
def _render_editor(self, req, milestone): data = { 'milestone': milestone, 'datetime_hint': get_datetime_format_hint(req.lc_time), 'default_due': self.get_default_due(req), 'milestone_groups': [], } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_MODIFY') milestones = [m for m in Milestone.select(self.env) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource)] data['milestone_groups'] = group_milestones(milestones, 'TICKET_ADMIN' in req.perm) data['num_open_tickets'] = milestone \ .get_num_tickets(exclude_closed=True) data['retarget_to'] = self.default_retarget_to else: req.perm(milestone.resource).require('MILESTONE_CREATE') if milestone.name: add_notice(req, _("Milestone %(name)s does not exist. You can" " create it here.", name=milestone.name)) chrome = Chrome(self.env) chrome.add_jquery_ui(req) chrome.add_wiki_toolbars(req) add_stylesheet(req, 'common/css/roadmap.css') return 'milestone_edit.html', data, None
def print_edit_view(self, req, error=None, filter=None, warning=None): userMail = self.get_user_email(req.authname) fields = TicketSystem(self.env).get_ticket_fields() customFields = TicketSystem(self.env).get_custom_fields() for f in fields[:]: for cf in customFields: if f['name'] == cf['name']: fields.remove(f) disableSubmitButton = "" if not userMail: userMail = ["No email specified"] disableSubmitButton = "disabled" data = { 'userEmail': userMail, 'submitDisabled': disableSubmitButton, 'datetime_hint': get_datetime_format_hint(), 'fields': fields, 'filter': filter, 'error': error, 'warning': warning } add_stylesheet(req, 'hw/css/style.css') add_script(req, 'hw/js/xmail.js') return 'xmail-edit.html', data, None
def print_edit_view(self, req, error=None, filter=None, warning=None): userMail = self.get_user_email(req.authname) fields = TicketSystem(self.env).get_ticket_fields() customFields = TicketSystem(self.env).get_custom_fields() for f in fields[:]: for cf in customFields: if f["name"] == cf["name"]: fields.remove(f) disableSubmitButton = "" if not userMail: userMail = ["No email specified"] disableSubmitButton = "disabled" data = { "userEmail": userMail, "submitDisabled": disableSubmitButton, "datetime_hint": get_datetime_format_hint(), "fields": fields, "filter": filter, "error": error, "warning": warning, } add_stylesheet(req, "hw/css/style.css") add_script(req, "hw/js/xmail.js") return "xmail-edit.html", data, None
def _render_editor(self, req, db, milestone): data = { 'milestone': milestone, 'ticket': milestone.ticket, 'datefields' : self.date_fields, 'date_hint': get_date_format_hint(), 'datetime_hint': get_datetime_format_hint(), 'milestone_groups': [], 'jump_to' : req.args.get('jump_to') or referer_module(req) } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_VIEW') milestones = [m for m in StructuredMilestone.select(self.env, db=db) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource)] data['milestone_groups'] = group_milestones(milestones, 'TICKET_ADMIN' in req.perm) else: req.perm(milestone.resource).require('MILESTONE_CREATE') TicketModule(self.env)._insert_ticket_data(req, milestone.ticket, data, get_reporter_id(req, 'author'), {}) self._add_tickets_report_data(milestone, req, data) context = Context.from_request(req, milestone.resource) data['attachments']=AttachmentModule(self.env).attachment_data(context) return 'itteco_milestone_edit.html', data, None
def _render_editor(self, req, db, milestone): # Suggest a default due time of 18:00 in the user's timezone default_due = datetime.now(req.tz).replace(hour=18, minute=0, second=0, microsecond=0) if default_due <= datetime.now(utc): default_due += timedelta(days=1) data = { 'milestone': milestone, 'datetime_hint': get_datetime_format_hint(), 'default_due': default_due, 'milestone_groups': [], } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_MODIFY') milestones = [m for m in Milestone.select(self.env, db=db) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource)] data['milestone_groups'] = group_milestones(milestones, 'TICKET_ADMIN' in req.perm) else: req.perm(milestone.resource).require('MILESTONE_CREATE') Chrome(self.env).add_wiki_toolbars(req) return 'milestone_edit.html', data, None
def _render_editor(self, req, db, version): # Suggest a default due time of 18:00 in the user's timezone default_time = datetime.now(req.tz).replace(hour=18, minute=0, second=0, microsecond=0) if default_time <= datetime.now(utc): default_time += timedelta(days=1) data = { 'version': version, 'datetime_hint': get_datetime_format_hint(), 'default_time': default_time } if version.exists: req.perm.require('MILESTONE_MODIFY') versions = [ v for v in Version.select(self.env, db=db) if v.name != version.name and 'MILESTONE_VIEW' in req.perm ] else: req.perm.require('MILESTONE_CREATE') Chrome(self.env).add_wiki_toolbars(req) return 'version_edit.html', data, None
def _render_editor(self, req, milestone): # Suggest a default due time of 18:00 in the user's timezone default_due = datetime.now(req.tz).replace(hour=18, minute=0, second=0, microsecond=0) if default_due <= datetime.now(utc): default_due += timedelta(days=1) data = { 'milestone': milestone, 'datetime_hint': get_datetime_format_hint(req.lc_time), 'default_due': default_due, 'milestone_groups': [], } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_MODIFY') milestones = [ m for m in Milestone.select(self.env) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource) ] data['milestone_groups'] = group_milestones( milestones, 'TICKET_ADMIN' in req.perm) else: req.perm(milestone.resource).require('MILESTONE_CREATE') chrome = Chrome(self.env) chrome.add_jquery_ui(req) chrome.add_wiki_toolbars(req) return 'milestone_edit.html', data, None
def _render_editor(self, req, milestone): data = { 'milestone': milestone, 'datetime_hint': get_datetime_format_hint(req.lc_time), 'default_due': self.get_default_due(req), 'milestone_groups': [], } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_MODIFY') milestones = [m for m in Milestone.select(self.env) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource)] data['milestone_groups'] = \ group_milestones(milestones, 'TICKET_ADMIN' in req.perm) data['num_open_tickets'] = \ get_num_tickets_for_milestone(self.env, milestone, exclude_closed=True) data['retarget_to'] = self.default_retarget_to else: req.perm(milestone.resource).require('MILESTONE_CREATE') if milestone.name: add_notice(req, _("Milestone %(name)s does not exist. You " "can create it here.", name=milestone.name)) chrome = Chrome(self.env) chrome.add_jquery_ui(req) chrome.add_wiki_toolbars(req) add_stylesheet(req, 'common/css/roadmap.css') return 'milestone_edit.html', data
def render_admin_panel(self, req, cat, page, path_info): assert req.perm.has_permission('TRAC_ADMIN') action = req.args.get('action', 'view') if req.method == 'POST': confirm = req.args.get('confirm', 0) if 'purge_threshold' in req.args: purge_threshold_str = req.args.get('purge_threshold', '') purge_threshold = user_time(req, parse_date, purge_threshold_str, hint='datetime') \ if purge_threshold_str else None else: purge_threshold = None if not confirm: self.log.debug('render_admin_panel purge not yet confirmed') if purge_threshold is not None: crashes = CrashDump.query_old_data(self.env, purge_threshold) data = { 'datetime_hint': get_datetime_format_hint(req.lc_time), 'purge_threshold': purge_threshold_str, 'purge_crashes': crashes } return 'crashdump_admin_%s.html' % page, data elif confirm == 'no': self.log.debug('render_admin_panel purge canceled') req.redirect(req.href.admin(cat, page)) elif confirm == 'yes': self.log.debug('render_admin_panel purge confirmed') req.redirect(req.href.admin(cat, page)) else: now = datetime.now(req.tz) purge_threshold = datetime(now.year, now.month, now.day, 0) purge_threshold -= timedelta(days=365) data = { 'datetime_hint': get_datetime_format_hint(req.lc_time), 'purge_threshold': purge_threshold, 'purge_crashes': None, } print('crashdump_admin_%s.html' % page, data) return 'crashdump_admin_%s.html' % page, data
def list_view(self, req, cat, page): data = { 'view': 'list', 'sprints': self.sm.select(), 'format_datetime': datefmt.format_datetime, 'date_hint': datefmt.get_date_format_hint(), 'datetime_hint': datefmt.get_datetime_format_hint(), 'milestones': [m.name for m in Milestone.select(self.env)], } data.update(req.args) return 'agilo_admin_sprint.html', data
def list_view(self, req, cat, page): data = { 'view': 'list', 'sprints': self.sm.select(), 'format_datetime' : datefmt.format_datetime, 'date_hint' : datefmt.get_date_format_hint(), 'datetime_hint' : datefmt.get_datetime_format_hint(), 'milestones' : [m.name for m in Milestone.select(self.env)], } data.update(req.args) return 'agilo_admin_sprint.html', data
def render_admin_panel(self, req, cat, page, path_info): assert req.perm.has_permission('TRAC_ADMIN') action = req.args.get('action', 'view') if req.method == 'POST': confirm = req.args.get('confirm', 0) if 'purge_threshold' in req.args: purge_threshold_str = req.args.get('purge_threshold', '') purge_threshold = user_time(req, parse_date, purge_threshold_str, hint='datetime') \ if purge_threshold_str else None else: purge_threshold = None if not confirm: self.log.debug('render_admin_panel purge not yet confirmed') if purge_threshold is not None: crashes = CrashDump.query_old_data(self.env, purge_threshold) data = { 'datetime_hint': get_datetime_format_hint(req.lc_time), 'purge_threshold': purge_threshold_str, 'purge_crashes': crashes } return 'crashdump_admin_%s.html' % page, data elif confirm == 'no': self.log.debug('render_admin_panel purge canceled') req.redirect(req.href.admin(cat, page)) elif confirm == 'yes': self.log.debug('render_admin_panel purge confirmed') req.redirect(req.href.admin(cat, page)) else: now = datetime.now(req.tz) purge_threshold = datetime(now.year, now.month, now.day, 0) purge_threshold -= timedelta(days=365) data = { 'datetime_hint': get_datetime_format_hint(req.lc_time), 'purge_threshold': purge_threshold, } return 'crashdump_admin_%s.html' % page, data
def get_admin_commands(self): locale = get_console_locale(self.env) hints = { 'datetime': get_datetime_format_hint(locale), 'iso8601': get_datetime_format_hint('iso8601'), } yield ('milestone list', '', "Show milestones", None, self._do_list) yield ('milestone add', '<name> [due]', "Add milestone", None, self._do_add) yield ('milestone rename', '<name> <newname>', "Rename milestone", self._complete_name, self._do_rename) yield ('milestone due', '<name> <due>', """Set milestone due date The <due> date must be specified in the "%(datetime)s" or "%(iso8601)s" (ISO 8601) format. Alternatively, "now" can be used to set the due date to the current time. To remove the due date from a milestone, specify an empty string (""). """ % hints, self._complete_name, self._do_due) yield ('milestone completed', '<name> <completed>', """Set milestone complete date The <completed> date must be specified in the "%(datetime)s" or "%(iso8601)s" (ISO 8601) format. Alternatively, "now" can be used to set the completion date to the current time. To remove the completion date from a milestone, specify an empty string (""). """ % hints, self._complete_name, self._do_completed) yield ('milestone remove', '<name>', "Remove milestone", self._complete_name, self._do_remove)
def detail_view(self, req, cat, page, name): sprint = self.sm.get(name=name) if not sprint or not sprint.exists: return req.redirect(req.href.admin(cat, page)) data = { 'view': 'detail', 'sprint': sprint, 'teams': self.tm.select(), 'format_datetime': datefmt.format_datetime, 'date_hint': datefmt.get_date_format_hint(), 'datetime_hint': datefmt.get_datetime_format_hint(), 'milestones': [m.name for m in Milestone.select(self.env)], } data.update(req.args) add_script(req, 'common/js/wikitoolbar.js') return 'agilo_admin_sprint.html', data
def _render_editor(self, req, milestone): # Suggest a default due time of 18:00 in the user's timezone now = datetime.now(req.tz) default_due = datetime(now.year, now.month, now.day, 18) if now.hour > 18: default_due += timedelta(days=1) default_due = to_datetime(default_due, req.tz) data = { 'milestone': milestone, 'datetime_hint': get_datetime_format_hint(req.lc_time), 'default_due': default_due, 'milestone_groups': [], } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_MODIFY') milestones = [ m for m in Milestone.select(self.env) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource) ] num_tickets = self.env.db_query( """ SELECT COUNT(*) FROM ticket WHERE milestone=%s""", (milestone.name, ))[0][0] data['milestone_groups'] = group_milestones( milestones, 'TICKET_ADMIN' in req.perm) data['num_tickets'] = num_tickets data['retarget_to'] = self.default_retarget_to else: req.perm(milestone.resource).require('MILESTONE_CREATE') if milestone.name: add_notice( req, _( "Milestone %(name)s does not exist. You can" " create it here.", name=milestone.name)) chrome = Chrome(self.env) chrome.add_jquery_ui(req) chrome.add_wiki_toolbars(req) add_stylesheet(req, 'common/css/roadmap.css') return 'milestone_edit.html', data, None
def prepare_data(self, req, data=None): """Prepares the form to edit a sprint""" # Get the team list from the team controller from agilo.scrum.team.controller import TeamController cmd_team_list = TeamController.ListTeamsCommand(self.env) if data is None: data = {} if not data.get('milestone'): data['milestone'] = req.args.get('milestone', '') data.update({ 'teams': [t.name for t in \ TeamController(self.env).process_command(cmd_team_list)], 'datetime_hint': datefmt.get_datetime_format_hint(), 'redirect': req.args.get('redirect'), 'timezone_of_sprint': self._user_readable_timezone_from_request(req) }) add_script(req, 'common/js/wikitoolbar.js') return data
def _render_editor(self, req, db, milestone): data = { 'milestone': milestone, 'date_hint': get_date_format_hint(), 'datetime_hint': get_datetime_format_hint(), 'milestone_groups': [], } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_MODIFY') milestones = [m for m in Milestone.select(self.env, db=db) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource)] data['milestone_groups'] = group_milestones(milestones, 'TICKET_ADMIN' in req.perm) else: req.perm(milestone.resource).require('MILESTONE_CREATE') return 'milestone_edit.html', data, None
def _render_editor(self, req, db, milestone): if milestone.exists: req.perm.assert_permission('MILESTONE_MODIFY') req.hdf['title'] = u'Jalon %s' % milestone.name req.hdf['milestone.mode'] = 'edit' req.hdf['milestones'] = [m.name for m in Milestone.select(self.env) if m.name != milestone.name] else: req.perm.assert_permission('MILESTONE_CREATE') req.hdf['title'] = u'Nouveau jalon' req.hdf['milestone.mode'] = 'new' from trac.util.datefmt import get_date_format_hint, \ get_datetime_format_hint req.hdf['milestone'] = milestone_to_hdf(self.env, db, req, milestone) req.hdf['milestone.date_hint'] = get_date_format_hint() req.hdf['milestone.datetime_hint'] = get_datetime_format_hint() req.hdf['milestone.datetime_now'] = format_datetime()
def test_i18n_datetime_hint(self): en_US = Locale.parse("en_US") en_GB = Locale.parse("en_GB") fr = Locale.parse("fr") ja = Locale.parse("ja") vi = Locale.parse("vi") zh_CN = Locale.parse("zh_CN") self.assert_(datefmt.get_datetime_format_hint(en_US) in ("MMM d, yyyy h:mm:ss a", "MMM d, y h:mm:ss a")) self.assert_(datefmt.get_datetime_format_hint(en_GB) in ("d MMM yyyy HH:mm:ss", "d MMM y HH:mm:ss")) self.assert_(datefmt.get_datetime_format_hint(fr) in ("d MMM yyyy HH:mm:ss", "d MMM y HH:mm:ss")) self.assertEqual("yyyy/MM/dd H:mm:ss", datefmt.get_datetime_format_hint(ja)) self.assertEqual("HH:mm:ss dd-MM-yyyy", datefmt.get_datetime_format_hint(vi)) self.assertEqual("yyyy-M-d ahh:mm:ss", datefmt.get_datetime_format_hint(zh_CN))
def _render_editor(self, req, db, milestone): if milestone.exists: req.perm.assert_permission('MILESTONE_MODIFY') req.hdf['title'] = 'Milestone %s' % milestone.name req.hdf['milestone.mode'] = 'edit' req.hdf['milestones'] = [ m.name for m in Milestone.select(self.env) if m.name != milestone.name ] else: req.perm.assert_permission('MILESTONE_CREATE') req.hdf['title'] = 'New Milestone' req.hdf['milestone.mode'] = 'new' from trac.util.datefmt import get_date_format_hint, \ get_datetime_format_hint req.hdf['milestone'] = milestone_to_hdf(self.env, db, req, milestone) req.hdf['milestone.date_hint'] = get_date_format_hint() req.hdf['milestone.datetime_hint'] = get_datetime_format_hint() req.hdf['milestone.datetime_now'] = format_datetime()
def render_admin_panel(self, req, cat, page, milestone): req.perm.assert_permission('BURNDOWN_ADMIN') db = self.env.get_db_cnx() if milestone: mil = dbhelper.get_milestone(db, milestone) if req.method == 'POST': if req.args.get('save'): mil['started'] = None started = req.args.get('started', '') if started: startdate = parse_date(started, req.tz) # todo: fill empty dates in mil['started'] = startdate dbhelper.set_startdate_for_milestone( db, mil['name'], to_timestamp(mil['started'])) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) data = {'view': 'detail', 'milestone': mil} else: db = self.env.get_db_cnx() cursor = db.cursor() milestones = [] for milestone in dbhelper.get_milestones(db): milestones.append(milestone) data = { 'view': 'list', 'milestones': milestones, 'default': self.config.get('ticket', 'default_milestone') } data.update({ 'date_hint': get_date_format_hint(), 'datetime_hint': get_datetime_format_hint() }) return 'config.html', data
def render_admin_panel(self, req, cat, page, milestone): req.perm.assert_permission('BURNDOWN_ADMIN') db = self.env.get_db_cnx() if milestone: mil = dbhelper.get_milestone(db, milestone) if req.method == 'POST': if req.args.get('save'): mil['started'] = None started = req.args.get('started', '') if started: startdate = parse_date(started, req.tz) # todo: fill empty dates in mil['started'] = startdate dbhelper.set_startdate_for_milestone(db, mil['name'], to_timestamp(mil['started'])) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) data = {'view': 'detail', 'milestone': mil } else: db = self.env.get_db_cnx() cursor = db.cursor() milestones = [] for milestone in dbhelper.get_milestones(db): milestones.append(milestone) data = {'view': 'list', 'milestones': milestones, 'default': self.config.get('ticket', 'default_milestone') } data.update({ 'date_hint': get_date_format_hint(), 'datetime_hint': get_datetime_format_hint() }) return 'config.html', data
def _render_editor(self, req, version): resource = Resource('version', version.name) data = { 'version': version, 'resource': resource, 'versions': [ver.name for ver in Version.select(self.env)], 'datetime_hint': get_datetime_format_hint(), 'version_groups': [], } if version.exists: req.perm(resource).require('VERSION_MODIFY') #versions = [m for m in Version.select(self.env) # if m.name != version.name # and 'VERSION_VIEW' in req.perm(m.resource)] else: req.perm(resource).require('VERSION_CREATE') Chrome(self.env).add_jquery_ui(req) Chrome(self.env).add_wiki_toolbars(req) add_stylesheet(req, 'common/css/roadmap.css') return 'version_edit.html', data, None
def _render_editor(self, req, db, version): resource = Resource('version', version.name) data = { 'version': version, 'resource': resource, 'versions': [ver.name for ver in Version.select(self.env)], 'datetime_hint': get_datetime_format_hint(), 'version_groups': [], } if version.exists: req.perm(resource).require('VERSION_MODIFY') #versions = [m for m in Version.select(self.env, db=db) # if m.name != version.name # and 'VERSION_VIEW' in req.perm(m.resource)] else: req.perm(resource).require('VERSION_CREATE') if parse_version(trac_version) >= parse_version('1.0'): Chrome(self.env).add_jquery_ui(req) Chrome(self.env).add_wiki_toolbars(req) return 'version_edit.html', data, None
def _render_editor(self, req, milestone): # Suggest a default due time of 18:00 in the user's timezone now = datetime_now(req.tz) default_due = datetime(now.year, now.month, now.day, 18) if now.hour > 18: default_due += timedelta(days=1) default_due = to_datetime(default_due, req.tz) data = { 'milestone': milestone, 'datetime_hint': get_datetime_format_hint(req.lc_time), 'default_due': default_due, 'milestone_groups': [], } if milestone.exists: req.perm(milestone.resource).require('MILESTONE_MODIFY') milestones = [ m for m in Milestone.select(self.env) if m.name != milestone.name and 'MILESTONE_VIEW' in req.perm(m.resource) ] data['milestone_groups'] = group_milestones( milestones, 'TICKET_ADMIN' in req.perm) else: req.perm(milestone.resource).require('MILESTONE_CREATE') if milestone.name: add_notice( req, _( "Milestone %(name)s does not exist. You can" " create it here.", name=milestone.name)) chrome = Chrome(self.env) chrome.add_jquery_ui(req) chrome.add_wiki_toolbars(req) return 'milestone_edit.html', data, None
def _render_editor(self, req, db, version): # Suggest a default due time of 18:00 in the user's timezone default_time = datetime.now(req.tz).replace(hour=18, minute=0, second=0, microsecond=0) if default_time <= datetime.now(utc): default_time += timedelta(days=1) data = { 'version': version, 'datetime_hint': get_datetime_format_hint(), 'default_time': default_time } if version.exists: req.perm.require('MILESTONE_MODIFY') versions = [v for v in Version.select(self.env, db=db) if v.name != version.name and 'MILESTONE_VIEW' in req.perm] else: req.perm.require('MILESTONE_CREATE') Chrome(self.env).add_wiki_toolbars(req) return 'version_edit.html', data, None
def test_i18n_datetime_hint(self): en_US = Locale.parse('en_US') en_GB = Locale.parse('en_GB') fr = Locale.parse('fr') ja = Locale.parse('ja') vi = Locale.parse('vi') zh_CN = Locale.parse('zh_CN') self.assert_(datefmt.get_datetime_format_hint(en_US) in ('MMM d, yyyy h:mm:ss a', 'MMM d, y h:mm:ss a')) self.assert_(datefmt.get_datetime_format_hint(en_GB) in ('d MMM yyyy HH:mm:ss', 'd MMM y HH:mm:ss')) self.assert_(datefmt.get_datetime_format_hint(fr) in ('d MMM yyyy HH:mm:ss', 'd MMM y HH:mm:ss')) self.assertEqual('yyyy/MM/dd H:mm:ss', datefmt.get_datetime_format_hint(ja)) self.assertEqual('HH:mm:ss dd-MM-yyyy', datefmt.get_datetime_format_hint(vi)) self.assertEqual('yyyy-M-d ahh:mm:ss', datefmt.get_datetime_format_hint(zh_CN))
def _render_admin_panel(self, req, cat, page, version): # Detail view? if version: ver = model.Version(self.env, version) if req.method == 'POST': if req.args.get('save'): ver.name = req.args.get('name') if req.args.get('time'): ver.time = user_time(req, parse_date, req.args.get('time'), hint='datetime') else: ver.time = None # unset ver.description = req.args.get('description') ver.update() add_notice(req, _("Your changes have been saved.")) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) chrome = Chrome(self.env) chrome.add_wiki_toolbars(req) chrome.add_auto_preview(req) data = {'view': 'detail', 'version': ver} else: default = self.config.get('ticket', 'default_version') if req.method == 'POST': # Add Version if req.args.get('add') and req.args.get('name'): ver = model.Version(self.env) ver.name = req.args.get('name') if req.args.get('time'): ver.time = user_time(req, parse_date, req.args.get('time'), hint='datetime') ver.insert() add_notice(req, _('The version "%(name)s" has been ' 'added.', name=ver.name)) req.redirect(req.href.admin(cat, page)) # Remove versions elif req.args.get('remove'): sel = req.args.getlist('sel') if not sel: raise TracError(_("No version selected")) with self.env.db_transaction: for name in sel: model.Version(self.env, name).delete() if name == default: self.config.set('ticket', 'default_version', '') self._save_config(req) add_notice(req, _("The selected versions have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default version elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info("Setting default version to %s", name) self.config.set('ticket', 'default_version', name) self._save_config(req) req.redirect(req.href.admin(cat, page)) # Clear default version elif req.args.get('clear'): self.log.info("Clearing default version") self.config.set('ticket', 'default_version', '') self._save_config(req) req.redirect(req.href.admin(cat, page)) data = {'view': 'list', 'versions': list(model.Version.select(self.env)), 'default': default} Chrome(self.env).add_jquery_ui(req) data.update({'datetime_hint': get_datetime_format_hint(req.lc_time)}) return 'admin_versions.html', data
def _render_admin_panel(self, req, cat, page, milestone_name): perm_cache = req.perm('admin', 'ticket/' + self._type) # Detail view if milestone_name: milestone = model.Milestone(self.env, milestone_name) milestone_module = MilestoneModule(self.env) if req.method == 'POST': if 'save' in req.args: perm_cache.require('MILESTONE_MODIFY') if milestone_module.save_milestone(req, milestone): req.redirect(req.href.admin(cat, page)) elif 'cancel' in req.args: req.redirect(req.href.admin(cat, page)) chrome = Chrome(self.env) chrome.add_wiki_toolbars(req) chrome.add_auto_preview(req) data = {'view': 'detail', 'milestone': milestone, 'default_due': milestone_module.get_default_due(req)} # List view else: ticket_default = self.config.get('ticket', 'default_milestone') retarget_default = self.config.get('milestone', 'default_retarget_to') if req.method == 'POST': # Add milestone if 'add' in req.args and req.args.get('name'): perm_cache.require('MILESTONE_CREATE') name = req.args.get('name') try: model.Milestone(self.env, name=name) except ResourceNotFound: milestone = model.Milestone(self.env) milestone.name = name MilestoneModule(self.env).save_milestone(req, milestone) req.redirect(req.href.admin(cat, page)) else: add_warning(req, _('Milestone "%(name)s" already ' 'exists, please choose another ' 'name.', name=name)) # Remove milestone elif 'remove' in req.args: save = False perm_cache.require('MILESTONE_DELETE') sel = req.args.getlist('sel') if not sel: raise TracError(_("No milestone selected")) with self.env.db_transaction: for name in sel: milestone = model.Milestone(self.env, name) milestone.move_tickets(None, req.authname, "Milestone deleted") milestone.delete() if name == ticket_default: self.config.set('ticket', 'default_milestone', '') save = True if name == retarget_default: self.config.set('milestone', 'default_retarget_to', '') save = True if save: self._save_config(req) add_notice(req, _("The selected milestones have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default milestone elif 'apply' in req.args: save = False name = req.args.get('ticket_default') if name and name != ticket_default: self.log.info("Setting default ticket " "milestone to %s", name) self.config.set('ticket', 'default_milestone', name) save = True retarget = req.args.get('retarget_default') if retarget and retarget != retarget_default: self.log.info("Setting default retargeting " "milestone to %s", retarget) self.config.set('milestone', 'default_retarget_to', retarget) save = True if save: self._save_config(req) req.redirect(req.href.admin(cat, page)) # Clear default milestone elif 'clear' in req.args: self.log.info("Clearing default ticket milestone " "and default retarget milestone") self.config.set('ticket', 'default_milestone', '') self.config.set('milestone', 'default_retarget_to', '') self._save_config(req) req.redirect(req.href.admin(cat, page)) # Get ticket count num_tickets = dict(self.env.db_query(""" SELECT milestone, COUNT(milestone) FROM ticket WHERE milestone != '' GROUP BY milestone """)) query_href = lambda name: req.href.query([('group', 'status'), ('milestone', name)]) data = {'view': 'list', 'milestones': model.Milestone.select(self.env), 'query_href': query_href, 'num_tickets': lambda m: num_tickets.get(m.name, 0), 'ticket_default': ticket_default, 'retarget_default': retarget_default} Chrome(self.env).add_jquery_ui(req) data.update({ 'datetime_hint': get_datetime_format_hint(req.lc_time), }) return 'admin_milestones.html', data
def render_admin_panel(self, req, cat, page, blogpart): req.perm.require('WIKI_ADMIN') # Detail view? if blogpart: ver = model.BlogPart(self.env, blogpart) if req.method == 'POST': if req.args.get('save'): ver.name = req.args.get('name') if req.args.get('time'): ver.time = parse_date(req.args.get('time')) else: ver.time = None # unset ver.description = req.args.get('description','') ver.header = req.args.get('header','') ver.body = req.args.get('body','') ver.argnum = int(req.args.get('argnum',0)) ver.update() req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) add_script(req, 'common/js/wikitoolbar.js') data = {'view': 'detail', 'blogpart': ver} else: if req.method == 'POST': # Add BlogPart if req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: model.BlogPart(self.env, name=name) except ResourceNotFound: ver = model.BlogPart(self.env) ver.name = name if req.args.get('time'): ver.time = parse_date(req.args.get('time')) ver.description = req.args.get('description','') ver.header = req.args.get('header','') ver.body = req.args.get('body','') ver.argnum = int(req.args.get('argnum',0)) ver.insert() req.redirect(req.href.admin(cat, page)) else: raise TracError(_('BlogPart %s already exists.') % name) # Remove blogparts elif req.args.get('remove'): sel = req.args.get('sel') if not sel: raise TracError(_('No blogpart selected')) if not isinstance(sel, list): sel = [sel] db = self.env.get_db_cnx() for name in sel: ver = model.BlogPart(self.env, name, db=db) ver.delete(db=db) db.commit() req.redirect(req.href.admin(cat, page)) # Set default blogpart elif req.args.get('apply'): if req.args.get('default'): name = req.args.get('default') self.log.info('Setting default blogpart to %s', name) self.config.set('ticket', 'default_blogpart', name) self.config.save() req.redirect(req.href.admin(cat, page)) data = { 'view': 'list', 'blogparts': model.BlogPart.select(self.env), 'default': self.config.get('ticket', 'default_blogpart'), } data.update({ 'datetime_hint': get_datetime_format_hint() }) return 'admin_blogparts.html', data
def _render_admin_panel(self, req, cat, page, productversion): # Look for pattern <product>/<productversion> in url match = None if productversion: match = re.match('([^/]+)/(.*)$', productversion) # Detail view? if match: prodver = model.ProductVersion(self.env, match.group(2), match.group(1)) if req.method == 'POST': if req.args.get('save'): prodver.name = req.args.get('name') if req.args.get('time'): prodver.time = parse_date(req.args.get('time'), req.tz) else: prodver.time = None # unset prodver.description = req.args.get('description') prodver.update() req.redirect(req.href.admin(cat, page, match.group(1))) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page, match.group(1))) add_script(req, 'common/js/wikitoolbar.js') data = {'view': 'detail', 'field': prodver} else: if req.method == 'POST': # Add product version if req.args.get('add') and req.args.get('name') and req.args.get('parent'): name = req.args.get('name') parent = req.args.get('parent') try: model.ProductVersion(self.env, name=name, parent=parent) except ResourceNotFound: prodver = model.ProductVersion(self.env) prodver.name = name prodver.parent = parent if req.args.get('time'): prodver.time = parse_date(req.args.get('time'), req.tz) prodver.insert() req.redirect(req.href.admin(cat, page, prodver.parent)) else: raise TracError(_('Product version %s already exists.') % name) # Remove product versions elif req.args.get('remove'): sel = req.args.get('sel') parent = req.args.get('parent') if not sel: raise TracError(_('No product version selected')) if not isinstance(sel, list): sel = [sel] db = self.env.get_db_cnx() for name in sel: prodver = model.ProductVersion(self.env, name, parent, db=db) prodver.delete(db=db) db.commit() req.redirect(req.href.admin(cat, page, parent)) # Change selected parent product elif req.args.get('parent'): req.redirect(req.href.admin(cat, page, req.args.get('parent'))) products = list(model.Product.select(self.env)) if productversion: parent = productversion # Catches redirects else: parent = products[0].name or None # Just use the first in the list as default data = { 'view': 'list', 'products': products, 'productversions': list(model.ProductVersion.select(self.env, parent=parent)), 'parent': parent, } data['datetime_hint'] = get_datetime_format_hint() data['label_singular'] = self._label[0] data['label_plural'] = self._label[1] return 'admin_productversions.html', data
def datetime_format_hint(self): return get_datetime_format_hint(get_console_locale(self.env))
def _render_admin_panel(self, req, cat, page, milestone): perm = req.perm('admin', 'ticket/' + self._type) # Detail view? if milestone: mil = model.Milestone(self.env, milestone) if req.method == 'POST': if req.args.get('save'): perm.require('MILESTONE_MODIFY') mil.name = name = req.args.get('name') mil.due = mil.completed = None due = req.args.get('duedate', '') if due: mil.due = user_time(req, parse_date, due, hint='datetime') if req.args.get('completed', False): completed = req.args.get('completeddate', '') mil.completed = user_time(req, parse_date, completed, hint='datetime') if mil.completed > datetime_now(utc): raise TracError( _('Completion date may not be in ' 'the future'), _('Invalid Completion Date')) mil.description = req.args.get('description', '') try: mil.update(author=req.authname) except self.env.db_exc.IntegrityError: raise TracError( _('Milestone "%(name)s" already ' 'exists.', name=name)) add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) Chrome(self.env).add_wiki_toolbars(req) data = {'view': 'detail', 'milestone': mil} else: default = self.config.get('ticket', 'default_milestone') if req.method == 'POST': # Add Milestone if req.args.get('add') and req.args.get('name'): perm.require('MILESTONE_CREATE') name = req.args.get('name') try: mil = model.Milestone(self.env, name=name) except ResourceNotFound: mil = model.Milestone(self.env) mil.name = name if req.args.get('duedate'): mil.due = user_time(req, parse_date, req.args.get('duedate'), hint='datetime') mil.insert() add_notice( req, _('The milestone "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: if mil.name is None: raise TracError(_('Invalid milestone name.')) raise TracError( _('Milestone "%(name)s" already ' 'exists.', name=name)) # Remove milestone elif req.args.get('remove'): perm.require('MILESTONE_DELETE') sel = req.args.get('sel') if not sel: raise TracError(_('No milestone selected')) if not isinstance(sel, list): sel = [sel] with self.env.db_transaction: for name in sel: milestone = model.Milestone(self.env, name) milestone.move_tickets(None, req.authname, "Milestone deleted") milestone.delete() add_notice( req, _("The selected milestones have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default milestone elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info("Setting default milestone to %s", name) self.config.set('ticket', 'default_milestone', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) # Get ticket count milestones = [(milestone, self.env.db_query( """ SELECT COUNT(*) FROM ticket WHERE milestone=%s """, (milestone.name, ))[0][0]) for milestone in model.Milestone.select(self.env)] data = { 'view': 'list', 'milestones': milestones, 'default': default } Chrome(self.env).add_jquery_ui(req) data.update({ 'datetime_hint': get_datetime_format_hint(req.lc_time), }) return 'admin_milestones.html', data
def _render_admin_panel(self, req, cat, page, milestone): req.perm.require('MILESTONE_VIEW') # Detail view? if milestone: mil = model.Milestone(self.env, milestone) if req.method == 'POST': if req.args.get('save'): req.perm.require('MILESTONE_MODIFY') mil.name = req.args.get('name') mil.due = mil.completed = None due = req.args.get('duedate', '') if due: mil.due = parse_date(due, req.tz, 'datetime') if req.args.get('completed', False): completed = req.args.get('completeddate', '') mil.completed = parse_date(completed, req.tz, 'datetime') if mil.completed > datetime.now(utc): raise TracError( _('Completion date may not be in ' 'the future'), _('Invalid Completion Date')) mil.description = req.args.get('description', '') mil.update() add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) Chrome(self.env).add_wiki_toolbars(req) data = {'view': 'detail', 'milestone': mil} else: default = self.config.get('ticket', 'default_milestone') if req.method == 'POST': # Add Milestone if req.args.get('add') and req.args.get('name'): req.perm.require('MILESTONE_CREATE') name = req.args.get('name') try: mil = model.Milestone(self.env, name=name) except ResourceNotFound: mil = model.Milestone(self.env) mil.name = name if req.args.get('duedate'): mil.due = parse_date(req.args.get('duedate'), req.tz, 'datetime') mil.insert() add_notice( req, _('The milestone "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: if mil.name is None: raise TracError(_('Invalid milestone name.')) raise TracError( _('Milestone %(name)s already exists.', name=name)) # Remove milestone elif req.args.get('remove'): req.perm.require('MILESTONE_DELETE') sel = req.args.get('sel') if not sel: raise TracError(_('No milestone selected')) if not isinstance(sel, list): sel = [sel] @self.env.with_transaction() def do_remove(db): for name in sel: mil = model.Milestone(self.env, name, db=db) mil.delete(author=req.authname) add_notice( req, _('The selected milestones have been ' 'removed.')) req.redirect(req.href.admin(cat, page)) # Set default milestone elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info('Setting default milestone to %s', name) self.config.set('ticket', 'default_milestone', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) # Get ticket count db = self.env.get_db_cnx() cursor = db.cursor() milestones = [] for milestone in model.Milestone.select(self.env, db=db): cursor.execute( "SELECT COUNT(*) FROM ticket " "WHERE milestone=%s", (milestone.name, )) milestones.append((milestone, cursor.fetchone()[0])) data = { 'view': 'list', 'milestones': milestones, 'default': default } data.update({'datetime_hint': get_datetime_format_hint()}) return 'admin_milestones.html', data
def _render_admin_panel(self, req, cat, page, version): # Detail view? if version: ver = model.Version(self.env, version) if req.method == 'POST': if req.args.get('save'): ver.name = name = req.args.get('name') if req.args.get('time'): ver.time = user_time(req, parse_date, req.args.get('time'), hint='datetime') else: ver.time = None # unset ver.description = req.args.get('description') try: ver.update() except self.env.db_exc.IntegrityError: raise TracError( _('Version "%(name)s" already ' 'exists.', name=name)) add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) Chrome(self.env).add_wiki_toolbars(req) data = {'view': 'detail', 'version': ver} else: default = self.config.get('ticket', 'default_version') if req.method == 'POST': # Add Version if req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: ver = model.Version(self.env, name=name) except ResourceNotFound: ver = model.Version(self.env) ver.name = name if req.args.get('time'): ver.time = user_time(req, parse_date, req.args.get('time'), hint='datetime') ver.insert() add_notice( req, _('The version "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: if ver.name is None: raise TracError(_("Invalid version name.")) raise TracError( _('Version "%(name)s" already ' 'exists.', name=name)) # Remove versions elif req.args.get('remove'): sel = req.args.get('sel') if not sel: raise TracError(_("No version selected")) if not isinstance(sel, list): sel = [sel] with self.env.db_transaction: for name in sel: ver = model.Version(self.env, name) ver.delete() add_notice( req, _("The selected versions have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default version elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info("Setting default version to %s", name) self.config.set('ticket', 'default_version', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) data = { 'view': 'list', 'versions': list(model.Version.select(self.env)), 'default': default } Chrome(self.env).add_jquery_ui(req) data.update({ 'datetime_hint': get_datetime_format_hint(req.lc_time), }) return 'admin_versions.html', data
def _render_admin_panel(self, req, cat, page, milestone): req.perm.require('MILESTONE_VIEW') # Detail view? if milestone: mil = model.Milestone(self.env, milestone) if req.method == 'POST': if req.args.get('save'): req.perm.require('MILESTONE_MODIFY') mil.name = name = req.args.get('name') mil.due = mil.completed = None due = req.args.get('duedate', '') if due: mil.due = user_time(req, parse_date, due, hint='datetime') if req.args.get('completed', False): completed = req.args.get('completeddate', '') mil.completed = user_time(req, parse_date, completed, hint='datetime') if mil.completed > datetime.now(utc): raise TracError(_('Completion date may not be in ' 'the future'), _('Invalid Completion Date')) mil.description = req.args.get('description', '') try: mil.update() except self.env.db_exc.IntegrityError: raise TracError(_('The milestone "%(name)s" already ' 'exists.', name=name)) add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) Chrome(self.env).add_wiki_toolbars(req) data = {'view': 'detail', 'milestone': mil} else: default = self.config.get('ticket', 'default_milestone') if req.method == 'POST': # Add Milestone if req.args.get('add') and req.args.get('name'): req.perm.require('MILESTONE_CREATE') name = req.args.get('name') try: mil = model.Milestone(self.env, name=name) except ResourceNotFound: mil = model.Milestone(self.env) mil.name = name if req.args.get('duedate'): mil.due = user_time(req, parse_date, req.args.get('duedate'), hint='datetime') mil.insert() add_notice(req, _('The milestone "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: if mil.name is None: raise TracError(_('Invalid milestone name.')) raise TracError(_("Milestone %(name)s already exists.", name=name)) # Remove milestone elif req.args.get('remove'): req.perm.require('MILESTONE_DELETE') sel = req.args.get('sel') if not sel: raise TracError(_('No milestone selected')) if not isinstance(sel, list): sel = [sel] with self.env.db_transaction: for name in sel: mil = model.Milestone(self.env, name) mil.delete(author=req.authname) add_notice(req, _("The selected milestones have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default milestone elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info("Setting default milestone to %s", name) self.config.set('ticket', 'default_milestone', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) # Get ticket count milestones = [ (milestone, self.env.db_query(""" SELECT COUNT(*) FROM ticket WHERE milestone=%s """, (milestone.name,))[0][0]) for milestone in model.Milestone.select(self.env)] data = {'view': 'list', 'milestones': milestones, 'default': default} Chrome(self.env).add_jquery_ui(req) data.update({ 'datetime_hint': get_datetime_format_hint(req.lc_time), }) return 'admin_milestones.html', data
def _render_admin_panel(self, req, cat, page, milestone): req.perm.require('TICKET_ADMIN') add_stylesheet(req, 'itteco/css/common.css') add_jscript( req, [ 'stuff/ui/ui.core.js', 'stuff/ui/ui.resizable.js', 'custom_select.js' ], IttecoEvnSetup(self.env).debug ) # Detail view? if milestone: mil = StructuredMilestone(self.env, milestone) if req.method == 'POST': if req.args.get('save'): mil.name = req.args.get('name') mil.due = mil.completed = None due = req.args.get('duedate', '') if due: mil.due = parse_date(due, req.tz) if req.args.get('completed', False): completed = req.args.get('completeddate', '') mil.completed = parse_date(completed, req.tz) if mil.completed > datetime.now(utc): raise TracError(_('Completion date may not be in ' 'the future'), _('Invalid Completion Date')) mil.description = req.args.get('description', '') mil.parent = req.args.get('parent', None) if mil.parent and mil.parent==mil.name: raise TracError(_('Milestone cannot be parent for itself,Please, give it another thought.'), _('Something is wrong with Parent Milestone. Will you check it please?')) if mil.parent and not StructuredMilestone(self.env, mil.parent).exists: raise TracError(_('Milestone should have a valid parent. It does not look like this is the case.'), _('Something is wrong with Parent Milestone. Will you check it please?')) mil.update() req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) add_script(req, 'common/js/wikitoolbar.js') data = {'view': 'detail', 'milestone': mil} else: if req.method == 'POST': # Add Milestone if req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: StructuredMilestone(self.env, name) except ResourceNotFound: mil = StructuredMilestone(self.env) mil.name = name if req.args.get('duedate'): mil.due = parse_date(req.args.get('duedate'), req.tz) mil.parent = req.args.get('parent', None) if mil.parent and not StructuredMilestone(self.env, mil.parent).exists: raise TracError(_('Milestone should have a valid parent. It does not look like this is the case'), _('Something is wrong with Parent Milestone. Will you check it please?')) mil.insert() req.redirect(req.href.admin(cat, page)) else: raise TracError(_('Sorry, milestone %s already exists.') % name) # Remove milestone elif req.args.get('remove'): sel = req.args.get('sel') if not sel: raise TracError(_('Please, select the milestone.')) if not isinstance(sel, list): sel = [sel] db = self.env.get_db_cnx() for name in sel: mil = StructuredMilestone(self.env, name, db=db) mil.delete(db=db) db.commit() req.redirect(req.href.admin(cat, page)) # Set default milestone elif req.args.get('apply'): if req.args.get('default'): name = req.args.get('default') self.config.set('ticket', 'default_milestone', name) self.config.save() req.redirect(req.href.admin(cat, page)) data = { 'view': 'list', 'default': self.config.get('ticket', 'default_milestone'), } # Get ticket count db = self.env.get_db_cnx() cursor = db.cursor() milestones = [] structured_milestones = StructuredMilestone.select(self.env) mil_names = self._get_mil_names(structured_milestones) cursor.execute("SELECT milestone, COUNT(*) FROM ticket " "WHERE milestone IN (%s) GROUP BY milestone" % ("%s,"*len(mil_names))[:-1], mil_names) mil_tkt_quantity = {} for mil, cnt in cursor: mil_tkt_quantity[mil]=cnt data.update({ 'date_hint': get_date_format_hint(), 'milestones': [(mil, 0) for mil in structured_milestones],# we recover this anyway 'structured_milestones': structured_milestones, 'milestone_tickets_quantity': mil_tkt_quantity, 'max_milestone_level': self.milestone_levels and len(self.milestone_levels)-1 or 0, 'datetime_hint': get_datetime_format_hint() }) return 'itteco_admin_milestones.html', data
def _render_admin_panel(self, req, cat, page, milestone): perm = req.perm('admin', 'ticket/' + self._type) # Detail view? if milestone: mil = model.Milestone(self.env, milestone) if req.method == 'POST': if req.args.get('save'): perm.require('MILESTONE_MODIFY') mil.name = name = req.args.get('name') mil.due = mil.completed = None if 'due' in req.args: duedate = req.args.get('duedate') mil.due = user_time(req, parse_date, duedate, hint='datetime') \ if duedate else None if req.args.get('completed', False): completed = req.args.get('completeddate', '') mil.completed = user_time(req, parse_date, completed, hint='datetime') if mil.completed > datetime.now(utc): raise TracError( _("Completion date may not be in " "the future"), _("Invalid Completion Date")) mil.description = req.args.get('description', '') try: mil.update(author=req.authname) except self.env.db_exc.IntegrityError: raise TracError( _('The milestone "%(name)s" already ' 'exists.', name=name)) add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) now = datetime.now(req.tz) default_due = datetime(now.year, now.month, now.day, 18) if now.hour > 18: default_due += timedelta(days=1) default_due = to_datetime(default_due, req.tz) Chrome(self.env).add_wiki_toolbars(req) data = { 'view': 'detail', 'milestone': mil, 'default_due': default_due } else: ticket_default = self.config.get('ticket', 'default_milestone') retarget_default = self.config.get('milestone', 'default_retarget_to') if req.method == 'POST': # Add Milestone if req.args.get('add') and req.args.get('name'): perm.require('MILESTONE_CREATE') name = req.args.get('name') try: mil = model.Milestone(self.env, name=name) except ResourceNotFound: mil = model.Milestone(self.env) mil.name = name if req.args.get('duedate'): mil.due = user_time(req, parse_date, req.args.get('duedate'), hint='datetime') mil.insert() add_notice( req, _('The milestone "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: if mil.name is None: raise TracError(_('Invalid milestone name.')) raise TracError( _("Milestone %(name)s already exists.", name=name)) # Remove milestone elif req.args.get('remove'): perm.require('MILESTONE_DELETE') sel = req.args.get('sel') if not sel: raise TracError(_('No milestone selected')) if not isinstance(sel, list): sel = [sel] with self.env.db_transaction: for name in sel: mil = model.Milestone(self.env, name) mil.delete(author=req.authname) add_notice( req, _("The selected milestones have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default milestone elif req.args.get('apply'): save = False name = req.args.get('ticket_default') if name and name != ticket_default: self.log.info( "Setting default ticket " "milestone to %s", name) self.config.set('ticket', 'default_milestone', name) save = True retarget = req.args.get('retarget_default') if retarget and retarget != retarget_default: self.log.info( "Setting default retargeting " "milestone to %s", retarget) self.config.set('milestone', 'default_retarget_to', retarget) save = True if save: _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) # Clear defaults elif req.args.get('clear'): self.log.info("Clearing default ticket milestone " "and default retarget milestone") self.config.set('ticket', 'default_milestone', '') self.config.set('milestone', 'default_retarget_to', '') _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) # Get ticket count milestones = [(milestone, self.env.db_query( """ SELECT COUNT(*) FROM ticket WHERE milestone=%s """, (milestone.name, ))[0][0]) for milestone in model.Milestone.select(self.env)] query_href = lambda name: req.href.query({ 'groupby': 'status', 'milestone': name }) data = { 'view': 'list', 'milestones': milestones, 'query_href': query_href, 'ticket_default': ticket_default, 'retarget_default': retarget_default } Chrome(self.env).add_jquery_ui(req) data.update({ 'datetime_hint': get_datetime_format_hint(req.lc_time), }) return 'admin_milestones.html', data
def _render_admin_panel(self, req, cat, page, milestone_name): perm_cache = req.perm('admin', 'ticket/' + self._type) # Detail view if milestone_name: milestone = model.Milestone(self.env, milestone_name) milestone_module = MilestoneModule(self.env) if req.method == 'POST': if 'save' in req.args: perm_cache.require('MILESTONE_MODIFY') if milestone_module.save_milestone(req, milestone): req.redirect(req.href.admin(cat, page)) elif 'cancel' in req.args: req.redirect(req.href.admin(cat, page)) Chrome(self.env).add_wiki_toolbars(req) data = {'view': 'detail', 'milestone': milestone, 'default_due': milestone_module.get_default_due(req)} # List view else: ticket_default = self.config.get('ticket', 'default_milestone') retarget_default = self.config.get('milestone', 'default_retarget_to') if req.method == 'POST': # Add milestone if 'add' in req.args and req.args.get('name'): perm_cache.require('MILESTONE_CREATE') name = req.args.get('name') try: model.Milestone(self.env, name=name) except ResourceNotFound: milestone = model.Milestone(self.env) milestone.name = name MilestoneModule(self.env).save_milestone(req, milestone) req.redirect(req.href.admin(cat, page)) else: add_warning(req, _('Milestone "%(name)s" already ' 'exists, please choose another ' 'name.', name=name)) # Remove milestone elif 'remove' in req.args: save = False perm_cache.require('MILESTONE_DELETE') sel = req.args.getlist('sel') if not sel: raise TracError(_("No milestone selected")) with self.env.db_transaction: for name in sel: milestone = model.Milestone(self.env, name) milestone.move_tickets(None, req.authname, "Milestone deleted") milestone.delete() if name == ticket_default: self.config.set('ticket', 'default_milestone', '') save = True if name == retarget_default: self.config.set('milestone', 'default_retarget_to', '') save = True if save: self._save_config(req) add_notice(req, _("The selected milestones have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default milestone elif 'apply' in req.args: save = False name = req.args.get('ticket_default') if name and name != ticket_default: self.log.info("Setting default ticket " "milestone to %s", name) self.config.set('ticket', 'default_milestone', name) save = True retarget = req.args.get('retarget_default') if retarget and retarget != retarget_default: self.log.info("Setting default retargeting " "milestone to %s", retarget) self.config.set('milestone', 'default_retarget_to', retarget) save = True if save: self._save_config(req) req.redirect(req.href.admin(cat, page)) # Clear default milestone elif 'clear' in req.args: self.log.info("Clearing default ticket milestone " "and default retarget milestone") self.config.set('ticket', 'default_milestone', '') self.config.set('milestone', 'default_retarget_to', '') self._save_config(req) req.redirect(req.href.admin(cat, page)) query_href = lambda name: req.href.query({'groupby': 'status', 'milestone': name}) data = {'view': 'list', 'milestones': model.Milestone.select(self.env), 'query_href': query_href, 'ticket_default': ticket_default, 'retarget_default': retarget_default} Chrome(self.env).add_jquery_ui(req) data.update({ 'datetime_hint': get_datetime_format_hint(req.lc_time), }) return 'admin_milestones.html', data
def _render_admin_panel(self, req, cat, page, milestone): req.perm.require('MILESTONE_VIEW') # Detail view? if milestone: mil = model.Milestone(self.env, milestone) if req.method == 'POST': if req.args.get('save'): req.perm.require('MILESTONE_MODIFY') mil.name = req.args.get('name') mil.due = mil.completed = None due = req.args.get('duedate', '') if due: mil.due = parse_date(due, req.tz) if req.args.get('completed', False): completed = req.args.get('completeddate', '') mil.completed = parse_date(completed, req.tz) if mil.completed > datetime.now(utc): raise TracError(_('Completion date may not be in ' 'the future'), _('Invalid Completion Date')) mil.description = req.args.get('description', '') mil.update() add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) add_script(req, 'common/js/wikitoolbar.js') data = {'view': 'detail', 'milestone': mil} else: default = self.config.get('ticket', 'default_milestone') if req.method == 'POST': # Add Milestone if req.args.get('add') and req.args.get('name'): req.perm.require('MILESTONE_CREATE') name = req.args.get('name') try: model.Milestone(self.env, name=name) except ResourceNotFound: mil = model.Milestone(self.env) mil.name = name if req.args.get('duedate'): mil.due = parse_date(req.args.get('duedate'), req.tz) mil.insert() add_notice(req, _('The milestone "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: raise TracError(_('Milestone %s already exists.') % name) # Remove milestone elif req.args.get('remove'): req.perm.require('MILESTONE_DELETE') sel = req.args.get('sel') if not sel: raise TracError(_('No milestone selected')) if not isinstance(sel, list): sel = [sel] db = self.env.get_db_cnx() for name in sel: mil = model.Milestone(self.env, name, db=db) mil.delete(db=db, author=req.authname) db.commit() add_notice(req, _('The selected milestones have been ' 'removed.')) req.redirect(req.href.admin(cat, page)) # Set default milestone elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info('Setting default milestone to %s', name) self.config.set('ticket', 'default_milestone', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) # Get ticket count db = self.env.get_db_cnx() cursor = db.cursor() milestones = [] for milestone in model.Milestone.select(self.env, db=db): cursor.execute("SELECT COUNT(*) FROM ticket " "WHERE milestone=%s", (milestone.name, )) milestones.append((milestone, cursor.fetchone()[0])) data = {'view': 'list', 'milestones': milestones, 'default': default} data.update({ 'date_hint': get_date_format_hint(), 'datetime_hint': get_datetime_format_hint() }) return 'admin_milestones.html', data
def _render_admin_panel(self, req, cat, page, version): # Detail view? if version: ver = model.Version(self.env, version) if req.method == 'POST': if req.args.get('save'): ver.name = req.args.get('name') if req.args.get('time'): ver.time = parse_date(req.args.get('time'), req.tz) else: ver.time = None # unset ver.description = req.args.get('description') ver.update() add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) add_script(req, 'common/js/wikitoolbar.js') data = {'view': 'detail', 'version': ver} else: default = self.config.get('ticket', 'default_version') if req.method == 'POST': # Add Version if req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: model.Version(self.env, name=name) except ResourceNotFound: ver = model.Version(self.env) ver.name = name if req.args.get('time'): ver.time = parse_date(req.args.get('time'), req.tz) ver.insert() add_notice(req, _('The version "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: raise TracError(_('Version %s already exists.') % name) # Remove versions elif req.args.get('remove'): sel = req.args.get('sel') if not sel: raise TracError(_('No version selected')) if not isinstance(sel, list): sel = [sel] db = self.env.get_db_cnx() for name in sel: ver = model.Version(self.env, name, db=db) ver.delete(db=db) db.commit() add_notice(req, _('The selected versions have been ' 'removed.')) req.redirect(req.href.admin(cat, page)) # Set default version elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info('Setting default version to %s', name) self.config.set('ticket', 'default_version', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) data = {'view': 'list', 'versions': model.Version.select(self.env), 'default': default} data.update({ 'datetime_hint': get_datetime_format_hint() }) return 'admin_versions.html', data
def _render_admin_panel(self, req, cat, page, version): # Detail view? if version: ver = model.Version(self.env, version) if req.method == 'POST': if req.args.get('save'): ver.name = name = req.args.get('name') if req.args.get('time'): ver.time = user_time(req, parse_date, req.args.get('time'), hint='datetime') else: ver.time = None # unset ver.description = req.args.get('description') try: ver.update() except self.env.db_exc.IntegrityError: raise TracError(_('The version "%(name)s" already ' 'exists.', name=name)) add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) Chrome(self.env).add_wiki_toolbars(req) data = {'view': 'detail', 'version': ver} else: default = self.config.get('ticket', 'default_version') if req.method == 'POST': # Add Version if req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: ver = model.Version(self.env, name=name) except ResourceNotFound: ver = model.Version(self.env) ver.name = name if req.args.get('time'): ver.time = user_time(req, parse_date, req.args.get('time'), hint='datetime') ver.insert() add_notice(req, _('The version "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: if ver.name is None: raise TracError(_("Invalid version name.")) raise TracError(_("Version %(name)s already exists.", name=name)) # Remove versions elif req.args.get('remove'): sel = req.args.get('sel') if not sel: raise TracError(_("No version selected")) if not isinstance(sel, list): sel = [sel] with self.env.db_transaction: for name in sel: ver = model.Version(self.env, name) ver.delete() add_notice(req, _("The selected versions have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default version elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info("Setting default version to %s", name) self.config.set('ticket', 'default_version', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) data = {'view': 'list', 'versions': model.Version.select(self.env), 'default': default} Chrome(self.env).add_jquery_ui(req) data.update({ 'datetime_hint': get_datetime_format_hint(req.lc_time), }) return 'admin_versions.html', data
def render_admin_panel(self, req, cat, page, blogpart): req.perm.require('WIKI_ADMIN') # Detail view? if blogpart: ver = model.BlogPart(self.env, blogpart) if req.method == 'POST': if req.args.get('save'): ver.name = req.args.get('name') if req.args.get('time'): ver.time = parse_date(req.args.get('time')) else: ver.time = None # unset ver.description = req.args.get('description', '') ver.header = req.args.get('header', '') ver.body = req.args.get('body', '') ver.argnum = int(req.args.get('argnum', 0)) ver.update() req.redirect(req.href.admin(cat, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(cat, page)) add_script(req, 'common/js/wikitoolbar.js') data = {'view': 'detail', 'blogpart': ver} else: if req.method == 'POST': # Add BlogPart if req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: model.BlogPart(self.env, name=name) except ResourceNotFound: ver = model.BlogPart(self.env) ver.name = name if req.args.get('time'): ver.time = parse_date(req.args.get('time')) ver.description = req.args.get('description', '') ver.header = req.args.get('header', '') ver.body = req.args.get('body', '') ver.argnum = int(req.args.get('argnum', 0)) ver.insert() req.redirect(req.href.admin(cat, page)) else: raise TracError( _('BlogPart %s already exists.') % name) # Remove blogparts elif req.args.get('remove'): sel = req.args.get('sel') if not sel: raise TracError(_('No blogpart selected')) if not isinstance(sel, list): sel = [sel] db = self.env.get_db_cnx() for name in sel: ver = model.BlogPart(self.env, name, db=db) ver.delete(db=db) db.commit() req.redirect(req.href.admin(cat, page)) # Set default blogpart elif req.args.get('apply'): if req.args.get('default'): name = req.args.get('default') self.log.info('Setting default blogpart to %s', name) self.config.set('ticket', 'default_blogpart', name) self.config.save() req.redirect(req.href.admin(cat, page)) data = { 'view': 'list', 'blogparts': model.BlogPart.select(self.env), 'default': self.config.get('ticket', 'default_blogpart'), } data.update({'datetime_hint': get_datetime_format_hint()}) return 'admin_blogparts.html', data