#-*- mode: python; mode: fold -*- 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" digits = 8 digits_str = "N"*digits letters = 2 letters_str = "L"*letters 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) == self.digits + self.letters and value[:self.digits].isdigit() and value[self.digits:].isalpha()): err = 'invalid Student Id in the format: %s%s with N = Number, L = Letter' % (self.digits_str,self.letters_str) 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 self.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): """Scratchcard Pin 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) ## ###)