Index: main/waeup.uniben/trunk/src/waeup/uniben/locales/en/LC_MESSAGES/waeup.kofa.po
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/locales/en/LC_MESSAGES/waeup.kofa.po	(revision 10902)
+++ main/waeup.uniben/trunk/src/waeup/uniben/locales/en/LC_MESSAGES/waeup.kofa.po	(revision 11069)
@@ -1,5 +1,4 @@
 msgid ""
 msgstr ""
-"<strong>WARNING: </strong> Do not use these exporters between 8 am and 8 pm. Uniben student data exports take longer than 30 minutes. During exports applicants or students won't be able to register.\n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
Index: main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py	(revision 10902)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/browser.py	(revision 11069)
@@ -21,13 +21,14 @@
 from zope.component import getUtility
 from hurry.workflow.interfaces import IWorkflowInfo
-from waeup.kofa.interfaces import REQUESTED, IExtFileStore, IKofaUtils
+from waeup.kofa.interfaces import (
+    REQUESTED, IExtFileStore, IKofaUtils, IObjectHistory)
 from waeup.kofa.widgets.datewidget import FriendlyDatetimeDisplayWidget
-from waeup.kofa.browser.layout import KofaEditFormPage
-from waeup.kofa.browser.layout import action, jsaction
+from waeup.kofa.browser.layout import action, jsaction, KofaEditFormPage
 from waeup.kofa.students.browser import (
     StudyLevelEditFormPage, StudyLevelDisplayFormPage,
     StudentBasePDFFormPage, ExportPDFCourseRegistrationSlipPage,
     CourseTicketDisplayFormPage, StudentTriggerTransitionFormPage,
-    msave, emit_lock_message)
+    msave, emit_lock_message,
+    StudentActivatePage, StudentDeactivatePage)
 from waeup.kofa.students.interfaces import IStudentsUtils, ICourseTicket
 from waeup.kofa.students.workflow import FORBIDDEN_POSTGRAD_TRANS
@@ -278,2 +279,27 @@
     """
     form_fields = grok.AutoFields(ICourseTicket).omit('score')
+
+class CustomStudentActivatePage(StudentActivatePage):
+    """ Activate student account
+    """
+
+    def update(self):
+        self.context.suspended = False
+        self.context.writeLogMessage(self, 'account activated')
+        history = IObjectHistory(self.context)
+        history.addMessage('Student account activated', user='undisclosed')
+        self.flash(_('Student account has been activated.'))
+        self.redirect(self.url(self.context))
+        return
+
+class CustomStudentDeactivatePage(StudentDeactivatePage):
+    """ Deactivate student account
+    """
+    def update(self):
+        self.context.suspended = True
+        self.context.writeLogMessage(self, 'account deactivated')
+        history = IObjectHistory(self.context)
+        history.addMessage('Student account deactivated', user='undisclosed')
+        self.flash(_('Student account has been deactivated.'))
+        self.redirect(self.url(self.context))
+        return
Index: main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py
===================================================================
--- main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py	(revision 10902)
+++ main/waeup.uniben/trunk/src/waeup/uniben/students/tests/test_browser.py	(revision 11069)
@@ -711,2 +711,33 @@
             self.browser.contents)
         self.student.suspended = False
+
+    def test_activate_deactivate_buttons(self):
+        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+        self.browser.open(self.student_path)
+        self.browser.getLink("Deactivate").click()
+        self.assertTrue(
+            'Student account has been deactivated.' in self.browser.contents)
+        self.assertTrue(
+            'Base Data (account deactivated)' in self.browser.contents)
+        self.assertTrue(self.student.suspended)
+        self.browser.getLink("Activate").click()
+        self.assertTrue(
+            'Student account has been activated.' in self.browser.contents)
+        self.assertFalse(
+            'Base Data (account deactivated)' in self.browser.contents)
+        self.assertFalse(self.student.suspended)
+        # History messages have been added ...
+        self.browser.getLink("History").click()
+        # User is undisclosed
+        self.assertTrue(
+            'Student account deactivated<br />' in self.browser.contents)
+        self.assertTrue(
+            'Student account activated<br />' in self.browser.contents)
+        # ... and actions have been logged.
+        logfile = os.path.join(
+            self.app['datacenter'].storage, 'logs', 'students.log')
+        logcontent = open(logfile).read()
+        self.assertTrue('zope.mgr - waeup.uniben.students.browser.CustomStudentDeactivatePage - '
+                        'B1000000 - account deactivated' in logcontent)
+        self.assertTrue('zope.mgr - waeup.uniben.students.browser.CustomStudentActivatePage - '
+                        'B1000000 - account activated' in logcontent)
