--- a/ckanext/example/controller.py +++ b/ckanext/example/controller.py @@ -4,6 +4,8 @@ from ckan.lib.base import model from ckan.lib.base import render from ckan.lib.base import _ + +from ckan.lib.navl.validators import not_empty from ckan.controllers.user import UserController @@ -12,29 +14,40 @@ """This controller is an example to show how you might extend or override core CKAN behaviour from an extension package. - It duplicates functionality in the core CKAN UserController's - register function, but extends it to make an email address - mandatory. + It overrides 2 method hooks which the base class uses to create the + validation schema for the creation and editing of a user; to require + that a fullname is given. """ - def custom_register(self): - if request.method == 'POST': - # custom validation that requires an email address - error = False - c.email = request.params.getone('email') - c.login = request.params.getone('login') - if not model.User.check_name_available(c.login): - error = True - h.flash_error(_("That username is not available.")) - if not c.email: - error = True - h.flash_error(_("You must supply an email address.")) - try: - self._get_form_password() - except ValueError, ve: - h.flash_error(ve) - error = True - if error: - return render('user/register.html') - # now delegate to core CKAN register method - return self.register() + new_user_form = 'user/register.html' + + def _add_requires_full_name_to_schema(self, schema): + """ + Helper function that modifies the fullname validation on an existing schema + """ + schema['fullname'] = [not_empty, unicode] + + def _new_form_to_db_schema(self): + """ + Defines a custom schema that requires a full name to be supplied + + This method is a hook that the base class calls for the validation + schema to use when creating a new user. + """ + schema = super(CustomUserController, self)._new_form_to_db_schema() + self._add_requires_full_name_to_schema(schema) + return schema + + def _edit_form_to_db_schema(self): + """ + Defines a custom schema that requires a full name cannot be removed + when editing the user. + + This method is a hook that the base class calls for the validation + schema to use when editing an exiting user. + """ + schema = super(CustomUserController, self)._edit_form_to_db_schema() + self._add_requires_full_name_to_schema(schema) + return schema + +