예제 #1
0
    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'])
예제 #2
0
    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
예제 #3
0
 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
예제 #5
0
 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,)))
예제 #6
0
    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
예제 #7
0
 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
예제 #8
0
 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,)))
예제 #9
0
 def _do_chown(self, name, owner):
     component = model.Component(self.env, name)
     component.owner = owner
     component.update()
예제 #10
0
 def _do_remove(self, name):
     model.Component(self.env, name).delete()
예제 #11
0
 def _do_rename(self, name, newname):
     component = model.Component(self.env, name)
     component.name = newname
     component.update()
예제 #12
0
 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()
예제 #14
0
 def do_rename(db):
     component = model.Component(self.env, name, db=db)
     component.name = newname
     component.update()
예제 #15
0
 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
예제 #16
0
파일: admin.py 프로젝트: dammina/bloodhound
    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
예제 #17
0
    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
예제 #18
0
 def do_chown(db):
     component = model.Component(self.env, name, db=db)
     component.owner = owner
     component.update()
예제 #19
0
 def do_remove(db):
     component = model.Component(self.env, name, db=db)
     component.delete()
예제 #20
0
    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
예제 #21
0
 def _insert_component(self, name):
     component = model.Component(self.env)
     component.name = name
     component.insert()
예제 #22
0
 def do_remove(db):
     for name in sel:
         comp = model.Component(self.env, name, db=db)
         comp.delete()