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.9 -r1.10 --- openacs-4/packages/xowiki/tcl/weblog-procs.tcl 15 May 2007 10:49:37 -0000 1.9 +++ openacs-4/packages/xowiki/tcl/weblog-procs.tcl 18 May 2007 09:07:44 -0000 1.10 @@ -5,13 +5,16 @@ Class create ::xowiki::Weblog -parameter { package_id - page_size - page_number + {page_size 20} + {page_number ""} date tag ptag category_id + instances_of filter_msg + {sort_composite ""} + {no_footer false} {name_filter ""} {entry_label "Postings"} {exclude_item_ids 0} @@ -22,7 +25,7 @@ ::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 - my instvar name_filter entry_label + my instvar name_filter entry_label instances_of sort_composite my log "--W starting" set folder_id [::$package_id set folder_id] @@ -69,38 +72,55 @@ if {$name_filter ne ""} { append extra_where_clause "and ci.name ~ E'$name_filter' " } - - # create an item container, which delegates rendering to its chidlren + set base_type ::xowiki::Page + set base_table xowiki_pagei + set attributes [list cr.revision_id p.publish_date p.title p.creator p.creation_user \ + p.description s.body] + if {$instances_of ne ""} { + set form_items [list] + foreach t [split $instances_of |] { + set form_item_id [::xowiki::Form lookup -name $t -parent_id $folder_id] + if {$form_item_id == 0} {error "Cannot lookup page $t"} + lappend form_items $form_item_id + } + append extra_where_clause " and p.page_template in ('[join $form_items ',']') and p.page_instance_id = cr.revision_id " + set base_type ::xowiki::FormInstance + set base_table xowiki_form_instancei + lappend attributes instance_attributes + } + + # create an item container, which delegates rendering to its children set items [::xo::OrderedComposite new -proc render {} { set content "" - foreach c [my children] { - $c mixin add [my set entry_renderer] - append content [$c render] - } + foreach c [my children] { append content [$c render] } return $content }] + foreach i [split [my exclude_item_ids] ,] {lappend ::xowiki_page_item_id_rendered $i} $items set weblog_obj [self] set sql \ [list -folder_id $folder_id \ - -select_attributes [list p.publish_date p.title p.creator p.creation_user \ - p.description s.body] \ + -select_attributes $attributes \ -orderby "p.publish_date desc" \ - -page_number $page_number -page_size $page_size \ - -extra_from_clause $extra_from_clause \ - -extra_where_clause "and ci.item_id not in ([my exclude_item_ids]) \ + -from_clause "$extra_from_clause , $base_table p left outer join syndication s on s.object_id = p.revision_id" \ + -where_clause "ci.item_id not in ([my exclude_item_ids]) \ and ci.name != '::$folder_id' and ci.name not like '%weblog%' $date_clause \ [::xowiki::Page container_already_rendered ci.item_id] \ and ci.content_type not in ('::xowiki::PageTemplate','::xowiki::Object') \ and ci.publish_status <> 'production' \ $extra_where_clause" ] + + if {$page_number ne ""} { + lappend sql -page_number $page_number -page_size $page_size + } - set nr_items [db_string count [eval ::xowiki::Page select_query $sql -count true]] + set nr_items [db_string count [eval $base_type instance_select_query $sql -count true]] - set s [::xowiki::Page instantiate_objects -sql [eval ::xowiki::Page select_query $sql]] + set s [$base_type instantiate_objects -sql [eval $base_type instance_select_query $sql]] + foreach c [$s children] { - $c instvar page_id publish_date title name item_id creator creation_user description body + $c instvar revision_id publish_date title name item_id creator creation_user description body regexp {^([^.]+)[.][0-9]+(.*)$} $publish_date _ publish_date tz set pretty_date [util::age_pretty -timestamp_ansi $publish_date \ @@ -116,47 +136,56 @@ "[string range $body 0 150]..." : $description}] } else { # do full instantiation and rendering - # ns_log notice "--Render object=$p, $page_id $name $title" - set p [::Generic::CrItem instantiate -item_id 0 -revision_id $page_id] + # ns_log notice "--Render object=$p, $revision_id $name $title" + set p [::Generic::CrItem instantiate -item_id 0 -revision_id $revision_id] + if {[my no_footer]} {$p set __no_footer 1} if {[catch {$p set description [$p render]} errorMsg]} { - set description "Render Error ($errorMsg) $page_id $name $title" + set description "Render Error ($errorMsg) $revision_id $name $title" } } $p set pretty_date $pretty_date $p set publish_date $publish_date my log "--W setting $p set publish_date $publish_date" #$p proc destroy {} {my log "--Render temporal object destroyed"; next} - #ns_log notice "--W Render object $p DONE $page_id $name $title " - + #ns_log notice "--W Render object $p DONE $revision_id $name $title " + $p mixin add [my set entry_renderer] $items add $p } array set smsg {1 full 0 summary} set flink "$smsg($summary)" - set nr [llength [$items children]] - set from [expr {($page_number-1)*$page_size+1}] - set to [expr {($page_number-1)*$page_size+$nr}] - set range [expr {$nr > 1 ? "$from - $to" : $from}] - - if {$filter_msg ne ""} { - append filter_msg ", $range of $nr_items $entry_label (all, $flink)" - } else { - append filter_msg "Showing $range of $nr_items $entry_label ($flink)" - } - - set next_p [expr {$nr_items > $page_number*$page_size}] - set prev_p [expr {$page_number > 1}] + if {$page_number ne ""} { + set nr [llength [$items children]] + set from [expr {($page_number-1)*$page_size+1}] + set to [expr {($page_number-1)*$page_size+$nr}] + set range [expr {$nr > 1 ? "$from - $to" : $from}] + + if {$filter_msg ne ""} { + append filter_msg ", $range of $nr_items $entry_label (all, $flink)" + } else { + append filter_msg "Showing $range of $nr_items $entry_label ($flink)" + } + + set next_p [expr {$nr_items > $page_number*$page_size}] + set prev_p [expr {$page_number > 1}] - if {$next_p} { - set query [::xo::update_query_variable [ns_conn query] page_number [expr {$page_number+1}]] - set next_page_link [export_vars -base [::xo::cc url] $query] + if {$next_p} { + set query [::xo::update_query_variable [ns_conn query] page_number [expr {$page_number+1}]] + set next_page_link [export_vars -base [::xo::cc url] $query] + } + if {$prev_p} { + set query [::xo::update_query_variable [ns_conn query] page_number [expr {$page_number-1}]] + set prev_page_link [export_vars -base [::xo::cc url] $query] + } } - if {$prev_p} { - set query [::xo::update_query_variable [ns_conn query] page_number [expr {$page_number-1}]] - set prev_page_link [export_vars -base [::xo::cc url] $query] - } my proc destroy {} {my log "--W"; next} + + if {$sort_composite ne ""} { + foreach {kind att direction} [split $sort_composite ,] break + if {$kind eq "method"} {$items mixin add ::xo::OrderedComposite::MethodCompare} + $items orderby -order [expr {$direction eq "asc" ? "increasing" : "decreasing"}] $att + } my log "--W done" }