From: Ian Murray Date: Thu, 24 Nov 2011 13:44:54 +0000 Subject: [docs] Updated documentation to reflect change to the User form X-Git-Url: https://maxious.lambdacomplex.org/git/?p=ckanext-datagovau.git&a=commitdiff&h=36c3058c19d34a8505f267f81d5b59bd55b8fc69 --- [docs] Updated documentation to reflect change to the User form --- --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ .#* build/ dist/ - +distribute-* --- a/README.rst +++ b/README.rst @@ -12,6 +12,8 @@ * A custom Pylons controller for overriding some core CKAN behaviour * A custom Package edit form + +* A custom User registration and edition form * Some simple template customisations @@ -32,17 +34,18 @@ * To understand the nuts and bolts of this file, which is a CKAN *Extension*, read in conjunction with the "Extension - documentation":http://packages.python.org/ckan/plugins.html + documentation": http://docs.ckan.org/en/latest/plugins.html * One thing the extension does is set the values of ``extra_public_paths`` and ``extra_template_paths`` in the CKAN config, which are "documented - here":http://packages.python.org/ckan/configuration.html#extra-template-paths + here": http://docs.ckan.org/en/latest/configuration.html#extra-template-paths * These are set to point at directories within - `ckanext/example/theme/`` (in this package). Here, we override - the home page, provide some extra style with an ``extra.css``, and - customise the navigation and header of the main template in the file ``layout.html``. + ``ckanext/example/theme/`` (in this package). Here we: + * override the home page HTML ``ckanext/example/theme/templates/home/index.html`` + * provide some extra style by serving ``extra.css`` (which is loaded using the ``ckan.template_head_end`` option + * customise the navigation and header of the main template in the file ``layout.html``. The latter file is a great place to make global theme alterations. It uses the _layout template_ pattern "described in the Genshi @@ -50,7 +53,4 @@ This allows you to use Xpath selectors to override snippets of HTML globally. -* The custom package edit form at ``package_form.py`` follows the - conventions in the "main CKAN - documentation":http://packages.python.org/ckan/forms.html --- 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 @@ -54,8 +54,11 @@ config.get('extra_public_paths', '')]) config['extra_template_paths'] = ','.join([template_dir, config.get('extra_template_paths', '')]) + # add in the extra.css + config['ckan.template_head_end'] = config.get('ckan.template_head_end', '') +\ + ' ' # set the title - config['ckan.site_title'] = "An example CKAN theme" + config['ckan.site_title'] = "Example CKAN theme" # set the customised package form (see ``setup.py`` for entry point) config['package_form'] = "example_form" @@ -79,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/layout.html +++ b/ckanext/example/theme/templates/layout.html @@ -9,12 +9,9 @@ --- 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', '')}
    + +
    +
    + +
    + + +
    + +
    + + +