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 -N -r1.94 -r1.95 --- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 7 Feb 2009 14:39:28 -0000 1.94 +++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 8 Feb 2009 12:58:56 -0000 1.95 @@ -633,25 +633,40 @@ }} } - - categories instproc category_tree_missing {{-name ""} -object_id -locale {-allow_edit false}} { + categories instproc category_tree_edit_button {-object_id:integer -locale {-allow_edit false} -tree_id:integer} { + set allow_p [::xo::cc permission -object_id $object_id -privilege admin -party_id [::xo::cc set untrusted_user_id]] + if {$allow_edit && $allow_p} { + if {[info exists tree_id]} { + # + # If a tree_id is given, edit directly the category tree ... + # + set href "[[my package_id] package_url]?edit-category-tree&object_id=$object_id&tree_id=$tree_id" + return [[my set __including_page] include \ + [list edit-item-button -link $href -title "Edit Category Tree" -target _blank]] + } else { + # + # ... otherwise, manage categories (allow defining new category trees, map/unmap, etc.) + # + set href "[[my package_id] package_url]?manage-categories&object_id=$object_id" + return [[my set __including_page] include \ + [list edit-item-button -link $href -title "Manage Categories" -target _blank]]] + } + } + return "" + } + categories instproc category_tree_missing {{-name ""} -edit_html} { # todo i18n - # next steps: handle allow_edit for cases, where category tree was found if {$name eq ""} { set msg "No category tree found." } else { set msg "No category tree with name '$name' found." } [my package_id] flush_page_fragment_cache -scope agg - set allow_p [::xo::cc permission -object_id $object_id -privilege admin -party_id [::xo::cc user_id]] - if {$allow_edit && $allow_p} { - set href "admin/manage_categories?object_id=$object_id" - set html [[my set __including_page] include [list edit-item-button -link $href]] - return "
$msg
Manage Categories? $html" - } else { - my log $msg - return "
$msg
" + set html
$msg
+ if {$edit_html ne ""} { + return "$html Manage Categories? $edit_html" } + return $html } categories instproc render {} { @@ -682,14 +697,21 @@ } } + set edit_html [my category_tree_edit_button -object_id $package_id -allow_edit $allow_edit] if {[llength $trees] == 0} { - return [my category_tree_missing -name $tree_name -object_id $package_id -locale $locale -allow_edit $allow_edit] + return [my category_tree_missing -name $tree_name -edit_html $edit_html] } foreach tree $trees { foreach {tree_id my_tree_name ...} $tree {break} + + set edit_html [my category_tree_edit_button -object_id $package_id -allow_edit $allow_edit -tree_id $tree_id] + #append content "
$edit_html
\n" + if {!$no_tree_name} { - append content "

$my_tree_name

" + append content "

$my_tree_name $edit_html

" + } elseif {$edit_html ne ""} { + append content "$edit_html
" } set categories [list] set pos 0 @@ -708,9 +730,16 @@ lappend categories $cid } + if {[llength $categories] == 0} { + return $content + } + if {[info exists ordered_composite]} { set items [list] foreach c [$ordered_composite children] {lappend items [$c item_id]} + + # If we have no item, provide a dummy one to avoid sql error + # later if {[llength $items]<1} {set items -4711} if {$count} { @@ -2335,6 +2364,7 @@ -page_order -object_type -source_item_id + {-target ""} } { set html "" if {![info exists return_url] || $return_url eq ""} {set return_url [$package_id url]} @@ -2351,7 +2381,11 @@ } if {$link ne ""} { set button_class [namespace tail [my info class]] - set html " " + set props "" + if {$alt ne ""} {append props "alt=\"$alt\" "} + if {$title ne ""} {append props "title=\"$title\" "} + if {$target ne ""} {append props "target=\"$target\" "} + set html " " } return $html } @@ -2364,6 +2398,7 @@ {-alt "edit"} {-book_mode false} {-link ""} + {-target ""} }} } @@ -2373,15 +2408,15 @@ set page [expr {[info exists page_id] ? $page_id : $__including_page}] if {[$page istype ::xowiki::FormPage]} { set template [$page page_template] - set title "$title [$template title] [$page name]" + #set title "$title [$template title] [$page name]" } if {$book_mode} { append return_url #[toc anchor [$page name]] } return [my render_button \ -page $page -method edit -package_id $package_id -link $link \ - -title $title -alt $alt -return_url $return_url] + -title $title -alt $alt -return_url $return_url -target $target] } ::xowiki::IncludeletClass create delete-item-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 -N -r1.161 -r1.162 --- openacs-4/packages/xowiki/tcl/package-procs.tcl 3 Feb 2009 09:55:03 -0000 1.161 +++ openacs-4/packages/xowiki/tcl/package-procs.tcl 8 Feb 2009 12:58:56 -0000 1.162 @@ -525,7 +525,7 @@ Package instproc invoke {-method {-error_template error-template} {-batch_mode 0}} { set page [my resolve_page [my set object] method] - #my log "--r resolve_page returned $page" + my log "--r resolve_page returned $page" if {$page ne ""} { if {[$page procsearch $method] eq ""} { return [my error_msg "Method '$method' is not defined for this object"] @@ -574,19 +574,24 @@ } # - # first, resolve package level methods + # First, resolve package level methods, + # having the syntax PACKAGE_URL?METHOD&.... # + if {$object eq ""} { + # + # We allow only to call methods defined by the policy + # set exported [[my set policy] defined_methods Package] foreach m $exported { - #my log "--QP my exists_query_parameter $m = [my exists_query_parameter $m]" + #my msg "--QP my exists_query_parameter $m = [my exists_query_parameter $m]" if {[my exists_query_parameter $m]} { set method $m ;# determining the method, similar file extensions return [self] } } } - + if {[string match "//*" $object]} { # we have a reference to another instance, we cant resolve this from this package. # Report back not found @@ -913,6 +918,10 @@ # user callable methods on package level # + # + # reindex (for site wide search) + # + Package ad_instproc reindex {} { reindex all items of this package } { @@ -928,23 +937,6 @@ } # - # Package import - # - - Package ad_instproc import {-user_id -folder_id {-replace 0} -objects {-create_user_ids 0}} { - import the specified pages into the xowiki instance - } { - if {![info exists folder_id]} {set folder_id [my folder_id]} - if {![info exists user_id]} {set user_id [::xo::cc user_id]} - if {![info exists objects]} {set objects [::xowiki::Page allinstances]} - - set msg "processing objects: $objects

" - set importer [Importer new -package_id [my id] -folder_id $folder_id -user_id $user_id] - $importer import_all -replace $replace -objects $objects -create_user_ids $create_user_ids - append msg [$importer report] - } - - # # RSS 2.0 support # Package ad_instproc rss { @@ -1106,6 +1098,10 @@ [self class] [self proc] } + # + # Create new pages + # + Package instproc edit-new {} { my instvar folder_id id set object_type [my query_parameter object_type "::xowiki::Page"] @@ -1138,6 +1134,53 @@ return [$page edit -new true -autoname $autoname] } + # + # manage categories + # + + Package instproc manage-categories {} { + set object_id [my query_parameter object_id] + if {![string is integer -strict $object_id]} { return [my error_msg "No valid object_id provided!"] } + + # flush could be made more precise in the future + [my id] flush_page_fragment_cache -scope agg + + my returnredirect [site_node::get_package_url -package_key categories]cadmin/object-map?ctx_id=$object_id&object_id=$object_id + } + + # + # edit a single category tree + # + + Package instproc edit-category-tree {} { + set object_id [my query_parameter object_id] + if {![string is integer -strict $object_id]} { return [my error_msg "No valid object_id provided!"] } + set tree_id [my query_parameter tree_id] + if {![string is integer -strict $tree_id]} { return [my error_msg "No valid tree_id provided!"] } + + # flush could be made more precise in the future + [my id] flush_page_fragment_cache -scope agg + my returnredirect [site_node::get_package_url -package_key categories]cadmin/tree-view?tree_id=$tree_id&ctx_id=$object_id&object_id=$object_id + } + + + # + # Package import + # + + Package ad_instproc import {-user_id -folder_id {-replace 0} -objects {-create_user_ids 0}} { + import the specified pages into the xowiki instance + } { + if {![info exists folder_id]} {set folder_id [my folder_id]} + if {![info exists user_id]} {set user_id [::xo::cc user_id]} + if {![info exists objects]} {set objects [::xowiki::Page allinstances]} + + set msg "processing objects: $objects

" + set importer [Importer new -package_id [my id] -folder_id $folder_id -user_id $user_id] + $importer import_all -replace $replace -objects $objects -create_user_ids $create_user_ids + append msg [$importer report] + } + Package instproc flush_references {-item_id:integer,required -name:required -parent_id} { my instvar folder_id id if {![info exists parent_id]} {set parent_id $folder_id} @@ -1277,6 +1320,8 @@ rss none google-sitemap none google-sitemapindex none + manage-categories {{id admin}} + edit-category-tree {{id admin}} delete {{id admin}} edit-new { {{has_class ::xowiki::Object} swa} @@ -1327,6 +1372,8 @@ rss none google-sitemap none google-sitemapindex none + manage-categories {{id admin}} + edit-category-tree {{id admin}} delete swa edit-new { {{has_class ::xowiki::Object} swa} @@ -1378,6 +1425,8 @@ rss none google-sitemap none google-sitemapindex none + manage-categories {{id admin}} + edit-category-tree {{id admin}} delete swa edit-new { {{has_class ::xowiki::Object} swa} @@ -1432,6 +1481,8 @@ rss none google-sitemap none google-sitemapindex none + manage-categories {{id admin}} + edit-category-tree {{id admin}} delete swa edit-new { {{has_class ::xowiki::Object} swa} 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 -N -r1.212 -r1.213 --- openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 7 Feb 2009 14:48:15 -0000 1.212 +++ openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 8 Feb 2009 12:58:56 -0000 1.213 @@ -1152,6 +1152,15 @@ $f help_text "" } } + if {[$f name] eq "_name"} { + # never omit _name, this would cause problems with autonames + if {[lsearch [$f info mixin] ::xowiki::formfield::omit] > -1} { + $f remove_omit + $f class ::xowiki::formfield::hidden + $f initialize + } + #my msg "$f [$f name] [$f info class] [$f info mixin]" + } } } @@ -1260,8 +1269,6 @@ #my msg "after save refs=[expr {[my exists references]?[my set references] : {NONE}}]" set redirect_method [my form_parameter __form_redirect_method "view"] -#my msg "__form_redir=$redirect_method" -#my msg "__form params= [::xo::cc array get form_parameter]" if {$redirect_method eq "__none"} { return } else { @@ -1297,9 +1304,12 @@ my load_values_into_form_fields $form_fields foreach f $form_fields {set ff([$f name]) $f } - # for named entries, just set the entry fields to empty, + # For named entries, just set the entry fields to empty, # without changing the instance variables + + #my msg "my is_new_entry [my name] = [my is_new_entry [my name]]" if {[my is_new_entry [my name]]} { + #my msg "anon_instances=$anon_instances" if {$anon_instances} { set name [autoname new -name [$page_template name] -parent_id $page_template] #my msg "generated name=$name, page_template-name=[$page_template name]" Index: openacs-4/packages/xowiki/www/admin/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/index.tcl,v diff -u -N -r1.24 -r1.25 --- openacs-4/packages/xowiki/www/admin/index.tcl 29 Jan 2009 15:05:18 -0000 1.24 +++ openacs-4/packages/xowiki/www/admin/index.tcl 8 Feb 2009 12:58:56 -0000 1.25 @@ -15,7 +15,7 @@ set object_types [$object_type object_types] set return_url [ns_conn url] -set category_url [export_vars -base manage_categories { { object_id $package_id } }] +set category_url [export_vars -base [$package_id package_url] { {manage-categories 1} {object_id $package_id}}] lang::message::lookup "" xowiki.admin " " TableWidget t1 -volatile \ Index: openacs-4/packages/xowiki/www/admin/list.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/list.tcl,v diff -u -N -r1.29 -r1.30 --- openacs-4/packages/xowiki/www/admin/list.tcl 29 Jan 2009 15:05:18 -0000 1.29 +++ openacs-4/packages/xowiki/www/admin/list.tcl 8 Feb 2009 12:58:56 -0000 1.30 @@ -35,7 +35,7 @@ set return_url [expr {$per_type ? [export_vars -base [::$package_id url] object_type] : [::$package_id url]}] -set category_url [export_vars -base manage_categories { { object_id $package_id } }] +set category_url [export_vars -base [$package_id package_url] { {manage-categories 1} {object_id $package_id}}] set actions [subst { Action new -label "[lang::message::lookup {} categories.Categories Categories]" \ Index: openacs-4/packages/xowiki/www/admin/manage_categories.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/Attic/manage_categories.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/admin/manage_categories.tcl 29 Jan 2009 15:27:11 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,23 +0,0 @@ -::xowiki::Package initialize -ad_doc { - Redirector to call categories interface - - @author Gustaf Neumann (gustaf.neumann@wu-wien.ac.at) - @creation-date January 2009 - @cvs-id $Id: manage_categories.tcl,v 1.1 2009/01/29 15:27:11 gustafn Exp $ - - @param object_id -} -parameter { - {-object_id:required} -} - -# -# The primary prupose of this miniscript is the make sure to flush the -# page fragement cache of categories, when categories are edited; -# better would be some kind of callback from categories. -# -# flush could be made in the future more precise -# -$package_id flush_page_fragment_cache -scope agg - -ad_returnredirect [site_node::get_package_url -package_key categories]cadmin/object-map?ctx_id=$object_id&object_id=$object_id -