add quota support for number of fields
This commit is contained in:
parent
b76421b1e2
commit
e9b5f4ee7b
|
@ -45,6 +45,8 @@ from wcs.admin.fields import FieldWidget, FieldDefPage, FieldsDirectory
|
|||
from bodiffusion import DiffusionDirectory
|
||||
from boresults import FormResultDirectory
|
||||
|
||||
import quota
|
||||
|
||||
class CustomFieldDefPage(FieldDefPage):
|
||||
section = 'forms/'
|
||||
wsf_support = False
|
||||
|
@ -53,6 +55,8 @@ class CustomFieldDefPage(FieldDefPage):
|
|||
html_top('forms/%s' % self.objectdef.id, *args, **kwargs)
|
||||
|
||||
def duplicate(self):
|
||||
if not quota.may_add_a_new_field(self.objectdef):
|
||||
raise quota.QuotaExceeded()
|
||||
t = FieldDefPage.duplicate(self)
|
||||
if get_response().status_code == 302:
|
||||
return redirect('..')
|
||||
|
@ -198,6 +202,12 @@ class FormDirectory(FieldsDirectory):
|
|||
|
||||
return form
|
||||
|
||||
def new(self):
|
||||
if quota.may_add_a_new_field(self.objectdef):
|
||||
return super(FormDirectory, self).new()
|
||||
else:
|
||||
raise quota.QuotaExceeded()
|
||||
|
||||
def index_top [html] (self):
|
||||
'<ul id="main-actions">'
|
||||
if self.objectdef.asec_status == 'soon-available':
|
||||
|
@ -271,7 +281,12 @@ class FormDirectory(FieldsDirectory):
|
|||
'<a href="clean" rel="popup">%s</a>' % _('Remove Them')
|
||||
'</p>'
|
||||
|
||||
super(FormDirectory, self).get_new_field_form(page_no)
|
||||
if quota.may_add_a_new_field(self.objectdef):
|
||||
super(FormDirectory, self).get_new_field_form(page_no)
|
||||
else:
|
||||
'<p>'
|
||||
_('This questionnaire has reached its number of questions quota.')
|
||||
'</p>'
|
||||
|
||||
def clean [html] (self):
|
||||
form = Form(enctype='multipart/form-data')
|
||||
|
|
|
@ -21,6 +21,7 @@ from quixote.errors import AccessError
|
|||
|
||||
from qommon import template
|
||||
|
||||
from wcs.fields import WidgetField
|
||||
from wcs.formdef import FormDef
|
||||
|
||||
class QuotaExceeded(AccessError):
|
||||
|
@ -40,3 +41,21 @@ def may_add_a_new_form():
|
|||
return True
|
||||
return (FormDef.count() < max_forms)
|
||||
|
||||
|
||||
def get_max_number_of_fields():
|
||||
t = get_request().get_header('QuotaFields')
|
||||
if not t:
|
||||
return None
|
||||
return int(t)
|
||||
|
||||
def may_add_a_new_field(formdef):
|
||||
max_fields = get_max_number_of_fields()
|
||||
if not max_fields:
|
||||
return True
|
||||
fields_count = 0
|
||||
for field in formdef.fields:
|
||||
# only count data fields, not presentation fields (pages, titles, etc.)
|
||||
if isinstance(field, WidgetField):
|
||||
fields_count += 1
|
||||
return (fields_count < max_fields)
|
||||
|
||||
|
|
Reference in New Issue