[gen] Class.popup: finalized the development of 'popup' classes.
This commit is contained in:
		
							parent
							
								
									ef68bb420b
								
							
						
					
					
						commit
						e11e754305
					
				
					 11 changed files with 286 additions and 121 deletions
				
			
		|  | @ -196,7 +196,8 @@ class BaseMixin: | |||
|         className = rq.get('className') | ||||
|         # Create the params to add to the URL we will redirect the user to | ||||
|         # create the object. | ||||
|         urlParams = {'mode':'edit', 'page':'main', 'nav':''} | ||||
|         urlParams = {'mode':'edit', 'page':'main', 'nav':'', | ||||
|                      'inPopup':rq.get('popup') == '1'} | ||||
|         initiator, initiatorPage, initiatorField = self.getInitiatorInfo() | ||||
|         if initiator: | ||||
|             # The object to create will be linked to an initiator object through | ||||
|  | @ -379,12 +380,15 @@ class BaseMixin: | |||
|         tool = self.getTool() | ||||
|         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. | ||||
|         initiator, initiatorPage, initiatorField = self.getInitiatorInfo() | ||||
|         # If the user clicked on 'Cancel', go back to the previous page. | ||||
|         buttonClicked = rq.get('button') | ||||
|         if buttonClicked == 'cancel': | ||||
|             if initiator: | ||||
|             if inPopup: | ||||
|                 back = tool.backFromPopup() | ||||
|             elif initiator: | ||||
|                 # Go back to the initiator page. | ||||
|                 urlBack = initiator.getUrl(page=initiatorPage, nav='') | ||||
|             else: | ||||
|  | @ -395,6 +399,7 @@ class BaseMixin: | |||
|                    urlBack = self.getUrl() | ||||
|             self.say(self.translate('object_canceled')) | ||||
|             self.removeLock(rq['page']) | ||||
|             if inPopup: return back | ||||
|             return self.goto(urlBack) | ||||
| 
 | ||||
|         # Object for storing validation errors | ||||
|  | @ -433,18 +438,18 @@ class BaseMixin: | |||
|         if not msg: msg = self.translate('object_saved') | ||||
|         # If the object has already been deleted (ie, it is a kind of transient | ||||
|         # object like a one-shot form and has already been deleted in method | ||||
|         # onEdit), redirect to the main site page. | ||||
|         if not getattr(obj.getParentNode().aq_base, obj.id, None): | ||||
|             return self.goto(tool.getSiteUrl(), msg) | ||||
|         # If the user can't access the object anymore, redirect him to its home | ||||
|         # page. | ||||
|         if not obj.mayView(): return self.goto(tool.getHomePage(), msg) | ||||
|         # onEdit) or if the user can't access the object anymore, redirect him | ||||
|         # to the user's home page. | ||||
|         if not getattr(obj.getParentNode().aq_base, obj.id, None) or \ | ||||
|            not obj.mayView(): | ||||
|             if inPopup: return tool.backFromPopup() | ||||
|             return self.goto(tool.getHomePage(), msg) | ||||
|         if (buttonClicked == 'save') or saveConfirmed: | ||||
|             obj.say(msg) | ||||
|             if inPopup: return tool.backFromPopup() | ||||
|             if isNew and initiator: | ||||
|                 return self.goto(initiator.getUrl(page=initiatorPage, nav='')) | ||||
|             else: | ||||
|                 return self.goto(obj.getUrl()) | ||||
|             return self.goto(obj.getUrl()) | ||||
|         if buttonClicked == 'previous': | ||||
|             # Go to the previous page for this object. | ||||
|             # We recompute the list of phases and pages because things | ||||
|  | @ -462,29 +467,30 @@ class BaseMixin: | |||
|                     # 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. | ||||
|                     return self.goto(obj.getUrl(mode='edit', page=pageName)) | ||||
|                     return self.goto(obj.getUrl(mode='edit', page=pageName, | ||||
|                                                 inPopup=inPopup)) | ||||
|                 else: | ||||
|                     return self.goto(obj.getUrl(page=pageName)) | ||||
|                     return self.goto(obj.getUrl(page=pageName, inPopup=inPopup)) | ||||
|             else: | ||||
|                 obj.say(msg) | ||||
|                 return self.goto(obj.getUrl()) | ||||
|                 return self.goto(obj.getUrl(inPopup=inPopup)) | ||||
|         if buttonClicked == 'next': | ||||
|             # Go to the next page for this object. | ||||
|             # We remember page name, because the next method may set a new | ||||
|             # current page if the current one is not visible anymore. | ||||
|             pageName = rq['page'] | ||||
|             phaseObj = self.getAppyPhases(currentOnly=True, layoutType='edit') | ||||
|             pageName, pageInfo = phaseObj.getNextPage(pageName) | ||||
|             pageName, pageInfo = phaseObj.getNextPage(rq['page']) | ||||
|             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)) | ||||
|                     return self.goto(obj.getUrl(mode='edit', page=pageName, | ||||
|                                                 inPopup=inPopup)) | ||||
|                 else: | ||||
|                     return self.goto(obj.getUrl(page=pageName)) | ||||
|                     return self.goto(obj.getUrl(page=pageName, inPopup=inPopup)) | ||||
|             else: | ||||
|                 obj.say(msg) | ||||
|                 return self.goto(obj.getUrl()) | ||||
|                 return self.goto(obj.getUrl(inPopup=inPopup)) | ||||
|         return obj.gotoEdit() | ||||
| 
 | ||||
|     def reindex(self, indexes=None, unindex=False): | ||||
|  | @ -1326,11 +1332,15 @@ class BaseMixin: | |||
|         return layoutType in showValue | ||||
| 
 | ||||
|     getUrlDefaults = {'page':True, 'nav':True} | ||||
|     def getUrl(self, base=None, mode='view', **kwargs): | ||||
|     def getUrl(self, base=None, mode='view', inPopup=False, **kwargs): | ||||
|         '''Returns an URL for this object. | ||||
|            * If p_base is None, it will be the base URL for this object | ||||
|              (ie, Zope self.absolute_url()). | ||||
|            * p_mode can be "edit", "view" or "raw" (a non-param, base URL) | ||||
|            * If p_inPopup is True, the link will be opened in the Appy iframe. | ||||
|              An additional param "popup=1" will be added to URL params, in order | ||||
|              to tell Appy that the link target will be shown in a popup, in a | ||||
|              minimalistic way (no portlet...). | ||||
|            * p_kwargs can store additional parameters to add to the URL. | ||||
|              In this dict, every value that is a string will be added to the | ||||
|              URL as-is. Every value that is True will be replaced by the value | ||||
|  | @ -1355,6 +1365,7 @@ class BaseMixin: | |||
|         if not kwargs: kwargs = self.getUrlDefaults | ||||
|         if 'page' not in kwargs: kwargs['page'] = True | ||||
|         if 'nav'  not in kwargs: kwargs['nav'] = True | ||||
|         kwargs['popup'] = inPopup and '1' or '0' | ||||
|         # Create URL parameters from kwargs | ||||
|         params = [] | ||||
|         for name, value in kwargs.iteritems(): | ||||
|  | @ -1392,18 +1403,19 @@ class BaseMixin: | |||
|             return False | ||||
|         if parent.meta_type not in ('Folder', 'Temporary Folder'): return parent | ||||
| 
 | ||||
|     def getBreadCrumb(self): | ||||
|     def getBreadCrumb(self, inPopup=False): | ||||
|         '''Gets breadcrumb info about this object and its parents (if it must | ||||
|            be shown).''' | ||||
|         # Return an empty breadcrumb if it must not be shown. | ||||
|         klass = self.getClass() | ||||
|         if hasattr(klass, 'breadcrumb') and not klass.breadcrumb: return () | ||||
|         # Compute the breadcrumb | ||||
|         res = [Object(url=self.absolute_url(), | ||||
|         res = [Object(url=self.getUrl(inPopup=inPopup), | ||||
|                       title=self.getFieldValue('title', layoutType='view'))] | ||||
|         # In a popup: limit the breadcrumb to the current object. | ||||
|         if inPopup: return res | ||||
|         parent = self.getParent() | ||||
|         if parent: | ||||
|             res = parent.getBreadCrumb() + res | ||||
|         if parent: res = parent.getBreadCrumb() + res | ||||
|         return res | ||||
| 
 | ||||
|     def index_html(self): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gaetan Delannay
						Gaetan Delannay