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 -r1.180 -r1.181 --- openacs-4/packages/xowiki/tcl/form-field-procs.tcl 4 Jul 2010 16:47:35 -0000 1.180 +++ openacs-4/packages/xowiki/tcl/form-field-procs.tcl 9 Jul 2010 10:30:40 -0000 1.181 @@ -2113,21 +2113,35 @@ # note that the includelet "include" can be used for implementing symbolic links # to other xowiki pages. Class include -superclass text -parameter { + } -extend_slot validator link + + include instproc convert_to_internal {} { + my instvar value object + set page [[$object package_id] get_page_from_item_ref \ + -default_lang [$object lang] \ + -parent_id [$object parent_id] \ + $value] + if {$page ne ""} { + # todo: maybe add to classical references... + $object references_add [list [list [$page item_id] object_link]] + } } + 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} { + set page [[$object package_id] get_page_from_item_ref \ + -default_lang [$object lang] \ + -parent_id [$object parent_id] \ + $v] + #my msg page=$page + if {$page eq ""} { # 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] + return [$page render] } ########################################################### 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.228 -r1.229 --- openacs-4/packages/xowiki/tcl/package-procs.tcl 8 Jul 2010 12:10:17 -0000 1.228 +++ openacs-4/packages/xowiki/tcl/package-procs.tcl 9 Jul 2010 10:30:40 -0000 1.229 @@ -613,7 +613,7 @@ -parent_id $parent_id \ -forms $form \ -package_id $id] 0] - my log "instantiate_forms -parent_id $parent_id -forms $form => $form_id " + #my log "instantiate_forms -parent_id $parent_id -forms $form => $form_id " if {$form_id ne ""} { if {$parent_id eq ""} {unset parent_id} set form_link [$form_id pretty_link] @@ -995,16 +995,19 @@ } elseif {[regexp {^(.+)\0$} $element _ (stripped_name)]} { array set "" [list link_type "link" form "en:folder.form" prefix ""] set name $(stripped_name) - set use_default_lang 0 } elseif {$assume_folder} { array set "" [list link_type "link" form "en:folder.form" prefix "" stripped_name $element] set name $element - set use_default_lang 0 } else { array set "" [list link_type "link" prefix $default_lang stripped_name $element] set name $default_lang:$element set use_default_lang 1 } + + if {$use_default_lang && $default_lang eq ""} { + my log "WARNING: Trying to use empty default lang on link '$element' => $name" + } + set name [string trimright $name \0] set (stripped_name) [string trimright $(stripped_name) \0] @@ -1205,7 +1208,7 @@ -parent_id $search_parent_id \ $link] - #my msg "item-ref for '$link' returns [array get {}]" + #my msg "item-ref for '$link' search parent $search_parent_id, parent $parent_id, returns\n[array get {}]" if {$(item_id)} { set page [::xo::db::CrClass get_instance_from_db -item_id $(item_id)] if {[$page package_id] ne [my id] || [$page parent_id] != $(parent_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 -r1.417 -r1.418 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 8 Jul 2010 12:17:25 -0000 1.417 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 9 Jul 2010 10:30:40 -0000 1.418 @@ -1340,28 +1340,6 @@ Page instforward item_ref -verbose {%my package_id} %proc - 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 [$referenced_package_id item_ref -default_lang $default_lang -parent_id $parent_id $link] - } - Page instproc pretty_link { {-anchor ""} {-query ""} @@ -1677,14 +1655,34 @@ return 1 } - Page instproc update_references {page_id references} { + Page instproc references_add {references} { + # TODO: make these persistent, maybe bypass reference to in link to classical references + my instvar item_id + foreach ref $references { + foreach {r link_type} $ref break + set already_recorded [db_0or1row [my qn [self proc]] " + select * from xowiki_references + where page = :item_id and reference = :r and link_type = :link_type"] + my msg "check r=$r, link_type=$link_type => $already_recorded" + + if {!$already_recorded} { + my msg "RECORD $r $link_type $item_id" + db_dml [my qn insert_reference] \ + "insert into xowiki_references (reference, link_type, page) \ + values (:r,:link_type,:item_id)" + } + } + } + + Page instproc references_update {references} { + my instvar item_id db_dml [my qn delete_references] \ - "delete from xowiki_references where page = $page_id" + "delete from xowiki_references where page = :item_id" foreach ref $references { foreach {r link_type} $ref break db_dml [my qn insert_reference] \ "insert into xowiki_references (reference, link_type, page) \ - values ($r,:link_type,$page_id)" + values (:r,:link_type,:item_id)" } } @@ -1808,7 +1806,7 @@ # #my msg "we have the content, update=$update_references, unresolved=[my set unresolved_references]" if {$update_references || [my set unresolved_references] > 0} { - my update_references [my item_id] [lsort -unique [my set references]] + my references_update [lsort -unique [my set references]] } my unset references #