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', '')
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 []
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 []
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
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', '')
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
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
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
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
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
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 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