Changeset 3342
- Timestamp:
- 03/11/08 06:29:07 (10 months ago)
- Files:
-
- simpleticketplugin/0.11/setup.py (modified) (1 diff)
- simpleticketplugin/0.11/simpleticket/web_ui.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
simpleticketplugin/0.11/setup.py
r1547 r3342 6 6 setup( 7 7 name = 'TracSimpleTicket', 8 version = ' 1.1.3',8 version = '2.0', 9 9 packages = ['simpleticket'], 10 10 11 author = "Noah Kantrowitz",12 author_email = "coderanger@yahoo.com",13 description = "Restricted ticket entry form for Trac",14 long_description = "A Trac plugin that provides a configurable ticket entry form, with selected fields hidden from the user.",15 license = "BSD",16 keywords = "trac plugin restricted ticket",17 url = "http://trac-hacks.org/wiki/SimpleTicketPlugin",11 author = 'Noah Kantrowitz', 12 author_email = 'noah+tracplugins@coderanger.net', 13 description = 'Restricted ticket entry form for Trac', 14 long_description = 'A Trac plugin that provides a configurable ticket entry form, with selected fields hidden from the user.', 15 license = 'BSD', 16 keywords = 'trac plugin restricted ticket', 17 url = 'http://trac-hacks.org/wiki/SimpleTicketPlugin', 18 18 classifiers = [ 19 19 'Framework :: Trac', 20 20 ], 21 21 22 install_requires = ['Trac'], 23 22 24 entry_points = { 23 25 'trac.plugins': [ simpleticketplugin/0.11/simpleticket/web_ui.py
r1545 r3342 1 # Restricted ticket entry module 1 # Created by Noah Kantrowitz on 2008-03-11. 2 # Copyright (c) 2008 Noah Kantrowitz. All rights reserved. 2 3 3 4 from trac.core import * 4 from trac.web.chrome import INavigationContributor 5 from trac.web import IRequestHandler 6 from trac.perm import IPermissionRequestor, PermissionCache 7 from trac.util import Markup 8 from trac.config import ListOption 9 10 from trac.ticket.web_ui import NewticketModule 11 12 class PseudoPermCache(PermissionCache): 13 14 def __init__(self, perm): 15 self.perms = {'TICKET_CREATE': True} 16 if perm.has_permission('TICKET_APPEND'): 17 self.perms['TICKET_APPEND'] = True 18 19 20 class PseudoRequest(object): 21 def __init__(self, env, req): 22 self.env = env 23 self.req = req 24 25 def __getattr__(self, name): 26 return getattr(self.req,name) 27 28 def redirect(self, dest): 29 if dest.startswith(self.env.href.ticket()): 30 if not self.req.perm.has_permission('TICKET_VIEW'): 31 self.req.redirect(self.env.href.simpleticket()) 32 self.req.redirect(dest) 33 34 def _perm(self): 35 if self.req.authname == 'anonymous': 36 return PseudoPermCache(self.req.perm) 37 return self.req.perm 38 perm = property(_perm) 5 from trac.web.api import IRequestFilter 6 from trac.perm import IPermissionRequestor 7 from trac.config import ListOption, BoolOption 8 from trac.util.compat import set 39 9 40 10 class SimpleTicketModule(Component): 41 """ Restricted ticket entry form."""11 """A request filter to implement the SimpleTicket reduced ticket entry form.""" 42 12 43 13 hide_fields = ListOption('simpleticket', 'hide', default='', 44 14 doc='What fields to hide for the simple ticket entry form.') 45 46 implements(IRequestHandler, INavigationContributor, IPermissionRequestor)47 15 48 # INavigationContributer methods49 def get_active_navigation_item(self, req):50 return 'simpleticket' 51 52 def get_navigation_items(self, req): 53 if req.perm.has_permission('TICKET_CREATE_SIMPLE') and \54 not req.perm.has_permission('TICKET_CREATE'):55 yield ('mainnav', 'simpleticket', Markup('<a href="%s" accesskey="7">New Ticket</a>',self.env.href.simpleticket()))16 allow_override = BoolOption('simpleticket', 'allow_override', default=False, 17 doc='Allow the user to use the normal entry form even if they have TICKET_CREATE_SIMPLE') 18 19 implements(IRequestFilter, IPermissionRequestor) 20 21 # IRequestFilter methods 22 def pre_process_request(self, req, handler): 23 return handler 56 24 57 # IRequestHandler methods 58 def match_request(self, req): 59 return req.path_info.startswith('/simpleticket') 60 61 def process_request(self, req): 62 req.perm.assert_permission('TICKET_CREATE_SIMPLE') 63 64 # Force TICKET_CREATE 65 really_has_perm = req.perm.has_permission('TICKET_CREATE') 66 req.perm.perms['TICKET_CREATE'] = True 67 68 # Intercept redirects 69 new_req = PseudoRequest(self.env, req) 70 71 # Process the request via the original newticket module 72 template, content_type = NewticketModule(self.env).process_request(new_req) 73 74 # Hide the fields 75 for f in self.hide_fields: 76 req.hdf['newticket.fields.%s.skip'%f] = True 25 def post_process_request(self, req, template, data, content_type): 26 if req.path_info == '/newticket': 27 do_filter = req.perm.has_permission('TICKET_CREATE_SIMPLE') 77 28 78 # Redirect the POST 79 req.hdf['trac.href.newticket'] = self.env.href.simpleticket() 80 81 # Restore TICKET_CREATE 82 if not really_has_perm: 83 del req.perm.perms['TICKET_CREATE'] 29 # Should we allow a session override? 30 allow_override = self.allow_override or req.perm.has_permission('TRAC_ADMIN') 31 if allow_override: 32 do_filter = req.session.get('simpleticket.do_filter', do_filter) 84 33 85 return (template, content_type) 34 if do_filter: 35 hide_fields = set(self.hide_fields) 36 self.log.debug('SimpleTicket: Filtering new ticket form for %s', req.authname) 37 data['fields'] = [f for f in data['fields'] if f['name'] not in hide_fields] 38 39 return template, data, content_type 86 40 87 41 # IPermissionRequestor methods 88 42 def get_permission_actions(self): 89 yield 'TICKET_CREATE_SIMPLE' 90 91 43 yield 'TICKET_CREATE_SIMPLE', ['TICKET_CREATE']
