Changeset 2608

Show
Ignore:
Timestamp:
09/01/07 05:18:58 (1 year ago)
Author:
athomas
Message:

Added permissions TAGS_VIEW and TAGS_MODIFY. Also using req.href() where
reasonable.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tagsplugin/trunk/tractags/web_ui.py

    r2585 r2608  
    33from StringIO import StringIO 
    44from trac.core import * 
     5from trac.perm import IPermissionRequestor 
    56from trac.web.main import IRequestHandler 
    67from trac.web.chrome import ITemplateProvider, INavigationContributor, add_stylesheet 
     
    1920 
    2021class TagsUserInterface(Component): 
    21     implements(ITemplateStreamFilter, IWikiPageManipulator
     22    implements(ITemplateStreamFilter, IWikiPageManipulator, IPermissionRequestor
    2223 
    2324    # Internal methods 
     
    6667        return stream | Transformer('//div[@id="changeinfo1"]').append(insert) 
    6768 
     69    # IPermissionRequestor methods 
     70    def get_permission_actions(self): 
     71        return ['TAGS_VIEW', 'TAGS_MODIFY'] 
     72 
    6873    # ITemplateStreamFilter methods 
    6974    def filter_stream(self, req, method, filename, stream, data): 
    70         if filename == 'wiki_view.html'
     75        if filename == 'wiki_view.html' and 'TAGS_VIEW' in req.perm
    7176            return self._wiki_view(req, stream) 
    72         elif filename == 'wiki_edit.html'
     77        elif filename == 'wiki_edit.html' and 'TAGS_MODIFY' in req.perm
    7378            return self._wiki_edit(req, stream) 
    7479        return stream 
     
    7984 
    8085    def validate_wiki_page(self, req, page): 
    81         if req and req.path_info.startswith('/wiki') and 'save' in req.args: 
     86        if req and 'TAGS_MODIFY' in req.perm and req.path_info.startswith('/wiki') \ 
     87                and 'save' in req.args: 
    8288            self._update_tags(req, page) 
    8389        return [] 
    8490 
    85 #class TagsWikiModule(WikiModule): 
    86 #    """ Replacement for the default Wiki module. Tag editing is much more 
    87 #        intuitive now, as it no longer requires the TagIt macro and JavaScript 
    88 #        magic. """ 
    89 # 
    90 #    def _do_save(self, req, db, page): 
    91 #        # This method is overridden so the user doesn't get "Page not modified" 
    92 #        # exceptions when updating tags but not wiki content. 
    93 #        from tractags.api import TagEngine 
    94 #        if 'tags' in req.args: 
    95 #            newtags = set([t.strip() for t in 
    96 #                          _tag_split.split(req.args.get('tags')) if t.strip()]) 
    97 #            wikitags = TagEngine(self.env).tagspace.wiki 
    98 #            oldtags = wikitags.get_tags([page.name]) 
    99 # 
    100 #            if oldtags != newtags: 
    101 #                wikitags.replace_tags(req, page.name, newtags) 
    102 #                # No changes, just redirect 
    103 #                if req.args.get('text') == page.text: 
    104 #                    req.redirect(self.env.href.wiki(page.name)) 
    105 #                    return 
    106 #        return WikiModule._do_save(self, req, db, page) 
    107 # 
    108 #    def process_request(self, req): 
    109 #        from tractags.api import TagEngine 
    110 #        from trac.web.chrome import add_stylesheet 
    111 # 
    112 #        add_stylesheet(req, 'tags/css/tractags.css') 
    113 # 
    114 #        pagename = req.args.get('page', 'WikiStart') 
    115 #        action = req.args.get('action', 'view') 
    116 # 
    117 #        engine = TagEngine(self.env) 
    118 #        wikitags = engine.tagspace.wiki 
    119 #        tags = list(wikitags.get_tags([pagename])) 
    120 #        tags.sort() 
    121 # 
    122 #        if action == 'edit': 
    123 #            req.hdf['tags'] = req.args.get('tags', ', '.join(tags)) 
    124 #        elif action == 'view': 
    125 #            hdf_tags = [] 
    126 #            for tag in tags: 
    127 #                href, title = engine.get_tag_link(tag) 
    128 #                hdf_tags.append({'name': tag, 
    129 #                                 'href': href, 
    130 #                                 'title': title}) 
    131 #            req.hdf['tags'] = hdf_tags 
    132 #        result = WikiModule.process_request(self, req) 
    133 #        if result is None: 
    134 #            return None 
    135 #        if result[0] == 'wiki.cs': 
    136 #            return 'tagswiki.cs', None 
    137 #        return result 
    13891 
    13992class TagsModule(Component): 
     
    190143        from pkg_resources import resource_filename 
    191144        return [('tags', resource_filename(__name__, 'htdocs'))] 
    192      
     145 
    193146    # INavigationContributor methods 
    194147    def get_active_navigation_item(self, req): 
    195         return 'tags' 
     148        if 'TAGS_VIEW' in req.perm: 
     149            return 'tags' 
    196150 
    197151    def get_navigation_items(self, req): 
    198152        from trac.web.chrome import Chrome 
    199         yield ('mainnav', 'tags', 
    200                Markup('<a href="%s" accesskey="T">Tags</a>', 
    201                       self.env.href.tags())) 
     153        if 'TAGS_VIEW' in req.perm: 
     154            yield ('mainnav', 'tags', 
     155                   Markup('<a href="%s" accesskey="T">Tags</a>', 
     156                          req.href.tags())) 
    202157 
    203158    # IRequestHandler methods 
    204159    def match_request(self, req): 
    205         return req.path_info.startswith('/tags') 
     160        return 'TAGS_VIEW' in req.perm and req.path_info.startswith('/tags') 
    206161 
    207162    def process_request(self, req): 
     
    210165        from trac.web.chrome import add_stylesheet 
    211166 
     167        req.perm.require('TAGS_VIEW') 
     168 
    212169        add_stylesheet(req, 'tags/css/tractags.css') 
    213         req.hdf['trac.href.tags'] = self.env.href.tags() 
     170        req.hdf['trac.href.tags'] = req.href.tags() 
    214171 
    215172        def update_from_req(args):