diff --git a/extra/modules/quota.py b/extra/modules/quota.py index e3a529b..f16b81e 100644 --- a/extra/modules/quota.py +++ b/extra/modules/quota.py @@ -59,3 +59,16 @@ def may_add_a_new_field(formdef): fields_count += 1 return (fields_count < max_fields) +def get_max_number_of_answers(): + t = get_request().get_header('QuotaAnswers') + if not t: + return None + return int(t) + +def may_add_a_new_answer(formdef): + max_answers = get_max_number_of_answers() + if not max_answers: + return True + answers_count = formdef.data_class().count() + return (answers_count < max_answers) + diff --git a/extra/modules/root.ptl b/extra/modules/root.ptl index 2b0c816..0fb0120 100644 --- a/extra/modules/root.ptl +++ b/extra/modules/root.ptl @@ -34,6 +34,7 @@ from wcs.formdef import FormDef import forms import backoffice +import quota class PrivateDirectory(Directory): @@ -57,6 +58,8 @@ 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) @@ -113,6 +116,8 @@ class RootDirectory(wcs.root.RootDirectory): raise errors.TraversalError() if f.private is True: raise errors.TraversalError() + if not quota.may_add_a_new_answer(f): + raise quota.QuotaExceeded() get_response().breadcrumb.append(('%s/' % f.url_name, f.name)) return forms.FormPage(formdef=f)