[register form] Updated the register form.
[ckanext-datagovau.git] / ckanext / example / controller.py
blob:a/ckanext/example/controller.py -> blob:b/ckanext/example/controller.py
--- 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
+
+