misc: replace html_top by response methods (#77144)
gitea/wcs/pipeline/head This commit looks good Details

This commit is contained in:
Frédéric Péters 2023-04-29 11:12:34 +02:00
parent 886225ffff
commit df35bc818f
48 changed files with 278 additions and 413 deletions

View File

@ -22,7 +22,6 @@ from quixote.html import TemplateIO, htmltext
from wcs.api_access import ApiAccess
from wcs.qommon import _, errors, template
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import (
CheckboxWidget,
Form,
@ -130,7 +129,7 @@ class ApiAccessPage(Directory):
get_response().breadcrumb.append((component + '/', self.api_access.name))
def _q_index(self):
html_top('api-accesss', title=self.api_access.name)
get_response().set_title(self.api_access.name)
return template.QommonTemplateResponse(
templates=['wcs/backoffice/api_access.html'],
context={'view': self, 'api_access': self.api_access},
@ -150,7 +149,7 @@ class ApiAccessPage(Directory):
return redirect('../%s/' % self.api_access.id)
get_response().breadcrumb.append(('edit', _('Edit')))
html_top('api-access', title=_('Edit API access'))
get_response().set_title(_('Edit API access'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Edit API access')
r += form.render()
@ -167,7 +166,7 @@ class ApiAccessPage(Directory):
return redirect('..')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
html_top('api_accesss', title=_('Delete API access'))
get_response().set_title(_('Delete API access'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (_('Deleting API access:'), self.api_access.name)
r += form.render()
@ -182,10 +181,11 @@ class ApiAccessDirectory(Directory):
def _q_traverse(self, path):
get_response().breadcrumb.append(('api-access/', _('API access')))
get_response().set_backoffice_section('api-access')
return super()._q_traverse(path)
def _q_index(self):
html_top('api-access', title=_('API access'))
get_response().set_title(_('API access'))
return template.QommonTemplateResponse(
templates=['wcs/backoffice/api_accesses.html'],
context={'view': self, 'api_accesses': ApiAccess.select(order_by='name')},
@ -206,7 +206,7 @@ class ApiAccessDirectory(Directory):
else:
return redirect('.')
html_top('api-access', title=_('New API access'))
get_response().set_title(_('New API access'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('New API access')
r += form.render()

View File

@ -27,7 +27,6 @@ from wcs.blocks import BlockDef, BlockdefImportError
from wcs.categories import BlockCategory
from wcs.formdef import UpdateStatisticsDataAfterJob
from wcs.qommon import _, misc, template
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.errors import AccessForbiddenError, TraversalError
from wcs.qommon.form import FileWidget, Form, HtmlWidget, SingleSelectWidget, SlugWidget, StringWidget
@ -65,11 +64,10 @@ class BlockDirectory(FieldsDirectory):
fields_count_total_soft_limit = 30
fields_count_total_hard_limit = 60
def __init__(self, section='forms', *args, **kwargs):
def __init__(self, *args, **kwargs):
kwargs.pop('component', None) # snapshot
if 'instance' in kwargs:
kwargs['objectdef'] = kwargs.pop('instance')
self.section = section
super().__init__(*args, **kwargs)
self.snapshots_dir = SnapshotsDirectory(self.objectdef)
@ -136,7 +134,7 @@ class BlockDirectory(FieldsDirectory):
return redirect('..')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
html_top(self.section, title=_('Delete Block'))
get_response().set_title(_('Delete Block'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (_('Deleting Block:'), self.objectdef.name)
r += form.render()
@ -164,7 +162,7 @@ class BlockDirectory(FieldsDirectory):
name_widget.set_value(new_name)
if not form.is_submitted() or form.has_errors():
html_top(self.section, title=_('Duplicate Fields Block'))
get_response().set_title(_('Duplicate Fields Block'))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('duplicate', _('Duplicate')))
r += htmltext('<h2>%s</h2>') % _('Duplicate Fields Block')
@ -244,14 +242,14 @@ class BlockDirectory(FieldsDirectory):
self.objectdef.store()
return redirect('.')
html_top(self.section, title=_('Settings'))
get_response().set_title(_('Settings'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Settings')
r += form.render()
return r.getvalue()
def inspect(self):
self.html_top(self.objectdef.name)
get_response().set_title(self.objectdef.name)
get_response().breadcrumb.append(('inspect', _('Inspector')))
return self.render_inspect()
@ -267,9 +265,8 @@ class BlocksDirectory(Directory):
do_not_call_in_templates = True
categories = BlockCategoriesDirectory()
def __init__(self, section):
def __init__(self):
super().__init__()
self.section = section
self.applications_dir = ApplicationsDirectory(BlockDef.xml_root_node)
def _q_traverse(self, path):
@ -283,12 +280,12 @@ class BlocksDirectory(Directory):
block = BlockDef.get(component)
except KeyError:
raise TraversalError()
return BlockDirectory(self.section, block)
return BlockDirectory(block)
def _q_index(self):
from wcs.applications import Application
html_top(self.section, title=_('Fields Blocks'))
get_response().set_title(_('Fields Blocks'))
get_response().add_javascript(['popup.js'])
context = {
'view': self,
@ -341,7 +338,7 @@ class BlocksDirectory(Directory):
return redirect('%s/' % block.id)
get_response().breadcrumb.append(('new', _('New Fields Block')))
html_top(self.section, title=_('New Fields Block'))
get_response().set_title(_('New Fields Block'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('New Fields Block')
r += form.render()
@ -364,7 +361,7 @@ class BlocksDirectory(Directory):
pass
get_response().breadcrumb.append(('import', _('Import')))
html_top(self.section, title=_('Import Fields Block'))
get_response().set_title(_('Import Fields Block'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Import Fields Block')
r += htmltext('<p>%s</p>') % _('You can install a new fields block by uploading a file.')

View File

@ -37,7 +37,6 @@ from wcs.data_sources import NamedDataSource
from wcs.formdef import FormDef
from wcs.mail_templates import MailTemplate
from wcs.qommon import _, misc, template
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.errors import AccessForbiddenError, TraversalError
from wcs.qommon.form import Form, HtmlWidget, SingleSelectWidget, StringWidget, WidgetList, WysiwygTextWidget
from wcs.workflows import Workflow
@ -215,7 +214,7 @@ class CategoryPage(Directory):
get_response().breadcrumb.append((component + '/', self.category.name))
def _q_index(self):
html_top('categories', title=self.category.name)
get_response().set_title(self.category.name)
get_response().add_javascript(['popup.js'])
get_response().filter['sidebar'] = self.get_sidebar()
return template.QommonTemplateResponse(
@ -253,7 +252,7 @@ class CategoryPage(Directory):
return redirect('..')
get_response().breadcrumb.append(('edit', _('Edit')))
html_top('categories', title=_('Edit Category'))
get_response().set_title(_('Edit Category'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Edit Category')
r += form.render()
@ -268,7 +267,7 @@ class CategoryPage(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
html_top('categories', title=_('Delete Category'))
get_response().set_title(_('Delete Category'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (_('Deleting Category:'), self.category.name)
r += form.render()
@ -296,7 +295,7 @@ class CategoryPage(Directory):
return redirect('.')
get_response().breadcrumb.append(('description', _('Description')))
html_top('categories', title=_('Edit Category Description'))
get_response().set_title(_('Edit Category Description'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Edit Category Description')
r += form.render()
@ -377,7 +376,7 @@ class CategoriesDirectory(Directory):
from wcs.applications import Application
get_response().add_javascript(['biglist.js', 'qommon.wysiwyg.js', 'popup.js'])
html_top('categories', title=_('Categories'))
get_response().set_title(_('Categories'))
categories = self.category_class.select()
self.category_class.sort_by_position(categories)
Application.populate_objects(categories)
@ -420,7 +419,7 @@ class CategoriesDirectory(Directory):
else:
return redirect('.')
html_top('categories', title=_('New Category'))
get_response().set_title(_('New Category'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('New Category')
r += form.render()

View File

@ -25,7 +25,6 @@ from wcs.backoffice.snapshots import SnapshotsDirectory
from wcs.categories import CommentTemplateCategory
from wcs.comment_templates import CommentTemplate
from wcs.qommon import _, errors, misc, template
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import (
ComputedExpressionWidget,
FileWidget,
@ -61,7 +60,7 @@ class CommentTemplatesDirectory(Directory):
def _q_index(self):
from wcs.applications import Application
html_top('comment_templates', title=_('Comment Templates'))
get_response().set_title(_('Comment Templates'))
get_response().add_javascript(['popup.js'])
comment_templates = CommentTemplate.select(order_by='name')
Application.populate_objects(comment_templates)
@ -114,7 +113,7 @@ class CommentTemplatesDirectory(Directory):
return redirect('%s/edit' % comment_template.id)
get_response().breadcrumb.append(('new', _('New Comment Template')))
html_top('comment_templates', title=_('New Comment Template'))
get_response().set_title(_('New Comment Template'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('New Comment Template')
r += form.render()
@ -138,7 +137,7 @@ class CommentTemplatesDirectory(Directory):
pass
get_response().breadcrumb.append(('import', _('Import')))
html_top('comment_templates', title=import_title)
get_response().set_title(import_title)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % import_title
r += htmltext('<p>%s</p>') % _('You can install a new comment template by uploading a file.')
@ -205,7 +204,7 @@ class CommentTemplatePage(Directory):
return r.getvalue()
def _q_index(self):
html_top('comment_templates', title=self.comment_template.name)
get_response().set_title(self.comment_template.name)
get_response().filter['sidebar'] = self.get_sidebar()
return template.QommonTemplateResponse(
templates=['wcs/backoffice/comment-template.html'],
@ -309,7 +308,7 @@ class CommentTemplatePage(Directory):
return redirect('.')
get_response().breadcrumb.append(('edit', _('Edit')))
html_top('comment_templates', title=_('Edit Comment Template'))
get_response().set_title(_('Edit Comment Template'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Edit Comment Template')
r += form.render()
@ -333,7 +332,7 @@ class CommentTemplatePage(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
html_top('comment_templates', title=_('Delete Comment Template'))
get_response().set_title(_('Delete Comment Template'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (_('Deleting Comment Template:'), self.comment_template.name)
r += form.render()
@ -368,7 +367,7 @@ class CommentTemplatePage(Directory):
name_widget.set_value(new_name)
if not form.is_submitted() or form.has_errors():
html_top('comment_templates', title=_('Duplicate Comment Template'))
get_response().set_title(_('Duplicate Comment Template'))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('duplicate', _('Duplicate')))
r += htmltext('<h2>%s</h2>') % _('Duplicate Comment Template')

View File

@ -33,7 +33,6 @@ from wcs.data_sources import (
)
from wcs.formdef import get_formdefs_of_all_kinds
from wcs.qommon import _, errors, misc, pgettext, template
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.errors import AccessForbiddenError
from wcs.qommon.form import (
CheckboxWidget,
@ -341,7 +340,7 @@ class NamedDataSourcePage(Directory):
return r.getvalue()
def _q_index(self):
html_top('datasources', title=self.datasource.name)
get_response().set_title(self.datasource.name)
get_response().filter['sidebar'] = self.get_sidebar()
url = None
if self.datasource.data_source and self.datasource.data_source.get('type') in (
@ -426,7 +425,7 @@ class NamedDataSourcePage(Directory):
return redirect('.')
get_response().breadcrumb.append(('edit', _('Edit')))
html_top('datasources', title=_('Edit Data Source'))
get_response().set_title(_('Edit Data Source'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Edit Data Source')
r += form.render()
@ -448,7 +447,7 @@ class NamedDataSourcePage(Directory):
return redirect('..')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
html_top('datasources', title=_('Delete Data Source'))
get_response().set_title(_('Delete Data Source'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (_('Deleting Data Source:'), self.datasource.name)
r += form.render()
@ -475,7 +474,7 @@ class NamedDataSourcePage(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('duplicate', _('Duplicate')))
html_top('datasources', title=_('Duplicate Data Source'))
get_response().set_title(_('Duplicate Data Source'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (_('Duplicating Data Source:'), self.datasource.name)
r += form.render()
@ -520,7 +519,7 @@ class NamedDataSourcesDirectory(Directory):
def _q_index(self):
from wcs.applications import Application
html_top('datasources', title=_('Data Sources'))
get_response().set_title(_('Data Sources'))
get_response().add_javascript(['popup.js'])
context = {
'view': self,
@ -599,7 +598,7 @@ class NamedDataSourcesDirectory(Directory):
else:
return redirect('.')
html_top('datasources', title=title)
get_response().set_title(title)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % title
r += form.render()
@ -637,7 +636,7 @@ class NamedDataSourcesDirectory(Directory):
pass
get_response().breadcrumb.append(('import', _('Import')))
html_top('datasources', title=import_title)
get_response().set_title(import_title)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % import_title
r += htmltext('<p>%s</p>') % _('You can install a new data source by uploading a file.')

View File

@ -28,7 +28,6 @@ from wcs.fields import BlockField, get_field_options
from wcs.formdef import FormDef, UpdateStatisticsDataAfterJob
from wcs.qommon import _, errors, get_cfg, misc
from wcs.qommon.admin.menu import command_icon
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import CheckboxWidget, Form, HtmlWidget, OptGroup, SingleSelectWidget, StringWidget
from wcs.qommon.substitution import CompatibilityNamesDict
@ -89,7 +88,7 @@ class FieldDefPage(Directory):
redo = True
if redo or not form.get_submit() == 'submit':
self.html_top(self.objectdef.name)
get_response().set_title(self.objectdef.name)
r = TemplateIO(html=True)
r += htmltext('<h2 class="field-edit--title">%s</h2>') % misc.ellipsize(
self.field.unhtmled_label, 80
@ -194,7 +193,7 @@ class FieldDefPage(Directory):
return self.redirect_field_anchor(self.field)
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
self.html_top(title=remove_top_title)
get_response().set_title(title=remove_top_title)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % remove_title
r += form.render()
@ -257,7 +256,7 @@ class FieldDefPage(Directory):
return self.redirect_field_anchor(self.field)
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('duplicate', _('Duplicate')))
self.html_top(title=duplicate_top_title)
get_response().set_title(title=duplicate_top_title)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % duplicate_title
r += form.render()
@ -295,7 +294,6 @@ class FieldsPagesDirectory(Directory):
def _q_lookup(self, component):
directory = FieldsDirectory(self.parent.objectdef)
directory.field_var_prefix = self.parent.field_var_prefix
directory.html_top = self.parent.html_top
try:
directory.page_id = str(component)
except ValueError:
@ -317,9 +315,6 @@ class FieldsDirectory(Directory):
fields_count_total_soft_limit = 200
fields_count_total_hard_limit = 400
def html_top(self, title, *args, **kwargs):
html_top(self.section, title, *args, **kwargs)
def __init__(self, objectdef):
self.objectdef = objectdef
self.pages = FieldsPagesDirectory(self)
@ -333,12 +328,11 @@ class FieldsDirectory(Directory):
def _q_lookup(self, component):
d = self.field_def_page_class(self.objectdef, component)
d.html_top = self.html_top
d.page_id = self.page_id
return d
def _q_index(self):
self.html_top(self.objectdef.name)
get_response().set_title(self.objectdef.name)
get_response().add_javascript(['jquery.js', 'jquery-ui.js', 'biglist.js'])
r = TemplateIO(html=True)

View File

@ -36,7 +36,6 @@ from wcs.formdef import (
)
from wcs.forms.root import qrcode
from wcs.qommon import _, force_str, misc, pgettext_lazy, template
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.errors import AccessForbiddenError, TraversalError
from wcs.qommon.form import (
CheckboxesWidget,
@ -535,7 +534,7 @@ class OptionsDirectory(Directory):
self.formdef.store(comment=_('Changed "%s" parameters') % title)
return redirect('..')
html_top('forms', title=self.formdef.name)
get_response().set_title(self.formdef.name)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % title
r += form.render()
@ -587,7 +586,7 @@ class WorkflowRoleDirectory(Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('role/%s' % component, _('Workflow Role')))
self.html_top(title=self.formdef.name)
get_response().set_title(title=self.formdef.name)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Role')
r += htmltext('<p>%s</p>') % self.formdef.workflow.roles.get(component)
@ -663,9 +662,7 @@ class FormDefPage(Directory):
if component:
get_response().breadcrumb.append((component + '/', self.formdef.name))
self.fields = self.fields_directory_class(self.formdef)
self.fields.html_top = self.html_top
self.role = WorkflowRoleDirectory(self.formdef)
self.role.html_top = self.html_top
self.options = self.options_directory_class(self.formdef, self.formdefui)
self.tests = TestsDirectory(self.formdef)
self.logged_errors_dir = LoggedErrorsDirectory(
@ -673,9 +670,6 @@ class FormDefPage(Directory):
)
self.snapshots_dir = SnapshotsDirectory(self.formdef)
def html_top(self, title):
return html_top(self.section, title)
def add_option_line(self, link, label, current_value, popup=True):
return htmltext(
'<li><a rel="%(popup)s" href="%(link)s">'
@ -691,7 +685,7 @@ class FormDefPage(Directory):
)
def _q_index(self):
self.html_top(title=self.formdef.name)
get_response().set_title(title=self.formdef.name)
r = TemplateIO(html=True)
get_response().filter['sidebar'] = self.get_sidebar()
get_response().add_javascript(
@ -982,7 +976,7 @@ class FormDefPage(Directory):
return r.getvalue()
def public_url(self):
self.html_top(title=self.formdef.name)
get_response().set_title(title=self.formdef.name)
get_response().breadcrumb.append(('public-url', _('Public URL')))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>' % _('Public URL'))
@ -994,7 +988,7 @@ class FormDefPage(Directory):
return r.getvalue()
def qrcode(self):
self.html_top(title=self.formdef.name)
get_response().set_title(title=self.formdef.name)
get_response().breadcrumb.append(('qrcode', _('QR Code')))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>' % _('QR Code'))
@ -1035,7 +1029,7 @@ class FormDefPage(Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('roles', title))
self.html_top(title=self.formdef.name)
get_response().set_title(title=self.formdef.name)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % title
if description:
@ -1136,7 +1130,7 @@ class FormDefPage(Directory):
)
get_response().breadcrumb.append(('title', _('Title')))
self.html_top(title=self.formdef.name)
get_response().set_title(title=self.formdef.name)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Title')
r += form.render()
@ -1162,7 +1156,7 @@ class FormDefPage(Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('workflow', _('Workflow')))
self.html_top(title=self.formdef.name)
get_response().set_title(title=self.formdef.name)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Workflow')
r += htmltext('<p>%s</p>') % _('Select the workflow that will handle those forms.')
@ -1201,7 +1195,7 @@ class FormDefPage(Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('workflow-status-remapping', _('Workflow Status Remapping')))
self.html_top(title=self.formdef.name)
get_response().set_title(title=self.formdef.name)
r = TemplateIO(html=True)
r += htmltext('<p>')
r += str(
@ -1287,7 +1281,7 @@ class FormDefPage(Directory):
name_widget.set_value(new_name)
if not form.is_submitted() or form.has_errors():
self.html_top(title=self.duplicate_title)
get_response().set_title(title=self.duplicate_title)
r = TemplateIO(html=True)
get_response().breadcrumb.append(('duplicate', _('Duplicate')))
r += htmltext('<h2>%s</h2>') % self.duplicate_title
@ -1330,7 +1324,7 @@ class FormDefPage(Directory):
return redirect('..')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
self.html_top(title=self.delete_title)
get_response().set_title(title=self.delete_title)
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (self.delete_title, self.formdef.name)
r += form.render()
@ -1363,7 +1357,7 @@ class FormDefPage(Directory):
pass
get_response().breadcrumb.append(('overwrite', _('Overwrite')))
self.html_top(title=_('Overwrite'))
get_response().set_title(title=_('Overwrite'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Overwrite')
r += htmltext('<p>%s</p>') % self.overwrite_message
@ -1461,7 +1455,7 @@ class FormDefPage(Directory):
return incompatible_field_ids
def overwrite_warning_summary(self, new_formdef):
self.html_top(title=_('Overwrite'))
get_response().set_title(title=_('Overwrite'))
get_response().breadcrumb.append(('overwrite', _('Overwrite')))
r = TemplateIO(html=True)
@ -1607,7 +1601,7 @@ class FormDefPage(Directory):
def workflow_variables(self):
if not self.formdef.workflow.variables_formdef:
raise TraversalError()
self.html_top(title=_('Options'))
get_response().set_title(title=_('Options'))
form = Form(enctype='multipart/form-data')
self.formdef.workflow.variables_formdef.add_fields_to_form(
@ -1636,7 +1630,7 @@ class FormDefPage(Directory):
if value:
return value.build_response()
self.html_top(title=_('Workflow Options'))
get_response().set_title(title=_('Workflow Options'))
form = Form(enctype='multipart/form-data')
pristine_workflow = Workflow.get(self.formdef.workflow_id)
for status in self.formdef.workflow.possible_status:
@ -1679,7 +1673,7 @@ class FormDefPage(Directory):
self.formdef.store(comment=_('Change in workflow options'))
def inspect(self):
self.html_top(self.formdef.name)
get_response().set_title(self.formdef.name)
get_response().breadcrumb.append(('inspect', _('Inspector')))
return self.render_inspect()
@ -1725,7 +1719,7 @@ class FormsDirectory(AccessControlled, Directory):
category_class = Category
categories = CategoriesDirectory()
blocks = BlocksDirectory(section='forms')
blocks = BlocksDirectory()
data_sources = NamedDataSourcesDirectoryInForms()
formdef_class = FormDef
formdef_page_class = FormDefPage
@ -1749,11 +1743,9 @@ class FormsDirectory(AccessControlled, Directory):
super().__init__(*args, **kwargs)
self.applications_dir = ApplicationsDirectory(self.formdef_class.xml_root_node)
def html_top(self, title):
return html_top(self.section, title)
def _q_traverse(self, path):
get_response().breadcrumb.append(('%s/' % self.section, self.top_title))
get_response().set_backoffice_section(self.section)
return super()._q_traverse(path)
def is_accessible(self, user):
@ -1772,7 +1764,7 @@ class FormsDirectory(AccessControlled, Directory):
def _q_index(self):
from wcs.applications import Application
self.html_top(title=self.top_title)
get_response().set_title(title=self.top_title)
get_response().add_javascript(['widget_list.js', 'select2.js', 'popup.js'])
context = {
@ -1848,7 +1840,7 @@ class FormsDirectory(AccessControlled, Directory):
else:
return redirect(str(formdef.id) + '/')
self.html_top(title=_('New Form'))
get_response().set_title(title=_('New Form'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('New Form')
r += form.render()
@ -1878,7 +1870,7 @@ class FormsDirectory(AccessControlled, Directory):
pass
get_response().breadcrumb.append(('import', _('Import')))
self.html_top(title=self.import_title)
get_response().set_title(title=self.import_title)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % self.import_title
r += htmltext('<p>%s</p>') % self.import_paragraph

View File

@ -36,7 +36,7 @@ class LoggedErrorDirectory(Directory):
def _q_index(self):
get_response().breadcrumb.append(('%s/' % self.error.id, self.error.summary))
self.parent_dir.html_top(_('Logged Errors - %s') % self.error.summary)
get_response().set_title(_('Logged Errors - %s') % self.error.summary)
get_response().filter['sidebar'] = self.get_sidebar()
return template.QommonTemplateResponse(
@ -208,7 +208,7 @@ class LoggedErrorsDirectory(Directory):
raise errors.AccessForbiddenError()
get_response().breadcrumb.append(('logged-errors/', _('Logged Errors')))
self.parent_dir.html_top(_('Logged Errors'))
get_response().set_title(_('Logged Errors'))
limit = misc.get_int_or_400(
get_request().form.get('limit', get_publisher().get_site_option('default-page-size')) or 20
)

View File

@ -25,7 +25,6 @@ from wcs.backoffice.snapshots import SnapshotsDirectory
from wcs.categories import MailTemplateCategory
from wcs.mail_templates import MailTemplate
from wcs.qommon import _, errors, misc, template
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import (
ComputedExpressionWidget,
FileWidget,
@ -61,7 +60,7 @@ class MailTemplatesDirectory(Directory):
def _q_index(self):
from wcs.applications import Application
html_top('mail_templates', title=_('Mail Templates'))
get_response().set_title(_('Mail Templates'))
get_response().add_javascript(['popup.js'])
mail_templates = MailTemplate.select(order_by='name')
Application.populate_objects(mail_templates)
@ -114,7 +113,7 @@ class MailTemplatesDirectory(Directory):
return redirect('%s/edit' % mail_template.id)
get_response().breadcrumb.append(('new', _('New Mail Template')))
html_top('mail_templates', title=_('New Mail Template'))
get_response().set_title(_('New Mail Template'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('New Mail Template')
r += form.render()
@ -138,7 +137,7 @@ class MailTemplatesDirectory(Directory):
pass
get_response().breadcrumb.append(('import', _('Import')))
html_top('mail_templates', title=import_title)
get_response().set_title(import_title)
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % import_title
r += htmltext('<p>%s</p>') % _('You can install a new mail template by uploading a file.')
@ -203,7 +202,7 @@ class MailTemplatePage(Directory):
return r.getvalue()
def _q_index(self):
html_top('mail_templates', title=self.mail_template.name)
get_response().set_title(self.mail_template.name)
get_response().filter['sidebar'] = self.get_sidebar()
return template.QommonTemplateResponse(
templates=['wcs/backoffice/mail-template.html'],
@ -315,7 +314,7 @@ class MailTemplatePage(Directory):
return redirect('.')
get_response().breadcrumb.append(('edit', _('Edit')))
html_top('mail_templates', title=_('Edit Mail Template'))
get_response().set_title(_('Edit Mail Template'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Edit Mail Template')
r += form.render()
@ -339,7 +338,7 @@ class MailTemplatePage(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
html_top('mail_templates', title=_('Delete Mail Template'))
get_response().set_title(_('Delete Mail Template'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (_('Deleting Mail Template:'), self.mail_template.name)
r += form.render()
@ -374,7 +373,7 @@ class MailTemplatePage(Directory):
name_widget.set_value(new_name)
if not form.is_submitted() or form.has_errors():
html_top('mail_templates', title=_('Duplicate Mail Template'))
get_response().set_title(_('Duplicate Mail Template'))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('duplicate', _('Duplicate')))
r += htmltext('<h2>%s</h2>') % _('Duplicate Mail Template')

View File

@ -20,7 +20,6 @@ from quixote.html import TemplateIO, htmltext
from wcs.formdef import FormDef
from wcs.qommon import _, errors, get_cfg
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import CheckboxWidget, Form, HtmlWidget, StringWidget, TextWidget, WidgetList
from wcs.roles import get_user_roles
@ -98,7 +97,7 @@ class RolePage(Directory):
get_response().breadcrumb.append((component + '/', self.role.name))
def _q_index(self):
html_top('roles', title=self.role.name)
get_response().set_title(self.role.name)
r = TemplateIO(html=True)
r += htmltext('<div id="appbar">')
@ -185,7 +184,7 @@ class RolePage(Directory):
return redirect('.')
get_response().breadcrumb.append(('edit', _('Edit')))
html_top('roles', title=_('Edit Role'))
get_response().set_title(_('Edit Role'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Edit Role')
r += form.render()
@ -200,7 +199,7 @@ class RolePage(Directory):
return redirect('.')
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('delete', _('Delete')))
html_top('roles', title=_('Delete Role'))
get_response().set_title(_('Delete Role'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s %s</h2>') % (_('Deleting Role:'), self.role.name)
r += form.render()
@ -213,12 +212,16 @@ class RolePage(Directory):
class RolesDirectory(Directory):
_q_exports = ["", "new"]
def _q_traverse(self, path):
get_response().breadcrumb.append(('roles/', _('Roles')))
get_response().set_backoffice_section('roles')
return super()._q_traverse(path)
def is_visible(self, *args):
return not (get_cfg('sp', {}).get('idp-manage-roles'))
def _q_index(self):
get_response().breadcrumb.append(('roles/', _('Roles')))
html_top('roles', title=_('Roles'))
get_response().set_title(_('Roles'))
r = TemplateIO(html=True)
r += htmltext('<div id="appbar">')
@ -246,7 +249,6 @@ class RolesDirectory(Directory):
return r.getvalue()
def new(self):
get_response().breadcrumb.append(('roles/', _('Roles')))
get_response().breadcrumb.append(('new', _('New')))
role_ui = RoleUI(None)
form = role_ui.get_form()
@ -261,12 +263,11 @@ class RolesDirectory(Directory):
else:
return redirect('.')
html_top('roles', title=_('New Role'))
get_response().set_title(_('New Role'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('New Role')
r += form.render()
return r.getvalue()
def _q_lookup(self, component):
get_response().breadcrumb.append(('roles/', _('Roles')))
return RolePage(component)

View File

@ -43,7 +43,6 @@ from wcs.qommon.admin.cfg import cfg_submit
from wcs.qommon.admin.emails import EmailsDirectory
from wcs.qommon.admin.texts import TextsDirectory
from wcs.qommon.afterjobs import AfterJob
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import (
CheckboxesTableWidget,
CheckboxesWidget,
@ -104,7 +103,7 @@ class IdentificationDirectory(Directory):
if not form.has_errors():
return redirect('..')
html_top('settings', title=_('Identification'))
get_response().set_title(_('Identification'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Identification')
if lasso is None:
@ -127,14 +126,12 @@ authentication is unavailable. Lasso must be installed to use it.'
class UserFieldDefPage(FieldDefPage):
section = 'settings'
blacklisted_attributes = ['condition']
class UserFieldsDirectory(FieldsDirectory):
_q_exports = ['', 'update_order', 'new', 'mapping', 'templates']
section = 'settings'
field_def_page_class = UserFieldDefPage
support_import = False
blacklisted_types = ['page', 'computed']
@ -378,7 +375,7 @@ class FileTypesDirectory(Directory):
return ', '.join(l) + ellipsis
def _q_index(self):
html_top('settings', title=_('File Types'))
get_response().set_title(_('File Types'))
filetypes_cfg = get_cfg('filetypes', {})
form = self.get_form()
@ -451,7 +448,7 @@ class FileTypesDirectory(Directory):
get_publisher().write_cfg()
return redirect('.')
html_top('settings', title=_('File Types'))
get_response().set_title(_('File Types'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s - %s</h2>') % (_('File Type'), filetype['label'])
r += form.render()
@ -494,6 +491,7 @@ class SettingsDirectory(AccessControlled, Directory):
def _q_access(self):
get_response().breadcrumb.append(('settings/', _('Settings')))
get_response().set_backoffice_section('settings')
disabled_screens_option = get_publisher().get_site_option('settings-disabled-screens') or ''
self.disabled_screens = [x.strip() for x in disabled_screens_option.split(',') if x.strip()]
@ -514,7 +512,7 @@ class SettingsDirectory(AccessControlled, Directory):
self._q_exports = q_exports
def _q_index(self):
html_top('settings', title=_('Settings'))
get_response().set_title(_('Settings'))
r = TemplateIO(html=True)
hidden_screens_option = get_publisher().get_site_option('settings-hidden-screens') or ''
@ -724,7 +722,7 @@ class SettingsDirectory(AccessControlled, Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('admin-permissions', _('Admin Permissions')))
html_top('settings', title=_('Admin Permissions'))
get_response().set_title(_('Admin Permissions'))
r = TemplateIO(html=True)
r += htmltext('<div class="admin-permissions">')
r += htmltext('<h2>%s</h2>') % _('Admin Permissions')
@ -781,7 +779,7 @@ class SettingsDirectory(AccessControlled, Directory):
if not form.is_submitted():
get_response().breadcrumb.append(('export', _('Export')))
html_top('settings', title=_('Export'))
get_response().set_title(_('Export'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Export')
r += form.render()
@ -951,7 +949,7 @@ class SettingsDirectory(AccessControlled, Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('import', _('Import')))
html_top('settings', title=_('Import'))
get_response().set_title(_('Import'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Import')
if FormDef.count() or CardDef.count() or Workflow.count():
@ -978,7 +976,7 @@ class SettingsDirectory(AccessControlled, Directory):
if e.details:
msg += ' [%s]' % e.details
reason = _('Failed to import a workflow (%s); site import did not complete.') % (msg)
html_top('settings', title=_('Import'))
get_response().set_title(_('Import'))
return template.QommonTemplateResponse(
templates=['wcs/backoffice/settings/import.html'],
context={'results': results, 'error': reason},
@ -1013,7 +1011,7 @@ class SettingsDirectory(AccessControlled, Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('sitename', _('Site Name and Addresses')))
html_top('settings', title=_('Site Name and Addresses'))
get_response().set_title(_('Site Name and Addresses'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Site Name and Addresses')
r += form.render()
@ -1024,7 +1022,7 @@ class SettingsDirectory(AccessControlled, Directory):
def sms(self):
get_response().breadcrumb.append(('sms', _('SMS')))
html_top('settings', title=_('SMS'))
get_response().set_title(_('SMS'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('SMS Options')
sms_cfg = get_cfg('sms', {})
@ -1105,7 +1103,7 @@ class SettingsDirectory(AccessControlled, Directory):
return redirect('.')
get_response().breadcrumb.append(('postgresql', _('PostgreSQL Settings')))
html_top('settings', title=_('PostgreSQL Settings'))
get_response().set_title(_('PostgreSQL Settings'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('PostgreSQL Settings')
r += form.render()
@ -1143,7 +1141,7 @@ class SettingsDirectory(AccessControlled, Directory):
return redirect('.')
get_response().breadcrumb.append(('geolocation', _('Geolocation Settings')))
html_top('settings', title=_('Geolocation Settings'))
get_response().set_title(_('Geolocation Settings'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Geolocation Settings')
r += form.render()
@ -1178,7 +1176,7 @@ $('#form_default-zoom-level').on('change', function() {
return redirect('.')
get_response().breadcrumb.append(('user-templates', _('Users')))
html_top('settings', title=_('Users'))
get_response().set_title(_('Users'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Users')
r += form.render()
@ -1251,7 +1249,7 @@ $('#form_default-zoom-level').on('change', function() {
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('language', _('Language')))
html_top('settings', title=_('Language'))
get_response().set_title(_('Language'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Language')
r += form.render()
@ -1297,7 +1295,7 @@ $('#form_default-zoom-level').on('change', function() {
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('debug_options', _('Debug Options')))
html_top('settings', title=_('Debug Options'))
get_response().set_title(_('Debug Options'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Debug Options')
r += form.render()

View File

@ -27,7 +27,6 @@ from wcs.backoffice.pagination import pagination_links
from wcs.forms.common import FormStatusPage
from wcs.qommon import _, misc, template
from wcs.qommon.afterjobs import AfterJob
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.errors import TraversalError
from wcs.qommon.form import FileWidget, Form, SingleSelectWidget, StringWidget
from wcs.sql_criterias import Equal
@ -127,9 +126,6 @@ class TestPage(FormBackOfficeStatusPage):
get_response().breadcrumb.append((str(self.testdef.id) + '/', str(self.testdef)))
return super(FormStatusPage, self)._q_traverse(path)
def html_top(self, title=None):
html_top('tests', '%s - %s' % (self.formdef.name, _('Tests')))
def should_fold_summary(self, mine, request_user):
return False
@ -237,7 +233,7 @@ class TestPage(FormBackOfficeStatusPage):
name_widget.set_value(new_name)
if not form.is_submitted() or form.has_errors():
html_top('duplicate_test', title=_('Duplicate test'))
get_response().set_title(_('Duplicate test'))
r = TemplateIO(html=True)
get_response().breadcrumb.append(('duplicate', _('Duplicate')))
r += htmltext('<h2>%s</h2>') % _('Duplicate test')
@ -261,7 +257,6 @@ class TestsDirectory(Directory):
def _q_traverse(self, path):
get_response().breadcrumb.append(('tests/', _('Tests')))
html_top('tests', '%s - %s' % (self.objectdef.name, _('Tests')))
return super()._q_traverse(path)
def _q_lookup(self, component):
@ -277,6 +272,7 @@ class TestsDirectory(Directory):
'has_sidebar': True,
}
get_response().add_javascript(['popup.js'])
get_response().set_title(_('Tests'))
return template.QommonTemplateResponse(
templates=['wcs/backoffice/tests.html'], context=context, is_django_native=True
)
@ -292,6 +288,7 @@ class TestsDirectory(Directory):
if not form.is_submitted() or form.has_errors():
get_response().breadcrumb.append(('new', _('New')))
get_response().set_title(_('New test'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('New test')
r += form.render()
@ -321,6 +318,7 @@ class TestsDirectory(Directory):
pass
get_response().breadcrumb.append(('import', _('Import')))
get_response().set_title(_('Import Test'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Import Test')
r += htmltext('<p>%s</p>') % _(
@ -382,7 +380,7 @@ class TestResultsDirectory(Directory):
def _q_traverse(self, path):
get_response().breadcrumb.append(('results/', _('Test results')))
html_top('test-results', '%s - %s' % (self.objectdef.name, _('Test results')))
get_response().set_title('%s - %s' % (self.objectdef.name, _('Test results')))
return super()._q_traverse(path)
def _q_lookup(self, component):

View File

@ -22,7 +22,6 @@ import wcs.sql_criterias as st
from wcs.backoffice.pagination import pagination_links
from wcs.qommon import _, errors, force_str, get_cfg, ident, misc
from wcs.qommon.admin.menu import error_page
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.form import (
CheckboxWidget,
EmailWidget,
@ -122,7 +121,7 @@ class UserPage(Directory):
get_response().breadcrumb.append((component + '/', self.user.display_name))
def _q_index(self):
html_top('users', '%s - %s' % (_('User'), self.user.display_name))
get_response().set_title('%s - %s' % (_('User'), self.user.display_name))
r = TemplateIO(html=True)
r += htmltext('<div id="appbar">')
r += htmltext('<h2>%s</h2>') % 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('<h2>%s</h2>') % _('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('<h2>%s %s</h2>') % (_('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('<h2>%s</h2>') % _('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:

View File

@ -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('<h2>%s</h2>') % 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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s - %s</h2>') % (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('<h2>%s</h2>') % _('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('<h2>%s %s</h2>') % (_('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('<h2>%s</h2>') % _('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('<h2>%s %s</h2>') % (_('Deleting Status:'), self.status.name)
r += htmltext('<div class="remove-status-form">')
@ -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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s %s</h2>') % (_('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s %s</h2>') % (_('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('Import Workflow')
r += htmltext('<p>%s</p>') % _(

View File

@ -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('<h2>%s</h2>') % _('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('<h2>%s %s</h2>') % (_('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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % import_title
r += htmltext('<p>%s</p>') % _('You can install a new webservice call by uploading a file.')

View File

@ -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

View File

@ -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('<h2>%s</h2>') % _('New Card Model')
r += form.render()

View File

@ -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

View File

@ -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}

View File

@ -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

View File

@ -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(),

View File

@ -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('<div id="appbar">')
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('<h2>%s - %s</h2>') % (self.formdef.name, view_name)
else:
html_top('management', self.formdef.name)
get_response().set_title(self.formdef.name)
r += htmltext('<h2>%s</h2>') % 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 = {}

View File

@ -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}
)

View File

@ -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('<h2>%s</h2>') % _('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'

View File

@ -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 = []

View File

@ -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('<p>%s</p>' % _('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()

View File

@ -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:

View File

@ -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())

View File

@ -14,7 +14,7 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
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('<div class="warningnotice"><p>')
r += str(_('This was only a preview: form was not actually submitted.'))

View File

@ -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('<h2>%s</h2>') % _('Access rights verification')
r += htmltext('<p>%s</p>') % 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):

View File

@ -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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s - %s</h2>') % (_('Email'), email_label)
r += form.render()

View File

@ -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('<div id="error-page">')
r += htmltext('<h2>%s</h2>') % _('Error')

View File

@ -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('<h2>%s</h2>') % _('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('<h2>%s - %s</h2>') % (_('Text'), text_label)
r += form.render()

View File

@ -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 <http://www.gnu.org/licenses/>.
from .root import BackofficeRootDirectory

View File

@ -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 <http://www.gnu.org/licenses/>.
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(['<script src="%s" type="text/javascript"></script>' % 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())

View File

@ -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('<p>')

View File

@ -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

View File

@ -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('<h2>%s</h2>') % self.title
fc_callback = pub.get_frontoffice_url() + '/ident/fc/callback'

View File

@ -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('<p>%s</p>') % _('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('<h2>%s</h2>') % _('Identity Providers')
r += htmltext('<ul id="nav-idp-admin">\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('<h2>%s</h2>') % _('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('<h2>%s</h2>') % _('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('<h2>%s - %s</h2>') % (_('Identity Provider'), p.providerId)
r += htmltext('<div class="form">')
@ -624,7 +623,7 @@ class AdminIDPUI(Directory):
form = AdminIDPDir.get_form(self.idp)
if not ('submit' in get_request().form and form.is_submitted()) or form.has_errors():
html_top('settings', title=_('Edit Identity Provider'))
get_response().set_title(_('Edit Identity Provider'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Edit Identity Provider')
r += form.render()
@ -655,7 +654,7 @@ class AdminIDPUI(Directory):
if form.get_widget('cancel').parse():
return redirect('..')
if not form.is_submitted() or form.has_errors():
html_top('settings', title=_('Identity Provider'))
get_response().set_title(_('Identity Provider'))
r = TemplateIO(html=True)
if p:
r += htmltext('<h2>%s %s</h2>') % (_('Deleting'), p.providerId)
@ -792,7 +791,7 @@ class MethodAdminDirectory(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('<h2>SAML 2.0</h2>')
r += htmltext('<dl> <dt><a href="sp">%s</a></dt> <dd>%s</dd>') % (
@ -935,7 +934,7 @@ class MethodAdminDirectory(Directory):
else:
return redirect('.')
html_top('settings', title=_('Service Provider Configuration'))
get_response().set_title(_('Service Provider Configuration'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Service Provider Configuration')
r += form.render()
@ -1083,7 +1082,7 @@ class MethodAdminDirectory(Directory):
return redirect('.')
get_response().breadcrumb.append(('identities', _('Identities Interface')))
html_top('settings', title=_('Identities Interface'))
get_response().set_title(_('Identities Interface'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Identities Interface')
r += form.render()

View File

@ -26,7 +26,6 @@ from .. import _, emails, errors, get_cfg, misc, ngettext
from .. import storage as st
from .. import template
from ..admin.emails import EmailsDirectory
from ..backoffice.menu import html_top
from ..form import (
CheckboxWidget,
CompositeWidget,
@ -165,11 +164,11 @@ class TokenDirectory(Directory):
r = TemplateIO(html=True)
if self.token.type is None:
template.html_top(_('Invalid Token'))
get_response().set_title(_('Invalid Token'))
r += TextsDirectory.get_html_text('invalid-password-token')
elif self.token.type == 'account-confirmation':
template.html_top(_('Account Creation Confirmed'))
get_response().set_title(_('Account Creation Confirmed'))
account = PasswordAccount.get(self.token.context['username'])
account.awaiting_confirmation = False
account.store()
@ -229,7 +228,7 @@ class MethodDirectory(Directory):
return tmp
get_response().breadcrumb.append(('login', _('Login')))
template.html_top(_('Login'))
get_response().set_title(_('Login'))
r = TemplateIO(html=True)
r += htmltext('<div class="ident-content">')
r += htmltext('<div id="login">')
@ -326,7 +325,7 @@ class MethodDirectory(Directory):
r = TemplateIO(html=True)
if not include_mode:
get_response().breadcrumb.append(('forgotten', _('Forgotten password')))
template.html_top(_('Forgotten password'))
get_response().set_title(_('Forgotten password'))
r += htmltext('<div class="ident-content">')
r += TextsDirectory.get_html_text('password-forgotten-enter-username')
@ -372,7 +371,7 @@ class MethodDirectory(Directory):
return None
def forgotten_token_sent():
template.html_top(_('Forgotten Password'))
get_response().set_title(_('Forgotten Password'))
r = TemplateIO(html=True)
r += htmltext('<div class="ident-content">')
r += TextsDirectory.get_html_text('password-forgotten-token-sent')
@ -398,7 +397,7 @@ class MethodDirectory(Directory):
)
if action == 'cxlpw':
template.html_top(_('Password Change'))
get_response().set_title(_('Password Change'))
r = TemplateIO(html=True)
r += htmltext('<div class="ident-content">')
r += htmltext('<h1>%s</h1>') % _('Request Cancelled')
@ -445,7 +444,7 @@ class MethodDirectory(Directory):
return tmp
return redirect('login/')
template.html_top(_('Password Change'))
get_response().set_title(_('Password Change'))
get_request().form = {}
return form.render()
@ -481,7 +480,7 @@ class MethodDirectory(Directory):
def forgotten_token_end_page(self):
r = TemplateIO(html=True)
r += htmltext('<div class="ident-content">')
r += template.html_top(_('New password sent by email'))
r += str(_('New password sent by email'))
r += htmltext('</div>')
return r.getvalue()
@ -536,7 +535,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 += htmltext('<div class="ident-content">')
r += TextsDirectory.get_html_text('new-account')
r += form.render()
@ -638,7 +637,7 @@ class MethodDirectory(Directory):
def confirmation_notification(self, account, user, password):
self.email_confirmation_notification(account, user, password)
template.html_top(_('Email sent'))
get_response().set_title(_('Email sent'))
r = TemplateIO(html=True)
r += htmltext('<div class="ident-content">')
r += TextsDirectory.get_html_text('email-sent-confirm-creation')
@ -680,7 +679,7 @@ class MethodAdminDirectory(Directory):
_q_exports = ['', 'passwords', 'identities']
def _q_index(self):
html_top('settings', title=ADMIN_TITLE)
get_response().set_title(ADMIN_TITLE)
get_response().breadcrumb.append(('password/', ADMIN_TITLE))
r = TemplateIO(html=True)
@ -778,7 +777,7 @@ class MethodAdminDirectory(Directory):
self.passwords_submit(form)
return redirect('.')
html_top('settings', title=_('Passwords'))
get_response().set_title(_('Passwords'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Passwords')
r += form.render()
@ -847,7 +846,7 @@ class MethodAdminDirectory(Directory):
self.identities_submit(form)
return redirect('.')
html_top('settings', title=_('Identities Interface'))
get_response().set_title(_('Identities Interface'))
r = TemplateIO(html=True)
r += htmltext('<h2>%s</h2>') % _('Identities Interface')
r += form.render()
@ -932,7 +931,7 @@ class MethodUserDirectory(Directory):
return actions
def email(self):
html_top('users', title=ADMIN_TITLE)
get_response().set_title(title=ADMIN_TITLE)
r = TemplateIO(html=True)
get_response().breadcrumb.append(('email', 'Email Password'))
r += htmltext('<h2>%s</h2>') % _('Email Password')

View File

@ -20,7 +20,7 @@ from quixote.html import TemplateIO, htmltext
from wcs.qommon.admin.texts import TextsDirectory
from . import _, errors, get_cfg, template
from . import _, errors, get_cfg
from .form import Form, HtmlWidget, PasswordWidget
from .ident.password import check_password
from .ident.password_accounts import PasswordAccount
@ -55,7 +55,7 @@ class MyspaceDirectory(Directory):
if not user:
raise errors.AccessUnauthorizedError()
template.html_top(_('My Space'))
get_response().set_title(_('My Space'))
r = TemplateIO(html=True)
if user.can_go_in_admin() or user.can_go_in_backoffice():
@ -118,7 +118,7 @@ class MyspaceDirectory(Directory):
self.profile_submit(form, formdef)
return redirect('.')
template.html_top(_('Edit Profile'))
get_response().set_title(_('Edit Profile'))
return form.render()
def profile_submit(self, form, formdef):
@ -164,7 +164,7 @@ class MyspaceDirectory(Directory):
account.store()
return redirect('.')
template.html_top(_('Change Password'))
get_response().set_title(_('Change Password'))
return form.render()
def remove(self):
@ -192,7 +192,7 @@ class MyspaceDirectory(Directory):
get_session_manager().expire_session()
return redirect(get_publisher().get_root_url())
template.html_top(_('Removing Account'))
get_response().set_title(_('Removing Account'))
return form.render()

View File

@ -40,7 +40,7 @@ from quixote.http_request import parse_header
from . import _, errors, force_str, misc
from .publisher import get_cfg, get_logger
from .template import QommonTemplateResponse, error_page, html_top
from .template import QommonTemplateResponse, error_page
class SOAPException(Exception):
@ -807,7 +807,7 @@ class Saml2Directory(Directory):
request = get_request()
if request.get_method() == 'POST':
return self.perform_login(relay_state=request.form.get('RelayState'))
html_top(title=_('Authentication error'))
get_response().set_title(_('Authentication error'))
return QommonTemplateResponse(templates=['qommon/saml-error.html'], context={})
# retain compatibility with old metadatas

View File

@ -49,27 +49,16 @@ def get_theme_directory(theme_id):
return location
def html_top(title=None, default_org=None, page_title=None):
if not hasattr(get_response(), 'filter'):
get_response().filter = {}
get_response().filter['title'] = title
get_response().filter['default_org'] = default_org
get_response().filter['page_title'] = page_title
def error_page(error_message, error_title=None, location_hint=None):
from . import _
if not error_title:
error_title = _('Error')
kwargs = {'title': error_title}
get_response().set_title(error_title)
if get_request().is_in_backoffice() and get_request().user and get_request().user.can_go_in_backoffice():
from wcs.qommon.backoffice.menu import html_top as backoffice_html_top
get_response().add_javascript(['jquery.js', 'qommon.js', 'gadjo.js'])
backoffice_html_top(section='', **kwargs)
context = get_decorate_vars('', get_response())
context['error_message'] = error_message
@ -78,7 +67,6 @@ def error_page(error_message, error_title=None, location_hint=None):
)
r = TemplateIO(html=True)
html_top(**kwargs)
r += htmltext('<div class="error-page">')
r += htmltext('<p>%s</p>') % error_message
continue_link = htmltext('<a href="%s">%s</a>') % (get_publisher().get_root_url(), _('the homepage'))
@ -142,10 +130,14 @@ def get_decorate_vars(body, response, generate_breadcrumb=True, **kwargs):
theme_url = '%sthemes/%s' % (root_url, current_theme)
is_in_backoffice = response.filter.get('admin_ezt')
is_in_backoffice = response.filter.get('backoffice_page')
if is_in_backoffice:
header_menu = kwargs.get('header_menu')
header_menu = (
get_publisher()
.get_backoffice_root()
.generate_header_menu(selected=kwargs.get('backoffice_section'))
)
user_info = kwargs.get('user_info')
page_title = kwargs.get('title', '')
subtitle = kwargs.get('subtitle')

View File

@ -291,8 +291,8 @@ class RootDirectory(Directory):
return output
response = get_response()
if not hasattr(response, 'filter'):
response.filter = {}
if not response.filter:
response.filter = {'default_org': _('Forms')}
if not hasattr(response, 'breadcrumb'):
response.breadcrumb = [('', _('Home'))]

View File

@ -15,7 +15,7 @@
<link rel="stylesheet" type="text/css" media="all" href="{{ STATIC_URL }}css/dc2/admin.css?{% version_hash %}"/>
{% endblock %}
{% block bodyargs %}class="section-{{section}} {% if admin_for_all %}admin-for-all{% endif %}"{% endblock %}
{% block bodyargs %}class="section-{{backoffice_section}} {% if admin_for_all %}admin-for-all{% endif %}"{% endblock %}
{% block logout-url %}{{ publisher.get_root_url }}logout{% endblock %}

View File

@ -35,7 +35,7 @@ class Backoffice(compat.TemplateWithFallbackView):
_request = None
with compat.request(self.request):
get_request().response.filter = {'admin_ezt': True}
get_request().response.filter = {'backoffice_page': True}
body = get_publisher().try_publish(get_request())
if isinstance(body, template.QommonTemplateResponse):
body.add_media()

View File

@ -251,7 +251,7 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
if self.formdef.max_field_id is None and self.formdef.fields:
self.formdef.max_field_id = max(lax_int(x.id) for x in self.formdef.fields)
def q_admin_lookup(self, workflow, status, component, html_top):
def q_admin_lookup(self, workflow, status, component):
if component == 'fields':
if not self.formdef:
self.formdef = WorkflowFormFieldsFormDef(item=self)
@ -260,7 +260,6 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
fields_directory = WorkflowFormFieldsDirectory(self.formdef)
if self.varname:
fields_directory.field_var_prefix = 'form_workflow_form_%s_var_' % self.varname
fields_directory.html_top = html_top
return fields_directory
return None

View File

@ -2942,7 +2942,7 @@ class WorkflowStatusItem(XmlSerialisable):
# backward compatibility
self.condition = {'type': 'python', 'value': xml_node_text(node)}
def q_admin_lookup(self, workflow, status, component, html_top):
def q_admin_lookup(self, workflow, status, component):
return None
def __getstate__(self):