From 7b0b7e147d14af814975745df3efe1bdad0f2a21 Mon Sep 17 00:00:00 2001 From: Gaetan Delannay Date: Tue, 6 Mar 2012 17:02:41 +0100 Subject: [PATCH] appy.gen: allow to define several layoutTypes (ie: ('edit', 'result')) as a tuple/list in 'show' attributes of fields. --- gen/__init__.py | 18 +++++++++++++++--- gen/mixins/ToolMixin.py | 4 ++++ gen/model.py | 9 +++++---- gen/ui/page.pt | 1 + gen/ui/result.pt | 2 +- gen/ui/template.pt | 2 +- gen/ui/widgets/boolean.pt | 8 ++++---- gen/wrappers/UserWrapper.py | 5 +++-- 8 files changed, 34 insertions(+), 15 deletions(-) diff --git a/gen/__init__.py b/gen/__init__.py index ec5dd56..c93f05c 100644 --- a/gen/__init__.py +++ b/gen/__init__.py @@ -571,8 +571,13 @@ class Type: res = self.callMethod(obj, self.show) else: res = self.show - # Take into account possible values 'view', 'edit', 'search'... - if res in ('view', 'edit', 'result'): return res == layoutType + # Take into account possible values 'view', 'edit', 'result'... + if type(res) in sequenceTypes: + for r in res: + if r == layoutType: return True + return False + elif res in ('view', 'edit', 'result'): + return res == layoutType return bool(res) def isClientVisible(self, obj): @@ -1693,7 +1698,14 @@ class Ref(Type): back.isBack = True back.back = self back.backd = self.__dict__ - setattr(klass, back.attribute, back) + # klass may be None in the case we are defining an auto-Ref to the + # same class as the class where this field is defined. In this case, + # when defining the field within the class, write + # myField = Ref(None, ...) + # and, at the end of the class definition (name it K), write: + # K.myField.klass = K + # setattr(K, K.myField.back.attribute, K.myField.back) + if klass: setattr(klass, back.attribute, back) # When displaying a tabular list of referenced objects, must we show # the table headers? self.showHeaders = showHeaders diff --git a/gen/mixins/ToolMixin.py b/gen/mixins/ToolMixin.py index db85a04..6a7886c 100644 --- a/gen/mixins/ToolMixin.py +++ b/gen/mixins/ToolMixin.py @@ -848,6 +848,10 @@ class ToolMixin(BaseMixin): cookieValue = urllib.quote(cookieValue) self.REQUEST.RESPONSE.setCookie('__ac', cookieValue, path='/') + def _encryptPassword(self, password): + '''Returns the encrypted version of clear p_password.''' + return self.acl_users._encryptPassword(password) + def performLogin(self): '''Logs the user in.''' rq = self.REQUEST diff --git a/gen/model.py b/gen/model.py index dae7ed4..bde092e 100644 --- a/gen/model.py +++ b/gen/model.py @@ -189,8 +189,8 @@ toolFieldPrefixes = ('defaultValue', 'podTemplate', 'formats', 'resultColumns', 'enableAdvancedSearch', 'numberOfSearchColumns', 'searchFields', 'optionalFields', 'showWorkflow', 'showWorkflowCommentField', 'showAllStatesInPhase') -defaultToolFields = ('users', 'groups', 'translations', 'enableNotifications', - 'unoEnabledPython', 'openOfficePort', +defaultToolFields = ('title', 'users', 'groups', 'translations', + 'enableNotifications', 'unoEnabledPython','openOfficePort', 'numberOfResultsPerPage', 'listBoxesMaximumWidth', 'appyVersion', 'refreshSecurity') @@ -199,12 +199,13 @@ class Tool(ModelClass): _appy_attributes = list(defaultToolFields) # Tool attributes + title = gen.String(show=False, page=gen.Page('main', show=False)) def validPythonWithUno(self, value): pass # Real method in the wrapper unoEnabledPython = gen.String(group="connectionToOpenOffice", validator=validPythonWithUno) openOfficePort = gen.Integer(default=2002, group="connectionToOpenOffice") - numberOfResultsPerPage = gen.Integer(default=30, show=False) - listBoxesMaximumWidth = gen.Integer(default=100, show=False) + numberOfResultsPerPage = gen.Integer(default=30) + listBoxesMaximumWidth = gen.Integer(default=100) appyVersion = gen.String(show=False, layouts='f') def refreshSecurity(self): pass # Real method in the wrapper refreshSecurity = gen.Action(action=refreshSecurity, confirm=True) diff --git a/gen/ui/page.pt b/gen/ui/page.pt index 84d95ef..7f1c054 100644 --- a/gen/ui/page.pt +++ b/gen/ui/page.pt @@ -185,6 +185,7 @@ hasHistory contextObj/hasHistory; historyMaxPerPage options/maxPerPage|python: 5; historyExpanded python: request.get('appyHistory', 'collapsed') == 'expanded'; + _ python: tool.translate; creator contextObj/Creator" tal:condition="not: contextObj/isTemporary"> diff --git a/gen/ui/result.pt b/gen/ui/result.pt index 6bd2abd..6629155 100644 --- a/gen/ui/result.pt +++ b/gen/ui/result.pt @@ -106,7 +106,7 @@ + condition="python: contextObj.showField(widget['name'], 'result')"> diff --git a/gen/ui/template.pt b/gen/ui/template.pt index 1bec616..86d7d59 100644 --- a/gen/ui/template.pt +++ b/gen/ui/template.pt @@ -120,7 +120,7 @@ diff --git a/gen/ui/widgets/boolean.pt b/gen/ui/widgets/boolean.pt index cc10d4c..7d86aa4 100644 --- a/gen/ui/widgets/boolean.pt +++ b/gen/ui/widgets/boolean.pt @@ -26,17 +26,17 @@ Search macro for an Boolean. -
   +
   - + - + - +
diff --git a/gen/wrappers/UserWrapper.py b/gen/wrappers/UserWrapper.py index a656ffd..d7435a3 100644 --- a/gen/wrappers/UserWrapper.py +++ b/gen/wrappers/UserWrapper.py @@ -87,9 +87,10 @@ class UserWrapper(AbstractWrapper): # Update the password if the user has entered new ones. rq = self.request if rq.has_key('password1'): - zopeUser.__ = aclUsers._encryptPassword(rq['password1']) + tool = self.tool.o + zopeUser.__ = tool._encryptPassword(rq['password1']) # Update the cookie value - self.tool.o._updateCookie(login, rq['password1']) + tool._updateCookie(login, rq['password1']) self.password1 = self.password2 = '' # "self" must be owned by its Zope user. if 'Owner' not in self.o.get_local_roles_for_userid(login):