Index: /WAeUP_SRP/trunk/WAeUPTool.py
===================================================================
--- /WAeUP_SRP/trunk/WAeUPTool.py	(revision 1571)
+++ /WAeUP_SRP/trunk/WAeUPTool.py	(revision 1572)
@@ -478,4 +478,57 @@
     ###)
 
+    security.declareProtected(ModifyPortalContent,'getLogfileLines') ###(
+    def getLogfileLines(self,filename="event.log",numlines=20):
+        """Get last NUMLINES lines of logfile FILENAME.
+
+        Return last lines' of a file in the instances logfile directory as
+        a list. The number of returned lines equals `numlines' or less. If
+        less than `numlines' lines are available, the whole file ist
+        returned. If the file can not be opened or some other error
+        occurs, empty list is returend.
+        """
+        result = []
+        lines_hit = 0
+
+        # We only handle files in instances' log directory...
+        logpath = os.path.join(i_home, "log")
+        filename = str(os.path.abspath( os.path.join( logpath, filename )))
+        if not filename.startswith( logpath ):
+            # Attempt to access file outside log-dir...
+            return []
+
+        try:
+            fd = file( filename, "rb" )
+        except IOError:
+            return []
+        if not fd:
+            return []
+
+        if os.linesep == None:
+            linesep = '\n'
+        else:
+            linesep = os.linesep
+
+        # Try to find 'numlines' times a lineseparator, searching from end
+        # and moving to the beginning of file...
+        fd.seek( 0, 2) # Move to end of file...
+        while lines_hit < numlines:
+            if fd.read(1) == linesep[-1]: # This moves filedescriptor
+                                          # one step forward...
+                lines_hit += 1
+            try:
+                fd.seek( -2, 1) # Go two bytes back from current pos...
+            except IOError:
+                # We cannot go back two bytes. Maybe the file is too small...
+                break
+        fd.seek(2,1)
+
+        # Read all lines from current position...
+        result = fd.readlines()
+        # Remove line endings...
+        result = [x.strip() for x in result]
+        fd.close()
+        return result
+    ###)
 
 InitializeClass(WAeUPTool)
Index: /WAeUP_SRP/trunk/skins/waeup_student/getLogData.py
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/getLogData.py	(revision 1572)
+++ /WAeUP_SRP/trunk/skins/waeup_student/getLogData.py	(revision 1572)
@@ -0,0 +1,37 @@
+## Script (Python) "getLogData"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=
+##
+"""
+return logfile entries
+"""
+
+wtool = context.waeup_tool
+
+# Default values...
+filename = "event.log"
+numlines = 30
+
+# Validate posted vars...
+request = container.REQUEST
+if 'filename' in request.keys():
+    if request['filename'] in ['event.log','Z2.log']:
+        filename = request['filename']
+
+if 'numlines' in request.keys():
+    try:
+        reqlines = int(request['numlines'])
+        if reqlines > 0 and reqlines < 1000:
+            numlines = reqlines
+    except:
+        pass
+
+return { 'filename' : filename,
+         'numlines' : numlines,
+         'lines' : wtool.getLogfileLines(filename, numlines)
+       }
Index: /WAeUP_SRP/trunk/skins/waeup_student/search_students_form.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/search_students_form.pt	(revision 1571)
+++ /WAeUP_SRP/trunk/skins/waeup_student/search_students_form.pt	(revision 1572)
@@ -27,12 +27,16 @@
       <nobr><a href="statistics_reg_view">Registration Statistics</a>
       &nbsp;&nbsp;&nbsp;&nbsp;</nobr>        
+      <nobr><a href="list_students">Cleared Student Export</a>
+      &nbsp;&nbsp;&nbsp;&nbsp;</nobr>
       <span tal:condition="is_so">
-         <nobr><a href="list_students">Cleared Student Export</a>
+         <nobr><a href="view_logs">View Log Files</a>
          &nbsp;&nbsp;&nbsp;&nbsp;</nobr>
-         <nobr><a href="paid_transfer_list">Transfer Student Export</a></nobr>    
-         &nbsp;&nbsp;&nbsp;&nbsp;
-         <nobr><a href="add_student">Add Student Record</a></nobr>
+         <nobr><a href="add_student">Add Student Record</a>        
+         &nbsp;&nbsp;&nbsp;&nbsp;</nobr>
+         <nobr><a href="paid_transfer_list">Export Transfer Students</a></nobr>    
       </span>
       </strong>
+    
+              
         <h3> Search Student Section</h3><br />
           You are logged in as member <span tal:replace="info/member|nothing" /> 
@@ -42,9 +46,5 @@
           </span>
           <span tal:condition="info/departments|nothing" tal:omit-tag="">
-            and <span tal:repeat="department info/departments|nothing" tal:content="department"/></span>
-          <span tal:condition="info/certificate_level|nothing" tal:omit-tag="">
-            who is CourseAdviser for 
-            <span tal:repeat="cl info/certificate_level" tal:content="cl" />
-          </span>.
+            and <span tal:repeat="department info/departments|nothing" tal:content="department"/></span>.
           <br /><br />
         <span tal:replace="structure rendered" />
Index: /WAeUP_SRP/trunk/skins/waeup_student/students_index.py
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/students_index.py	(revision 1571)
+++ /WAeUP_SRP/trunk/skins/waeup_student/students_index.py	(revision 1572)
@@ -25,7 +25,7 @@
 if "ClearanceOfficers" in member.getGroups() or\
    "CourseAdvisers" in member.getGroups():
-    return redirect("%s/search_students" % context.portal_url())
+    return redirect("%s/campus/search_students" % context.portal_url())
 if context.isSectionOfficer():
-    return redirect("%s/search_students" % context.portal_url())
+    return redirect("%s/campus/search_students" % context.portal_url())
 if context.isStudent():
     id = str(member)
Index: /WAeUP_SRP/trunk/skins/waeup_student/view_logs.pt
===================================================================
--- /WAeUP_SRP/trunk/skins/waeup_student/view_logs.pt	(revision 1572)
+++ /WAeUP_SRP/trunk/skins/waeup_student/view_logs.pt	(revision 1572)
@@ -0,0 +1,56 @@
+<metal:body use-macro="here/main_template/macros/master">
+  <metal:main fill-slot="main">
+  <metal:block tal:define="data context/getLogData;
+			mtool here/portal_membership;
+                        member mtool/getAuthenticatedMember;">       
+
+      <h3>Current Log Entries (<span tal:replace="data/filename"/>)</h3>
+      <br />      
+
+      <span tal:condition="not:isAnon">
+
+        <form method="post" action="view_logs">
+          Show last <input type="text" name="numlines" value="20"
+		           tal:attributes="value data/numlines" />
+	  lines of
+	  <select name="filename">
+	    <option 
+	       tal:attributes="selected python: data['filename']=='event.log'"
+	       value="event.log">Event Log</option>
+            <option 
+	       tal:attributes="selected python: data['filename']=='Z2.log'"
+               value="Z2.log">Access Log</option>
+          </select>
+          <input type="submit" value="Refresh" />
+        </form>
+
+	<hr />
+
+        <table>
+          <tr class="even ajaxtd" tal:repeat="line data/lines">
+	    <td><span tal:replace="line" /></td>
+          </tr>
+        </table>
+
+	<hr />
+
+        <form method="post" action="view_logs">
+          Show last <input type="text" name="numlines" value="20"
+		           tal:attributes="value data/numlines" />
+	  lines of
+	  <select name="filename">
+	    <option 
+	       tal:attributes="selected python: data['filename']=='event.log'"
+	       value="event.log">Event Log</option>
+            <option 
+	       tal:attributes="selected python: data['filename']=='Z2.log'"
+               value="Z2.log">Access Log</option>
+          </select>
+          <input type="submit" value="Refresh" />
+        </form>
+
+      </span> <!-- condition: not:isAnon -->
+  </metal:block>      
+  </metal:main>
+</metal:body>
+      
