diff --git a/extra/modules/backoffice.ptl b/extra/modules/backoffice.ptl index 9f7c88b..da55a10 100644 --- a/extra/modules/backoffice.ptl +++ b/extra/modules/backoffice.ptl @@ -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_('''

+This site has expired. You still have access to all of your data but +your questionnaires are no longer published. +

+''')) diff --git a/extra/modules/forms.ptl b/extra/modules/forms.ptl index a4a45f8..9ca2412 100644 --- a/extra/modules/forms.ptl +++ b/extra/modules/forms.ptl @@ -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) '
' @@ -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_('''

+This site has expired. This questionnaire is no longer available. +

+''')) diff --git a/extra/modules/quota.py b/extra/modules/quota.py index 0d2286d..0baeb7c 100644 --- a/extra/modules/quota.py +++ b/extra/modules/quota.py @@ -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') diff --git a/extra/modules/root.ptl b/extra/modules/root.ptl index 860e3ad..779f5ee 100644 --- a/extra/modules/root.ptl +++ b/extra/modules/root.ptl @@ -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): '
  • %s
  • ' % (formdef.url_name, formdef.name) '' + 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.

    ''')) - +TextsDirectory.register('asec-expired-site-homepage', + N_('Text displayed on the homepage when the site has expired'), + default=N_('''

    +This site has expired. +

    +'''))