diff MoinMoin/user.py @ 88:9f037347955c

fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method imported from: moin--main--1.5--patch-90
author Nir Soffer <nirs@freeshell.org>
date Fri, 07 Oct 2005 22:10:55 +0000
parents 3ffdb52c6969
children 4e44f6dfdfc2
line wrap: on
line diff
--- a/MoinMoin/user.py	Fri Oct 07 08:57:24 2005 +0000
+++ b/MoinMoin/user.py	Fri Oct 07 22:10:55 2005 +0000
@@ -600,32 +600,30 @@
         return self.subscribed_pages
 
     def isQuickLinkedTo(self, pagelist):
-        """
-        Check if user quicklink matches any page in pagelist.
+        """ Check if user quicklink matches any page in pagelist.
+
+        TODO: should return a bool, not int.        
         
         @param pagelist: list of pages to check for quicklinks
         @rtype: int
         @return: 1, if user has quicklinked any page in pagelist
                  0, if not
         """
-        quicklinked = 0
-        if self.valid:
-            interwikiname = self._cfg.interwikiname
-            for page in pagelist:
-                if page in self.quicklinks:
-                    quicklinked = 1
-                    break
-                # do also try our own interwiki name
-                if interwikiname:
-                    iwpage = "%s:%s" % (interwikiname, page)
-                    if iwpage in self.quicklinks:
-                        quicklinked = 1
-                        break
-        return quicklinked
-
+        if not self.valid:
+            return 0
+            
+        for pagename in pagelist:
+            if pagename in self.quicklinks:
+                return 1
+            interWikiName = self._interWikiName(pagename)
+            if interWikiName and interWikiName in self.quicklinks:
+                return 1
+        return 0
+        
     def isSubscribedTo(self, pagelist):
-        """
-        Check if user subscription matches any page in pagelist.
+        """ Check if user subscription matches any page in pagelist.
+        
+        TODO: should use _interWikiName and return a bool, not int.
         
         @param pagelist: list of pages to check for subscription
         @rtype: int
@@ -659,39 +657,68 @@
         else:
             return 0
 
-    def quicklinkPage(self, pagename, remove=False):
-        """ Add or remove a quicklink to a wiki page.
-
-        Note that you need to save the user data to make this stick!
+    def addQuicklink(self, pagename):
+        """ Adds a page to the user quicklinks 
+        
+        If the wiki has an interwiki name, all links are saved as
+        interwiki names. If not, as simple page name.
 
-        @param pagename: name of the page to quicklink
-        @param remove: unsubscribe pagename if set
-        @type remove: bool
+        @param pagename: page name
+        @type pagename: unicode
         @rtype: bool
-        @return: True, if quicklinks were added/removed.
+        @return: if pagename was added
         """
         changed = False
-        if self._cfg.interwikiname:
-            iwpagename = "%s:%s" % (self._cfg.interwikiname, pagename)
-        else:
-            iwpagename = None
-        if remove:
+        interWikiName = self._interWikiName(pagename)
+        if interWikiName:
             if pagename in self.quicklinks:
                 self.quicklinks.remove(pagename)
                 changed = True
-            if iwpagename in self.quicklinks:
-                self.quicklinks.remove(iwpagename)
+            if interWikiName not in self.quicklinks:
+                self.quicklinks.append(interWikiName)
                 changed = True
         else:
-            # add the interwiki name and remove non-interwiki name, if present!
-            if pagename in self.quicklinks:
-                self.quicklinks.remove(pagename)
+            if pagename not in self.quicklinks:
+                self.quicklinks.append(pagename)
                 changed = True
-            if iwpagename not in self.quicklinks:
-                self.quicklinks.append(iwpagename)
-                changed = True
+
+        if changed:
+            self.save()
         return changed
 
+    def removeQuicklink(self, pagename):
+        """ Remove a page from user quicklinks 
+        
+        Remove both interwiki and simple name from quicklinks.
+        
+        @param pagename: page name
+        @type pagename: unicode
+        @rtype: bool
+        @return: if pagename was removed
+        """
+        changed = False
+        interWikiName = self._interWikiName(pagename)
+        if interWikiName and interWikiName in self.quicklinks:
+            self.quicklinks.remove(interWikiName)
+            changed = True
+        if pagename in self.quicklinks:
+            self.quicklinks.remove(pagename)
+            changed = True        
+        
+        if changed:
+            self.save()
+        return changed
+
+    def _interWikiName(self, pagename):
+        """ Return the inter wiki name of a page name 
+
+        @param pagename: page name
+        @type pagename: unicode
+        """
+        if not self._cfg.interwikiname:
+            return None
+        return "%s:%s" % (self._cfg.interwikiname, pagename)
+
     def subscribePage(self, pagename, remove=False):
         """ Subscribe or unsubscribe to a wiki page.