---+ Package =TWiki::Form=
Object representing a single form definition.
%TOC%
---++ ClassMethod *new* ($session,$web,$form)
* $web - default web to recover form from, if $form doesn't specify a web
* =$form= - topic name to read form definition from
May throw TWiki::OopsException
---++ ObjectMethod *renderForEdit* ($web,$topic,$meta,$useDefaults) -> $html
* =$web= the web of the topic being rendered
* =$topic= the topic being rendered
* =$meta= the meta data for the form
* =$useDefaults= if true, will use default values from the form definition if no other value is given
Render the form fields for entry during an edit session, using data values
from $meta
---++ ObjectMethod *renderFieldForEdit* ($fieldDef,$web,$topic,$value) -> $html
* =$fieldDef= the field being rendered
* =$web= the web of the topic being rendered
* =$topic= the topic being rendered
* =$value= the current value of the field
Render a single form field for entry during an edit session, using data values
from $meta. Plugins can provide a handler that extends the set of supported
types
SMELL: this should be a method on a field class
SMELL: JSCalendarContrib ought to provide a 'date' handler.
---++ ObjectMethod *renderHidden* ($meta,$useDefaults) -> $html
* =$useDefaults= if true, will use default values from the form definition if no other value is given
Render form fields found in the meta as hidden inputs, so they pass
through edits untouched.
---++ ObjectMethod *cgiName* ($field) -> $string
Generate the 'name' of the CGI parameter used to represent a field.
---++ ObjectMethod *getFieldValuesFromQuery* ($query,$metaObject,$handleMandatory) -> $metaObject
Extract new values for form fields from a query.
* =$query= - the query
* =$metaObject= - the meta object that is storing the form values
* =$handleMandatory= - if set, will throw an OopsException if any mandatory fields are absent from the query.
For each field, if there is a value in the query, use it.
Otherwise if there is already entry for the field in the meta, keep it.
Otherwise, if $handleMandatory, initialise the field to '' and set it in the meta.
---++ ObjectMethod *isTextMergeable* ($name) -> $boolean
* =$name= - name of a form field (value of the =name= attribute)
Returns true if the type of the named field allows it to be text-merged.
If the form does not define the field, it is assumed to be mergeable.
---++ ObjectMethod *getField* ($name) -> \%row
* =$name= - name of a form field (value of the =name= attribute)
Returns the field, or undef if the form does not define the field.
---++ StaticMethod *renderForDisplay* ($templates,$meta)
* =$templates= ref to templates singleton
* =$meta= - meta object containing the form to be rendered
Static because we want to be able to do this without a form definition.
SMELL: Why? Is reading the form topic such a big burden?