Returns the first column of the result of the SQL query $sql.
If the query doesn't return a row, returns $default (or raises an error if no $default is provided).
} {
@@ -237,9 +238,11 @@
}
proc_doc db_list { statement_name sql args } {
-
- Returns a list containing the first column of each row returned by the SQL query $sql.
-
+ Usage: db_list statement-name sql [ -bind bind_set_id | -bind bind_value_list ]
+
+
Returns a Tcl list, each element of which is a list of all column
+ values in a row of the result of the SQL querysql. If
+ sql doesn't return any rows, returns an empty list.
+ Analogous to database_to_tcl_list_list.
} {
ad_arg_parser { bind } $args
@@ -289,12 +296,14 @@
sql
{args ""}
} {
- Returns a list of ns_sets with the values of each column of each row
- returned byt he sql query specified.
+ Usage: db_list_of_ns_sets statement-name sql [ -bind bind_set_id | -bind bind_value_list ]
+
Returns a list of ns_sets with the values of each column of each row
+ returned by the sql query specified.
+
@param statement_name The name of the query.
@param sql The SQL to be executed.
- @param args Any additional arguments, such as a 'if_no_rows'
+ @param args Any additional arguments.
@return list of ns_sets, one per each row return by the SQL query
} {
@@ -315,10 +324,20 @@
}
proc_doc db_foreach { statement_name sql args } {
- Usage: db_foreach statement_name sql [-bind ns_set | list of bind variables] code_block [if_no_rows if_no_rows_code_block]
+ Usage:
+
db_foreach greeble_query "select foo, bar from greeble" {
@@ -425,9 +444,17 @@
var_name
statement_name
sql
- args } {
+ args
+} {
+ Usage:
+
+ db_multirow [ -local ] [ -append ] [ -extend column_list ] \
+ var-name statement-name sql [ -bind bind_set_id | -bind bind_value_list ] \
+ code_block [ if_no_rows if_no_rows_block ]
- Performs the SQL query sql
, saving results in variables
+
+
+ Performs the SQL query sql
, saving results in variables
of the form
var_name:1
, var_name:2
, etc,
setting var_name:rowcount
to the total number
@@ -519,7 +546,7 @@
upvar $level_up "$var_name:rowcount" counter
upvar $level_up "$var_name:columns" columns
- if { !$append_p } {
+ if { !$append_p || ![info exists counter]} {
set counter 0
}
@@ -534,7 +561,7 @@
lappend local_columns [ns_set key $selection $i]
}
set local_columns [concat $local_columns $extend]
- if { !$append_p } {
+ if { !$append_p || ![info exists columns] } {
# store the list of columns in the var_name:columns variable
set columns $local_columns
} else {
@@ -621,8 +648,17 @@
ad_proc db_0or1row { statement_name sql args } {
+ Usage:
+
+ db_0or1row statement-name sql [ -bind bind_set_id | -bind bind_value_list ] \
+ [ -column_array array_name | -column_set set_name ]
+
+
- Performs the SQL query $sql, setting variables to column values. Returns 1 if a row is returned, or 0 if no row is returned.
+ Performs the SQL query sql. If a row is returned, sets variables
+ to column values (or a set or array populated if -column_array
+ or column_set is specified) and returns 1. If no rows are returned,
+ returns 0. If more than one row is returned, throws an error.
} {
ad_arg_parser { bind column_array column_set } $args
@@ -668,8 +704,17 @@
}
ad_proc db_1row { args } {
+ Usage:
+
+ db_1row statement-name sql [ -bind bind_set_id | -bind bind_value_list ] \
+ [ -column_array array_name | -column_set set_name ]
+
+
- Performs the SQL query $sql, setting variables to column values. Raises an error if no rows are returned.
+ Performs the SQL query sql. If a row is returned, sets variables
+ to column values (or a set or array populated if -column_array
+ or column_set is specified). If no rows are returned,
+ throws an error.
} {
if { ![uplevel db_0or1row $args] } {
@@ -679,14 +724,16 @@
ad_proc db_transaction { transaction_code args } {
+ Usage: db_transaction code_block [ on_error { error_code_block } ]
+
Executes transaction_code with transactional semantics. This means that either all of the database commands
within transaction_code are committed to the database or none of them are. Multiple db_transaction
s may be
nested (end transaction is transparently ns_db dml'ed when the outermost transaction completes).
- To handle errors, use db_transaction {transaction_code} on_error {error_code}
. Any error generated in
- transaction_code
will be caught automatically and process control will transfer to error_code
+ To handle errors, use db_transaction {transaction_code} on_error {error_code_block}
. Any error generated in
+ transaction_code
will be caught automatically and process control will transfer to error_code_block
with a variable errmsg
set. The error_code block can then clean up after the error, such as presenting a usable
- error message to the user. Following the execution of error_code
the transaction will be aborted.
+ error message to the user. Following the execution of error_code_block
the transaction will be aborted.
If you want to explicity abort the transaction, call db_abort_transaction
from within the transaction_code block or the error_code block.
@@ -715,7 +762,7 @@
global db_state
- set syn_err "db_transaction: Invalid arguments. Use db_transaction { code } \[on_error { error_code }\] "
+ set syn_err "db_transaction: Invalid arguments. Use db_transaction { code } \[on_error { error_code_block }\] "
set arg_c [llength $args]
if { $arg_c != 0 && $arg_c != 2 } {
@@ -872,7 +919,9 @@
ad_proc db_abort_transaction {} {
- Aborts a transaction.
+ Aborts all levels of a transaction. That is if this is called within
+ several nested transactions, all of them are terminated. Use this
+ instead of db_dml "abort" "abort transaction".
} {
global db_state
db_with_handle db {
Index: openacs.org-dev/packages/acs-tcl/tcl/apm-procs-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-tcl/tcl/apm-procs-oracle.xql,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/acs-tcl/tcl/apm-procs-oracle.xql 9 Jul 2002 17:34:59 -0000 1.1.1.1
+++ openacs.org-dev/packages/acs-tcl/tcl/apm-procs-oracle.xql 31 Jul 2002 16:30:56 -0000 1.1.1.2
@@ -53,7 +53,8 @@
- select v.package_id, p.parameter_name, nvl(p.default_value, v.attr_value) as attr_value
+ select v.package_id, p.parameter_name,
+ decode(v.value_id, null, p.default_value, v.attr_value) as attr_value
from apm_parameters p, apm_parameter_values v
where p.package_key = :package_key
and p.parameter_id = v.parameter_id (+)
Index: openacs.org-dev/packages/acs-tcl/tcl/apm-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-tcl/tcl/apm-procs.xql,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/acs-tcl/tcl/apm-procs.xql 9 Jul 2002 17:34:59 -0000 1.1.1.1
+++ openacs.org-dev/packages/acs-tcl/tcl/apm-procs.xql 31 Jul 2002 16:30:56 -0000 1.1.1.2
@@ -45,7 +45,7 @@
select v.package_id, p.parameter_name,
- coalesce(p.default_value, v.attr_value) as attr_value
+ case when v.value_id is null then p.default_value else v.attr_value end as attr_value
from apm_parameters p left outer join apm_parameter_values v
using (parameter_id)
where p.package_key = :package_key
Index: openacs.org-dev/packages/acs-tcl/tcl/form-processing-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-tcl/tcl/form-processing-procs.tcl,v
diff -u -N -r1.1.1.2 -r1.1.1.3
--- openacs.org-dev/packages/acs-tcl/tcl/form-processing-procs.tcl 25 Jul 2002 18:46:52 -0000 1.1.1.2
+++ openacs.org-dev/packages/acs-tcl/tcl/form-processing-procs.tcl 31 Jul 2002 16:30:56 -0000 1.1.1.3
@@ -27,9 +27,29 @@
In general the full functionality of the form builder is exposed by ad_form, but with a
much more user-friendly and readable syntax and with state management handled automatically.
+
+
+ In order to make it possible to use ad_form to build common form snippets within procs, code
+ blocks are executed at the current template parse level. This is necessary if validate and
+ similar blocks are to have access to the form's contents but may cause surprises for the
+ unwary. So be wary.
+
+ On the other hand when subst is called, for instance when setting values in the form, the
+ caller's level is used. Why do this? A proc building a common form snippet may need to
+ build a list of valid select elements or similarly compute values that need to be set in
+ the form, and these should be computed locally.
+
+
+
+ Yes, this is a bit bizarre and not necessarily well thought out. The semantics were decided
+ upon when I was writing a fairly complex package for Greenpeace, International and worked well
+ there so for now, I'm leaving them the way they are.
+
+
+
Here's an example of a simple page implementing an add/edit form:
@@ -42,7 +62,7 @@
my_table_key:optional
}
- ad_form -name form_name -form {
+ ad_form -name form_name -export {foo {bar none}} -form {
my_table_key:key(my_table_sequence)
@@ -110,6 +130,13 @@
+ - -extend
+
- Extend an existing form. This allows one to build forms incrementally. Forms are built at the
+ template level. As a consequence one can write utility procs that use -extend to build form
+ snippets common to several data entry forms.
+
This must be the first switch passed into ad_form
+
+
- -name
- Declares the name of the form. Defaults to the name of the script being served.
@@ -123,11 +150,17 @@
define multipart file handling forms.
- - -extend
-
- Extend an existing form. This allows one to build forms incrementally. Forms are built at the
- template level. As a consequence one can write utility procs that use -extend to build form
- snippets common to several data entry forms.
+
- -action
+
- The name of the script to be called when the form is submitted. Defaults to the name of the script
+ being served.
+
+ - -export
+
- Similar to the utility export_vars. Takes a list of values to insert in the form as
+ "hidden" elements. Each value is either a name, in which case the Tcl variable at the caller's
+ level is passed to the form if it exists, or a name-value pair. "multiple", "array", "sign" and
+ similar flags are not allowed though it would be good to do so in the future.
+
- -form
- Declare form elements (described in detail below)
@@ -312,7 +345,7 @@
}
set valid_args { form method action html name select_query select_query_name new_data on_refresh
- edit_data validate on_submit confirm_template new_request edit_request };
+ edit_data validate on_submit confirm_template new_request edit_request export};
ad_arg_parser $valid_args $args
@@ -340,7 +373,7 @@
foreach valid_arg $valid_args {
if { [info exists $valid_arg] } {
if { [info exists af_parts(${form_name}__$valid_arg)] &&
- ![lsearch { form name validate } $valid_arg] == -1 } {
+ ![lsearch { form name validate export } $valid_arg] == -1 } {
return -code error "Form \"$form_name\" already has a \"$valid_arg\" section"
}
@@ -350,7 +383,7 @@
# and validation block to be extended, for now at least until I get more experience
# with this ...
- if { [lsearch { name form method action html validate } $valid_arg ] == -1 } {
+ if { [lsearch { name form method action html validate export } $valid_arg ] == -1 } {
set af_parts(${form_name}__extend) ""
}
}
@@ -479,6 +512,17 @@
}
+ if { [info exists export] } {
+ foreach value $export {
+ set name [lindex $value 0]
+ if { [llength $value] == 1 } {
+ template::element create $form_name $name -datatype text -widget hidden -value [uplevel [list set $name]]
+ } else {
+ template::element create $form_name $name -datatype text -widget hidden -value [uplevel [list subst [lindex $value 1]]]
+ }
+ }
+ }
+
# We need to track these for submission time and for error checking
global af_type
Index: openacs.org-dev/packages/acs-tcl/tcl/text-html-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-tcl/tcl/text-html-procs.tcl,v
diff -u -N -r1.1.1.2 -r1.1.1.3
--- openacs.org-dev/packages/acs-tcl/tcl/text-html-procs.tcl 25 Jul 2002 18:46:52 -0000 1.1.1.2
+++ openacs.org-dev/packages/acs-tcl/tcl/text-html-procs.tcl 31 Jul 2002 16:30:57 -0000 1.1.1.3
@@ -55,6 +55,15 @@
# we quote the ones entered by the user:
set text [ad_quotehtml $text]
+ # Convert _single_ CRLF's to
's to preserve line breaks
+ regsub -all {\r*\n} $text "
" text
+
+ # Convert every two spaces to an nbsp
+ regsub -all { } $text "\\\ " text
+
+ # Convert every tab to 4 nbsp's
+ regsub -all {\t} $text {\ \ \ \ } text
+
# turn CRLFCRLF into
if { [regsub -all {\r\n\s*\r\n} $text "
" text] == 0 } {
# try LFLF
Index: openacs.org-dev/packages/acs-templating/tcl/widget-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-templating/tcl/widget-procs.tcl,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/acs-templating/tcl/widget-procs.tcl 9 Jul 2002 17:34:59 -0000 1.1.1.1
+++ openacs.org-dev/packages/acs-templating/tcl/widget-procs.tcl 31 Jul 2002 16:30:57 -0000 1.1.1.2
@@ -70,7 +70,11 @@
upvar $element_reference element
- return $element(value)
+ if { [info exists element(value)] } {
+ return $element(value)
+ } else {
+ return ""
+ }
}
ad_proc -public template::widget::input { type element_reference tag_attributes } {
Index: openacs.org-dev/packages/attachments/tcl/attachments-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/attachments/tcl/attachments-procs.tcl,v
diff -u -N -r1.1.1.2 -r1.1.1.3
--- openacs.org-dev/packages/attachments/tcl/attachments-procs.tcl 25 Jul 2002 18:46:57 -0000 1.1.1.2
+++ openacs.org-dev/packages/attachments/tcl/attachments-procs.tcl 31 Jul 2002 16:31:01 -0000 1.1.1.3
@@ -84,29 +84,35 @@
db_dml delete_attachment {}
}
+ ad_proc -public get_package_key {} {
+ return attachments
+ }
+
ad_proc -public get_url {
} {
return [parameter::get \
- -package_id [apm_package_id_from_key attachments] \
+ -package_id [apm_package_id_from_key [get_package_key]] \
-parameter RelativeUrl
]
}
ad_proc -public add_attachment_url {
+ {-folder_id ""}
{-package_id ""}
{-object_id:required}
{-return_url ""}
{-pretty_name ""}
} {
- return "[attachments::get_url]/attach?pretty_object_name=[ns_urlencode $pretty_name]&object_id=$object_id&return_url=[ns_urlencode $return_url]"
+ return "[attachments::get_url]/attach?pretty_object_name=[ns_urlencode $pretty_name]&folder_id=$folder_id&object_id=$object_id&return_url=[ns_urlencode $return_url]"
}
ad_proc -public goto_attachment_url {
{-package_id ""}
{-object_id:required}
{-attachment_id:required}
+ {-base_url ""}
} {
- return "[attachments::get_url]/go-to-attachment?object_id=$object_id&attachment_id=$attachment_id"
+ return "${base_url}[attachments::get_url]/go-to-attachment?object_id=$object_id&attachment_id=$attachment_id"
}
ad_proc -public graphic_url {
@@ -117,14 +123,15 @@
ad_proc -public get_attachments {
{-object_id:required}
+ {-base_url ""}
} {
returns a list of attachment ids and names
} {
set lst [db_list_of_lists select_attachments {}]
set lst_with_urls [list]
foreach el $lst {
- set append_lst [list [goto_attachment_url -object_id $object_id -attachment_id [lindex $el 0]]]
+ set append_lst [list [goto_attachment_url -object_id $object_id -attachment_id [lindex $el 0] -base_url $base_url]]
lappend lst_with_urls [concat $el $append_lst]
}
@@ -140,8 +147,12 @@
set cbar_list [fs_context_bar_list -extra_vars $extra_vars -folder_url "attach" -file_url "attach" -root_folder_id $root_folder_id -final $final $folder_id]
- set cbar_html "Top > "
-
+ if {![empty_string_p $root_folder_id]} {
+ set cbar_html "Top > "
+ } else {
+ set cbar_html "Top > "
+ }
+
foreach el $cbar_list {
if {[llength $el] < 2} {
append cbar_html "$el"
Index: openacs.org-dev/packages/calendar/calendar.info
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/calendar/calendar.info,v
diff -u -N -r1.1.1.2 -r1.1.1.3
--- openacs.org-dev/packages/calendar/calendar.info 25 Jul 2002 18:47:00 -0000 1.1.1.2
+++ openacs.org-dev/packages/calendar/calendar.info 31 Jul 2002 16:31:04 -0000 1.1.1.3
@@ -54,6 +54,8 @@
+
+
Index: openacs.org-dev/packages/calendar/tcl/cal-item-2-procs-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/calendar/tcl/cal-item-2-procs-postgresql.xql,v
diff -u -N -r1.1.1.2 -r1.1.1.3
--- openacs.org-dev/packages/calendar/tcl/cal-item-2-procs-postgresql.xql 25 Jul 2002 18:47:00 -0000 1.1.1.2
+++ openacs.org-dev/packages/calendar/tcl/cal-item-2-procs-postgresql.xql 31 Jul 2002 16:31:04 -0000 1.1.1.3
@@ -15,6 +15,9 @@
to_char(start_date, 'YYYY-MM-DD HH:MI:SS') as start_date,
to_char(start_date, 'MM/DD/YYYY') as pretty_short_start_date,
to_char(end_date, 'HH:MIpm') as end_time,
+ end_date as end_date,
+ to_char(start_date, 'YYYY-MM-DD HH24:MI:SS') as full_start_date,
+ to_char(end_date, 'YYYY-MM-DD HH24:MI:SS') as full_end_date,
coalesce(a.name, e.name) as name,
coalesce(e.description, a.description) as description,
recurrence_id,
@@ -49,6 +52,9 @@
to_char(start_date, 'YYYY-MM-DD HH:MI:SS') as start_date,
to_char(start_date, 'MM/DD/YYYY') as pretty_short_start_date,
to_char(end_date, 'HH:MIpm') as end_time,
+ end_date as end_date,
+ to_char(start_date, 'YYYY-MM-DD HH24:MI:SS') as full_start_date,
+ to_char(end_date, 'YYYY-MM-DD HH24:MI:SS') as full_end_date,
coalesce(a.name, e.name) as name,
coalesce(e.description, a.description) as description,
recurrence_id,
Index: openacs.org-dev/packages/file-storage/sql/postgresql/file-storage-package-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/file-storage/sql/postgresql/file-storage-package-create.sql,v
diff -u -N -r1.1.1.2 -r1.1.1.3
--- openacs.org-dev/packages/file-storage/sql/postgresql/file-storage-package-create.sql 25 Jul 2002 18:47:14 -0000 1.1.1.2
+++ openacs.org-dev/packages/file-storage/sql/postgresql/file-storage-package-create.sql 31 Jul 2002 16:31:15 -0000 1.1.1.3
@@ -15,9 +15,9 @@
)
returns integer as ' -- fs_root_folders.folder_id%TYPE
declare
- get_root_folder__package_id alias for $1;
- v_folder_id fs_root_folders.folder_id%TYPE;
- v_count integer;
+ get_root_folder__package_id alias for $1;
+ v_folder_id fs_root_folders.folder_id%TYPE;
+ v_count integer;
begin
select count(*) into v_count
@@ -75,14 +75,14 @@
varchar, -- cr_folders.label%TYPE
varchar -- cr_folders.description%TYPE
)
-returns integer as ' -- fs_root_folders.folder_id%TYPE
+returns integer as ' -- fs_root_folders.folder_id%TYPE
declare
- new_root_folder__package_id alias for $1;
+ new_root_folder__package_id alias for $1;
new_root_folder__folder_name alias for $2;
new_root_folder__description alias for $3;
- v_folder_id fs_root_folders.folder_id%TYPE;
- v_package_name apm_packages.instance_name%TYPE;
- v_package_key apm_packages.package_key%TYPE;
+ v_folder_id fs_root_folders.folder_id%TYPE;
+ v_package_name apm_packages.instance_name%TYPE;
+ v_package_key apm_packages.package_key%TYPE;
v_folder_name cr_folders.label%TYPE;
v_description cr_folders.description%TYPE;
begin
@@ -110,7 +110,7 @@
v_package_key || ''_'' || new_root_folder__package_id, -- name
v_folder_name, -- label
v_description, -- description
- null -- parent_id (default)
+ null -- parent_id (default)
);
insert into fs_root_folders
@@ -119,33 +119,33 @@
(new_root_folder__package_id, v_folder_id);
-- allow child items to be added
- -- JS: Note that we need to set include_subtypes to
- -- JS: true since we created a new subtype.
+ -- JS: Note that we need to set include_subtypes to
+ -- JS: true since we created a new subtype.
PERFORM content_folder__register_content_type(
- v_folder_id, -- folder_id
- ''content_revision'', -- content_types
- ''t'' -- include_subtypes
- );
+ v_folder_id, -- folder_id
+ ''content_revision'', -- content_types
+ ''t'' -- include_subtypes
+ );
PERFORM content_folder__register_content_type(
- v_folder_id, -- folder_id
- ''content_folder'', -- content_types
- ''t'' -- include_subtypes
- );
+ v_folder_id, -- folder_id
+ ''content_folder'', -- content_types
+ ''t'' -- include_subtypes
+ );
-- set up default permissions
PERFORM acs_permission__grant_permission (
- v_folder_id, -- object_id
- acs__magic_object_id(''the_public''), -- grantee_id
- ''read'' -- privilege
- );
+ v_folder_id, -- object_id
+ acs__magic_object_id(''the_public''), -- grantee_id
+ ''read'' -- privilege
+ );
PERFORM acs_permission__grant_permission (
- v_folder_id, -- object_id
- acs__magic_object_id(''registered_users''), -- grantee_id
- ''write'' -- privilege
- );
+ v_folder_id, -- object_id
+ acs__magic_object_id(''registered_users''), -- grantee_id
+ ''write'' -- privilege
+ );
- return v_folder_id;
+ return v_folder_id;
end;' language 'plpgsql';
@@ -157,86 +157,84 @@
--
-- DRB: I added this version to allow one to predefine item_id, among other things to
-- make it easier to use with ad_form
- varchar, -- cr_items.name%TYPE,
- integer, -- cr_items.parent_id%TYPE,
- integer, -- acs_objects.creation_user%TYPE,
- varchar, -- acs_objects.creation_ip%TYPE,
- boolean, -- store in db?
+ varchar, -- cr_items.name%TYPE,
+ integer, -- cr_items.parent_id%TYPE,
+ integer, -- acs_objects.creation_user%TYPE,
+ varchar, -- acs_objects.creation_ip%TYPE,
+ boolean, -- store in db?
integer -- cr_items.item_id%TYPE,
) returns integer as ' -- cr_items.item_id%TYPE
declare
- new_file__title alias for $1;
- new_file__folder_id alias for $2;
- new_file__user_id alias for $3;
- new_file__creation_ip alias for $4;
- new_file__indb_p alias for $5;
+ new_file__title alias for $1;
+ new_file__folder_id alias for $2;
+ new_file__user_id alias for $3;
+ new_file__creation_ip alias for $4;
+ new_file__indb_p alias for $5;
new_file__item_id alias for $6;
- v_item_id cr_items.item_id%TYPE;
+ v_item_id integer;
begin
- if new_file__indb_p
- then
- select content_item__new (
- new_file__title, -- name
+ if new_file__indb_p
+ then
+ v_item_id := content_item__new (
+ new_file__title, -- name
new_file__folder_id, -- parent_id
- new_file__item_id, -- item_id (default)
- null, -- locale (default)
- now(), -- creation_date (default)
+ new_file__item_id, -- item_id (default)
+ null, -- locale (default)
+ now(), -- creation_date (default)
new_file__user_id, -- creation_user
new_file__folder_id, -- context_id
new_file__creation_ip, -- creation_ip
''content_item'', -- item_subtype (default)
''file_storage_object'', -- content_type (needed by site-wide search)
- null, -- title (default)
- null, -- description
- ''text/plain'', -- mime_type (default)
- null, -- nls_language (default)
- null -- data (default)
- )
- into v_item_id;
- else
- select content_item__new (
- new_file__title, -- name
- new_file__folder_id, -- parent_id
- new_file__item_id, -- item_id (default)
- null, -- locale (default)
- now(), -- creation_date (default)
- new_file__user_id, -- creation_user
- new_file__folder_id, -- context_id
+ null, -- title (default)
+ null, -- description
+ ''text/plain'', -- mime_type (default)
+ null, -- nls_language (default)
+ null -- data (default)
+ );
+ else
+ v_item_id := content_item__new (
+ new_file__title, -- name
+ new_file__folder_id, -- parent_id
+ new_file__item_id, -- item_id (default)
+ null, -- locale (default)
+ now(), -- creation_date (default)
+ new_file__user_id, -- creation_user
+ new_file__folder_id, -- context_id
new_file__creation_ip, -- creation_ip
''content_item'', -- item_subtype (default)
''file_storage_object'', -- content_type (needed by site-wide search)
- null, -- title (default)
- null, -- description
- ''text/plain'', -- mime_type (default)
- null, -- nls_language (default)
- null, -- text (default)
- ''file'' -- storage_type
- )
- into v_item_id;
+ null, -- title (default)
+ null, -- description
+ ''text/plain'', -- mime_type (default)
+ null, -- nls_language (default)
+ null, -- text (default)
+ ''file'' -- storage_type
+ );
- end if;
+ end if;
- select acs_object__update_last_modified(new_file__folder_id);
+ perform acs_object__update_last_modified(new_file__folder_id);
return v_item_id;
end;' language 'plpgsql';
create function file_storage__new_file(
- varchar, -- cr_items.name%TYPE,
- integer, -- cr_items.parent_id%TYPE,
- integer, -- acs_objects.creation_user%TYPE,
- varchar, -- acs_objects.creation_ip%TYPE,
- boolean -- store in db?
+ varchar, -- cr_items.name%TYPE,
+ integer, -- cr_items.parent_id%TYPE,
+ integer, -- acs_objects.creation_user%TYPE,
+ varchar, -- acs_objects.creation_ip%TYPE,
+ boolean -- store in db?
) returns integer as ' -- cr_items.item_id%TYPE
declare
- new_file__title alias for $1;
- new_file__folder_id alias for $2;
- new_file__user_id alias for $3;
- new_file__creation_ip alias for $4;
- new_file__indb_p alias for $5;
+ new_file__title alias for $1;
+ new_file__folder_id alias for $2;
+ new_file__user_id alias for $3;
+ new_file__creation_ip alias for $4;
+ new_file__indb_p alias for $5;
begin
return file_storage__new_file(
@@ -256,13 +254,13 @@
-- Delete a file and all its version
-- Wrapper to content_item__delete
--
- integer -- cr_items.item_id%TYPE
+ integer -- cr_items.item_id%TYPE
) returns integer as '
declare
- delete_file__file_id alias for $1;
+ delete_file__file_id alias for $1;
begin
- return content_item__delete(delete_file__file_id);
+ return content_item__delete(delete_file__file_id);
end;' language 'plpgsql';
@@ -272,19 +270,19 @@
-- Rename a file and all
-- Wrapper to content_item__rename
--
- integer, -- cr_items.item_id%TYPE,
- varchar -- cr_items.name%TYPE
+ integer, -- cr_items.item_id%TYPE,
+ varchar -- cr_items.name%TYPE
) returns integer as '
declare
- rename_file__file_id alias for $1;
- rename_file__title alias for $2;
+ rename_file__file_id alias for $1;
+ rename_file__title alias for $2;
begin
- return content_item__rename(
- rename_file__file_id, -- item_id
- rename_file__title -- name
- );
+ return content_item__rename(
+ rename_file__file_id, -- item_id
+ rename_file__title -- name
+ );
end;' language 'plpgsql';
@@ -293,100 +291,100 @@
--
-- Copy a file, but only copy the live_revision
--
- integer, -- cr_items.item_id%TYPE,
- integer, -- cr_items.parent_id%TYPE,
- integer, -- acs_objects.creation_user%TYPE,
- varchar -- acs_objects.creation_ip%TYPE
-) returns integer as ' -- cr_revisions.revision_id%TYPE
+ integer, -- cr_items.item_id%TYPE,
+ integer, -- cr_items.parent_id%TYPE,
+ integer, -- acs_objects.creation_user%TYPE,
+ varchar -- acs_objects.creation_ip%TYPE
+) returns integer as ' -- cr_revisions.revision_id%TYPE
declare
- copy_file__file_id alias for $1;
- copy_file__target_folder_id alias for $2;
- copy_file__creation_user alias for $3;
- copy_file__creation_ip alias for $4;
- v_title cr_items.name%TYPE;
- v_live_revision cr_items.live_revision%TYPE;
- v_filename cr_revisions.title%TYPE;
- v_description cr_revisions.description%TYPE;
- v_mime_type cr_revisions.mime_type%TYPE;
- v_content_length cr_revisions.content_length%TYPE;
- v_lob_id cr_revisions.lob%TYPE;
- v_new_lob_id cr_revisions.lob%TYPE;
- v_file_path cr_revisions.content%TYPE;
- v_new_file_id cr_items.item_id%TYPE;
- v_new_version_id cr_revisions.revision_id%TYPE;
- v_indb_p boolean;
+ copy_file__file_id alias for $1;
+ copy_file__target_folder_id alias for $2;
+ copy_file__creation_user alias for $3;
+ copy_file__creation_ip alias for $4;
+ v_title cr_items.name%TYPE;
+ v_live_revision cr_items.live_revision%TYPE;
+ v_filename cr_revisions.title%TYPE;
+ v_description cr_revisions.description%TYPE;
+ v_mime_type cr_revisions.mime_type%TYPE;
+ v_content_length cr_revisions.content_length%TYPE;
+ v_lob_id cr_revisions.lob%TYPE;
+ v_new_lob_id cr_revisions.lob%TYPE;
+ v_file_path cr_revisions.content%TYPE;
+ v_new_file_id cr_items.item_id%TYPE;
+ v_new_version_id cr_revisions.revision_id%TYPE;
+ v_indb_p boolean;
begin
- -- We copy only the title from the file being copied, and attributes of the
- -- live revision
- select i.name,i.live_revision,r.title,r.description,r.mime_type,r.content_length,
- (case when i.storage_type = ''lob''
- then true
- else false
- end)
- into v_title,v_live_revision,v_filename,v_description,v_mime_type,v_content_length,v_indb_p
- from cr_items i, cr_revisions r
- where r.item_id = i.item_id
- and r.revision_id = i.live_revision
- and i.item_id = copy_file__file_id;
+ -- We copy only the title from the file being copied, and attributes of the
+ -- live revision
+ select i.name,i.live_revision,r.title,r.description,r.mime_type,r.content_length,
+ (case when i.storage_type = ''lob''
+ then true
+ else false
+ end)
+ into v_title,v_live_revision,v_filename,v_description,v_mime_type,v_content_length,v_indb_p
+ from cr_items i, cr_revisions r
+ where r.item_id = i.item_id
+ and r.revision_id = i.live_revision
+ and i.item_id = copy_file__file_id;
- -- We should probably use the copy functions of CR
- -- when we optimize this function
- v_new_file_id := file_storage__new_file(
- v_title, -- title
- copy_file__target_folder_id, -- folder_id
- copy_file__creation_user, -- creation_user
- copy_file__creation_ip, -- creation_ip
- v_indb_p -- indb_p
- );
+ -- We should probably use the copy functions of CR
+ -- when we optimize this function
+ v_new_file_id := file_storage__new_file(
+ v_title, -- title
+ copy_file__target_folder_id, -- folder_id
+ copy_file__creation_user, -- creation_user
+ copy_file__creation_ip, -- creation_ip
+ v_indb_p -- indb_p
+ );
- v_new_version_id := file_storage__new_version (
- v_filename, -- title
- v_description, -- description
- v_mime_type, -- mime_type
- v_new_file_id, -- item_id
- copy_file__creation_user, -- creation_user
- copy_file__creation_ip -- creation_ip
- );
-
- if v_indb_p
- then
+ v_new_version_id := file_storage__new_version (
+ v_filename, -- title
+ v_description, -- description
+ v_mime_type, -- mime_type
+ v_new_file_id, -- item_id
+ copy_file__creation_user, -- creation_user
+ copy_file__creation_ip -- creation_ip
+ );
+
+ if v_indb_p
+ then
- -- Lob to copy from
- select lob into v_lob_id
- from cr_revisions
- where revision_id = v_live_revision;
+ -- Lob to copy from
+ select lob into v_lob_id
+ from cr_revisions
+ where revision_id = v_live_revision;
- -- New lob id
- v_new_lob_id := empty_lob();
+ -- New lob id
+ v_new_lob_id := empty_lob();
- -- copy the blob
- select lob_copy(v_lob_id,v_new_lob_id);
+ -- copy the blob
+ select lob_copy(v_lob_id,v_new_lob_id);
- -- Update the lob id on the new version
- update cr_revisions
- set lob = v_new_lob_id,
- content_length = v_content_length
- where revision_id = v_new_version_id;
+ -- Update the lob id on the new version
+ update cr_revisions
+ set lob = v_new_lob_id,
+ content_length = v_content_length
+ where revision_id = v_new_version_id;
- else
+ else
- -- For now, we simply copy the file name
- select content into v_file_path
- from cr_revisions
- where revision_id = v_live_revision;
+ -- For now, we simply copy the file name
+ select content into v_file_path
+ from cr_revisions
+ where revision_id = v_live_revision;
- -- Update the file path
- update cr_revisions
- set content = v_file_path,
- content_length = v_content_length
- where revision_id = v_new_version_id;
+ -- Update the file path
+ update cr_revisions
+ set content = v_file_path,
+ content_length = v_content_length
+ where revision_id = v_new_version_id;
- end if;
+ end if;
- select acs_object__update_last_modified(copy_file__target_folder_id);
+ perform acs_object__update_last_modified(copy_file__target_folder_id);
- return v_new_version_id;
+ return v_new_version_id;
end;' language 'plpgsql';
@@ -396,20 +394,20 @@
-- Move a file (ans all its versions) to a different folder.
-- Wrapper for content_item__move
--
- integer, -- cr_folders.folder_id%TYPE,
- integer -- cr_folders.folder_id%TYPE
-) returns integer as ' -- 0 for success
+ integer, -- cr_folders.folder_id%TYPE,
+ integer -- cr_folders.folder_id%TYPE
+) returns integer as ' -- 0 for success
declare
- move_file__file_id alias for $1;
- move_file__target_folder_id alias for $2;
+ move_file__file_id alias for $1;
+ move_file__target_folder_id alias for $2;
begin
- select content_item__move(
- move_file__file_id, -- item_id
- move_file__target_folder_id -- target_folder_id
- );
+ select content_item__move(
+ move_file__file_id, -- item_id
+ move_file__target_folder_id -- target_folder_id
+ );
- select acs_object__update_last_modified(move_file__target_folder_id);
+ perform acs_object__update_last_modified(move_file__target_folder_id);
return 0;
end;' language 'plpgsql';
@@ -420,7 +418,7 @@
-- Unfortunately, title in the file-storage context refers
-- to the name attribute in cr_items, not the title attribute in
-- cr_revisions
- integer -- cr_items.item_id%TYPE
+ integer -- cr_items.item_id%TYPE
) returns varchar as '
declare
get_title__item_id alias for $1;
@@ -440,7 +438,7 @@
else if v_content_type = ''content_symlink''
then
select label into v_title f
- rom cr_symlinks
+ rom cr_symlinks
where symlink_id = get_title__item_id;
else
select name into v_title
@@ -457,14 +455,14 @@
create function file_storage__get_content_type (
--
-- Wrapper for content_item__get_content_type
- integer -- cr_items.item_id%TYPE
+ integer -- cr_items.item_id%TYPE
) returns varchar as ' -- cr_items.content_type%TYPE
declare
- get_content_type__file_id alias for $1;
+ get_content_type__file_id alias for $1;
begin
- return content_item__get_content_type(
- get_content_type__file_id
- );
+ return content_item__get_content_type(
+ get_content_type__file_id
+ );
end;' language 'plpgsql';
@@ -473,14 +471,14 @@
create function file_storage__get_folder_name (
--
-- Wrapper for content_folder__get_label
- integer -- cr_folders.folder_id%TYPE
+ integer -- cr_folders.folder_id%TYPE
) returns varchar as ' -- cr_folders.label%TYPE
declare
- get_folder_name__folder_id alias for $1;
+ get_folder_name__folder_id alias for $1;
begin
- return content_folder__get_label(
- get_folder_name__folder_id
- );
+ return content_folder__get_label(
+ get_folder_name__folder_id
+ );
end;' language 'plpgsql';
@@ -490,49 +488,49 @@
-- Create a new version of a file
-- Wrapper for content_revision__new
--
- varchar, -- cr_revisions.title%TYPE,
- varchar, -- cr_revisions.description%TYPE,
- varchar, -- cr_revisions.mime_type%TYPE,
- integer, -- cr_items.item_id%TYPE,
- integer, -- acs_objects.creation_user%TYPE,
- varchar -- acs_objects.creation_ip%TYPE
-) returns integer as ' -- cr_revisions.revision_id
+ varchar, -- cr_revisions.title%TYPE,
+ varchar, -- cr_revisions.description%TYPE,
+ varchar, -- cr_revisions.mime_type%TYPE,
+ integer, -- cr_items.item_id%TYPE,
+ integer, -- acs_objects.creation_user%TYPE,
+ varchar -- acs_objects.creation_ip%TYPE
+) returns integer as ' -- cr_revisions.revision_id
declare
- new_version__filename alias for $1;
- new_version__description alias for $2;
- new_version__mime_type alias for $3;
- new_version__item_id alias for $4;
- new_version__creation_user alias for $5;
- new_version__creation_ip alias for $6;
- v_revision_id cr_revisions.revision_id%TYPE;
+ new_version__filename alias for $1;
+ new_version__description alias for $2;
+ new_version__mime_type alias for $3;
+ new_version__item_id alias for $4;
+ new_version__creation_user alias for $5;
+ new_version__creation_ip alias for $6;
+ v_revision_id cr_revisions.revision_id%TYPE;
v_folder_id cr_items.parent_id%TYPE;
begin
- -- Create a revision
- v_revision_id := content_revision__new (
- new_version__filename, -- title
- new_version__description, -- description
- now(), -- publish_date
- new_version__mime_type, -- mime_type
- null, -- nls_language
- null, -- data (default)
- new_version__item_id, -- item_id
- null, -- revision_id
- now(), -- creation_date
- new_version__creation_user, -- creation_user
- new_version__creation_ip -- creation_ip
- );
+ -- Create a revision
+ v_revision_id := content_revision__new (
+ new_version__filename, -- title
+ new_version__description, -- description
+ now(), -- publish_date
+ new_version__mime_type, -- mime_type
+ null, -- nls_language
+ null, -- data (default)
+ new_version__item_id, -- item_id
+ null, -- revision_id
+ now(), -- creation_date
+ new_version__creation_user, -- creation_user
+ new_version__creation_ip -- creation_ip
+ );
- -- Make live the newly created revision
- select content_item__set_live_revision(v_revision_id);
+ -- Make live the newly created revision
+ perform content_item__set_live_revision(v_revision_id);
select cr_items.parent_id
into v_folder_id
from cr_items
where cr_items.item_id = new_version__item_id;
- select acs_object__update_last_modified(v_folder_id);
+ perform acs_object__update_last_modified(v_folder_id);
- return v_revision_id;
+ return v_revision_id;
end;' language 'plpgsql';
@@ -541,38 +539,38 @@
--
-- Delete a version of a file
--
- integer, -- cr_items.item_id%TYPE,
- integer -- cr_revisions.revision_id%TYPE
+ integer, -- cr_items.item_id%TYPE,
+ integer -- cr_revisions.revision_id%TYPE
) returns integer as ' -- cr_items.parent_id%TYPE
declare
- delete_version__file_id alias for $1;
- delete_version__version_id alias for $2;
- v_parent_id cr_items.parent_id%TYPE;
- v_deleted_last_version_p boolean;
+ delete_version__file_id alias for $1;
+ delete_version__version_id alias for $2;
+ v_parent_id cr_items.parent_id%TYPE;
+ v_deleted_last_version_p boolean;
begin
if delete_version__version_id = content_item__get_live_revision(delete_version__file_id)
- then
+ then
PERFORM content_revision__delete(delete_version__version_id);
PERFORM content_item__set_live_revision(
- content_item__get_latest_revision(delete_version__file_id)
- );
+ content_item__get_latest_revision(delete_version__file_id)
+ );
else
PERFORM content_revision__delete(delete_version__version_id);
end if;
- -- If the live revision is null, we have deleted the last version above
+ -- If the live revision is null, we have deleted the last version above
select (case when live_revision is null
then parent_id
else 0
end)
- into v_parent_id
+ into v_parent_id
from cr_items
where item_id = delete_version__file_id;
- -- Unfortunately, due to PostgreSQL behavior with regards referential integrity,
- -- we cannot delete the content_item entry if there are no more revisions.
- return v_parent_id;
+ -- Unfortunately, due to PostgreSQL behavior with regards referential integrity,
+ -- we cannot delete the content_item entry if there are no more revisions.
+ return v_parent_id;
end;' language 'plpgsql';
@@ -581,56 +579,56 @@
--
-- Create a folder
--
- varchar, -- cr_items.name%TYPE,
- varchar, -- cr_folders.label%TYPE,
- integer, -- cr_items.parent_id%TYPE,
- integer, -- acs_objects.creation_user%TYPE,
- varchar -- acs_objects.creation_ip%TYPE
-) returns integer as ' -- cr_folders.folder_id%TYPE
+ varchar, -- cr_items.name%TYPE,
+ varchar, -- cr_folders.label%TYPE,
+ integer, -- cr_items.parent_id%TYPE,
+ integer, -- acs_objects.creation_user%TYPE,
+ varchar -- acs_objects.creation_ip%TYPE
+) returns integer as ' -- cr_folders.folder_id%TYPE
declare
- new_folder__name alias for $1;
- new_folder__folder_name alias for $2;
- new_folder__parent_id alias for $3;
- new_folder__creation_user alias for $4;
- new_folder__creation_ip alias for $5;
- v_folder_id cr_folders.folder_id%TYPE;
+ new_folder__name alias for $1;
+ new_folder__folder_name alias for $2;
+ new_folder__parent_id alias for $3;
+ new_folder__creation_user alias for $4;
+ new_folder__creation_ip alias for $5;
+ v_folder_id cr_folders.folder_id%TYPE;
begin
- -- Create a new folder
- v_folder_id := content_folder__new (
- new_folder__name, -- name
- new_folder__folder_name, -- label
- null, -- description
- new_folder__parent_id, -- parent_id
- null, -- context_id (default)
- null, -- folder_id (default)
- now(), -- creation_date
- new_folder__creation_user, -- creation_user
- new_folder__creation_ip -- creation_ip
- );
+ -- Create a new folder
+ v_folder_id := content_folder__new (
+ new_folder__name, -- name
+ new_folder__folder_name, -- label
+ null, -- description
+ new_folder__parent_id, -- parent_id
+ null, -- context_id (default)
+ null, -- folder_id (default)
+ now(), -- creation_date
+ new_folder__creation_user, -- creation_user
+ new_folder__creation_ip -- creation_ip
+ );
- -- register the standard content types
- -- JS: Note that we need to set include_subtypes
- -- JS: to true since we created a new subtype.
- PERFORM content_folder__register_content_type(
- v_folder_id, -- folder_id
- ''content_revision'', -- content_type
- ''t''); -- include_subtypes (default)
+ -- register the standard content types
+ -- JS: Note that we need to set include_subtypes
+ -- JS: to true since we created a new subtype.
+ PERFORM content_folder__register_content_type(
+ v_folder_id, -- folder_id
+ ''content_revision'', -- content_type
+ ''t''); -- include_subtypes (default)
- PERFORM content_folder__register_content_type(
- v_folder_id, -- folder_id
- ''content_folder'', -- content_type
- ''t'' -- include_subtypes (default)
- );
+ PERFORM content_folder__register_content_type(
+ v_folder_id, -- folder_id
+ ''content_folder'', -- content_type
+ ''t'' -- include_subtypes (default)
+ );
- -- Give the creator admin privileges on the folder
- PERFORM acs_permission__grant_permission (
- v_folder_id, -- object_id
- new_folder__creation_user, -- grantee_id
- ''admin'' -- privilege
- );
+ -- Give the creator admin privileges on the folder
+ PERFORM acs_permission__grant_permission (
+ v_folder_id, -- object_id
+ new_folder__creation_user, -- grantee_id
+ ''admin'' -- privilege
+ );
- return v_folder_id;
+ return v_folder_id;
end;' language 'plpgsql';
@@ -639,15 +637,15 @@
--
-- Delete a folder
--
- integer -- cr_folders.folder_id%TYPE
-) returns integer as ' -- 0 for success
+ integer -- cr_folders.folder_id%TYPE
+) returns integer as ' -- 0 for success
declare
- delete_folder__folder_id alias for $1;
+ delete_folder__folder_id alias for $1;
begin
- return content_folder__delete(
- delete_folder__folder_id -- folder_id
- );
+ return content_folder__delete(
+ delete_folder__folder_id -- folder_id
+ );
end;' language 'plpgsql';
@@ -656,43 +654,43 @@
create function fs_package_items_delete_trig () returns opaque as '
declare
- v_rec record;
+ v_rec record;
begin
- for v_rec in
-
- -- We want to delete all cr_items entries, starting from the leaves all
- -- the way up the root folder (old.folder_id).
- select c1.item_id, c1.content_type
- from cr_items c1, cr_items c2
+ for v_rec in
+
+ -- We want to delete all cr_items entries, starting from the leaves all
+ -- the way up the root folder (old.folder_id).
+ select c1.item_id, c1.content_type
+ from cr_items c1, cr_items c2
where c2.item_id = old.folder_id
- and c1.tree_sortkey between c2.tree_sortkey and tree_right(c2.tree_sortkey)
- and c1.item_id <> old.folder_id
+ and c1.tree_sortkey between c2.tree_sortkey and tree_right(c2.tree_sortkey)
+ and c1.item_id <> old.folder_id
order by c1.tree_sortkey desc
- loop
+ loop
- -- We delete the item. On delete cascade should take care
- -- of deletion of revisions.
- if v_rec.content_type = ''file_storage_object''
- then
- raise notice ''Deleting item_id = %'',v_rec.item_id;
- PERFORM content_item__delete(v_rec.item_id);
- end if;
+ -- We delete the item. On delete cascade should take care
+ -- of deletion of revisions.
+ if v_rec.content_type = ''file_storage_object''
+ then
+ raise notice ''Deleting item_id = %'',v_rec.item_id;
+ PERFORM content_item__delete(v_rec.item_id);
+ end if;
- -- Instead of doing an if-else, we make sure we are deleting a folder.
- if v_rec.content_type = ''content_folder''
- then
- raise notice ''Deleting folder_id = %'',v_rec.item_id;
- PERFORM content_folder__delete(v_rec.item_id);
- end if;
+ -- Instead of doing an if-else, we make sure we are deleting a folder.
+ if v_rec.content_type = ''content_folder''
+ then
+ raise notice ''Deleting folder_id = %'',v_rec.item_id;
+ PERFORM content_folder__delete(v_rec.item_id);
+ end if;
- -- We may have to delete other items here, e.g., symlinks (future feature)
+ -- We may have to delete other items here, e.g., symlinks (future feature)
- end loop;
+ end loop;
- -- We need to return something for the trigger to be activated
- return old;
+ -- We need to return something for the trigger to be activated
+ return old;
end;' language 'plpgsql';
@@ -704,8 +702,8 @@
-- JS: AFTER DELETE TRIGGER to clean up last CR entry
create function fs_root_folder_delete_trig () returns opaque as '
begin
- PERFORM content_folder__delete(old.folder_id);
- return null;
+ PERFORM content_folder__delete(old.folder_id);
+ return null;
end;' language 'plpgsql';
Index: openacs.org-dev/packages/file-storage/tcl/file-storage-procs-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/file-storage/tcl/file-storage-procs-postgresql.xql,v
diff -u -N -r1.1.1.3 -r1.1.1.4
--- openacs.org-dev/packages/file-storage/tcl/file-storage-procs-postgresql.xql 25 Jul 2002 20:06:15 -0000 1.1.1.3
+++ openacs.org-dev/packages/file-storage/tcl/file-storage-procs-postgresql.xql 31 Jul 2002 16:31:15 -0000 1.1.1.4
@@ -44,7 +44,7 @@
--- we use $n_past-days instead of :n_past_days becasuse he pgdriver
+-- we use $ n_past-days instead of :n_past_days becasuse he pgdriver
-- bind variable emulation puts single-quotes around the n_past_days
-- integer. Postgresql tries to turn '-1' into a date datatype
-- so now()-'-1' fails but now()- -1 works fine.
Index: openacs.org-dev/packages/file-storage/tcl/file-storage-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/file-storage/tcl/file-storage-procs.tcl,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/file-storage/tcl/file-storage-procs.tcl 9 Jul 2002 17:35:08 -0000 1.1.1.1
+++ openacs.org-dev/packages/file-storage/tcl/file-storage-procs.tcl 31 Jul 2002 16:31:15 -0000 1.1.1.2
@@ -336,7 +336,7 @@
ad_proc -public get_folder_contents {
{-folder_id ""}
{-user_id ""}
- {-n_past_days "-1"}
+ {-n_past_days "99999"}
} {
Retrieve the contents of the specified folder in the form of a list
of ns_sets, one for each row returned. The keys for each row are as
Index: openacs.org-dev/packages/file-storage/www/file-add-2-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/file-storage/www/file-add-2-postgresql.xql,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/file-storage/www/file-add-2-postgresql.xql 9 Jul 2002 17:35:08 -0000 1.1.1.1
+++ openacs.org-dev/packages/file-storage/www/file-add-2-postgresql.xql 31 Jul 2002 16:31:15 -0000 1.1.1.2
@@ -5,30 +5,25 @@
-
select file_storage__new_file (
:title, -- title
:folder_id, -- parent_id
:user_id, -- creation_user
:creation_ip, -- creation_ip
true -- indb_p
);
-
-
-
select file_storage__new_file (
:title, -- title
:folder_id, -- parent_id
:user_id, -- creation_user
:creation_ip, -- creation_ip
false -- indb_p
);
-
Index: openacs.org-dev/packages/file-storage/www/file-add-2.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/file-storage/www/file-add-2.tcl,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/file-storage/www/file-add-2.tcl 9 Jul 2002 17:35:08 -0000 1.1.1.1
+++ openacs.org-dev/packages/file-storage/www/file-add-2.tcl 31 Jul 2002 16:31:15 -0000 1.1.1.2
@@ -54,79 +54,27 @@
# create the new item
if {$indb_p} {
- set file_id [db_exec_plsql new_lob_file "
- begin
- :1 := file_storage.new_file (
- title => :title,
- folder_id => :folder_id,
- creation_user => :user_id,
- creation_ip => :creation_ip,
- indb_p => 't'
- );
+ set file_id [db_exec_plsql new_lob_file {}]
- end;"]
+ set version_id [db_exec_plsql new_version {}]
- set version_id [db_exec_plsql new_version "
- begin
- :1 := file_storage.new_version (
- filename => :filename,
- description => :description,
- mime_type => :mime_type,
- item_id => :file_id,
- creation_user => :user_id,
- creation_ip => :creation_ip
- );
- end;"]
+ db_dml lob_content {} -blob_files [list ${upload_file.tmpfile}]
- db_dml lob_content "
- update cr_revisions
- set content = empty_lob()
- where revision_id = :version_id
- returning content into :1" -blob_files [list ${upload_file.tmpfile}]
-
# Unfortunately, we can only calculate the file size after the lob is uploaded
- db_dml lob_size "
- update cr_revisions
- set content_length = dbms_lob.getlength(content)
- where revision_id = :version_id"
+ db_dml lob_size {}
} else {
- set file_id [db_exec_plsql new_fs_file "
- begin
- :1 := file_storage.new_file (
- title => :title,
- folder_id => :folder_id,
- creation_user => :user_id,
- creation_ip => :creation_ip,
- indb_p => 'f'
- );
- end;"]
+ set file_id [db_exec_plsql new_fs_file {}]
- set version_id [db_exec_plsql new_version "
- begin
+ set version_id [db_exec_plsql new_version {}]
- :1 := file_storage.new_version (
- filename => :filename,
- description => :description,
- mime_type => :mime_type,
- item_id => :file_id,
- creation_user => :user_id,
- creation_ip => :creation_ip
- );
-
- end;"]
-
set tmp_filename [cr_create_content_file $file_id $version_id ${upload_file.tmpfile}]
set tmp_size [cr_file_size $tmp_filename]
- db_dml fs_content_size "
- update cr_revisions
- set content = '$tmp_filename',
- content_length = $tmp_size
- where revision_id = :version_id"
+ db_dml fs_content_size {}
}
Index: openacs.org-dev/packages/file-storage/www/folder-chunk.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/file-storage/www/folder-chunk.tcl,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/file-storage/www/folder-chunk.tcl 9 Jul 2002 17:35:08 -0000 1.1.1.1
+++ openacs.org-dev/packages/file-storage/www/folder-chunk.tcl 31 Jul 2002 16:31:15 -0000 1.1.1.2
@@ -20,7 +20,7 @@
}
if {![exists_and_not_null n_past_days]} {
- set n_past_days -1
+ set n_past_days 99999
}
set folder_name [fs::get_object_name -object_id $folder_id]
Index: openacs.org-dev/packages/file-storage/www/index.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/file-storage/www/index.tcl,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/file-storage/www/index.tcl 9 Jul 2002 17:35:08 -0000 1.1.1.1
+++ openacs.org-dev/packages/file-storage/www/index.tcl 31 Jul 2002 16:31:15 -0000 1.1.1.2
@@ -7,7 +7,7 @@
@version $Id$
} {
{folder_id:integer [fs_get_root_folder]}
- {n_past_days:integer "-1"}
+ {n_past_days:integer "99999"}
} -validate {
valid_folder -requires {folder_id:integer} {
if {![fs_folder_p $folder_id]} {
Index: openacs.org-dev/packages/forums/forums.info
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/forums.info,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/forums/forums.info 9 Jul 2002 17:35:09 -0000 1.1.1.1
+++ openacs.org-dev/packages/forums/forums.info 31 Jul 2002 16:31:15 -0000 1.1.1.2
@@ -77,16 +77,18 @@
+
+
+
+
-
-
@@ -111,7 +113,9 @@
-
+
+
+
Index: openacs.org-dev/packages/forums/www/forum-view.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/forum-view.adp,v
diff -u -N -r1.1.1.2 -r1.1.1.3
--- openacs.org-dev/packages/forums/www/forum-view.adp 25 Jul 2002 18:47:15 -0000 1.1.1.2
+++ openacs.org-dev/packages/forums/www/forum-view.adp 31 Jul 2002 16:31:16 -0000 1.1.1.3
@@ -4,91 +4,83 @@
-
-
-
+
-
-
-
-
-
-
- Subject |
- Author |
- Replies |
- Last Post |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- @messages.subject@
-
-
- (@messages.state@)
-
+ |
+
+
+ Search:
+
|
- @messages.user_name@ |
- @messages.n_messages@ |
- @messages.last_modified@ |
+
+
+
+
+
+
+
+
+ Subject |
+ Author |
+ Replies |
+ Last Post |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @messages.subject@
+
+
+
+
+ (@messages.state@)
+
+ |
+ @messages.user_name@ |
+ @messages.n_messages@ |
+ @messages.last_modified@ |
+
+
+
+
+
+
+ No Messages |
+
+
+
+
-
-
-
-
-
- No Messages
- |
-
-
-
-
-
Index: openacs.org-dev/packages/forums/www/forum-view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/forum-view.tcl,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/forums/www/forum-view.tcl 9 Jul 2002 17:35:09 -0000 1.1.1.1
+++ openacs.org-dev/packages/forums/www/forum-view.tcl 31 Jul 2002 16:31:16 -0000 1.1.1.2
@@ -10,8 +10,14 @@
forum_id:integer,notnull
}
+
forum::security::require_read_forum -forum_id $forum_id
+# get the colors from the params
+set table_border_color [parameter::get -parameter table_border_color]
+set table_bgcolor [parameter::get -parameter table_bgcolor]
+set table_other_bgcolor [parameter::get -parameter table_other_bgcolor]
+
set package_id [ad_conn package_id]
set user_id [ad_verify_and_get_user_id]
set admin_p [forum::security::can_admin_forum_p -forum_id $forum_id]
@@ -33,8 +39,7 @@
element create search search_text \
-label Search \
-datatype text \
- -widget text \
- -html {size 60}
+ -widget text
element create search forum_id \
-label ForumID \
Index: openacs.org-dev/packages/forums/www/index.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/index.adp,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/forums/www/index.adp 9 Jul 2002 17:35:09 -0000 1.1.1.1
+++ openacs.org-dev/packages/forums/www/index.adp 31 Jul 2002 16:31:16 -0000 1.1.1.2
@@ -3,68 +3,76 @@
@context_bar@
-
-
-
+
-
+
Forum Name |
Threads |
Last Post |
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
- @forums.name@
-
- @forums.charter@
- |
- @forums.n_threads@ |
- @forums.last_modified@ |
-
-
-
-
-
-
-
-
- No Forums
- |
-
-
-
+
+
+
+
+ @forums.name@
+
+
+
+
+ @forums.charter@
+
+ |
+
+ @forums.n_threads@
+ |
+
+
+ @forums.last_modified@
+
+ |
+
+
+
+
+
+
+ No Forums
+ |
+
+
Index: openacs.org-dev/packages/forums/www/index.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/index.tcl,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/forums/www/index.tcl 9 Jul 2002 17:35:09 -0000 1.1.1.1
+++ openacs.org-dev/packages/forums/www/index.tcl 31 Jul 2002 16:31:16 -0000 1.1.1.2
@@ -12,13 +12,17 @@
set user_id [ad_verify_and_get_user_id]
set admin_p [permission::permission_p -party_id $user_id -object_id $package_id -privilege admin]
+# get the colors from the params
+set table_border_color [parameter::get -parameter table_border_color]
+set table_bgcolor [parameter::get -parameter table_bgcolor]
+set table_other_bgcolor [parameter::get -parameter table_other_bgcolor]
+
form create search -action search
element create search search_text \
-label Search \
-datatype text \
- -widget text \
- -html {size 60}
+ -widget text
element create search forum_id \
-label ForumID \
Index: openacs.org-dev/packages/forums/www/message-chunk.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-chunk.adp,v
diff -u -N -r1.1.1.2 -r1.1.1.3
--- openacs.org-dev/packages/forums/www/message-chunk.adp 25 Jul 2002 18:47:15 -0000 1.1.1.2
+++ openacs.org-dev/packages/forums/www/message-chunk.adp 31 Jul 2002 16:31:16 -0000 1.1.1.3
@@ -1,43 +1,68 @@
-
-
-
- | @message.user_name@ |
- @message.posting_date@ |
-
-
- [
- reply
- | email
+
+
+
+
+
+
+ @message.subject@
+
+
+ @message.subject@
+
+
+
+ |
+ @message.user_name@ |
+ @message.posting_date@ |
+
+
+
+
+ |
-
-
- @message.content@ |
-
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%= [ad_text_to_html -- "$message(content)"] %>
+
+
+
+ @message.content@
+
+ |
+ |
+
-
+
Index: openacs.org-dev/packages/forums/www/message-chunk.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-chunk.tcl,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/forums/www/message-chunk.tcl 9 Jul 2002 17:35:09 -0000 1.1.1.1
+++ openacs.org-dev/packages/forums/www/message-chunk.tcl 31 Jul 2002 16:31:16 -0000 1.1.1.2
@@ -2,7 +2,10 @@
a message chunk to be included in a table listing of messages
+ _so that has to be wrapped in a _
+
@author yon (yon@openforce.net)
+ @author arjun (arjun@openforce.net)
@creation-date 2002-06-02
@version $Id$
@@ -11,6 +14,12 @@
if {![array exists message]} {
ad_return_complaint 1 "Need to provide a message to display."
}
-if {![exists_and_not_null bgcolor]} { set bgcolor "#ffffff" }
+
+if {![exists_and_not_null bgcolor]} {
+ set table_bgcolor [parameter::get -parameter table_bgcolor]
+} else {
+ set table_bgcolor $bgcolor
+}
+
if {![exists_and_not_null moderate_p]} { set moderate_p 0 }
if {![exists_and_not_null forum_moderated_p]} {set forum_moderated_p 0}
Index: openacs.org-dev/packages/forums/www/message-email.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-email.adp,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/forums/www/message-email.adp 9 Jul 2002 17:35:09 -0000 1.1.1.1
+++ openacs.org-dev/packages/forums/www/message-email.adp 31 Jul 2002 16:31:16 -0000 1.1.1.2
@@ -4,6 +4,8 @@
Email a copy of the following message:
-
+
Index: openacs.org-dev/packages/forums/www/message-post-confirm.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-post-confirm.adp,v
diff -u -N -r1.1.1.1 -r1.1.1.2
--- openacs.org-dev/packages/forums/www/message-post-confirm.adp 9 Jul 2002 17:35:09 -0000 1.1.1.1
+++ openacs.org-dev/packages/forums/www/message-post-confirm.adp 31 Jul 2002 16:31:16 -0000 1.1.1.2
@@ -4,8 +4,14 @@
Please confirm the following post:
-
+<% set table_border_color [parameter::get -parameter table_border_color] %>
+
+
+
+