add support for expired sites

This commit is contained in:
Frédéric Péters 2011-04-21 15:16:29 +02:00
parent 7761922bdf
commit 86350939a0
4 changed files with 50 additions and 1 deletions

View File

@ -20,6 +20,7 @@ from quixote import get_publisher, get_request, get_response, get_session, redir
from quixote.directory import Directory, AccessControlled
from qommon import errors
from qommon.admin.texts import TextsDirectory
import qommon.backoffice.menu
from qommon.backoffice.menu import html_top
from qommon.form import *
@ -125,6 +126,9 @@ class RootDirectory(AccessControlled, Directory):
get_response().breadcrumb = [ ('backoffice/', _('Back Office of your site')) ]
html_top('', _('Questionnaires'))
if quota.is_expired():
TextsDirectory.get_html_text('asec-expired-site-backoffice')
formdefs = FormDef.select(order_by='name', ignore_errors=True)
if formdefs:
@ -258,3 +262,11 @@ A new questionnaire ([name]) has been filled.
status.items.append(sendmail_item)
wf.store()
TextsDirectory.register('asec-expired-site-backoffice',
N_('Text displayed on the backoffice when the site has expired'),
default=N_('''<p>
This site has expired. You still have access to all of your data but
your questionnaires are no longer published.
</p>
'''))

View File

@ -29,6 +29,8 @@ from wcs.users import User
from participanttokens import ParticipantToken
import quota
class AlreadyVotedError(Exception):
pass
@ -168,12 +170,18 @@ class FormPage(wcs.forms.root.FormPage):
if self.formdef.asec_status == 'closed':
return redirect('results/')
if quota.is_expired():
return self.expired()
if self.formdef.asec_status == 'soon-available':
if self.formdef.roles:
return self.participant_ask_token()
else:
return self.soon_available()
if quota.is_expired():
return self.expired()
try:
return wcs.forms.root.FormPage._q_index(self, *args, **kwargs)
except (errors.AccessUnauthorizedError, errors.AccessForbiddenError):
@ -181,6 +189,10 @@ class FormPage(wcs.forms.root.FormPage):
except AlreadyVotedError:
return self.already_voted_error()
def expired [html] (self):
wcs.forms.root.html_top(self.formdef.name)
TextsDirectory.get_html_text('asec-expired-site-questionnaire')
def soon_available [html] (self):
wcs.forms.root.html_top(self.formdef.name)
'<div id="access-asec-identify">'
@ -331,3 +343,11 @@ Thank you for your vote!
Regards,
'''))
TextsDirectory.register('asec-expired-site-questionnaire',
N_('Text displayed on a questionnaire when the site has expired'),
default=N_('''<p>
This site has expired. This questionnaire is no longer available.
</p>
'''))

View File

@ -92,3 +92,6 @@ def can_theme():
def is_locked():
return get_boolean_quota('x-asec-locked')
def is_expired():
return get_boolean_quota('x-asec-expired')

View File

@ -51,6 +51,7 @@ class PrivateDirectory(Directory):
raise errors.TraversalError()
if token.type != 'private-url':
raise errors.TraversalError()
try:
formdef = FormDef.get(token.formdef_id)
except KeyError:
@ -59,6 +60,7 @@ class PrivateDirectory(Directory):
raise errors.TraversalError()
if not formdef.private:
raise errors.TraversalError()
if not quota.may_add_a_new_answer(formdef):
raise quota.QuotaExceeded()
return forms.FormPage(formdef=formdef)
@ -88,6 +90,9 @@ class RootDirectory(wcs.root.RootDirectory):
formdefs = FormDef.select(order_by='name', ignore_errors=True)
if quota.is_expired():
return self.index_expired()
if len(formdefs) == 0:
TextsDirectory.get_html_text('asec-welcome-empty-site')
else:
@ -105,6 +110,10 @@ class RootDirectory(wcs.root.RootDirectory):
'<li><a href="%s/">%s</a></li>' % (formdef.url_name, formdef.name)
'</ul>'
def index_expired [html] (self):
template.html_top()
TextsDirectory.get_html_text('asec-expired-site-homepage')
def _q_lookup(self, component):
if component in ('css','images'):
return StaticDirectory(
@ -148,4 +157,9 @@ This site has been locked.
</p>
'''))
TextsDirectory.register('asec-expired-site-homepage',
N_('Text displayed on the homepage when the site has expired'),
default=N_('''<p>
This site has expired.
</p>
'''))