Index: openacs-4/packages/xowiki/tcl/weblog-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/weblog-procs.tcl,v diff -u -r1.29 -r1.30 --- openacs-4/packages/xowiki/tcl/weblog-procs.tcl 21 Nov 2007 10:22:46 -0000 1.29 +++ openacs-4/packages/xowiki/tcl/weblog-procs.tcl 21 Nov 2007 11:49:44 -0000 1.30 @@ -25,6 +25,29 @@ {entry_flag} } + ::xowiki::Weblog proc instantiate_forms {-entries_of:required -package_id:required} { + set folder_id [::$package_id folder_id] + set form_items [list] + foreach t [split $entries_of |] { + set form_item_id [::xo::db::CrClass lookup -name $t -parent_id $folder_id] + if {$form_item_id == 0} { + # the form does not exist in the CR. Maybe we can create it + # via a prototype page? + regexp {^.+:(.*)$} $t _ t + set page [$package_id import_prototype_page $t] + if {$page ne ""} {set form_item_id [$page item_id]} + } + if {$form_item_id == 0} {error "Cannot lookup page $t"} + + # make sure, the form object exists (when no item is available) + if {![my isobject ::$form_item_id]} { + ::xo::db::CrClass get_instance_from_db -item_id $form_item_id + } + lappend form_items $form_item_id + } + return $form_items + } + ::xowiki::Weblog instproc init {} { my instvar filter_msg package_id nr_items next_page_link prev_page_link my instvar date category_id tag ptag page_number page_size summary items locale @@ -82,12 +105,9 @@ bt.description s.body pi.instance_attributes] if {$entries_of ne ""} { my instvar form_items - set form_items [list] - foreach t [split $entries_of |] { - set form_item_id [::xo::db::CrClass lookup -name $t -parent_id $folder_id] - if {$form_item_id == 0} {error "Cannot lookup page $t"} - lappend form_items $form_item_id - } + set form_items [::xowiki::Weblog instantiate_forms \ + -entries_of $entries_of \ + -package_id $package_id] append extra_where_clause " and bt.page_template in ('[join $form_items ',']') and bt.page_instance_id = bt.revision_id " set base_type ::xowiki::FormPage set base_table xowiki_form_pagei 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 -r1.112 -r1.113 --- openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 21 Nov 2007 10:22:46 -0000 1.112 +++ openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 21 Nov 2007 11:49:45 -0000 1.113 @@ -155,12 +155,16 @@ set rev_link [$package_id make_link [self] revisions] set edit_link [$package_id make_link [self] edit return_url] set delete_link [$package_id make_link [self] delete return_url] - if {[my istype ::xowiki::FormPage]} { - set template_id [my page_template] - set form [$package_id pretty_link [$template_id name]] - set new_link [$package_id make_link -link $form $template_id create-new return_url] + if {[my exists __link(new)]} { + set new_link [my set __link(new)] } else { - set new_link [$package_id make_link $package_id edit-new object_type return_url autoname] + if {[my istype ::xowiki::FormPage]} { + set template_id [my page_template] + set form [$package_id pretty_link [$template_id name]] + set new_link [$package_id make_link -link $form $template_id create-new return_url] + } else { + set new_link [$package_id make_link $package_id edit-new object_type return_url autoname] + } } set admin_link [$package_id make_link -privilege admin -link admin/ $package_id {} {}] set index_link [$package_id make_link -privilege public -link "" $package_id {} {}] Index: openacs-4/packages/xowiki/www/prototypes/news.page =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/prototypes/news.page,v diff -u -r1.4 -r1.5 --- openacs-4/packages/xowiki/www/prototypes/news.page 21 Nov 2007 10:23:11 -0000 1.4 +++ openacs-4/packages/xowiki/www/prototypes/news.page 21 Nov 2007 11:50:02 -0000 1.5 @@ -14,12 +14,25 @@ {-entries_of en:news-item} } + my get_parameters # # Don't add the footer (with tags, general comments, etc.) to the # aggregated page, since this can be confusing.. # [my info parent] set __no_footer 1 + + # + # Provide a tailored link for the wiki menu + # + set forms [::xowiki::Weblog instantiate_forms \ + -entries_of $entries_of \ + -package_id $package_id] + set template_id [lindex $forms 0] + set form_link [$package_id pretty_link [$template_id name]] + set new_link [$package_id make_link -link $form_link $template_id create-new return_url] + [my info parent] set __link(new) $new_link + # # The following definition is the default rendering per # news entry. This is executed in the context of every displayed page.