RDF::Base::Widget::Handler
For parsing and acting on HTML forms and HTML widgets, or just the CGI query.
$class->update_by_query( \%args )
Calls /session_history_add if base node is given.
Overall plan:
update_by_query maps through all parameters in the current request. It sorts into 4 groups, depending on what the parameter begins with:
1. Add / update properties (arc/prop/image) 2. Complemnt those props with second order atributes (row) 3. Check if some props should be removed (check) 4. Add new resources (newsubj) 5. Let classes handle themselves
Returns: the number of changes
Parameters beginning with arc_ or prop_
Used when there are several versions of an arc, to activate selected version (by value) and remove the rest. Eg: arc_select => 1234567 will activate arc 1234567 and remove all other versions of that arc.
Example tt-code: [% hidden("version_${arc.id}", version.id); radio("arc_${arc.id}__pred_${arc.pred.name}", version.id, 0, { id = version.id, }) %]
Images are to be uploaded as a filefield, and are saved to the "logos"-folder
The image can be scaled proportianally to fit within certain max-dimensions in pixels by having parameters maxw and maxh. A typical image-parameter would be:
arc_singular__file_image__pred_logo_small__maxw_400__maxh_300__row_12
Filenames are made of name (or id) on subj and a counter (first free number). Suffix is preserved.
TODO: Add possibility of using a row to set other filename.
The parameter_in_value is a way to to extract parameters from values. Eg in select, you could use:
<select name="parameter_in_value"> <option value="arc___subj_12335__pred_is=5412354">Set is for 12345</option> <option value="arc___subj_54321__pred_is=5412354">Set is for 54321</option> </select>
Parameters beginning with row_
This is for adding propertis with the arc as subj or obj, or the arcs subj as subj or obj or the arcs obj as subj or obj.
row_#__subj_arc__...
row_#__subj_subj__...
row_#__subj_obj__...
To create a new resource and add arcs to it, the parameters should be in the format "newsubj_$key__pred_$pred", where $key is used to group parameters together. $key can be prefixed with "main_". At least one $key should have the main-prefix set for the new resource to be created. $pred can be prefixed with "rev_".
Example1: Adding a new node if certain values are set
Params newsubj_main_contact__pred_contact_next => 2006-10-05 newsubj_contact__pred_is => C.contact_info.id newsubj_contact__pred_rev_contact_info => org.id
...where 'contact' is the key for the newsubj, regarding all with the same key as the same node. A new resource is created IF at least one main-parameter is supplied (no 1 above). There can be several main-parameters. If no main-parameter is set, the other newsubj-parameters with that number are ignored.
Class-resources that wish to handle their own update_by_query can be specified with:
hidden('class_update_by_query', my_node.id)
Then that resource will be called by:
my_node->class_update_by_query( $q );
For new class-resources to be created, a key property can be specified with:
hidden('class_new_by_query', my_class.id)
Then that class will be called by:
my_class->class_new_by_query( $q );
The class then has to check for it's own parameters to see if a new resource is to be created or not etc.
To easily handle many classes etc at the same time, it is preferrable if you follow those naming conventions:
1. For existing class resources, prefix all parameters with class_[% class.label %]__subj_[% resource.id %]__ 2. For new class resources, prefix with class_[% class.label %]__newsubj_[% key %]__
res
arc desig file if unless is lang newsubj parse pred revpred row select scof subj type vnode
A language-code; Set the language on this value (as an arc to the value-node).
Examples:
if_subj if_obj if_subj_obj if_12345 if_12345_methodname
You may have multipple if arguments, in which case all must be true in order to process the field.
subj : true if subj is not empty()
obj : true if obj is not empty()
12345 : looks up the node with given id. If it's an arc, we check if it's active. If its a nother type of node, we check if its not empty.
12345_methodname : methodname must be a method that doesn't take any arguments. It checks that the method returns a true value. Example of methods are; submitted, inactive, active, old, etc.
Works like /if but checks for falsehood instead.
$class->handle_query_arc( $param, \%args )
Returns the number of changes
$n->handle_query_arc_value( $param, $value, \%args )
Default subj is $args->{'node'} or 'new_node'.
If this is a reverse arc, the subj will be handled as an obj.
Returns: the number of changes
$class->handle_query_prop( $param, \%args )
Return number of changes
$class->handle_query_prop_value( $param, $value, \%args )
Return number of changes
TODO: translate this to a call to handle_query_arc
$n->handle_query_row( $param, \%args )
Return number of changes
$class->handle_query_row_value( $param, $value, \%args )
Return number of changes
This sub is mainly about setting properties for arcs. The subjct is an arc id. This can be used for saying that an arc is inactive.
$class->handle_query_check_row( $param, \%args )
Return number of changes
$class->handle_query_check_arc( $param, $arc_id, \%args )
Return number of changes
$class->handle_query_check_node( $param, $node_id, \%args )
Return number of changes
$class->handle_query_check_require( $param, \%args )
Return number of changes
$class->handle_query_check_prop( $param, $pred_in, \%args )
$n->handle_query_check_revprop( $param, $pred_name, \%args )
Return number of changes
handle_query_newsubjs( $q, $param, \%args )
Return number of changes
RDF::Base, RDF::Base::Arc, RDF::Base::Pred, RDF::Base::List, RDF::Base::Search, RDF::Base::Literal::Time