xowiki::Package instproc item_ref (public)
<instance of xowiki::Package> item_ref \ [ -use_package_path use_package_path ] \ [ -use_site_wide_pages use_site_wide_pages ] \ [ -normalize_name normalize_name ] -default_lang default_lang \ -parent_id parent_id link
Defined in /var/www/openacs.org/packages/xowiki/tcl/package-procs.tcl
An item_ref refers to an item (existing or non-existing) in the content repository relative to some parent_id. The item might be either a folder or some kind of "page" (e.g. a file). An item_ref might be complex, i.e. consist of a path of simple_item_refs, separated by "/". An item_ref stops at the first unknown part in the path and returns item_id == 0 and the appropriate parent_id (and name etc.) for insertion.
- Switches:
- -use_package_path (optional, defaults to
"false"
)- -use_site_wide_pages (optional, defaults to
"false"
)- -normalize_name (optional, defaults to
"true"
)- -default_lang (required)
- -parent_id (required)
- Parameters:
- link (required)
- Returns:
- item info containing link_type form prefix stripped_name item_id parent_id
- Testcases:
- xowiki_test_cases, path_resolve
Source code: # A trailing slash says that the last element is a folder. We # substitute it to allow easy iteration over the slash separated # segments. if {[string match "*/" $link]} { set llink [string trimright $link /]\0 } else { set llink $link } set elements [split $llink /] # Get start-page, if path is empty if {[llength $elements] == 0} { set link [:get_parameter -check_query_parameter false index_page "index"] set elements [list $link] } # # Iterate bottom-up until the first unknown element appears in the # path (we can handle only one unknown at a time). # set nr_elements [llength $elements] set n 0 set ref_ids {} foreach element $elements { set (last_parent_id) $parent_id lappend ref_ids $parent_id array set "" [:simple_item_ref -normalize_name $normalize_name -use_package_path $use_package_path -use_site_wide_pages $use_site_wide_pages -default_lang $default_lang -parent_id $parent_id -assume_folder [expr {[incr n] < $nr_elements}] $element] #:msg "simple_item_ref <$element> => [array get {}]" if {$(item_id) == 0} { set parent_id $(parent_id) break } else { set parent_id $(item_id) } } return [list link $link link_type $(link_type) form $(form) prefix $(prefix) stripped_name $(stripped_name) item_id $(item_id) parent_id $(parent_id) ref_ids $ref_ids]XQL Not present: Generic, PostgreSQL, Oracle