def post_process_request(self, req, template, content_type): if req.perm.has_permission('TRAC_ADMIN'): # TRAC_ADMIN would have the filterer permissions by inheritance return template, content_type if req.perm.has_permission('TICKET_HIDEVALS'): fields = HideValsSystem(self.env).visible_fields(req) dont_filter = set(HideValsSystem(self.env).dont_filter) to_delete = [] base = None if req.path_info.startswith('/newticket'): base = 'newticket' elif req.path_info.startswith('/ticket'): base = 'ticket' if base: sub_hdf = req.hdf.getObj(base + '.fields').child() while sub_hdf: if sub_hdf.getObj( 'options') and sub_hdf.name() not in dont_filter: if sub_hdf.name() in fields: # If we have any values, filter what is there ###req.hdf.removeTree('newticket.fields.%s.options'%sub_hdf.name()) ###req.hdf['newticket.fields.%s.options'%sub_hdf.name()] = fields[sub_hdf.name()] # ???: Can a field have no options at this point? <NPK> opts = sub_hdf.getObj('options').child() valid_opts = set(fields[sub_hdf.name()]) opts_to_delete = [] while opts: if opts.value() not in valid_opts: opts_to_delete.append(opts.name()) opts = opts.next() for opt in opts_to_delete: req.hdf.removeTree('%s.fields.%s.options.%s' % (base, sub_hdf.name(), opt)) else: # If there are no values for this user, remove the field entirely # NOTE: Deleting in place screws up the iteration, so do it all afterwards. <NPK> to_delete.append(sub_hdf.name()) sub_hdf = sub_hdf.next() for field in to_delete: req.hdf.removeTree(base + '.fields.' + field) return template, content_type
def render_admin_panel(self, req, cat, page, path_info): db = self.env.get_db_cnx() cursor = db.cursor() field = dict([(field['name'], field) for field in TicketSystem(self.env).get_ticket_fields()])[page] cursor.execute('SELECT sid, value FROM hidevals WHERE field = %s', (field['name'],)) values = cursor.fetchall() enabled = field['name'] not in HideValsSystem(self.env).dont_filter if req.method == 'POST': if req.args.get('add'): group = req.args['group'] value = req.args['value'] if (group, value) not in values: cursor.execute('INSERT INTO hidevals (sid, field, value) VALUES (%s, %s, %s)', (group, field['name'], value)) db.commit() elif req.args.get('remove'): sel = req.args.getlist('sel') for val in sel: group, value = val.split('#', 1) cursor.execute('DELETE FROM hidevals WHERE sid = %s AND field = %s AND value = %s', (group, field['name'], value)) db.commit() elif req.args.get('toggle'): new_val = HideValsSystem(self.env).dont_filter[:] if enabled: new_val.append(field['name']) else: new_val.remove(field['name']) self.config.set('hidevals', 'dont_filter', ', '.join(sorted(new_val))) self.config.save() req.redirect(req.href.admin(cat, page)) data = {'field' : field, 'values' : [{'group': g, 'value': v} for g, v in values], 'enabled' : enabled} return 'admin_hidevals.html', data
def post_process_request(self, req, template, data, content_type): if (req.perm.has_permission('TRAC_ADMIN') or not req.perm.has_permission('TICKET_HIDEVALS') or (not req.path_info.startswith('/newticket') and not req.path_info.startswith('/ticket') and not req.path_info.startswith('/query'))): # TRAC_ADMIN would have the filterer permissions by inheritance return (template, data, content_type) else: visible_fields = HideValsSystem(self.env).visible_fields(req) self.env.log.debug("visible_fields: %s" % str(visible_fields)) dont_filter = set(HideValsSystem(self.env).dont_filter) self.env.log.debug("dont_filter: %s" % str(dont_filter)) to_delete = [] fields = data['fields'] if req.path_info.startswith( '/newticket') or req.path_info.startswith('/ticket'): for field in fields: if field['options'] and field['name'] not in dont_filter: if visible_fields.has_key(field['name']): # If we have any values, filter what is there # ???: Can a field have no options at this point? <NPK> opts = field['options'] valid_opts = visible_fields[field['name']] opts_to_delete = [] for opt in opts: if opt not in valid_opts: opts_to_delete.append(opt) for opt in opts_to_delete: self.env.log.debug( "HideValsFilter: '%s' option removed from '%s' field" % (opt, field['name'])) opts.remove(opt) else: # If there are no values for this user, remove the field entirely # NOTE: Deleting in place screws up the iteration, so do it all afterwards. <NPK> to_delete.append(field) for field in to_delete: self.env.log.debug("HideValsFilter: '%s' field removed" % field['name']) fields.remove(field) elif req.path_info.startswith('/query'): for field_name, field_value in fields.iteritems(): if field_value.has_key('options') and field_value[ 'options'] and field_name not in dont_filter: if visible_fields.has_key(field_name): # If we have any values, filter what is there # ???: Can a field have no options at this point? <NPK> opts = field_value['options'] valid_opts = visible_fields[field_name] opts_to_delete = [] for opt in opts: if opt not in valid_opts: opts_to_delete.append(opt) for opt in opts_to_delete: self.env.log.debug( "HideValsFilter: '%s' option removed from '%s' field" % (opt, field_name)) opts.remove(opt) else: # If there are no values for this user, remove the field entirely # NOTE: Deleting in place screws up the iteration, so do it all afterwards. <NPK> to_delete.append(field_name) for field_name in to_delete: self.env.log.debug("HideValsFilter: '%s' field removed" % field_name) del fields[field_name] return (template, data, content_type)
def post_process_request(self, req, template, data, content_type): if (req.perm.has_permission('TRAC_ADMIN') or not req.perm.has_permission('TICKET_HIDEVALS') or (not req.path_info.startswith('/newticket') and not req.path_info.startswith('/ticket') and not req.path_info.startswith('/query'))): # TRAC_ADMIN would have the filterer permissions by inheritance return (template, data, content_type) else: visible_fields = HideValsSystem(self.env).visible_fields(req) self.env.log.debug("visible_fields: %s" % str(visible_fields)) dont_filter = set(HideValsSystem(self.env).dont_filter) self.env.log.debug("dont_filter: %s" % str(dont_filter)) to_delete = [] fields = data['fields'] if req.path_info.startswith('/newticket') or req.path_info.startswith('/ticket'): for field in fields: if field['options'] and field['name'] not in dont_filter: if visible_fields.has_key(field['name']): # If we have any values, filter what is there # ???: Can a field have no options at this point? <NPK> opts = field['options'] valid_opts = visible_fields[field['name']] opts_to_delete = [] for opt in opts: if opt not in valid_opts: opts_to_delete.append(opt) for opt in opts_to_delete: self.env.log.debug("HideValsFilter: '%s' option removed from '%s' field" % (opt, field['name'])) opts.remove(opt) else: # If there are no values for this user, remove the field entirely # NOTE: Deleting in place screws up the iteration, so do it all afterwards. <NPK> to_delete.append(field) for field in to_delete: self.env.log.debug("HideValsFilter: '%s' field removed" % field['name']) fields.remove(field) elif req.path_info.startswith('/query'): for field_name, field_value in fields.iteritems(): if field_value.has_key('options') and field_value['options'] and field_name not in dont_filter: if visible_fields.has_key(field_name): # If we have any values, filter what is there # ???: Can a field have no options at this point? <NPK> opts = field_value['options'] valid_opts = visible_fields[field_name] opts_to_delete = [] for opt in opts: if opt not in valid_opts: opts_to_delete.append(opt) for opt in opts_to_delete: self.env.log.debug("HideValsFilter: '%s' option removed from '%s' field" % (opt, field_name)) opts.remove(opt) else: # If there are no values for this user, remove the field entirely # NOTE: Deleting in place screws up the iteration, so do it all afterwards. <NPK> to_delete.append(field_name) for field_name in to_delete: self.env.log.debug("HideValsFilter: '%s' field removed" % field_name) del fields[field_name] return (template, data, content_type)