[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
import sys import sys
from ckan.lib.base import request from ckan.lib.base import request
from ckan.lib.base import c, g, h from ckan.lib.base import c, g, h
from ckan.lib.base import model from ckan.lib.base import model
from ckan.lib.base import render from ckan.lib.base import render
from ckan.lib.base import _ from ckan.lib.base import _
   
  from ckan.lib.navl.validators import not_empty
   
from ckan.controllers.user import UserController from ckan.controllers.user import UserController
   
   
class CustomUserController(UserController): class CustomUserController(UserController):
"""This controller is an example to show how you might extend or """This controller is an example to show how you might extend or
override core CKAN behaviour from an extension package. override core CKAN behaviour from an extension package.
   
It duplicates functionality in the core CKAN UserController's It overrides 2 method hooks which the base class uses to create the
register function, but extends it to make an email address validation schema for the creation and editing of a user; to require
mandatory. 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