Index: openacs-4/packages/news-aggregator/www/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/news-aggregator/www/index.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/news-aggregator/www/index.tcl 28 Aug 2003 09:41:57 -0000 1.2 +++ openacs-4/packages/news-aggregator/www/index.tcl 20 Mar 2004 11:12:29 -0000 1.3 @@ -1,53 +1,202 @@ -#packages/news-aggregator/index.tcl ad_page_contract { The News Aggregator index page. @author Simon Carstensen simon@bcuni.net - @creation-date Jan 2004 + @creation-date 28-06-2003 } { - item_id:integer,notnull,optional,multiple -} -properties { - context_bar:onevalue + aggregator_id:integer,optional + purge_p:boolean,optional } -ad_maybe_redirect_for_registration - set user_id [ad_conn user_id] +set package_id [ad_conn package_id] +set package_url [ad_conn package_url] -set context_bar [ad_context_bar] +if { ![info exists aggregator_id] } { + # Check whether the user has an aggregator + if { !$user_id } { + ad_redirect_for_registration + ad_script_abort + } -if { ![empty_string_p [ad_parameter "blogger_url"]] } { - set blogger_url "/[ad_parameter "blogger_url"]/entry-edit" -} + set aggregator_id [news_aggregator::aggregator::user_default -user_id $user_id] -ad_form -name items -form { - {delete_submit:text(submit) {label "Delete" } } -} -on_submit { - if {[exists_and_not_null item_id]} { - foreach delete_id $item_id { - db_dml delete_item { *SQL* } - } + if { !$aggregator_id } { + + set user_name [db_string select_user_name {}] + set aggregator_name "${user_name}'s News Aggregator" + + set aggregator_id [news_aggregator::aggregator::new \ + -aggregator_name $aggregator_name \ + -package_id $package_id \ + -public_p 0 \ + -creation_user $user_id \ + -creation_ip [ad_conn peeraddr]] + + #load preinstalled subscriptions into aggregator + news_aggregator::aggregator::load_preinstalled_subscriptions \ + -aggregator_id $aggregator_id \ + -package_id $package_id } - ad_returnredirect "." - ad_script_abort + ad_returnredirect "$aggregator_id" } +set write_p [permission::permission_p \ + -object_id $aggregator_id \ + -privilege write] + +db_1row aggregator_info {} + +#if { $public_p == "f" } { +# permission::require_permission \ +# -object_id $aggregator_id \ +# -privilege write] +#} + +set page_title $aggregator_name +set context [list $page_title] + +set package_url [ad_conn package_url] +set url "$package_url$aggregator_id/" +set graphics_url "${package_url}graphics/" +set return_url [ad_conn url] +set aggregator_url [export_vars -base aggregator { return_url aggregator_id }] + set limit [ad_parameter "number_of_items_shown"] +set sql_limit [expr 7*$limit] -db_multirow -extend { content diff update_url } items items { *SQL* } { +set top 0 +set bottom 1073741824 - set text_only [util_remove_html_tags $item_description] +set counter 0 - if {[exists_and_not_null item_title] && ![string equal -nocase $item_title $text_only] } { - set content "$item_title. $item_description" +if { [info exists purge_p] && $public_p == "f" && $purge_p == "f" } { + set purge_p 0 +} elseif { $public_p == "t" } { + set purge_p 0 +} else { + set purge_p 1 +} + +# We only handle purges if the aggregator is not public +if { $purge_p } { +# set items_purges [db_map items_purges] + set purges [db_list_of_lists purges ""] + set saved_items [db_list saved_items ""] +} else { +# set items_purges "" + set purges [list] + set saved_items [list] +} + +if { $purge_p } { + set items_query [news_aggregator::aggregator::items_sql \ + -aggregator_id $aggregator_id \ + -package_id $package_id \ + -purge_p $purge_p] +} else { + set items_query [news_aggregator::aggregator::items_sql \ + -aggregator_id $aggregator_id \ + -package_id $package_id \ + -purge_p $purge_p \ + -limit_multiple 1] +} + +db_multirow -extend { + content + diff + source_url + save_url + unsave_url + item_blog_url + technorati_url + item_guid_link +} items items $items_query { + # Top is the first item + if { $item_id > $top } { + set top $item_id + } + + set purged_p 0 + # Handle purged items + foreach purge $purges { + if { $item_id <= [lindex $purge 0] && $item_id >= [lindex $purge 1] && + [lsearch $saved_items $item_id] == -1 } { + set purged_p 1 + } + } + if { $purged_p } { + continue + } + + if { [exists_and_not_null content_encoded] } { + if { [exists_and_not_null item_title] } { + set content "$item_title. $content_encoded" + } else { + set content $content_encoded + } } else { - set content $item_description + set text_only [util_remove_html_tags $item_description] + + if { [exists_and_not_null item_title] } { + set content "$item_title. $item_description" + } else { + set content $item_description + } } + + if { $item_permalink_p == "t" } { + set item_guid_link $item_original_guid + } else { + set item_guid_link $item_link + } - set diff [na_last_scanned [expr [expr [clock seconds] - [clock scan $last_scanned]] / 60]] + set diff [news_aggregator::last_scanned -diff [expr [expr [clock seconds] - [clock scan $last_scanned]] / 60]] + set source_url [export_vars -base source {source_id}] + set technorati_url "http://www.technorati.com/cosmos/links.html?url=$link&sub=Get+Link+Cosmos" - set update_url "source-update?[export_vars { user_id source_id feed_url last_scanned}]" + if { [string equal $write_p "1"] } { + if { [lsearch $saved_items $item_id] == -1 } { + set save_url [export_vars -base "${url}item-save" {item_id}] + set unsave_url "" + } else { + set unsave_url [export_vars -base "${url}item-unsave" {item_id}] + set save_url "" + } + set item_blog_url [export_vars -base "${url}item-blog" {item_id}] + } + + if { $item_id < $bottom } { + set bottom $item_id + } + + incr counter + if { $counter > $limit } { + break + } } -ad_return_template +if { [exists_and_not_null top] && [exists_and_not_null bottom] && + $top >= $bottom && $public_p == "f" && + [permission::permission_p -party_id $user_id -object_id $aggregator_id -privilege write] } { + + ad_form -name purge -action "[ad_conn package_url]$aggregator_id/purge" -form { + {purge_top:integer(hidden) + {value $top} + } + {purge_bottom:integer(hidden) + {value $bottom} + } + {purge_submit:text(submit) + {label "Purge this page of news"} + {html {accesskey "p"}} + } + } + set purge 1 +} else { + set purge 0 +} + +set purge_off_url "[ad_conn package_url]$aggregator_id/?purge_p=f" +set purge_on_url "[ad_conn package_url]$aggregator_id"