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 -r1.67 -r1.68
--- openacs-4/packages/xowiki/tcl/link-procs.tcl 1 Jul 2009 10:09:40 -0000 1.67
+++ openacs-4/packages/xowiki/tcl/link-procs.tcl 27 Oct 2009 11:30:28 -0000 1.68
@@ -67,12 +67,24 @@
if {![my exists label]} {my label $name}
if {![my exists parent_id]} {my parent_id [$page parent_id]}
if {![my exists package_id]} {my package_id [$page package_id]}
-
#my msg "--L link has class [my info class] // $class"
}
+ Link instproc link_name {-lang -stripped_name} {
+ return $lang:$stripped_name
+ }
Link instproc resolve {} {
- #my msg "--lookup of [my name] -page [my page] -> [[my package_id] lookup -name [my name] -parent_id [my parent_id]]"
- return [[my package_id] lookup -name [my name] -parent_id [my parent_id]]
+ my instvar package_id lang
+ set parent_id [$package_id get_parent_and_name -lang [my lang] \
+ -path [my stripped_name] -folder_id [my parent_id] \
+ parent local_name]
+ if {$parent eq ""} {
+ set parent_id [my parent_id]
+ set name [my name]
+ } else {
+ set name [my link_name -lang [my lang] -stripped_name $local_name]
+ }
+ #my msg "parent=$parent, parent_id=$parent_id, name='$name'"
+ return [$package_id lookup -name $name -parent_id $parent_id]
}
Link instproc render_found {href label} {
return "$label"
@@ -85,6 +97,41 @@
\] "
}
}
+ Link instproc pretty_link {item_id} {
+ my instvar package_id
+ return [::$package_id pretty_link -lang [my lang] \
+ -anchor [my anchor] -query [my query] [my name]]
+ }
+ Link instproc new_link {} {
+ my instvar package_id
+ set page [my page]
+ if {[$page exists __unresolved_object_type]} {
+ # get the desired object_type for unresoved entries
+ set object_type [$page set __unresolved_object_type]
+ } else {
+ set object_type [[$page info class] set object_type]
+ if {$object_type ne "::xowiki::Page" && $object_type ne "::xowiki::PlainPage"} {
+ # TODO: this is a temporary solution. we should find a way to
+ # pass similar to file or image entries the type of this
+ # entry. Maybe we can get the type as well from a kind of
+ # blackboard, where the type of the "edit" wiki-menu-entry is
+ # stored as well.
+ set object_type ::xowiki::Page
+ }
+ }
+ set parent_id [$package_id get_parent_and_name -path [my stripped_name] \
+ -lang [my lang] -folder_id [$package_id folder_id] \
+ parent local_name]
+ if {$parent eq ""} {
+ set parent_id ""
+ set name [my name]
+ } else {
+ set name [my lang]:$local_name
+ }
+ return [$page new_link -name $name -title [my label] -parent_id $parent_id \
+ -nls_language [$page nls_language] $package_id]
+ }
+
Link instproc render {} {
my instvar package_id
set page [my page]
@@ -93,30 +140,10 @@
if {$item_id} {
$page lappend references [list $item_id [my type]]
::xowiki::Package require $package_id
- set href [::$package_id pretty_link -lang [my lang] \
- -anchor [my anchor] -query [my query] [my name]]
- my render_found $href [my label]
+ my render_found [my pretty_link $item_id] [my label]
} else {
$page incr unresolved_references
- if {[$page exists __unresolved_object_type]} {
- # get the desired object_type for unresoved entries
- set object_type [$page set __unresolved_object_type]
- } else {
- set object_type [[$page info class] set object_type]
- if {$object_type ne "::xowiki::Page" && $object_type ne "::xowiki::PlainPage"} {
- # TODO: this is a temporary solution. we should find a way to
- # pass similar to file or image entries the type of this
- # entry. Maybe we can get the type as well from a kind of
- # blackboard, where the type of the "edit" wiki-menu-entry is
- # stored as well.
- set object_type ::xowiki::Page
- }
- }
- set new_link [$page new_link -name [my name] -title [my label] \
- -nls_language [$page nls_language] $package_id]
- #set href [export_vars -base [$package_id package_url] \
- # {{edit-new 1} object_type name title}]
-
+ set new_link [my new_link]
set html [my render_not_found $new_link [my label]]
$page lappend __unresolved_references $html
return $html
@@ -139,11 +166,44 @@
return 0
}
+ #
+ # folder links
+ #
+ Class create ::xowiki::Link::folder -superclass ::xowiki::Link
+ ::xowiki::Link::folder instproc link_name {-lang -stripped_name} {
+ return $stripped_name
+ }
+ ::xowiki::Link::folder instproc pretty_link {item_id} {
+ my instvar package_id
+ set folder [::xo::db::CrFolder get_instance_from_db -item_id $item_id]
+ return [::$package_id pretty_link \
+ -anchor [my anchor] -parent_id [$folder parent_id] -query [my query] [$folder name] ]
+ }
+ ::xowiki::Link::folder instproc new_link {} {
+ my instvar package_id
+ set page [my page]
+ set parent_id [$package_id get_parent_and_name \
+ -path [my name] -folder_id [$page parent_id] -lang [my lang] \
+ parent local_name]
+ if {$parent eq ""} {
+ set parent_id [my parent_id]
+ set name [my name]
+ } else {
+ set name $local_name
+ }
+ return [$package_id make_link -with_entities 0 \
+ $package_id \
+ edit-new \
+ [list object_type ::xo::db::CrFolder] \
+ [list name $local_name] \
+ [list parent_id $parent_id] \
+ [list return_url [::xo::cc url]] \
+ autoname]
+ }
#
# language links
#
-
Class create ::xowiki::Link::language -superclass ::xowiki::Link -parameter {
return_only
}