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
+
+ '
'
+ '
'
+
+ 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]