PK„6“×2EGG-INFO/dependency_links.txt PK„6\i™nnEGG-INFO/entry_points.txt[trac.plugins] hidevals.admin = hidevals.admin hidevals.api = hidevals.api hidevals.filter = hidevals.filter PK„6Îâ†EEEGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: TracHideVals Version: 1.0 Summary: Hide ticket option values from certain users. Home-page: http://trac-hacks.org/wiki/HideValsPlugin Author: Noah Kantrowitz Author-email: coderanger@yahoo.com License: BSD Description: UNKNOWN Keywords: trac plugin Platform: UNKNOWN Classifier: Framework :: Trac PK„6¢|‘õ EGG-INFO/requires.txtTracWebAdminPK„6”[vDDEGG-INFO/SOURCES.txtsetup.py TracHideVals.egg-info/PKG-INFO TracHideVals.egg-info/SOURCES.txt TracHideVals.egg-info/dependency_links.txt TracHideVals.egg-info/entry_points.txt TracHideVals.egg-info/requires.txt TracHideVals.egg-info/top_level.txt hidevals/__init__.py hidevals/admin.py hidevals/api.py hidevals/db_default.py hidevals/filter.py PK„6ûÔ¹ EGG-INFO/top_level.txthidevals PK„6“×2EGG-INFO/zip-safe PK4d‚6hidevals/__init__.pyPK„6Žì/††hidevals/__init__.pyc;ò e0Fc@sdS(N((((s6build/bdist.darwin-8.9.1-i386/egg/hidevals/__init__.pys?sPKŒ¹ƒ6²|ù'S S hidevals/admin.py# Created by Noah Kantrowitz on 2007-04-03. # Copyright (c) 2007 Noah Kantrowitz. All rights reserved. from trac.core import * from trac.web.chrome import ITemplateProvider from trac.ticket.api import TicketSystem from webadmin.web_ui import IAdminPageProvider class HideValsAdminModule(Component): """WebAdmin sub-page for configuring the TracHideVals plugins.""" implements(IAdminPageProvider, ITemplateProvider) # IAdminPageProvider methods def get_admin_pages(self, req): if req.perm.has_permission('TICKET_ADMIN'): for field in TicketSystem(self.env).get_ticket_fields(): if 'options' in field: yield 'hidevals', 'Hide Values', field['name'], field['label'] def process_admin_request(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() 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() req.redirect(req.href.admin(cat, page)) req.hdf['hidevals.field'] = field req.hdf['hidevals.values'] = [{'group': g, 'value': v} for g,v in values] return 'admin_hidevals.cs', None # ITemplateProvider methods def get_templates_dirs(self): from pkg_resources import resource_filename return [resource_filename(__name__, 'templates')] def get_htdocs_dirs(self): from pkg_resources import resource_filename return [('hidevals', resource_filename(__name__, 'htdocs'))] PK„6ðJÈhidevals/admin.pyc;ò ™Fc@sHdkTdklZdklZdklZdefd„ƒYZdS((s*(sITemplateProvider(s TicketSystem(sIAdminPageProvidersHideValsAdminModulecBs?tZdZeeeƒd„Zd„Zd„Zd„Z RS(s;WebAdmin sub-page for configuring the TracHideVals plugins.ccsd|iidƒoMxJt|iƒiƒD]/}d|jodd|d|dfVq)q)WndS(Ns TICKET_ADMINsoptionsshidevalss Hide Valuessnameslabel(sreqspermshas_permissions TicketSystemsselfsenvsget_ticket_fieldssfield(sselfsreqsfield((s3build/bdist.darwin-8.9.1-i386/egg/hidevals/admin.pysget_admin_pagess  cCs|iiƒ} | iƒ} tgi}t|iƒi ƒD]} || d| fƒq;~ƒ|} | i d| dfƒ| i ƒ}|idjo|iidƒo\|id}|id} || f|jo+| i d|| d| fƒ| iƒq€nz|iidƒof|iid ƒ}xQ|D]E}|id d ƒ\}} | i d || d| fƒ| iƒq3Wn|i|ii||ƒƒn| |id >>hidevals/db_default.py# Created by Noah Kantrowitz on 2007-04-02. # Copyright (c) 2007 Noah Kantrowitz. All rights reserved. from trac.db import Table, Column name = 'hidevals' version = 1 tables = [ Table('hidevals', key=('sid', 'field', 'value'))[ Column('sid'), Column('field'), Column('value'), ], ]PK„6èlù™°°hidevals/db_default.pyc;ò óFc@s`dklZlZdZdZedddddfƒedƒedƒedƒfgZdS((sTablesColumnshidevalsiskeyssidsfieldsvalueN(strac.dbsTablesColumnsnamesversionstables(sColumnsTablesversionsnamestables((s8build/bdist.darwin-8.9.1-i386/egg/hidevals/db_default.pys?sPK™kƒ6Bozi i hidevals/filter.py# Created by Noah Kantrowitz on 2007-04-02. # Copyright (c) 2007 Noah Kantrowitz. All rights reserved. from trac.core import * from trac.web.api import IRequestFilter try: set = set except NameError: from sets import Set as set from api import HideValsSystem class HideValsFilter(Component): """A filter to hide certain ticket field values.""" implements(IRequestFilter) # IRequestFilter methods def pre_process_request(self, req, handler): return handler 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) 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: self.log.debug('HideVals: !') if sub_hdf.getObj('options'): 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? 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. 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_typePK„6Ò"P÷Ö Ö hidevals/filter.pyc;ò ÒŽFc@shdkTdklZy eZWn ej odklZnXdklZde fd„ƒYZ dS((s*(sIRequestFilter(sSet(sHideValsSystemsHideValsFiltercBs*tZdZeeƒd„Zd„ZRS(s-A filter to hide certain ticket field values.cCs|SdS(N(shandler(sselfsreqshandler((s4build/bdist.darwin-8.9.1-i386/egg/hidevals/filter.pyspre_process_requestsc Cs|iidƒo||fSn|iidƒoÅt|iƒi|ƒ}g} t } |i idƒo d} n|i idƒo d} n| o\|ii| dƒiƒ} x| o|iidƒ| id ƒoØ| iƒ|jo®| id ƒiƒ} t|| iƒƒ}g}xB| o:| iƒ|jo|i| iƒƒn| iƒ} q&WxH|D])}|iid | | iƒ|fƒqoWq·| i| iƒƒn| iƒ} q¸Wx*| D]}|ii| d |ƒqÏWqùn||fSdS( Ns TRAC_ADMINsTICKET_HIDEVALSs /newtickets newtickets/ticketstickets.fieldss HideVals: !soptionss%s.fields.%s.options.%ss.fields.( sreqspermshas_permissionstemplates content_typesHideValsSystemsselfsenvsvisible_fieldssfieldss to_deletesNonesbases path_infos startswithshdfsgetObjschildssub_hdfslogsdebugsnamesoptsssets valid_optssopts_to_deletesvaluesappendsnextsopts removeTreesfield( sselfsreqstemplates content_typesoptsfieldss valid_optssopts_to_deletesfieldsbasessub_hdfs to_deletesopts((s4build/bdist.darwin-8.9.1-i386/egg/hidevals/filter.pyspost_process_requestsD  +$(s__name__s __module__s__doc__s implementssIRequestFilterspre_process_requestspost_process_request(((s4build/bdist.darwin-8.9.1-i386/egg/hidevals/filter.pysHideValsFilters   N( s trac.cores trac.web.apisIRequestFilterssets NameErrorssetssSetsapisHideValsSystems ComponentsHideValsFilter(sHideValsSystemssetsIRequestFiltersHideValsFilter((s4build/bdist.darwin-8.9.1-i386/egg/hidevals/filter.pys?s   PKD¹ƒ6ºï GG$hidevals/templates/admin_hidevals.cs

Values for

Add Field Mask

Allow a group to see the given field value

  Group Value
PK„6“×2¤EGG-INFO/dependency_links.txtPK„6\i™nn¤<EGG-INFO/entry_points.txtPK„6Îâ†EE¤áEGG-INFO/PKG-INFOPK„6¢|‘õ ¤UEGG-INFO/requires.txtPK„6”[vDD¤”EGG-INFO/SOURCES.txtPK„6ûÔ¹ ¤ EGG-INFO/top_level.txtPK„6“×2¤GEGG-INFO/zip-safePK4d‚6¤whidevals/__init__.pyPK„6Žì/††¤©hidevals/__init__.pycPKŒ¹ƒ6²|ù'S S ¤bhidevals/admin.pyPK„6ðJȤähidevals/admin.pycPK˜fƒ6IgŸ-KK¤3hidevals/api.pyPK„6*N=,uu¤«.hidevals/api.pycPK;dƒ6/ÙÕ>>>¤NChidevals/db_default.pyPK„6èlù™°°¤ÀDhidevals/db_default.pycPK™kƒ6Bozi i ¤¥Fhidevals/filter.pyPK„6Ò"P÷Ö Ö ¤>Rhidevals/filter.pycPKD¹ƒ6ºï GG$¤E\hidevals/templates/admin_hidevals.csPK´Îa