Possibility to upload a logo (#25)
This commit is contained in:
parent
62a0439c17
commit
379b51c38b
|
@ -120,3 +120,12 @@ div#main-content {
|
|||
margin-left: 25px;
|
||||
}
|
||||
|
||||
div#logo-selection {
|
||||
clear: both;
|
||||
padding-top: 1em;
|
||||
}
|
||||
|
||||
|
||||
div#logo-selection form {
|
||||
margin: 1em;
|
||||
}
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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">
|
||||
|
|
Reference in New Issue