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"