[gen] A page can now be visible on edit but not on view (ie, the new User page containing only fields 'password' and 'retype password'. Default User class has now 2 pages: the 2 password fields are on a separate page. Zone containing user name in the user strip has evolved.
This commit is contained in:
parent
c316ab896b
commit
412d9f939f
20 changed files with 150 additions and 106 deletions
|
@ -21,6 +21,8 @@ except ImportError:
|
|||
# Global JS internationalized messages that will be computed in every page -----
|
||||
jsMessages = ('no_elem_selected', 'action_confirm', 'save_confirm',
|
||||
'warn_leave_form')
|
||||
USER_NOT_FOUND = 'User %s not found. Probably a problem implying several ' \
|
||||
'Appy apps put behind the same domain name or dev machine.'
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
class ToolMixin(BaseMixin):
|
||||
|
@ -67,6 +69,8 @@ class ToolMixin(BaseMixin):
|
|||
if not url:
|
||||
# Bring Managers to the config, lead others to pxHome.
|
||||
user = self.getUser()
|
||||
if not user:
|
||||
raise Exception(USER_NOT_FOUND % self.identifyUser()[0])
|
||||
if user.has_role('Manager'):
|
||||
url = self.goto(self.absolute_url())
|
||||
else:
|
||||
|
@ -1043,22 +1047,6 @@ class ToolMixin(BaseMixin):
|
|||
from AccessControl.User import BasicUserFolder
|
||||
BasicUserFolder.validate = validate
|
||||
|
||||
def getUserLine(self):
|
||||
'''Returns info about the currently logged user as a 2-tuple: first
|
||||
elem is the one-line user info as shown on every page; second line is
|
||||
the URL to edit user info.'''
|
||||
user = self.getUser()
|
||||
info = [user.title]
|
||||
showable = [r for r in user.getRoles() if r != 'Authenticated']
|
||||
if showable:
|
||||
info.append(', '.join([self.translate('role_%s' % r) \
|
||||
for r in showable]))
|
||||
# Edit URL for the user.
|
||||
url = None
|
||||
if user.o.mayEdit():
|
||||
url = user.o.getUrl(mode='edit', page='main', nav='')
|
||||
return (' | '.join(info), url)
|
||||
|
||||
def getUserName(self, login=None, normalized=False):
|
||||
'''Gets the user name corresponding to p_login (or the currently logged
|
||||
user if None), or the p_login itself if the user does not exist
|
||||
|
|
|
@ -383,23 +383,23 @@ class BaseMixin:
|
|||
errorMessage = self.translate('validation_error')
|
||||
isNew = self.isTemporary()
|
||||
inPopup = rq.get('popup') == '1'
|
||||
# If this object is created from an initiator, get info about him.
|
||||
# If this object is created from an initiator, get info about him
|
||||
initiator, initiatorField = self.getInitiatorInfo()
|
||||
initiatorPage = initiatorField and initiatorField.pageName or None
|
||||
# If the user clicked on 'Cancel', go back to the previous page.
|
||||
# If the user clicked on 'Cancel', go back to the previous page
|
||||
buttonClicked = rq.get('button')
|
||||
if buttonClicked == 'cancel':
|
||||
if inPopup:
|
||||
back = tool.backFromPopup()
|
||||
elif initiator:
|
||||
# Go back to the initiator page.
|
||||
if inPopup: back = tool.backFromPopup()
|
||||
elif initiator: # Go back to the initiator page
|
||||
urlBack = initiator.getUrl(page=initiatorPage, nav='')
|
||||
else:
|
||||
if isNew:
|
||||
# Go back to the root of the site.
|
||||
urlBack = tool.getSiteUrl()
|
||||
if isNew: urlBack = tool.getHomePage() # Go back to home page
|
||||
else:
|
||||
urlBack = self.getUrl()
|
||||
# Return to the same page, excepted if unshowable on view.
|
||||
phaseObj = self.getAppyPhases(True, 'view')
|
||||
pageInfo = phaseObj.getPageInfo(rq['page'], 'view')
|
||||
if not pageInfo: urlBack = tool.getHomePage()
|
||||
else: urlBack = self.getUrl(page=pageInfo.page.name)
|
||||
self.say(self.translate('object_canceled'))
|
||||
self.removeLock(rq['page'])
|
||||
if inPopup: return back
|
||||
|
@ -452,24 +452,27 @@ class BaseMixin:
|
|||
if inPopup: return tool.backFromPopup()
|
||||
if isNew and initiator:
|
||||
return self.goto(initiator.getUrl(page=initiatorPage, nav=''))
|
||||
return self.goto(obj.getUrl())
|
||||
# Return to the same page, if showable on view
|
||||
phaseObj = self.getAppyPhases(True, 'view')
|
||||
pageInfo = phaseObj.getPageInfo(rq['page'], 'view')
|
||||
if not pageInfo: return self.goto(tool.getHomePage(), msg)
|
||||
return self.goto(obj.getUrl(page=pageInfo.page.name))
|
||||
# Get the current page name. We keep it in "pageName" because rq['page']
|
||||
# can be changed by m_getAppyPhases called below.
|
||||
pageName = rq['page']
|
||||
if buttonClicked == 'previous':
|
||||
# Go to the previous page for this object.
|
||||
# We recompute the list of phases and pages because things
|
||||
# may have changed since the object has been updated (ie,
|
||||
# additional pages may be shown or hidden now, so the next and
|
||||
# previous pages may have changed). Moreover, previous and next
|
||||
# pages may not be available in "edit" mode, so we return the edit
|
||||
# or view pages depending on page.show.
|
||||
phaseObj = self.getAppyPhases(currentOnly=True, layoutType='edit')
|
||||
pageName, pageInfo = phaseObj.getPreviousPage(pageName)
|
||||
if buttonClicked in ('previous', 'next'):
|
||||
# Go to the previous or next page for this object. We recompute the
|
||||
# list of phases and pages because things may have changed since the
|
||||
# object has been updated (ie, additional pages may be shown or
|
||||
# hidden now, so the next and previous pages may have changed).
|
||||
# Moreover, previous and next pages may not be available in "edit"
|
||||
# mode, so we return the edit or view pages depending on page.show.
|
||||
phaseObj = self.getAppyPhases(True, 'edit')
|
||||
methodName = 'get%sPage' % buttonClicked.capitalize()
|
||||
pageName, pageInfo = getattr(phaseObj, methodName)(pageName)
|
||||
if pageName:
|
||||
# Return to the edit or view page?
|
||||
if pageInfo.showOnEdit:
|
||||
rq.set('page', pageName)
|
||||
# I do not use gotoEdit here because I really need to
|
||||
# redirect the user to the edit page. Indeed, the object
|
||||
# edit URL may have moved from temp_folder to another place.
|
||||
|
@ -480,21 +483,6 @@ class BaseMixin:
|
|||
else:
|
||||
obj.say(msg)
|
||||
return self.goto(obj.getUrl(inPopup=inPopup))
|
||||
if buttonClicked == 'next':
|
||||
# Go to the next page for this object.
|
||||
phaseObj = self.getAppyPhases(currentOnly=True, layoutType='edit')
|
||||
pageName, pageInfo = phaseObj.getNextPage(pageName)
|
||||
if pageName:
|
||||
# Return to the edit or view page?
|
||||
if pageInfo.showOnEdit:
|
||||
# Same remark as above (click on "previous").
|
||||
return self.goto(obj.getUrl(mode='edit', page=pageName,
|
||||
inPopup=inPopup))
|
||||
else:
|
||||
return self.goto(obj.getUrl(page=pageName, inPopup=inPopup))
|
||||
else:
|
||||
obj.say(msg)
|
||||
return self.goto(obj.getUrl(inPopup=inPopup))
|
||||
return obj.gotoEdit()
|
||||
|
||||
def reindex(self, indexes=None, unindex=False):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue