Esempio n. 1
0
    def ticket_created(self, ticket):
        default_cc = DefaultCC(self.env, ticket=ticket).cc

        if not default_cc:
            return

        if ticket['cc']:
            default_cc.append(ticket['cc'])

        default_cc = list(set(default_cc))

        ticket['cc'] = ', '.join(default_cc)
        ticket.save_changes('DefaultCC Plugin', '')
Esempio n. 2
0
    def validate_ticket(self, req, ticket):
        comp_default_cc = DefaultCC(self.env, ticket['component'])
        if comp_default_cc and comp_default_cc.cc:
            if ticket['cc']:
                ticket['cc'] += ', '
            ticket['cc'] += comp_default_cc.cc

        return []
Esempio n. 3
0
    def validate_ticket(self, req, ticket):
        if 'preview' not in req.args and 'comment' not in req.args:
            comp_default_cc = DefaultCC(self.env, ticket['component'])
            if comp_default_cc and comp_default_cc.cc:
                if ticket['cc']:
                    ticket['cc'] += ', '
                ticket['cc'] += comp_default_cc.cc

        return []
Esempio n. 4
0
    def filter_stream(self, req, method, filename, stream, data):
        if 'TICKET_ADMIN' in req.perm:
            if req.path_info == '/admin/ticket/components' or req.path_info == '/admin/ticket/components/':
                components = data.get('components')
                # 'components' will be None if component with specified name already exists.
                if not components:
                    return stream
                
                default_ccs = DefaultCC.select(self.env)

                stream = stream | Transformer('//table[@id="complist"]/thead/tr') \
                    .append(tag.th('Default CC'))

                filter = Transformer('//table[@id="complist"]/tbody')
                default_comp = self.config.get('ticket', 'default_component')
                for comp in components:
                    if default_comp == comp.name:
                        default_tag = tag.input(type='radio', name='default', value=comp.name, checked='checked')
                    else:
                        default_tag = tag.input(type='radio', name='default', value=comp.name)

                    if comp.name in default_ccs:
                        default_cc = default_ccs[comp.name]
                    else:
                        default_cc = ''

                    filter = filter.append(tag.tr(tag.td(tag.input(type='checkbox', name='sel', value=comp.name), class_='sel'),
                                                  tag.td(tag.a(comp.name, href=req.href.admin('ticket', 'components') + '/' + comp.name), class_='name'),
                                                  tag.td(comp.owner, class_='owner'),
                                                  tag.td(default_tag, class_='default'),
                                                  tag.td(default_cc, class_='defaultcc')))
                return stream | filter

            elif req.path_info.startswith('/admin/ticket/components/') and data.get('component'):
                cc = DefaultCC(self.env, data.get('component').name)
                filter = Transformer('//form[@id="modcomp"]/fieldset/div[@class="buttons"]')
                filter = filter.before(tag.div("Default CC:",
                                               tag.br(),
                                               tag.input(type="text", name="defaultcc", value=cc.cc),
                                               class_="field")) \
                                               .before(tag.input(type='hidden', name='old_name', value=cc.name))
                return stream | filter

        return stream
Esempio n. 5
0
    def ticket_created(self, ticket):
        comp_default_cc = DefaultCC(self.env, ticket['component'])

        if not comp_default_cc or not comp_default_cc.cc:
            return

        if ticket['cc']:
            ticket['cc'] += ', '
        ticket['cc'] += comp_default_cc.cc
        ticket.save_changes('DefaultCC Plugin', '')
Esempio n. 6
0
    def filter_stream(self, req, method, filename, stream, data):
        if 'TICKET_ADMIN' in req.perm and \
                req.path_info.startswith('/admin/ticket/components'):
            if data.get('component'):
                cc = DefaultCC(self.env, data.get('component').name)
                filter = Transformer('//form[@class="mod"]/fieldset'
                                     '/div[@class="field"][2]')
                filter = filter.after(tag.div("Default CC:",
                                              tag.br(),
                                              tag.input(type='text',
                                                        name='defaultcc',
                                                        value=cc.cc),
                                              class_='field')) \
                               .before(tag.input(type='hidden',
                                                 name='old_name',
                                                 value=cc.name))
                return stream | filter
            else:
                filter = Transformer('//form[@id="addcomponent"]'
                                     '/fieldset/div[@class="buttons"]')
                stream |= filter.before(
                    tag.div("Default CC:",
                            tag.br(),
                            tag.input(type='text', name='defaultcc'),
                            class_='field'))

                default_ccs = DefaultCC.select(self.env)

                stream |= Transformer('//table[@id="complist"]/thead'
                                      '/tr/th[3]') \
                          .after(tag.th('Default CC'))

                components = data.get('components')
                if components:
                    func = self._inject_default_cc_cols(
                        default_ccs, components)
                    stream |= Transformer('//table[@id="complist"]'
                                          '/tbody/tr').apply(func)
                return stream

        return stream
Esempio n. 7
0
    def pre_process_request(self, req, handler):

        field_name = self._get_field_name(req.args)

        if 'TICKET_ADMIN' in req.perm and req.method == 'POST' and \
           req.path_info.startswith('/admin/ticket/') and field_name:

            cc = DefaultCC(self.env, field=field_name)
            if req.args.get('save'):
                cc.delete(req.args.get('old_name'))
                cc.insert(req.args.get('name'), req.args.get('defaultcc'))
            elif req.args.get('remove'):
                if req.args.get('sel'):
                    if isinstance(req.args.get('sel'), basestring):
                        cc.delete(req.args.get('sel'))
                    else:
                        for name in req.args.get('sel'):
                            cc.delete(name)

        return handler
Esempio n. 8
0
    def filter_stream(self, req, method, filename, stream, data):
        if 'TICKET_ADMIN' in req.perm and req.path_info.startswith('/admin/ticket/components'):
            if data.get('components'):
                filter = Transformer('//form[@id="addcomponent"]/fieldset/div[@class="buttons"]')
                stream = stream | filter.before(tag.div("Default CC:",
                                                tag.br(),
                                                tag.input(type='text', name='defaultcc'),
                                                class_='field'))

                default_ccs = DefaultCC.select(self.env)

                stream = stream | Transformer('//table[@id="complist"]/thead/tr') \
                    .append(tag.th('Default CC'))

                filter = Transformer('//table[@id="complist"]/tbody')
                default_comp = self.config.get('ticket', 'default_component')
                for comp in data.get('components'):
                    if comp.name == default_comp:
                        default_tag = tag.input(type='radio', name='default', value=comp.name, checked='checked')
                    else:
                        default_tag = tag.input(type='radio', name='default', value=comp.name)

                    if comp.name in default_ccs:
                        default_cc = default_ccs[comp.name]
                    else:
                        default_cc = ''

                    filter = filter.append(tag.tr(tag.td(tag.input(type='checkbox', name='sel', value=comp.name), class_='sel'),
                                                  tag.td(tag.a(comp.name, href=req.href.admin('ticket', 'components') + '/' + comp.name), class_='name'),
                                                  tag.td(comp.owner, class_='owner'),
                                                  tag.td(default_tag, class_='default'),
                                                  tag.td(default_cc, class_='defaultcc')))
                return stream | filter

            elif data.get('component'):
                cc = DefaultCC(self.env, data.get('component').name)
                filter = Transformer('//form[@id="modcomp"]/fieldset/div[@class="buttons"]')
                filter = filter.before(tag.div("Default CC:",
                                               tag.br(),
                                               tag.input(type='text', name='defaultcc', value=cc.cc),
                                               class_='field')) \
                                               .before(tag.input(type='hidden', name='old_name', value=cc.name))
                return stream | filter

        return stream
Esempio n. 9
0
    def filter_stream(self, req, method, filename, stream, data):
        if 'TICKET_ADMIN' in req.perm and \
                req.path_info.startswith('/admin/ticket/components'):
            if data.get('component'):
                cc = DefaultCC(self.env, data.get('component').name)
                filter = Transformer('//form[@id="modcomp"]/fieldset'
                                     '/div[@class="field"][2]')
                filter = filter.after(tag.div("Default CC:",
                                              tag.br(),
                                              tag.input(type='text',
                                                        name='defaultcc',
                                                        value=cc.cc),
                                              class_='field')) \
                               .before(tag.input(type='hidden',
                                                 name='old_name',
                                                 value=cc.name))
                return stream | filter
            else:
                filter = Transformer('//form[@id="addcomponent"]'
                                     '/fieldset/div[@class="buttons"]')
                stream |= filter.before(tag.div("Default CC:",
                                                tag.br(),
                                                tag.input(type='text',
                                                          name='defaultcc'),
                                                class_='field'))

                default_ccs = DefaultCC.select(self.env)

                stream |= Transformer('//table[@id="complist"]/thead/tr') \
                          .append(tag.th('Default CC'))

                for i, comp in enumerate(data.get('components')):
                    if comp.name in default_ccs:
                        default_cc = default_ccs[comp.name]
                    else:
                        default_cc = ''
                    filter = Transformer('//table[@id="complist"]'
                                         '/tbody/tr[%d]' % (i + 1))
                    stream |= filter.append(tag.td(default_cc,
                                                   class_='defaultcc'))
                return stream

        return stream
Esempio n. 10
0
    def filter_stream(self, req, method, filename, stream, data):

        field_name = self._get_field_name(req.args)

        if 'TICKET_ADMIN' in req.perm and field_name and \
           req.path_info.startswith('/admin/ticket'):

            if field_name in self._non_abstract_enums:
                field_objects = data.get(field_name + 's')
            else:
                field_objects = data.get('enums')

            default_ccs = DefaultCC.select(self.env, field_name)

            if field_objects:
                # list of field objects

                stream = stream | Transformer(
                    '//table[@class="listing"]/thead/tr').append(
                        tag.th('CC'))

                if field_name == 'component':
                    transformer = Transformer('//table[@id="complist"]/tbody')
                    default_comp = self.config.get(
                        'ticket', 'default_component')

                for idx, field_object in enumerate(field_objects):

                    # Milestone object can be a tuple :/
                    try:
                        field_object_name = field_object.name
                    except AttributeError:
                        field_object_name = field_object[0].name

                    if field_object_name in default_ccs:
                        default_cc = default_ccs[field_object_name]
                    else:
                        default_cc = ''

                    # Annoyingly, we can't just append to the row if the
                    # collection is components, it appears to blat it for
                    # rendering later so you end up with no rows
                    # This may be due to the collection being a generator,
                    # but then again, who knows?
                    if field_name == 'component':

                        if default_comp == field_object_name:
                            default_tag = tag.input(
                                type='radio', name='default',
                                value=field_object_name, checked='checked')
                        else:
                            default_tag = tag.input(
                                type='radio', name='default',
                                value=field_object_name)

                        transformer = transformer.append(
                            tag.tr(
                                tag.td(
                                    tag.input(type='checkbox', name='sel',
                                              value=field_object_name),
                                    class_='sel'),
                                tag.td(
                                    tag.a(field_object_name,
                                          href=req.href.admin(
                                              'ticket', 'components') + '/' + \
                                          field_object_name),
                                    class_='name'),
                                tag.td(field_object.owner, class_='owner'),
                                tag.td(default_tag, class_='default'),
                                tag.td(default_cc, class_='defaultcc')
                            )
                        )

                    else:
                        stream = stream | Transformer(
                            '//table[@class="listing"]/tbody/tr[%s]' % (idx+1,)
                            ).append(tag.td(default_cc, class_='defaultcc'))

                if field_name == 'component':
                    return stream | transformer

            else:
                # edit field object
                if field_name in self._non_abstract_enums:
                    field_object = data.get(field_name)
                else:
                    field_object = data.get('enum')

                if field_object:

                    # Milestone object can be a tuple :/
                    try:
                        field_object_name = field_object.name
                    except AttributeError:
                        field_object_name = field_object[0]

                    if field_object_name in default_ccs:
                        default_cc = default_ccs[field_object_name]
                    else:
                        default_cc = ''

                    transformer = Transformer(
                        '//form[@class="mod"]/fieldset/div[@class="buttons"]')
                    transformer = transformer.before(
                        tag.div(tag.label("Default CC:"), tag.br(),
                                tag.input(type="text", name="defaultcc",
                                          value=default_cc),
                                class_="field")
                        ).before(tag.input(type='hidden', name='old_name',
                                           value=field_object_name))

                    return stream | transformer

        return stream
Esempio n. 11
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
Esempio n. 12
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
Esempio n. 13
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'):
             cc = DefaultCC(self.env, req.args.get('old_name'))
             cc.delete()
             cc.name = req.args.get('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'), unicode) or isinstance(req.args.get('sel'), str):
                     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