Index: WAeUP_SRP/trunk/skins/waeup_academics/academicsDisplayParams.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/academicsDisplayParams.py	(revision 432)
+++ WAeUP_SRP/trunk/skins/waeup_academics/academicsDisplayParams.py	(revision 432)
@@ -0,0 +1,73 @@
+## Script (Python) "getDisplayParams"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=format=None, sort_by=None, direction=None, columns=None, items_per_page=None, nav_action=None, nb_items=None, filter=None, detail_tab_columns=None
+##title=
+##
+# $Id: getDisplayParams.py 32288 2006-01-26 17:36:06Z tziade $
+"""Return params for display_content macro
+"""
+
+from Products.CPSUtil.session import sessionGet
+
+cps_pref = sessionGet(context.REQUEST, 'cps_display_params', {})
+def_params = context.getAcademicsDisplayParams()
+
+params = def_params
+
+if format:
+    params['format'] = format
+else:
+    params['format'] = cps_pref.get('format') or def_params['format']
+
+if sort_by:
+    params['sort_by'] = sort_by
+else:
+    params['sort_by'] = cps_pref.get('sort_by') or def_params['sort_by']
+
+if direction:
+    params['direction'] = direction
+else:
+    params['direction'] = cps_pref.get('direction') or def_params['direction']
+
+
+if nav_action:
+    params['nav_action'] = nav_action
+
+if columns:
+    params['columns'] = columns
+else:
+    fmt = params['format']
+    if fmt == 'icon':
+        col = 4
+        params['items_per_page'] = 12
+    elif fmt == 'compact':
+        col = 2
+    elif fmt == 'detail':
+        col = 1
+    elif fmt == 'detail_tab':
+        col = 1
+    elif fmt == 'one_column':
+        col = 1
+    else:
+        col = 1
+    params['columns'] = col
+
+if items_per_page:
+    params['items_per_page'] = items_per_page
+params['items_per_page'] = min(nb_items, params['items_per_page'])
+
+if filter is not None:
+    params['filter'] = filter
+else:
+    params['filter'] = def_params['filter']
+
+if detail_tab_columns:
+    params['detail_tab_columns'] = detail_tab_columns
+else:
+    params['detail_tab_columns'] = def_params['detail_tab_columns']
+
+return params
Index: WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_display_contents_column.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_display_contents_column.pt	(revision 430)
+++ WAeUP_SRP/trunk/skins/waeup_academics/academics_content_lib_display_contents_column.pt	(revision 432)
@@ -22,48 +22,4 @@
       ajax feedback
   </div>
-  <table tal:condition="python: not no_table and batch_items" width="100%" cellspacing="0"
-    cellpadding="5" summary="content column layout" id="folder_content">
-    <tbody id="folder_content_tbody">
-    <tal:block tal:repeat="item batch_items">
-      <tal:block define="info python:here.getContentInfo(item, level=1, cpsmcat=cpsmcat);
-                         review_state python:info['review_state'];
-                         item_id item/getId|string:noid,
-                         proxy_creator item/Creator|info/creator"
-                 condition="python:review_state != 'draft'
-                                   or (review_state == 'draft' and proxy_creator == member_id)
-                                   or is_local_manager">
-      <tr valign="top" class="ajaxtd">
-        <td align="left" valign="top">
-          <div tal:attributes="id python:'draggable'+str(item_id);
-                               class python:test(not no_form and sort_by is None, 'draggable droppable', '');
-                               onmouseover python:test(not no_form and sort_by is None,
-                                                  'setCursor(this, \'move\')', '')">
-            <table summary="content">
-              <tr>
-                <td align="left" valign="top" style="width: 5px">
-                  <input type="" name="" value="" id="" class="noborder"
-                         tal:define="id item/getId"
-                         tal:condition="python:(review_state not in ('locked', 'draft')
-                                              or is_local_manager) and not no_form"
-                         tal:attributes="value
-                          python:site_wide and item.getContextUrl(utool=utool) or id;
-                          id python:'cb_' + id;
-                          checked python:id in choosen_ids;
-                          type python:input_type;
-                          name python:input_name;" />
-                </td>
-                <td>
-                  <metal:block
-                    use-macro="here/academics_content_lib_info_detail_tab/macros/info_detail_tabs" />
-                </td>
-              </tr>
-            </table>
-          </div>
-        </td>
-      </tr>
-      </tal:block>
-    </tal:block>
-   </tbody>
-  </table>
   <tal:block condition="no_table">
     <tal:block repeat="item batch_items">
Index: WAeUP_SRP/trunk/skins/waeup_academics/academics_contents.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/academics_contents.pt	(revision 430)
+++ WAeUP_SRP/trunk/skins/waeup_academics/academics_contents.pt	(revision 432)
@@ -1,4 +1,4 @@
 <metal:html tal:define="display_change request/change_display|nothing;
-                        params here/getDisplayParams;
+                        params here/academicsDisplayParams;
                         sort_by params/sort_by;
                         direction params/direction;
@@ -20,16 +20,4 @@
     Page Title
   </h3>
-  <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>
 </metal:header>
 
@@ -64,5 +52,201 @@
                     items python:here.getFolderContents(displayed=displayed);">
 
-    <metal:block use-macro="here/academics_content_lib_display_contents/macros/display_contents" />
+<!-- 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 -->
+
+<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];
+     ">
+     <span tal:condition="python:0">
+        <span tal:content="params" /><br />
+        <span tal:content="batches_all" /><br />
+      </span>        
+ <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">
+<!-- a content_lib macro -->
+<!-- $Id: content_lib_display_contents_column.pt 34674 2006-03-23 08:57:49Z madarche $ -->
+
+<!-- Final display of items in a column using the given format -->
+  <tal:block define="no_form no_form|nothing;
+                     site_wide site_wide|nothing;
+                     format python:format or 'detail';
+                     choosen_ids python:request.SESSION.get('choosen_ids', []);
+                     dummy python:request.SESSION.update({'choosen_ids': []});
+                     no_table python:format == 'detail_tab';
+                     use_radio use_radio|nothing;
+                     input_type python: test(use_radio, 'radio', 'checkbox');
+                     input_name python: test(use_radio, 'ids', 'ids:list');
+                     member here/portal_membership/getAuthenticatedMember;
+                     member_id member/id;
+                     is_local_manager python:member.has_role(
+                                     ('Manager', 'WorkspaceManager'), here);
+">
+  <div id="ajax_psm" style="display:none" tal:condition="python:not no_form">
+      ajax feedback
+  </div>
+  <tal:block condition="no_table">
+    <tal:block repeat="item batch_items">
+    <tal:block define="info python:here.getContentInfo(item, level=1, cpsmcat=cpsmcat);
+                        review_state python:info['review_state'];
+                        proxy_creator python:item.Creator();
+                        start repeat/item/start|nothing;
+                        end repeat/item/end|nothing">
+      <tal:block tal:condition="python:review_state!='draft' or (review_state=='draft' and proxy_creator == member_id) or is_local_manager">
+      <metal:block use-macro="here/academics_content_lib_info_detail_tab/macros/info_detail_tab" />
+      </tal:block>
+    </tal:block>
+    </tal:block>
+  <br />
+  </tal:block>
+  </tal:block>
+  <tal:block tal:replace="nothing">
+  XXX Deactivated for CPS 3.4.0, will be re-enabled for 3.4.1
+
+  <tal:block tal:condition="python:not no_form and sort_by is None"
+               tal:define="ajax_working_msg python:cpsmcat('ajax_working');
+                           ajax_working_msg python:ajax_working_msg.replace('\'', '\\\'');
+                           ajax_failing_msg python:cpsmcat('ajax_failing');
+                           ajax_failing_msg python:ajax_failing_msg.replace('\'', '\\\'')">
+
+        <script type="text/javascript" tal:content="structure string:
+                var editor = new CPSContainerEditor('draggable', 'droppable',
+                                                    'droppable-in', '${format}',
+                                                    '${ajax_working_msg}',
+                                                    'folder_content', 'ajax_psm',
+                                                    '${ajax_failing_msg}');
+               // hooking observers
+               if (treeview_editor) {
+                 loadScript('portletrefresher', '++resource++portletrefresher.js');
+
+                 function refresh(event_id, trigger_id) {
+
+                   portlet_refresher.refreshPortlet(trigger_id);
+                   editor.reload();
+                 }
+
+                if ($$('portlet_navigation_sections'))
+                    container_events.observeEvent('element_dropped', 'portlet_navigation_sections',
+                                                refresh);
+
+                if ($$('portlet_navigation_workspaces'))
+                    container_events.observeEvent('element_dropped', 'portlet_navigation_workspaces',
+                                                refresh);
+
+               }
+
+               ">
+        </script>
+
+  </tal:block>
+  </tal:block>
+  </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>
 
     <table width="100%" cellspacing="0" cellpadding="2"
Index: WAeUP_SRP/trunk/skins/waeup_academics/getAcademicsDisplayParams.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_academics/getAcademicsDisplayParams.py	(revision 432)
+++ WAeUP_SRP/trunk/skins/waeup_academics/getAcademicsDisplayParams.py	(revision 432)
@@ -0,0 +1,32 @@
+## Script (Python) "getCustomDisplayParams"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=
+##
+# $Id: getAcademicsDisplayParams.py 32717 2006-02-10 13:35:19Z mturcu $
+"""
+The Academics batch parameters
+"""
+custom_params =  {'format': None,
+                  'sort_by': None,
+                  'direction': 'asc',
+                  'items_per_page': 50,
+                  'nav_action': 'folder_view',
+                  'filter': 0,
+                  'detail_tab_columns': ['long_title',
+                                         'id',
+                                          #'typetext',
+                                          #'size',
+                                          #'date', 
+                                          #'author', 
+                                          'status', 
+                                          #'version'
+                                          ],
+                 }
+
+return custom_params
+
Index: WAeUP_SRP/trunk/skins/waeup_custom/getBatchList.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_custom/getBatchList.py	(revision 432)
+++ WAeUP_SRP/trunk/skins/waeup_custom/getBatchList.py	(revision 432)
@@ -0,0 +1,106 @@
+## Script (Python) "getBatchList"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=items=[], columns=1, items_per_page=10, zoom=0, max_items=400
+##title=
+##
+# $Id: getBatchList.py 6281 2004-06-25 13:45:03Z dwyart $
+"""
+Given the desired number of colums, constructs a list of batches to render
+as much columns as necessary within a single macro.
+As well, return the page results link to display straight for the navigation
+"""
+
+from math import ceil
+from ZTUtils import Batch
+
+#
+# First constructing the batch
+#
+
+len_items = len(items)
+
+# desperately empty, no need to go further
+if not len_items:
+    return [], {}, []
+
+if max_items and max_items < len_items:
+    items = items[:max_items]
+    len_batch = max_items
+else:
+    len_batch = len_items
+
+b_start = int(context.REQUEST.get('b_start', 0))
+
+# extract the n first items in a zoomed list
+zoomed = []
+if not b_start and zoom:
+    zoom = int(zoom)
+    zoomed = Batch(items[:zoom], zoom, 0)
+    # deal with items left
+    items = items[zoom:]
+
+items_per_page = float(items_per_page)
+size = int(ceil(items_per_page / columns))
+
+b1 = Batch(items, size, b_start, orphan=0)
+batches = [b1]
+
+b_next = b1
+for c in range(columns - 1):
+    if b_next.next:
+        b_next = b_next.next
+        batches.append(b_next)
+
+#
+# Now the page results parameters
+#
+
+# Calculate the number of pages
+nb_pages = int(ceil(len_batch / items_per_page))
+
+# no more advanced arithmetics
+items_per_page = int(items_per_page)
+
+# Test if we are on the last page
+limit = b_start + items_per_page
+if  limit > len_batch:
+    limit = len_batch
+
+batch_info = {'nb_pages': nb_pages,
+              'start': b_start + 1,
+              'limit': limit,
+              'length': len_items,
+              'previous': None,
+              'next': None,
+              }
+
+# for the nb of items
+j = 0
+# for the current position in the search
+current = [0, 1]
+# list of b_start values
+pages = []
+
+# Loop over the number of pages and construct the page link
+for i in range(nb_pages):
+    pages.append(j)
+    if b_start == j:
+        current = [i + 1, j]
+    j += items_per_page
+
+# list of b_start to other pages
+batch_info['pages'] = pages
+
+# if we are not at the beginning of the file
+if current[0] > 1:
+    batch_info['previous'] = current[1] - items_per_page
+
+# Adding the next link if we are not at the end of the list
+if current[0] != nb_pages:
+    batch_info['next'] = current[1] + items_per_page
+
+return batches, batch_info, zoomed
Index: WAeUP_SRP/trunk/skins/waeup_custom/getCustomDisplayParams.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_custom/getCustomDisplayParams.py	(revision 430)
+++ WAeUP_SRP/trunk/skins/waeup_custom/getCustomDisplayParams.py	(revision 432)
@@ -28,5 +28,5 @@
                       'sort_by': None,
                       'direction': 'asc',
-                      'items_per_page': 30,
+                      'items_per_page': 50,
                       'nav_action': 'folder_view',
                       'filter': 0,
