%3 ::xotcl::Object ::xotcl::Object ::Generic::Form ::Generic::Form generate ::Generic::Form->::xotcl::Object ::xowiki::WikiForm ::xowiki::WikiForm ::xowiki::WikiForm->::Generic::Form ::xowiki::PlainWikiForm ::xowiki::PlainWikiForm ::xowiki::PlainWikiForm->::xowiki::WikiForm ::xowiki::PageInstanceEditForm ::xowiki::PageInstanceEditForm ::xowiki::PageInstanceEditForm->::xowiki::WikiForm ::xowiki::PageTemplateForm ::xowiki::PageTemplateForm ::xowiki::PageTemplateForm->::xowiki::WikiForm ::xowiki::PageInstanceForm ::xowiki::PageInstanceForm ::xowiki::PageInstanceForm->::xowiki::WikiForm ::xowiki::FileForm ::xowiki::FileForm ::xowiki::FileForm->::xowiki::WikiForm

Class ::Generic::Form

::Generic::Form[i] create ... \
           [ -action (default "[::xo::cc url]") ] \
           [ -add_page_title add_page_title ] \
           [ -data data ] \
           [ -edit_page_title edit_page_title ] \
           [ -fields fields ] \
           [ -folder_id (default "-100") ] \
           [ -html (default "") ] \
           [ -name (default "[namespace tail [self]]") ] \
           [ -package_id (default "") ] \
           [ -submit_link (default ".") ] \
           [ -validate (default "") ] \
           [ -with_categories (default "false") ]

Defined in

Class Relations

  • class: ::xotcl::Class[i]
  • superclass: ::xotcl::Object[i]
  • subclass: ::xowiki::WikiForm[i]
::xotcl::Class create ::Generic::Form \
     -superclass ::xotcl::Object

Methods (to be applied on instances)

  • generate (scripted, public)

     <instance of Generic::Form[i]> generate [ -template template ] \
        [ -mode mode ] [ -export export ]

    The method generate is used to actually generate the form template from the specifications and to set up page_title and context when appropriate.

    Switches:
    -template (optional, defaults to "formTemplate")
    is the name of the Tcl variable to contain the filled in template
    -mode (optional, defaults to "edit")
    -export (optional)
    list of attribute value pairs to be exported to the form (nested list)

    Testcases:
    xowiki_test_cases
    # set form name for adp file
    set :$template ${:name}
    
    set object_type [[${:data} info class] object_type]
    set object_name [expr {[${:data} exists name] ? [${:data} set name] : ""}]
    # :log "-- ${:data}, cl=[${:data} info class] [[${:data} info class] object_type]"
    
    #:log "--e ${:name} final fields ${:fields}"
    set exports [list  [list object_type $object_type]  [list folder_id ${:folder_id}]  [list __object_name [::security::parameter::signed $object_name]]]
    if {[info exists export]} {
      foreach pair $export {lappend exports $pair}
    }
    
    ad_form -name ${:name} -form ${:fields} -mode $mode  -export $exports -action [:action] -html [:html]
    
    #:log "--- generate: setup methods on data ${:data}"
    
    set new_data            "set item_id \[[self] new_data\]"
    set edit_data           "set item_id \[[self] edit_data\]"
    set new_request         "[self] new_request"
    set edit_request        "[self] edit_request \$item_id"
    set after_submit        "[self] after_submit \$item_id"
    set on_validation_error "[self] on_validation_error"
    set on_submit           "[self] on_submit \$item_id"
    
    if {[:with_categories]} {
      set coid [expr {[${:data} exists item_id] ? [${:data} set item_id] : ""}]
      category::ad_form::add_widgets -form_name ${:name}  -container_object_id ${:package_id}  -categorized_object_id $coid
    
      # When editing, fill category form widgets
      # with current mappings for this object
      append edit_request {
        category::ad_form::fill_widgets  -container_object_id ${:package_id}  -categorized_object_id $item_id
      }
      append new_data {
        category::map_object -remove_old -object_id $item_id $category_ids
      }
      append edit_data {
        category::map_object -remove_old -object_id $item_id $category_ids
      }
      append on_submit {
        set category_ids [category::ad_form::get_categories  -container_object_id ${:package_id}]
      }
    }
    #ns_log notice "-- ad_form new_data=<$new_data> edit_data=<$edit_data> edit_request=<$edit_request>"
    #
    # Action blocks must be added last. "-new_data" and "-edit_data"
    # are enclosed in a transaction, such that optional additional
    # code from category management is executed safely
    #
    ad_form -extend -name ${:name}  -validate [:validate]  -new_data "xo::dc transaction \{ $new_data \}" -edit_data "xo::dc transaction \{ $edit_data \}"  -on_submit $on_submit -new_request $new_request -edit_request $edit_request  -on_validation_error $on_validation_error -after_submit $after_submit