Index: main/waeup.futminna/trunk/CHANGES.txt
===================================================================
--- main/waeup.futminna/trunk/CHANGES.txt	(revision 11397)
+++ main/waeup.futminna/trunk/CHANGES.txt	(revision 11398)
@@ -2,41 +2,17 @@
 *******
 
-0.2 (unreleased)
+1.0.1dev (unreleased)
+=====================
+
+* No changes yet.
+
+1.0 (2014-02-24)
 ================
 
-Feature changes
----------------
+* Diazofied whole package.
 
-* Started switch to groktoolkit (grok 1.1) based
-  application. `waeup.kofa` is not compatible with grok 1.0 anymore.
+* Removed sphinx docs.
 
-* Added first rudimentary support for application plugins. Plugins are
-  looked up by the main app on creation time and created afterwards.
-
-* Added first rudimentary support for RSS2.0 feeds.
-
-* Generated filenames now have a filename extension that indicates
-  mode of processing. So fred.csv becomes fred.create.pending.csv when
-  being batch processed and something fails.
-
-* Coverage reports are now generated in ``coverage-report`` subdir of
-  build-directory.
-
-Bug fixes
----------
-
-* Removed all references to stuff in university submodule into the
-  module itself or replaced it with proper code. This way the
-  university submodule could be factored out of the waeup.kofa
-  package. Fixed bug #23.
-
-* Fixed default obj updater in batchprocessing. Fixed bug #17.
-
-* Fixed handling of pending file names, fixed bug #16.
-
-* Removed quick importer and all related components.
-
-* Removed TestData folder. It was too heavy and test data can be
-  created on-the-fly.
+* Added generic install instructions.
 
 
@@ -44,4 +20,3 @@
 ================
 
-Initial version. (Incomplete) rewrite from the former CPS-based
-application.
+Initial version.
Index: main/waeup.futminna/trunk/INSTALL.txt
===================================================================
--- main/waeup.futminna/trunk/INSTALL.txt	(revision 11398)
+++ main/waeup.futminna/trunk/INSTALL.txt	(revision 11398)
@@ -0,0 +1,416 @@
+Installation of Kofa
+####################
+
+These are generic installation instructions for the WAeUP_ ``Kofa``
+student information portal and customized versions thereof.
+
+For specific aspects of this package please refer to the local README
+file.
+
+Please note, that **only Linux-based installs** are described and actively
+supported. We recommend use of Debian_ / Ubuntu_.
+
+.. note:: This means we do not actively support Windows(tm)!
+
+.. contents::
+
+
+Prerequisites
+*************
+
+The Kofa packages are based on `Grok`_, which is a Python_
+framework for agile webapplication development. Grok_ itself is based
+on `Zope`_.
+
+Both, Grok_ and Zope_, are written in the `Python`_ programming
+language (with parts written in C). You therefore have to have
+`Python`_ installed (including `Python`_ headers).
+
+
+Preparing the System
+====================
+
+For a `Kofa` install we need of course `Python`_ installed as well as
+some standard developer tools like C compilers, C libraries, etc.
+
+What you need (Debian/Ubuntu package names in brackets):
+
+* Python 2.7 (``python2.7``)
+
+* Python 2.7 development files (``python2.7-dev``)
+
+* A C-Compiler with basic C developer libraries (``build-essential``)
+
+* A subversion client (``svn``)
+
+* enscript (``enscript``) [optional]
+
+  This is only needed if you want test coverage reports.
+
+All these packages can be installed on Debian systems like this::
+
+  $ sudo apt-get install python2.7 python2.7-dev svn \
+                         build-essential enscript
+
+Afterwards you should be able to enter::
+
+  $ python2.7
+
+at the commandline and get a Python_ prompt. Quit the interpreter
+pressing <CTRL-D>.
+
+
+Installing `virtualenv`
+=======================
+
+We strongly suggest use of `virtualenv`_ to create Python_ sandboxes
+where you can run your code without touching any other installations.
+
+`virtualenv`_ is also the only possibility to build a `Kofa` install
+without the need of superuser permissions. In short: `virtualenv`_
+will make your life easier. Use it.
+
+Detailed install instructions for `virtualenv`_ can be found on
+http://www.virtualenv.org/en/latest/virtualenv.html#installation.
+
+The short way for a user install (no superuser perms required) is like
+this::
+
+  $ curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.4.tar.gz#md5=9accc2d3f0ec1da479ce2c3d1fdff06e
+  $ tar xvfz virtualenv-1.11.4.tar.gz
+  $ cd virtualenv-1.11.4
+  $ python virtualenv.py py27
+
+Superusers can install `virtualenv`_ system-wide much easier. On
+`Debian`_/`Ubuntu`_ systems where you have superuser permissions, you
+can install `virtualenv`_ via::
+
+  $ sudo apt-get install python-virtualenv
+
+*Or*, if `pip` is installed already (superusers can install it via ``sudo apt-get install python-pip`` on `Debian`_/`Ubuntu`_)::
+
+  $ sudo pip install virtualenv
+
+In the following, when referring to the `virtualenv` command, we talk
+of the system-wide available command or the ``virtualenv.py`` script
+installed for a local user. In the latter case you should read::
+
+  $ virtualenv ...
+
+as::
+
+  $ python /path/to/my/virtualenv.py ...
+
+
+Creating a sandbox
+==================
+
+After installing `virtualenv`_ you can install local sandboxes like
+this::
+
+  $ virtualenv --no-site-packages py27
+
+where ``py27`` is a directory in the filesystem where your sandbox
+will be created. `virtualenv` will also create this directory for
+you. It is recommended to use a sandbox name that is short and at the
+same time reflects the Python version used (here: Python 2.7).
+
+By passing the ``no-site-packages`` switch we tell `virtualenv` to
+provide us a clean environment without any extra-packages installed
+systemwide. More recent versions of `virtualenv`_ have this option set
+by default.
+
+Another often used option of `virtualenv`_ is ``-p``. With ``-p`` you
+can tell `virtualenv`_ which Python executable to use as base for the
+new sandbox.
+
+You now can activate the sandbox by doing::
+
+  $ source py27/bin/activate
+  (py27)$
+
+You will notice that the input prompt changes.
+
+To deactivate the sandbox at any time, enter::
+
+  (py27)$ deactivate
+
+and the prompt will be the same as before the activation.
+
+For the following steps make sure the sandbox is active.
+
+
+Creating a working place
+========================
+
+In the sandbox we now create our real working
+environment. To do this, we change to the sandbox and checkout the
+sources of Kofa from the subversion server::
+
+  (py27)$ cd mysandbox/
+  (py27)$ svn co https://svn.waeup.org/repos/main/waeup.kofa/trunk kofa-trunk
+
+where ``kofa-trunk`` is only a name we've chosen here to make clear
+where the sources come from. In this case we are installing the Kofa base
+package.
+
+The command should fetch the Kofa base package sources for you and
+put it in the directory ``kofa-trunk/``.
+
+Now enter the new directory::
+
+  (py27)$ cd kofa-trunk
+
+
+You can run ``Kofa`` with a single client (useful for evaluation,
+development, etc.) or with multiple clients running in parallel. The
+latter setup is useful in productive environments with many thousands
+users. We will cover both setup types one after another.
+
+
+Part 1: Single Client Setup
+***************************
+
+Preparing the build
+===================
+
+In the sources directory (``kofa-trunk/``) you have to prepare the
+project to fetch needed components (eggs), compile C-code parts,
+etc. This steip will not touch any external projects::
+
+  (py27)$ python bootstrap.py
+
+This will generate some directories and the ``buildout`` script in
+``bin/`` for us. This step must be executed only once for each
+instance.
+
+You can now deactivate the sandbox::
+
+  (py27)$ deactivate
+
+Now we can do the real build by triggering::
+
+  $ bin/buildout
+
+If this is your first install of some Grok-related project, this step
+will need some time as lots of sources have to be fetched, many
+components must be compiled, etc.
+
+This step must be redone whenever you change something in
+``buildout.cfg`` or ``setup.py``.
+
+Note that if you have more than one sandbox for a Zope-based web
+application, it will probably make sense to share the eggs between the
+different sandboxes.  You can tell ``zc.buildout`` to use a central
+eggs directory by creating ``~/.buildout/default.cfg`` with the
+following contents::
+
+  [buildout]
+  eggs-directory = /home/bruno/buildout-eggs
+
+
+Start the instance
+==================
+
+You should be able now to start the created instance by doing::
+
+  $ bin/zopectl fg
+
+Alternatively you can do::
+
+  $ bin/paster serve parts/etc/deploy.ini
+
+The port numbers where Kofa is running on your server are defined in
+buildout.cfg under [kofa_params].
+
+If you now point a browser to the right port on your server, for example ::
+
+  localhost:8080
+
+you should get a login pop-up, where you can login as superuser with
+``grok`` and ``grok`` as username/password (Kofa base package only!).
+
+You can stop the instance by pressing <CTRL-C>.
+
+If you are connected and logged in,
+you should be able to add the grok-based applications
+(such as ``University``) from the menu.
+
+Add an instance of ``University`` and click on the link next to the
+then visible entry in the list of installed applications.
+
+Running the tests
+=================
+
+The tests are easily run by executing the test runner that's
+installed in the ``bin`` directory::
+
+  $ bin/test
+
+
+Part 2: Deploying Kofa as ZEO install
+*************************************
+
+Each ZEO install consists of at least one ZEO server and normally two
+or more ZEO clients. While the ZEO server is meant to manage the ZODB
+database for clients, the clients connect to the outside world, listen
+for request and do the real dataprocessing.
+
+We prepared a `buildout` configuration that sets up one server
+configuration and two client configs. This configuration is in
+``buildout-zeo.cfg``.
+
+Generating the ZEO setup
+========================
+
+To install Kofa ZEO-based you can run `buildout` with the given
+(or your own) configuration file like this::
+
+  $ ./bin/buildout -c buildout-zeo.cfg
+
+This should generate all scripts necessary to run servers, clients,
+etc.
+
+Starting ZEO servers and clients
+================================
+
+First start the server::
+
+  $ ./bin/zeo_server start
+
+Clients can be started by doing::
+
+  $ ./bin/zeo_client1 start
+  $ ./bin/zeo_client2 start
+
+This will start both clients in daemon mode.
+
+Instead of ``start`` you can, as usually, start an instance in
+foreground (``fg``), etc. You know the drill.
+
+
+Manually starting ZEO clients
+=============================
+
+This is normally not neccessary.
+
+``zeo_clientN`` scripts are basically wrappers around calls to
+``bin/paster``. You can bypass this wrapper and start a client
+'manually' like this::
+
+  $ ./bin/paster serve --pid-file var/zeo1.pid --daemon \
+        pars/etc/zeo1.ini
+
+It is important to give a pid-file as paster otherwise can not start
+different clients (they would all refer to the same pid file
+`paster.pid` and refuse to start after the first client was started).
+
+
+Setup (paramters, ports, etc.)
+==============================
+
+By default the server will listen on port 8100 for requests from
+localhost (not: from the outside world).
+
+You can change ZEO server settings in the ``[zeo_server]`` section
+of ``buildout-zeo.conf``. Run `buildout` afterwards.
+
+The clients will listen on port 8081 and 8082. You can change settings
+in ``etc/zeo1.ini.in`` and ``etc/zeo2.ini.in`` respectively. Run
+buildout after any change.
+
+If you want to change the paster wrapper for any zeo client, you can
+edit ``etc/zeo1.conf`` and/or ``etc/zeo2.conf``. Run buildout
+afterwards.
+
+
+Creating new clients
+====================
+
+You want more clients to be created by buildout? Easy. Three steps are
+neccessary.
+
+1. Create config files in etc/
+------------------------------
+
+Each client needs two configuration files:
+
+  - ``etc/zeoN.conf``
+       configuring the paster wrapper
+
+  - ``etc/zeoN.ini``
+       configuring the runtime config, ports, etc.
+
+Just copy over these files from the already existing zeo1/zeo2 files
+and replace ``zeo1`` or ``zeo2`` with your new name.
+
+2. Update buildout-zeo.cfg
+--------------------------
+
+Here, inside ``buildourt-zeo.cfg`` also three steps are needed.
+
+* 2.1. Create new .ini and .conf entries
+
+  The .conf and .ini files in etc/ are only templates that have to be
+  generated in their really used final location. In buildout-zeo.cfg
+  you can care for this by creating a new ``[zeoN_ini]`` and
+  ``[zeoN_conf]`` option (replacing ``N`` with a number, of course).
+
+  Just copy over existing entries and replace the mentions of ``zeo1``
+  or ``zeo2`` by your ``zeoN``.
+
+* 2.2. Create a new ``zeo_clientN`` entry
+
+  Then you have to create an entry that will generate the
+  ``zeo_clientN`` script. Again, just copy over an existing
+  ``[zeo_client1]`` entry and replace ``1`` withg your client number.
+
+* 2.3. Register the new sections in ``[buildout]`` section
+
+  When done with the above: add the new section in ``[buildout]``::
+
+    [buildout]
+      ...
+      <old entries...>
+      ...
+      zope_conf_zeo_5
+      zeo5_ini
+      zeo_client5
+
+  depending on how you named your new sections.
+
+3. Rerun ``buildout``
+---------------------
+
+When adding or removing client/server instances, make sure to stop all
+running servers/clients before rerunning buildout.
+
+To activate the new setup, rerun buildout::
+
+  $ bin/buildout -c buildout-zeo.cfg
+
+This should generate any new clients and remove older ones or just
+update configuration files.
+
+
+Considerations
+==============
+
+There are some things in the current buildout-zeo.cfg we might do not
+want. It extends the regular ``buildout.cfg`` so that we do not have
+to repeat most sections but the ``parts`` in ``[buildout]`` have to be
+listed.
+
+We need, however, not everything with a ZEO-deploy that is listed in a
+default buildout. We might do not need docs, no profiling, etc. Also a
+regular non-ZEO kofactl might not make to much sense. Therefore all
+this might be subject to changes.
+
+.. _Debian: http://www.debian.org/
+.. _Grok: http://grok.zope.org/
+.. _Python: http://www.python.org/
+.. _Ubuntu: http://www.ubuntu.com/
+.. _virtualenv: http://www.virtualenv.org/en/latest/
+.. _WAeUP: https://www.waeup.org/
+.. _Zope: http://www.zope.org/
+.. _zc.buildout: http://cheeseshop.python.org/pypi/zc.buildout
Index: main/waeup.futminna/trunk/README-zeo.txt
===================================================================
--- main/waeup.futminna/trunk/README-zeo.txt	(revision 11397)
+++ 	(revision )
@@ -1,156 +1,0 @@
-Deploying waeup.futminna as ZEO-install
-*************************************
-
-Each ZEO install consists of at least one ZEO server and normally two
-or more ZEO clients. While the ZEO server is meant to manage the ZODB
-database for clients, the clients connect to the outside world, listen
-for request and do the real dataprocessing.
-
-We prepared a `buildout` configuration that sets up one server
-configuration and two client configs. This configuration is in
-``buildout-zeo.cfg``.
-
-Generating the ZEO setup
-========================
-
-To install waeup.futminna ZEO-based you can run `buildout` with the given
-(or your own) configuration file like this::
-
-  $ ./bin/buildout -c buildout-zeo.cfg
-
-This should generate all scripts necessary to run servers, clients,
-etc.
-
-Starting ZEO servers and clients
-================================
-
-First start the server::
-
-  $ ./bin/zeo_server start
-
-Clients can be started by doing::
-
-  $ ./bin/zeo_client1 start
-  $ ./bin/zeo_client2 start
-
-This will start both clients in daemon mode.
-
-Instead of ``start`` you can, as usually, start an instance in
-foreground (``fg``), etc. You know the drill.
-
-Manually starting ZEO clients
------------------------------
-
-This is normally not neccessary.
-
-``zeo_clientN`` scripts are basically wrappers around calls to
-``bin/paster``. You can bypass this wrapper and start a client
-'manually' like this::
-
-  $ ./bin/paster serve --pid-file var/zeo1.pid --daemon \
-        pars/etc/zeo1.ini
-
-It is important to give a pid-file as paster otherwise can not start
-different clients (they would all refer to the same pid file
-`paster.pid` and refuse to start after the first client was started).
-
-
-Setup (paramters, ports, etc.)
-==============================
-
-By default the server will listen on port 8100 for requests from
-localhost (not: from the outside world).
-
-You can change ZEO server settings in the ``[zeo_server]`` section
-of ``buildout-zeo.conf``. Run `buildout` afterwards.
-
-The clients will listen on port 8081 and 8082. You can change settings
-in ``etc/zeo1.ini.in`` and ``etc/zeo2.ini.in`` respectively. Run
-buildout after any change.
-
-If you want to change the paster wrapper for any zeo client, you can
-edit ``etc/zeo1.conf`` and/or ``etc/zeo2.conf``. Run buildout
-afterwards.
-
-Creating new clients
-====================
-
-You want more clients to be created by buildout? Easy. Three steps are
-neccessary.
-
-1. Create config files in etc/
-------------------------------
-
-Each client needs two configuration files:
-
-  - ``etc/zeoN.conf``
-       configuring the paster wrapper
-
-  - ``etc/zeoN.ini``
-       configuring the runtime config, ports, etc.
-
-Just copy over these files from the already existing zeo1/zeo2 files
-and replace ``zeo1`` or ``zeo2`` with your new name.
-
-2. Update buildout-zeo.cfg
---------------------------
-
-Here, inside ``buildourt-zeo.cfg`` also three steps are needed.
-
-* 2.1. Create new .ini and .conf entries
-
-  The .conf and .ini files in etc/ are only templates that have to be
-  generated in their really used final location. In buildout-zeo.cfg
-  you can care for this by creating a new ``[zeoN_ini]`` and
-  ``[zeoN_conf]`` option (replacing ``N`` with a number, of course).
-
-  Just copy over existing entries and replace the mentions of ``zeo1``
-  or ``zeo2`` by your ``zeoN``.
-
-* 2.2. Create a new ``zeo_clientN`` entry
-
-  Then you have to create an entry that will generate the
-  ``zeo_clientN`` script. Again, just copy over an existing
-  ``[zeo_client1]`` entry and replace ``1`` withg your client number.
-
-* 2.3. Register the new sections in ``[buildout]`` section
-
-  When done with the above: add the new section in ``[buildout]``::
-
-    [buildout]
-      ...
-      <old entries...>
-      ...
-      zope_conf_zeo_5
-      zeo5_ini
-      zeo_client5
-
-  depending on how you named your new sections.
-
-3. Rerun ``buildout``
----------------------
-
-When adding or removing client/server instances, make sure to stop all
-running servers/clients before rerunning buildout.
-
-To activate the new setup, rerun buildout::
-
-  $ bin/buildout -c buildout-zeo.cfg
-
-This should generate any new clients and remove older ones or just
-update configuration files.
-
-
-Considerations
-==============
-
-There are some things in the current buildout-zeo.cfg we might do not
-want. It extends the regular ``buildout.cfg`` so that we do not have
-to repeat most sections but the ``parts`` in ``[buildout]`` have to be
-listed.
-
-We need, however, not everything with a ZEO-deploy that is listed in a
-default buildout. We might do not need docs, no profiling, etc. Also a
-regular non-ZEO kofactl might not make to much sense. Therefore all
-this might be subject to changes.
-
Index: main/waeup.futminna/trunk/README.txt
===================================================================
--- main/waeup.futminna/trunk/README.txt	(revision 11397)
+++ main/waeup.futminna/trunk/README.txt	(revision 11398)
@@ -1,10 +1,9 @@
-What is `waeup.kofa`?
-*********************
+waeup.futminna
+**************
 
-The WAeUP Student Information and Registration Portal. `waeup.kofa` is
-a web-based management tool for managing universities and schools.
+`waeup.futminna` is a Python package providing a student information
+portal based on WAeUP Kofa.
 
-The package was created as an effort of the WAeUP group. See
-http://www.waeup.org to learn more about WAeUP.
+This is a customized version of Kofa for FUTMinna purposes.
 
-Installation instructions can be found in the User Documentation (docs folder in the file system).
+For generic install instructions please see INSTALL.txt.
Index: main/waeup.futminna/trunk/buildout-windows.cfg
===================================================================
--- main/waeup.futminna/trunk/buildout-windows.cfg	(revision 11397)
+++ 	(revision )
@@ -1,87 +1,0 @@
-[buildout]
-develop = .
-parts =
-    eggbasket
-    app
-    mkdirs
-    zope_conf
-    site_zcml
-    zdaemon_conf
-    deploy_ini
-    debug_ini
-# For backward compatibility, telling buildout not to throw away
-# the data and log subdirectories from the parts directory.
-    data
-    log
-# newest = false
-
-extends = versions.cfg
-
-# eggs will be installed in the default buildout location
-# (see .buildout/default.cfg in your home directory)
-# unless you specify an eggs-directory option here.
-
-[app]
-# This creates only the paster script in bin/.
-recipe = zc.recipe.egg
-eggs = waeup.futminna
-       z3c.evalexception>=2.0
-       Paste
-       PasteScript
-       PasteDeploy
-interpreter = python-console
-scripts = paster=paster
-
-[mkdirs]
-recipe = z3c.recipe.mkdir
-paths =
-    ${zope_conf:filestorage}
-    ${zope_conf:logfiles}
-    ${zope_conf:blobstorage}
-    ${buildout:directory}/var/datacenter/media
-
-[zope_conf]
-recipe = collective.recipe.template
-input = etc/zope.conf.in
-output = ${buildout:parts-directory}/etc/zope.conf
-filestorage = ${buildout:directory}/var/filestorage
-blobstorage = ${buildout:directory}/var/blobstorage
-logfiles = ${buildout:directory}/var/log
-extra =
-# extra = <grokwarnings>True</grokwarnings>
-# 'extra' is copied verbatim. Use it for product config sections and so.
-
-# The [data] and [log] parts are still in here to instruct buildout to not
-# unintentionally throw away the parts/data and parts/log subdirectories
-# that contain the Data.fs and the log files. These files should be
-# copied to the new locations. See the upgrade notes for more information.
-[data]
-recipe = zc.recipe.filestorage
-
-[log]
-recipe = zc.recipe.filestorage
-
-[site_zcml]
-recipe = collective.recipe.template
-input = etc/site.zcml.in
-output = ${buildout:parts-directory}/etc/site.zcml
-
-[zdaemon_conf]
-recipe = collective.recipe.template
-input = etc/zdaemon.conf.in
-output = ${buildout:parts-directory}/etc/zdaemon.conf
-
-[deploy_ini]
-recipe = collective.recipe.template
-input = etc/deploy.ini.in
-output = ${buildout:parts-directory}/etc/deploy.ini
-
-[debug_ini]
-recipe = collective.recipe.template
-input = etc/debug.ini.in
-output = ${buildout:parts-directory}/etc/debug.ini
-
-[eggbasket]
-recipe = z3c.recipe.eggbasket
-eggs = grok
-url = http://grok.zope.org/releaseinfo/grok-eggs-1.1.tgz
Index: main/waeup.futminna/trunk/buildout-zeo.cfg
===================================================================
--- main/waeup.futminna/trunk/buildout-zeo.cfg	(revision 11397)
+++ main/waeup.futminna/trunk/buildout-zeo.cfg	(revision 11398)
@@ -13,14 +13,17 @@
     site_zcml
     zdaemon_conf
-    deploy_ini
-    debug_ini
+    raw_deploy_ini
+    raw_debug_ini
+    themed_deploy_ini
+    themed_debug_ini
     profile_ini
     zeo1_ini
     zeo2_ini
-    waeupdocs
     coverage-detect
     coverage-report
 # kofactl creation must be _after_ app!
     kofactl
+    lxml
+    diazo
 # For backward compatibility, telling buildout not to throw away
 # the data and log subdirectories from the parts directory.
@@ -44,5 +47,4 @@
     address ${kofa_params:server_port}
   </zeo>
-
   <blobstorage 1>
     blob-dir ${zope_conf:blobstorage}
@@ -51,9 +53,7 @@
     </filestorage>
   </blobstorage>
-
   <filestorage async>
     path ${zope_conf:filestorage}/Data.async.fs
   </filestorage>
-
   <eventlog>
     # This sets up logging to a file.
@@ -96,11 +96,11 @@
 [zeo1_ini]
 recipe = collective.recipe.template
-input = etc/zeo1.ini.in
-output = ${buildout:parts-directory}/etc/zeo1.ini
+input = etc/themed/zeo1.ini.in
+output = ${buildout:parts-directory}/etc/themed-zeo1.ini
 
 [zeo2_ini]
 recipe = collective.recipe.template
-input = etc/zeo2.ini.in
-output = ${buildout:parts-directory}/etc/zeo2.ini
+input = etc/themed/zeo2.ini.in
+output = ${buildout:parts-directory}/etc/themed-zeo2.ini
 
 [zeo1_conf]
@@ -118,5 +118,5 @@
 # See http://pypi.python.org/pypi/zc.recipe.egg for details...
 recipe = zc.recipe.egg
-eggs = waeup.futminna [beaker]
+eggs = waeup.futminna [beaker, diazo]
 arguments = "${buildout:parts-directory}/etc/zeo1.conf"
 scripts = kofactl=zeo_client1
@@ -125,5 +125,5 @@
 # See http://pypi.python.org/pypi/zc.recipe.egg for details...
 recipe = zc.recipe.egg
-eggs = waeup.futminna [beaker]
+eggs = waeup.futminna [beaker, diazo]
 arguments = "${buildout:parts-directory}/etc/zeo2.conf"
 scripts = kofactl=zeo_client2
Index: main/waeup.futminna/trunk/buildout.cfg
===================================================================
--- main/waeup.futminna/trunk/buildout.cfg	(revision 11397)
+++ main/waeup.futminna/trunk/buildout.cfg	(revision 11398)
@@ -18,12 +18,15 @@
     site_zcml
     zdaemon_conf
-    deploy_ini
-    debug_ini
+    raw_deploy_ini
+    raw_debug_ini
+    themed_deploy_ini
+    themed_debug_ini
     profile_ini
-    waeupdocs
     coverage-detect
     coverage-report
 # kofactl creation must be _after_ app!
     kofactl
+    lxml
+    diazo
 # For backward compatibility, telling buildout not to throw away
 # the data and log subdirectories from the parts directory.
@@ -62,9 +65,10 @@
 # number of preopened paster threads, default 10
 threadpool_workers = 10
+devel_pkg = waeup.futminna
 
 [app]
 # This creates all scripts in bin/. The kofactl created here is 'faulty'.
 recipe = zc.recipe.egg
-eggs = waeup.futminna [beaker]
+eggs = waeup.futminna [beaker, diazo]
        z3c.evalexception>=2.0
        Paste
@@ -80,5 +84,5 @@
 # fixed path to zdaemon.conf as argument.
 recipe = zc.recipe.egg
-eggs = waeup.futminna [beaker]
+eggs = waeup.futminna [beaker, diazo]
 arguments = "${buildout:parts-directory}/etc/zdaemon.conf"
 scripts = kofactl=kofactl
@@ -146,13 +150,23 @@
 output = ${buildout:parts-directory}/etc/zdaemon.conf
 
-[deploy_ini]
-recipe = collective.recipe.template
-input = etc/deploy.ini.in
-output = ${buildout:parts-directory}/etc/deploy.ini
-
-[debug_ini]
-recipe = collective.recipe.template
-input = etc/debug.ini.in
-output = ${buildout:parts-directory}/etc/debug.ini
+[raw_debug_ini]
+recipe = collective.recipe.template
+input = etc/raw/debug.ini.in
+output = ${buildout:parts-directory}/etc/raw-debug.ini
+
+[raw_deploy_ini]
+recipe = collective.recipe.template
+input = etc/raw/deploy.ini.in
+output = ${buildout:parts-directory}/etc/raw-deploy.ini
+
+[themed_debug_ini]
+recipe = collective.recipe.template
+input = etc/themed/debug.ini.in
+output = ${buildout:parts-directory}/etc/themed-debug.ini
+
+[themed_deploy_ini]
+recipe = collective.recipe.template
+input = etc/themed/deploy.ini.in
+output = ${buildout:parts-directory}/etc/themed-deploy.ini
 
 [profile_ini]
@@ -165,10 +179,4 @@
 eggs = grok
 url = http://grok.zope.org/releaseinfo/grok-eggs-1.1.tgz
-
-[waeupdocs]
-recipe = collective.recipe.sphinxbuilder
-eggs = waeup.futminna[docs]
-source = ${buildout:directory}/docs/source
-build = ${buildout:directory}/docs/build
 
 # Collect test coverage data.
@@ -186,2 +194,13 @@
 scripts = coveragereport
 arguments = ('${buildout:parts-directory}/coverage-detect/working-directory/coverage', '${buildout:directory}/coverage-report')
+
+[lxml]
+recipe = z3c.recipe.staticlxml
+egg = lxml
+
+[diazo]
+recipe = zc.recipe.egg
+eggs =
+    diazo [wsgi]
+    PasteScript
+    waeup.futminna [beaker, diazo]
Index: main/waeup.futminna/trunk/etc/raw/debug.ini.in
===================================================================
--- main/waeup.futminna/trunk/etc/raw/debug.ini.in	(revision 11398)
+++ main/waeup.futminna/trunk/etc/raw/debug.ini.in	(revision 11398)
@@ -0,0 +1,94 @@
+# debug.ini
+#
+# Debugging configuration for use with paster/WSGI
+#
+
+[loggers]
+keys = root, wsgi
+
+[handlers]
+keys = console, accesslog, asynclog, async_tracelog
+
+[formatters]
+keys = generic, accesslog
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[handler_asynclog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'async.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_async_tracelog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'async_trace.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'access.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+handlers = accesslog
+qualname = wsgi
+propagate = 0
+
+[logger_async]
+level = INFO
+handlers = asynclog
+qualname = zc.async
+propagate = 0
+
+[logger_async_trace]
+level = INFO
+handlers = async_tracelog
+qualname = zc.async.trace
+propagate = 0
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[filter-app:main]
+# Change the last part from 'ajax' to 'pdb' for a post-mortem debugger
+# on the console:
+use = egg:z3c.evalexception#ajax
+next = zope
+
+[app:zope]
+use = egg:${kofa_params:devel_pkg}#debug
+filter-with = translogger
+exempt-exceptions = zope.security.interfaces.IUnauthorized
+
+[server:main]
+use = egg:Paste#http
+host = ${kofa_params:host}
+port = ${kofa_params:base_port}
+
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope.conf
+env_vars = ZC_ASYNC_UUID ${buildout:directory}/var/uuid1.txt
Index: main/waeup.futminna/trunk/etc/raw/deploy.ini.in
===================================================================
--- main/waeup.futminna/trunk/etc/raw/deploy.ini.in	(revision 11398)
+++ main/waeup.futminna/trunk/etc/raw/deploy.ini.in	(revision 11398)
@@ -0,0 +1,94 @@
+# deploy.ini
+#
+# Deployment configuration for use with paster/WSGI
+#
+
+[loggers]
+keys = root, wsgi, async, async_trace
+
+[handlers]
+keys = null, console, accesslog, asynclog, async_tracelog
+
+[formatters]
+keys = generic, accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+#handlers = accesslog
+handlers = null
+qualname = wsgi
+propagate = 0
+
+[logger_async]
+level = INFO
+handlers = asynclog
+qualname = zc.async
+propagate = 0
+
+[logger_async_trace]
+level = INFO
+handlers = async_tracelog
+qualname = zc.async.trace
+propagate = 0
+
+[handler_null]
+# you can use 'NullHandler' (w/o the path) if under Python 2.7+
+class = waeup.kofa.utils.helpers.NullHandler
+args = ()
+level = NOTSET
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'access.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[handler_asynclog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'async.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_async_tracelog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'async_trace.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[app:main]
+use = egg:${kofa_params:devel_pkg}
+filter-with = translogger
+
+[server:main]
+use = egg:Paste#http
+host = ${kofa_params:host}
+port = ${kofa_params:base_port}
+
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope.conf
+env_vars = ZC_ASYNC_UUID ${buildout:directory}/var/uuid1.txt
Index: main/waeup.futminna/trunk/etc/themed/debug.ini.in
===================================================================
--- main/waeup.futminna/trunk/etc/themed/debug.ini.in	(revision 11398)
+++ main/waeup.futminna/trunk/etc/themed/debug.ini.in	(revision 11398)
@@ -0,0 +1,125 @@
+# debug.ini
+#
+# Debugging configuration for use with paster/WSGI and diazo
+#
+
+[loggers]
+keys = root, wsgi
+
+[handlers]
+keys = console, accesslog, asynclog, async_tracelog
+
+[formatters]
+keys = generic, accesslog
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[handler_asynclog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'async.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_async_tracelog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'async_trace.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'access.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+handlers = accesslog
+qualname = wsgi
+propagate = 0
+
+[logger_async]
+level = INFO
+handlers = asynclog
+qualname = zc.async
+propagate = 0
+
+[logger_async_trace]
+level = INFO
+handlers = async_tracelog
+qualname = zc.async.trace
+propagate = 0
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[filter:debugger]
+# Change the last part from 'ajax' to 'pdb' for a post-mortem debugger
+# on the console:
+use = egg:z3c.evalexception#ajax
+
+[app:zope]
+use = egg:${kofa_params:devel_pkg}#debug
+exempt-exceptions = zope.security.interfaces.IUnauthorized
+
+[app:static]
+use = egg:Paste#static
+document_root = %(LAYOUT_DIR)s/static
+
+[app:static_custom]
+use = egg:Paste#static
+document_root = %(LAYOUT_CUSTOM_DIR)s/static/
+
+[composite:main]
+use = egg:Paste#urlmap
+/static = static
+/static_custom = static_custom
+/ = default
+
+[filter:theme]
+use = egg:diazo
+rules = file:///%(LAYOUT_CUSTOM_DIR)s/rules.xml
+prefix = /
+doctype = <!DOCTYPE html>
+# set to false, if you don't want rules.xml being rebuild on each request
+debug = true
+
+[pipeline:default]
+pipeline = theme
+           translogger
+           debugger
+           zope
+
+[server:main]
+use = egg:Paste#http
+host = ${kofa_params:host}
+port = ${kofa_params:base_port}
+
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope.conf
+env_vars = ZC_ASYNC_UUID ${buildout:directory}/var/uuid1.txt
+# the directory where all real diazo config is done (no trailing slash)
+LAYOUT_DIR = ${buildout:directory}/sources/waeup.kofa/layout
+STATIC_DIR = %(LAYOUT_DIR)s/static
+LAYOUT_CUSTOM_DIR = ${buildout:directory}/layout
+STATIC_CUSTOM_DIR = %(LAYOUT_CUSTOM_DIR)s/static
Index: main/waeup.futminna/trunk/etc/themed/deploy.ini.in
===================================================================
--- main/waeup.futminna/trunk/etc/themed/deploy.ini.in	(revision 11398)
+++ main/waeup.futminna/trunk/etc/themed/deploy.ini.in	(revision 11398)
@@ -0,0 +1,125 @@
+# deploy.ini
+#
+# Deployment configuration for use with paster/WSGI
+#
+
+[loggers]
+keys = root, wsgi, async, async_trace
+
+[handlers]
+keys = null, console, accesslog, asynclog, async_tracelog
+
+[formatters]
+keys = generic, accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+#handlers = accesslog
+handlers = null
+qualname = wsgi
+propagate = 0
+
+[logger_async]
+level = INFO
+handlers = asynclog
+qualname = zc.async
+propagate = 0
+
+[logger_async_trace]
+level = INFO
+handlers = async_tracelog
+qualname = zc.async.trace
+propagate = 0
+
+[handler_null]
+# you can use 'NullHandler' (w/o the path) if under Python 2.7+
+class = waeup.kofa.utils.helpers.NullHandler
+args = ()
+level = NOTSET
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'access.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[handler_asynclog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'async.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_async_tracelog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'async_trace.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[app:content]
+use = egg:${kofa_params:devel_pkg}
+filter-with = translogger
+
+[app:static]
+use = egg:Paste#static
+document_root = %(LAYOUT_DIR)s/static/
+
+[app:static_custom]
+use = egg:Paste#static
+document_root = %(LAYOUT_CUSTOM_DIR)s/static/
+
+[composite:main]
+use = egg:Paste#urlmap
+/static = static
+/static_custom = static_custom
+/ = default
+
+[server:main]
+use = egg:Paste#http
+host = ${kofa_params:host}
+port = ${kofa_params:base_port}
+
+[filter:theme]
+use = egg:diazo
+rules = file:///%(LAYOUT_CUSTOM_DIR)s/rules.xml
+prefix = /
+doctype = <!DOCTYPE html>
+# set to true, if you want rules.xml being rebuild on each request
+debug = false
+
+[pipeline:default]
+pipeline = theme
+           content
+
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope.conf
+env_vars = ZC_ASYNC_UUID ${buildout:directory}/var/uuid1.txt
+# the directory where all real diazo config is done (no trailing slash)
+LAYOUT_DIR = ${buildout:directory}/sources/waeup.kofa/layout
+STATIC_DIR = %(LAYOUT_DIR)s/static
+LAYOUT_CUSTOM_DIR = ${buildout:directory}/layout
+STATIC_CUSTOM_DIR = %(LAYOUT_CUSTOM_DIR)s/static
Index: main/waeup.futminna/trunk/etc/themed/zeo1.ini.in
===================================================================
--- main/waeup.futminna/trunk/etc/themed/zeo1.ini.in	(revision 11398)
+++ main/waeup.futminna/trunk/etc/themed/zeo1.ini.in	(revision 11398)
@@ -0,0 +1,126 @@
+# deploy.ini
+#
+# Deployment configuration for use with paster/WSGI
+#
+
+[loggers]
+keys = root, wsgi, async, async_trace
+
+[handlers]
+keys = null, console, accesslog, asynclog, async_tracelog
+
+[formatters]
+keys = generic, accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+#handlers = accesslog
+handlers = null
+qualname = wsgi
+propagate = 0
+
+[logger_async]
+level = INFO
+handlers = asynclog
+qualname = zc.async
+propagate = 0
+
+[logger_async_trace]
+level = INFO
+handlers = async_tracelog
+qualname = zc.async.trace
+propagate = 0
+
+[handler_null]
+# you can use 'NullHandler' (w/o the path) if under Python 2.7+
+class = waeup.kofa.utils.helpers.NullHandler
+args = ()
+level = NOTSET
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo1.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[handler_asynclog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo1_async.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_async_tracelog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo1_async_trace.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[app:content]
+use = egg:${kofa_params:devel_pkg}
+filter-with = translogger
+
+[app:static]
+use = egg:Paste#static
+document_root = %(LAYOUT_DIR)s/static/
+
+[app:static_custom]
+use = egg:Paste#static
+document_root = %(LAYOUT_CUSTOM_DIR)s/static/
+
+[composite:main]
+use = egg:Paste#urlmap
+/static = static
+/static_custom = static_custom
+/ = default
+
+[server:main]
+use = egg:Paste#http
+host = ${kofa_params:host}
+port = ${kofa_params:zeo1_port}
+threadpool_workers = ${kofa_params:threadpool_workers}
+use_threadpool = True
+
+[filter:theme]
+use = egg:diazo
+rules = file:///%(LAYOUT_CUSTOM_DIR)s/rules.xml
+prefix = /
+doctype = <!DOCTYPE html>
+# set to true, if you want rules.xml being rebuild on each request
+debug = false
+
+[pipeline:default]
+pipeline = theme
+           content
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope_zeo1.conf
+env_vars = ZC_ASYNC_UUID ${buildout:directory}/var/uuid1.txt
+# the directory where all real diazo config is done (no trailing slash)
+LAYOUT_DIR = ${buildout:directory}/sources/waeup.kofa/layout
+STATIC_DIR = %(LAYOUT_DIR)s/static
+LAYOUT_CUSTOM_DIR = ${buildout:directory}/layout
+STATIC_CUSTOM_DIR = %(LAYOUT_CUSTOM_DIR)s/static
Index: main/waeup.futminna/trunk/etc/themed/zeo2.ini.in
===================================================================
--- main/waeup.futminna/trunk/etc/themed/zeo2.ini.in	(revision 11398)
+++ main/waeup.futminna/trunk/etc/themed/zeo2.ini.in	(revision 11398)
@@ -0,0 +1,126 @@
+# deploy.ini
+#
+# Deployment configuration for use with paster/WSGI
+#
+
+[loggers]
+keys = root, wsgi, async, async_trace
+
+[handlers]
+keys = null, console, accesslog, asynclog, async_tracelog
+
+[formatters]
+keys = generic, accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+#handlers = accesslog
+handlers = null
+qualname = wsgi
+propagate = 0
+
+[logger_async]
+level = INFO
+handlers = asynclog
+qualname = zc.async
+propagate = 0
+
+[logger_async_trace]
+level = INFO
+handlers = async_tracelog
+qualname = zc.async.trace
+propagate = 0
+
+[handler_null]
+# you can use 'NullHandler' (w/o the path) if under Python 2.7+
+class = waeup.kofa.utils.helpers.NullHandler
+args = ()
+level = NOTSET
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo2.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[handler_asynclog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo2_async.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[handler_async_tracelog]
+class = FileHandler
+args = (os.path.join(r'${zope_conf:logfiles}', 'zeo2_async_trace.log'),
+        'a')
+level = INFO
+formatter = generic
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[app:content]
+use = egg:${kofa_params:devel_pkg}
+filter-with = translogger
+
+[app:static]
+use = egg:Paste#static
+document_root = %(LAYOUT_DIR)s/static/
+
+[app:static_custom]
+use = egg:Paste#static
+document_root = %(LAYOUT_CUSTOM_DIR)s/static/
+
+[composite:main]
+use = egg:Paste#urlmap
+/static = static
+/static_custom = static_custom
+/ = default
+
+[server:main]
+use = egg:Paste#http
+host = ${kofa_params:host}
+port = ${kofa_params:zeo2_port}
+threadpool_workers = ${kofa_params:threadpool_workers}
+use_threadpool = True
+
+[filter:theme]
+use = egg:diazo
+rules = file:///%(LAYOUT_CUSTOM_DIR)s/rules.xml
+prefix = /
+doctype = <!DOCTYPE html>
+# set to true, if you want rules.xml being rebuild on each request
+debug = false
+
+[pipeline:default]
+pipeline = theme
+           content
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope_zeo2.conf
+env_vars = ZC_ASYNC_UUID ${buildout:directory}/var/uuid2.txt
+# the directory where all real diazo config is done (no trailing slash)
+LAYOUT_DIR = ${buildout:directory}/sources/waeup.kofa/layout
+STATIC_DIR = %(LAYOUT_DIR)s/static
+LAYOUT_CUSTOM_DIR = ${buildout:directory}/layout
+STATIC_CUSTOM_DIR = %(LAYOUT_CUSTOM_DIR)s/static
Index: main/waeup.futminna/trunk/etc/zdaemon.conf.in
===================================================================
--- main/waeup.futminna/trunk/etc/zdaemon.conf.in	(revision 11397)
+++ main/waeup.futminna/trunk/etc/zdaemon.conf.in	(revision 11398)
@@ -1,4 +1,4 @@
 <runner>
-  program ${buildout:directory}/bin/paster serve ${buildout:directory}/parts/etc/deploy.ini
+  program ${buildout:directory}/bin/paster serve ${buildout:directory}/parts/etc/themed-deploy.ini
   daemon on
   transcript ${zope_conf:logfiles}/zdaemon.log
Index: main/waeup.futminna/trunk/etc/zeo1.conf.in
===================================================================
--- main/waeup.futminna/trunk/etc/zeo1.conf.in	(revision 11397)
+++ main/waeup.futminna/trunk/etc/zeo1.conf.in	(revision 11398)
@@ -1,8 +1,8 @@
 <runner>
-  program ${buildout:directory}/bin/paster serve --pid-file ${buildout:directory}/var/zeo1.pid ${buildout:directory}/parts/etc/zeo1.ini
+  program ${buildout:directory}/bin/paster serve --pid-file ${buildout:directory}/var/zeo2.pid ${buildout:directory}/parts/etc/themed-zeo2.ini
   daemon on
-  transcript ${zope_conf:logfiles}/zdaemon-zeo1.log
-  socket-name ${zope_conf:logfiles}/zeo1.sock
+  transcript ${zope_conf:logfiles}/zdaemon-zeo2.log
+  socket-name ${zope_conf:logfiles}/zeo2.sock
   # Enable this to run the child process as a different user
-  user kofa
+  # user kofa
 </runner>
Index: main/waeup.futminna/trunk/etc/zeo2.conf.in
===================================================================
--- main/waeup.futminna/trunk/etc/zeo2.conf.in	(revision 11397)
+++ main/waeup.futminna/trunk/etc/zeo2.conf.in	(revision 11398)
@@ -1,8 +1,8 @@
 <runner>
-  program ${buildout:directory}/bin/paster serve --pid-file ${buildout:directory}/var/zeo2.pid ${buildout:directory}/parts/etc/zeo2.ini
+  program ${buildout:directory}/bin/paster serve --pid-file ${buildout:directory}/var/zeo2.pid ${buildout:directory}/parts/etc/themed-zeo2.ini
   daemon on
   transcript ${zope_conf:logfiles}/zdaemon-zeo2.log
   socket-name ${zope_conf:logfiles}/zeo2.sock
   # Enable this to run the child process as a different user
-  user kofa
+  # user kofa
 </runner>
Index: main/waeup.futminna/trunk/layout/error-zope.html
===================================================================
--- main/waeup.futminna/trunk/layout/error-zope.html	(revision 11398)
+++ main/waeup.futminna/trunk/layout/error-zope.html	(revision 11398)
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>waeup.kofa Portal - Error</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <link rel="shortcut icon" href="static/ico/favicon.ico">
+
+    <!-- stylesheets -->
+    <link href="static/bootstrap/css/bootstrap.min.css"
+	  rel="stylesheet">
+    <link href="static/css/base.css" rel="stylesheet">
+  </head>
+  <body id="kofa-body" class="errorpage">
+    <div class="container">
+      <div class="jumbotron">
+        <h1 id="kofa-error-heading">Error</h1>
+        <div id="kofa-error-message">Error Message</div>
+        <div>We are terribly sorry.</div>
+      </div>
+    </div>
+
+  </body>
+</html>
Index: main/waeup.futminna/trunk/layout/rules.xml
===================================================================
--- main/waeup.futminna/trunk/layout/rules.xml	(revision 11398)
+++ main/waeup.futminna/trunk/layout/rules.xml	(revision 11398)
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rules
+    xmlns="http://namespaces.plone.org/diazo"
+    xmlns:css="http://namespaces.plone.org/diazo/css"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <!-- Cases where we do not want themes... -->
+  <notheme if-path="/++grokui++" />  <!-- do not theme GrokUI -->
+  <notheme if-path="/_debug" /><!-- output by debugger -->
+  <notheme css:if-content="div#error-area" />
+
+  <!-- use error page if there is a <table class="layout">
+       tag in content. This tag is rendered in Zope 3 errors. -->
+  <rules css:if-content="table#layout">
+    <theme href="error-zope.html" />
+    <replace css:theme-children="#kofa-error-message"
+             css:content-children="h3" />
+  </rules>
+  <!-- use error page if there is no <div> tag in content.
+       This happens if something in the application went wrong. -->
+  <rules css:if-not-content="div">
+    <theme href="error-zope.html" />
+    <replace css:theme-children="#kofa-error-message"
+             css:content-children="body" />
+  </rules>
+
+  <!-- regular rules -->
+  <rules css:if-content="body.kofa-body">
+
+    <theme href="theme.html" />
+
+    <!-- head elements -->
+    <replace css:theme="html head title"
+             css:content="html head title" />
+
+    <!-- brand (upper left) -->
+    <copy attributes="href" css:theme="a.kofa-brand-link"
+          css:content="a.kofa-brand-link" />
+    <replace css:theme-children="a.kofa-brand-link"
+             css:content-children="a.kofa-brand-link" />
+
+    <!-- left top navigation -->
+    <replace css:theme-children="ul.kofa-navbar-left"
+             css:content-children="ul.kofa-navbar-left" />
+
+    <!-- right side top navigation -->
+    <replace css:theme-children="ul.kofa-navbar-right"
+             css:content-children="ul.kofa-navbar-right" />
+
+    <!-- breadcrumbs -->
+    <drop css:theme="div.kofa-breadcrumbs-box-long"
+          css:if-not-content="ul.breadcrumb" />
+    <drop css:theme="div.kofa-breadcrumbs-box-long"
+          css:if-content="div.wfstatus" />
+    <drop css:theme="div.kofa-breadcrumbs-box-short"
+          css:if-not-content="ul.breadcrumb" />
+    <drop css:theme="div.kofa-breadcrumbs-box-short"
+          css:if-not-content="div.wfstatus" />
+    <replace css:theme-children="ol.kofa-breadcrumbs"
+             css:content-children="ul.breadcrumb" />
+
+    <!-- student status -->
+    <drop css:theme="div.kofa-student-status-box"
+          css:if-not-content="div.wfstatus" />
+    <replace css:theme-children="div.wfstatus"
+             css:content-children="div.wfstatus" />
+
+    <!-- sidebar -->
+
+    <drop css:theme="div.kofa-sidebar"
+          css:if-not-content="div.sidebar" />
+    <replace css:theme-children="div.sidebar-nav"
+             css:content-children="div.sidebar" />
+
+    <!-- content -->
+
+    <!-- drop one of the both content areas, depending on sidebar -->
+
+    <drop css:theme="div.kofa-content-narrow"
+          css:if-not-content="div.sidebar" />
+    <drop css:theme="div.kofa-content-wide"
+          css:if-content="div.sidebar" />
+    <replace css:theme-children="div.kofa-content"
+             css:content-children="div.kofa-content" />
+
+
+    <!-- scripts -->
+    <drop css:theme="script.kofa-script-tooltip"
+          css:if-not-content="[data-toggle=tooltip]" />
+
+    <drop css:theme="script.kofa-script-datepicker"
+          css:if-not-content="input.datepicker-le-year" />
+
+    <drop css:theme="script.kofa-script-datatable"
+          css:if-not-content="table.kofa-data-table" />
+
+<!--
+    <after css:theme-children="html head"
+           css:content="html head meta" />
+-->
+<!--
+    <after css:theme-children="html head"
+           css:content="html head base" />
+-->
+
+    <!-- top navigation -->
+    <!-- left top navigation -->
+<!--
+    <replace css:theme-children="ul.kofa-navbar-left"
+             css:content-children="ul.kofa-navbar-left" />
+-->
+
+    <!-- Make all data tables responsive -->
+
+    <replace css:content="table.kofa-data-table">
+      <div class="table-responsive">
+        <xsl:apply-templates css:select="table.kofa-data-table" mode="raw"/>
+      </div>
+    </replace>
+
+   </rules>
+
+</rules>
Index: main/waeup.futminna/trunk/layout/static/custom.css
===================================================================
--- main/waeup.futminna/trunk/layout/static/custom.css	(revision 11398)
+++ main/waeup.futminna/trunk/layout/static/custom.css	(revision 11398)
@@ -0,0 +1,36 @@
+a {
+  color: #8A0474;
+}
+
+a:hover {
+  color: #4e0242;
+}
+
+.topbar a {
+    color: white;
+}
+
+.navbar-inverse {
+  background-color: #215026;
+  background-image: -webkit-linear-gradient(top, #4e0242 0%, #8A0474 100%);
+  background-image: linear-gradient(to bottom, #4e0242 0%, #8A0474 100%);
+  background-repeat: repeat-x;
+}
+
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+  color: #cccccc;
+}
+
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+  color: #ffffff;
+  background-color: #8A0474;
+  background-image: none;
+  background-image: none;
+  filter: none;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
Index: main/waeup.futminna/trunk/layout/theme.html
===================================================================
--- main/waeup.futminna/trunk/layout/theme.html	(revision 11398)
+++ main/waeup.futminna/trunk/layout/theme.html	(revision 11398)
@@ -0,0 +1,533 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>Base · Twitter Bootstrap</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="">
+    <meta name="author" content="">
+
+    <!-- stylesheets -->
+    <link href="static/bootstrap/css/bootstrap.min.css"
+          rel="stylesheet">
+    <link href="static/bootstrap/css/bootstrap-theme.min.css"
+          rel="stylesheet">
+    <link href="static/css/jquery.dataTables.css"
+          rel="stylesheet">
+    <link href="static/css/jquery-ui.css"
+          rel="stylesheet">
+    <link href="static/css/base.css" rel="stylesheet">
+    <link href="static_custom/custom.css" rel="stylesheet">
+
+    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
+    <!--[if lt IE 9]>
+      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+      <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
+      <link href="static/css/IE8.css" rel="stylesheet">
+    <![endif]-->
+
+    <script src="static/js/kofa-recaptcha_white.js"></script>
+
+    <!-- icons -->
+    <link rel="shortcut icon" href="static_custom/favicon.ico">
+
+
+  </head>
+
+  <body id="kofa-body">
+
+    <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
+      <div class="navbar-header">
+        <button type="button" class="navbar-toggle" data-toggle="collapse"
+                  data-target="#kofa-primary-nav">
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+          <span class="icon-bar"></span>
+        </button>
+        <a class="navbar-brand active kofa-brand-link" href="/">WAeUP.Kofa</a>
+      </div>
+      <div class="navbar-collapse collapse"
+           id="kofa-primary-nav">
+        <ul class="nav navbar-nav kofa-navbar-left">
+          <li class="active"><a href="#">Academics</a></li>
+          <li><a href="#about">Applicants</a></li>
+          <li><a href="#contact">Students</a></li>
+          <li><a href="#contact">Hostels</a></li>
+          <li class="dropdown">
+            <a href="#" class="dropdown-toggle"
+               data-toggle="dropdown">My Data
+               <b class="caret"></b>
+            <ul class="dropdown-menu">
+              <li><a href="#">Base Data</a></li>
+              <li><a href="#">Clearance Data</a></li>
+              <li><a href="#">Personal Data</a></li>
+              <li><a href="#">History</a></li>
+            </ul>
+          </li>
+        </ul>
+
+        <ul class="nav navbar-nav navbar-right kofa-navbar-right">
+          <li class="dropdown kofa-langselect">
+            <a href="#" class="dropdown-toggle"
+               data-toggle="dropdown">
+               <img src="static/img/earth.png" />
+            <ul class="dropdown-menu">
+              <li class="kofa-language"><a href="#">English</a></li>
+              <li class="kofa-language"><a href="#">Français</a></li>
+              <li class="kofa-language"><a href="#">Deutsch</a></li>
+              <li class="kofa-language"><a href="#">Hausa</a></li>
+              <li class="kofa-language"><a href="#">Yoruba</a></li>
+              <li class="kofa-language"><a href="#">Igbo</a></li>
+            </ul>
+          </li>
+          <li><a href="#">Contact</a></li>
+          <li><a href="#">Logout</a></li>
+        </ul>
+      </div><!--/.nav-collapse -->
+    </div><!-- /.navbar -->
+
+    <div class="container">
+
+      <div class="row">
+        <div class="col-md-12 container kofa-breadcrumbs-box-long">
+          <div class="well">
+            <ol class="breadcrumb kofa-breadcrumbs">
+              <li>
+                <a href="#">
+                  Home
+                </a>
+              </li>
+              <li>
+                <a href="#">
+                  Subtopic 1
+                </a>
+              </li>
+              <li>
+                <a href="#">
+                  Subtopic 2
+                </a>
+              </li>
+              <li>
+                <a href="#">
+                  Subtopic 3
+                </a>
+              </li>
+            </ol><!-- /kofa-breadcrumbs -->
+          </div> <!-- /well -->
+        </div> <!-- /kofa-breadcrumbs-box-short -->
+      </div>
+
+      <div class="row">
+        <div class="col-md-8 container kofa-breadcrumbs-box-short">
+          <div class="well">
+            <ol class="breadcrumb kofa-breadcrumbs">
+              <li>
+                <a href="#">
+                  Home
+                </a>
+              </li>
+              <li>
+                <a href="#">
+                  Subtopic 1
+                </a>
+              </li>
+              <li>
+                <a href="#">
+                  Subtopic 2
+                </a>
+              </li>
+              <li>
+                <a href="#">
+                  Subtopic 3
+                </a>
+              </li>
+            </ol><!-- /kofa-breadcrumbs -->
+          </div> <!-- /well -->
+        </div> <!-- /kofa-breadcrumbs-box-short -->
+
+        <div class="col-md-4 container kofa-student-status-box">
+          <div class="well">
+            <div class="wfstatus">
+                K1000000 &bull; quite long student status
+            </div> <!-- /wfstatus -->
+          </div> <!-- /well -->
+        </div> <!-- /kofa-student-status-box -->
+
+      </div> <!-- /row -->
+
+      <div class="row">
+        <div class="col-md-2 kofa-sidebar">
+          <div class="sidebar-nav well">
+            <div>
+              <div class="kofa-sidebar-title">Student Name</div>
+              <ul class="nav">
+                <li><a href="#">Base Data</a></li>
+                <li><a href="#">Clearance Data</a></li>
+                <li><a href="#">Personal Data</a></li>
+                <li><a href="#">Study Course</a></li>
+                <li><a href="#">Payments</a></li>
+                <li><a href="#">Accommodation</a></li>
+                <li><a href="#">History</a></li>
+              </ul>
+            </div>
+            <div>
+              <div class="kofa-sidebar-title">Manager Name</div>
+              <ul class="nav">
+                <li><a href="#">Portal Configuration</a></li>
+                <li><a href="#">Portal Users</a></li>
+                <li><a href="#">Data Center</a></li>
+                <li><a href="#">Reports</a></li>
+                <li><a href="#">Access Codes</a></li>
+                <li><a href="#">My Preferences</a></li>
+                <li><a href="#">My Roles</a></li>
+              </ul>
+            </div>
+          </div> <!-- /well -->
+        </div> <!-- /kofa-sidebar -->
+
+        <div class="col-md-10 content kofa-content-narrow">
+          <div class="well">
+            <div class="kofa-content">
+              <div class="actionbar">
+                <a class="btn btn-default" href="">
+                  <img src="static/img/actionicon_modify.png"
+                       alt="Manage" />
+                       Manage
+                </a>
+                <a class="btn btn-default" href="">
+                  <img src="static/img/actionicon_trigtrans.png"
+                       alt="Trigger transition" />
+                       Trigger transition
+                </a>
+              </div>
+              <div class="alert alert-danger">
+                  There were errors ...
+              </div>
+              <div class="alert alert-warning">
+                  Be careful ...
+              </div>
+              <div class="alert alert-success">
+                  You have successfully ...
+              </div>
+              <h1>WAeUP.Kofa Theme</h1>
+
+              <p class="kofa-content-desc">
+                A sample Diazo theme for WAeUP.Kofa
+                <br />
+                Fusce dapibus, tellus ac cursus commodo.
+              </p>
+              <p>
+                Donec id elit non mi porta gravida at eget metus. Fusce
+                dapibus, tellus ac cursus commodo, tortor mauris
+                condimentum nibh, ut fermentum massa justo sit amet
+                risus. Etiam porta sem malesuada magna mollis
+                euismod. Donec sed odio dui.
+              </p>
+              <img src="static/img/bg.png" />
+
+              <!-- Tabs... -->
+              <br /><br />
+              <h3>Sample Tabs</h3>
+              <ul id="tabs" class="tabs nav nav-tabs" data-tabs="tabs">
+                <li class="active">
+                  <a href="#tab-1" data-toggle="tab">Tab 1</a>
+                </li>
+                <li class="">
+                  <a href="#tab-2" data-toggle="tab">Tab 2</a>
+                </li>
+                <li class="">
+                  <a href="#tab-3" data-toggle="tab">Tab 3</a>
+                </li>
+              </ul>
+              <div class="tab-content">
+                <div id="tab-1" class="tab-pane active">
+                  <br />
+                  <p>
+                    Tab 1 content...<br />  Donec id elit non mi porta
+                    gravida at eget metus. Fusce dapibus, tellus ac
+                    cursus commodo.
+                  </p>
+                </div>
+                <div id="tab-2" class="tab-pane">
+                  <br />
+                  <p>
+                    Tab 2 content...<br />  Tortor mauris condimentum
+                    nibh, ut fermentum massa justo sit amet
+                    risus. Etiam porta sem malesuada.
+                  </p>
+                </div>
+                <div id="tab-3" class="tab-pane">
+                  <br />
+                  <p>
+                    Tab 3 content...<br /> Magna mollis euismod. Donec
+                    sed odio dui.
+                  </p>
+                </div>
+
+                <br>
+
+                <h3>Sample Tooltip</h3>
+                <br>Move the mouse over the button:
+                <div class="btn btn-default" data-toggle="tooltip"
+                     title="This is a tooltip">Sample Tooltip
+                </div>
+                <br><br>
+
+              </div><!-- /tab-content -->
+            </div> <!-- /kofa-content -->
+          </div> <!-- /well -->
+        </div> <!-- /kofa-content-narrow -->
+      </div> <!-- /row -->
+
+      <div class="row">
+        <div class="col-md-12 content kofa-content-wide">
+          <div class="well kofa-content">
+            <div class="actionbar">
+              <a class="btn btn-default" href="">
+                <img src="static/img/actionicon_modify.png"
+                     alt="Manage" />
+                     Manage
+              </a>
+              <a class="btn btn-default" href="">
+                <img src="static/img/actionicon_trigtrans.png"
+                     alt="Trigger transition" />
+                     Trigger transition
+              </a>
+            </div>
+            <div class="hero-unit">
+              <h1>Hello there!</h1>
+              <p>this is...</p>
+            </div>
+            <div>...content that spans the whole page.</div>
+            <br><br>
+            <div id="#sampleform">
+              <form method="post">
+                <fieldset id="form-fieldset">
+                  <legend>A Sample Form</legend>
+                  <div class="form-group variable-form">
+                    <label>Some Label</label>
+                    <input type="text" class="textType"
+                           name="myinput[]" placeholder="A name..." />
+                  </div>
+                  <button type="submit" class="btn rowadd btn-default">
+                    Add row
+                  </button>
+                  <br />
+                  <button type="submit" class="btn btn-primary">Save</button>
+                </fieldset>
+              </form>
+            </div> <!-- /sampleform -->
+            <br><br>
+            <h3>A Sample Data Table</h3>
+            <div class="table-responsive">
+              <table id="#dadatable" class="table table-striped dataTable">
+                <thead>
+                  <tr>
+                    <th>Id</th>
+                    <th>Name</th>
+                    <th>Portal Roles</th>
+                    <th>Local Roles</th>
+                    <th></th>
+                  </tr>
+                </thead><tbody><tr><td>admin</td>
+                    <td>John</td>
+                    <td nowrap="nowrap">Portal Manager <br />
+                      Academics Officer (view only)
+                    </td>
+                    <td>Owner</td>
+                    <td class="text-right">
+                      <form method="post">
+                        <input type="hidden" name="userid" value="admin" />
+                        <input class="btn btn-sm btn-primary" type="submit"
+                               name="manage" value="Manage" />
+                        <input class="btn btn-sm btn-default" type="submit"
+                               name="delete" value="Remove" />
+                      </form>
+                    </td>
+                  </tr>
+                  <tr>
+                    <td>tester</td>
+                    <td>Vitali</td>
+                    <td nowrap="nowrap">Academics Officer (view only)</td>
+                    <td>Owner</td>
+                    <td class="text-right">
+                      <form method="post">
+                        <input type="hidden" name="userid" value="your_id" />
+                        <input class="btn btn-sm btn-primary" type="submit"
+                               name="manage" value="Manage" />
+                        <input class="btn btn-sm btn-default" type="submit"
+                               name="delete" value="Remove" />
+                      </form>
+                    </td>
+                  </tr>
+                </tbody>
+              </table>
+            </div>
+
+            <br><br>
+            <h3>A Sample Inline Form</h3>
+            <form method="POST" class="form-inline">
+            <br />
+              <div class="form-group">
+                <input class="btn btn-primary" type="submit" name="search"
+                  value="Find student(s)" />
+              </div>
+              <div class="form-group">
+                <select name="searchtype" class="form-control">
+                  <option value="student_id">with id</option>
+                  <option value="fullname">with name</option>
+                  <option value="reg_number">with registration number</option>
+                  <option value="matric_number">with matric number</option>
+                  <option value="current_session">in session</option>
+                  <option value="depcode">in department</option>
+                  <option value="current_mode">in study mode</option>
+                  <option value="suspended">
+                    with deactivated account (search term omitted)
+                  </option>
+                  <option value="transcript">
+                    who requested transcript (search term omitted)
+                  </option>
+                </select>
+              </div>
+              <div class="form-group">
+                <input type="text" class="form-control" name="searchterm" />
+              </div>
+            </form>
+
+            <br><br>
+            <h3>A Sample Display Form Table</h3>
+            <table class="form-table">
+              <tbody>
+                <tr>
+                  <td class="fieldname">Code:</td>
+                  <td>app2012</td>
+                </tr>
+                <tr>
+                 <td class="fieldname">Application Target:</td>
+                  <td>General Studies</td>
+                </tr>
+                 <tr>
+                  <td class="fieldname">
+                    Application Mode (Donec id elit non mi porta gravida.):
+                  </td>
+                  <td>Create Application Records</td>
+                </tr>
+              </tbody>
+            </table>
+
+            <br><br>
+            <h3>A Sample Edit/Manage Form Table</h3>
+            <table class="form-table">
+              <tbody>
+                <tr>
+                  <td class="fieldname">Code:</td>
+                  <td>app2012</td>
+                </tr>
+                <tr>
+                  <td class="fieldname">* Title:</td>
+                  <td>
+                    <input class="textType" id="form.title" name="form.title"
+                           size="20" type="text"
+                           value="General Studies 2012/2013" />
+                  </td>
+                </tr>
+                <tr>
+                  <td class="fieldname">Any phone number:</td>
+                  <td>
+                    <select id="form.phone.country" name="form.phone.country"
+                              size="1" class="phone-input">
+                      <option value="+234">Nigeria (+234)</option>
+                      <option value="+49">Germany (+49)</option>
+                      <option value="+1">U.S. (+1)</option>
+                    </select>-
+                    <input class=" phone-input textType" id="form.phone.area"
+                           name="form.phone.area" size="20" type="text"
+                           value="" />-
+                    <input class=" phone-input textType" id="form.phone.ext"
+                           name="form.phone.ext" size="20" type="text" value="" />
+                  </td>
+                </tr>
+                <tr>
+                  <td class="fieldname">Any text field:</td>
+                  <td>
+                      <textarea id="any_id"
+                          name="any_name" rows="5">Placeholder text</textarea>
+                  </td>
+                </tr>
+                <tr>
+                  <td class="fieldname">*
+                      Application Mode
+                      (A select field coming from zope.formlib):
+                  </td>
+                  <td>
+                    <div class="value">
+                      <select id="form.mode" name="form.mode" size="1">
+                        <option selected="selected" value="create">
+                          Create Application Records
+                        </option>
+                        <option value="update">Update Application Records
+                        </option>
+                      </select>
+                    </div>
+                    <input name="form.mode-empty-marker"
+                           type="hidden" value="1" />
+                  </td>
+                </tr>
+                <tr>
+                  <td class="fieldname">A datepicker field:</td>
+                  <td>
+                    <input class="datepicker-le-year textType"
+                                 id="form.any_date" name="form.any_date"
+                                 size="20" type="text" value="" />
+                  </td>
+                </tr>
+
+                <tr>
+                  <td class="fieldname">
+                      A select field in Kofa pagetemplates:
+                  </td>
+                  <td>
+                      <select id="any_id" name="any_name" size="1"
+                              class="form-control half">
+                        <option selected="selected" value="create">
+                            Create Application Records
+                        </option>
+                        <option value="update">
+                            Update Application Records
+                        </option>
+                      </select>
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </div> <!-- /well kofa-content-->
+        </div> <!-- /kofa-content-wide -->
+      </div> <!-- /row -->
+      <div class="footer">
+        <p class="credit muted text-right">
+          Kofa - Student Management System<br />
+          Copyright &copy; WAeUP Group 2014
+        </p>
+      </div>
+    </div> <!-- /container -->
+
+    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
+    <script src="static/bootstrap/js/bootstrap.min.js"></script>
+    <script src="static/js/kofa-tooltip.js"></script>
+    <script src="static/js/kofa-button-rowadd.js"></script>
+    <script src="static/js/kofa-toggleall.js"></script>
+    <script class="kofa-script-datatable"
+        src="static/js/jquery.dataTables.min.js">
+    </script>
+    <script class="kofa-script-datatable"
+        src="static/js/kofa-datatables.js">
+    </script>
+    <script class="kofa-script-datepicker"
+        src="static/js/jquery-ui.min.js">
+    </script>
+    <script class="kofa-script-datepicker"
+        src="static/js/kofa-datepicker.js">
+    </script>
+
+  </body>
+</html>
Index: main/waeup.futminna/trunk/setup.py
===================================================================
--- main/waeup.futminna/trunk/setup.py	(revision 11397)
+++ main/waeup.futminna/trunk/setup.py	(revision 11398)
@@ -2,5 +2,5 @@
 from setuptools import setup, find_packages
 
-version = '0.1dev'
+version = '1.0dev'
 
 install_requires =[
@@ -9,6 +9,6 @@
     'grokui.admin',
     'grokcore.startup',
-    'waeup.kofa',
-    'kofacustom.nigeria',
+    'waeup.kofa >= 1.0',
+    'kofacustom.nigeria >= 1.0',
     ],
 
@@ -22,4 +22,9 @@
     ]
 
+diazo_require = [
+    'diazo',
+    'webob',
+]
+
 tests_require = [
     'z3c.testsetup',
@@ -30,12 +35,4 @@
     ]
 
-docs_require = [
-    'Sphinx',
-    'collective.recipe.sphinxbuilder',
-    'docutils',
-    'roman',
-    'repoze.sphinx.autointerface',
-    ]
-
 def read(*rnames):
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
@@ -43,6 +40,4 @@
 long_description = (
     read('README.txt')
-    + '\n\n'
-    + read('src', 'waeup', 'futminna', 'README.txt')
     + '\n\n'
     + read('CHANGES.txt')
@@ -84,11 +79,8 @@
       extras_require = dict(
         test = tests_require,
-        docs = docs_require,
         beaker = beaker_require,
+        diazo = diazo_require,
         ),
       entry_points="""
-      # Add entry points here
-      [hurry.resource.libraries]
-      waeup_custom = waeup.futminna.browser.resources:waeup_custom
       [console_scripts]
       kofa-debug = grokcore.startup:interactive_debug_prompt
Index: main/waeup.futminna/trunk/src/waeup/futminna/README.txt
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/README.txt	(revision 11397)
+++ 	(revision )
@@ -1,4 +1,0 @@
-The waeup.futminna package
-************************
-
-A customized portal software for student registration.
Index: main/waeup.futminna/trunk/src/waeup/futminna/browser/resources.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/browser/resources.py	(revision 11397)
+++ 	(revision )
@@ -1,30 +1,0 @@
-## $Id$
-##
-## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-##
-import grok
-from waeup.kofa.browser.resources import (
-    Library, ResourceInclusion, waeup_base_css,
-    )
-
-#: All local resources are registered under the name ``waeup_custom``.
-waeup_custom = Library('waeup_custom', 'static')
-
-custom_theme = ResourceInclusion(
-    waeup_custom, 'custom_theme.css',
-    depends = [waeup_base_css])
-
-favicon = ResourceInclusion(waeup_custom, 'favicon.ico')
Index: main/waeup.futminna/trunk/src/waeup/futminna/browser/static/custom_theme.css
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/browser/static/custom_theme.css	(revision 11397)
+++ 	(revision )
@@ -1,72 +1,0 @@
-.topbar-inner, .topbar .fill {
-  background-color: #8A0474;
-  background-image: -moz-linear-gradient(center top , #4e0242, #8A0474);
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#4e0242), to(#8A0474));
-  background-image: -moz-linear-gradient(top, #4e0242, #8A0474);
-  background-image: -ms-linear-gradient(top, #4e0242, #8A0474);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #4e0242), color-stop(100%, #8A0474));
-  background-image: -webkit-linear-gradient(top, #4e0242, #8A0474);
-  background-image: -o-linear-gradient(top, #4e0242, #8A0474);
-  background-image: linear-gradient(top, #4e0242, #8A0474);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4e0242', endColorstr='#8A0474', GradientType=0);
-}
-
-.topbar div > ul .active > a, .nav .active > a {
-  background-color: #8A0474;
-}
-
-.topbar h3 a:hover, .topbar .brand:hover, .topbar ul .active > a {
-  background-color: #8A0474;
-}
-
-.topbar div > ul a:hover, .nav a:hover {
-  background-color: #8A0474;
-}
-
-
-.topbar div > ul .menu-dropdown,
-.nav .menu-dropdown,
-.topbar div > ul .dropdown-menu,
-.nav .dropdown-menu {
-  background-color: #8A0474;
-}
-
-.topbar div > ul a.menu:hover,
-.nav a.menu:hover,
-.topbar div > ul li.open .menu,
-.nav li.open .menu,
-.topbar div > ul .dropdown-toggle:hover,
-.nav .dropdown-toggle:hover,
-.topbar div > ul .dropdown.open .dropdown-toggle,
-.nav .dropdown.open .dropdown-toggle {
-  background: #8A0474;
-}
-
-body {
-  background-color: #f3eff2;
-}
-
-.topbar div > ul .menu-dropdown li a:hover,
-.nav .menu-dropdown li a:hover,
-.topbar div > ul .dropdown-menu li a:hover,
-.nav .dropdown-menu li a:hover {
-  background-color: #4e0242;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#8A0474), to(#191919));
-  background-image: -moz-linear-gradient(top, #4e0242, #4e0242);
-  background-image: -ms-linear-gradient(top, #4e0242, #4e0242);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #4e0242), color-stop(100%, #4e0242));
-  background-image: -webkit-linear-gradient(top, #4e0242, #4e0242);
-  background-image: -o-linear-gradient(top, #4e0242, #4e0242);
-  background-image: linear-gradient(top, #4e0242, #4e0242);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4e0242', endColorstr='#4e0242', GradientType=0);
-  color: #ffffff;
-}
-
-a {
-  color: #8A0474;
-}
-
-a:hover {
-  color: #4e0242;
-}
Index: main/waeup.futminna/trunk/src/waeup/futminna/browser/tests.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/browser/tests.py	(revision 11397)
+++ main/waeup.futminna/trunk/src/waeup/futminna/browser/tests.py	(revision 11398)
@@ -49,13 +49,4 @@
         shutil.rmtree(self.dc_root)
 
-    def test_custom_theme(self):
-        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-        self.browser.open('http://localhost/app/configuration')
-        self.assertMatches('...FUTMinna Theme...', self.browser.contents)
-        self.browser.getControl(name="form.skin").value = ['custom theme']
-        self.browser.getControl("Save").click()
-        self.browser.open('http://localhost/app/configuration')
-        return
-
     def test_access_live_url(self):
         # We can't access the system with basic authentication
Index: main/waeup.futminna/trunk/src/waeup/futminna/browser/theming.py
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/browser/theming.py	(revision 11397)
+++ 	(revision )
@@ -1,33 +1,0 @@
-## $Id$
-##
-## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-##
-import grok
-from waeup.kofa.browser.interfaces import ITheme
-from waeup.futminna.browser.resources import custom_theme, favicon
-
-from waeup.futminna.interfaces import MessageFactory as _
-
-class CustomTheme(grok.GlobalUtility):
-    """A custom theme based on the Kofa base theme.
-    """
-    grok.implements(ITheme)
-    grok.name('custom theme')
-
-    description = _(u'FUTMinna Theme')
-
-    def getResources(self):
-        return [custom_theme, favicon]
Index: main/waeup.futminna/trunk/src/waeup/futminna/interswitch/browser_templates/applicant_goto_interswitch.pt
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/interswitch/browser_templates/applicant_goto_interswitch.pt	(revision 11397)
+++ main/waeup.futminna/trunk/src/waeup/futminna/interswitch/browser_templates/applicant_goto_interswitch.pt	(revision 11398)
@@ -72,9 +72,9 @@
   <span tal:replace="structure view/xml_data"></span>
 
-  <input type="submit" class="btn" tal:attributes="value view/submit_button"/>
+  <input type="submit" class="btn btn-primary" tal:attributes="value view/submit_button"/>
 
   <br /><br />
 
-  <img tal:attributes="src view/interswitch_img_url" />
+  <img src="/static/img/interswitch_verve_mastercard.gif" />
 
 </form>
Index: main/waeup.futminna/trunk/src/waeup/futminna/interswitch/browser_templates/student_goto_interswitch.pt
===================================================================
--- main/waeup.futminna/trunk/src/waeup/futminna/interswitch/browser_templates/student_goto_interswitch.pt	(revision 11397)
+++ main/waeup.futminna/trunk/src/waeup/futminna/interswitch/browser_templates/student_goto_interswitch.pt	(revision 11398)
@@ -72,5 +72,9 @@
   <span tal:replace="structure view/xml_data"></span>
 
-  <input type="submit" class="btn" tal:attributes="value view/submit_button"/>
+  <input type="submit" class="btn btn-primary" tal:attributes="value view/submit_button"/>
+
+  <br /><br />
+
+  <img src="/static/img/interswitch_verve_mastercard.gif" />
 
 </form>
Index: main/waeup.futminna/trunk/versions.cfg
===================================================================
--- main/waeup.futminna/trunk/versions.cfg	(revision 11397)
+++ main/waeup.futminna/trunk/versions.cfg	(revision 11398)
@@ -130,2 +130,21 @@
 # dolmen.beaker==0.1
 pycryptopp = 0.6.0.1206569328141510525648634803928199668821045408958
+
+# Added by buildout at 2014-02-24 09:09:43.882599
+WebOb = 1.3.1
+diazo = 1.0.5
+repoze.xmliter = 0.5
+z3c.recipe.staticlxml = 0.10
+
+# Required by:
+# diazo==1.0.5
+experimental.cssselect = 0.3
+
+# Required by:
+# diazo==1.0.5
+# experimental.cssselect==0.3
+lxml = 3.3.1
+
+# Required by:
+# z3c.recipe.staticlxml==0.10
+zc.recipe.cmmi = 1.3.5
