Possibility to upload a logo (#25)

This commit is contained in:
Frédéric Péters 2011-04-21 11:18:49 +02:00
parent 62a0439c17
commit 379b51c38b
4 changed files with 97 additions and 3 deletions

View File

@ -120,3 +120,12 @@ div#main-content {
margin-left: 25px;
}
div#logo-selection {
clear: both;
padding-top: 1em;
}
div#logo-selection form {
margin: 1em;
}

View File

@ -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'))
"<h2>%s</h2>" % _('Appearance')
get_session().display_message()
'<div class="themes">'
'<p>'
@ -209,3 +216,72 @@ class ConfigDirectory(Directory):
'</a>'
'</div>'
'</div>'
'<div id="logo-selection">'
'<h2>%s</h2>' % _('Logo')
get_session().display_message()
logo_url = get_logo_url()
if logo_url:
'<img src="%s" />' % logo_url
'<form action="logo" enctype="multipart/form-data" method="post">'
'<input type="file" name="file" />'
if logo_url:
'<input type="submit" name="submit" value="%s" />' % _('Upload New Logo')
'<input type="submit" name="remove" value="%s" />' % _('Remove Current Logo')
else:
'<input type="submit" name="submit" value="%s" />' % _('Upload Logo')
'</form>'
'</div>'
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')

View File

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

View File

@ -5,6 +5,13 @@
<link rel="stylesheet" type="text/css" href="[css]"/>
[script]
<title>[page_title]</title>
[if-any logo_url]
<style type="text/css">
.header div.title {
background: url([logo_url]) no-repeat 99% 50%;
}
</style>
[end]
</head>
<body>
<div class="container">