def matches(self, event): if event.realm != "ticket": return if event.category not in ('created', 'changed', 'attachment added'): return ticket = event.target try: component = model.Component(self.env, ticket['component']) if not component.owner: return if re.match(r'^[^@]+@.+', component.owner): sid, auth, addr = None, 0, component.owner else: sid, auth, addr = component.owner, 1, None # Default subscription for s in self.default_subscriptions(): yield (s[0], s[1], sid, auth, addr, None, s[2], s[3]) if sid: klass = self.__class__.__name__ for s in Subscription.find_by_sids_and_class( self.env, ((sid, auth), ), klass): yield s.subscription_tuple() except: self.log.debug("Component for ticket (%s) not found" % ticket['id'])
def pre_process_request(self, req, handler): if req.path_info.startswith('/admin/ticket/components/'): if req.method == "POST" and 'renamechildren' in req.args: if req.args.get('renamechildren') != 'on': return handler # Let trac handle this update # First process the parent component. parentcomponentname = req.path_info[25:] parentcomponent = model.Component(self.env, parentcomponentname) parentcomponent.name = req.args.get('name') parentcomponent.owner = req.args.get('owner') parentcomponent.description = req.args.get('description') try: parentcomponent.update() except self.env.db_exc.IntegrityError: raise TracError( _('The component "%(name)s" already ' 'exists.', name=parentcomponentname)) # Now update the child components childcomponents = self._get_component_children( parentcomponentname) for component in childcomponents: component.name = component.name.replace( parentcomponentname, req.args.get('name'), 1) component.update() add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin('ticket', 'components')) return handler
def _always_notify_component_owner(self, ticket): try: component = model.Component(self.env, ticket['component']) except ResourceNotFound, message: self.log.warn(_("LegacyTicketSubscriber couldn't add " \ "component owner because component was not found, " \ "message: '%s'"%(message,))) return
def _new_owner(self, ticket): """Determines the new owner""" try: component = model.Component(self.env, name=ticket['component']) return component.owner except ResourceNotFound, e: self.log.warning("In %s, %s", self._op_name, to_unicode(e)) return None
def _get_component_owner(self, event, ticket, setting): try: component = model.Component(self.env, ticket['component']) if component.owner: if setting.get_user_setting(component.owner)[1]: self._log_sub(component.owner, True, setting.name) return ('email', component.owner, True, None) except ResourceNotFound, message: self.log.warn(_("LegacyTicketSubscriber couldn't add " \ "component owner because component was not found, " \ "message: '%s'"%(message,)))
def render_admin_panel(self, req, category, page, component): req.perm.require('PROJECT_SETTINGS_VIEW') # Detail view? if component: comp = model.Component(self.env, component) cprojects = self.__SmpModel.get_projects_component(comp.name) cprojects = [cproj[0] for cproj in cprojects] all_projects = self.__SmpModel.get_all_projects() if req.method == 'POST': if req.args.get('apply'): req.perm.require('PROJECT_ADMIN') cprojects = req.args.get('sel') self.__SmpModel.delete_component_projects(comp.name) if cprojects and 'all' not in cprojects: self.__SmpModel.insert_component_projects( comp.name, cprojects) add_notice(req, _('Your changes have been saved.')) req.redirect(req.href.admin(category, page)) elif req.args.get('cancel'): req.redirect(req.href.admin(category, page)) try: Chrome(self.env).add_wiki_toolbars(req) except AttributeError: pass data = { 'view': 'detail', 'component': comp, 'component_projects': cprojects, 'projects': all_projects } else: projects = {} for comp in model.Component.select(self.env): comp_name = comp.name cprojects = self.__SmpModel.get_projects_component(comp_name) cprojects = [cproj[0] for cproj in cprojects] projects[comp_name] = cprojects data = { 'view': 'list', 'components': model.Component.select(self.env), 'projects': projects } return 'smp_admin_components.html', data
def pre_process_request(self, req, handler): if 'TICKET_ADMIN' in req.perm and req.method == 'POST' \ and req.path_info.startswith('/admin/ticket/components'): if req.args.get('save') and req.args.get('name'): old_name = req.args.get('old_name') new_name = req.args.get('name') old_cc = DefaultCC(self.env, old_name) new_cc = DefaultCC(self.env, new_name) new_cc.cc = req.args.get('defaultcc', '') if old_name == new_name: old_cc.delete() new_cc.insert() else: try: model.Component(self.env, new_name) except ResourceNotFound: old_cc.delete() new_cc.insert() elif req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: model.Component(self.env, name) except ResourceNotFound: cc = DefaultCC(self.env, name) cc.name = name cc.cc = req.args.get('defaultcc', '') cc.insert() elif req.args.get('remove'): if req.args.get('sel'): # If only one component is selected, we don't receive # an array, but a string preventing us from looping in # that case. if isinstance(req.args.get('sel'), basestring): cc = DefaultCC(self.env, req.args.get('sel')) cc.delete() else: for name in req.args.get('sel'): cc = DefaultCC(self.env, name) cc.delete() return handler
def _always_notify_component_owner(self, ticket): try: component = model.Component(self.env, ticket['component']) if component.owner: notify = self._check_user_setting('notify_component_owner', component.owner) if notify is None: notify = self.always_notify_component_owner if notify: self._log_sub(component.owner, True, 'always_notify_component_owner') return ('email', component.owner, True, None) except ResourceNotFound, message: self.log.warn(_("LegacyTicketSubscriber couldn't add " \ "component owner because component was not found, " \ "message: '%s'"%(message,)))
def _do_chown(self, name, owner): component = model.Component(self.env, name) component.owner = owner component.update()
def _do_remove(self, name): model.Component(self.env, name).delete()
def _do_rename(self, name, newname): component = model.Component(self.env, name) component.name = newname component.update()
def _do_add(self, name, owner=None): component = model.Component(self.env) component.name = name component.owner = owner component.insert()
def _insert_component(self, name, owner): component = model.Component(self.env) component.name = name component.owner = owner component.insert()
def do_rename(db): component = model.Component(self.env, name, db=db) component.name = newname component.update()
def _new_owner(self, ticket): """Determines the new owner""" component = model.Component(self.env, name=ticket['component']) self.env.log.debug("component %s, owner %s" % (component, component.owner)) return component.owner
def _render_admin_panel(self, req, cat, page, component): # Detail view? if component: comp = model.Component(self.env, component) if req.method == 'POST': if req.args.get('save'): comp.name = name = req.args.get('name') comp.owner = req.args.get('owner') comp.description = req.args.get('description') try: comp.update() except self.env.db_exc.IntegrityError: raise TracError( _('Component "%(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', 'component': comp} else: default = self.config.get('ticket', 'default_component') if req.method == 'POST': # Add Component if req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: comp = model.Component(self.env, name=name) except ResourceNotFound: comp = model.Component(self.env) comp.name = name if req.args.get('owner'): comp.owner = req.args.get('owner') comp.insert() add_notice( req, _('The component "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: if comp.name is None: raise TracError(_("Invalid component name.")) raise TracError( _('Component "%(name)s" already ' 'exists.', name=name)) # Remove components elif req.args.get('remove'): sel = req.args.get('sel') if not sel: raise TracError(_('No component selected')) if not isinstance(sel, list): sel = [sel] with self.env.db_transaction: for name in sel: model.Component(self.env, name).delete() add_notice( req, _("The selected components have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default component elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info("Setting default component to %s", name) self.config.set('ticket', 'default_component', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) data = { 'view': 'list', 'components': list(model.Component.select(self.env)), 'default': default } owners = TicketSystem(self.env).get_allowed_owners() if owners is not None: owners.insert(0, '') data.update({'owners': owners}) return 'admin_components.html', data
def _render_admin_panel(self, req, cat, page, component): # Detail view? if component: comp = model.Component(self.env, component) if req.method == 'POST': if req.args.get('save'): comp.name = req.args.get('name') comp.owner = req.args.get('owner') comp.description = req.args.get('description') comp.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', 'component': comp} else: default = self.config.get('ticket', 'default_component') if req.method == 'POST': # Add Component if req.args.get('add') and req.args.get('name'): name = req.args.get('name') try: comp = model.Component(self.env, name=name) except ResourceNotFound: comp = model.Component(self.env) comp.name = name if req.args.get('owner'): comp.owner = req.args.get('owner') comp.insert() add_notice( req, _('The component "%(name)s" has been ' 'added.', name=name)) req.redirect(req.href.admin(cat, page)) else: if comp.name is None: raise TracError(_('Invalid component name.')) raise TracError( _('Component %(name)s already exists.', name=name)) # Remove components elif req.args.get('remove'): sel = req.args.get('sel') if not sel: raise TracError(_('No component selected')) if not isinstance(sel, list): sel = [sel] @self.env.with_transaction() def do_remove(db): for name in sel: comp = model.Component(self.env, name, db=db) comp.delete() add_notice( req, _('The selected components have been ' 'removed.')) req.redirect(req.href.admin(cat, page)) # Set default component elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info('Setting default component to %s', name) self.config.set('ticket', 'default_component', name) _save_config(self.config, req, self.log) req.redirect(req.href.admin(cat, page)) data = { 'view': 'list', 'components': model.Component.select(self.env), 'default': default } if self.config.getbool('ticket', 'restrict_owner'): perm = PermissionSystem(self.env) def valid_owner(username): return perm.get_user_permissions(username).get('TICKET_MODIFY') data['owners'] = [ username for username, name, email in self.env.get_known_users() if valid_owner(username) ] data['owners'].insert(0, '') data['owners'].sort() else: data['owners'] = None return 'admin_components.html', data
def do_chown(db): component = model.Component(self.env, name, db=db) component.owner = owner component.update()
def do_remove(db): component = model.Component(self.env, name, db=db) component.delete()
def _render_admin_panel(self, req, cat, page, component): # Detail view? if component: comp = model.Component(self.env, component) if req.method == 'POST': if req.args.get('save'): comp.name = req.args.get('name') comp.owner = req.args.get('owner') comp.description = req.args.get('description') comp.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', 'component': comp} else: default = self.config.get('ticket', 'default_component') if req.method == 'POST': # Add Component if req.args.get('add') and req.args.get('name'): comp = model.Component(self.env) comp.name = req.args.get('name') comp.owner = req.args.get('owner') comp.insert() add_notice(req, _('The component "%(name)s" has been ' 'added.', name=comp.name)) req.redirect(req.href.admin(cat, page)) # Remove components elif req.args.get('remove'): sel = req.args.getlist('sel') if not sel: raise TracError(_("No component selected")) with self.env.db_transaction: for name in sel: model.Component(self.env, name).delete() if name == default: self.config.set('ticket', 'default_component', '') self._save_config(req) add_notice(req, _("The selected components have been " "removed.")) req.redirect(req.href.admin(cat, page)) # Set default component elif req.args.get('apply'): name = req.args.get('default') if name and name != default: self.log.info("Setting default component to %s", name) self.config.set('ticket', 'default_component', name) self._save_config(req) req.redirect(req.href.admin(cat, page)) # Clear default component elif req.args.get('clear'): self.log.info("Clearing default component") self.config.set('ticket', 'default_component', '') self._save_config(req) req.redirect(req.href.admin(cat, page)) data = {'view': 'list', 'components': list(model.Component.select(self.env)), 'default': default} owners = TicketSystem(self.env).get_allowed_owners() if owners is not None: owners.insert(0, '') data.update({'owners': owners}) return 'admin_components.html', data
def _insert_component(self, name): component = model.Component(self.env) component.name = name component.insert()
def do_remove(db): for name in sel: comp = model.Component(self.env, name, db=db) comp.delete()