Index: openacs-4/packages/xowiki/tcl/includelet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/includelet-procs.tcl,v diff -u -r1.143 -r1.144 --- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 17 May 2010 09:24:51 -0000 1.143 +++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 18 May 2010 08:10:47 -0000 1.144 @@ -228,7 +228,7 @@ set packages [$base_package_id package_path] if {[llength $packages] > 0} { set parent_ids [list [$base_package_id folder_id]] - foreach p [$packages] {lappend parent_ids [$p folder_id]} + foreach p $packages {lappend parent_ids [$p folder_id]} return "$base_table.parent_id in ([join $parent_ids ,])" } else { return "$base_table.parent_id = [$base_package_id folder_id]" @@ -3263,6 +3263,7 @@ {-form_item_id:integer} {-form} {-parent_id} + {-package_ids ""} {-orderby "__last_modified,desc"} {-publish_status "ready"} {-field_names} @@ -3316,7 +3317,7 @@ foreach {attr value} $table_properties { switch $attr { orderby {set $attr _[::xowiki::formfield::FormField fc_decode $value]} - publish_status - category_id - unless - + buttons - publish_status - category_id - unless - where - with_categories - with_form_link - csv - voting_form - voting_form_form - voting_form_anon_instances { set $attr $value @@ -3368,14 +3369,14 @@ set cols "" if {[info exists use_button(edit)]} { - append cols {AnchorField _edit -CSSclass edit-item-button -label "" -html {style "padding: 2px;"} -no_csv 1 -richtext 1} \n + append cols {AnchorField _edit -CSSclass edit-item-button -label "" \ + -html {style "padding: 2px;"} -no_csv 1 -richtext 1} \n } if {[info exists use_button(view)]} { - append cols {AnchorField _view -CSSclass view-item-button -label "" -html {style "padding: 2px;"} -no_csv 1 -richtext 1} \n + append cols {AnchorField _view -CSSclass view-item-button -label "" \ + -html {style "padding: 2px;"} -no_csv 1 -richtext 1} \n } foreach fn $field_names { - #set richtext [expr {[$__ff($fn) istype ::xowiki::formfield::abstract_page] - # || [$__ff($fn) istype ::xowiki::formfield::richtext]}] append cols [list AnchorField _$fn \ -label [$__ff($fn) label] \ -richtext 1 \ @@ -3434,6 +3435,7 @@ -publish_status $publish_status \ -extra_where_clause $extra_where_clause \ -h_where [array get wc] \ + -from_package_ids $package_ids \ -package_id $package_id] if {[info exists with_categories]} { @@ -3443,9 +3445,11 @@ # difference to variable items: just the extra_where_clause set base_items [::xowiki::FormPage get_form_entries \ -base_item_ids $form_item_ids \ + -parent_id $parent_id \ -form_fields $form_fields \ -publish_status $publish_status \ -h_where [array get wc] \ + -from_package_ids $package_ids \ -package_id $package_id] } } @@ -3478,18 +3482,16 @@ #set template_file view-default $__c set _edit.href [$package_id make_link -link $page_link $p edit return_url template_file] } - if {[info exists use_button(view)]} { - $__c set _view " " - $__c set _view.title #xowiki.view# - $__c set _view.href $view_link - } if {[info exists use_button(delete)]} { $__c set _delete " " $__c set _delete.title #xowiki.delete# $__c set _delete.href [$package_id make_link -link $page_link $p delete return_url] } - - if {![info exists use_button(view)]} { + if {[info exists use_button(view)]} { + $__c set _view " " + $__c set _view.title #xowiki.view# + $__c set _view.href $view_link + } elseif {![info exists use_button(no-view)]} { # # Set always a view link, if we have no view button ... # Index: openacs-4/packages/xowiki/tcl/package-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/package-procs.tcl,v diff -u -r1.209 -r1.210 --- openacs-4/packages/xowiki/tcl/package-procs.tcl 17 May 2010 09:24:51 -0000 1.209 +++ openacs-4/packages/xowiki/tcl/package-procs.tcl 18 May 2010 08:10:47 -0000 1.210 @@ -682,7 +682,7 @@ if {![info exists lang]} { set lang [my default_language] } - + #my log "resolve_page '$object', default-lang $lang" # # First, resolve package level methods, @@ -764,7 +764,7 @@ foreach package [my package_path] { set page [$package resolve_page -simple $simple -lang $lang $object method] if {$page ne ""} { - #my msg "set_resolve_context inherited -package_id [my id] -parent_id [my folder_id]" + #my log "set_resolve_context inherited -package_id [my id] -parent_id [my folder_id]" $page set_resolve_context -package_id [my id] -parent_id [my folder_id] return $page } @@ -1295,7 +1295,7 @@ # in case we have a folder "foldername" and a page "foldername/xxx", the page has # higher priority. set item_id [::xo::db::CrClass lookup -name ${lang}:$stripped_name -parent_id $parent_id] - #my log "default_lang=$lang, ${lang}:$stripped_name => $item_id\n" + #my log "default_lang=$lang, ${lang}:$stripped_name / $parent_id => $item_id\n" } if {$item_id == 0} { @@ -1305,7 +1305,7 @@ #my log "get_parent_and_name returned parent=$parent, parent_id=$parent_id, deflang $lang name='$local_name'" my get_lang_and_name -default_lang $lang -path $local_name lang stripped_name set item_id [::xo::db::CrClass lookup -name ${lang}:$stripped_name -parent_id $parent_id] - #my log "--try ${lang}:$stripped_name ($folder_id/$parent_id) -> $item_id" + #my log "--try ${lang}:$stripped_name ($folder_id/$parent_id) -> $item_id" } if {$item_id == 0} { @@ -1901,6 +1901,8 @@ } Class Form -array set require_permission { list {{package_id read}} + edit admin + view admin } Class CrFolder -array set require_permission { view none @@ -1957,7 +1959,8 @@ download {{package_id read}} } Class Form -array set require_permission { - view {{package_id read}} + view admin + edit admin list {{package_id read}} } } @@ -2008,6 +2011,8 @@ download {{package_id read}} } Class Form -array set require_permission { + view admin + edit admin list {{item_id read}} } # Class FormPage -array set require_permission { Index: openacs-4/packages/xowiki/tcl/xowiki-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-procs.tcl,v diff -u -r1.394 -r1.395 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 17 May 2010 09:24:51 -0000 1.394 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 18 May 2010 08:10:47 -0000 1.395 @@ -1432,8 +1432,9 @@ __last_includelet __unresolved_references \ text item_id content lang_links] - # set variable current_user to ease personalization + # set variables current_* to ease personalization set current_user [::xo::cc set untrusted_user_id] + set current_url [::xo::cc url] set __vars [info vars] regsub -all [template::adp_variable_regexp] $content {\1@\2;noquote@} content_noquote @@ -2746,19 +2747,15 @@ #my msg "varname=$varname [my exists_property $varname]" # # Read a property (instance attribute) and return - # its pretty value in variable substitutions. + # its pretty value in variable substitution. # - if {![my exists_property $varname]} { - # We check for special variables here (such as current_user or - # current_url). In case the property does not exist, we provide - # a value from the current connection context. - if {$varname eq "current_user"} { - set value [::xo::cc set untrusted_user_id] - } elseif {$varname eq "current_url"} { - set value [::xo::cc url] - } else { - set value "" - } + # We check for special variable names here (such as current_user + # or current_url). We provide a value from the current connection + # context. + if {$varname eq "current_user"} { + set value [::xo::cc set untrusted_user_id] + } elseif {$varname eq "current_url"} { + set value [::xo::cc url] } else { set value [my property $varname] Index: openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl,v diff -u -r1.262 -r1.263 --- openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 17 May 2010 09:24:51 -0000 1.262 +++ openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 18 May 2010 08:10:47 -0000 1.263 @@ -1819,11 +1819,6 @@ return [list] } - Page instproc create-or-use args { - # can be overloaded - eval my create-new $args - } - Page instproc create_form_page_instance { -name:required -package_id @@ -1891,7 +1886,24 @@ return $f } - Page instproc create-new {-parent_id {-view_method edit} {-name ""} {-nls_language ""}} { + Page instproc create-or-use { + {-parent_id 0} + {-view_method edit} + {-name ""} + {-nls_language ""} + } { + # can be overloaded + my create-new \ + -parent_id $parent_id -view_method $view_method \ + -name $name -nls_language $nls_language + } + + Page instproc create-new { + {-parent_id 0} + {-view_method edit} + {-name ""} + {-nls_language ""} + } { my instvar package_id set original_package_id $package_id @@ -1930,47 +1942,72 @@ # setting of publish_status, and probhibit empty postings. set text_to_html [my form_parameter "__text_to_html" ""] - foreach key {_text} { + foreach key {_text _name} { if {[my exists_form_parameter $key]} { set __value [my form_parameter $key] if {[lsearch $text_to_html $key] > -1} { set __value [ad_text_to_html $__value] } lappend default_variables [string range $key 1 end] $__value + switch $key { + _name {set name $__value} + } } } + set instance_attributes [list] + foreach {_att _value} [::xo::cc get_all_form_parameter] { + if {[string match _* $_att]} continue + lappend instance_attributes $_att $_value + } # - # To create form_pages in different places than the form, provide - # fp_parent_id and fp_package_id. + # To create form_pages in different places than the form, one can + # provide provide parent_id and package_id. # # The following construct is more complex than necessary to # provide backward compatibility. Note that the passed-in # parent_id has priority over the other measures to obtain it. # - if {![info exists parent_id]} { + if {$parent_id == 0} { if {![my exists parent_id]} {my parent_id [$package_id folder_id]} - set fp_parent_id [my query_parameter "parent_id" [my parent_id]] + set fp_parent_id [my form_parameter "parent_id" [my query_parameter "parent_id" [my parent_id]]] } else { set fp_parent_id $parent_id } - set fp_package_id [my query_parameter "package_id" [my package_id]] + # In case the Form is inherited and package_id was not specified, we + # use the actual package_id. + set fp_package_id [my form_parameter "package_id" [my query_parameter "package_id" [my package_id]]] + ::xo::Package require $fp_package_id set f [my create_form_page_instance \ -name $name \ -nls_language $nls_language \ -parent_id $fp_parent_id \ -package_id $fp_package_id \ -default_variables $default_variables \ + -instance_attributes $instance_attributes \ -source_item_id [my query_parameter source_item_id ""]] - $f save_new + if {$name eq ""} { + $f save_new + } else { + set id [$fp_package_id lookup -parent_id $fp_parent_id -name $name] + if {$id == 0} { + $f save_new + } else { + ::xowiki::FormPage get_instance_from_db -item_id $id + $f copy_content_vars -from_object $id + $f item_id $id + $f save + } + } foreach var {return_url template_file title detail_link text} { if {[my exists_query_parameter $var]} { set $var [my query_parameter $var] } } + set form_redirect [my form_parameter "__form_redirect" ""] if {$form_redirect eq ""} { set form_redirect [export_vars -base [$package_id pretty_link -parent_id [$f parent_id] [$f name]] \