Index: WAeUP_SRP/trunk/Academics.py
===================================================================
--- WAeUP_SRP/trunk/Academics.py	(revision 295)
+++ WAeUP_SRP/trunk/Academics.py	(revision 296)
@@ -71,6 +71,5 @@
                 logger.info('Faculty with ID %(FacultyCode)s %(Description)s already exists' % faculty)
                 no_import.write('"%(Session)s","%(FacultyCode)s","%(Description)s","%(CollegeCode)s","%(FacultyKey)s","%(Status)s","%(degree_grade)s","%(Bankcode)s"\n' % faculty)
-        return self.academics.temporary_view_all()
-        return self.getContent().temporary_view_all()
+        return self.academics.academics_contents()
     ###)
 
@@ -140,6 +139,5 @@
                     dict = {'Title': 'Certificates'}
                     certificates.getContent().edit(mapping=dict)
-        return self.academics.temporary_view_all()
-        return self.temporary_view_all()
+        return self.academics.academics_contents()
     ###)
     
@@ -167,5 +165,5 @@
         course_list = [ c.id for c in cl]
         for course in courses:
-            logger.info('Processing %(CourseCode)s %(Description)s %(Credits)s %(Dept)s %(Semester)s %(Session)s %(PassMark)s %(CourseKey)s %(Category)s %(AdmStatus)s' % course)
+            logger.info('Processing %(CourseCode)s %(Description)s %(Credits)s %(Dept)s %(Semester)s %(Session)s %(PassMark)s %(Category)s %(AdmStatus)s' % course)
 ##            if course.get("FORMERCODE").endswith('BITS'):
 ##                continue
@@ -179,7 +177,7 @@
                 if not no_import:
                     no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
-                    no_import.write('"CourseCode","Description","Credits","Dept","Semester","Session","PassMark","CourseKey","Category","AdmStatus"\n')
+                    no_import.write('"CourseCode","Description","Credits","Dept","Semester","Session","PassMark","Category","AdmStatus"\n')
                 no_import.write("Dep %(Dept)s for Course %(CourseCode)s not found\n" % course)
-                no_import.write('"%(CourseCode)s","%(Description)s","%(Credits)s","%(Dept)s","%(Semester)s","%(Session)s","%(PassMark)s","%(CourseKey)s","%(Category)s","%(AdmStatus)s"\n' % course)
+                no_import.write('"%(CourseCode)s","%(Description)s","%(Credits)s","%(Dept)s","%(Semester)s","%(Session)s","%(PassMark)s","%(Category)s","%(AdmStatus)s"\n' % course)
                 continue
             course_id = ''.join(re.split('\W+',course.get('CourseCode')))
@@ -198,11 +196,11 @@
 ##                logger.info("invalid course_code %(course_id)s renaming to %(tid)s" % vars())
 ##                course_id = tid
-            elif len(course_id) > 7:
+            elif len(course_id) > 10:
                 logger.info("invalid course_code %(CourseCode)s" % course)
                 if not no_import:
                     no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
-                    no_import.write('"CourseCode","Description","Credits","Dept","Semester","Session","PassMark","CourseKey","Category","AdmStatus"\n')
+                    no_import.write('"CourseCode","Description","Credits","Dept","Semester","Session","PassMark","Category","AdmStatus"\n')
                 no_import.write("invalid course_code %(CourseCode)s\n" % course)
-                no_import.write('"%(CourseCode)s","%(Description)s","%(Credits)s","%(Dept)s","%(Semester)s","%(Session)s","%(PassMark)s","%(CourseKey)s","%(Category)s","%(AdmStatus)s"\n' % course)
+                no_import.write('"%(CourseCode)s","%(Description)s","%(Credits)s","%(Dept)s","%(Semester)s","%(Session)s","%(PassMark)s","%(Category)s","%(AdmStatus)s"\n' % course)
                 continue
             courses = dept.Courses
@@ -229,6 +227,5 @@
                 dict['passmark'] = 0
             c.getContent().edit(mapping=dict)
-        return self.academics.temporary_view_all()
-        return self.temporary_view_all()
+        return self.academics.academics_contents()
     ###)
 
@@ -272,7 +269,15 @@
                 no_import.write('"%(CertCode)s","%(Description)s","%(Faculty)s","%(MaxPass)s","%(MaxLoad)s","%(session)s","%(PromotionCredits)s","%(Probationcredits)s","%(StartLevel)s","%(endLevel)s","%(Nyears)s","%(Ncore)s","%(MaxElect)s","%(MPREFIX)s","%(Dept)s","%(Admstatus)s","%(category)s"\n' % certificate)
                 continue
-            certificate_id = "%(category)s_%(Admstatus)s_%(Dept)s" % certificate
+            #certificate_id = "%(category)s_%(Admstatus)s_%(Dept)s" % certificate
             dep = deps[depid]
             certificates = dep.Certificates
+            code = certificate.get('CertCode')
+            code = code.replace('.','')
+            code = code.replace('(','')
+            code = code.replace(')','')
+            code = code.replace('/','')
+            code = code.replace(' ','')
+            code = code.replace('_','')
+            certificate_id = code
             c = getattr(certificates,certificate_id,None)
             if c is None:
@@ -282,11 +287,4 @@
                 c = getattr(certificates,certificate_id)
             dict = {'Title': certificate['Description']}
-            code = certificate.get('CertCode')
-            code = code.replace('.','')
-            code = code.replace('(','')
-            code = code.replace(')','')
-            code = code.replace('/','')
-            code = code.replace(' ','')
-            code = code.replace('_','')
             dict['code'] = code
             dict['faculty'] = certificate.get('Faculty') 
@@ -308,6 +306,5 @@
             dict['probation_credits'] = certificate.get('ProbationCredits')
             c.getContent().edit(mapping=dict)
-        return self.academics.temporary_view_all()
-        return self.temporary_view_all()
+        return self.academics.academics_contents()
     ###)
 
@@ -326,6 +323,10 @@
         d_ids = [d.id for d in self.portal_catalog({'meta_type': "Department"})]
         c_ids = [c.id for c in self.portal_catalog({'meta_type': "Course"})]
+        l = self.portal_catalog({'meta_type': "Certificate"})
+        certs = {}
+        for f in l:
+            certs[f.id] = f.getObject()
         for cert_course in cert_courses:
-            logger.info('Processing %(CosCode)s %(CertCode)s %(CoreKey)s %(Session)s %(Level)s %(Core)s %(Elective)s %(Mandatory)s %(AdmStatus)s %(Dept)s %(Semester)s' % cert_course)
+            logger.info('Processing %(CosCode)s %(CertCode)s %(Session)s %(Level)s %(Core)s %(Elective)s %(Mandatory)s %(AdmStatus)s %(Dept)s %(Semester)s' % cert_course)
             depid = cert_course.get('Dept')
             course_code = cert_course.get('CosCode')
@@ -339,7 +340,8 @@
 ##            if cert_course.get('Session') != '2002/2003':
 ##                continue
-            certificate = self.portal_catalog({'meta_type': "Certificate",
-                                               'SearchableText': code})
-            if not certificate:
+##            certificate = self.portal_catalog({'meta_type': "Certificate",
+##                                               'SearchableText': code})
+##            if not certificate:
+            if not code in certs.keys():
                 #print code
                 em = 'CertCode %(CertCode)s for %(CosCode)s not found\n' % cert_course
@@ -347,7 +349,7 @@
                 if not no_import:
                     no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
-                    no_import.write('"CosCode","CertCode","CoreKey","Session","Level","Core","Elective","Mandatory","AdmStatus","Dept","Semester"\n')
+                    no_import.write('"CosCode","CertCode","Session","Level","Core","Elective","Mandatory","AdmStatus","Dept","Semester"\n')
                 no_import.write(em)
-                no_import.write('"%(CosCode)s","%(CertCode)s","%(CoreKey)s","%(Session)s","%(Level)s","%(Core)s","%(Elective)s","%(Mandatory)s","%(AdmStatus)s","%(Dept)s","%(Semester)s"\n' % cert_course)
+                no_import.write('"%(CosCode)s","%(CertCode)s","%(Session)s","%(Level)s","%(Core)s","%(Elective)s","%(Mandatory)s","%(AdmStatus)s","%(Dept)s","%(Semester)s"\n' % cert_course)
                 continue
             certificate = certificate[-1].getObject()
@@ -358,7 +360,7 @@
                 if not no_import:
                     no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
-                    no_import.write('"CosCode","CertCode","CoreKey","Session","Level","Core","Elective","Mandatory","AdmStatus","Dept","Semester"\n')
+                    no_import.write('"CosCode","CertCode","Session","Level","Core","Elective","Mandatory","AdmStatus","Dept","Semester"\n')
                 no_import.write(em)
-                no_import.write('"%(CosCode)s","%(CertCode)s","%(CoreKey)s","%(Session)s","%(Level)s","%(Core)s","%(Elective)s","%(Mandatory)s","%(AdmStatus)s","%(Dept)s","%(Semester)s"\n' % cert_course)
+                no_import.write('"%(CosCode)s","%(CertCode)s","%(Session)s","%(Level)s","%(Core)s","%(Elective)s","%(Mandatory)s","%(AdmStatus)s","%(Dept)s","%(Semester)s"\n' % cert_course)
                 continue
             if depid not in d_ids:
@@ -367,7 +369,7 @@
                 if not no_import:
                     no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
-                    no_import.write('"CosCode","CertCode","CoreKey","Session","Level","Core","Elective","Mandatory","AdmStatus","Dept","Semester"\n')
+                    no_import.write('"CosCode","CertCode","Session","Level","Core","Elective","Mandatory","AdmStatus","Dept","Semester"\n')
                 no_import.write(em)
-                no_import.write('"%(CosCode)s","%(CertCode)s","%(CoreKey)s","%(Session)s","%(Level)s","%(Core)s","%(Elective)s","%(Mandatory)s","%(AdmStatus)s","%(Dept)s","%(Semester)s"\n' % cert_course)
+                no_import.write('"%(CosCode)s","%(CertCode)s","%(Session)s","%(Level)s","%(Core)s","%(Elective)s","%(Mandatory)s","%(AdmStatus)s","%(Dept)s","%(Semester)s"\n' % cert_course)
                 continue
             level = cert_course.get('Level')
@@ -391,7 +393,7 @@
                 if not no_import:
                     no_import = open("%s/import/%s_not_imported.csv" % (i_home,name),"w")
-                    no_import.write('"CosCode","CertCode","CoreKey","Session","Level","Core","Elective","Mandatory","AdmStatus","Dept","Semester"\n')
+                    no_import.write('"CosCode","CertCode","Session","Level","Core","Elective","Mandatory","AdmStatus","Dept","Semester"\n')
 ##                no_import.write('Duplicate %(CosCode)s in Level %(Level)s' % cert_course)
-##                no_import.write('"%(CosCode)s","%(CertCode)s","%(CoreKey)s","%(Session)s","%(Level)s","%(Core)s","%(Elective)s","%(Mandatory)s","%(AdmStatus)s","%(Dept)s","%(Semester)s"\n' % cert_course)
+##                no_import.write('"%(CosCode)s","%(CertCode)s","%(Session)s","%(Level)s","%(Core)s","%(Elective)s","%(Mandatory)s","%(AdmStatus)s","%(Dept)s","%(Semester)s"\n' % cert_course)
                 continue
             semester.invokeFactory('CertificateCourse',course_code)
@@ -410,5 +412,5 @@
             dict['level'] = cert_course.get('Level')
             cc.getContent().edit(mapping=dict)
-        return self.academics.temporary_view_all()
+        return self.academics.academics_contents()
     ###)
 
@@ -483,5 +485,7 @@
         """passmark from course"""
         ce = self.getCourseEntry(self.id)
-        return ce.passmark
+        if ce is not None and hasattr(ce,"passmark"):
+            return ce.passmark
+        
     
     security.declareProtected(View,"coursepath")
@@ -517,4 +521,11 @@
         """compose title"""
         return "%s" % (self.title)
+    
+    security.declareProtected(View,"LongTitle")
+    def LongTitle(self):
+        """compose long_title"""
+        itype = self.portal_vocabularies.institution_types_voc.get(self.institution_type,default="Faculty of")
+        
+        return "%s %s" % (itype,self.title)
 
 InitializeClass(Faculty)
@@ -541,14 +552,29 @@
 ##        return "Department of %s" % (self.title)
 
+    security.declareProtected(View,"LongTitle")
+    def LongTitle(self):
+        """compose long_title"""
+        if not hasattr(self,'institution_type'):
+            self.institution_type = "department"
+        itype = self.portal_vocabularies.institution_types_voc.get(self.institution_type,default="Department of")
+        
+        return "%s %s" % (itype,self.title)
+
 InitializeClass(Department)
 
 def addDepartment(container, id, REQUEST=None, **kw):
     """Add a Department."""
-    ob = Department(id, **kw)
+    object = Department(id, **kw)
     id = object.getId()
     container._setObject(id, object)
-    dep = getattr(container,id)
+    dep = getattr(container,id).getContent()
     dep.invokeFactory('CoursesFolder','Courses')
+    o = getattr(dep,'Courses')
+    dict = {'Title': 'Courses'}
+    o.getContent().edit(mapping=dict)
     dep.invokeFactory('CertificatesFolder','Certificates')
+    o = getattr(dep,'Certificates')
+    dict = {'Title': 'Certificates'}
+    o.getContent().edit(mapping=dict)
     if REQUEST is not None:
         url = container.absolute_url()
Index: WAeUP_SRP/trunk/profiles/default/schemas.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/schemas.xml	(revision 295)
+++ WAeUP_SRP/trunk/profiles/default/schemas.xml	(revision 296)
@@ -10,4 +10,5 @@
  <object name="department" meta_type="CPS Schema"/>
  <object name="faculty" meta_type="CPS Schema"/>
+ <object name="faculty_row" meta_type="CPS Schema"/>
  <object name="jamb" meta_type="CPS Schema"/>
  <object name="semester" meta_type="CPS Schema"/>
Index: WAeUP_SRP/trunk/profiles/default/schemas/faculty_row.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/schemas/faculty_row.xml	(revision 296)
+++ WAeUP_SRP/trunk/profiles/default/schemas/faculty_row.xml	(revision 296)
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<object name="faculty_row" meta_type="CPS Schema">
+  <field name="Title" meta_type="CPS String Field"/>
+  <field name="Description" meta_type="CPS String Field"/>
+  <field name="id" meta_type="CPS String Field"/>
+  <field name="institution_type" meta_type="CPS String Field"/>
+</object>
Index: WAeUP_SRP/trunk/profiles/default/types/AcademicsFolder.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/types/AcademicsFolder.xml	(revision 295)
+++ WAeUP_SRP/trunk/profiles/default/types/AcademicsFolder.xml	(revision 296)
@@ -8,5 +8,5 @@
  <property name="product">WAeUP_SRP</property>
  <property name="factory">addAcademicsFolder</property>
- <property name="immediate_view">folder_view</property>
+ <property name="immediate_view">academics_contents</property>
  <property name="global_allow">True</property>
  <property name="filter_content_types">True</property>
@@ -34,8 +34,8 @@
  <property name="storage_methods"/>
  <property name="cps_is_portlet">False</property>
- <alias from="(Default)" to="temporary_view_all"/>
- <alias from="view" to="temporary_view_all"/>
- <action title="Standard View" action_id="view" category="object"
-    condition_expr="" url_expr="string:${object_url}/temporary_view_all"
+ <alias from="(Default)" to="academics_contents"/>
+ <alias from="view" to="academics_contents"/>
+ <action title="View" action_id="academics_view" category="object"
+    condition_expr="" url_expr="string:${object_url}/academics_contents"
     visible="True">
   <permission value="View"/>
@@ -47,5 +47,5 @@
  <action title="action_folder_contents" action_id="contents" category="object"
     condition_expr="" url_expr="string:${object/absolute_url}/folder_contents"
-    visible="True"/>
+    visible="False"/>
  <action title="delegate" action_id="localroles" category="object"
     condition_expr="" url_expr="string:${object_url}/folder_localrole_form"
Index: WAeUP_SRP/trunk/profiles/default/types/Department.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/types/Department.xml	(revision 295)
+++ WAeUP_SRP/trunk/profiles/default/types/Department.xml	(revision 296)
@@ -8,5 +8,5 @@
  <property name="product">WAeUP_SRP</property>
  <property name="factory">addDepartment</property>
- <property name="immediate_view">folder_view</property>
+ <property name="immediate_view">academics_contents</property>
  <property name="global_allow">True</property>
  <property name="filter_content_types">True</property>
@@ -33,9 +33,8 @@
  <property name="storage_methods"/>
  <property name="cps_is_portlet">False</property>
- <alias from="(Default)" to="temporary_view_all"/>
- <alias from="view" to="temporary_view_all"/>
- <action title="Standard View" action_id="view" category="object"
-    condition_expr="" url_expr="string:${object_url}/temporary_view_all"
-    visible="True">
+ <alias from="(Default)" to="academics_contents"/>
+ <alias from="view" to="academics_contents"/>
+ <action title="View" action_id="view" category="object" condition_expr=""
+    url_expr="string:${object_url}/academics_contents" visible="True">
   <permission value="View"/>
  </action>
@@ -53,13 +52,13 @@
  <action title="action_folder_contents" action_id="contents" category="object"
     condition_expr="python:member and 'Manager' in member.getRoles()"
-    url_expr="string:${object_url}/folder_contents" visible="True"/>
+    url_expr="string:${object_url}/folder_contents" visible="False"/>
  <action title="action_metadata" action_id="metadata" category="object"
     condition_expr="python:member and 'Manager' in member.getRoles()"
-    url_expr="string:${object_url}/cpsdocument_metadata" visible="True">
+    url_expr="string:${object_url}/cpsdocument_metadata" visible="False">
   <permission value="Modify portal content"/>
  </action>
  <action title="delegate" action_id="localroles" category="object"
     condition_expr="" url_expr="string:${object_url}/folder_localrole_form"
-    visible="False">
+    visible="True">
   <permission value="Modify portal content"/>
  </action>
Index: WAeUP_SRP/trunk/profiles/default/types/Faculty.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/types/Faculty.xml	(revision 295)
+++ WAeUP_SRP/trunk/profiles/default/types/Faculty.xml	(revision 296)
@@ -1,67 +1,0 @@
-<?xml version="1.0"?>
-<object name="Faculty" meta_type="CPS Flexible Type Information"
-   xmlns:i18n="http://xml.zope.org/namespaces/i18n">
- <property name="title">WAeUP Faculty</property>
- <property name="description"></property>
- <property name="content_icon"></property>
- <property name="content_meta_type">Faculty</property>
- <property name="product">WAeUP_SRP</property>
- <property name="factory">addFaculty</property>
- <property name="immediate_view">folder_view</property>
- <property name="global_allow">True</property>
- <property name="filter_content_types">True</property>
- <property name="allowed_content_types">
-  <element value="Department"/>
- </property>
- <property name="allow_discussion">False</property>
- <property name="cps_is_searchable">True</property>
- <property name="cps_proxy_type">btreefolderishdocument</property>
- <property name="cps_display_as_document_in_listing">True</property>
- <property name="schemas">
-  <element value="metadata"/>
-  <element value="common"/>
-  <element value="faculty"/>
- </property>
- <property name="layouts">
-  <element value="faculty"/>
- </property>
- <property name="layout_clusters">
-  <element value="metadata:metadata"/>
- </property>
- <property name="flexible_layouts"/>
- <property name="storage_methods"/>
- <property name="cps_is_portlet">False</property>
- <alias from="(Default)" to="temporary_view_all"/>
- <alias from="view" to="temporary_view_all"/>
- <action title="Standard View" action_id="view" category="object"
-    condition_expr="" url_expr="string:${object_url}/temporary_view_all"
-    visible="True">
-  <permission value="View"/>
- </action>
- <action title="action_edit" action_id="edit" category="object"
-    condition_expr="python:member and 'Manager' in member.getRoles()"
-    url_expr="string:${object_url}/cpsdocument_edit_form" visible="True">
-  <permission value="Modify portal content"/>
- </action>
- <action title="Add Department" action_id="add_department" category="object"
-    url_expr="string:${object/absolute_url}/content_create?type_name=Department"
-    condition_expr=""
-    visible="True">
-  <permission value=""/>
- </action>
- <action title="action_folder_contents" action_id="contents" category="object"
-    condition_expr="" url_expr="string:${object_url}/folder_contents"
-    visible="False">
-  <permission value=""/>
- </action>
- <action title="action_metadata" action_id="metadata" category="object"
-    condition_expr="python:member and 'Manager' in member.getRoles()"
-    url_expr="string:${object_url}/cpsdocument_metadata" visible="True">
-  <permission value="Modify portal content"/>
- </action>
- <action title="delegate" action_id="localroles" category="object"
-    condition_expr="" url_expr="string:${object_url}/folder_localrole_form"
-    visible="False">
-  <permission value="Modify portal content"/>
- </action>
-</object>
Index: WAeUP_SRP/trunk/profiles/default/types/StudentsFolder.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/types/StudentsFolder.xml	(revision 295)
+++ WAeUP_SRP/trunk/profiles/default/types/StudentsFolder.xml	(revision 296)
@@ -6,6 +6,6 @@
  <property name="content_icon">students_folder.gif</property>
  <property name="content_meta_type">StudentsFolder</property>
- <property name="product">CPSDefault</property>
- <property name="factory">addFolder</property>
+ <property name="product">WAeUP_SRP</property>
+ <property name="factory">addStudentsFolder</property>
  <property name="immediate_view">folder_view</property>
  <property name="global_allow">True</property>
Index: WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_display_contents.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_display_contents.pt	(revision 296)
+++ WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_display_contents.pt	(revision 296)
@@ -0,0 +1,120 @@
+<!-- a content_lib macro -->
+<!-- $Id: content_lib_display_contents.pt 32722 2006-02-10 15:21:49Z mturcu $ -->
+
+<!-- List contents in 'items' in the specified number of columns
+  with the given format -->
+
+<metal:block define-macro="display_contents">
+<tal:block
+  define="tmp_format format|nothing;
+          tmp_sort_by sort_by|nothing;
+          tmp_direction direction|nothing;
+          tmp_columns columns|nothing;
+          tmp_items_per_page items_per_page|nothing;
+          tmp_nav_action nav_action|nothing;
+          tmp_filter filter|nothing;
+          tmp_detail_tab_columns detail_tab_columns|nothing;
+          params python:here.getDisplayParams(format=tmp_format,
+                          sort_by=tmp_sort_by,
+                          direction=tmp_direction,
+                          columns=tmp_columns,
+                          items_per_page=tmp_items_per_page,
+                          nav_action=tmp_nav_action,
+                          nb_items=len(items),
+                          filter=tmp_filter,
+                          detail_tab_columns=tmp_detail_tab_columns);
+          format params/format;
+          sort_by params/sort_by;
+          direction params/direction;
+          columns params/columns;
+          items_per_page params/items_per_page;
+          nav_action params/nav_action;
+          filter params/filter;
+          detail_tab_columns params/detail_tab_columns;
+          mq nocall:modules/ZTUtils/make_query;
+          form request/form;
+          zoom zoom|python:0;
+          batches_all python:here.getBatchList(items, columns, items_per_page,
+                                               zoom);
+          batches python:batches_all[0];
+          batch_info python:batches_all[1];
+          zoomed python:batches_all[2];
+     ">
+ <tal:block tal:condition="python: batch_info and batch_info['nb_pages'] > 1">
+    <div class="batchLayout">
+        <span i18n:translate="">
+          Objects: 
+          <strong>
+            <tal:block replace="batch_info/start"
+            i18n:name="batch_start" /> - <tal:block replace="batch_info/limit"
+            i18n:name="batch_limit" />
+          </strong>
+          of <tal:block replace="batch_info/length"
+            i18n:name="batch_length" />
+         </span>
+    </div>
+  <br />
+ </tal:block>
+  <table width="100%" cellspacing="0" cellpadding="0"
+    summary="zoomed layout"
+    tal:condition="zoomed">
+    <tr tal:repeat="item zoomed">
+      <td align="left" valign="top">
+       <tal:block define="no_form not:nothing;
+         info python:here.getContentInfo(item, level=1, cpsmcat=cpsmcat);">
+         <metal:block use-macro="here/content_lib_info_summary/macros/info_summary" />
+         <br /><br />
+       </tal:block>
+      </td>
+    </tr>
+  </table>
+  <table width="100%" cellspacing="0" cellpadding="0"
+    summary="content layout column"
+    tal:condition="batches">
+    <tr>
+      <td align="left" valign="top"
+          tal:repeat="batch_items batches">
+        <tal:block condition="batch_items">
+          <metal:block
+            use-macro="here/academics_content_lib_display_contents_column/macros/display_contents_column" />
+        </tal:block>
+      </td>
+    </tr>
+  </table>
+  <tal:block condition="python:batch_info and batch_info['nb_pages'] > 1">
+      <div class="pageNavigationLayout">
+          <a tal:define="previous batch_info/previous"
+             tal:condition="python:previous is not None"
+             tal:attributes="href python:'%s?%s'%(request['URL'],
+                                            mq(request.form, b_start=0))">
+              (&lt;&lt;)</a>
+          <a tal:define="previous batch_info/previous"
+             tal:condition="python:previous is not None"
+             tal:attributes="href python:'%s?%s'%(request['URL'],
+                                            mq(request.form, b_start=previous))"
+             i18n:translate="batch_previous">Previous</a>
+          <tal:block repeat="page batch_info/pages">
+            <tal:block condition="python:page != batch_info['start'] - 1">
+              <a tal:attributes="href python:'%s?%s'%(request['URL'],
+                mq(request.form, b_start=page))"
+                tal:content="repeat/page/number">1</a>&nbsp;
+            </tal:block>
+            <tal:block condition="python:page == batch_info['start'] - 1">
+              <span tal:content="string:${repeat/page/number}" />&nbsp;
+            </tal:block>
+          </tal:block>
+          <a tal:define="next batch_info/next"
+             tal:condition="python:next is not None"
+             tal:attributes="href python:'%s?%s'%(request['URL'],
+                                                mq(request.form, b_start=next))"
+             i18n:translate="batch_next">Next</a>
+          <a tal:define="next batch_info/next;
+             last_page python:batch_info['pages'][-1]"
+             tal:condition="python:next is not None"
+             tal:attributes="href python:'%s?%s'%(request['URL'],
+                                            mq(request.form, b_start=last_page))">
+              (&gt;&gt;)</a>
+      </div>
+  </tal:block>
+</tal:block>
+</metal:block>
Index: WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_info_detail_tab.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_info_detail_tab.pt	(revision 296)
+++ WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_info_detail_tab.pt	(revision 296)
@@ -0,0 +1,115 @@
+<!-- a content_lib macro -->
+<!-- $Id: content_lib_info_detail_tab.pt 32943 2006-02-17 14:46:28Z div $ -->
+<!-- All doc information -->
+
+<metal:block define-macro="info_detail_tab"
+             tal:define="title_in_tabs python: 'title' in detail_tab_columns;
+                         long_title_in_tabs python:'long_title' in detail_tab_columns;
+                         type_in_tabs python:'type' in detail_tab_columns;
+                         size_in_tabs python:'size' in detail_tab_columns;
+                         date_in_tabs python:'date' in detail_tab_columns;
+                         author_in_tabs python:'author' in detail_tab_columns;
+                         status_in_tabs python:'status' in detail_tab_columns;
+                         version_in_tabs python:'version' in detail_tab_columns;
+                         context_url context_url|here/getContextUrl;
+                        ">
+<tal:block condition="start">
+  <tal:block replace='structure string:&lt;table class="contentListing" width="100%" summary="content layout" id="folder_content">' />
+  <thead>
+    <tr>
+      <td> </td>
+      <th tal:condition="type_in_tabs" align="center">
+        <strong tal:define="sort_type python:sort_by=='type'"
+           tal:omit-tag="not:sort_type"><a href=""
+           tal:attributes="href python:'%s/changeDisplayParams?display_order=%s' % (context_url, test(sort_type and direction=='asc','type_desc','type_asc'))"
+           i18n:translate="label_info_tab_type"></a></strong></th>
+      <th tal:condition="title_in_tabs" align="center">
+        <strong tal:define="sort_title python:sort_by=='title'"
+           tal:omit-tag="not:sort_title"><a href=""
+           tal:attributes="href python:'%s/changeDisplayParams?display_order=%s' % (context_url, test(sort_title and direction=='asc','title_desc','title_asc'))"
+           i18n:translate="label_info_tab_title"></a></strong></th>
+      <th tal:condition="long_title_in_tabs" align="center">
+        <strong tal:define="sort_title python:sort_by=='title'"
+           tal:omit-tag="not:sort_title"><a href=""
+           tal:attributes="href python:'%s/changeDisplayParams?display_order=%s' % (context_url, test(sort_title and direction=='asc','title_desc','title_asc'))"
+           i18n:translate="label_info_tab_title"></a></strong></th>
+      <th tal:condition="size_in_tabs" align="center">
+        <strong tal:define="sort_size python:sort_by=='size'"
+           tal:omit-tag="not:sort_size"><a href=""
+           tal:attributes="href python:'%s/changeDisplayParams?display_order=%s' % (context_url, test(sort_size and direction=='asc','size_desc','size_asc'))"
+           i18n:translate="label_info_tab_size"></a></strong></th>
+      <th tal:condition="date_in_tabs" align="center">
+        <strong tal:define="sort_date python:sort_by=='date'"
+           tal:omit-tag="not:sort_date"><a href=""
+           tal:attributes="href python:'%s/changeDisplayParams?display_order=%s' % (context_url, test(sort_date and direction=='asc','date_desc','date_asc'))"
+           i18n:translate="label_info_tab_date"></a></strong></th>
+      <th tal:condition="author_in_tabs" align="center">
+        <strong tal:define="sort_author python:sort_by=='author'"
+           tal:omit-tag="not:sort_author"><a href=""
+           tal:attributes="href python:'%s/changeDisplayParams?display_order=%s' % (context_url, test(sort_author and direction=='asc','author_desc','author_asc'))"
+           i18n:translate="label_info_tab_author"></a></strong></th>
+      <th tal:condition="status_in_tabs" align="center">
+        <strong tal:define="sort_status python:sort_by=='status'"
+           tal:omit-tag="not:sort_status"><a href=""
+           tal:attributes="href python:'%s/changeDisplayParams?display_order=%s' % (context_url, test(sort_status and direction=='asc','status_desc','status_asc'))"
+           i18n:translate="label_info_tab_status"></a></strong></th>
+      <th tal:condition="version_in_tabs" align="center">
+        <strong tal:define="sort_version python:sort_by=='version'"
+           tal:omit-tag="not:sort_version"><a href=""
+           tal:attributes="href python:'%s/changeDisplayParams?display_order=%s' % (context_url, test(sort_version and direction=='asc','version_desc','version_asc'))"
+           i18n:translate="label_info_tab_version"></a></strong></th>
+    </tr>
+  </thead>
+  <tal:block replace='structure string:&lt;tbody id="folder_content_tbody">' />
+</tal:block>
+
+<tr tal:define="action python:test(info['type'] in ('Section', 'Workspace'),
+                '/folder_contents', '')"
+    tal:attributes="class python:test(repeat['item'].even(), 'even ajaxtd', 'odd ajaxtd')">
+  <td align="left" valign="middle" style="width: 5px;">
+    <input type="checkbox" name="ids:list" value="" id="" class="noborder"
+           tal:condition="not:no_form"
+           tal:define="id item/getId"
+           tal:attributes="value python:site_wide and item.getContextUrl(utool=utool) or id;
+                           id python:'cb_' + id;
+                           checked python:id in choosen_ids;
+                          " />
+  </td>
+  <td align="center" tal:condition="type_in_tabs"
+      tal:define="draggableclass python:test(not no_form  and sort_by is None, 'draggable droppable', '');
+                  draggableid python:'draggable'+str(item.getId());
+                  draggablemouseover
+                    python:test(not no_form  and sort_by is None, 'setCursor(this, \'move\')', '')">
+    <div tal:attributes="class draggableclass; id draggableid; onmouseover draggablemouseover">
+      <img tal:replace="structure python:here.getImgTag(info['icon'],
+                        base_url=base_url, title=info['type'])" />
+    </div>
+  </td>
+  <td tal:condition="title_in_tabs">
+    <a href="" tal:attributes="href string:${info/url}${action};
+                               title info/description;">
+    <strong tal:content="info/title_or_id">ID</strong></a></td>
+  <td tal:condition="long_title_in_tabs">
+    <a href="" tal:attributes="href string:${info/url}${action};
+                               title info/description;">
+    <strong tal:content="info/long_title|info/title_or_id">ID</strong></a></td>
+  <td align="right" tal:condition="size_in_tabs">
+    <span tal:condition="info/size|nothing" tal:content="info/size"> </span></td>
+  <td align="center" tal:condition="date_in_tabs">
+    <span tal:content="info/time_str">May 6,...</span></td>
+  <td align="center" tal:condition="author_in_tabs">
+    <span tal:content="info/creator"> </span></td>
+  <td align="center" tal:condition="status_in_tabs"
+      tal:content="info/review_state" tal:attributes="class info/review_state"
+      i18n:translate="">published</td>
+  <td align="center" tal:condition="version_in_tabs">
+    v-<tal:block replace="info/rev" />
+    <tal:block i18n:translate=""
+      content="string:label_language_${info/lang}">en</tal:block>
+  </td>
+</tr>
+<tal:block condition="end" tal:replace="structure string:&lt;/tbody>">
+</tal:block>
+<tal:block condition="end" tal:replace="structure string:&lt;/table>">
+</tal:block>
+</metal:block>
Index: WAeUP_SRP/trunk/skins/waeup_academics/academics_contents.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/academics_contents.pt	(revision 296)
+++ WAeUP_SRP/trunk/skins/waeup_academics/academics_contents.pt	(revision 296)
@@ -0,0 +1,135 @@
+<metal:html tal:define="display_change request/change_display|nothing;
+                        params here/getDisplayParams;
+                        sort_by params/sort_by;
+                        direction params/direction;
+                        format string:detail_tab;
+                        displayed python:request.get('displayed', None);
+                       ">
+
+<metal:body use-macro="here/content_lib_master/macros/master">
+
+<metal:header metal:fill-slot="header">
+  <h1 tal:content="here/title_or_id">
+    Page Title
+  </h1>
+  <div tal:condition="nothing" id="bylineFolder"
+    class="ddefault">
+    <small>
+      <span metal:use-macro="here/content_lib_byline/macros/byline">By Me</span>
+    </small>
+  </div>
+  <a href="" accesskey="V"
+     style="display:none"
+     tal:attributes="href string:${context_url}/"></a>
+  <a href="" accesskey="N"
+     style="display:none"
+     tal:attributes="href string:${context_url}/folder_factories"></a>
+  <div style="text-align: right" tal:condition="python: False and (not here.isInWorkspace() or (here.isInWorkspace() and sort_by))">
+    <form action="" method="post"
+          tal:attributes="action string:${here_url}/changeDisplayParams">
+      <p>
+      <tal:block condition="python:not here.isInWorkspace()">
+        <metal:params use-macro="here/content_lib_display_params_form/macros/display_params_form" />
+        <input type="submit" value="button_apply" class="standalone"
+             i18n:attributes="value" />
+      </tal:block>
+      <tal:block condition="python:here.isInWorkspace() and sort_by">
+        <input type="hidden" name="display_order" value="None" />
+        <input type="submit" value="label_none" class="standalone"
+             i18n:attributes="value" />
+      </tal:block>
+      </p>
+    </form>
+  </div>
+</metal:header>
+
+<metal:main fill-slot="javascript_head_slot">
+  <tal:block tal:replace="nothing">
+    XXX Deactivated for CPS 3.4.0, will be re-enabled for 3.4.1
+    <script type="text/javascript" src="prototype.js"
+      tal:attributes="src string:${base_url}prototype.js"></script>
+    <script type="text/javascript" src="effects.js"
+      tal:attributes="src string:${base_url}effects.js"></script>
+    <script type="text/javascript" src="dragdrop.js"
+      tal:attributes="src string:${base_url}dragdrop.js"></script>
+    <script type="text/javascript" src="cpsdefault.js"
+      tal:attributes="src string:${base_url}cpsdefault.js"></script>
+  </tal:block>
+</metal:main>
+
+<metal:main fill-slot="main"
+  tal:define="list_here python:checkPerm('List folder contents', here);">
+
+  <div tal:condition="not: list_here"
+    tal:define="response request/RESPONSE;url here_url;">
+    <span tal:define="redirect python: response.redirect(url)"></span>
+  </div>
+
+  <form action="" method="post" class="group"
+        tal:attributes="action here_url"
+        tal:define="no_form python:not checkPerm('Modify portal content', here);
+
+                    nav_action string:folder_contents;
+                    items python:here.getFolderContents(displayed=displayed);">
+
+    <metal:block use-macro="here/academics_content_lib_display_contents/macros/display_contents" />
+
+    <table width="100%" cellspacing="0" cellpadding="2"
+      summary="contents of the folder"
+      class="folderButtons"
+      tal:define="can_add python:checkPerm('Add portal content', here);
+                  can_del python:checkPerm('Delete objects', here);">
+      <tr>
+        <td align="left" valign="top" rowspan="3"></td>
+        <td align="left" valign="top">
+          <span tal:condition="items">
+            <input type="button" value="button_select_all" class="context"
+                   onclick="someJavaScriptFunctionThatWillBeReplaced"
+                   i18n:attributes="value"
+                   tal:attributes="onclick python:'toggleSelect(this, \'%s\', \'%s\')'
+                                   % (cpsmcat('button_select_all'), cpsmcat('button_deselect_all'))" />
+          </span>
+          <span tal:condition="python: False and can_add">
+            <input type="submit" name="folder_cut:method" value="button_cut"
+                   class="context" i18n:attributes="value"
+                   tal:condition="can_del" />
+            <input type="submit" name="folder_copy:method" value="button_copy"
+              class="context" i18n:attributes="value" />
+          </span>
+          <span tal:condition="python:False and can_add and here.cb_dataValid()">
+            <input type="submit" name="folder_paste:method" value="button_paste"
+              class="context" i18n:attributes="value" />
+          </span>
+          <span tal:condition="can_del">
+            <input type="submit" name="folder_rename_form:method"
+              class="context" value="button_rename" i18n:attributes="value" />
+            <input type="submit" name="folder_delete:method" value="button_delete"
+              class="destructive" i18n:attributes="value"
+              tal:attributes="onclick python:'return window.confirm(\'%s\')' %
+              (cpsmcat('description_confirm_delete'), )" />
+          </span>
+        </td>
+      </tr>
+      <tr tal:define="isWsManager python:checkPerm('Change subobjects order',
+                                                   here);"
+          tal:condition="python:False and isWsManager and sort_by is None">
+        <td>
+          <input type="submit" value="button_move_up" class="context moveUp"
+                 i18n:attributes="value" name="moveItemsUp:method" />
+          <input type="submit" value="button_move_down" class="context moveDown"
+                 i18n:attributes="value" name="moveItemsDown:method" />
+          <input type="submit" value="button_move_top" class="context moveTop"
+                 i18n:attributes="value" name="moveItemsTop:method" />
+          <input type="submit" value="button_move_bottom"
+                 class="context moveBottom"
+                 i18n:attributes="value" name="moveItemsBottom:method" />
+        </td>
+      </tr>
+    </table>
+  </form>
+</metal:main>
+
+<metal:sub fill-slot="sub"/>
+
+</metal:body>
+</metal:html>
Index: WAeUP_SRP/trunk/skins/waeup_academics/academics_view.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/academics_view.py	(revision 295)
+++ WAeUP_SRP/trunk/skins/waeup_academics/academics_view.py	(revision 296)
@@ -28,5 +28,5 @@
 #return res
 
-if 1 or psm == 'invalid':
+if True:# or psm == 'invalid':
     return context.academics_view_form(rendered = res,
                                  psm = 'Please correct your errors',
Index: WAeUP_SRP/trunk/skins/waeup_academics/academics_view_form.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/academics_view_form.pt	(revision 295)
+++ WAeUP_SRP/trunk/skins/waeup_academics/academics_view_form.pt	(revision 296)
@@ -12,9 +12,7 @@
   <metal:block fill-slot="main"
                tal:define="roles member/getRoles;
-               backend python:'UniversityManager' in roles or 'StudentManager' in roles;
-               frontend python:'Student' in roles or isAnon;
                folder here/getContent;
                items here/contentValues;
-               rendered options;"
+               rend options/rendered;"
                >
     <h1> <span tal:content="context/title_or_id" /></h1>      
@@ -23,5 +21,5 @@
  
     <p>The Faculties:</p>
-<span tal:replace="structure rendered" />  
+<span tal:replace="structure rend" />  
   </metal:block>
   <metal:block fill-slot="sub">
Index: WAeUP_SRP/trunk/skins/waeup_custom/getCustomDisplayParams.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_custom/getCustomDisplayParams.py	(revision 296)
+++ WAeUP_SRP/trunk/skins/waeup_custom/getCustomDisplayParams.py	(revision 296)
@@ -0,0 +1,42 @@
+## Script (Python) "getCustomDisplayParams"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=
+##
+# $Id: getCustomDisplayParams.py 32717 2006-02-10 13:35:19Z mturcu $
+"""
+FIXME: docstring?
+"""
+if context.isInWorkspace():
+    custom_params = {'format': 'detail_tab',
+                     'sort_by': None,
+                     'direction': 'asc',
+                     'items_per_page': 30,
+                     'nav_action': 'folder_view',
+                     'filter': 0,
+                     'detail_tab_columns': ['title', 'type', 'size', 
+                                'date', 'author','status', 'version'],
+                    }
+
+else:
+    custom_params =  {'format': None,
+                      'sort_by': None,
+                      'direction': 'asc',
+                      'items_per_page': 30,
+                      'nav_action': 'folder_view',
+                      'filter': 0,
+                      'detail_tab_columns': ['long_title', 
+                                              #'type',
+                                              #'size',
+                                              #'date', 
+                                              #'author', 
+                                              'status', 
+                                              #'version'
+                                              ],
+                     }
+
+return custom_params
Index: WAeUP_SRP/trunk/skins/waeup_default/layout_row_edit.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_default/layout_row_edit.pt	(revision 295)
+++ WAeUP_SRP/trunk/skins/waeup_default/layout_row_edit.pt	(revision 296)
@@ -28,5 +28,5 @@
         <table width="100%" cellpadding="2" cellspacing="2" summary="Form layout">
           <tr tal:repeat="row layout/rows" valign="top">
-            <td tal:repeat="cell row"
+            <td tal:repeat="cell row" 
                 tal:attributes="colspan cell/ncols">
               <tal:block define="widget cell/widget;
