changeset 10:c711fe75d0ac

order by weight form for MPIWGFolder. more cleanup.
author casties
date Tue, 26 Feb 2013 20:39:34 +0100
parents 5db416602e85
children 38bbf6dcdbc8
files .hgignore MPIWGFolder.py MPIWGHelper.py MPIWGRoot.py zpt/folder/manage_change_weights.zpt zpt/www/main_template.zpt
diffstat 6 files changed, 75 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Tue Feb 26 20:39:34 2013 +0100
@@ -0,0 +1,5 @@
+
+syntax: regexp
+^\.project$
+syntax: regexp
+^\.pydevproject$
\ No newline at end of file
--- a/MPIWGFolder.py	Fri Feb 15 20:51:34 2013 +0100
+++ b/MPIWGFolder.py	Tue Feb 26 20:39:34 2013 +0100
@@ -8,15 +8,17 @@
 class MPIWGFolder(Folder):
     """special Folder object for MPIWG website """
 
-    meta_type="MPIWGFolder"
+    meta_type = "MPIWGFolder"
 
-    manage_options=Folder.manage_options+(
-        {'label':'Change Weight','action':'changeWeightForm'},
-        {'label':'Main Config','action':'changeForm'},
+    manage_options = Folder.manage_options + (
+        {'label':'Change Weight', 'action':'changeWeightForm'},
+        {'label':'Rearrange Weights', 'action':'changeWeightsForm'},
+        {'label':'Configure', 'action':'changeForm'},
         )
 
     changeWeightForm = PageTemplateFile('zpt/MPIWGFolderChangeWeight', globals())
     changeForm = PageTemplateFile('zpt/MPIWGFolderConfig', globals())
+    changeWeightsForm = PageTemplateFile('zpt/folder/manage_change_weights', globals())
 
     def __init__(self, id, title=None, weight=0, canonicalName=None):
         self.id = str(id)
@@ -31,16 +33,35 @@
         else:
             self.canonicalName = canonicalName
 
-    def changeWeight(self,weight,RESPONSE=None):
+    def getNavItems(self):
+        """returns sorted list of sub-items"""
+        # get all nav-type items
+        items = self.objectItems(self.nav_meta_types)
+        # unpack into simple list and omit empty titles
+        items = [s[1] for s in items if s[1].title != ""]
+        # sort by weight
+        items.sort(key=lambda x:int(x.weight))
+        return items
+
+    def changeWeight(self, weight, RESPONSE=None):
         """change weight"""
-        self.weight=weight
+        self.weight = weight
         if RESPONSE is not None:
             RESPONSE.redirect('manage_main')
 
-    def deleteObject(self,id):
-        """ delete an object inside the MPIWGFolder """
-        if self.hasObject(id):
-            self._delObject(id)
+    def changeWeightsInFolder(self, REQUEST=None):
+        """change all weights of a collection"""
+        ret = ""
+        form = REQUEST.form
+        resources = self.getNavItems()
+        for resource in resources:
+            try:
+                id = resource.getId()
+                ret += id + "   " + form[id] + "\n"
+                resource.changeWeight(form[id])
+            except Exception, e:
+                ret += "ERROR: %s\n"%e
+        return ret
 
     def changeMPIWGFolder(self, title=None, weight=None, canonicalName=None, RESPONSE=None):
         """change everything"""
@@ -62,13 +83,13 @@
 
 def manage_addMPIWGFolderForm(self):
     """Form for adding"""
-    pt=PageTemplateFile('zpt/AddMPIWGFolder', globals()).__of__(self)
+    pt = PageTemplateFile('zpt/AddMPIWGFolder', globals()).__of__(self)
     return pt()
 
-def manage_addMPIWGFolder(self, id, title=None,weight=0,RESPONSE=None):
+def manage_addMPIWGFolder(self, id, title=None, weight=0, RESPONSE=None):
     "Add a MPIWG Folder."
-    newObj=MPIWGFolder(id,title,weight)
-    self.Destination()._setObject(id,newObj)
+    newObj = MPIWGFolder(id, title, weight)
+    self.Destination()._setObject(id, newObj)
     if RESPONSE is not None:
         RESPONSE.redirect('manage_main')
 
--- a/MPIWGHelper.py	Fri Feb 15 20:51:34 2013 +0100
+++ b/MPIWGHelper.py	Tue Feb 26 20:39:34 2013 +0100
@@ -1,5 +1,6 @@
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
 
+import SrvTxtUtils
 import logging
 
 definedFields=['WEB_title','xdata_01','xdata_02','xdata_03','xdata_04','xdata_05','xdata_06','xdata_07','xdata_08','xdata_09','xdata_10','xdata_11','xdata_12','xdata_13','WEB_project_header','WEB_project_description','WEB_related_pub']
@@ -86,28 +87,11 @@
         return cmp(x[1],y[1])
 
 
-def unicodify(s):
-    """decode str (utf-8 or latin-1 representation) into unicode object"""
-    if not s:
-        return u""
-    if isinstance(s, str):
-        try:
-            return s.decode('utf-8')
-        except:
-            return s.decode('latin-1')
-    else:
-        return s
+# decode str (utf-8 or latin-1 representation) into unicode object
+unicodify = SrvTxtUtils.unicodify
 
-def utf8ify(s):
-    """encode unicode object or string into byte string in utf-8 representation.
-       assumes string objects to be utf-8"""
-    if not s:
-        return ""
-    if isinstance(s, str):
-        return s
-    else:
-        return s.encode('utf-8')
-
+# encode unicode object or string into byte string in utf-8 representation.
+utf8ify = SrvTxtUtils.utf8ify
 
 def shortenString(s, l, ellipsis='...'):
     """returns a string of length l (or l-1) by omitting characters in the middle of s, replacing with ellipsis."""
--- a/MPIWGRoot.py	Fri Feb 15 20:51:34 2013 +0100
+++ b/MPIWGRoot.py	Tue Feb 26 20:39:34 2013 +0100
@@ -225,10 +225,11 @@
         subret.sort(sortWeight)
         return subret
     
-    def subNav(self,obj):
-        """return sub-navigation elements i.e. below sections"""
-        # get section -> parent should be MPIWGRoot
-        p = obj
+    def getSubsections(self, here=None):
+        """return sub-navigation elements i.e. elements below sections"""
+        p = here
+        if p is None:
+            p = self
         sec = None
         # descend parents to the root (and remember the last id)
         while p is not None and p.meta_type != 'MPIWGRoot':
@@ -239,6 +240,9 @@
         subsecs = [s for s in subsecs if s[1].title != ""]
         subsecs.sort(sortWeight)
         return subsecs
+
+    # compatibility
+    subNav = getSubsections
                 
     def isType(self,object,meta_type):
         """teste ob ein object vom meta_type ist."""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/zpt/folder/manage_change_weights.zpt	Tue Feb 26 20:39:34 2013 +0100
@@ -0,0 +1,21 @@
+<h1 tal:replace="structure here/manage_page_header">Header</h1>
+<!-- ZOPE management tabs -->
+<h2 tal:define="manage_tabs_message options/manage_tabs_message | nothing" tal:replace="structure here/manage_tabs">Tabs</h2>
+<!-- end of ZOPE management tabs -->
+<h3>Change Weights</h3>
+<p>If there are significant errors in the labels, please check also the Metadata of the resource</p>
+<form method="post" action="changeWeightsInFolder">
+  <input type="submit" value="Submit Changes">
+  <!-- Lists the Objects contained in this Object -->
+  <table>
+    <tr tal:repeat="item here/getNavItems">
+      <td tal:content="item/getId" />
+      <td><b>alt:</b><span tal:replace="item/weight" /></td>
+      <td><b>neu:</b><input size="20" tal:attributes="value item/weight; name item/getId"></td>
+    </tr>
+    <tr>
+      <td><input type="submit" value="Submit Changes"></td>
+    </tr>
+  </table>
+</form>
+<h1 tal:replace="structure here/manage_page_footer">Footer</h1>
\ No newline at end of file
--- a/zpt/www/main_template.zpt	Fri Feb 15 20:51:34 2013 +0100
+++ b/zpt/www/main_template.zpt	Tue Feb 26 20:39:34 2013 +0100
@@ -66,7 +66,7 @@
       <div class="leftbox" metal:define-slot="leftbox">
         <div class="subnav" metal:define-slot="subnav">
           <ul tal:condition="crumbs">
-            <li tal:repeat="subnav python:here.subNav(here)"
+            <li tal:repeat="subnav python:here.getSubsections(here)"
               tal:attributes="class python:test(subnav[0]==subsection,'sn_on','sn_off')"><a
               tal:attributes="href python:subnav[1].absolute_url()" tal:content="python:subnav[1].title">Subnav</a></li>
           </ul>