Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 7907)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/pages.py	(revision 7908)
@@ -30,10 +30,12 @@
     IAuthentication, IUnauthenticatedPrincipal, ILogout)
 from zope.catalog.interfaces import ICatalog
+from zope.component import (
+    getUtility, queryUtility, createObject, getAllUtilitiesRegisteredFor,
+    getUtilitiesFor,
+    )
+#from zope.component.interfaces import Invalid
+from zope.event import notify
 from zope.securitypolicy.interfaces import (
     IPrincipalRoleManager, IPrincipalRoleMap)
-from zope.component import (
-    getUtility, queryUtility, createObject, getAllUtilitiesRegisteredFor)
-#from zope.component.interfaces import Invalid
-from zope.event import notify
 from zope.session.interfaces import ISession
 from waeup.kofa.browser import (
@@ -44,6 +46,7 @@
     IDepartment, IDepartmentAdd, ICourse, ICourseAdd, ICertificate,
     ICertificateAdd, ICertificateCourse, ICertificateCourseAdd)
+from waeup.kofa.browser.layout import jsaction, action, UtilityView
+from waeup.kofa.browser.resources import warning, datepicker, tabs, datatable
 from waeup.kofa.interfaces import MessageFactory as _
-from waeup.kofa.browser.resources import warning, datepicker, tabs, datatable
 from waeup.kofa.interfaces import(
     IKofaObject, IUsersContainer, IUserAccount, IDataCenter,
@@ -51,5 +54,5 @@
     ILocalRolesAssignable, DuplicationError, IConfigurationContainer,
     ISessionConfiguration, ISessionConfigurationAdd,
-    IPasswordValidator, IContactForm, IKofaUtils)
+    IPasswordValidator, IContactForm, IKofaUtils, ICSVExporter)
 from waeup.kofa.permissions import get_users_with_local_roles, get_all_roles
 from waeup.kofa.students.catalog import search as searchstudents
@@ -61,5 +64,4 @@
 from waeup.kofa.authentication import get_principal_role_manager
 from waeup.kofa.utils.helpers import get_user_account
-from waeup.kofa.browser.layout import jsaction, action, UtilityView
 
 grok.context(IKofaObject)
@@ -1210,4 +1212,47 @@
         return
 
+class ExportCSVPage(KofaPage):
+    grok.context(IDataCenter)
+    grok.name('export')
+    grok.template('datacenterexportpage')
+    grok.require('waeup.manageUniversity')
+    label = _('Download portal data as CSV file.')
+    pnav = 0
+    export_button = _(u'Download')
+
+    def getExporters(self):
+        utils = getUtilitiesFor(ICSVExporter)
+        title_name_tuples = [
+            (util.title, name) for name, util in utils]
+        return sorted(title_name_tuples)
+
+    def update(self, export=None, exporter=None):
+        if None in (export, exporter):
+            return
+        self.redirect(
+            self.url(self.context, 'export.csv') + '?exporter=%s' % exporter)
+        return
+        exporter = getUtility(ICSVExporter, name=exporter)
+        csv_data = exporter.export_all(grok.getSite())
+        #csv_data.seek(0)
+        self.response.setHeader(
+            'Content-Type', 'text/csv; charset=UTF-8')
+        return csv_data
+
+class ExportCSVView(grok.View):
+    grok.context(IDataCenter)
+    grok.name('export.csv')
+    grok.require('waeup.manageUniversity')
+
+    def render(self, exporter=None):
+        if exporter is None:
+            return
+        exporter = getUtility(ICSVExporter, name=exporter)
+        csv_data = exporter.export_all(grok.getSite())
+        #csv_data.seek(0)
+        self.response.setHeader(
+            'Content-Type', 'text/csv; charset=UTF-8')
+        return csv_data
+
 class ExportXMLPage(grok.View):
     """Deliver an XML representation of the context.
Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterexportpage.pt
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterexportpage.pt	(revision 7908)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/templates/datacenterexportpage.pt	(revision 7908)
@@ -0,0 +1,21 @@
+<form  i18n:domain="waeup.kofa" method="POST">
+  <div i18n:translate="">
+    Here you can download parts of portal data.
+  </div>
+  <div i18n:translate="">
+    Please pick the type of objects you want to export from the
+    selection below.
+  </div>
+  <div>
+    <select name="exporter">
+      <span tal:repeat="items view/getExporters" tal:omit-tag="">
+	<option tal:define="name python: items[1]; title python: items[0]"
+		tal:attributes="value name">
+	  <span tal:replace="title">TITLE</span>
+	</option>
+      </span>
+    </select>
+  </div>
+  <input i18n:translate="" type="submit" class="btn primary" name="export"
+	 tal:attributes="value view/export_button" />
+</form>
Index: /main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py	(revision 7907)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/browser/viewlets.py	(revision 7908)
@@ -557,4 +557,13 @@
     text = _('Upload CSV file')
 
+class ExportCSVButton(ActionButton):
+    grok.context(IDataCenter)
+    grok.view(DatacenterPage)
+    grok.require('waeup.manageUniversity')
+    grok.order(7)
+    icon = 'go-down-16x16.png'
+    target = '@@export'
+    text = _('Export CSV file')
+
 #
 # Primary navigation tabs (in upper left navigation bar)...
