# -*- tcl-*- # $Id: announcements.page,v 1.5 2007/11/13 11:36:45 gustafn Exp $ ::xowiki::Object new -title "Announcements" -text { # # A sample Announcements object. # my initialize -parameter { {-page_size:integer 10} {-page_number:integer 1} {-summary:boolean 0} {-date ""} {-tag ""} {-ptag ""} {-entries_of en:announcement-entry} } # The name filter is not the most efficient way of selecting # autonamed entries. However, most times the number of announcements items # is not overwhelming, so we can live with that for the time being. # TODO: more efficient selection of autonamed entries # # The following definition is the default rendering per # announcements entry. This is executed in the context of every displayed page. # Class create EntryRenderer -instproc render {} { my instvar package_id name title creator creation_user pretty_date description publish_date [my set __parent] instvar weblog_obj set link [::$package_id pretty_link $name] set more [expr {[$weblog_obj summary] ? " \[#xowiki.weblog-more#\]" : ""}] append more "

" set day [lc_time_fmt [my set publish_date] "%x"] set my_footer [my htmlFooter] append content "
" \ "

$title

" \ " ($day)
" \ $description $more $my_footer \n\ "
" } # # The following definition is the renderer for the full weblog. # This is executed in the context of the whole weblog object # Class create AnnouncementsRenderer -instproc render {} { my instvar filter_msg link name prev_page_link next_page_link title set filter "" set prev "" set next "" if {[info exists filter_msg]} { set filter "
$filter_msg
" } if {[info exists prev_page_link]} { set prev "\ Previous Page" } if {[info exists next_page_link]} { set next "\ Next Page" } set page [my set __page] set rss [$page include "rss-button -title {[$page title]} -entries_of [my entries_of]"] #set rss [list [self] [lsort [my info vars]]] return "
$filter [next] $prev $next
$rss
" } my proc content {} { my get_parameters set page [my info parent] if {[$page exists __including_page]} { set i [$page set __including_page] set exclude_item_ids [$i item_id] $i set render_adp 0 ;# no double substitutions #my log "--W including page $i" } else { #my log "--W NO including page" set exclude_item_ids [$page item_id] $page set __no_footer 1 } # on the announcements page, an edit-new should not create an object ::xo::cc set_parameter object_type ::xowiki::Page ::xo::cc set_parameter autoname 1 # use the above defined custom renderers set renderer [self]::AnnouncementsRenderer set entry_renderer [self]::EntryRenderer set w [::xowiki::Weblog new -destroy_on_cleanup \ -package_id $package_id \ -page_size $page_size \ -page_number $page_number \ -summary $summary \ -date $date \ -locale "default+system" \ -category_id [ns_queryget category_id] \ -tag $tag \ -ptag $ptag \ -entry_label "Announcements" \ -exclude_item_ids $exclude_item_ids \ -entry_renderer $entry_renderer \ -entry_flag __no_form_page_footer \ -entries_of $entries_of \ ] $w set __page $page $w mixin add $renderer return [$w render] } }