Changeset 3342

Show
Ignore:
Timestamp:
03/11/08 06:29:07 (7 months ago)
Author:
coderanger
Message:

Initial 0.11 port.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • simpleticketplugin/0.11/setup.py

    r1547 r3342  
    66setup( 
    77    name = 'TracSimpleTicket', 
    8     version = '1.1.3', 
     8    version = '2.0', 
    99    packages = ['simpleticket'], 
    1010 
    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'
    1818    classifiers = [ 
    1919        'Framework :: Trac', 
    2020    ], 
    21  
     21     
     22    install_requires = ['Trac'], 
     23     
    2224    entry_points = { 
    2325        '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. 
    23 
    34from 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) 
     5from trac.web.api import IRequestFilter 
     6from trac.perm import IPermissionRequestor 
     7from trac.config import ListOption, BoolOption 
     8from trac.util.compat import set 
    399 
    4010class SimpleTicketModule(Component): 
    41     """Restricted ticket entry form.""" 
     11    """A request filter to implement the SimpleTicket reduced ticket entry form.""" 
    4212     
    4313    hide_fields = ListOption('simpleticket', 'hide', default='', 
    4414                             doc='What fields to hide for the simple ticket entry form.') 
    45                               
    46     implements(IRequestHandler, INavigationContributor, IPermissionRequestor) 
    4715     
    48     # INavigationContributer methods 
    49     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 
    5624             
    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') 
    7728             
    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) 
    8433             
    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 
    8640 
    8741    # IPermissionRequestor methods 
    8842    def get_permission_actions(self): 
    89         yield 'TICKET_CREATE_SIMPLE' 
    90  
    91  
     43        yield 'TICKET_CREATE_SIMPLE', ['TICKET_CREATE']