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 |
|
|
|
|