From: Ian Murray Date: Thu, 24 Nov 2011 13:42:41 +0000 Subject: [register form] Updated the register form. X-Git-Url: http://maxious.lambdacomplex.org/git/?p=ckanext-datagovau.git&a=commitdiff&h=d6aedb863bc052900c16506ad678cbb0dede7525 --- [register form] Updated the register form. Updated to use the standard controller hooks that alter the behaviour of the form. In this case, a fullname is required at registration. And that is maintained on the edit form too. --- --- 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 + + --- a/ckanext/example/plugin.py +++ b/ckanext/example/plugin.py @@ -82,14 +82,18 @@ Note that we have also provided a custom register form template at ``theme/templates/user/register.html``. """ - # Note that when we set up the route, we must use the form - # that gives it a name (i.e. in this case, 'register'), so it - # works correctly with the url_for helper:: - # h.url_for('register') - map.connect('register', - '/user/register', + # Hook in our custom user controller at the points of creation + # and edition. + map.connect('/user/register', controller='ckanext.example.controller:CustomUserController', - action='custom_register') + action='register') + map.connect('/user/edit', + controller='ckanext.example.controller:CustomUserController', + action='edit') + map.connect('/user/edit/{id:.*}', + controller='ckanext.example.controller:CustomUserController', + action='edit') + map.connect('/package/new', controller='package_formalchemy', action='new') map.connect('/package/edit/{id}', controller='package_formalchemy', action='edit') return map --- a/ckanext/example/theme/templates/user/register.html +++ b/ckanext/example/theme/templates/user/register.html @@ -1,49 +1,50 @@ - - - -
  • -

    Have an OpenID?

    -

    - If you have an account with Google, Yahoo or one of many other - OpenID providers, you can log in without signing up. -

    -
      -
    • ${h.link_to(_('Log in now'), h.url_for(conroller='user', action='login'))}
    • -
    -
  • -
    - - Register - User +
    -
    -

    Join the community

    - - -
    - Register with CKAN +
    +

    Errors in form

    +

    The form contains invalid entries:

    +
      +
    • ${"%s: %s" % (key, error)}
    • +
    +
    - - -
    - - -
    - - -
    - - -
    - - -
    -
    - ${h.submit('s', _('Sign up'))} - -
    - - +
    +
    +
    +
    3+ chars, using only 'a-z0-9' and '-_'
    +
    ${errors.get('name', '')}
    +
    +
    +
    ${errors.get('fullname', '')}
    + +
    +
    + +
    +
    +
    ${errors.get('password1', '')}
    + +
    +
    + +
    + + +
    + +
    + + +