NAME

Maypole::FormBuilder::Model

SYNOPSIS

BeerFB->config->model( 'Maypole::FormBuilder::Model' );

Major surgery

This class does not inherit from Maypole::Model::CDBI, for several reasons. We don't need to load Class::DBI::Untaint, Class::DBI::AsForm or Class::DBI::FromCGI. I wanted to implement a config option to choose which pager to use (see do_pager). And I wanted to rename methods that share a name with methods in Class::DBI (delete and search are now do_delete and do_search).

Maypole is pretty stable these days and it should be easy enough to keep up with any bug fixes.

METHODS

setup_form_mode

See Maypole::FormBuilder::Model::Base::setup_form_mode().

Modes supported here are:

${action}_button    where $action is any public action on the class
editlist
edit
do_edit
display_columns

Returns a list of columns, minus primary key columns, which probably don't need to be displayed.

Note that Class::DBI::FormBuilder will add back in hidden fields for the primary key(s), to support lookups done in several of its *_from_form methods.

Exported methods

As a convenience, all these methods now set the appropriate template, so it shouldn't be necessary to set the template and then call the method. This is particularly useful in despatching methods, such as editlist.

Some exported methods are defined in Maypole::FormBuilder::Model::Base, if they have no dependency on CDBI.

Gotchas

Sometimes you need to set the form mode in these methods, sometimes not. I think that if the mode matches the action, you don't need to set it. So to get searching working, the do_search mode needs to be set. Similarly for do_edit, except here the edit mode needs to be set. Elsewhere the mode is automatically set to the Maypole action. If you insert a line in CGI::FormBuilder::submitted() to warn the value of $smtag, that needs to match the name of the submit button in $request->params (i.e. $request->params->{$smtag} needs to be true).

addnew

The way CGI::FormBuilder handles different button clicks (i.e. it handles them), means we need a separate method for creating new objects (in standard Maypole, addnew posts to do_edit). But Class::DBI::FormBuilder keeps things simple.

addnew_to_editlist

The addnew form on the editable list page submits to this method, which wraps addnew.

It is pretty tedious to use this method of maintaining the interface either in the editlist or the plain list mode, so expect this to change at some point. Might be easiest to use Maypole::Plugin::Session. Most other buttons and links return the user to the plain list view at the moment.

do_edit

Implements update operations on submitted forms.

Runs a search_where search.

Does not implement search ordering yet, and there are various other modifications that could make this better, such as allowing LIKE comparisons (% and _ wildcards) etc.

editlist

Detects which submit button was clicked, and despatches to the appropriate method.

list

Does not implement ordering yet.

do_delete

Deletes a single object.

Maypole::Model::CDBI methods

These methods are copied verbatim from Maypole::Model::CDBI. See that module for documentation.

stringify_column
adopt
do_pager

The default pager is Class::DBI::Pager. Use a different pager by setting the pager_class config item:

BeerFB->config->pager_class( 'Class::DBI::Plugin::Pager' );
order

This method is not used in the Maypole::Plugin::FormBuilder templates at the moment. Probably, ordering will be implemented directly in Class::DBI::FormBuilder and this method can disappear.

setup_database
class_of
fetch_objects

AUTHOR

David Baird, <cpan@riverside-cms.co.uk>

BUGS

Please report any bugs or feature requests to bug-maypole-formbuilder@rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Maypole-FormBuilder. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

COPYRIGHT & LICENSE

Copyright 2005 David Baird, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.