Here are patches against ACS Tcl 4.2. The authors of this code are:
Ed Avis
+ Usage:
+
+ # Find the package_id of a mounted instance of general-comments
+ set pkg_id [site_node_closest_package "general-comments"]
+
+
+ @author Ed Avis (ed@membled.com)
+ @creation-date 2001-06-15
+
+ @param default The value to return if no package can be found. If
+ "" or not given, an 'installation error' is
+ produced when no instance of the required package
+ can be found.
+ @param url URL of the node from which to start the search
+ (defaults to [ad_conn url] if "")
+ @param package_key The type of the package for which we are looking
+
+ @return URL of closest mounted instance (if two equally close,
+ picks one arbitrarily). Returns $default, or produces a
+ user error, if no such package can be found.
+} {
+ if {[empty_string_p $url]} { set url [ad_conn url] }
+
+ db_foreach get_any_instance {
+ select site_node.url(node_id) as instance_url
+ from apm_packages, site_nodes
+ where package_key = :package_key
+ and site_nodes.object_id = package_id
+ } {
+ set distance [url_distance $url $instance_url]
+ if {! [info exists best_url]} {
+ set best_url $instance_url
+ set best_distance $distance
+ } elseif {$distance < $best_distance} {
+ set best_url $instance_url
+ set best_distance $distance
+ }
+ }
+ if {[info exists best_url]} { return $best_url }
+
+ # Nothing found.
+ if {! [exists_and_not_null default]} {
+ ad_return_complaint 1 "
+
export_url_vars [ns_urlencode foo]=[ns_urlencode $the_value].
+ export_url_vars [ad_urlencode foo]=[ad_urlencode $the_value].
@@ -1286,7 +1298,7 @@
set value [lindex $var_spec_pieces 1]
lappend params "$var=$value"
if { $sign_p } {
- lappend params "[ns_urlencode [ns_urldecode $var]:sig]=[ns_urlencode [ad_sign [ns_urldecode $value]]]"
+ lappend params "[ad_urlencode [ns_urldecode $var]:sig]=[ad_urlencode [ad_sign [ns_urldecode $value]]]"
}
} else {
set var_spec_pieces [split $var_spec ":"]
@@ -1298,15 +1310,15 @@
switch $type {
multiple {
foreach item $upvar_value {
- lappend params "[ns_urlencode $var]=[ns_urlencode $item]"
+ lappend params "[ad_urlencode $var]=[ad_urlencode $item]"
}
}
default {
- lappend params "[ns_urlencode $var]=[ns_urlencode $upvar_value]"
+ lappend params "[ad_urlencode $var]=[ad_urlencode $upvar_value]"
}
}
if { $sign_p } {
- lappend params "[ns_urlencode "$var:sig"]=[ns_urlencode [ad_sign $upvar_value]]"
+ lappend params "[ad_urlencode "$var:sig"]=[ad_urlencode [ad_sign $upvar_value]]"
}
}
}
@@ -1333,7 +1345,7 @@
$vars_to_passthrough == "" ||
([lsearch -exact $vars_to_passthrough $varname] != -1)
} {
- lappend params "[ns_urlencode $varname]=[ns_urlencode $varvalue]"
+ lappend params "[ad_urlencode $varname]=[ad_urlencode $varvalue]"
}
}
return [join $params "&"]
@@ -2122,13 +2134,6 @@
} else {
return [lindex $to_list $index]
}
-}
-
-proc_doc ad_urlencode { string } "same as ns_urlencode except that dash and underscore are left unencoded." {
- set encoded_string [ns_urlencode $string]
- regsub -all {%2d} $encoded_string {-} encoded_string
- regsub -all {%5f} $encoded_string {_} ad_encoded_string
- return $ad_encoded_string
}
ad_proc ad_get_cookie {
**********************************************************************
Bypassed unnecessary check in acs-templating for file upload:
diff -ru acs42/packages/acs-templating/tcl/data-procs.tcl hta_copy/packages/acs-templating/tcl/data-procs.tcl
--- acs42/packages/acs-templating/tcl/data-procs.tcl Mon Sep 3 13:14:31 2001
+++ hta_copy/packages/acs-templating/tcl/data-procs.tcl Mon Sep 3 13:14:35 2001
@@ -50,6 +50,11 @@
upvar 2 $message_ref message $value_ref value
+ # FIXME: a Unix filename can have any character except NUL. So why
+ # the regexp below? It's only the _client's_ filename anyhow.
+ #
+ return 1
+
set result [regexp {^[a-zA-Z0-9_-]+$} $value]
if { ! $result } {
**********************************************************************
Changes to bboard. I didn't make these changes myself so I can't
fully explain the rationale for them, but they are pretty
self-explanatory.
diff -ru acs42/packages/bboard/www/forum-by-category.tcl hta_copy/packages/bboard/www/forum-by-category.tcl
--- acs42/packages/bboard/www/forum-by-category.tcl Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/bboard/www/forum-by-category.tcl Mon Sep 3 14:12:13 2001
@@ -95,7 +95,7 @@
db_multirow messages messages_select_by_cat "
select message_id, title, num_replies,
- first_names||' '||last_name as full_name,
+ first_names||' '||last_name as full_name, persons.person_id,
to_char(last_reply_date,'MM/DD/YY hh12:Mi am') as last_updated
from bboard_messages_by_category b, persons
where person_id = sender
diff -ru acs42/packages/bboard/www/forum.tcl hta_copy/packages/bboard/www/forum.tcl
--- acs42/packages/bboard/www/forum.tcl Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/bboard/www/forum.tcl Mon Sep 3 14:12:13 2001
@@ -28,13 +28,16 @@
ad_require_permission $forum_id bboard_read_forum
-db_1row forum_info {
+if {![db_0or1row forum_info {
select short_name as forum_name, moderated_p,
acs_permission.permission_p(:forum_id, :user_id, 'admin') as admin_p,
acs_permission.permission_p(:forum_id, :user_id, 'bboard_create_category')
as category_create_p
from bboard_forums
where forum_id = :forum_id
+}]} {
+#FIXME not sure what to here.
+ad_return_error "Couldn't find this forum" "Fault Report"
}
set moderator_p 0
@@ -57,8 +60,8 @@
set last_n_days "0"
}
}
-
-set context_bar [list $forum_name]
+set context_bar [ad_context_bar]
+set context_bar [ad_context_bar $forum_name]
set title $forum_name
set package_id [ad_conn package_id]
@@ -67,7 +70,7 @@
db_multirow messages messages_select {
select message_id, title, num_replies,
- first_names||' '||last_name as full_name,
+ first_names||' '||last_name as full_name, person_id,
to_char(last_reply_date,'MM/DD/YY hh12:Mi am') as last_updated
from bboard_messages_all b, persons
where forum_id = :forum_id
@@ -102,7 +105,7 @@
db_multirow messages messages_select_approved {
select message_id, title, num_replies,
- first_names||' '||last_name as full_name,
+ first_names||' '||last_name as full_name, person_id,
to_char(last_reply_date,'MM/DD/YY hh12:Mi am') as last_updated
from bboard_messages_all b, persons
where forum_id = :forum_id
diff -ru acs42/packages/bboard/www/index.adp hta_copy/packages/bboard/www/index.adp
--- acs42/packages/bboard/www/index.adp Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/bboard/www/index.adp Mon Sep 3 14:12:13 2001
@@ -1,6 +1,6 @@
Listed below are the discussions people have been having on local issues. Click on them to see what is being said and join in the discussion. E-mail us if you would like us to set up a new forum.
+
+ Type in a message below and press 'Send/Refresh'. The message will
+ be seen by anyone else viewing this web page, so it is not private.
+ People will see that the message comes from '@user_name@'.
+
+
+
@@ -64,4 +74,4 @@
@title@
-
@messages.title@
@messages.full_name@
+ @messages.full_name@
<%= [expr @messages.num_replies@-1] %>
diff -ru acs42/packages/bboard/www/messages-by-user.tcl hta_copy/packages/bboard/www/messages-by-user.tcl
--- acs42/packages/bboard/www/messages-by-user.tcl Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/bboard/www/messages-by-user.tcl Mon Sep 3 14:12:13 2001
@@ -34,7 +34,7 @@
if [string equal $moderated_p f] {
db_multirow messages messages_select {
- select title, num_replies, message_id,
+ select title, num_replies, message_id, person_id,
first_names||' '||last_name as full_name
from bboard_messages_all, persons
where sender = :user_id
@@ -43,7 +43,7 @@
}
} else {
db_multirow messages messages_select {
- select title, num_replies, message_id,
+ select title, num_replies, message_id, person_id,
first_names||' '||last_name as full_name
from bboard_messages_all, persons
where sender = :user_id
**********************************************************************
The chat package. I've heard stuff on the bboards about scrapping
this altogether, but if you are keeping the aD package for a bit
longer you might want these fixes. They are to tidy up the interface
and make it a bit friendlier. In particular it is possible to avoid
the confusing 'HTML Chat' and 'Java Chat' links.
diff -ru acs42/packages/chat/chat.info hta_copy/packages/chat/chat.info
--- acs42/packages/chat/chat.info Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/chat/chat.info Mon Sep 3 13:14:36 2001
@@ -6,13 +6,14 @@
Most recent news article
+ Previous articles
+Controls
-
\ No newline at end of file
+
diff -ru acs42/packages/news/www/index.tcl hta_copy/packages/news/www/index.tcl
--- acs42/packages/news/www/index.tcl Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/news/www/index.tcl Mon Sep 3 13:14:39 2001
@@ -13,27 +13,26 @@
{view:trim "live"}
} -properties {
-
-
title:onevalue
context_bar:onevalue
news_admin_p:onevalue
news_create_p:onevalue
news_items:multirow
allow_search_p:onevalue
+ show_first_item_p:onevalue
pagination_link:onevalue
item_create_link:onevalue
view_switch_link:onevalue
+ first_item_id:onevalue
+ first_publish_title:onevalue
+ first_publish_body:onevalue
+ first_creator_link:onevalue
}
-
+set context_bar [ad_context_bar]
set package_id [ad_conn package_id]
ad_require_permission $package_id news_read
-
-set context_bar {}
-
-
# switches for privilege-enabled links: admin for news_admin, submit for registered users
set news_admin_p [ad_permission_p $package_id news_admin]
set news_create_p [ad_permission_p $package_id news_create]
@@ -42,11 +41,13 @@
# switch for showing interface to site-wide-search for news
set allow_search_p [ad_parameter ShowSearchInterfaceP "news" 1]
+# switch for showing the first news story inline
+set show_first_item_p [ad_parameter ShowFirstItemP "news" 1]
# view switch in live | archived news
if { [string equal "live" $view] } {
- set title "News"
+ set title "Project News - What's New"
set view_clause "
publish_date < sysdate
and (archive_date is null or archive_date > sysdate)"
@@ -110,6 +111,29 @@
if { $count >= [expr $start + $max_dspl] } break
}
+
+if {$show_first_item_p} {
+ db_0or1row get_first_item "
+ select item_id as first_item_id,
+ publish_title as first_publish_title,
+ publish_body as first_publish_body,
+ '' || item_creator || ''
+ as first_creator_link
+ from (
+ select *
+ from news_items_approved
+ where $view_clause
+ and package_id = :package_id
+ order by publish_date desc, item_id desc
+ ) where rownum = 1
+ "
+
+ if {! [info exists first_item_id]} {
+ # There isn't a first item - don't show it after all.
+ set show_first_item_p 0
+ }
+}
# make paging links
if { $count < [expr $start + $max_dspl] } {
diff -ru acs42/packages/news/www/item-create-3.tcl hta_copy/packages/news/www/item-create-3.tcl
--- acs42/packages/news/www/item-create-3.tcl Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/news/www/item-create-3.tcl Mon Sep 3 13:14:39 2001
@@ -13,7 +13,7 @@
publish_body:notnull,allhtml,trim
{publish_date_ansi:trim "[db_null]"}
{archive_date_ansi:trim "[db_null]"}
- html_p:notnull
+ mime_type:notnull
permanent_p:notnull
} -properties {
@@ -21,7 +21,7 @@
title:onevalue
context_bar:onevalue
}
-
+set context_bar ""
# news_create permissions
set package_id [ad_conn package_id]
@@ -55,11 +55,12 @@
set user_id [ad_conn "user_id"]
-# set mime_type
-if {[string match $html_p t]} {
- set mime_type "text/html"
-} else {
- set mime_type "text/plain"
+# Check mime_type. Maybe this should move into a check {} block?
+case -- $mime_type {
+ text/plain {}
+ text/x-wrappable {}
+ text/html {}
+ default { error "unrecognized mime_type $mime_type" }
}
@@ -94,7 +95,7 @@
if { ![string equal "open" [ad_parameter ApprovalPolicy "news" "wait"]] } {
# case: user submitted news item, is returned to a Thank-you page
set title "News item submitted"
- set context_bar [list $title]
+ set context_bar [ad_context_bar $title]
ad_return_template item-create-thankyou }
} else {
diff -ru acs42/packages/news/www/item-create.adp hta_copy/packages/news/www/item-create.adp
--- acs42/packages/news/www/item-create.adp Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/news/www/item-create.adp Mon Sep 3 13:14:39 2001
@@ -33,9 +33,13 @@
diff -ru acs42/packages/news/www/item-create.tcl hta_copy/packages/news/www/item-create.tcl
--- acs42/packages/news/www/item-create.tcl Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/news/www/item-create.tcl Mon Sep 3 13:14:39 2001
@@ -33,7 +33,7 @@
}
set title "Create News Item"
-set context_bar [list $title]
+set context_bar [ad_context_bar $title]
set proj_archival_date [db_string week "select sysdate + [ad_parameter ActiveDays "news" 14] from dual"]
diff -ru acs42/packages/news/www/item.tcl hta_copy/packages/news/www/item.tcl
--- acs42/packages/news/www/item.tcl Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/news/www/item.tcl Mon Sep 3 13:14:39 2001
@@ -17,7 +17,7 @@
publish_title:onevalue
publish_date:onevalue
publish_body:onevalue
- html_p:onevalue
+ mime_type:onevalue
creator_link:onevalue
comments:onevalue
comment_link:onevalue
@@ -32,7 +32,7 @@
select item_id,
live_revision,
publish_title,
- html_p,
+ mime_type,
publish_date,
'' || item_creator || '' as creator_link
from news_items_live_or_submitted
@@ -50,8 +50,21 @@
# text-only body
- if {[info exists html_p] && [string equal $html_p "f"]} {
- set publish_body "
- The text is formatted as
- Plain Text
- HTML
+ The text is formatted as
+ Text
+
+ Preformatted text
+
+ HTML
[ad_quotehtml $publish_body]
"
+
+ # FIXME commonize this
+ switch -- $mime_type {
+ text/plain {
+ set publish_body "[ad_quotehtml $publish_body]
"
+ }
+ text/x-wrappable {
+ set publish_body "
+ [ad_quotehtml [wrap_string $publish_body]]
+ "
+ }
+ text/html {}
+ default {
+ error "unhandled mime_type $mime_type"
+ }
}
if { [ad_parameter SolicitCommentsP "news" 0] &&
@@ -65,10 +78,10 @@
}
set title $publish_title
- set context_bar [list $title]
+ set context_bar [ad_context_bar $title]
} else {
- set context_bar {}
+ set context_bar ""
set title "Error"
}
diff -ru acs42/packages/news/www/master.adp hta_copy/packages/news/www/master.adp
--- acs42/packages/news/www/master.adp Mon Sep 3 13:14:32 2001
+++ hta_copy/packages/news/www/master.adp Mon Sep 3 13:14:39 2001
@@ -1,11 +1,7 @@
@title@
-
-<%= [eval ad_context_bar $context_bar] %>
-
-