Commit ba618003 authored by Georgios Dagkakis's avatar Georgios Dagkakis

products and several BTs: Use Base_constructUrlFor for some url calculations

Note:
This is not a complete work, i.e. it is not supposed to update all url
calculations of generic ERP5. It is done so that:
- Other pending work can use it
- Demonstrate how the API should be used and test it
parent 2f3a791a
...@@ -60,4 +60,6 @@ if document.getValidationState() not in validation_state: ...@@ -60,4 +60,6 @@ if document.getValidationState() not in validation_state:
web_section = context.getWebSectionValue() web_section = context.getWebSectionValue()
if web_section is None: if web_section is None:
web_section = context web_section = context
return "%s/%s" % (web_section.absolute_url(), reference) return web_section.Base_constructUrlFor(
document_reference=reference
)
...@@ -10,8 +10,9 @@ ...@@ -10,8 +10,9 @@
came_from_valid python: not came_from or url_topmost_document.isURLAncestorOf(came_from);"> came_from_valid python: not came_from or url_topmost_document.isURLAncestorOf(came_from);">
<tal:block tal:condition="isAnon"> <tal:block tal:condition="isAnon">
<tal:block tal:define="dummy python: response.expireCookie('__ac', path='/'); <tal:block tal:define="dummy python: response.expireCookie('__ac', path='/');
url python: '%s/login_form?portal_status_message=%s' % (here.absolute_url(), here.Base_translateString('Login and/or password is incorrect.')); parameter_dict python: {'portal_status_message': here.Base_translateString('Login and/or password is incorrect.')};
url python: came_from and '%s&amp;came_from=%s' % (url, came_from) or url; parameter_dict python: parameter_dict.update({'came_from': came_from}) if came_from else parameter_dict;
url python: here.Base_constructUrlFor(form_id='login_form', parameter_dict=parameter_dict);
dummy python: response.redirect(url);" /> dummy python: response.redirect(url);" />
</tal:block> </tal:block>
<tal:block tal:condition="not: isAnon"> <tal:block tal:condition="not: isAnon">
...@@ -19,8 +20,8 @@ ...@@ -19,8 +20,8 @@
<tal:block tal:define="dummy python: response.redirect(came_from or here.getPermanentURL(here));" /> <tal:block tal:define="dummy python: response.redirect(came_from or here.getPermanentURL(here));" />
</tal:block> </tal:block>
<tal:block tal:condition="not: came_from_valid"> <tal:block tal:condition="not: came_from_valid">
<tal:block tal:define="dummy python: response.redirect('%s?portal_status_message=%s' % (url_topmost_document.absolute_url(), here.Base_translateString('Redirection to an external site prevented.')));" /> <tal:block tal:define="dummy python: response.redirect(url_topmost_document.Base_constructUrlFor(parameter_dict={'portal_status_message': here.Base_translateString('Redirection to an external site prevented.')}))" />
</tal:block> </tal:block>
</tal:block> </tal:block>
</tal:block> </tal:block>
</tal:block> </tal:block>
\ No newline at end of file
...@@ -4,6 +4,6 @@ ...@@ -4,6 +4,6 @@
""" """
if document.hasReference(): if document.hasReference():
file_name = document.Document_getStandardFileName() file_name = document.Document_getStandardFileName()
return "%s/%s" % (context.absolute_url(), file_name) return context.Base_constructUrlFor(document_reference=file_name)
else: else:
return "%s%s" % (document.getAbsoluteUrl(),view and '/view' or '') return context.Base_constructUrlFor(form_id='view' if view else None)
...@@ -15,16 +15,17 @@ default_language = web_section.getLayoutProperty("default_available_language", d ...@@ -15,16 +15,17 @@ default_language = web_section.getLayoutProperty("default_available_language", d
website_url_set = {} website_url_set = {}
#simplify code of Base_doLanguage, can't ues Base_doLanguage directly #simplify code of Base_doLanguage, can't ues Base_doLanguage directly
root_website_url = web_section.getOriginalDocument().absolute_url() root_website_url = web_section.getOriginalDocument().Base_constructUrlFor()
website_url_pattern = r'^%s(?:%s)*(/|$)' % ( website_url_pattern = r'^%s(?:%s)*(/|$)' % (
re.escape(root_website_url), re.escape(root_website_url),
'|'.join('/' + re.escape(x) for x in available_language_set)) '|'.join('/' + re.escape(x) for x in available_language_set))
for language in available_language_set: for language in available_language_set:
web_section_url = web_section.Base_constructUrlFor()
if language == default_language: if language == default_language:
website_url_set[language] = re.sub(website_url_pattern, r'%s/\1' % root_website_url, web_section.absolute_url()) website_url_set[language] = re.sub(website_url_pattern, r'%s/\1' % root_website_url, web_section_url)
else: else:
website_url_set[language]= re.sub(website_url_pattern, r'%s/%s/\1' % (root_website_url, language), web_section.absolute_url()) website_url_set[language]= re.sub(website_url_pattern, r'%s/%s/\1' % (root_website_url, language), web_section_url)
view_as_web_method = default_web_page.getTypeBasedMethod( view_as_web_method = default_web_page.getTypeBasedMethod(
"viewAsWeb", "viewAsWeb",
......
...@@ -25,9 +25,16 @@ if dialog_id not in ('', None): ...@@ -25,9 +25,16 @@ if dialog_id not in ('', None):
# Prevent users who don't have rights to edit the object from # Prevent users who don't have rights to edit the object from
# editing it by calling the Base_edit script with correct # editing it by calling the Base_edit script with correct
# parameters directly. # parameters directly.
if not silent_mode and not request.AUTHENTICATED_USER.has_permission('Modify portal content', context) : if not silent_mode and not request.AUTHENTICATED_USER.has_permission('Modify portal content', context) :
msg = Base_translateString("You do not have the permissions to edit the object.") redirect_url = context.Base_constructUrlFor(
redirect_url = '%s/%s?selection_index=%s&selection_name=%s&%s' % (context.absolute_url(), form_id, selection_index, selection_name, 'portal_status_message=%s' % msg) form_id=form_id,
parameter_dict={
'selection_index': selection_index,
'selection_name': selection_name,
'portal_status_message': Base_translateString("You do not have the permissions to edit the object.")
}
)
return request['RESPONSE'].redirect(redirect_url) return request['RESPONSE'].redirect(redirect_url)
# Get the form # Get the form
...@@ -69,7 +76,7 @@ def editListBox(listbox_field, listbox): ...@@ -69,7 +76,7 @@ def editListBox(listbox_field, listbox):
if hasattr(value, 'edit'): if hasattr(value, 'edit'):
encapsulated_editor_list.append(value) encapsulated_editor_list.append(value)
else: else:
if value == '': if value == '':
value = None value = None
cleaned_v[key] = value cleaned_v[key] = value
...@@ -232,7 +239,7 @@ try: ...@@ -232,7 +239,7 @@ try:
elif(field_meta_type == 'MatrixBox'): elif(field_meta_type == 'MatrixBox'):
editMatrixBox(field, request.get(field.id)) editMatrixBox(field, request.get(field.id))
# Return parsed values # Return parsed values
if silent_mode: return (kw, encapsulated_editor_list), 'edit' if silent_mode: return (kw, encapsulated_editor_list), 'edit'
# Maybe we should build a list of objects we need # Maybe we should build a list of objects we need
...@@ -248,12 +255,6 @@ if message_only: ...@@ -248,12 +255,6 @@ if message_only:
ignore_layout = int(ignore_layout) ignore_layout = int(ignore_layout)
editable_mode = int(editable_mode) editable_mode = int(editable_mode)
spp = context.getPhysicalPath()
spp =list(spp)
s_url = request["SERVER_URL"]
spp.insert(0,s_url)
#calculate direct the url instead of using absolute_url
new_url = '/'.join(spp)
# for web mode, we should use 'view' instead of passed form_id # for web mode, we should use 'view' instead of passed form_id
# after 'Save & View'. # after 'Save & View'.
...@@ -262,26 +263,26 @@ if context.REQUEST.get('is_web_mode', False) and \ ...@@ -262,26 +263,26 @@ if context.REQUEST.get('is_web_mode', False) and \
form_id = 'view' form_id = 'view'
if not selection_index: if not selection_index:
redirect_url = '%s/%s?ignore_layout:int=%s&editable_mode:int=%s&portal_status_message=%s' % ( redirect_url = context.Base_constructUrlFor(
context.absolute_url(), form_id=form_id,
form_id, parameter_dict={
ignore_layout, 'ignore_layout': ignore_layout,
editable_mode, 'editable_mode': editable_mode,
message) 'portal_status_message': message,
}
)
else: else:
redirect_url = '%s/%s?selection_index=%s&selection_name=%s&ignore_layout:int=%s&editable_mode=%s&portal_status_message=%s' % ( redirect_url = context.Base_constructUrlFor(
context.absolute_url(), form_id=form_id,
form_id, parameter_dict={
selection_index, 'selection_index': selection_index,
selection_name, 'selection_name': selection_name,
ignore_layout, 'ignore_layout': ignore_layout,
editable_mode, 'editable_mode': editable_mode,
message) 'portal_status_message': message,
}
)
result = request['RESPONSE'].redirect(redirect_url) result = request['RESPONSE'].redirect(redirect_url)
if silent_mode: return result, 'redirect' if silent_mode: return result, 'redirect'
return result return result
...@@ -9,7 +9,7 @@ if website is not None and website.isStaticLanguageSelection(): ...@@ -9,7 +9,7 @@ if website is not None and website.isStaticLanguageSelection():
# Web Mode # Web Mode
root_website = website.getOriginalDocument() root_website = website.getOriginalDocument()
default_language = root_website.getDefaultAvailableLanguage() default_language = root_website.getDefaultAvailableLanguage()
root_website_url = root_website.absolute_url() root_website_url = root_website.Base_constructUrlFor()
website_url_pattern = r'^%s(?:%s)*(/|$)' % ( website_url_pattern = r'^%s(?:%s)*(/|$)' % (
re.escape(root_website_url), re.escape(root_website_url),
'|'.join('/' + re.escape(x) for x in root_website.getAvailableLanguageList())) '|'.join('/' + re.escape(x) for x in root_website.getAvailableLanguageList()))
...@@ -22,9 +22,9 @@ if website is not None and website.isStaticLanguageSelection(): ...@@ -22,9 +22,9 @@ if website is not None and website.isStaticLanguageSelection():
referer_url) referer_url)
else: else:
if select_language == default_language: if select_language == default_language:
redirect_url = root_website_url redirect_url = root_website_url + '/'
else: else:
redirect_url = root_website_url + '/' + select_language redirect_url = root_website_url + '/' + select_language + '/'
return context.REQUEST.RESPONSE.redirect(redirect_url) return context.REQUEST.RESPONSE.redirect(redirect_url)
else: else:
# ERP5 Mode # ERP5 Mode
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
local_parameter_list local_parameter_list | python: {}; local_parameter_list local_parameter_list | python: {};
action_context python: portal.restrictedTraverse(request.get('object_path', '?'), here); action_context python: portal.restrictedTraverse(request.get('object_path', '?'), here);
global actions python: here.Base_filterDuplicateActions(portal.portal_actions.listFilteredActionsFor(action_context)); global actions python: here.Base_filterDuplicateActions(portal.portal_actions.listFilteredActionsFor(action_context));
global url here/absolute_url; global url python: here.Base_constructUrlFor();
global current_form_id python: local_parameter_list.get('dialog_id', local_parameter_list.get('form_id', 'view')); global current_form_id python: local_parameter_list.get('dialog_id', local_parameter_list.get('form_id', 'view'));
dummy python: request.set('current_form_id', current_form_id); dummy python: request.set('current_form_id', current_form_id);
global current_url python: '%s/%s' % (url, current_form_id); global current_url python: '%s/%s' % (url, current_form_id);
...@@ -87,4 +87,4 @@ ...@@ -87,4 +87,4 @@
<tal:block metal:define-macro="http_definitions"> <tal:block metal:define-macro="http_definitions">
<tal:block tal:replace="structure python: modules['ZTUtils'].make_hidden_input(**http_parameter_list)" /> <tal:block tal:replace="structure python: modules['ZTUtils'].make_hidden_input(**http_parameter_list)" />
</tal:block> </tal:block>
</tal:block> </tal:block>
\ No newline at end of file
portal = context.getPortalObject() portal = context.getPortalObject()
if portal.portal_skins.updateSkinCookie(): if portal.portal_skins.updateSkinCookie():
portal.setupCurrentSkin() portal.setupCurrentSkin()
url = REQUEST.get("came_from") came_from = REQUEST.get("came_from")
if portal.portal_membership.isAnonymousUser(): if portal.portal_membership.isAnonymousUser():
RESPONSE.expireCookie("__ac", path="/") RESPONSE.expireCookie("__ac", path="/")
url = "%s/login_form?portal_status_message=%s" % ( parameter_dict = {'portal_status_message': context.Base_translateString("Login and/or password is incorrect.")}
context.absolute_url(), if came_from:
context.Base_translateString("Login and/or password is incorrect.") parameter_dict['came_from'] = came_from
+ ("&amp;came_from=" + url if url else "")) url = context.Base_constructUrlFor(
elif not url: form_id='login_form',
url = context.absolute_url() parameter_dict=parameter_dict
)
elif came_from:
url = came_from
else:
url = context.Base_constructUrlFor()
topmost_url_document = context.Base_getURLTopmostDocumentValue() topmost_url_document = context.Base_getURLTopmostDocumentValue()
if not topmost_url_document.isURLAncestorOf(url): if not topmost_url_document.isURLAncestorOf(url):
return context.ERP5Site_redirect(topmost_url_document.absolute_url(), return context.ERP5Site_redirect(topmost_url_document.Base_constructUrlFor(),
keep_items={'portal_status_message': 'Redirection to an external site prevented.'}) keep_items={'portal_status_message': 'Redirection to an external site prevented.'})
return RESPONSE.redirect(url) return RESPONSE.redirect(url)
...@@ -521,7 +521,7 @@ class FolderMixIn(ExtensionClass.Base): ...@@ -521,7 +521,7 @@ class FolderMixIn(ExtensionClass.Base):
not access any document in given path, not access any document in given path,
hence it does not compute the inner acquisition path. hence it does not compute the inner acquisition path.
""" """
document_url = self.absolute_url() document_url = self.Base_constructUrlFor()
parsed_given_url = urlparse(given_url) parsed_given_url = urlparse(given_url)
parsed_document_url = urlparse(document_url) parsed_document_url = urlparse(document_url)
# XXX note that the following check: # XXX note that the following check:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment