#-*- 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.Widget import widgetRegistry ##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) widgetRegistry.register(StudentIdWidget) ##Class StudentIdWidgetType(CPSWidgetType): ## """Student Id String widget type.""" ## meta_type = "StudentId Widget Type" ## cls = StudentIdWidget ###) class ScratchcardPinWidget(CPSStringWidget): ###( """ ScratchcardPin Widget""" meta_type = "Scratchcard Pin 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) widgetRegistry.register(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) ## ###)