Index: /waeup_product/trunk/Widgets.py
===================================================================
--- /waeup_product/trunk/Widgets.py	(revision 22)
+++ /waeup_product/trunk/Widgets.py	(revision 22)
@@ -0,0 +1,227 @@
+from Globals import InitializeClass
+from Products.CPSSchemas.Widget import CPSWidgetType
+from Products.CPSSchemas.BasicWidgets import CPSStringWidget, CPSEmailWidget
+from Products.CPSSchemas.ExtendedWidgets import CPSDateTimeWidget
+from Products.CPSSchemas.WidgetTypesTool import WidgetTypeRegistry
+from DateTime.DateTime import DateTime
+from AccessControl import getSecurityManager
+
+from re import compile
+
+from zLOG import LOG, DEBUG
+
+class StudentIdWidget(CPSStringWidget):
+    """ StudentId Widget"""
+    meta_type = "StudentId Widget"
+    
+    def validate(self, datastructure, **kw):
+        """Validate datastructure and update datamodel."""
+        
+        valid = CPSStringWidget.validate(self, datastructure, **kw)
+        if not valid:
+            return 0
+        else:
+            widget_id = self.getWidgetId()
+            value = datastructure[widget_id]
+            err = 0
+            if not (len(value) == 8 and value[:6].isdigit() and value[6:].isalpha()):
+                err = 'invalid Student Id'
+
+            if err:
+                datastructure.setError(widget_id, err)
+            else:
+                datamodel = datastructure.getDataModel()
+                datamodel[self.fields[0]] = value
+            
+            return not err
+
+InitializeClass(StudentIdWidget)
+
+class StudentIdWidgetType(CPSWidgetType):
+    """Student Id String widget type."""
+    meta_type = "StudentId  Widget Type"
+    cls = StudentIdWidget
+
+class ScratchcardPinWidget(CPSStringWidget):
+    """ ScratchcardPin Widget"""
+    meta_type = "ScratchcardPin Widget"
+    valid_pins = ['123456',
+                  '234567',
+                  '345678',
+                  '456789',
+                  ]
+    
+    def validate(self, datastructure, **kw):
+        """Validate datastructure and update datamodel."""
+        
+        valid = CPSStringWidget.validate(self, datastructure, **kw)
+        if not valid:
+            return 0
+        else:
+            widget_id = self.getWidgetId()
+            value = datastructure[widget_id]
+            err = 0
+            if not value in valid_pins: 
+                err = 'invalid Pin'
+            if err:
+                datastructure.setError(widget_id, err)
+            else:
+                datamodel = datastructure.getDataModel()
+                datamodel[self.fields[0]] = value
+            return not err
+
+InitializeClass(ScratchcardPinWidget)
+
+class ScratchcardPinWidgetType(CPSWidgetType):
+    """Student Id String widget type."""
+    meta_type = "Scratchcard Pin  Widget Type"
+    cls = ScratchcardPinWidget
+###########
+
+WidgetTypeRegistry.register(StudentIdWidgetType)
+WidgetTypeRegistry.register(ScratchcardPinWidgetType)
+
+##class MyProjectWeekDateTimeWidget(CPSDateTimeWidget):
+##    """ """
+##    meta_type = "MyProject Week Date Time Widget"
+##    
+##    def validate(self, datastructure, **kw):
+##        """Validate datastructure and update datamodel."""
+##        
+##        valid = CPSDateTimeWidget.validate(self, datastructure, **kw)
+##        if not valid:
+##            return 0
+##        else:
+##            widget_id = self.getWidgetId()
+##            value = datastructure[widget_id]
+##            err = 0
+##            if value.dow() in (6, 0):
+##                err = 'Cette date ne correspond pas à un jour de semaine'
+##
+##            if err:
+##                datastructure.setError(widget_id, err)
+##
+##            return not err
+##
+##InitializeClass(MyProjectWeekDateTimeWidget)
+
+##class MyProjectWeekDateTimeWidgetType(CPSWidgetType):
+##    """MyProject Week DateTime widget type."""
+##    meta_type = "MyProject Week Date Time Widget Type"
+##    cls = MyProjectWeekDateTimeWidget
+##
+##InitializeClass(MyProjectWeekDateTimeWidgetType)
+##class MyProjectRestrictedStringWidget(CPSStringWidget):
+##    """ """
+##    meta_type = "MyProject Restricted String Widget"
+##    
+##    def validate(self, datastructure, **kw):
+##        """Validate datastructure and update datamodel."""
+##        
+##        valid = CPSStringWidget.validate(self, datastructure, **kw)
+##        if not valid:
+##            return 0
+##        else:
+##            widget_id = self.getWidgetId()
+##            value = datastructure[widget_id]
+##            err = 0
+##            if not (len(value) == 5 and value.isupper() and value.isalpha()):
+##                err = 'Cette chaîne ne correspond pas au format imposé'
+##
+##            if err:
+##                datastructure.setError(widget_id, err)
+##            else:
+##                datamodel = datastructure.getDataModel()
+##                datamodel[self.fields[0]] = value
+##            
+##            return not err
+##
+##InitializeClass(MyProjectRestrictedStringWidget)
+##
+##class MyProjectRestrictedStringWidgetType(CPSWidgetType):
+##    """MyProject Restricted String widget type."""
+##    meta_type = "MyProject Restricted String Widget Type"
+##    cls = MyProjectRestrictedStringWidget
+##
+##InitializeClass(MyProjectRestrictedStringWidgetType)
+##
+##
+##class MyProjectRestrictedEmailWidget(CPSEmailWidget):
+##    """ """
+##    meta_type = "MyProject Restricted Email Widget"
+##
+##    email_myproject_pat = compile(r"^([-\w_+])+\.([-\w_+])+@myproject\.fr$")
+##
+##    def validate(self, datastructure, **kw):
+##        """Validate datastructure and update datamodel."""
+##        
+##        valid = CPSEmailWidget.validate(self, datastructure, **kw)
+##        if not valid:
+##            return 0
+##        else:
+##            widget_id = self.getWidgetId()
+##            err, v = self._extractValue(datastructure[widget_id])
+##            LOG('MyProject: MyProjectWidgets.py', DEBUG, "Valeur de v : %s" % v)
+##            if not err and kw.get('layout_mode') != 'search' and \
+##              v and not self.email_myproject_pat.match(v):
+##                err = 'cpsschemas_err_email'
+##
+##            if err:
+##                datastructure.setError(widget_id, err)
+##            else:
+##                datamodel = datastructure.getDataModel()
+##                datamodel[self.fields[0]] = v
+##            
+##            return not err
+##
+##    def render(self, mode, datastructure, **kw):
+##        """Render in mode from datastructure."""
+##        return CPSStringWidget.render(self, mode, datastructure, **kw)
+##
+##InitializeClass(MyProjectRestrictedEmailWidget)
+##
+##class MyProjectRestrictedEmailWidgetType(CPSWidgetType):
+##    """MyProject Restricted String widget type."""
+##    meta_type = "MyProject Restricted Email Widget Type"
+##    cls = MyProjectRestrictedEmailWidget
+##
+##InitializeClass(MyProjectRestrictedEmailWidgetType)
+##
+##class MyProjectVisitTitleWidget(CPSStringWidget):
+##    """ """
+##    meta_type = "MyProject Visit Title Widget"
+##    
+##    def validate(self, datastructure, **kw):
+##        """Validate datastructure and update datamodel."""
+##        
+##        widget_id = self.getWidgetId()
+##        err = 0
+##        curr_date = DateTime()
+##        date = "%d.%d.%d" % (curr_date.day(), curr_date.month(), curr_date.year())
+##        user = getSecurityManager().getUser()
+##        value = 'Demande de visite du %s par %s' % (date, 
+##             self.portal_directories.members.getEntry(user.getId()).get('fullname'))
+##        datamodel = datastructure.getDataModel()
+##        datamodel[self.fields[0]] = value
+##            
+##        return not err
+##
+##    def render(self, mode, datastructure, **kw):
+##        return ''
+##
+##InitializeClass(MyProjectVisitTitleWidget)
+##
+##class MyProjectVisitTitleWidgetType(CPSWidgetType):
+##    """MyProject Visit Title widget type."""
+##    meta_type = "MyProject Visit Title Widget Type"
+##    cls = MyProjectVisitTitleWidget
+##
+##InitializeClass(MyProjectVisitTitleWidgetType)
+
+#####################################################################################
+
+##WidgetTypeRegistry.register(MyProjectWeekDateTimeWidgetType)
+##WidgetTypeRegistry.register(MyProjectRestrictedStringWidgetType)
+##WidgetTypeRegistry.register(MyProjectRestrictedEmailWidgetType)
+##WidgetTypeRegistry.register(MyProjectVisitTitleWidgetType)
+##
