From 379b51c38bf621ec4ae680c16a971dbe3509c226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 21 Apr 2011 11:18:49 +0200 Subject: [PATCH] Possibility to upload a logo (#25) --- data/web/admin.css | 9 +++++ extra/modules/boconfig.ptl | 82 ++++++++++++++++++++++++++++++++++++-- extra/modules/root.ptl | 2 + themes/asec/template.ezt | 7 ++++ 4 files changed, 97 insertions(+), 3 deletions(-) diff --git a/data/web/admin.css b/data/web/admin.css index a53b55c..df681c3 100644 --- a/data/web/admin.css +++ b/data/web/admin.css @@ -120,3 +120,12 @@ div#main-content { margin-left: 25px; } +div#logo-selection { + clear: both; + padding-top: 1em; +} + + +div#logo-selection form { + margin: 1em; +} diff --git a/extra/modules/boconfig.ptl b/extra/modules/boconfig.ptl index 41a2c59..6a60fdc 100644 --- a/extra/modules/boconfig.ptl +++ b/extra/modules/boconfig.ptl @@ -16,6 +16,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA +import imghdr + from quixote import get_request, get_response, get_session, redirect from quixote.directory import Directory @@ -28,10 +30,17 @@ import qommon.admin.texts from qommon.form import * +def get_logo_url(): + pages_data_dir = os.path.join(get_publisher().app_dir, 'pages', 'data') + for f in ('png', 'jpeg', 'gif'): + logo_path = os.path.join(pages_data_dir, 'logo.%s' % f) + if os.path.exists(logo_path): + return '%spages/data/logo.%s' % (get_publisher().get_root_url(), f) + return None class ConfigDirectory(Directory): _q_exports = ['', 'password', 'contact', 'sitetitle', 'homepage', 'texts', - 'appearance'] + 'appearance', 'logo'] def _q_traverse (self, path): get_response().breadcrumb.append( ('config/', _('Configuration')) ) @@ -186,8 +195,6 @@ class ConfigDirectory(Directory): html_top('config', title = _('Appearance')) "

%s

" % _('Appearance') - get_session().display_message() - '
' '

' @@ -209,3 +216,72 @@ class ConfigDirectory(Directory): '' '

' '' + + '
' + '

%s

' % _('Logo') + + get_session().display_message() + + logo_url = get_logo_url() + if logo_url: + '' % logo_url + + '
' + '' + if logo_url: + '' % _('Upload New Logo') + '' % _('Remove Current Logo') + else: + '' % _('Upload Logo') + '
' + '
' + + def logo(self): + form = Form(enctype='multipart/form-data', use_tokens=False) + form.add(FileWidget, 'file', title = _('Theme'), required=True) + form.add_submit('submit', _('Upload')) + form.add_submit('remove', _('Remove')) + + if not form.is_submitted(): + return redirect('appearance') + + pages_data_dir = os.path.join(get_publisher().app_dir, 'pages', 'data') + + if form.get_submit() == 'remove': + for f in ('png', 'jpeg', 'gif'): + logo_path = os.path.join(pages_data_dir, 'logo.%s' % f) + if os.path.exists(logo_path): + os.unlink(logo_path) + return redirect('appearance') + # how come? + return redirect('appearance') + + if form.has_errors(): + get_session().message = ('error', _('Failed to set logo.')) + return redirect('appearance') + + logo = form.get_widget('file').parse().fp.read() + try: + format = imghdr.what(None, logo) + except: + get_session().message = ('error', _('Failed to set logo (unknown format).')) + return redirect('appearance') + + if format not in ('png', 'jpeg', 'gif'): + get_session().message = ('error', + _('Failed to set logo (format must be png, jpeg, or gif).')) + return redirect('appearance') + + if not os.path.exists(pages_data_dir): + os.makedirs(pages_data_dir) + + for f in ('png', 'jpeg', 'gif'): + logo_path = os.path.join(pages_data_dir, 'logo.%s' % f) + if f == format: + file(logo_path, 'w').write(logo) + else: + # make sure older logo are removed + if os.path.exists(logo_path): + os.unlink(logo_path) + + return redirect('appearance') diff --git a/extra/modules/root.ptl b/extra/modules/root.ptl index 0fb0120..c2c54b2 100644 --- a/extra/modules/root.ptl +++ b/extra/modules/root.ptl @@ -34,6 +34,7 @@ from wcs.formdef import FormDef import forms import backoffice +import boconfig import quota @@ -77,6 +78,7 @@ class RootDirectory(wcs.root.RootDirectory): response.filter = {} if not hasattr(response, 'breadcrumb'): response.breadcrumb = [ ('', _('Home')) ] + response.filter['logo_url'] = boconfig.get_logo_url() return Directory._q_traverse(self, path) def _q_index [html] (self): diff --git a/themes/asec/template.ezt b/themes/asec/template.ezt index c1c21d7..96cc552 100644 --- a/themes/asec/template.ezt +++ b/themes/asec/template.ezt @@ -5,6 +5,13 @@ [script] [page_title] + [if-any logo_url] + + [end]