Index: WAeUP_SRP/trunk/Widgets.py
===================================================================
--- WAeUP_SRP/trunk/Widgets.py	(revision 2097)
+++ WAeUP_SRP/trunk/Widgets.py	(revision 2098)
@@ -4,10 +4,14 @@
 from types import *
 from Globals import InitializeClass
+from ZPublisher.HTTPRequest import FileUpload
 ##from Products.CPSSchemas.Widget import CPSWidgetType
 from Products.CMFCore.utils import getToolByName
 from Products.CPSSchemas.BasicWidgets import CPSBooleanWidget, CPSWidget, CPSStringWidget, CPSEmailWidget,CPSImageWidget
+from Products.CPSSchemas.BasicWidgets import CPSFileWidget
 from Products.CPSSchemas.BasicWidgets import renderHtmlTag,CPSSelectWidget, CPSStringWidget
 from Products.CPSSchemas.ExtendedWidgets import CPSDateTimeWidget
 from Products.CPSSchemas.Widget import widgetRegistry
+from Products.CPSUtil.file import PersistableFileUpload
+from Products.CPSUtil.id import generateFileName
 ##from Products.CPSSchemas.WidgetTypesTool import WidgetTypeRegistry
 from DateTime.DateTime import DateTime
@@ -15,4 +19,5 @@
 from Products.WAeUP_SRP.Students import getStudentByRegNo
 from Products.WAeUP_SRP.Academics import makeCertificateCode
+from Products.ExtFile.ExtFile import ExtFile
 from re import compile
 import logging
@@ -248,5 +253,5 @@
     """WAeUP Session Widget."""
     meta_type = 'WAeUP Session Widget'
-
+    
     def _getSessions(self):
         current_year = DateTime().year()
@@ -522,5 +527,5 @@
                 if datastructure[self.state_field]:
                     v = datastructure[self.state_field] + '_' + v
-
+        
         if self.is_required and not len(v):
             datastructure.setError(widget_id, "lga required")
@@ -533,5 +538,5 @@
             state = datastructure[self.state_field].lower()
             lga = "_".join(datastructure[self.lga_field].lower().split())
-            datamodel[self.fields[0]] =   state + "_" + lga
+            datamodel[self.fields[0]] =   state + "_" + lga 
         return 1
 
@@ -705,6 +710,6 @@
             mode = kw['mode']
         else:
-            mode = "xxxx"
-        if not valid:
+            mode = "edit"
+        if not valid: 
             err = 'Invalid number'
         elif self.reference == '':
@@ -1315,5 +1320,6 @@
     """ Pume Pin Widget"""
     meta_type = "Pume Pin Widget"
-
+    catalog = "applicants_catalog"
+    
     def validate(self, datastructure, **kw): ###(
         """Validate datastructure and update datamodel."""
@@ -1323,4 +1329,5 @@
         err = 0
         mapping = {}
+        
         prefix= self.prefix
         if prefix.startswith('@'):
@@ -1333,5 +1340,4 @@
         do = 1
         s_id = str(self.portal_membership.getAuthenticatedMember())
-        import pdb;pdb.set_trace()
         if self.isStaff():
             do = 0
@@ -1377,5 +1383,4 @@
                 break
             if ok >= 1:
-                #import pdb;pdb.set_trace()
                 if self.isStudent():
                     err = "This is only for Pume application."
@@ -1384,10 +1389,10 @@
                 else:
                     applicant = datastructure['record']
-                    if not applicant.pin:
+                    if not applicant.pin: 
                         s_logger.info('%s successfully used PIN %s' % (ref,pin_str))
                         d = {}
                         d['reg_no'] = applicant.reg_no
-                        d['pin'] = n
-                        self.new_students.modifyRecord(**d)
+                        d['pin'] = pin_str
+                        getattr(self,self.catalog).modifyRecord(**d)
                     elif applicant.pin != pin_str:
                         s_logger.info('%s/%s repeatedly applied for PUME with different PIN %s' % (s_id,ref,pin_str))
@@ -1408,4 +1413,45 @@
     ###)
 
+    def render(self, mode, datastructure, **kw): ###(
+        """Render in mode from datastructure."""
+        render_method = 'widget_scratch_card_pin_render'
+        meth = getattr(self, render_method, None)
+        if meth is None:
+            raise RuntimeError("Unknown Render Method %s for widget type %s"
+                               % (render_method, self.getId()))
+
+        # XXX AT: datastructure has to be set again here, in case we're in edit
+        # or create mode, because a default value has to be provided.
+        #import pdb;pdb.set_trace()
+        datamodel = datastructure.getDataModel()
+        v = datamodel[self.fields[0]]
+        #import pdb;pdb.set_trace()
+        if v and type(v) is StringType:
+            try:
+                p,b,n = v.split('-')
+                v = ScratchCardPin(p,b,n)
+            except ValueError:
+                v = ScratchCardPin(self.prefix,'XXX',v)
+                pass
+        if v:
+            prefix= '%s' % v.p
+            b = '%s' % v.b
+            n = '%s' % v.n
+        else:
+            prefix= self.prefix
+            if prefix.startswith('@'):
+                prefix= getattr(self,self.prefix[1:])()
+            b = n = ''
+            v = ScratchCardPin(prefix,b,n)
+        widget_id = self.getWidgetId()
+        datastructure[widget_id] = v
+        datastructure[widget_id+'_p'] = prefix
+        datastructure[widget_id+'_b'] = b
+        datastructure[widget_id+'_n'] = n
+        return meth(mode=mode,
+                    datastructure=datastructure,
+                    )
+    ###)
+
 InitializeClass(PumePinWidget)
 widgetRegistry.register(PumePinWidget)
@@ -1430,4 +1476,221 @@
 ###)
 
+class ExtFileWidget(CPSFileWidget): ###(
+    """Photo widget."""
+    meta_type = 'Ext File Widget'
+
+    def getFileInfo(self, datastructure): ###(
+        """Get the file info from the datastructure."""
+        widget_id = self.getWidgetId()
+        fileupload = datastructure[widget_id]
+        dm = datastructure.getDataModel()
+        field_id = self.fields[0]
+        if fileupload:
+            import pdb; pdb.set_trace()
+            empty_file = False
+            session_file = isinstance(fileupload, PersistableFileUpload)
+            current_filename = generateFileName(fileupload.filename)
+            fileupload.seek(0, 2) # end of file
+            size = fileupload.tell()
+            fileupload.seek(0)
+            file = dm[field_id] # last stored file
+            if file is not None:
+                last_modified = str(file._p_mtime or '')
+            else:
+                last_modified = ''
+        else:
+            empty_file = True
+            session_file = False
+            current_filename = ''
+            size = 0
+            last_modified = ''
+
+        # Find the URL for the file  XXX Refactor this!
+
+        # get the adapter
+        for adapter in dm._adapters:
+            if adapter.getSchema().has_key(field_id):
+                break # Note: 'adapter' is still the right one
+        else:
+            raise ValueError('No schema for field %r' % field_id)
+
+        # get the content_url from the adapter
+        content_url = None
+        ob = dm.getProxy()
+        if ob is None:
+            # non proxy case
+            ob = dm.getObject()
+        if ob is None:
+            # Not stored in the ZODB.
+            # StorageAdapters that do not store the object in
+            # ZODB takes the entry_id instead of object.
+            # Get the entry_id from the datamodel context(typically
+            # a directory).
+            id_field = getattr(dm.getContext(), 'id_field', None)
+            if id_field:
+                try:
+                    entry_id = datastructure[id_field]
+                except KeyError:
+                    entry_id = None
+            else:
+                # No object passed, and no id_field
+                entry_id = None
+            if entry_id:
+                # some adapters does not have _getContentUrl
+                if getattr(adapter, '_getContentUrl', None) is not None:
+                    content_url = adapter._getContentUrl(entry_id, field_id)
+        else:
+            if hasattr(adapter,"_getContentUrl"):
+                content_url = adapter._getContentUrl(ob, field_id,
+                                                 current_filename)
+            else:
+                content_url = None
+        # get the mimetype
+        registry = getToolByName(self, 'mimetypes_registry')
+        mimetype = (registry.lookupExtension(current_filename.lower()) or
+                    registry.lookupExtension('file.bin'))
+
+        file_info = {
+            'empty_file': empty_file,
+            'session_file': session_file,
+            'current_filename': current_filename,
+            'size': size,
+            'last_modified': last_modified,
+            'content_url': content_url,
+            'mimetype': mimetype,
+            }
+
+        return file_info
+    ###)
+
+    def prepare(self, datastructure, **kw): ###(
+        """Prepare datastructure from datamodel."""
+        datamodel = datastructure.getDataModel()
+        widget_id = self.getWidgetId()
+        file_name = datamodel[self.fields[0]]
+        if not file_name:
+            file = None
+        else:
+            io = ExtFile(file)
+            if filename is None:
+                filename = ofsfile.title
+            headers = {'content-type': ofsfile.content_type}
+            fs = SimpleFieldStorage(io, filename, headers)
+            FileUpload(fs)
+        datastructure[widget_id] = file
+        datastructure[widget_id + '_choice'] = ''
+        if file is not None:
+            title = file.title
+        else:
+            title = ''
+        datastructure[widget_id + '_filename'] = title
+    ###)
+
+    def validate(self, datastructure, **kw):
+        """Update datamodel from user data in datastructure.
+        """
+        datamodel = datastructure.getDataModel()
+        field_id = self.fields[0]
+        widget_id = self.getWidgetId()
+        choice = datastructure[widget_id+'_choice']
+        store = False
+        fileupload = None
+        mimetype = None
+        old_file = datamodel[field_id]
+        if old_file is not None:
+            old_filename = old_file.title
+        else:
+            old_filename = ''
+
+        if choice == 'delete':
+            if self.is_required:
+                return self.validateError('cpsschemas_err_required', {},
+                                          datastructure)
+            datamodel[field_id] = None
+        elif choice == 'keep':
+            fileupload = datastructure[widget_id]
+            if isinstance(fileupload, PersistableFileUpload):
+                # Keeping something from the session means we
+                # actually want to store it.
+                store = True
+            else:
+                # Nothing to change, don't pollute datastructure
+                # with something costly already stored, which therefore
+                # doesn't need to be kept in the session.
+                self.unprepare(datastructure)
+        elif choice == 'change':
+            fileupload = datastructure[widget_id]
+            if not fileupload:
+                return self.validateError('cpsschemas_err_file_empty', {},
+                                          datastructure)
+            if not isinstance(fileupload, FileUpload):
+                return self.validateError('cpsschemas_err_file', {},
+                                          datastructure)
+            fileupload.seek(0, 2) # end of file
+            size = fileupload.tell()
+            if not size:
+                return self.validateError('cpsschemas_err_file_empty', {},
+                                          datastructure)
+            if self.size_max and size > self.size_max:
+                max_size_str = self.getHumanReadableSize(self.size_max)
+                err = 'cpsschemas_err_file_too_big ${max_size}'
+                err_mapping = {'max_size': max_size_str}
+                return self.validateError(err, err_mapping, datastructure)
+            store = True
+
+        self.otherProcessing(choice, datastructure)
+
+        # Find filename
+        if fileupload is not None:
+            filename = self.getFileName(fileupload, datastructure, choice,
+                                        old_filename)
+            if filename != old_filename:
+                registry = getToolByName(self, 'mimetypes_registry')
+                mimetype = registry.lookupExtension(filename.lower())
+                if mimetype is not None:
+                    mimetype = str(mimetype) # normalize
+                err, err_mapping = self.checkFileName(filename, mimetype)
+                if err:
+                    return self.validateError(err, err_mapping, datastructure)
+        elif datamodel[field_id] is not None:
+            # FIXME: not correct in the case of change=='resize' (CPSPhotoWidget)
+            filename = datamodel[field_id].title
+
+        # Set/update data
+        import pdb;pdb.set_trace()
+        if store:
+            # Create file
+            #file = ExtFile(filename, fileupload, datastructure)
+            table_store = False
+            if not hasattr(datamodel._adapters[0],'_getContentUrl'):
+                table_store = True
+                ref_id = datamodel.get('reg_no')
+                id = "%s_%s" % (ref_id,field_id)
+            self.tempExtFile = ExtFile(id, field_id)
+            if table_store:
+                datastructure[widget_id] = self.tempExtFile
+                self.tempExtFile.manage_file_upload(fileupload,content_type=mimetype)
+            else:
+                self._setObject(id, self.tempExtFile)
+                self._getOb(id).manage_file_upload(fileupload, content_type)
+            # Fixup mimetype
+            if mimetype and self.tempExtFile.content_type != mimetype:
+                self.tempExtFile.content_type = mimetype
+            # Store
+            if not table_store:
+                datamodel[field_id] = file
+        elif datamodel[field_id] is not None:
+            # Change filename
+            if datamodel[field_id].title != filename:
+                datamodel[field_id].title = filename
+
+        return True
+
+
+InitializeClass(ExtFileWidget)
+
+widgetRegistry.register(ExtFileWidget)
+###)
+
 
 ###########
Index: WAeUP_SRP/trunk/profiles/default/applicants_catalog.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/applicants_catalog.xml	(revision 2097)
+++ WAeUP_SRP/trunk/profiles/default/applicants_catalog.xml	(revision 2098)
@@ -36,21 +36,6 @@
   <indexed_attr value="status"/>
  </index>
- <index name="registration_date" meta_type="DateIndex">
-  <indexed_attr value="status"/>
- </index>
- <index name="firstname" meta_type="TextIndex">
-  <indexed_attr value="firstname"/>
- </index>
  <index name="lastname" meta_type="TextIndex">
   <indexed_attr value="lastname"/>
  </index>
- <index name="faculty" meta_type="FieldIndex">
-  <indexed_attr value="faculty"/>
- </index>
- <index name="department" meta_type="FieldIndex">
-  <indexed_attr value="department"/>
- </index>
- <index name="course" meta_type="FieldIndex">
-  <indexed_attr value="course"/>
- </index>
 </object>
Index: WAeUP_SRP/trunk/profiles/default/layouts/application.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/layouts/application.xml	(revision 2097)
+++ WAeUP_SRP/trunk/profiles/default/layouts/application.xml	(revision 2098)
@@ -2,476 +2,596 @@
 <?xml-stylesheet type="text/xsl" href="layout.xsl"?>
 <object name="application" meta_type="CPS Layout">
- <property name="layout_create_method">layout_enter_access_code</property>
- <property name="layout_edit_method"></property>
- <property name="layout_view_method"></property>
- <property name="style_prefix">layout_application_</property>
- <property name="flexible_widgets"/>
- <property name="validate_values_expr"></property>
- <widget name="course1" meta_type="String Widget">
-  <property name="title">Course</property>
-  <property name="fields">
-   <element value="course1"/>
-  </property>
-  <property name="label">Course 1</property>
-  <property name="label_edit">Course 1</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="course3" meta_type="String Widget">
-  <property name="title">Course 3</property>
-  <property name="fields">
-   <element value="course3"/>
-  </property>
-  <property name="label">Course 3</property>
-  <property name="label_edit">Course 3</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="course2" meta_type="String Widget">
-  <property name="title">Course 2</property>
-  <property name="fields">
-   <element value="course2"/>
-  </property>
-  <property name="label">Course 2</property>
-  <property name="label_edit">Course 2</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="date_of_birth" meta_type="Date Widget">
-  <property name="title">Date of Birth</property>
-  <property name="fields">
-   <element value="date_of_birth"/>
-  </property>
-  <property name="label">Date of Birth</property>
-  <property name="label_edit">Date of Birth</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
- <property name="hidden_layout_modes">
-  <element value="edit"/>
- </property>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="department" meta_type="String Widget">
-  <property name="title">Department</property>
-  <property name="fields">
-   <element value="department"/>
-  </property>
-  <property name="label">Department</property>
-  <property name="label_edit">Department</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="email" meta_type="String Widget">
-  <property name="title">Email</property>
-  <property name="fields">
-   <element value="email"/>
-  </property>
-  <property name="label">Email</property>
-  <property name="label_edit">Email</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="entry_mode" meta_type="String Widget">
-  <property name="title">Entry Mode</property>
-  <property name="fields">
-   <element value="entry_mode"/>
-  </property>
-  <property name="label">Entry Mode</property>
-  <property name="label_edit">Entry Mode</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="faculty" meta_type="String Widget">
-  <property name="title">Faculty</property>
-  <property name="fields">
-   <element value="faculty"/>
-  </property>
-  <property name="label">Faculty</property>
-  <property name="label_edit">Faculty</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="firstname" meta_type="String Widget">
-  <property name="title">Firstname</property>
-  <property name="fields">
-   <element value="firstname"/>
-  </property>
-  <property name="label">Firstname</property>
-  <property name="label_edit">Firstname</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="agregate" meta_type="Int Widget">
-  <property name="title">JAMB Agregate Score</property>
-  <property name="fields">
-   <element value="agregate"/>
-  </property>
-  <property name="label">JAMB Agregate Score</property>
-  <property name="label_edit">JAMB Agregate Score</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="eng_score" meta_type="Int Widget">
-  <property name="title">English Score</property>
-  <property name="fields">
-   <element value="eng_score"/>
-  </property>
-  <property name="label">English Score</property>
-  <property name="label_edit">English Score</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="subj1" meta_type="String Widget">
-  <property name="title">Subject 1</property>
-  <property name="fields">
-   <element value="subj1"/>
-  </property>
-  <property name="label">Subject 1</property>
-  <property name="label_edit">Subject 1</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="subj1score" meta_type="Int Widget">
-  <property name="title">Subject 1 Score</property>
-  <property name="fields">
-   <element value="subj1score"/>
-  </property>
-  <property name="label">Subject 1 Score</property>
-  <property name="label_edit">Subject 1 Score</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="subj2" meta_type="String Widget">
-  <property name="title">Subject 2</property>
-  <property name="fields">
-   <element value="subj2"/>
-  </property>
-  <property name="label">Subject 2</property>
-  <property name="label_edit">Subject 2</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="subj2score" meta_type="Int Widget">
-  <property name="title">Subject 2 Score</property>
-  <property name="fields">
-   <element value="subj2score"/>
-  </property>
-  <property name="label">Subject 2 Score</property>
-  <property name="label_edit">Subject 2 Score</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="subj3" meta_type="String Widget">
-  <property name="title">Subject 3</property>
-  <property name="fields">
-   <element value="subj3"/>
-  </property>
-  <property name="label">Subject 3</property>
-  <property name="label_edit">Subject 3</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="subj3score" meta_type="Int Widget">
-  <property name="title">Subject 3 Score</property>
-  <property name="fields">
-   <element value="subj3score"/>
-  </property>
-  <property name="label">Subject 3 Score</property>
-  <property name="label_edit">Subject 3 Score</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="lastname" meta_type="String Widget">
-  <property name="title">Lastname</property>
-  <property name="fields">
-   <element value="lastname"/>
-  </property>
-  <property name="label">Lastname</property>
-  <property name="label_edit">Lastname</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="lga" meta_type="WAeUP LGA Widget">
-  <property name="title">LGA</property>
-  <property name="fields">
-   <element value="lga"/>
-  </property>
-  <property name="label">LGA</property>
-  <property name="label_edit">LGA</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="middlenames" meta_type="String Widget">
-  <property name="title">Middlenames</property>
-  <property name="fields">
-   <element value="middlenames"/>
-  </property>
-  <property name="label">Middlenames</property>
-  <property name="label_edit">Middlenames</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="phone" meta_type="String Widget">
-  <property name="title">Phone</property>
-  <property name="fields">
-   <element value="phone"/>
-  </property>
-  <property name="label">Phone</property>
-  <property name="label_edit">Phone</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="pin" meta_type="Pume Pin Widget">
-  <property name="title">PIN</property>
-  <property name="fields">
-   <element value="pin"/>
-  </property>
-  <property name="label">PIN</property>
-  <property name="label_edit">PIN</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
- <property name="hidden_layout_modes">
-  <element value="edit"/>
- </property>
-  <property name="hidden_readonly_layout_modes"/>
-  <property name="prefix">APP</property>
-  <property name="reference">reg_no</property>
- </widget>
- <widget name="registration_date" meta_type="Date Widget">
-  <property name="title">Registration Date</property>
-  <property name="fields">
-   <element value="registration_date"/>
-  </property>
-  <property name="label">Registration Date</property>
-  <property name="label_edit">Registration Date</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="test_date" meta_type="Date Widget">
-  <property name="title">Test Date</property>
-  <property name="fields">
-   <element value="test_date"/>
-  </property>
-  <property name="label">Test Date</property>
-  <property name="label_edit">Test Date</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="reg_no" meta_type="JambRegNo Widget">
-  <property name="title">JAMB Registration Number</property>
-  <property name="fields">
-   <element value="reg_no"/>
-  </property>
-  <property name="label">JAMB Registration Number</property>
-  <property name="label_edit">JAMB Registration Number</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
-  <property name="display_width">13</property>
-  <property name="size_max">13</property>
-  <property name="reference">reg_no</property>
-  <property name="catalog">applicants_catalog</property>
- </widget>
- <widget name="score" meta_type="Int Widget">
-  <property name="title">Score</property>
-  <property name="fields">
-   <element value="score"/>
-  </property>
-  <property name="label">Score</property>
-  <property name="label_edit">Score</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="sex" meta_type="WAeUP Sex Widget">
-  <property name="title">Sex</property>
-  <property name="fields">
-   <element value="sex"/>
-  </property>
-  <property name="label">Score</property>
-  <property name="label_edit">Score</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="state" meta_type="WAeUP LGA Widget">
-  <property name="title">State</property>
-  <property name="fields">
-   <element value="lga"/>
-  </property>
-  <property name="label">State</property>
-  <property name="label_edit">State</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="status" meta_type="String Widget">
-  <property name="title">Status</property>
-  <property name="fields">
-   <element value="status"/>
-  </property>
-  <property name="label">Status</property>
-  <property name="label_edit">Status</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
- <widget name="verdict" meta_type="WAeUP Verdict Widget">
-  <property name="title">Verdict</property>
-  <property name="fields">
-   <element value="status"/>
-  </property>
-  <property name="label">Verdict</property>
-  <property name="label_edit">Verdict</property>
-  <property name="description"></property>
-  <property name="help"></property>
-  <property name="is_i18n">False</property>
-  <property name="widget_mode_expr"></property>
-  <property name="readonly_layout_modes"/>
-  <property name="hidden_layout_modes"/>
-  <property name="hidden_readonly_layout_modes"/>
- </widget>
+  <property name="layout_create_method"></property>
+  <property name="layout_edit_method"></property>
+  <property name="layout_view_method"></property>
+  <property name="style_prefix">layout_apply_pume_</property>
+  <property name="flexible_widgets"/>
+  <property name="validate_values_expr"></property>
+  <widget name="course1" meta_type="String Widget">
+    <property name="title">Course</property>
+    <property name="fields">
+      <element value="course1"/>
+    </property>
+    <property name="label">Course 1</property>
+    <property name="label_edit">Course 1</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="course3" meta_type="String Widget">
+    <property name="title">Course 3</property>
+    <property name="fields">
+      <element value="course3"/>
+    </property>
+    <property name="label">Course 3</property>
+    <property name="label_edit">Course 3</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="course2" meta_type="String Widget">
+    <property name="title">Course 2</property>
+    <property name="fields">
+      <element value="course2"/>
+    </property>
+    <property name="label">Course 2</property>
+    <property name="label_edit">Course 2</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="date_of_birth" meta_type="DateTime Widget">
+    <property name="title">Date of Birth</property>
+    <property name="fields">
+      <element value="date_of_birth"/>
+    </property>
+    <property name="label">Date of Birth</property>
+    <property name="label_edit">Date of Birth</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="department" meta_type="String Widget">
+    <property name="title">Department</property>
+    <property name="fields">
+      <element value="department"/>
+    </property>
+    <property name="label">Department</property>
+    <property name="label_edit">Department</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="email" meta_type="Email Widget">
+    <property name="title">Email</property>
+    <property name="fields">
+      <element value="email"/>
+    </property>
+    <property name="label">Email</property>
+    <property name="label_edit">Email</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="entry_mode" meta_type="String Widget">
+    <property name="title">Entry Mode</property>
+    <property name="fields">
+      <element value="entry_mode"/>
+    </property>
+    <property name="label">Entry Mode</property>
+    <property name="label_edit">Entry Mode</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="faculty" meta_type="String Widget">
+    <property name="title">Faculty</property>
+    <property name="fields">
+      <element value="faculty"/>
+    </property>
+    <property name="label">Faculty</property>
+    <property name="label_edit">Faculty</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="firstname" meta_type="String Widget">
+    <property name="title">Firstname</property>
+    <property name="fields">
+      <element value="firstname"/>
+    </property>
+    <property name="label">Firstname</property>
+    <property name="label_edit">Firstname</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="agregate" meta_type="Int Widget">
+    <property name="title">JAMB Agregate Score</property>
+    <property name="fields">
+      <element value="agregate"/>
+    </property>
+    <property name="label">JAMB Agregate Score</property>
+    <property name="label_edit">JAMB Agregate Score</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="eng_score" meta_type="Int Widget">
+    <property name="title">English Score</property>
+    <property name="fields">
+      <element value="eng_score"/>
+    </property>
+    <property name="label">English: </property>
+    <property name="label_edit">English:</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="subj1" meta_type="Select Widget">
+    <property name="title">Subject 1</property>
+    <property name="fields">
+      <element value="subj1"/>
+    </property>
+    <property name="label"></property>
+    <property name="label_edit"></property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+    <property name="vocabulary">jamb_subjects</property>
+  </widget>
+  <widget name="subj1score" meta_type="Int Widget">
+    <property name="title">Subject 1 Score</property>
+    <property name="fields">
+      <element value="subj1score"/>
+    </property>
+    <property name="label"> : </property>
+    <property name="label_edit"> : </property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="subj2" meta_type="Select Widget">
+    <property name="title">Subject 2</property>
+    <property name="fields">
+      <element value="subj2"/>
+    </property>
+    <property name="label"></property>
+    <property name="label_edit"></property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+    <property name="vocabulary">jamb_subjects</property>
+  </widget>
+  <widget name="subj2score" meta_type="Int Widget">
+    <property name="title">Subject 2 Score</property>
+    <property name="fields">
+      <element value="subj2score"/>
+    </property>
+    <property name="label"> : </property>
+    <property name="label_edit"> : </property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="subj3" meta_type="Select Widget">
+    <property name="title">Subject 3</property>
+    <property name="fields">
+      <element value="subj3"/>
+    </property>
+    <property name="label"></property>
+    <property name="label_edit"></property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="vocabulary">jamb_subjects</property>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="subj3score" meta_type="Int Widget">
+    <property name="title">Subject 3 Score</property>
+    <property name="fields">
+      <element value="subj3score"/>
+    </property>
+    <property name="label"> : </property>
+    <property name="label_edit"> : </property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="lastname" meta_type="String Widget">
+    <property name="title">Lastname</property>
+    <property name="fields">
+      <element value="lastname"/>
+    </property>
+    <property name="label">Lastname</property>
+    <property name="label_edit">Lastname</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="lga" meta_type="WAeUP LGA Widget">
+    <property name="title">LGA</property>
+    <property name="fields">
+      <element value="lga"/>
+    </property>
+    <property name="label">LGA</property>
+    <property name="label_edit">LGA</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="middlenames" meta_type="String Widget">
+    <property name="title">Middlenames</property>
+    <property name="fields">
+      <element value="middlenames"/>
+    </property>
+    <property name="label">Middlenames</property>
+    <property name="label_edit">Middlenames</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="passport" meta_type="Ext File Widget">
+    <property name="title">Passport</property>
+    <property name="fields">
+      <element value="passport"/>
+    </property>
+    <property name="is_required">True</property>
+    <property name="label">Passport</property>
+    <property name="label_edit">Passport</property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="size_max">50000</property>
+    <property name="display_external_editor">False</property>
+  </widget>
+  <widget name="phone" meta_type="String Widget">
+    <property name="title">Phone</property>
+    <property name="fields">
+      <element value="phone"/>
+    </property>
+    <property name="label">Phone</property>
+    <property name="label_edit">Phone</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes">
+      <element value="create"/>
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="pin" meta_type="Pume Pin Widget">
+    <property name="title">PIN</property>
+    <property name="fields">
+      <element value="pin"/>
+    </property>
+    <property name="label">PIN</property>
+    <property name="label_edit">PIN</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes">
+    </property>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+    <property name="prefix">APP</property>
+    <property name="reference">reg_no</property>
+  </widget>
+  <widget name="registration_date" meta_type="DateTime Widget">
+    <property name="title">Registration Date</property>
+    <property name="fields">
+      <element value="registration_date"/>
+    </property>
+    <property name="label">Registration Date</property>
+    <property name="label_edit">Registration Date</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="testdate" meta_type="DateTime Widget">
+    <property name="title">Test Date</property>
+    <property name="fields">
+      <element value="testdate"/>
+    </property>
+    <property name="label">Test Date</property>
+    <property name="label_edit">Test Date</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="reg_no" meta_type="JambRegNo Widget">
+    <property name="title">JAMB Registration Number</property>
+    <property name="fields">
+      <element value="reg_no"/>
+    </property>
+    <property name="label">JAMB Registration Number</property>
+    <property name="label_edit">JAMB Registration Number</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes">
+      <element value="edit"/>
+    </property>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+    <property name="display_width">13</property>
+    <property name="size_max">13</property>
+    <property name="reference">reg_no</property>
+    <property name="catalog">applicants_catalog</property>
+  </widget>
+  <widget name="score" meta_type="Int Widget">
+    <property name="title">Score</property>
+    <property name="fields">
+      <element value="score"/>
+    </property>
+    <property name="label">Score</property>
+    <property name="label_edit">Score</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+  </widget>
+  <widget name="sex" meta_type="WAeUP Sex Widget">
+    <property name="title">Sex</property>
+    <property name="fields">
+      <element value="sex"/>
+    </property>
+    <property name="label">Score</property>
+    <property name="label_edit">Score</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="state" meta_type="WAeUP LGA Widget">
+    <property name="title">State</property>
+    <property name="fields">
+      <element value="lga"/>
+    </property>
+    <property name="label">State</property>
+    <property name="label_edit">State</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="status" meta_type="String Widget">
+    <property name="title">Status</property>
+    <property name="fields">
+      <element value="status"/>
+    </property>
+    <property name="label">Status</property>
+    <property name="label_edit">Status</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
+  <widget name="verdict" meta_type="WAeUP Verdict Widget">
+    <property name="title">Verdict</property>
+    <property name="fields">
+      <element value="status"/>
+    </property>
+    <property name="label">Verdict</property>
+    <property name="label_edit">Verdict</property>
+    <property name="description"></property>
+    <property name="help"></property>
+    <property name="is_i18n">False</property>
+    <property name="widget_mode_expr"></property>
+    <property name="readonly_layout_modes"/>
+    <property name="hidden_layout_modes"/>
+    <property name="hidden_readonly_layout_modes"/>
+    <property name="css_class_expr">string:row</property>
+  </widget>
  <table>
   <row>
-   <cell name="reg_no"/>
-  </row>
-  <row>
-   <cell name="pin"/>
+   <cell name="reg_no" ncols="2"/>
+  </row>
+  <row>
+   <cell name="pin" ncols="2"/>
+  </row>
+  <row>
+   <cell name="lastname" ncols="2"/>
+  </row>
+  <row>
+   <cell name="email" ncols="2"/>
+  </row>
+  <row>
+   <cell name="phone" ncols="2"/>
+  </row>
+  <row>
+   <cell name="eng_score" ncols="2"/>
+  </row>
+  <row>
+   <cell name="subj1"/>
+   <cell name="subj1score"/>
+  </row>
+  <row>
+   <cell name="subj2"/>
+   <cell name="subj2score"/>
+  </row>
+  <row>
+   <cell name="subj3"/>
+   <cell name="subj3score"/>
+  </row>
+  <row>
+   <cell name="agregate" ncols="2"/>
   </row>
  </table>
Index: WAeUP_SRP/trunk/profiles/default/vocabularies.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/vocabularies.xml	(revision 2097)
+++ WAeUP_SRP/trunk/profiles/default/vocabularies.xml	(revision 2098)
@@ -8,4 +8,5 @@
  <object name="csv_names" meta_type="CPS Method Vocabulary"/>
  <object name="entry_modes" meta_type="CPS Vocabulary"/>
+ <object name="jamb_subjects" meta_type="CPS Vocabulary"/>
  <object name="exam_subjects" meta_type="CPS Vocabulary"/>
  <object name="exam_types" meta_type="CPS Vocabulary"/>
Index: WAeUP_SRP/trunk/profiles/default/vocabularies/jamb_subjects.xml
===================================================================
--- WAeUP_SRP/trunk/profiles/default/vocabularies/jamb_subjects.xml	(revision 2098)
+++ WAeUP_SRP/trunk/profiles/default/vocabularies/jamb_subjects.xml	(revision 2098)
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="vocabulary.xsl"?>
+<object name="high_grade" meta_type="CPS Vocabulary">
+  <property name="title"></property>
+  <property name="title_msgid"></property>
+  <property name="description"></property>
+
+  <item key="" msgid="">None</item>
+  <item key="AGR" msgid="">Agriculture</item>
+  <item key="ART" msgid="">Fine Arts</item>
+  <item key="BIO" msgid="">Biology</item>
+  <item key="CHE" msgid="">Chemistry</item>
+  <item key="COM" msgid="">Commerce</item>
+  <item key="CRK" msgid="">Christian Rel. Knowledge</item>
+  <item key="ECO" msgid="">Economics</item>
+  <item key="FRE" msgid="">French</item>
+  <item key="GEO" msgid="">Geographie</item>
+  <item key="GOV" msgid="">Goverment</item>
+  <item key="HIS" msgid="">History</item>
+  <item key="IRK" msgid="">Islamic Rel. Knowledge</item>
+  <item key="MAT" msgid="">Mathematics</item>
+  <item key="IGB" msgid="">Igbo Language</item>
+  <item key="H/E" msgid="">Home Economics</item>
+  <item key="LIT" msgid="">Literature In English</item>
+  <item key="MUS" msgid="">Musik</item>
+  <item key="PHY" msgid="">Physics</item>
+  <item key="YOR" msgid="">Yoruba Language</item>
+  <item key="P/A" msgid="">Principles of Accounting</item>
+</object>
Index: WAeUP_SRP/trunk/skins/waeup_custom/default.css.dtml
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_custom/default.css.dtml	(revision 2098)
+++ WAeUP_SRP/trunk/skins/waeup_custom/default.css.dtml	(revision 2098)
@@ -0,0 +1,1063 @@
+<dtml-comment>
+CSS directives conforming to the CSS 2.1 spec.
+Those CSS directives are suppported by user agents such as Mozilla/Firefox, MSIE6, MSIE5.x, etc.
+$Id: default.css.dtml 47552 2006-07-28 17:33:14Z gracinet $
+</dtml-comment>
+
+<dtml-let last_modified="_.DateTime()-14" expires="_.DateTime()+1" >
+<dtml-call "REQUEST.RESPONSE.setHeader( 'Content-Type', 'text/css' )">
+<dtml-call "REQUEST.RESPONSE.setHeader( 'Last-Modified', last_modified.toZone('GMT').rfc822() )">
+<dtml-call "REQUEST.RESPONSE.setHeader( 'Cache-Control', 'max-age=36000, must-revalidate' )">
+<dtml-call "REQUEST.RESPONSE.setHeader( 'Expires', expires.toZone('GMT').rfc822() )" >
+</dtml-let>
+
+<dtml-with stylesheet_properties>
+
+<dtml-comment>
+BASIC ELEMENTS ------------------------------
+</dtml-comment>
+
+body {
+font: <dtml-var mainFont>;
+background: <dtml-var mainBackground>;
+color: <dtml-var mainFontColor>;
+margin: 0;
+padding: 0;
+}
+
+body .popup {
+font: <dtml-var mainFont>;
+}
+
+a {
+text-decoration: none;
+color: <dtml-var mainLinkColor>;
+background-color: transparent;
+}
+
+a.strong {
+font-weight: bold;
+}
+
+img {
+border: 0;
+vertical-align: middle;
+}
+
+p {
+margin: 0.5em 0 1em 0;
+line-height: 133%;
+}
+p a {
+text-decoration: underline;
+}
+p a:visited {
+color: <dtml-var contentLinkVisitedColor>;
+background-color: transparent;
+}
+p a:active {
+color: <dtml-var contentLinkActiveColor>;
+background-color: transparent;
+}
+a:hover {
+text-decoration: none;
+}
+p img {
+border: <dtml-var contentImageBorder>;
+margin: 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+color: <dtml-var headingFontColor>;
+background-color: transparent;
+font: <dtml-var headingFont>;
+font-weight: bold;
+margin: 0;
+padding-top: 0.5em;
+}
+h1 {
+font-size: <dtml-var headingSize1>;
+margin-top: 0.5em;
+margin-bottom: 0.5em;
+}
+h2 {
+font-size: <dtml-var headingSize2>;
+margin-bottom: 1em;
+}
+h3 {
+font-size: <dtml-var headingSize3>;
+}
+h4 {
+font-size: <dtml-var headingSize4>;
+}
+h5 {
+font-size: <dtml-var headingSize5>;
+}
+h6 {
+font-size: <dtml-var headingSize6>;
+}
+
+ol, ul {
+padding: 0;
+margin: 0;
+line-height: 133%;
+}
+ul a, ol a {
+text-decoration: underline;
+}
+
+dt {
+font-weight: bold;
+margin: 0.5em 0em 0.5em 0em;
+}
+dt a {
+text-decoration: none;
+}
+
+dd {
+line-height: 133%;
+margin-bottom: 1em;
+}
+
+legend {
+background: <dtml-var mainBackground>;
+padding: 0.5em 0em 0.5em 0em;
+}
+
+textarea {
+color: <dtml-var mainFontColor>;
+background-color: white;
+font: <dtml-var inputFont>;
+}
+input {
+font: <dtml-var inputFont>;
+color: <dtml-var mainFontColor>;
+background-color: white;
+vertical-align: middle;
+}
+select {
+font: <dtml-var inputFont>;
+vertical-align: top;
+}
+abbr, acronym, .explain {
+color: <dtml-var mainFontColor>;
+background-color: transparent;
+}
+q, blockquote {
+font-style: italic;
+font-size: 100%;
+}
+code {
+font-size: 100%;
+color: <dtml-var mainFontColor>;
+background-color: <dtml-var preBackground>;
+}
+pre {
+font-size: 100%;
+padding: 1em;
+border: <dtml-var preBorder>;
+color: <dtml-var mainFontColor>;
+background-color: <dtml-var preBackground>;
+overflow: auto;
+}
+
+<dtml-comment>
+Classes ------------------------------
+</dtml-comment>
+
+#idioma p {
+margin-top: 0;
+}
+
+.logo {
+margin: <dtml-var logoMargin>;
+padding: <dtml-var logoPadding>;
+}
+
+.note {
+font-size: smaller;
+}
+
+.even {
+background-color: <dtml-var boxEvenBackground>;
+}
+
+.odd {
+background-color: <dtml-var boxOddBackground>;
+}
+
+.pending {
+font-weight: bold;
+color: #ffa500;
+}
+
+.work {
+font-weight: bold;
+color: blue;
+}
+
+.draft {
+font-weight: bold;
+color: #5555ff;
+}
+
+.published {
+font-weight: bold;
+color: #22a522;
+}
+
+.deferred {
+font-weight: bold;
+color: #ff6600;
+}
+
+.expired {
+font-weight: bold;
+color: #ff0033;
+}
+
+.locked {
+border: 1px solid #ff6600;
+color: #ff6600;
+padding-left: 0.2em;
+padding-right: 0.2em;
+}
+
+.url {
+color: <dtml-var urlFontColor>
+}
+
+input.standalone, button.standalone {
+background: <dtml-var standaloneButtonBackground>;
+background-image: none;
+color: <dtml-var standaloneButtonFontColor>;
+border: <dtml-var standaloneButtonBorder>;
+}
+
+input.context {
+background: <dtml-var contextButtonBackground>;
+background-image: none;
+color: <dtml-var contextButtonFontColor>;
+}
+
+input.destructive {
+background: <dtml-var destructiveButtonBackground>;
+background-image: none;
+color: <dtml-var destructiveButtonFontColor>;
+}
+
+button {
+font: <dtml-var inputFont>;
+background: <dtml-var standaloneButtonBackground>;
+color: <dtml-var standaloneButtonFontColor>;
+background-image: none;
+vertical-align: middle;
+}
+
+<dtml-comment>
+DIVs ------------------------------
+</dtml-comment>
+
+div.batchLayout {
+text-align: right;
+background-color: <dtml-var boxEvenBackground>;
+}
+
+div.pageNavigationLayout {
+text-align: center;
+background-color: <dtml-var boxEvenBackground>;
+}
+
+.contact {
+text-align: center;
+margin: 0;
+padding: 1px 0px 1px 0px;
+}
+
+div.message {
+background: <dtml-var messageBackground>;
+color: <dtml-var mainFontColor>;
+font: <dtml-var messageFont>;
+margin: 1em 0;
+padding: 0.5em 1em;
+vertical-align: middle;
+}
+
+div.message a {
+background: <dtml-var messageBackground>;
+color: <dtml-var mainFontColor>;
+text-decoration: underline;
+}
+
+div.description {
+font: <dtml-var descriptionFont>;
+display: block;
+margin-bottom: 0.5em;
+line-height: 133%;
+}
+
+div.documentActions {
+float: right;
+margin-top: 1em;
+}
+
+div.documentActions li {
+display: inline;
+}
+
+div.searchBox {
+float: right;
+text-align: right;
+padding: <dtml-var searchPadding>;
+margin: <dtml-var searchMargin>;
+clear: right;
+background-color: transparent;
+color: <dtml-var searchFontColor>;
+text-transform: <dtml-var textTransform>;
+width: 40%;
+}
+
+div.headerActions {
+float: right;
+text-align: right;
+margin-top: 1em;
+margin-right: 1em;
+margin-bottom: 4px;
+}
+
+div.headerActions li {
+display: inline;
+}
+
+div.pathBar {
+padding: 1px 1em 1px 1em;
+text-transform: <dtml-var textTransform>;
+}
+
+div.row {
+clear: both;
+}
+
+div.label {
+padding-right: 2em;
+font-weight: bold;
+float: left;
+}
+
+div.field {
+padding: 0px 0px 0px 0px;
+float: left;
+text-align: left;
+}
+
+span.legend {
+font-weight: bold;
+}
+
+div.popupImg {
+padding: 10px;
+text-align: center;
+}
+
+.hidden {
+display: none;
+}
+
+.hiddenItem {
+background-color: <dtml-var boxEvenBackground>;
+}
+
+<dtml-comment>
+Documents language selection
+</dtml-comment>
+
+span.selectedLang {
+background: #003a6b;
+color: #ffffff;
+font-weight: bold;
+padding-left: 0.5em;
+padding-right: 0.5em;
+}
+a.availableLang {
+text-decoration: underline;
+}
+a.availableLang:hover {
+text-decoration: none;
+}
+
+<dtml-comment>
+Accessibility statement and usage
+</dtml-comment>
+
+div.accesskeys, div.accesskeysUsage {
+border: 1px solid #999999;
+background-color: #dddddd;
+padding: 1em;
+margin: 0.5em 0 2em 0;
+}
+
+<dtml-comment>
+Contact info and conformance statement
+</dtml-comment>
+
+.contactInfo li {
+display: inline;
+margin: 1em;
+}
+
+.conformanceStatement {
+text-align: center;
+}
+
+.conformanceStatement li {
+display: inline;
+}
+
+.conformanceStatement img {
+margin: 1em;
+}
+
+<dtml-comment>
+CMF Calendar
+</dtml-comment>
+
+.CalendarArrow {
+font-weight: bold;
+text-decoration: none;
+color: #000000;
+}
+
+.CalendarTitle {
+font-weight: bold;
+text-decoration: none;
+text-align: center;
+color: #000000;
+}
+
+p.help {
+font-style: italic;
+}
+
+table.calendar td {
+white-space: nowrap;
+background-color: white;
+width: 1.5em;
+}
+
+table.calendar a {
+text-decoration: none;
+color: black;
+}
+
+table.calendar td.event {
+background-color: <dtml-var boxEvenBackground>;
+text-decoration: none;
+}
+
+table.calendar td.todayevent {
+background-color: <dtml-var boxEvenBackground>;
+}
+
+table.calendar td.weekdays {
+background-color: <dtml-var boxEvenBackground>;
+}
+
+table.calendar th {
+background-color: <dtml-var boxEvenBackground>;
+white-space: nowrap;
+}
+
+table.localRoleForm th {
+text-align: left;
+}
+
+span.highlightedSearchTerm {
+background-color: #ffff00;
+}
+
+span.searchFor {
+font-weight: bold;
+}
+
+/* hack for IE6 bugs */
+/* Hides from IE5-mac \*/
+* html .group {height: 1%}
+* html div.box {height: 1%}
+* html div.box .content {height: 1%}
+* html div.document {height: 1%}
+/* End hide from IE-mac */
+
+.netscape4 {
+display: none;
+}
+
+table {
+font-size: 100%;
+}
+
+hr {
+height: 1px;
+color: <dtml-var mainTabBorderColorSelected>;
+background-color: transparent;
+}
+
+h1, h2 {
+border-bottom: 1px solid <dtml-var mainTabBorderColor>;
+}
+
+form {
+border: none;
+}
+
+textarea {
+border: <dtml-var inputBorder>;
+padding: 0.1em;
+}
+input {
+border: <dtml-var inputBorder>;
+margin-bottom: 1px; /* IE bug fix */
+padding: 0.1em;
+}
+select {
+font: <dtml-var inputFont>;
+border: <dtml-var inputBorder>;
+vertical-align: top;
+}
+
+abbr, acronym, .explain {
+border-bottom: 1px dotted <dtml-var mainFontColor>;
+cursor: help;
+}
+
+ol, ul {
+padding-left: 3em;
+margin: 0px;
+}
+
+.content li, #content li {
+padding: 0em 0em 0.4em 0em;
+}
+
+ul.fileChoice {
+padding-left: 0;
+list-style-type: None;
+}
+
+button {
+background: <dtml-var buttonBackground>;
+border: <dtml-var buttonBorder>;
+margin: 0.2em;
+padding: 0.1em;
+font: <dtml-var inputFont>;
+}
+
+button:hover {
+background: <dtml-var buttonBackgroundHover>;
+}
+
+input.standalone, button.standalone {
+background: <dtml-var standaloneButtonBackground>;
+cursor: pointer;
+font: <dtml-var inputFont>;
+font-weight: <dtml-var buttonWeight>;
+padding: <dtml-var standaloneButtonPadding>;
+text-transform: <dtml-var textTransform>;
+}
+
+input.standalone:hover, button.standalone:hover {
+background: <dtml-var standaloneButtonBackgroundHover>;
+}
+
+input.context {
+background: <dtml-var contextButtonBackground>;
+cursor: pointer;
+font: <dtml-var inputFont>;
+font-weight: <dtml-var buttonWeight>;
+padding: <dtml-var contextButtonPadding>;
+text-transform: <dtml-var textTransform>;
+border: <dtml-var contextButtonBorder>;
+}
+
+input.context:hover {
+background: <dtml-var contextButtonBackgroundHover>;
+}
+
+input.destructive {
+background: <dtml-var destructiveButtonBackground>;
+border: <dtml-var destructiveButtonBorder>;
+cursor: pointer;
+font: <dtml-var inputFont>;
+font-weight: <dtml-var buttonWeight>;
+padding: <dtml-var destructiveButtonPadding>;
+text-transform: <dtml-var textTransform>;
+}
+
+input.destructive:hover {
+background: <dtml-var destructiveButtonBackgroundHover>;
+border: <dtml-var destructiveButtonBorderHover>;
+}
+
+input.noborder {
+background: transparent;
+border: <dtml-var noBorder>;
+margin: 0;
+}
+
+input.searchButton {
+font-size: 100% ! important;
+margin-bottom: 1px ! important;
+}
+
+input.moveUp {
+background: <dtml-var moveUpButtonBackground>;
+}
+input.moveDown {
+background: <dtml-var moveDownButtonBackground>;
+}
+input.moveTop {
+background: <dtml-var moveTopButtonBackground>;
+}
+input.moveBottom {
+background: <dtml-var moveBottomButtonBackground>;
+}
+
+<dtml-comment>
+Forms ------------------------------
+</dtml-comment>
+
+form {
+margin: 0px;
+}
+
+form.workflow {
+padding:0px 0px 10px 0px;
+}
+
+form.workflow dl {
+font-weight: bold;
+}
+
+form.workflow dd {
+margin-left: 0px;
+}
+
+<dtml-comment>
+Generic table definitions
+</dtml-comment>
+
+table.columns td.left {
+background: <dtml-var columnsLeftBackground>;
+}
+table.columns td.right {
+background: <dtml-var columnsRightBackground>;
+}
+
+table.listing {
+width: 100%;
+}
+
+table.listing caption {
+font-weight: bold;
+}
+
+table.listing td {
+padding: 0.4em;
+}
+
+table.listing thead tr th {
+text-align: center;
+}
+
+table.listing thead td {
+background-color: <dtml-var listingHeaderBackground>;
+color: <dtml-var listingHeaderColor>;
+text-align: center;
+font-weight: bold;
+}
+
+table.listing tbody td {
+background-color: <dtml-var listingCellBackground>;
+color: <dtml-var listingCellColor>;
+}
+
+table.listing tbody tr.odd td {
+background-color: <dtml-var listingCellOddBackground>;
+color: <dtml-var listingCellOddColor>;
+}
+
+table.listing tbody tr.even td {
+background-color: <dtml-var listingCellEvenBackground>;
+color: <dtml-var listingCellEvenColor>;
+}
+
+table.listing .action {
+font-weight: bold;
+text-align: left;
+}
+
+<dtml-comment>
+Specific table definitions
+</dtml-comment>
+
+form#loginForm {
+padding-top:20px;
+padding-bottom:20px;
+width: 30em;
+}
+table#login th {
+width: 12em;
+}
+
+table#portalConfiguration th {
+width: 18em;
+padding-bottom: 1em;
+}
+table#portalConfiguration td {
+width: 18em;
+padding-bottom: 1em;
+}
+
+table#subscriptions td {
+text-align: center;
+}
+
+table#subscriptions .action {
+text-align: left;
+}
+
+table.localRolesAssignment {
+width: 100%;
+padding: 0;
+margin: 0.4em;
+margin-bottom: 2em;
+border: 0.1em solid black;
+}
+
+table.localRolesAssignment td.assignedRole {
+text-align: center;
+}
+
+table.localRolesAssignment td.inheritedRole {
+text-align: center;
+background: <dtml-var inheritedRole>;
+}
+
+span.inheritedRole {
+background: <dtml-var inheritedRole>;
+}
+
+table.localRolesAssignment td.inheritedBlockedRole {
+text-align: center;
+background: <dtml-var inheritedBlockedRole>;
+}
+
+span.inheritedBlockedRole {
+background: <dtml-var inheritedBlockedRole>;
+}
+
+<dtml-comment>
+DIVs ------------------------------
+</dtml-comment>
+
+div.top {
+background: <dtml-var topBackground>;
+margin: <dtml-var topMargin>;
+padding: <dtml-var topPadding>;
+width: 100%;
+}
+
+.contact {
+background: <dtml-var footerBackground>;
+border-top: <dtml-var footerBorder>;
+border-bottom: <dtml-var footerBorder>;
+width: 100%;
+}
+
+div.document {
+font: <dtml-var contentFont>;
+background: <dtml-var contentBackground>;
+}
+
+div.message {
+border: <dtml-var messageBorder>;
+}
+
+div.pathBar {
+border-bottom-color: <dtml-var mainTabBorderColorSelected>;
+border-bottom-style: solid;
+border-bottom-width: 1px;
+}
+
+div.row {
+margin: 0em 0em 0.5em 0em;
+position:relative;
+}
+
+.required {
+padding-right: 0.5em;
+background: <dtml-var requiredField>;
+}
+
+.error {
+background: <dtml-var messageBackground>;
+border: <dtml-var messageBorder>;
+padding: 1em;
+margin: 0em;
+}
+
+span.legend {
+background: <dtml-var contentBackground>;
+font-size: <dtml-var legendFontSize>;
+padding: 0.5em 0em 0.5em 0em;
+position : relative;
+top: -0.8em;
+left: 0;
+}
+
+<dtml-comment>
+The "group" class is used to group together the HTML fields of a form.
+</dtml-comment>
+.group {
+margin: 0em;
+padding:10px 0px 20px 0px;
+}
+
+.comment_box {
+border: 1px solid #bcbcbc;
+margin: 1em 0 1em 1em;
+padding: 5px 10px 10px 20px;
+}
+
+.user_roles {
+margin: 1em 0 1em 0;
+padding: 0.7em 0em 0.7em 0em;
+}
+
+.header_roles {
+font-weight: bold;
+background: #b1acb2;
+}
+
+.assign_roles {
+padding-top: 0.7em;
+}
+
+table.calendar {
+border: <dtml-var boxBorder>;
+text-align: right;
+}
+
+table.calendar a:hover {
+text-decoration: none;
+}
+
+table.calendar th {
+border: none;
+font-weight: bold;
+text-align: center;
+}
+
+table.calendar td {
+width: 1.5em;
+}
+
+table.calendar td.weekdays {
+border: <dtml-var boxBorder>;
+border-style: solid none;
+text-align: center;
+}
+
+table.calendar td.event {
+font-weight: bold;
+}
+
+table.calendar td.todayevent {
+border: <dtml-var boxHighlight>;
+font-weight: bold;
+}
+
+table.calendar td.todaynoevent {
+border-collapse: collapse;
+border: <dtml-var boxHighlight>;
+}
+
+<dtml-comment>
+Tooltips
+</dtml-comment>
+
+.tooltipControl {
+color: #000000;
+background: #ffffe1;
+border: 1px solid #000000;
+
+margin-left: 1em;
+}
+
+.tooltipControl:hover {
+background: #ffffb8;
+}
+
+.tooltipArea {
+color: #000000;
+background: #ffffe1;
+border: 1px solid #000000;
+padding: 0.8em;
+font-weight: normal;
+font-size: 80%;
+text-align: left;
+
+position: inherit;
+left: -15em;
+top: 1.5em;
+width: 20em;
+
+visibility: hidden;
+display: none;
+z-index: 1000;
+}
+
+<dtml-comment>
+XXX: CPSMailBoxer definitions that should not be here but in a dedicated file
+</dtml-comment>
+
+div.mailboxerNoArchive {
+border-top: solid;
+border-width: 1px;
+}
+
+td.mailboxerMonth {
+background-color: <dtml-var boxEvenBackground>;
+text-align: center;
+}
+
+<dtml-comment>
+Books
+</dtml-comment>
+
+div.bookSummary {
+width: 100%;
+border: 1px solid black;
+padding: 0.5em;
+}
+
+div.bookSummaryNav {
+text-align: center;
+width: 100%;
+background-color: <dtml-var boxEvenBackground>;
+}
+
+li.summaryEntries {
+margin: 0.5em;
+}
+
+div.bookPageHeader {
+border-bottom: 1px solid black;
+}
+
+div.bookPageNavigation {
+}
+
+div.bookPageInfo {
+float: right;
+}
+
+<dtml-comment>
+Hide stuff by id and make it available in source
+</dtml-comment>
+
+#bylineFolder {
+clear: both;
+text-align: left;
+}
+
+#byline {
+clear: both;
+text-align: right;
+margin-top: 2em;
+}
+
+<dtml-comment>
+javascript use for block toggle
+</dtml-comment>
+
+div.hidden {
+visibility: hidden;
+display: none;
+}
+
+div.visible {
+visibility: visible;
+display: block;
+}
+
+<dtml-comment>
+Advanced search form
+</dtml-comment>
+
+#advancedSearchForm {
+font-size: 90%;
+}
+
+#advancedSearchZCText {
+text-align: right;
+}
+
+p.advancedSearchButton {
+text-align: right;
+}
+
+#advancedSearchForm fieldset {
+border: none;
+border-left: <dtml-var boxBorder>;
+border-bottom: <dtml-var boxBorder>;
+padding: 0.5em 0em 0.5em 0em;
+margin: 0.5em;
+}
+
+span.advancedSearchColumn {
+padding-left: 1em;
+float:left;
+width:12em;
+}
+
+div.drophover {
+border-bottom: 3px solid black;
+}
+
+div.drophover-in {
+background: #ffe68f;
+border: 1px solid black;
+}
+
+#ajax_psm {
+background: #ffac0b;
+color: white;
+padding: 8px;
+border: 1px solid black;
+float: right;
+font-weight: bold;
+position: absolute;
+<dtml-if "isUserAgentGecko(REQUEST)">
+-moz-border-radius: 4px;
+</dtml-if>
+}
+
+div.draggable:hover {
+background: #efefef;
+}
+
+div.more_block {
+padding-left: 10px;
+}
+
+div.batchLayout, div.pageNavigationLayout {
+color: #666666;
+margin: 0px 2px 0px 2px;
+padding: 3px 20px 3px 0px;
+}
+
+table.folderButtons {
+padding-top: 1.2em;
+}
+
+</dtml-with>
Index: WAeUP_SRP/trunk/skins/waeup_student/apply_pume.py
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/apply_pume.py	(revision 2098)
+++ WAeUP_SRP/trunk/skins/waeup_student/apply_pume.py	(revision 2098)
@@ -0,0 +1,101 @@
+## Script (Python) "apply_pume"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=REQUEST
+##title=
+##
+# $Id$
+"""
+process the Pume Application Form
+"""
+try:
+    from Products.zdb import set_trace
+except:
+    def set_trace():
+        pass
+
+import DateTime
+current = DateTime.DateTime()
+pr = context.portal_registration
+request = REQUEST
+
+#type_name = 'StudentApplication'
+#ti = context.portal_types[type_name]
+#REQUEST.set('type_name',type_name)
+create = "create" in request.keys()
+apply_pume = "apply" in request.keys()
+edit = "edit" in request.keys()
+mode = request.get('mode','')
+if not mode:
+    if apply_pume or edit:
+        mode = "edit"
+    else:
+        mode = "create"
+validate = create or edit or apply_pume
+
+lt = context.portal_layouts
+reg_no = request.get('widget__reg_no','').upper()
+if not reg_no:
+    reg_no = request.get('reg_no','').upper()
+    
+object = {}
+#set_trace()
+if reg_no:
+    brains = context.applicants_catalog(reg_no = reg_no)
+    if len(brains) == 1:
+        for field in context.applicants_catalog.schema():
+            object[field] = getattr(brains[0],field,None)
+
+res,psm,ds = lt.renderLayout(layout_id= 'application',
+                             schema_id= 'application',
+                             layout_mode = mode,
+                             context=context,
+                             mapping=validate and REQUEST,
+                             ob=object,
+                             commit = False,
+                            )
+
+if psm == 'invalid':
+    return context.apply_pume_form(rendered = res,
+                                   psm = "Please correct your input!",
+                                   #psm = "%s, %s" % (psm,ds),
+                                   mode = mode,
+                                   ds = ds,
+                                  )
+elif psm == '':
+    return context.apply_pume_form(rendered = res,
+                                   psm = None,
+                                   ds = ds,
+                                   mode = mode,
+                                  )
+elif psm == 'valid':
+    pass
+if create or edit or apply_pume:
+    data = {}
+    for field in context.applicants_catalog.schema():
+        if ds.has_key(field) and request.has_key("widget__%s" % field):
+            data[field] = ds.get(field)
+    data['reg_no'] = reg_no
+    if apply_pume:
+        data['registration_date'] = current
+        data['status'] = "submitted"
+    context.applicants_catalog.modifyRecord(**data)
+    if apply_pume:
+        if not request.has_key('confirm'):
+            return context.apply_pume_form(rendered = res,
+                                        psm = "Please confirm Passport Photograph",
+                                        #psm = "%s, %s" % (psm,ds),
+                                        mode = mode,
+                                        ds = ds,
+                                        )
+                    
+        return request.RESPONSE.redirect("%s/apply_pume?mode=view&reg_no=%s" %
+                                     (context.absolute_url(),ds.get('reg_no')))
+    elif edit or create:
+        return request.RESPONSE.redirect("%s/apply_pume?mode=edit&reg_no=%s" %
+                                     (context.absolute_url(),ds.get('reg_no')))
+
+
Index: WAeUP_SRP/trunk/skins/waeup_student/apply_pume_form.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/apply_pume_form.pt	(revision 2098)
+++ WAeUP_SRP/trunk/skins/waeup_student/apply_pume_form.pt	(revision 2098)
@@ -0,0 +1,58 @@
+<tal:block define="rendered_main options/rendered;
+           portal_status_message options/psm;
+           ds options/ds;
+           jamb options/jamb/getContent|nothing;
+           mode options/mode;
+           "
+           >
+  <metal:block define-macro="edit_form">
+    <metal:block use-macro="here/main_template/macros/master">
+      <metal:block fill-slot="main">
+        <h3>Apppply for the Post University Matriculation Examination! </h3>
+        <br />
+        <form action="" id="editForm" method="post" 
+              enctype="multipart/form-data" class="workflow"
+              tal:attributes="action string:${context/absolute_url}/apply_pume"
+              >
+          <input type="hidden" name="reg_no"
+                 tal:attributes="value ds/reg_no|nothing"
+                 tal:condition="ds/reg_no|nothing"/>
+          <div tal:replace="structure rendered_main" />
+          <div class="" tal:condition="python: mode=='edit'">
+          <input type="checkbox" class="standalone" 
+                 name="confirm"
+                 value="" 
+            />
+            I confirm that Passport Photograph uploaded on this form is a true picture of me
+          </div>
+          
+          <input type="submit" class="standalone" 
+                 name="edit"
+                 value="Edit" 
+                 tal:condition="python: mode == 'edit'" />
+          <input type="submit" class="standalone" name="apply"
+                 value="apply for Pume"
+                 tal:condition="python: mode == 'edit'"
+                 />
+          <input type="submit" 
+                 class="standalone" 
+                 name="create"
+                 value="Login for PUME Application"
+                 tal:condition="python: mode == 'create'" 
+                 />
+          </form>
+          <p>Instructions :</p>
+          <ul tal:condition="python: mode in ('create','edit')">
+            <li>Enter your JAMB Registration Number and the Application PIN above.</li> 
+            <li>Upload your passport picture.</li> 
+            <li>Apply for Pume.</li>
+          </ul>
+          <ul tal:condition="python: mode == 'view'">
+            <li>Print the Pume Acknowledgement Slip.</li>
+          </ul>
+      </metal:block>
+      <metal:block fill-slot="sub">
+      </metal:block>
+    </metal:block>
+  </metal:block>
+</tal:block>
Index: WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_create.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_create.pt	(revision 2098)
+++ WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_create.pt	(revision 2098)
@@ -0,0 +1,113 @@
+<tal:block define="global creation python:1;
+                   global formaction string:apply_admission" />
+<!-- a layout_lib macro -->
+<!-- $Id$ -->
+
+<metal:block define-macro="default_edit"
+  tal:define="layout options/layout;
+  ds options/datastructure;
+  dm ds/getDataModel;
+  creation creation|nothing;
+  metadata metadata|nothing;
+  cpsmcat nocall:here/translation_service;
+  apply request/apply_button|nothing;
+  ">
+  <table class="layoutDefault" summary="Form layout"
+         tal:condition="layout/rows">
+    <span tal:repeat="row python: layout['rows']" valign="top" >
+      <span tal:repeat="cell row">
+        <tr tal:define="widget cell/widget;
+              wid widget/getWidgetId;
+              err python:ds.getError(wid);
+              err_mapping python:ds.getErrorMapping(wid);
+              is_required python: widget.is_required and creation and ('create' not in widget.readonly_layout_modes);
+              tooltip_id python:wid + '_help';
+              widget_css_class cell/widget_css_class|nothing;
+              css_class python:test(err, 'row error','row')"
+              tal:condition="python: wid != 'passport'"
+              >
+          <div tal:attributes="class widget_css_class;
+          id python:widget.getHtmlWidgetId()+'_widget';"
+          >
+            <td>
+            <div class="label" tal:condition="widget/label_edit"
+                 tal:attributes="class python:test(is_required, 'label required','label')">
+              <label tal:content="widget/label_edit"
+                     tal:attributes="for cell/widget_input_area_id|nothing;">label</label>:
+            </div>
+            <button type="button" class="tooltipControl"
+                    tal:condition="widget/help"
+                    tal:attributes="onclick python:'toggleElementVisibility(\'%s\')' % tooltip_id;"> ? </button>
+            </td>
+            <td>
+            <span class="field">
+              <div tal:replace="structure cell/widget_rendered"/>
+            </span>
+            <div class="tooltipArea" style="visibility: hidden;"
+                 tal:condition="widget/help"
+                 tal:attributes="id tooltip_id;
+                 onclick python:'showElement(false, \'%s\')' % tooltip_id;"
+                 >
+              <tal:block tal:content="widget/help">This is the help for this field
+              </tal:block>
+            </div>
+            <tal:block condition="err">
+              <tal:block define="msg python:cpsmcat(err, mapping=err_mapping)">
+                <br /><em style="color: red"
+                          tal:content="msg">err</em>
+              </tal:block>
+            </tal:block>
+            </td>
+          </div>
+        </tr>
+      </span>
+    </span>
+    <tr tal:condition="widgets/passport|nothing" 
+        tal:define="cell widgets/passport|nothing;">
+      <tal:block tal:define="widget cell/widget;
+      wid widget/getWidgetId;
+      err python:ds.getError(wid);
+      err_mapping python:ds.getErrorMapping(wid);
+      is_required python: widget.is_required and creation and ('create' not in widget.readonly_layout_modes);
+      tooltip_id python:wid + '_help';
+      widget_css_class widget/widget_css_class|nothing;
+      css_class python:test(err, 'row error','row')"
+      >
+        <div tal:attributes="class widget_css_class;
+        id python:widget.getHtmlWidgetId()+'_widget';"
+        >
+          <td>
+            <div class="label" tal:condition="widget/label_edit"
+                 tal:attributes="class python:test(is_required, 'label required','label')">
+              <label tal:content="widget/label_edit"
+                     tal:attributes="for cell/widget_input_area_id|nothing;">label</label>:
+            </div>
+            <button type="button" class="tooltipControl"
+                    tal:condition="widget/help"
+                    tal:attributes="onclick python:'toggleElementVisibility(\'%s\')' % tooltip_id;"> ? </button>
+          </td>
+          <td>
+            <span class="field">
+              <div tal:replace="structure cell/widget_rendered"/>
+            </span>
+            <div class="tooltipArea" style="visibility: hidden;"
+                 tal:condition="widget/help"
+                 tal:attributes="id tooltip_id;
+                 onclick python:'showElement(false, \'%s\')' % tooltip_id;"
+                 >
+              <tal:block tal:content="widget/help">This is the help for this field
+              </tal:block>
+            </div>
+            <tal:block condition="err">
+              <tal:block define="msg python:cpsmcat(err, mapping=err_mapping)">
+                <br /><em style="color: red"
+                          tal:content="msg">err</em>
+              </tal:block>
+            </tal:block>
+          </td>
+        </div>
+      </tal:block>
+    </tr>
+  </table>
+  <br />
+</metal:block>
Index: WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_edit.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_edit.pt	(revision 2098)
+++ WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_edit.pt	(revision 2098)
@@ -0,0 +1,61 @@
+<metal:block define-macro="default_edit"
+  tal:define="layout options/layout;
+  ds options/datastructure;
+  dm ds/getDataModel;
+  creation creation|nothing;
+  cpsmcat nocall:here/translation_service;
+  proceed options/proceed|nothing;
+  ">
+<table width="100%" cellpadding="2" cellspacing="2" summary="Form layout"
+       tal:condition="layout/rows">
+  <tr tal:repeat="row layout/rows" valign="top">
+    <td tal:repeat="cell row"
+      tal:attributes="colspan cell/ncols">
+      <tal:block define="widget cell/widget;
+                         wid widget/getWidgetId;
+                         err python:ds.getError(wid);
+                         err_mapping python:ds.getErrorMapping(wid);
+                         is_required widget/is_required|nothing;
+                         tooltip_id python:wid + '_help';
+                         widget_css_class cell/widget_css_class|nothing;
+                         css_class python:test(err, 'row error','row')">
+        <div tal:attributes="class widget_css_class;
+                             id python:widget.getHtmlWidgetId()+'_widget';
+                            ">
+          <div class="label" tal:condition="widget/label_edit"
+            tal:attributes="class python:test(is_required, 'label required',
+                                              'label')">
+            <label i18n:translate="" tal:condition="widget/is_i18n"
+              tal:content="widget/label_edit"
+              tal:attributes="for cell/widget_input_area_id|nothing;">label</label>
+            <label tal:condition="not:widget/is_i18n"
+              tal:content="widget/label_edit"
+              tal:attributes="for cell/widget_input_area_id|nothing;">label</label>
+          </div>
+          <button type="button" class="tooltipControl"
+                  tal:condition="widget/help"
+                  tal:attributes="onclick python:'toggleElementVisibility(\'%s\')' % tooltip_id;"> ? </button>
+          <div class="field">
+            <div tal:replace="structure cell/widget_rendered"/>
+          </div>
+          <div class="tooltipArea" style="visibility: hidden;"
+               tal:condition="widget/help"
+               tal:attributes="id tooltip_id;
+                               onclick python:'showElement(false, \'%s\')' % tooltip_id;">
+            <tal:block i18n:translate="" tal:condition="widget/is_i18n"
+              tal:content="widget/help">i18_key-help_for_this_field</tal:block>
+            <tal:block tal:condition="not:widget/is_i18n"
+              tal:content="widget/help">This is the help for this field</tal:block>
+          </div>
+          <tal:block condition="err">
+              <tal:block define="msg python:cpsmcat(err, mapping=err_mapping)">
+                <br /><em style="color: red"
+                  tal:content="msg">err</em>
+              </tal:block>
+          </tal:block>
+        </div>
+      </tal:block>
+    </td>
+  </tr>
+</table>
+                                </metal:block>
Index: WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_view.pt
===================================================================
--- WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_view.pt	(revision 2098)
+++ WAeUP_SRP/trunk/skins/waeup_student/layout_apply_pume_view.pt	(revision 2098)
@@ -0,0 +1,103 @@
+<metal:block define-macro="default_edit"
+  tal:define="layout options/layout;
+  ds options/datastructure;
+  cpsmcat nocall:here/translation_service;
+  ">
+  <table class="layoutDefault" summary="Form layout"
+         tal:condition="layout/rows">
+    <span tal:repeat="row python: layout['rows']" valign="top" >
+      <span tal:repeat="cell row">
+        <tr tal:define="widget cell/widget;
+              wid widget/getWidgetId;
+              err python:ds.getError(wid);
+              err_mapping python:ds.getErrorMapping(wid);
+              is_required python: widget.is_required;
+              tooltip_id python:wid + '_help';
+              widget_css_class cell/widget_css_class|nothing;
+              css_class python:test(err, 'row error','row')"
+              tal:condition="python: wid != 'passport'"
+              >
+          <div tal:attributes="class widget_css_class;
+          id python:widget.getHtmlWidgetId()+'_widget';"
+          >
+            <td>
+            <div class="label" tal:condition="widget/label_edit"
+                 tal:attributes="class python:test(is_required, 'label required','label')">
+              <label tal:content="widget/label_edit"
+                     tal:attributes="for cell/widget_input_area_id|nothing;">label</label>:
+            </div>
+            <button type="button" class="tooltipControl"
+                    tal:condition="widget/help"
+                    tal:attributes="onclick python:'toggleElementVisibility(\'%s\')' % tooltip_id;"> ? </button>
+            </td>
+            <td>
+            <span class="field">
+              <div tal:replace="structure cell/widget_rendered"/>
+            </span>
+            <div class="tooltipArea" style="visibility: hidden;"
+                 tal:condition="widget/help"
+                 tal:attributes="id tooltip_id;
+                 onclick python:'showElement(false, \'%s\')' % tooltip_id;"
+                 >
+              <tal:block tal:content="widget/help">This is the help for this field
+              </tal:block>
+            </div>
+            <tal:block condition="err">
+              <tal:block define="msg python:cpsmcat(err, mapping=err_mapping)">
+                <br /><em style="color: red"
+                          tal:content="msg">err</em>
+              </tal:block>
+            </tal:block>
+            </td>
+          </div>
+        </tr>
+      </span>
+    </span>
+    <tr tal:condition="widgets/passport|nothing" 
+        tal:define="cell widgets/passport|nothing;">
+      <tal:block tal:define="widget cell/widget;
+      wid widget/getWidgetId;
+      err python:ds.getError(wid);
+      err_mapping python:ds.getErrorMapping(wid);
+      is_required python: widget.is_required and creation and ('create' not in widget.readonly_layout_modes);
+      tooltip_id python:wid + '_help';
+      widget_css_class widget/widget_css_class|nothing;
+      css_class python:test(err, 'row error','row')"
+      >
+        <div tal:attributes="class widget_css_class;
+        id python:widget.getHtmlWidgetId()+'_widget';"
+        >
+          <td>
+            <div class="label" tal:condition="widget/label_edit"
+                 tal:attributes="class python:test(is_required, 'label required','label')">
+              <label tal:content="widget/label_edit"
+                     tal:attributes="for cell/widget_input_area_id|nothing;">label</label>:
+            </div>
+            <button type="button" class="tooltipControl"
+                    tal:condition="widget/help"
+                    tal:attributes="onclick python:'toggleElementVisibility(\'%s\')' % tooltip_id;"> ? </button>
+          </td>
+          <td>
+            <span class="field">
+              <div tal:replace="structure cell/widget_rendered"/>
+            </span>
+            <div class="tooltipArea" style="visibility: hidden;"
+                 tal:condition="widget/help"
+                 tal:attributes="id tooltip_id;
+                 onclick python:'showElement(false, \'%s\')' % tooltip_id;"
+                 >
+              <tal:block tal:content="widget/help">This is the help for this field
+              </tal:block>
+            </div>
+            <tal:block condition="err">
+              <tal:block define="msg python:cpsmcat(err, mapping=err_mapping)">
+                <br /><em style="color: red"
+                          tal:content="msg">err</em>
+              </tal:block>
+            </tal:block>
+          </td>
+        </div>
+      </tal:block>
+    </tr>
+  </table>
+</metal:block>
