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.139 -r1.140 --- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 23 Apr 2010 18:59:59 -0000 1.139 +++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 28 Apr 2010 12:14:57 -0000 1.140 @@ -3118,6 +3118,7 @@ form-menu-button instproc render {} { my instvar package_id base form method return_url label_suffix link if {![info exists link]} { + #my msg "[my info class] check-link-package_id=$package_id" set link [$package_id make_link -link $base $form $method return_url] } if {$link eq ""} { @@ -3176,7 +3177,7 @@ # "Package require" is just a part of "Package initialize" creating # the package object if needed # - set form_package_id [$form logical_package_id] + set form_package_id [$form package_id] ::xowiki::Package require $form_package_id set obj [form-menu-button-$button new -volatile -package_id $package_id \ -base [$form_package_id pretty_link [$form name]] -form $form] 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.201 -r1.202 --- openacs-4/packages/xowiki/tcl/package-procs.tcl 23 Apr 2010 18:59:59 -0000 1.201 +++ openacs-4/packages/xowiki/tcl/package-procs.tcl 28 Apr 2010 12:14:57 -0000 1.202 @@ -577,11 +577,12 @@ # provide links based in untrusted_user_id set party_id [::xo::cc set untrusted_user_id] if {[info exists privilege]} { - #my log "-- checking priv $privilege for [self args]" + #my log "-- checking priv $privilege for [self args] from id $id" set granted [expr {$privilege eq "public" ? 1 : [::xo::cc permission -object_id $id -privilege $privilege -party_id $party_id] }] } else { # determine privilege from policy + #my msg "-- check permissions from $id of object $object $method" if {[catch { set granted [my check_permissions \ -user_id $party_id \ @@ -730,7 +731,7 @@ set standard_page [$id get_parameter ${object}_page] if {$standard_page ne ""} { set page [my resolve_request -default_lang [::xo::cc lang] -path $standard_page method] - #my msg "--o resolving standard_page '$standard_page' returns $page" + #my log "--o resolving standard_page '$standard_page' returns $page" if {$page ne ""} { return $page } @@ -759,6 +760,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]" $page set_resolve_context -package_id [my id] -parent_id [my folder_id] return $page } @@ -767,6 +769,7 @@ set page [::xowiki::Package get_site_wide_page -name en:$object] if {$page ne ""} { + #my msg "set_resolve_context site-wide -package_id [my id] -parent_id [my folder_id]" $page set_resolve_context -package_id [my id] -parent_id [my folder_id] return $page } @@ -1091,6 +1094,7 @@ if {!$(item_id) && $use_site_wide_pages} { set page [::xowiki::Package get_site_wide_page -name $(prefix):$(stripped_name)] if {$page ne ""} { + #my msg "set_resolve_context site_wide_pages [my id]" $page set_resolve_context -package_id [my id] -parent_id $parent_id return $page } @@ -1926,8 +1930,8 @@ delete {{package_id admin}} save-tags login popular-tags login - create-new {{item_id write}} - create-or-use {{item_id write}} + create-new {{parent_id create}} + create-or-use {{parent_id create}} } -set default_permission {{package_id write}} Class Object -array set require_permission { @@ -1937,8 +1941,8 @@ download none } Class Form -array set require_permission { - create-new {{item_id write}} - create-or-use {{item_id write}} + create-new {{parent_id create}} + create-or-use {{parent_id create}} list {{package_id read}} } Class CrFolder -array set require_permission { @@ -1985,8 +1989,8 @@ delete swa save-tags login popular-tags login - create-new {{item_id write}} - create-or-use {{item_id write}} + create-new {{parent_id create}} + create-or-use {{parent_id create}} } Class Object -array set require_permission { @@ -1996,9 +2000,9 @@ download {{package_id read}} } Class Form -array set require_permission { - view admin - create-new {{item_id write}} - create-or-use {{item_id write}} + view {{package_id read}} + create-new {{parent_id create}} + create-or-use {{parent_id create}} list {{package_id read}} } } @@ -2038,8 +2042,8 @@ delete swa save-tags login popular-tags login - create-new {{item_id write}} - create-or-use {{item_id write}} + create-new {{parent_id create}} + create-or-use {{parent_id create}} } Class Object -array set require_permission { @@ -2049,8 +2053,8 @@ download {{package_id read}} } Class Form -array set require_permission { - create-new {{item_id write}} - create-or-use {{item_id write}} + create-new {{parent_id create}} + create-or-use {{parent_id create}} 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.389 -r1.390 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 23 Apr 2010 18:59:59 -0000 1.389 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 28 Apr 2010 12:14:57 -0000 1.390 @@ -888,21 +888,29 @@ } Page instproc set_resolve_context {-package_id:required -parent_id:required} { - my set logical_parent_id $parent_id - my set logical_package_id $package_id + if {[my set parent_id] != $parent_id} { + my set physical_parent_id [my set parent_id] + my set parent_id $parent_id + } + if {[my set package_id] != $package_id} { + my set physical_package_id [my set package_id] + my set package_id $package_id + #my msg "doing extra require on [my set physical_package_id]" + #::xowiki::Package require [my set physical_package_id] + } } - Page instproc logical_parent_id {} { - if {[my exists logical_parent_id]} { - return [my set logical_parent_id] + Page instproc physical_parent_id {} { + if {[my exists physical_parent_id]} { + return [my set physical_parent_id] } else { return [my parent_id] } } - Page instproc logical_package_id {} { - if {[my exists logical_package_id]} { - return [my set logical_package_id] + Page instproc physical_package_id {} { + if {[my exists physical_package_id]} { + return [my set physical_package_id] } else { return [my package_id] } @@ -993,7 +1001,7 @@ Page instproc instantiate_includelet {arg} { # we want to use package_id as proc-local variable, since the # cross package reference might alter it locally - set package_id [my logical_package_id] + set package_id [my package_id] # do we have a wellformed list? if {[catch {set page_name [lindex $arg 0]} errMsg]} { @@ -2361,18 +2369,19 @@ } FormPage proc get_form_entries { - -base_item_ids - -package_id - -form_fields + -base_item_ids:required + -package_id:required + -form_fields:required {-publish_status ready} - {-parent_id ""} + {-parent_id "*"} {-extra_where_clause ""} {-h_where {tcl true h "" vars "" sql ""}} {-always_queried_attributes ""} {-orderby ""} {-page_size 20} {-page_number ""} {-initialize true} + {-from_package_ids ""} } { # # Get query attributes for all tables (to allow e.g. sorting by time) @@ -2382,10 +2391,15 @@ # instance_select_query. Add the query attributes, we want to # obtain as well automatically. # - # "-parent_id empty" means to get instances, regardless of + # "-parent_id *" means to get instances, regardless of # parent_id. Under the assumption, page_template constrains # the query enough to make it fast... # + # "-from_package_ids {}" means get pages from the instance + # provided via package_id, "*" means from all + # packages. Forthermore, a list of package_ids can be given. + # + set sql_atts [list ci.parent_id bt.revision_id bt.instance_attributes \ bt.creation_date bt.creation_user bt.last_modified \ "bt.object_package_id as package_id" bt.title \ @@ -2433,9 +2447,13 @@ #my msg sql_atts=$sql_atts # - # Build WHERE clause + # Build parts of WHERE clause # set publish_status_clause [::xowiki::Includelet publish_status_clause -base_table ci $publish_status] + + # + # Build filter clause (uses hstore if configured) + # set filter_clause "" array set wc $h_where set use_hstore [expr {[::xo::db::has_hstore] && @@ -2451,7 +2469,26 @@ } } #my msg filter_clause=$filter_clause - set package_clause "and object_package_id = $package_id" + + # + # Build package clause + # + if {$from_package_ids eq ""} { + set package_clause "and object_package_id = $package_id" + } elseif {$from_package_ids eq "*"} { + set package_clause "" + } else { + set package_clause "and object_package_id in ([$join $from_package_ids ,])" + } + + if {$parent_id eq "*"} { + # instance_select_query expects "" for all parents, but for the semantics + # of this method, "*" looks more appropriate + set parent_id "" + } + # + # transform all into an SQL query + # set sql [::xowiki::FormPage instance_select_query \ -select_attributes $sql_atts \ -from_clause "" \ 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.253 -r1.254 --- openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 23 Apr 2010 23:21:54 -0000 1.253 +++ openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 28 Apr 2010 12:14:57 -0000 1.254 @@ -94,7 +94,7 @@ # wiki pages (see include), since it contains full framing, etc. my instvar item_id ::xowiki::Page set recursion_count 0 - set page_package_id [my logical_package_id] + set page_package_id [my package_id] set context_package_id [::xo::cc package_id] #my msg "page_package_id=$page_package_id, context_package_id=$context_package_id" @@ -1287,7 +1287,7 @@ set form [my get_form] set anon_instances [my get_from_template anon_instances f] - #my msg form=$form + my msg form=$form #my msg anon_instances=$anon_instances set field_names [my field_names -form $form] @@ -1926,7 +1926,7 @@ } if {![my exists parent_id]} {my parent_id [$package_id folder_id]} } else { - set logical_package_id [my logical_package_id] + set logical_package_id [my package_id] if {$logical_package_id ne $original_package_id} { ::xowiki::Package require $logical_package_id set package_id $logical_package_id @@ -1945,8 +1945,8 @@ # To create form_pages in different places than the form, provide # fp_parent_id and fp_package_id. - set fp_parent_id [my query_parameter "fp_parent_id" [my logical_parent_id]] - set fp_package_id [my query_parameter "fp_package_id" [my logical_package_id]] + set fp_parent_id [my query_parameter "parent_id" [my parent_id]] + set fp_package_id [my query_parameter "package_id" [my package_id]] set f [my create_form_page_instance \ -name $name \