Index: openacs-4/packages/xowiki/tcl/form-field-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/form-field-procs.tcl,v diff -u -N -r1.156 -r1.157 --- openacs-4/packages/xowiki/tcl/form-field-procs.tcl 5 Nov 2009 12:34:16 -0000 1.156 +++ openacs-4/packages/xowiki/tcl/form-field-procs.tcl 16 Nov 2009 09:55:21 -0000 1.157 @@ -1891,8 +1891,34 @@ return [my pretty_image -parent_id [[my object] parent_id] $entry_name] } + ########################################################### # + # ::xowiki::formfield::include + # + ########################################################### + + Class include -superclass text -parameter { + } + include instproc pretty_value {v} { + my instvar object + array set "" [$object package_item_ref -default_lang [$object lang] -parent_id [$object parent_id] $v] + if {$(item_id) == 0} { + # Here, we could call "::xowiki::Link render" to offer the user means + # to create the entry like with [[..]], if he has sufficent permissions...; + # when $(package_id) is 0, the referenced package could not be + # resolved + return "Cannot resolve symbolic link '$v'" + } + if {![my isobject $(item_id)]} { + set deref [::xo::db::CrClass get_instance_from_db -item_id $(item_id)] + } + return [$(item_id) render] + } + + + ########################################################### + # # ::xowiki::formfield::CompoundField # ########################################################### Index: openacs-4/packages/xowiki/tcl/link-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/link-procs.tcl,v diff -u -N -r1.70 -r1.71 --- openacs-4/packages/xowiki/tcl/link-procs.tcl 6 Nov 2009 12:26:18 -0000 1.70 +++ openacs-4/packages/xowiki/tcl/link-procs.tcl 16 Nov 2009 09:55:22 -0000 1.71 @@ -11,7 +11,8 @@ # generic links # Class create BaseLink -parameter { - cssclass href label title target extra_query_parameter {anchor ""} {query ""} + cssclass href label title target extra_query_parameter + {anchor ""} {query ""} } BaseLink instproc mk_css_class {-additional {-default ""}} { @@ -40,7 +41,7 @@ # Class create Link -superclass BaseLink -parameter { {type link} name lang stripped_name page - parent_id package_id item_id + parent_id package_id item_id {form ""} } Link instproc atts {} { set atts "" @@ -88,8 +89,28 @@ -anchor [my anchor] -query [my query] [my name]] } Link instproc new_link {} { - my instvar package_id + my instvar package_id form set page [my page] + if {$form ne ""} { + # for now, we assume, the form is in same dir as the current + # page; we have to lookup the form to determine rights on the + # form. + set parent_id [$page parent_id] + set template_id [::xo::db::CrClass lookup -name $form -parent_id $parent_id] + if {$template_id == 0} { + # make a second try for the form with the en prefix + if {[regexp {^(..):(.+)$} $form _ lang stripped_form]} { + set form en:$stripped_form + set template_id [::xo::db::CrClass lookup -name $form -parent_id $parent_id] + } + } + if {$template_id != 0} { + ::xo::db::CrClass get_instance_from_db -item_id $template_id + set form_link [$package_id pretty_link -parent_id $parent_id $form] + return [$package_id make_link -with_entities 0 -link $form_link $template_id \ + create-new return_url [list name [my name]] title [list nls_language [$page nls_language]]] + } + } if {[$page exists __unresolved_object_type]} { # get the desired object_type for unresoved entries set object_type [$page set __unresolved_object_type] 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.185 -r1.186 --- openacs-4/packages/xowiki/tcl/package-procs.tcl 6 Nov 2009 12:26:18 -0000 1.185 +++ openacs-4/packages/xowiki/tcl/package-procs.tcl 16 Nov 2009 09:55:22 -0000 1.186 @@ -359,7 +359,7 @@ Package instproc resolve_package_path {path name_var} { # # In case, we can resolve the path against an xowiki instance, - # require the package, set the provide name of the object and + # require the package, set the provided name of the object and # return the package_id. If we cannot resolve the name, turn 0. # my upvar $name_var name @@ -381,9 +381,7 @@ return $package_id } } - } elseif {!([string match "http*//*" $path] - || [string match "ftp://*" $path] - )} { + } elseif {!([string match "http*://*" $path] || [string match "ftp://*" $path])} { return [my id] } 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 -N -r1.369 -r1.370 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 6 Nov 2009 12:26:18 -0000 1.369 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 16 Nov 2009 09:55:22 -0000 1.370 @@ -1227,6 +1227,28 @@ # (symbolic references to content items and content folders) # + Page ad_instproc package_item_ref { + -default_lang:required + -parent_id:required + link + } { + + The provided link might contain cross-package item_refs. When the + referenced package could not be resolved, the returned package_id + is 0. Otherwise, this method returns the results of item_ref. + + } { + set package_id [my package_id] + set referenced_package_id [$package_id resolve_package_path $link link] + if {$referenced_package_id == 0} { + return [list item_id 0 parent_id 0] + } + if {$referenced_package_id != $package_id} { + set parent_id [$referenced_package_id folder_id] + } + return [my item_ref -default_lang $default_lang -parent_id $parent_id $link] + } + Page ad_instproc item_ref { -default_lang:required -parent_id:required @@ -1273,7 +1295,7 @@ #set url [[my package_id] pretty_link -parent_id $(parent_id) $name] # - return [list link_type $(link_type) \ + return [list link_type $(link_type) form $(form) \ prefix $(prefix) stripped_name $(stripped_name) \ item_id $(item_id) parent_id $(parent_id)] } @@ -1298,8 +1320,9 @@ {-assume_folder:required false} element } { - #my log el=$element-assume_folder=$assume_folder set element [[my package_id] normalize_name $element] + #my msg el=$element-assume_folder=$assume_folder + set (form) "" if {[regexp {^(file|image|js|css|swf|folder):(.+)$} $element _ \ (link_type) (stripped_name)]} { @@ -1311,6 +1334,18 @@ set (prefix) "" set name $(stripped_name) } + } elseif {[regexp {^(..):([^:]{3,}?):(..):(.+)$} $element _ form_lang form (prefix) (stripped_name)]} { + array set "" [list link_type "link" form "$form_lang:$form"] + set name $(prefix):$(stripped_name) + } elseif {[regexp {^(..):([^:]{3,}?):(.+)$} $element _ form_lang form (stripped_name)]} { + array set "" [list link_type "link" form "$form_lang:$form" prefix $default_lang] + set name $default_lang:$(stripped_name) + } elseif {[regexp {^([^:]{3,}?):(..):(.+)$} $element _ form (prefix) (stripped_name)]} { + array set "" [list link_type "link" form "$default_lang:$form"] + set name $(prefix):$(stripped_name) + } elseif {[regexp {^([^:]{3,}?):(.+)$} $element _ form (stripped_name)]} { + array set "" [list link_type "link" form "$default_lang:$form" prefix $default_lang] + set name $default_lang:$(stripped_name) } elseif {[regexp {^(..):(.+)$} $element _ (prefix) (stripped_name)]} { array set "" [list link_type "link"] set name $(prefix):$(stripped_name) @@ -1379,7 +1414,7 @@ } return [list link_type $(link_type) prefix $(prefix) stripped_name $(stripped_name) \ - parent_id $parent_id item_id $item_id ] + form $(form) parent_id $parent_id item_id $item_id ] } @@ -1432,8 +1467,6 @@ # # TODO missing: typed links # - # TODO missing: Person:p1 - # ## do we have a typed link? prefix has more than two chars... # if {[regexp {^([^:/?][^:/?][^:/?]+):((..):)?(.+)$} $link _ \ # link_type _ lang stripped_name]} { @@ -1454,7 +1487,7 @@ set item_name [string trimleft $(prefix):$(stripped_name) :] Link create [self]::link \ - -page [self] \ + -page [self] -form $(form) \ -type $(link_type) [list -name $item_name] -lang $(prefix) \ [list -anchor $(anchor)] [list -query $(query)] \ [list -stripped_name $(stripped_name)] [list -label $label] \ 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.240 -r1.241 --- openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 6 Nov 2009 12:26:19 -0000 1.240 +++ openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 16 Nov 2009 09:55:22 -0000 1.241 @@ -272,6 +272,7 @@ namespace eval ::xowiki { + Page instproc new_link {-name -title -nls_language -parent_id page_package_id} { if {[info exists parent_id] && $parent_id eq ""} {unset parent_id} return [$page_package_id make_link -with_entities 0 $page_package_id \ Index: openacs-4/packages/xowiki/www/admin/test.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/test.tcl,v diff -u -N -r1.22 -r1.23 --- openacs-4/packages/xowiki/www/admin/test.tcl 6 Nov 2009 12:26:19 -0000 1.22 +++ openacs-4/packages/xowiki/www/admin/test.tcl 16 Nov 2009 09:55:23 -0000 1.23 @@ -545,7 +545,7 @@ $l destroy } } -test subsubsection "Testing links on english page" +test subsubsection "Testing links on English page" xowiki-test-links $p { hello 1 0 en:hello 1 0 @@ -562,7 +562,7 @@ # make page a german page $p nls_language de_DE -test subsubsection "Testing links on german page" +test subsubsection "Testing links on German page" xowiki-test-links $p { hello 0 0 en:hello 1 0