Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
	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
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
	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)