general: use real gadjo for backoffice templates (#6735)
This commit is contained in:
parent
e9a2264c29
commit
b595a2d22e
|
@ -352,6 +352,8 @@ class ThemePreviewDirectory(Directory):
|
|||
root_directory = get_publisher().root_directory_class()
|
||||
|
||||
response = get_response()
|
||||
response.reset_includes()
|
||||
response.filter = {}
|
||||
del(response.breadcrumb)
|
||||
|
||||
if path[1] in ('backoffice', 'admin') or \
|
||||
|
@ -363,11 +365,11 @@ class ThemePreviewDirectory(Directory):
|
|||
|
||||
from qommon.template import decorate
|
||||
theme_preview = decorate(output, response)
|
||||
response.filter = None
|
||||
|
||||
# restore original branding in case it has been changed
|
||||
get_publisher().cfg['branding'] = original_branding
|
||||
get_publisher().write_cfg()
|
||||
response.filter['raw'] = True
|
||||
|
||||
return theme_preview
|
||||
|
||||
|
|
|
@ -386,7 +386,7 @@ class UsersDirectory(Directory):
|
|||
r += htmltext('</div>')
|
||||
|
||||
if get_request().form.get('ajax') == 'true':
|
||||
get_response().filter = None
|
||||
get_response().filter = {'raw': True}
|
||||
return r.getvalue()
|
||||
|
||||
r2 = TemplateIO(html=True)
|
||||
|
|
|
@ -363,7 +363,7 @@ class UsersViewDirectory(Directory):
|
|||
r += htmltext('</div>')
|
||||
r += htmltext('</div>')
|
||||
if get_request().form.get('ajax') == 'true':
|
||||
get_response().filter = None
|
||||
get_response().filter = {'raw': True}
|
||||
return r.getvalue()
|
||||
|
||||
formdef = UserFieldsFormDef()
|
||||
|
@ -420,7 +420,7 @@ class UsersViewDirectory(Directory):
|
|||
r += htmltext('</div>')
|
||||
|
||||
if get_request().form.get('ajax') == 'true':
|
||||
get_response().filter = None
|
||||
get_response().filter = {'raw': True}
|
||||
return r.getvalue()
|
||||
|
||||
return r.getvalue()
|
||||
|
@ -880,7 +880,7 @@ class ManagementDirectory(Directory):
|
|||
r += pagination_links(offset, limit, total_count)
|
||||
|
||||
if get_request().form.get('ajax') == 'true':
|
||||
get_response().filter = None
|
||||
get_response().filter = {'raw': True}
|
||||
return r.getvalue()
|
||||
|
||||
get_response().filter['sidebar'] = self.get_global_listing_sidebar(
|
||||
|
@ -1293,7 +1293,7 @@ class FormPage(Directory):
|
|||
return table
|
||||
|
||||
if get_request().form.get('ajax') == 'true':
|
||||
get_response().filter = None
|
||||
get_response().filter = {'raw': True}
|
||||
return table
|
||||
|
||||
html_top('management', '%s - %s' % (_('Listing'), self.formdef.name))
|
||||
|
@ -1777,7 +1777,7 @@ class FormPage(Directory):
|
|||
r += htmltext('</div>') # id="statistics"
|
||||
|
||||
if get_request().form.get('ajax') == 'true':
|
||||
get_response().filter = None
|
||||
get_response().filter = {'raw': True}
|
||||
return r.getvalue()
|
||||
|
||||
page = TemplateIO(html=True)
|
||||
|
|
|
@ -45,12 +45,40 @@ class TemplateWithFallbackView(TemplateView):
|
|||
loader.get_template(self.template_name)
|
||||
except TemplateDoesNotExist:
|
||||
return quixote(self.request)
|
||||
context = self.get_context_data(**kwargs)
|
||||
return self.render_to_response(context)
|
||||
|
||||
try:
|
||||
context = self.get_context_data(**kwargs)
|
||||
except PublishError as exc:
|
||||
context = {'body': get_publisher().finish_interrupted_request(exc)}
|
||||
self.quixote_response = get_request().response
|
||||
except Exception as exc:
|
||||
context = {'body': get_publisher().finish_failed_request()}
|
||||
self.quixote_response = get_request().response
|
||||
|
||||
if self.quixote_response.content_type != 'text/html' or self.quixote_response.status_code != 200:
|
||||
response = HttpResponse(context['body'])
|
||||
response.status_code = self.quixote_response.status_code
|
||||
response.reason_phrase = self.quixote_response.reason_phrase
|
||||
elif request.META.get('HTTP_X_POPUP') == 'true':
|
||||
response = HttpResponse('<div class="popup-content">%s</div>' % context['body'])
|
||||
elif 'raw' in (getattr(self.quixote_response, 'filter') or {}):
|
||||
# used for theme preview (generated in /backoffice/ but cannot
|
||||
# obviously receive the admin template.
|
||||
response = HttpResponse(context['body'])
|
||||
else:
|
||||
response = self.render_to_response(context)
|
||||
|
||||
for name, value in self.quixote_response.generate_headers():
|
||||
if name == 'Content-Length':
|
||||
continue
|
||||
response[name] = value
|
||||
response.after_jobs = self.quixote_response.after_jobs
|
||||
|
||||
return response
|
||||
|
||||
def render_to_response(self, context, **response_kwargs):
|
||||
django_response = super(TemplateWithFallbackView, self).render_to_response(context, **response_kwargs)
|
||||
if self.quixote_response and self.quixote_response.status_code != '200':
|
||||
if self.quixote_response and self.quixote_response.status_code != 200:
|
||||
django_response.status_code = self.quixote_response.status_code
|
||||
django_response.reason_phrase = self.quixote_response.reason_phrase
|
||||
for name, value in self.quixote_response.generate_headers():
|
||||
|
|
|
@ -63,6 +63,4 @@ def html_top(section, title = None, scripts = None):
|
|||
if title:
|
||||
sitetitle += ' - '
|
||||
|
||||
admin_ezt = True
|
||||
get_response().filter.update(locals())
|
||||
|
||||
|
|
|
@ -57,6 +57,11 @@ class HTTPResponse(quixote.http_response.HTTPResponse):
|
|||
location = iframe_server_url + location[len(server_url):]
|
||||
return quixote.http_response.HTTPResponse.redirect(self, location, permanent)
|
||||
|
||||
def reset_includes(self):
|
||||
self.javascript_scripts = None
|
||||
self.javascript_code_parts = None
|
||||
self.css_includes = None
|
||||
|
||||
def add_javascript(self, script_names):
|
||||
if not self.javascript_scripts:
|
||||
self.javascript_scripts = []
|
||||
|
|
|
@ -1052,6 +1052,8 @@ class QommonPublisher(Publisher, object):
|
|||
d.update(dict(self.site_options.items('variables')))
|
||||
except ConfigParser.NoSectionError:
|
||||
pass
|
||||
d['manager_homepage_url'] = d.get('portal_agent_url')
|
||||
d['manager_homepage_title'] = d.get('portal_agent_title')
|
||||
return d
|
||||
|
||||
extra_sources = []
|
||||
|
|
|
@ -163,60 +163,12 @@ DEFAULT_IFRAME_EZT = """<!DOCTYPE html>
|
|||
</body>
|
||||
</html>"""
|
||||
|
||||
ADMIN_TEMPLATE_EZT = """<!DOCTYPE html>
|
||||
<html lang="[site_lang]">
|
||||
<head>
|
||||
<title>[page_title]</title>
|
||||
<link rel="stylesheet" type="text/css" href="[css]"/>
|
||||
[script]
|
||||
[if-any extra_css]
|
||||
<link rel="stylesheet" type="text/css" href="[extra_css]"/>
|
||||
[end]
|
||||
[if-any extra_head]
|
||||
[extra_head]
|
||||
[end]
|
||||
</head>
|
||||
<body data-gadjo="true" [if-any admin_for_all]class="admin-for-all"[end]>
|
||||
<div id="top">
|
||||
<div id="sidepage">
|
||||
<span id="applabel">[if-any app_label][app_label][end]</span>
|
||||
[header_menu]
|
||||
</div>
|
||||
[user_info]
|
||||
</div>
|
||||
<div id="main">
|
||||
<div id="header">
|
||||
[if-any breadcrumb]
|
||||
<h1 class="breadcrumbs">[breadcrumb]</h1>
|
||||
[end]
|
||||
</div>
|
||||
<div id="main-content" [if-any sidebar]class="with-sidebar"[end]>
|
||||
[body]
|
||||
</div>
|
||||
[if-any sidebar]
|
||||
<div id="sidebar">
|
||||
[sidebar]
|
||||
</div>
|
||||
[end]
|
||||
[if-any footer]
|
||||
<div id="footer">
|
||||
[footer]
|
||||
</div>
|
||||
[end]
|
||||
</div> <!-- #main -->
|
||||
</body>
|
||||
</html>"""
|
||||
|
||||
|
||||
default_template = ezt.Template()
|
||||
default_template.parse(DEFAULT_TEMPLATE_EZT)
|
||||
|
||||
default_iframe_template = ezt.Template()
|
||||
default_iframe_template.parse(DEFAULT_IFRAME_EZT)
|
||||
|
||||
admin_template = ezt.Template()
|
||||
admin_template.parse(ADMIN_TEMPLATE_EZT)
|
||||
|
||||
|
||||
def html_top(title=None, default_org=None):
|
||||
if not hasattr(get_response(), 'filter'):
|
||||
|
@ -290,7 +242,7 @@ def get_decorate_vars(body, response, generate_breadcrumb=True):
|
|||
body = str(body)
|
||||
|
||||
if get_request().get_header('x-popup') == 'true':
|
||||
return {}
|
||||
return {'body': body}
|
||||
|
||||
kwargs = {}
|
||||
for k, v in response.filter.items():
|
||||
|
@ -343,7 +295,7 @@ def get_decorate_vars(body, response, generate_breadcrumb=True):
|
|||
if is_in_backoffice:
|
||||
header_menu = kwargs.get('header_menu')
|
||||
user_info = kwargs.get('user_info')
|
||||
page_title = kwargs.get('sitetitle') + kwargs.get('title', '')
|
||||
page_title = kwargs.get('sitetitle', '') + kwargs.get('title', '')
|
||||
subtitle = kwargs.get('subtitle')
|
||||
sidebar = kwargs.get('sidebar')
|
||||
css = root_url + get_publisher().qommon_static_dir + get_publisher().qommon_admin_css
|
||||
|
@ -406,9 +358,7 @@ def decorate(body, response):
|
|||
|
||||
from publisher import get_cfg
|
||||
generate_breadcrumb = True
|
||||
if response.filter.get('admin_ezt'):
|
||||
template = admin_template
|
||||
else:
|
||||
if True:
|
||||
template_ezt = get_cfg('branding', {}).get('template')
|
||||
current_theme = get_cfg('branding', {}).get('theme', 'default')
|
||||
if response.page_template_key or not template_ezt:
|
||||
|
|
|
@ -131,7 +131,7 @@ INSTALLED_APPS = (
|
|||
#'django.contrib.sessions',
|
||||
#'django.contrib.sites',
|
||||
#'django.contrib.messages',
|
||||
#'django.contrib.staticfiles',
|
||||
'django.contrib.staticfiles',
|
||||
#'django.contrib.admin',
|
||||
'gadjo',
|
||||
'wcs.qommon',
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
{% extends "gadjo/base.html" %}
|
||||
{% block page-title %}{{ page_title }}{% endblock %}
|
||||
{% block site-title %}{{ site_name }}{% endblock %}
|
||||
{% block footer %}w.c.s. &emdash; Copyright © Entr'ouvert{% endblock %}
|
||||
|
||||
{% block gadjo-js %}
|
||||
<link rel="stylesheet" type="text/css" media="all" href="{{ STATIC_URL }}css/dc2/admin.css"/>
|
||||
{{script|safe}}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{% endblock %}
|
||||
|
||||
{% block user-links %}
|
||||
{% if user_info %}{{ user_info|safe }}{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block site-header %}
|
||||
<h1 class="breadcrumbs">{% if breadcrumb %}{{ breadcrumb|safe }}{% endif %}</h1>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumb %}
|
||||
{% endblock %}
|
||||
|
||||
{% block sidepage %}
|
||||
<div id="sidepage">
|
||||
<span id="applabel">{{app_label}}</span>
|
||||
{{ header_menu|safe }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block main-content-attributes %}
|
||||
{% if sidebar %}class="with-sidebar"{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block main-content %}
|
||||
{{ body|safe }}
|
||||
{% endblock %}
|
||||
|
||||
{% block after-main-content %}
|
||||
{% if sidebar %}
|
||||
<div id="sidebar">
|
||||
{{ sidebar|safe }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -19,6 +19,7 @@ from django.conf.urls import patterns, url
|
|||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^$', 'wcs.views.home', name='home'),
|
||||
url(r'^backoffice/', 'wcs.views.backoffice'),
|
||||
)
|
||||
|
||||
# other URLs are handled by the quixote handler
|
||||
|
|
23
wcs/views.py
23
wcs/views.py
|
@ -14,10 +14,11 @@
|
|||
# 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_request
|
||||
from quixote import get_publisher, get_request, get_response
|
||||
|
||||
from .forms.root import RootDirectory as FormsRootDirectory
|
||||
from .qommon.admin.texts import TextsDirectory
|
||||
from .qommon.template import get_decorate_vars
|
||||
from . import compat
|
||||
|
||||
|
||||
|
@ -40,3 +41,23 @@ class Home(compat.TemplateWithFallbackView):
|
|||
return context
|
||||
|
||||
home = Home.as_view()
|
||||
|
||||
|
||||
class Backoffice(compat.TemplateWithFallbackView):
|
||||
template_name = 'wcs/backoffice.html'
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
return self.get(request, *args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(Backoffice, self).get_context_data(**kwargs)
|
||||
|
||||
with compat.request(self.request):
|
||||
get_request().response.filter = {'admin_ezt': True}
|
||||
body = get_publisher().try_publish(get_request())
|
||||
self.quixote_response = get_request().response
|
||||
context.update(get_decorate_vars(body, get_response(), generate_breadcrumb=True))
|
||||
|
||||
return context
|
||||
|
||||
backoffice = Backoffice.as_view()
|
||||
|
|
Loading…
Reference in New Issue