Changeset 754

Show
Ignore:
Timestamp:
05/09/06 12:30:45 (3 years ago)
Author:
stevegt
Message:

WikiWorkflowPatch:

add IWikiModel extension point

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • wikiworkflowpatch/0.9/wikiworkflowpatch.diff

    r452 r754  
    11Index: trac/wiki/api.py 
    22=================================================================== 
    3 --- trac/wiki/api.py    (revision 32
    4 +++ trac/wiki/api.py    (working copy) 
    5 @@ -65,16 +65,30 @@ 
     3--- trac/wiki/api.py    (.../vendor/trac-0.9.4)        (revision 25
     4+++ trac/wiki/api.py    (.../branches/wikiflowpatch/0.9)       (working copy) 
     5@@ -65,16 +65,35 @@ 
    66   
    77     def get_link_resolvers(): 
     
    2020+        version is the version of text the edit was based on. 
    2121+        """ 
     22+ 
     23+class IWikiModel(Interface): 
     24+ 
     25+    def get_page(name=None, version=None, db=None, latest=None): 
     26+        """Get a WikiPage object.""" 
    2227+  
    2328 class WikiSystem(Component): 
     
    3540     INDEX_UPDATE_INTERVAL = 5 # seconds 
    3641  
    37 @@ -213,3 +227,11 @@ 
     42@@ -213,3 +232,11 @@ 
    3843         else: 
    3944             return '<a class="wiki" href="%s">%s</a>' \ 
     
    4954Index: trac/wiki/web_ui.py 
    5055=================================================================== 
    51 --- trac/wiki/web_ui.py (revision 32
    52 +++ trac/wiki/web_ui.py (working copy) 
     56--- trac/wiki/web_ui.py (.../vendor/trac-0.9.4)        (revision 25
     57+++ trac/wiki/web_ui.py (.../branches/wikiflowpatch/0.9)       (working copy) 
    5358@@ -30,6 +30,7 @@ 
    5459 from trac.versioncontrol.diff import get_diff_options, hdf_diff 
     
    5964 from trac.wiki.formatter import wiki_to_html, wiki_to_oneliner 
    6065  
    61 @@ -79,12 +80,16 @@ 
     66@@ -63,7 +64,8 @@ 
     67     # IRequestHandler methods 
     68  
     69     def match_request(self, req): 
     70-        match = re.match(r'^/wiki(?:/(.*))?', req.path_info) 
     71+        # match = re.match(r'^/wiki(?:/(.*))?', req.path_info) 
     72+        match = re.match(r'^/wiki(?:/(.*)|\W+)?$', req.path_info) 
     73         if match: 
     74             if match.group(1): 
     75                 req.args['page'] = match.group(1) 
     76@@ -79,12 +81,16 @@ 
    6277  
    6378         add_stylesheet(req, 'common/css/wiki.css') 
     
    7994                     self._render_editor(req, db, page) 
    8095                 elif req.args.has_key('preview'): 
    81 @@ -101,11 +106,24 @@ 
     96@@ -101,11 +107,24 @@ 
    8297         elif action == 'delete': 
    8398             self._render_confirm(req, db, page) 
     
    105120             if req.args.get('format') == 'txt': 
    106121                 req.send_response(200) 
    107 @@ -155,7 +173,7 @@ 
     122@@ -155,13 +174,14 @@ 
    108123             req.perm.assert_permission('WIKI_DELETE') 
    109124  
     
    114129         version = None 
    115130         if req.args.has_key('version'): 
    116 @@ -185,7 +203,7 @@ 
    117   
     131             version = int(req.args.get('version', 0)) 
     132  
     133         page.delete(version, db) 
     134+        # XXX why is there a commit here, but none after save() 
     135         db.commit() 
     136  
     137         if not page.exists: 
     138@@ -183,9 +203,11 @@ 
     139             # WIKI_ADMIN 
     140             page.readonly = int(req.args.has_key('readonly')) 
     141  
     142+        # definitely need to pass db in here, so that change listeners 
     143+        # can cause rollback  
    118144         page.save(req.args.get('author'), req.args.get('comment'), 
    119                    req.remote_addr) 
     145-                  req.remote_addr) 
    120146-        req.redirect(self.env.href.wiki(page.name)) 
     147+                  req.remote_addr, db=db) 
    121148+        req.redirect(self.env.href.wiki(page.name, version=page.version)) 
    122149  
    123150     def _render_confirm(self, req, db, page): 
    124151         if page.readonly: 
    125 @@ -312,7 +330,7 @@ 
     152@@ -312,7 +334,7 @@ 
    126153             info['readonly'] = int(req.args.has_key('readonly')) 
    127154         req.hdf['wiki'] = info 
     
    132159         HDF. 
    133160  
    134 @@ -327,7 +345,8 @@ 
     161@@ -327,7 +349,8 @@ 
    135162         req.hdf['title'] = page.name + ' (history)' 
    136163  
     
    144171Index: trac/wiki/model.py 
    145172=================================================================== 
    146 --- trac/wiki/model.py  (revision 32) 
    147 +++ trac/wiki/model.py  (working copy) 
    148 @@ -22,15 +22,15 @@ 
     173--- trac/wiki/model.py  (.../vendor/trac-0.9.4) (revision 25) 
     174+++ trac/wiki/model.py  (.../branches/wikiflowpatch/0.9)        (working copy) 
     175@@ -20,17 +20,17 @@ 
     176 import time 
     177  
    149178 from trac.core import * 
    150  from trac.wiki.api import WikiSystem 
     179-from trac.wiki.api import WikiSystem 
     180+from trac.wiki.api import WikiSystem, IWikiModel 
    151181  
    152182- 
     
    211241             cursor = db.cursor() 
    212242             cursor.execute("UPDATE wiki SET readonly=%s WHERE name=%s", 
    213 @@ -137,12 +148,34 @@ 
     243@@ -137,12 +148,53 @@ 
    214244         self.old_readonly = self.readonly 
    215245         self.old_text = self.text 
     
    243273+        for controller in WikiSystem(self.env).workflow_controllers: 
    244274+            w = controller.would_collide(req, self.name, self.version) 
    245 +            # this does the right thing for None, True, or False, with 
     275+            # This does the right thing for None, True, or False, with 
    246276+            # True taking precedence over False, and both taking 
    247 +            # precedence over None -- python is great 
     277+            # precedence over None -- python is soooo nice. 
    248278+            would = would or w   
    249279+        return would 
    250280+ 
     281+class WikiModel(Component): 
     282+    implements(IWikiModel) 
     283+ 
     284+    def get_page(self, name=None, version=None, db=None, latest=None): 
     285+        """Get a WikiPage object.""" 
     286+        return WikiPage(env=self.env, name=name, version=version, 
     287+                db=db, latest=latest) 
     288+  
     289+    def page_count(self, db=None): 
     290+        if not db: 
     291+            db = self.env.get_db_cnx() 
     292+        cursor = db.cursor() 
     293+        cursor.execute("SELECT count(name) FROM wiki") 
     294+        row = cursor.fetchone() 
     295+        if row: 
     296+            count = row[0] 
     297+        else: 
     298+            count = 0 
     299+        return count 
    251300+ 
    252301Index: templates/wiki.cs 
    253302=================================================================== 
    254 --- templates/wiki.cs   (revision 32
    255 +++ templates/wiki.cs   (working copy) 
     303--- templates/wiki.cs   (.../vendor/trac-0.9.4)        (revision 25
     304+++ templates/wiki.cs   (.../branches/wikiflowpatch/0.9)       (working copy) 
    256305@@ -289,6 +289,9 @@ 
    257306     if:trac.acl.WIKI_MODIFY ?>