') % self.user.display_name
@@ -269,7 +268,7 @@ class UserPage(Directory):
if display_form:
get_response().breadcrumb.append(('edit', _('Edit')))
- html_top('users', title=_('Edit User'))
+ get_response().set_title(_('Edit User'))
r = TemplateIO(html=True)
r += htmltext('
') % _('Edit User')
r += form.render()
@@ -287,7 +286,7 @@ class UserPage(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
- html_top('users', title=_('Delete User'))
+ get_response().set_title(_('Delete User'))
r = TemplateIO(html=True)
r += htmltext('
') % (_('Deleting User:'), self.user.name)
r += form.render()
@@ -310,9 +309,13 @@ class UserPage(Directory):
class UsersDirectory(Directory):
_q_exports = ['', 'new']
- def _q_index(self):
+ def _q_traverse(self, path):
get_response().breadcrumb.append(('users/', _('Users')))
- html_top('users', title=_('Users'))
+ get_response().set_backoffice_section('users')
+ return super()._q_traverse(path)
+
+ def _q_index(self):
+ get_response().set_title(_('Users'))
r = TemplateIO(html=True)
limit = int(
@@ -482,16 +485,13 @@ class UsersDirectory(Directory):
return r.getvalue()
def new(self):
- get_response().breadcrumb.append(('users/', _('Users')))
get_response().breadcrumb.append(('new', _('New')))
ident_methods = get_cfg('identification', {}).get('methods', [])
if not ident_methods:
- return error_page(
- 'users', _('An authentification system must be configured before creating users.')
- )
+ return error_page(_('An authentification system must be configured before creating users.'))
if ident_methods == ['idp'] and len(get_cfg('idp', {}).items()) == 0:
- return error_page('users', _('SAML support must be setup before creating users.'))
+ return error_page(_('SAML support must be setup before creating users.'))
if is_idp_managing_user_attributes():
raise errors.TraversalError()
@@ -506,7 +506,7 @@ class UsersDirectory(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
- html_top('users', title=_('New User'))
+ get_response().set_title(_('New User'))
r = TemplateIO(html=True)
r += htmltext('
') % _('New User')
r += form.render()
@@ -523,7 +523,6 @@ class UsersDirectory(Directory):
return redirect('.')
def _q_lookup(self, component):
- get_response().breadcrumb.append(('users/', _('Users')))
try:
return UserPage(component)
except KeyError:
diff --git a/wcs/admin/workflows.py b/wcs/admin/workflows.py
index b233b1d72..fc2ab233f 100644
--- a/wcs/admin/workflows.py
+++ b/wcs/admin/workflows.py
@@ -36,7 +36,6 @@ from wcs.formdata import Evolution
from wcs.formdef import FormDef, UpdateStatisticsDataAfterJob
from wcs.qommon import _, errors, force_str, misc, template
from wcs.qommon.admin.menu import command_icon
-from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import (
CheckboxWidget,
ColourWidget,
@@ -381,14 +380,13 @@ class WorkflowUI:
class WorkflowItemPage(Directory):
_q_exports = ['', 'delete', 'copy']
- def __init__(self, workflow, parent, component, html_top):
+ def __init__(self, workflow, parent, component):
try:
self.item = [x for x in parent.items if x.id == component][0]
except (IndexError, ValueError):
raise errors.TraversalError()
self.workflow = workflow
self.parent = parent
- self.html_top = html_top
get_response().breadcrumb.append(('items/%s/' % component, self.item.description))
def _q_index(self):
@@ -429,7 +427,7 @@ class WorkflowItemPage(Directory):
return redirect(self.item.redirect_after_submit_url)
return redirect('..')
- self.html_top('%s - %s' % (_('Workflow'), self.workflow.name))
+ get_response().set_title('%s - %s' % (_('Workflow'), self.workflow.name))
r = TemplateIO(html=True)
r += htmltext('
') % self.item.description
r += form.render()
@@ -446,7 +444,7 @@ class WorkflowItemPage(Directory):
return redirect('../../')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
- self.html_top(title=_('Delete Item'))
+ get_response().set_title(_('Delete Item'))
r = TemplateIO(html=True)
r += htmltext('
') % _('Deleting Item')
r += form.render()
@@ -482,7 +480,7 @@ class WorkflowItemPage(Directory):
pass
get_response().breadcrumb.append(('copy', _('Copy')))
- self.html_top(title=_('Copy Item'))
+ get_response().set_title(_('Copy Item'))
r = TemplateIO(html=True)
r += htmltext('
') % _('Copy Item')
r += form.render()
@@ -520,7 +518,7 @@ class WorkflowItemPage(Directory):
return redirect('../../')
def _q_lookup(self, component):
- t = self.item.q_admin_lookup(self.workflow, self.parent, component, self.html_top)
+ t = self.item.q_admin_lookup(self.workflow, self.parent, component)
if t:
return t
return Directory._q_lookup(self, component)
@@ -529,7 +527,7 @@ class WorkflowItemPage(Directory):
class GlobalActionTriggerPage(Directory):
_q_exports = ['', 'delete']
- def __init__(self, workflow, action, component, html_top):
+ def __init__(self, workflow, action, component):
try:
self.trigger = [x for x in action.triggers if x.id == component][0]
except (IndexError, ValueError):
@@ -537,7 +535,6 @@ class GlobalActionTriggerPage(Directory):
self.workflow = workflow
self.action = action
self.status = action
- self.html_top = html_top
get_response().breadcrumb.append(('triggers/%s/' % component, _('Trigger')))
def _q_index(self):
@@ -554,7 +551,7 @@ class GlobalActionTriggerPage(Directory):
self.workflow.store(comment=_('Change in global action trigger'))
return redirect('../../')
- self.html_top('%s - %s' % (_('Workflow'), self.workflow.name))
+ get_response().set_title('%s - %s' % (_('Workflow'), self.workflow.name))
r = TemplateIO(html=True)
r += htmltext('
') % (self.workflow.name, self.action.name)
r += form.render()
@@ -569,7 +566,7 @@ class GlobalActionTriggerPage(Directory):
return redirect('../../')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
- self.html_top(title=_('Delete Trigger'))
+ get_response().set_title(_('Delete Trigger'))
r = TemplateIO(html=True)
r += htmltext('
') % _('Deleting Trigger')
r += form.render()
@@ -584,13 +581,12 @@ class ToChildDirectory(Directory):
_q_exports = ['']
klass = None
- def __init__(self, workflow, status, html_top):
+ def __init__(self, workflow, status):
self.workflow = workflow
self.status = status
- self.html_top = html_top
def _q_lookup(self, component):
- return self.klass(self.workflow, self.status, component, self.html_top)
+ return self.klass(self.workflow, self.status, component)
def _q_index(self):
return redirect('..')
@@ -626,19 +622,18 @@ class WorkflowStatusPage(Directory):
]
do_not_call_in_templates = True
- def __init__(self, workflow, status_id, html_top):
- self.html_top = html_top
+ def __init__(self, workflow, status_id):
self.workflow = workflow
try:
self.status = [x for x in self.workflow.possible_status if x.id == status_id][0]
except IndexError:
raise errors.TraversalError()
- self.items_dir = WorkflowItemsDir(workflow, self.status, html_top)
+ self.items_dir = WorkflowItemsDir(workflow, self.status)
get_response().breadcrumb.append(('status/%s/' % status_id, self.status.name))
def _q_index(self):
- self.html_top('%s - %s' % (_('Workflow'), self.workflow.name))
+ get_response().set_title('%s - %s' % (_('Workflow'), self.workflow.name))
get_response().add_javascript(
[
'jquery.js',
@@ -760,7 +755,7 @@ class WorkflowStatusPage(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
- self.html_top(title=_('Delete Status'))
+ get_response().set_title(_('Delete Status'))
r = TemplateIO(html=True)
r += htmltext('
') % (_('Deleting Status:'), self.status.name)
r += form.render()
@@ -795,7 +790,7 @@ class WorkflowStatusPage(Directory):
self.workflow.store(comment=_('Change name of status %s') % new_name)
return redirect('.')
- self.html_top(title=_('Edit Workflow Status'))
+ get_response().set_title(_('Edit Workflow Status'))
get_response().breadcrumb.append(('edit', _('Edit')))
r = TemplateIO(html=True)
r += htmltext('
') % _('Edit Workflow Status')
@@ -838,7 +833,7 @@ class WorkflowStatusPage(Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('reassign', _('Delete / Reassign')))
- self.html_top(title=_('Delete Status / Reassign'))
+ get_response().set_title(_('Delete Status / Reassign'))
r = TemplateIO(html=True)
r += htmltext('
')
@@ -935,7 +930,7 @@ class WorkflowStatusPage(Directory):
self.workflow.store(comment=_('Change in display options'))
return redirect('.')
- self.html_top(title=_('Change Display Settings'))
+ get_response().set_title(_('Change Display Settings'))
get_response().breadcrumb.append(('display', _('Display Settings')))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Change Display Settings')
@@ -960,7 +955,7 @@ class WorkflowStatusPage(Directory):
self.workflow.store(comment=_('Change of terminal status option'))
return redirect('.')
- self.html_top(title=_('Edit Terminal Status'))
+ get_response().set_title(_('Edit Terminal Status'))
get_response().breadcrumb.append(('endpoint', _('Terminal Status')))
return form.render()
@@ -982,7 +977,7 @@ class WorkflowStatusPage(Directory):
self.workflow.store(comment=_('Change in backoffice info text'))
return redirect('.')
- self.html_top(title=_('Edit Backoffice Information Text'))
+ get_response().set_title(_('Edit Backoffice Information Text'))
get_response().breadcrumb.append(('backoffice_info_text', _('Backoffice Information Text')))
return form.render()
@@ -990,12 +985,11 @@ class WorkflowStatusPage(Directory):
class WorkflowStatusDirectory(Directory):
_q_exports = ['']
- def __init__(self, workflow, html_top):
+ def __init__(self, workflow):
self.workflow = workflow
- self.html_top = html_top
def _q_lookup(self, component):
- return WorkflowStatusPage(self.workflow, component, self.html_top)
+ return WorkflowStatusPage(self.workflow, component)
def _q_index(self):
return redirect('..')
@@ -1214,7 +1208,7 @@ class FunctionsDirectory(Directory):
return redirect('..')
get_response().breadcrumb.append(('new', _('New Function')))
- html_top('workflows', title=_('New Function'))
+ get_response().set_title(_('New Function'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('New Function')
r += form.render()
@@ -1254,7 +1248,7 @@ class FunctionsDirectory(Directory):
return redirect('..')
get_response().breadcrumb.append(('new', _('Edit Function')))
- html_top('workflows', title=_('Edit Function'))
+ get_response().set_title(_('Edit Function'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Edit Function')
r += form.render()
@@ -1300,7 +1294,7 @@ class CriticalityLevelsDirectory(Directory):
return redirect('..')
get_response().breadcrumb.append(('new', _('New Criticality Level')))
- html_top('workflows', title=_('New Criticality level'))
+ get_response().set_title(_('New Criticality level'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('New Criticality Level')
r += form.render()
@@ -1335,7 +1329,7 @@ class CriticalityLevelsDirectory(Directory):
return redirect('..')
get_response().breadcrumb.append(('new', _('Edit Criticality Level')))
- html_top('workflows', title=_('Edit Criticality Level'))
+ get_response().set_title(_('Edit Criticality Level'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Edit Criticality Level')
r += form.render()
@@ -1360,16 +1354,15 @@ class GlobalActionPage(WorkflowStatusPage):
('backoffice-info-text', 'backoffice_info_text'),
]
- def __init__(self, workflow, action_id, html_top):
- self.html_top = html_top
+ def __init__(self, workflow, action_id):
self.workflow = workflow
try:
self.action = [x for x in self.workflow.global_actions if x.id == action_id][0]
except IndexError:
raise errors.TraversalError()
self.status = self.action
- self.items_dir = GlobalActionItemsDir(workflow, self.action, html_top)
- self.triggers_dir = GlobalActionTriggersDir(workflow, self.action, html_top)
+ self.items_dir = GlobalActionItemsDir(workflow, self.action)
+ self.triggers_dir = GlobalActionTriggersDir(workflow, self.action)
def _q_traverse(self, path):
get_response().breadcrumb.append(
@@ -1381,7 +1374,7 @@ class GlobalActionPage(WorkflowStatusPage):
return not item.is_disabled() and item.is_available(self.workflow) and item.ok_in_global_action
def _q_index(self):
- self.html_top('%s - %s' % (_('Workflow'), self.workflow.name))
+ get_response().set_title('%s - %s' % (_('Workflow'), self.workflow.name))
r = TemplateIO(html=True)
get_response().add_javascript(['jquery.js', 'jquery-ui.js', 'biglist.js', 'qommon.wysiwyg.js'])
@@ -1453,7 +1446,7 @@ class GlobalActionPage(WorkflowStatusPage):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
- self.html_top(title=_('Delete Action'))
+ get_response().set_title(_('Delete Action'))
r = TemplateIO(html=True)
r += htmltext('
%s %s
') % (_('Deleting Action:'), self.action.name)
r += form.render()
@@ -1480,7 +1473,7 @@ class GlobalActionPage(WorkflowStatusPage):
self.workflow.store(comment=_('Change in global action'))
return redirect('.')
- self.html_top(title=_('Edit Action Name'))
+ get_response().set_title(_('Edit Action Name'))
get_response().breadcrumb.append(('edit', _('Edit')))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Edit Action Name')
@@ -1562,12 +1555,11 @@ class GlobalActionPage(WorkflowStatusPage):
class GlobalActionsDirectory(Directory):
_q_exports = ['', 'new']
- def __init__(self, workflow, html_top):
+ def __init__(self, workflow):
self.workflow = workflow
- self.html_top = html_top
def _q_lookup(self, component):
- return GlobalActionPage(self.workflow, component, self.html_top)
+ return GlobalActionPage(self.workflow, component)
def _q_index(self):
return redirect('..')
@@ -1591,7 +1583,7 @@ class GlobalActionsDirectory(Directory):
return redirect('%s/' % action.id)
get_response().breadcrumb.append(('new', _('New Global Action')))
- html_top('workflows', title=_('New Global Action'))
+ get_response().set_title(_('New Global Action'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('New Global Action')
r += form.render()
@@ -1636,20 +1628,17 @@ class WorkflowPage(Directory):
except KeyError:
raise errors.TraversalError()
self.workflow_ui = WorkflowUI(self.workflow)
- self.status_dir = WorkflowStatusDirectory(self.workflow, self.html_top)
+ self.status_dir = WorkflowStatusDirectory(self.workflow)
self.variables_dir = VariablesDirectory(self.workflow)
self.backoffice_fields_dir = BackofficeFieldsDirectory(self.workflow)
self.functions_dir = FunctionsDirectory(self.workflow)
- self.global_actions_dir = GlobalActionsDirectory(self.workflow, self.html_top)
+ self.global_actions_dir = GlobalActionsDirectory(self.workflow)
self.criticality_levels_dir = CriticalityLevelsDirectory(self.workflow)
self.logged_errors_dir = LoggedErrorsDirectory(parent_dir=self, workflow_id=self.workflow.id)
self.snapshots_dir = SnapshotsDirectory(self.workflow)
if component:
get_response().breadcrumb.append((component + '/', self.workflow.name))
- def html_top(self, title):
- return html_top('workflows', title)
-
def category(self):
category_options = self.workflow_ui.get_categories()
if is_global_accessible():
@@ -1680,7 +1669,7 @@ class WorkflowPage(Directory):
self.workflow.store(comment=_('Change of category'))
return redirect('.')
- html_top('workflows', title=self.workflow.name)
+ get_response().set_title(self.workflow.name)
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Category')
r += form.render()
@@ -1705,7 +1694,7 @@ class WorkflowPage(Directory):
)
def _q_index(self):
- self.html_top(title=_('Workflow - %s') % self.workflow.name)
+ get_response().set_title(_('Workflow - %s') % self.workflow.name)
get_response().filter['sidebar'] = self.get_sidebar()
get_response().add_javascript(
['jquery.js', 'jquery-ui.js', 'biglist.js', 'svg-pan-zoom.js', 'jquery.colourpicker.js']
@@ -1748,7 +1737,7 @@ class WorkflowPage(Directory):
return r.getvalue()
def inspect(self):
- self.html_top(self.workflow.name)
+ get_response().set_title(self.workflow.name)
get_response().breadcrumb.append(('inspect', _('Inspector')))
return self.render_inspect()
@@ -1847,7 +1836,7 @@ class WorkflowPage(Directory):
else:
return redirect('.')
- self.html_top(title=_('Edit Workflow'))
+ get_response().set_title(_('Edit Workflow'))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('edit', _('Edit')))
r += htmltext('
%s
') % _('Edit Workflow')
@@ -1875,7 +1864,7 @@ class WorkflowPage(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
- self.html_top(title=_('Delete Workflow'))
+ get_response().set_title(_('Delete Workflow'))
r = TemplateIO(html=True)
r += htmltext('
%s %s
') % (_('Deleting Workflow:'), self.workflow.name)
r += form.render()
@@ -1917,7 +1906,7 @@ class WorkflowPage(Directory):
except ValueError:
pass
- self.html_top(title=_('Duplicate Workflow'))
+ get_response().set_title(_('Duplicate Workflow'))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('duplicate', _('Duplicate')))
r += htmltext('
%s
') % _('Duplicate Workflow')
@@ -1975,11 +1964,9 @@ class WorkflowsDirectory(Directory):
super().__init__(*args, **kwargs)
self.applications_dir = ApplicationsDirectory(Workflow.xml_root_node)
- def html_top(self, title):
- return html_top('workflows', title)
-
def _q_traverse(self, path):
get_response().breadcrumb.append(('workflows/', _('Workflows')))
+ get_response().set_backoffice_section('workflows')
return super()._q_traverse(path)
def is_accessible(self, user):
@@ -1998,7 +1985,7 @@ class WorkflowsDirectory(Directory):
def _q_index(self):
from wcs.applications import Application
- self.html_top(title=_('Workflows'))
+ get_response().set_title(_('Workflows'))
get_response().add_javascript(['popup.js'])
context = {
@@ -2119,7 +2106,7 @@ class WorkflowsDirectory(Directory):
else:
return redirect('%s/' % workflow.id)
- self.html_top(title=_('New Workflow'))
+ get_response().set_title(_('New Workflow'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('New Workflow')
r += form.render()
@@ -2151,7 +2138,7 @@ class WorkflowsDirectory(Directory):
pass
get_response().breadcrumb.append(('import', _('Import')))
- self.html_top(title=_('Import Workflow'))
+ get_response().set_title(_('Import Workflow'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Import Workflow')
r += htmltext('
%s
') % _(
diff --git a/wcs/admin/wscalls.py b/wcs/admin/wscalls.py
index cb5d90c10..53d5c796c 100644
--- a/wcs/admin/wscalls.py
+++ b/wcs/admin/wscalls.py
@@ -22,7 +22,6 @@ from wcs.admin import utils
from wcs.backoffice.applications import ApplicationsDirectory
from wcs.backoffice.snapshots import SnapshotsDirectory
from wcs.qommon import _, errors, misc, template
-from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import CheckboxWidget, FileWidget, Form, HtmlWidget, SlugWidget, StringWidget, TextWidget
from wcs.wscalls import NamedWsCall, WsCallRequestWidget
@@ -129,7 +128,7 @@ class NamedWsCallPage(Directory):
return r.getvalue()
def _q_index(self):
- html_top('wscalls', title=self.wscall.name)
+ get_response().set_title(self.wscall.name)
get_response().filter['sidebar'] = self.get_sidebar()
return template.QommonTemplateResponse(
templates=['wcs/backoffice/wscall.html'], context={'view': self, 'wscall': self.wscall}
@@ -149,7 +148,7 @@ class NamedWsCallPage(Directory):
return redirect('../%s/' % self.wscall.id)
get_response().breadcrumb.append(('edit', _('Edit')))
- html_top('wscalls', title=_('Edit webservice call'))
+ get_response().set_title(_('Edit webservice call'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Edit webservice call')
r += form.render()
@@ -166,7 +165,7 @@ class NamedWsCallPage(Directory):
return redirect('..')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
- html_top('wscalls', title=_('Delete webservice call'))
+ get_response().set_title(_('Delete webservice call'))
r = TemplateIO(html=True)
r += htmltext('
%s %s
') % (_('Deleting webservice call:'), self.wscall.name)
r += form.render()
@@ -195,7 +194,7 @@ class NamedWsCallsDirectory(Directory):
def _q_index(self):
from wcs.applications import Application
- html_top('wscalls', title=_('Webservice Calls'))
+ get_response().set_title(_('Webservice Calls'))
get_response().add_javascript(['popup.js'])
wscalls = NamedWsCall.select(order_by='name')
Application.populate_objects(wscalls)
@@ -225,7 +224,7 @@ class NamedWsCallsDirectory(Directory):
else:
return redirect('.')
- html_top('wscalls', title=_('New webservice call'))
+ get_response().set_title(_('New webservice call'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('New webservice call')
r += form.render()
@@ -252,7 +251,7 @@ class NamedWsCallsDirectory(Directory):
pass
get_response().breadcrumb.append(('import', _('Import')))
- html_top('wscalls', title=import_title)
+ get_response().set_title(import_title)
r = TemplateIO(html=True)
r += htmltext('
%s
') % import_title
r += htmltext('
%s
') % _('You can install a new webservice call by uploading a file.')
diff --git a/wcs/backoffice/applications.py b/wcs/backoffice/applications.py
index e211e7e56..2a118aade 100644
--- a/wcs/backoffice/applications.py
+++ b/wcs/backoffice/applications.py
@@ -18,7 +18,6 @@ from quixote import get_response, redirect
from quixote.directory import Directory
from wcs.qommon import errors, misc, template
-from wcs.qommon.backoffice.menu import html_top
class ApplicationsDirectory(Directory):
@@ -60,7 +59,7 @@ class ApplicationDirectory(Directory):
return super()._q_traverse(path)
def _q_index(self):
- html_top('', self.application.name)
+ get_response().set_title(self.application.name)
return template.QommonTemplateResponse(templates=[self.get_template()], context=self.get_context())
def get_template(self):
@@ -99,7 +98,7 @@ class ApplicationDirectory(Directory):
def get_block_objects_context(self, objects):
from wcs.admin.blocks import BlocksDirectory
- return BlocksDirectory(None).get_list_context(objects)
+ return BlocksDirectory().get_list_context(objects)
def get_mailtemplate_objects_context(self, objects):
from wcs.admin.mail_templates import MailTemplatesDirectory
diff --git a/wcs/backoffice/cards.py b/wcs/backoffice/cards.py
index d5ba34e54..ecd366983 100644
--- a/wcs/backoffice/cards.py
+++ b/wcs/backoffice/cards.py
@@ -83,7 +83,7 @@ class CardDefPage(FormDefPage):
management_view_label = _('List of cards')
def _q_index(self):
- self.html_top(title=self.formdef.name)
+ get_response().set_title(self.formdef.name)
r = TemplateIO(html=True)
get_response().filter['sidebar'] = self.get_sidebar()
get_response().add_javascript(['jquery.js', 'widget_list.js', 'qommon.wysiwyg.js'])
@@ -284,7 +284,7 @@ class CardsDirectory(FormsDirectory):
else:
return redirect(str(formdef.id) + '/')
- self.html_top(title=_('New Card Model'))
+ get_response().set_title(_('New Card Model'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('New Card Model')
r += form.render()
diff --git a/wcs/backoffice/data_management.py b/wcs/backoffice/data_management.py
index b43a0c922..08a6d7bbd 100644
--- a/wcs/backoffice/data_management.py
+++ b/wcs/backoffice/data_management.py
@@ -31,7 +31,6 @@ from wcs.workflows import ContentSnapshotPart
from ..qommon import _, errors, ngettext, template
from ..qommon.afterjobs import AfterJob
-from ..qommon.backoffice.menu import html_top
from ..qommon.form import CheckboxWidget, FileWidget, Form
from .management import FormBackOfficeStatusPage, FormPage, ManagementDirectory
from .submission import FormFillPage
@@ -73,6 +72,7 @@ def get_import_csv_fields(carddef):
class DataManagementDirectory(ManagementDirectory):
do_not_call_in_templates = True
_q_exports = ['']
+ section = 'data'
def add_breadcrumb(self):
get_response().breadcrumb.append(('data/', _('Cards')))
@@ -108,7 +108,7 @@ class DataManagementDirectory(ManagementDirectory):
yield carddef
def _q_index(self):
- html_top('data_management', _('Cards'))
+ get_response().set_title(_('Cards'))
if not (CardDef.exists()):
return self.empty_site_message(_('Cards'))
return template.QommonTemplateResponse(
@@ -249,7 +249,7 @@ class CardPage(FormPage):
form.set_error('file', e)
get_response().breadcrumb.append(('import-file', _('Import File')))
- html_top('data_management', _('Import File'))
+ get_response().set_title(_('Import File'))
context['html_form'] = form
context['impossible_csv_fields'] = self.get_csv_impossible_fields()
@@ -408,9 +408,6 @@ class CardBackOfficeStatusPage(FormBackOfficeStatusPage):
'The card has been recorded on %(date)s with the number %(number)s by %(agent)s.'
)
- def html_top(self, title=None):
- return html_top('data_management', title)
-
def should_fold_summary(self, mine, request_user):
return False
diff --git a/wcs/backoffice/deprecations.py b/wcs/backoffice/deprecations.py
index c1743d562..4e7729f0a 100644
--- a/wcs/backoffice/deprecations.py
+++ b/wcs/backoffice/deprecations.py
@@ -26,7 +26,6 @@ from wcs.data_sources import NamedDataSource
from wcs.formdef import get_formdefs_of_all_kinds
from wcs.qommon import _, ezt, template
from wcs.qommon.afterjobs import AfterJob
-from wcs.qommon.backoffice.menu import html_top
from wcs.wf.export_to_model import UploadValidationError
from wcs.workflows import Workflow
from wcs.wscalls import NamedWsCall
@@ -42,7 +41,7 @@ class DeprecationsDirectory(Directory):
# create report if necessary
return self.scan()
- html_top('studio', _('Deprecations Report'))
+ get_response().set_title(_('Deprecations Report'))
get_response().breadcrumb.append(('deprecations/', _('Deprecations Report')))
context = {'has_sidebar': False, 'view': self}
diff --git a/wcs/backoffice/i18n.py b/wcs/backoffice/i18n.py
index 7ac22b335..1d626dba7 100644
--- a/wcs/backoffice/i18n.py
+++ b/wcs/backoffice/i18n.py
@@ -31,7 +31,6 @@ from wcs.formdef import FormDef, UpdateDigestAfterJob
from wcs.mail_templates import MailTemplate
from wcs.qommon import _, errors, get_cfg, misc, ods, template
from wcs.qommon.afterjobs import AfterJob
-from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import CheckboxWidget, FileWidget, Form, RadiobuttonsWidget, TextWidget
from wcs.sql_criterias import Equal, FtsMatch, ILike, Or
from wcs.workflows import Workflow
@@ -65,7 +64,7 @@ class I18nDirectory(Directory):
if TranslatableMessage.count() == 0:
return self.scan()
- html_top('i18n', title=_('Multilinguism'))
+ get_response().set_title(_('Multilinguism'))
get_response().breadcrumb.append(('i18n/', _('Multilinguism')))
if not self.get_supported_languages():
@@ -241,7 +240,7 @@ class MessageDirectory(Directory):
update_digests()
return redirect('../../?' + get_request().get_query())
- html_top('i18n', title=_('Multilinguism'))
+ get_response().set_title(_('Multilinguism'))
context = {'html_form': form, 'msg': self.msg}
return template.QommonTemplateResponse(
templates=['wcs/backoffice/i18n-message.html'], context=context
diff --git a/wcs/backoffice/journal.py b/wcs/backoffice/journal.py
index 3bd985afa..c37264356 100644
--- a/wcs/backoffice/journal.py
+++ b/wcs/backoffice/journal.py
@@ -22,7 +22,6 @@ from quixote.directory import Directory
from wcs.carddef import CardDef
from wcs.formdef import FormDef
from wcs.qommon import _, template
-from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import DateWidget, Form, OptGroup, SingleSelectWidget, StringWidget
from wcs.qommon.misc import get_as_datetime
from wcs.sql_criterias import Equal, Greater, GreaterOrEqual, Less, Nothing
@@ -31,9 +30,6 @@ from wcs.sql_criterias import Equal, Greater, GreaterOrEqual, Less, Nothing
class JournalDirectory(Directory):
_q_exports = ['']
- def html_top(self, title):
- return html_top('journal', title)
-
def _q_traverse(self, path):
get_response().breadcrumb.append(('journal/', _('Audit Journal')))
return super()._q_traverse(path)
@@ -41,7 +37,7 @@ class JournalDirectory(Directory):
def _q_index(self):
from wcs.audit import Audit
- self.html_top(_('Audit Journal'))
+ get_response().set_title(_('Audit Journal'))
context = {
'has_sidebar': True,
'html_form': self.get_filter_form(),
diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py
index d01855756..fc1d06434 100644
--- a/wcs/backoffice/management.py
+++ b/wcs/backoffice/management.py
@@ -70,7 +70,6 @@ from wcs.workflows import WorkflowStatusItem, item_classes, template_on_formdata
from ..qommon import _, audit, errors, ezt, force_str, get_cfg, misc, ngettext, ods, pgettext_lazy, template
from ..qommon.afterjobs import AfterJob
-from ..qommon.backoffice.menu import html_top
from ..qommon.evalutils import make_datetime
from ..qommon.form import (
CheckboxWidget,
@@ -163,6 +162,7 @@ def geojson_formdatas(formdatas, geoloc_key='base', fields=None):
class ManagementDirectory(Directory):
_q_exports = ['', 'forms', 'listing', 'statistics', 'lookup', 'count', 'geojson', 'map']
+ section = 'management'
def add_breadcrumb(self):
get_response().breadcrumb.append(('management/', _('Management')))
@@ -172,6 +172,7 @@ class ManagementDirectory(Directory):
def _q_traverse(self, path):
self.add_breadcrumb()
+ get_response().set_backoffice_section(self.section)
return super()._q_traverse(path)
def _q_index(self):
@@ -181,7 +182,7 @@ class ManagementDirectory(Directory):
return redirect('forms')
def forms(self):
- html_top('management', _('Management'))
+ get_response().set_title(_('Management'))
formdefs = FormDef.select(order_by='name', ignore_errors=True, lightweight=True)
if len(formdefs) == 0:
return self.empty_site_message(_('Forms'))
@@ -404,7 +405,7 @@ class ManagementDirectory(Directory):
return r.getvalue()
def statistics(self):
- html_top('management', _('Global statistics'))
+ get_response().set_title(_('Global statistics'))
get_response().breadcrumb.append(('statistics', _('Global statistics')))
if not (FormDef.exists()):
@@ -584,7 +585,7 @@ class ManagementDirectory(Directory):
get_response().add_javascript(['wcs.listing.js'])
from wcs import sql
- html_top('management', _('Management'))
+ get_response().set_title(_('Management'))
if not (FormDef.exists()):
return self.empty_site_message(_('Global View'))
@@ -736,7 +737,7 @@ class ManagementDirectory(Directory):
def map(self):
get_response().add_javascript(['wcs.listing.js', 'qommon.map.js'])
- html_top('management', _('Global Map'))
+ get_response().set_title(_('Global Map'))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('map', _('Global Map')))
attrs = {
@@ -2213,10 +2214,10 @@ class FormPage(FormdefDirectoryBase):
r += htmltext('
')
if self.view:
view_name = self.view.title
- html_top('management', f'{self.view.title} - {self.formdef.name}')
+ get_response().set_title(f'{self.view.title} - {self.formdef.name}')
r += htmltext('
%s - %s
') % (self.formdef.name, view_name)
else:
- html_top('management', self.formdef.name)
+ get_response().set_title(self.formdef.name)
r += htmltext('
%s
') % self.formdef.name
r += get_session().display_message()
r += self.listing_top_actions()
@@ -2708,7 +2709,7 @@ class FormPage(FormdefDirectoryBase):
def map(self):
self.view_type = 'map'
get_response().add_javascript(['qommon.map.js'])
- html_top('management', '%s - %s' % (_('Form'), self.formdef.name))
+ get_response().set_title('%s - %s' % (_('Form'), self.formdef.name))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('map', _('Map')))
attrs = {
@@ -2749,7 +2750,7 @@ class FormPage(FormdefDirectoryBase):
'statistics', get_request().user
):
raise errors.AccessForbiddenError()
- html_top('management', '%s - %s' % (_('Form'), self.formdef.name))
+ get_response().set_title('%s - %s' % (_('Form'), self.formdef.name))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('stats', _('Statistics')))
@@ -3030,9 +3031,6 @@ class FormBackOfficeStatusPage(FormStatusPage):
'The form has been recorded on %(date)s with the number %(number)s by %(agent)s.'
)
- def html_top(self, title=None):
- return html_top('management', title)
-
def _q_index(self):
if self.filled.status == 'draft':
if self.filled.backoffice_submission and self.formdef.backoffice_submission_roles:
@@ -3623,7 +3621,7 @@ class FormBackOfficeStatusPage(FormStatusPage):
if self.filled.is_draft():
raise errors.AccessForbiddenError()
get_response().breadcrumb.append(('inspect', _('Data Inspector')))
- self.html_top(self.formdef.name)
+ get_response().set_title(self.formdef.name)
context = {}
diff --git a/wcs/backoffice/root.py b/wcs/backoffice/root.py
index af4cc9354..b0a251f23 100644
--- a/wcs/backoffice/root.py
+++ b/wcs/backoffice/root.py
@@ -30,7 +30,6 @@ from wcs.formdef import FormDef
from ..qommon import _, errors, get_cfg, misc, template
from ..qommon.afterjobs import AfterJob
-from ..qommon.backoffice.menu import html_top
from .cards import CardsDirectory
from .data_management import DataManagementDirectory
from .i18n import I18nDirectory
@@ -85,6 +84,7 @@ class RootDirectory(AccessControlled, Directory):
if path and path[0] == 'categories':
# legacy /backoffice/categories/<...>, redirect.
return redirect('/backoffice/forms/' + '/'.join(path))
+ get_response().set_backoffice_section('studio')
return super()._q_traverse(path)
@classmethod
@@ -263,7 +263,7 @@ class RootDirectory(AccessControlled, Directory):
return redirect('.')
get_response().add_javascript(['jquery.js', 'afterjob.js'])
- html_top('/', title=job.label)
+ get_response().set_title(job.label)
return template.QommonTemplateResponse(
templates=['wcs/backoffice/processing.html'], context={'job': job}
)
diff --git a/wcs/backoffice/snapshots.py b/wcs/backoffice/snapshots.py
index 818ff7de9..0336be1dc 100644
--- a/wcs/backoffice/snapshots.py
+++ b/wcs/backoffice/snapshots.py
@@ -26,7 +26,6 @@ from quixote.html import TemplateIO, htmltext
from wcs.formdef import FormdefImportError
from wcs.qommon import _, errors, misc, template
-from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import Form, RadiobuttonsWidget, StringWidget
from wcs.sql_criterias import Equal
from wcs.workflows import WorkflowImportError
@@ -46,7 +45,7 @@ class SnapshotsDirectory(Directory):
return super()._q_traverse(path)
def _q_index(self):
- html_top('', _('History'))
+ get_response().set_title(_('History'))
return template.QommonTemplateResponse(
templates=['wcs/backoffice/snapshots.html'],
context={'view': self, 'enable_tests': get_publisher().has_site_option('enable-tests')},
@@ -65,7 +64,7 @@ class SnapshotsDirectory(Directory):
get_publisher().snapshot_class.snap(instance=self.obj, label=label.parse())
return redirect('../')
- html_top('', _('History'))
+ get_response().set_title(_('History'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Save snapshot')
r += form.render()
@@ -73,7 +72,7 @@ class SnapshotsDirectory(Directory):
def compare(self):
get_response().breadcrumb.append(('compare/', _('Compare')))
- html_top('', _('Compare'))
+ get_response().set_title(_('Compare'))
mode = get_request().form.get('mode') or 'xml'
diff --git a/wcs/backoffice/studio.py b/wcs/backoffice/studio.py
index 391450721..2a8de710f 100644
--- a/wcs/backoffice/studio.py
+++ b/wcs/backoffice/studio.py
@@ -27,7 +27,6 @@ from wcs.data_sources import NamedDataSource
from wcs.formdef import FormDef
from wcs.mail_templates import MailTemplate
from wcs.qommon import _, misc, pgettext, template
-from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import get_response
from wcs.workflows import Workflow
from wcs.wscalls import NamedWsCall
@@ -38,7 +37,7 @@ class ChangesDirectory(Directory):
def _q_index(self):
get_response().breadcrumb.append(('all-changes/', pgettext('studio', 'All changes')))
- html_top(pgettext('studio', 'All Changes'))
+ get_response().set_title(pgettext('studio', 'All Changes'))
limit = misc.get_int_or_400(
get_request().form.get('limit', get_publisher().get_site_option('default-page-size')) or 20
)
@@ -88,15 +87,13 @@ class StudioDirectory(Directory):
def __init__(self):
self.logged_errors_dir = LoggedErrorsDirectory(parent_dir=self)
- def html_top(self, title):
- return html_top('studio', title)
-
def _q_traverse(self, path):
get_response().breadcrumb.append(('studio/', _('Studio')))
+ get_response().set_backoffice_section('studio')
return super()._q_traverse(path)
def _q_index(self):
- self.html_top(_('Studio'))
+ get_response().set_title(_('Studio'))
extra_links = []
backoffice_root = get_publisher().get_backoffice_root()
object_types = []
diff --git a/wcs/backoffice/submission.py b/wcs/backoffice/submission.py
index 0f07c9652..7749c5bde 100644
--- a/wcs/backoffice/submission.py
+++ b/wcs/backoffice/submission.py
@@ -30,7 +30,6 @@ from wcs.forms.root import FormPage as PublicFormFillPage
from wcs.sql_criterias import Equal, StrictNotEqual
from ..qommon import _, errors, misc
-from ..qommon.backoffice.menu import html_top
from ..qommon.form import Form, HtmlWidget
@@ -53,7 +52,7 @@ class RemoveDraftDirectory(Directory):
if self.parent_directory.edit_mode:
raise errors.AccessForbiddenError()
- self.parent_directory.html_top(title=_('Discard'))
+ get_response().set_title(_('Discard'))
form = Form(enctype='multipart/form-data')
form.widgets.append(HtmlWidget('
%s
' % _('You are about to discard this form.')))
@@ -186,9 +185,6 @@ class FormFillPage(PublicFormFillPage):
formdata.user_id = get_request().form['user_id']
return formdata
- def html_top(self, *args, **kwargs):
- return html_top('submission', *args, **kwargs)
-
@classmethod
def get_status_page_class(cls):
return SubmissionFormStatusPage
@@ -407,6 +403,10 @@ class FormFillPage(PublicFormFillPage):
class SubmissionDirectory(Directory):
_q_exports = ['', 'count']
+ def _q_traverse(self, path):
+ get_response().set_backoffice_section('submission')
+ return super()._q_traverse(path)
+
def is_accessible(self, user):
if not user.can_go_in_backoffice():
return False
@@ -437,7 +437,7 @@ class SubmissionDirectory(Directory):
def _q_index(self):
get_response().breadcrumb.append(('submission/', _('Submission')))
- html_top('submission', _('Submission'))
+ get_response().set_title(_('Submission'))
list_forms = self.get_submittable_formdefs()
cats = Category.select()
diff --git a/wcs/forms/actions.py b/wcs/forms/actions.py
index 96180faed..562c4de69 100644
--- a/wcs/forms/actions.py
+++ b/wcs/forms/actions.py
@@ -23,7 +23,6 @@ from wcs.formdef import FormDef
from wcs.forms.common import FormTemplateMixin
from wcs.qommon import _, errors, misc, template
from wcs.qommon.afterjobs import AfterJob
-from wcs.qommon.backoffice.menu import html_top as backoffice_html_top
from wcs.qommon.form import Form
from wcs.qommon.http_request import HTTPRequest
from wcs.wf.jump import jump_and_perform
@@ -84,7 +83,7 @@ class ActionDirectory(Directory, FormTemplateMixin):
raise MissingOrExpiredToken()
def _q_index(self):
- template.html_top(title=self.formdef.name)
+ get_response().set_title(self.formdef.name)
form = Form()
form.add_submit('submit', misc.site_encode(self.token.context['label']))
if form.is_submitted() and not form.has_errors():
@@ -145,16 +144,11 @@ class GlobalInteractiveActionDirectory(Directory, FormTemplateMixin):
raise MissingOrExpiredToken()
def _q_index(self):
+ get_response().set_title(self.formdef.name)
if get_request().is_in_backoffice():
- if isinstance(self.formdef, CardDef):
- section = 'data_management'
- else:
- section = 'management'
get_response().breadcrumb.append(('', self.action.name))
- backoffice_html_top(section, title=self.formdef.name)
template_name = 'wcs/backoffice/global-interactive-action.html'
else:
- template.html_top(title=self.formdef.name)
template_name = 'wcs/global-interactive-action.html'
if len(self.token.context['form_ids']) == 1:
diff --git a/wcs/forms/common.py b/wcs/forms/common.py
index d6926ab2f..44b79f1f2 100644
--- a/wcs/forms/common.py
+++ b/wcs/forms/common.py
@@ -163,9 +163,6 @@ class FormStatusPage(Directory, FormTemplateMixin):
history_templates = ['wcs/formdata_history.html']
status_templates = ['wcs/formdata_status.html']
- def html_top(self, title=None):
- template.html_top(title=title, default_org=_('Forms'))
-
def __init__(self, formdef, filled, register_workflow_subdirs=True, custom_view=None, parent_view=None):
get_publisher().substitutions.feed(filled)
self.formdef = formdef
@@ -340,7 +337,7 @@ class FormStatusPage(Directory, FormTemplateMixin):
form.add_media()
get_response().add_javascript(['jquery.js', 'qommon.forms.js', 'qommon.map.js'])
- self.html_top(get_publisher().translate(self.formdef.name))
+ get_response().set_title(get_publisher().translate(self.formdef.name))
get_response().filter['page_title'] = self.filled.get_display_label()
context = {
'view': self,
@@ -670,7 +667,7 @@ class FormStatusPage(Directory, FormTemplateMixin):
get_response().add_javascript(['jquery.js', 'qommon.forms.js'])
audit('view', obj=self.filled)
- self.html_top('%s - %s' % (self.formdef.name, self.filled.id))
+ get_response().set_title('%s - %s' % (self.formdef.name, self.filled.id))
r = TemplateIO(html=True)
r += get_session().display_message()
r += htmltext(self.workflow_messages())
diff --git a/wcs/forms/preview.py b/wcs/forms/preview.py
index 2a3098033..1bded6855 100644
--- a/wcs/forms/preview.py
+++ b/wcs/forms/preview.py
@@ -14,7 +14,7 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see
.
-from quixote import get_publisher
+from quixote import get_publisher, get_response
from quixote.directory import AccessControlled, Directory
from quixote.html import TemplateIO, htmltext
@@ -38,7 +38,7 @@ class PreviewFormPage(FormPage):
return form
def submitted(self, *args, **kwargs):
- self.html_top(self.formdef.name)
+ get_response().set_title(self.formdef.name)
r = TemplateIO(html=True)
r += htmltext('
')
r += str(_('This was only a preview: form was not actually submitted.'))
diff --git a/wcs/forms/root.py b/wcs/forms/root.py
index fed70abbc..721231ce5 100644
--- a/wcs/forms/root.py
+++ b/wcs/forms/root.py
@@ -64,10 +64,6 @@ class SubmittedDraftException(Exception):
pass
-def html_top(title=None, page_title=None):
- template.html_top(title=title, default_org=_('Forms'), page_title=page_title)
-
-
def tryauth(url):
# tries to log the user in before redirecting to the asked url; this won't
# do anything for local logins but will use a passive SAML request when
@@ -144,7 +140,6 @@ class TrackingCodeDirectory(Directory):
emails.custom_template_email('tracking-code-reminder', data, email, fire_and_forget=True)
return redirect('./load')
- html_top()
r = TemplateIO(html=True)
try:
tracking_code = get_publisher().tracking_code_class.get(self.code)
@@ -223,7 +218,7 @@ class TrackingCodeDirectory(Directory):
break
if not form.is_submitted() or form.has_errors() or bad_content:
- html_top(title=_('Access rights verification'))
+ get_response().set_title(_('Access rights verification'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Access rights verification')
r += htmltext('
%s
') % ngettext(
@@ -307,9 +302,6 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
url += '?' + get_request().get_query()
return redirect(url)
- def html_top(self, *args, **kwargs):
- html_top(*args, **kwargs)
-
def get_substitution_variables(self):
return self.substvars
@@ -536,7 +528,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
def set_page_title(self):
step_context = self.step_context()
if len(step_context.get('page_labels')) > 1:
- self.html_top(
+ get_response().set_title(
title=get_publisher().translate(self.formdef.name),
page_title='%s - %s/%s - %s'
% (
@@ -547,7 +539,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
),
)
else:
- self.html_top(
+ get_response().set_title(
title=get_publisher().translate(self.formdef.name),
page_title='%s - %s'
% (
@@ -964,7 +956,7 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
if get_session().get_authentication_context() in self.formdef.required_authentication_contexts:
return
- self.html_top(get_publisher().translate(self.formdef.name))
+ get_response().set_title(get_publisher().translate(self.formdef.name))
r = TemplateIO(html=True)
r += self.form_side()
auth_contexts = get_publisher().get_supported_authentication_contexts()
@@ -2036,7 +2028,7 @@ class RootDirectory(AccessControlled, Directory):
)
)
- template.html_top(default_org=_('Forms'))
+ get_response().set_title(_('Forms'))
r = TemplateIO(html=True)
session = get_session()
@@ -2275,7 +2267,7 @@ class RootDirectory(AccessControlled, Directory):
raise errors.TraversalError()
if get_request().is_json():
return self.categories_json()
- template.html_top(_('Categories'))
+ get_response().set_title(_('Categories'))
r = TemplateIO(html=True)
user = get_request().user
for category in self.get_categories(user):
diff --git a/wcs/qommon/admin/emails.py b/wcs/qommon/admin/emails.py
index 351044b98..9d28b3e4b 100644
--- a/wcs/qommon/admin/emails.py
+++ b/wcs/qommon/admin/emails.py
@@ -20,7 +20,6 @@ from quixote.html import TemplateIO, htmltext
from .. import _, get_cfg
from ..admin.cfg import cfg_submit
-from ..backoffice.menu import html_top
from ..form import CheckboxWidget, Form, StringWidget, TextWidget, WidgetList
@@ -145,7 +144,7 @@ class EmailsDirectory(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
- html_top('settings', title=_('Emails'))
+ get_response().set_title(_('Emails'))
get_response().breadcrumb.append(('options', _('General Options')))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('General Options')
@@ -178,7 +177,7 @@ class EmailsDirectory(Directory):
return redirect('.')
def _q_index(self):
- html_top('settings', title=_('Emails'))
+ get_response().set_title(_('Emails'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Emails')
@@ -255,7 +254,7 @@ class EmailsDirectory(Directory):
form.set_error(cfg_key, _('Invalid template'))
get_response().breadcrumb.append((email_key, email_label))
- html_top('settings', title=_('Emails'))
+ get_response().set_title(_('Emails'))
r = TemplateIO(html=True)
r += htmltext('
%s - %s
') % (_('Email'), email_label)
r += form.render()
diff --git a/wcs/qommon/admin/menu.py b/wcs/qommon/admin/menu.py
index 45f8106a4..abdd3493a 100644
--- a/wcs/qommon/admin/menu.py
+++ b/wcs/qommon/admin/menu.py
@@ -16,11 +16,10 @@
import re
-from quixote import get_publisher, get_request
+from quixote import get_publisher, get_request, get_response
from quixote.html import TemplateIO, htmltext
from .. import _
-from ..backoffice.menu import html_top
def _find_vc_version():
@@ -137,8 +136,8 @@ def command_icon(url, type, label=None, popup=False):
)
-def error_page(section, error):
- html_top(section, title=_('Error'))
+def error_page(error):
+ get_response().set_title(_('Error'))
r = TemplateIO(html=True)
r += htmltext('
')
r += htmltext('
%s
') % _('Error')
diff --git a/wcs/qommon/admin/texts.py b/wcs/qommon/admin/texts.py
index a7511a9fa..6579d9700 100644
--- a/wcs/qommon/admin/texts.py
+++ b/wcs/qommon/admin/texts.py
@@ -21,7 +21,6 @@ from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from wcs.qommon import _, ezt, get_cfg
-from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import Form, WysiwygTextWidget
from wcs.qommon.template import Template
@@ -69,11 +68,8 @@ class TextsDirectory(Directory):
'condition': condition,
}
- def html_top(self, title):
- html_top('settings', title)
-
def _q_index(self):
- self.html_top(title=_('Texts'))
+ get_response().set_title(_('Texts'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Custom Texts')
@@ -141,7 +137,7 @@ class TextsDirectory(Directory):
form.set_error(cfg_key, _('Invalid template'))
get_response().breadcrumb.append((text_key, text_label))
- self.html_top(title=_('Texts'))
+ get_response().set_title(_('Texts'))
r = TemplateIO(html=True)
r += htmltext('
%s - %s
') % (_('Text'), text_label)
r += form.render()
diff --git a/wcs/qommon/backoffice/__init__.py b/wcs/qommon/backoffice/__init__.py
deleted file mode 100644
index 7d271cd20..000000000
--- a/wcs/qommon/backoffice/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# w.c.s. - web application for online forms
-# Copyright (C) 2005-2010 Entr'ouvert
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see
.
-
-from .root import BackofficeRootDirectory
diff --git a/wcs/qommon/backoffice/menu.py b/wcs/qommon/backoffice/menu.py
deleted file mode 100644
index 9e14f993b..000000000
--- a/wcs/qommon/backoffice/menu.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# w.c.s. - web application for online forms
-# Copyright (C) 2005-2010 Entr'ouvert
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see
.
-
-from quixote import get_publisher, get_response
-
-from .. import get_cfg
-
-
-def generate_header_menu(selected=None):
- return get_publisher().get_backoffice_root().generate_header_menu(selected=selected)
-
-
-def html_top(section, title=None, scripts=None, page_title=None):
- header_menu = generate_header_menu(section)
- if not scripts:
- script = ''
- else:
- script = '\n'.join(['' % x for x in scripts])
-
- org_name = get_cfg('sp', {}).get('organization_name', get_publisher().APP_NAME)
- site_name = get_cfg('misc', {}).get('sitename', org_name)
-
- get_response().filter.update(locals())
diff --git a/wcs/qommon/errors.py b/wcs/qommon/errors.py
index f7fd7c0f4..da2bee030 100644
--- a/wcs/qommon/errors.py
+++ b/wcs/qommon/errors.py
@@ -17,7 +17,7 @@
import urllib.parse
import quixote
-from quixote import get_publisher
+from quixote import get_publisher, get_response
from quixote.errors import AccessError, PublishError, TraversalError
from quixote.html import TemplateIO, htmltext
@@ -86,7 +86,7 @@ class InternalServerError(PublishError):
def render(self):
from . import _
- template.html_top(_('Technical error'))
+ get_response().set_title(_('Technical error'))
r = TemplateIO(html=True)
r += htmltext('
')
diff --git a/wcs/qommon/http_response.py b/wcs/qommon/http_response.py
index f93b2858c..e9896540c 100644
--- a/wcs/qommon/http_response.py
+++ b/wcs/qommon/http_response.py
@@ -33,6 +33,7 @@ class HTTPResponse(quixote.http_response.HTTPResponse):
quixote.http_response.HTTPResponse.__init__(self, charset=charset, **kwargs)
if not charset:
self.charset = get_publisher().site_charset
+ self.filter = {}
def _gen_cookie_headers(self):
return []
@@ -189,3 +190,10 @@ class HTTPResponse(quixote.http_response.HTTPResponse):
def process_after_jobs(self):
for job in self.after_jobs or []:
job.run(spool=True)
+
+ def set_backoffice_section(self, section):
+ self.filter['backoffice_section'] = section
+
+ def set_title(self, title, page_title=None):
+ self.filter['title'] = title
+ self.filter['page_title'] = page_title
diff --git a/wcs/qommon/ident/franceconnect.py b/wcs/qommon/ident/franceconnect.py
index d81b05816..78aa3f7f6 100644
--- a/wcs/qommon/ident/franceconnect.py
+++ b/wcs/qommon/ident/franceconnect.py
@@ -20,7 +20,7 @@ import urllib.parse
import uuid
from django.utils.encoding import force_bytes
-from quixote import get_publisher, get_request, get_session, get_session_manager, redirect
+from quixote import get_publisher, get_request, get_response, get_session, get_session_manager, redirect
from quixote.directory import Directory
from quixote.errors import QueryError
from quixote.html import TemplateIO, htmltext
@@ -29,7 +29,6 @@ from wcs.formdata import flatten_dict
from wcs.workflows import WorkflowStatusItem
from .. import _, get_cfg, template
-from ..backoffice.menu import html_top
from ..form import (
CompositeWidget,
ComputedExpressionWidget,
@@ -232,7 +231,7 @@ class MethodAdminDirectory(Directory):
if 'submit' in get_request().form and form.is_submitted() and not form.has_errors():
return self.submit(form)
- html_top('settings', title=self.title)
+ get_response().set_title(self.title)
r = TemplateIO(html=True)
r += htmltext('
%s
') % self.title
fc_callback = pub.get_frontoffice_url() + '/ident/fc/callback'
diff --git a/wcs/qommon/ident/idp.py b/wcs/qommon/ident/idp.py
index 9c4a04499..ee1e56e87 100644
--- a/wcs/qommon/ident/idp.py
+++ b/wcs/qommon/ident/idp.py
@@ -31,7 +31,6 @@ from quixote.html import TemplateIO, htmltext
from .. import _, errors, get_cfg, misc, saml2utils, template, x509utils
from ..admin.menu import command_icon
-from ..backoffice.menu import html_top
from ..form import (
CheckboxWidget,
EmailWidget,
@@ -125,7 +124,7 @@ class MethodDirectory(Directory):
saml = get_publisher().root_directory_class.saml
return saml.perform_login(idp)
- template.html_top(_('Login'))
+ get_response().set_title(_('Login'))
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Select the identity provider you want to use.')
r += form.render()
@@ -170,7 +169,7 @@ class MethodDirectory(Directory):
return tmp
get_response().breadcrumb.append(('register', _('New Account')))
- template.html_top(_('New Account'))
+ get_response().set_title(_('New Account'))
r = TemplateIO(html=True)
r += form.render()
return r.getvalue()
@@ -211,7 +210,7 @@ class AdminIDPDir(Directory):
return Directory._q_traverse(self, path)
def _q_index(self):
- html_top('settings', title=self.title)
+ get_response().set_title(self.title)
r = TemplateIO(html=True)
r += htmltext('
%s
') % _('Identity Providers')
r += htmltext('
\n')
@@ -328,7 +327,7 @@ class AdminIDPDir(Directory):
form = self.get_form()
if not ('submit' in get_request().form and form.is_submitted()) or form.has_errors():
- html_top('settings', title=_('New Identity Provider'))
+ get_response().set_title(_('New Identity Provider'))
r = TemplateIO(html=True)
r += htmltext('%s
') % _('New Identity Provider')
r += form.render()
@@ -507,7 +506,7 @@ class AdminIDPDir(Directory):
os.unlink(metadata_pathname)
get_response().breadcrumb.append(('new_remote', _('New')))
- html_top('settings', title=_('New Identity Provider'))
+ get_response().set_title(_('New Identity Provider'))
r = TemplateIO(html=True)
r += htmltext('%s
') % _('New Identity Provider')
r += form.render()
@@ -597,7 +596,7 @@ class AdminIDPUI(Directory):
misc.get_abs_path(self.idp.get('publickey')),
misc.get_abs_path(self.idp.get('cacertchain', None)),
)
- html_top('settings', title=_('Identity Provider'))
+ get_response().set_title(_('Identity Provider'))
r = TemplateIO(html=True)
r += htmltext('%s - %s
') % (_('Identity Provider'), p.providerId)
r += htmltext('