# -*- tcl-*-
# $Id: announcements.page,v 1.3 2007/07/28 18:03:16 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 "" \
"
" \
"
($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 "\
"
}
if {[info exists next_page_link]} {
set next "\
"
}
set page [my set __page]
[my set __parent] instvar weblog_obj
set rss [$page include_portlet \
"rss-button -title {[$page title]} -entries_of [$weblog_obj 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 \
-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]
}
}