Index: openacs.org-dev/packages/acs-admin/www/users/user-add-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-admin/www/users/user-add-2.tcl,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/acs-admin/www/users/user-add-2.tcl 9 Jul 2002 17:34:56 -0000 1.1.1.1 +++ openacs.org-dev/packages/acs-admin/www/users/user-add-2.tcl 31 Jul 2002 16:30:47 -0000 1.1.1.2 @@ -87,17 +87,16 @@ set password [ad_generate_random_string] } -set user_id [ad_user_new $email $first_names $last_name $password "" "" "" "t" "approved" $user_id] +if { [db_string double_click {}] != 0 } { + # This was a double-click. Ignore. +} else { + set user_id [ad_user_new $email $first_names $last_name $password "" "" "" "t" "approved" $user_id] -if { !$user_id && [db_string unused "select count(user_id) from users where user_id = :user_id"] == 0} { - # not a double click, and it failed - ad_return_error "Insert Failed" "We were unable to create your user record in the database. Here's what the error looked like: -
-
-$errmsg
-
-
" -return + if { !$user_id } { + # not a double click, and it failed + ad_return_error "Insert Failed" "We were unable to create your user record in the database." + ad_script_abort + } } Index: openacs.org-dev/packages/acs-admin/www/users/user-add-2.xql =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-admin/www/users/user-add-2.xql,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/acs-admin/www/users/user-add-2.xql 9 Jul 2002 17:34:56 -0000 1.1.1.1 +++ openacs.org-dev/packages/acs-admin/www/users/user-add-2.xql 31 Jul 2002 16:30:47 -0000 1.1.1.2 @@ -8,5 +8,11 @@ where person_id = :admin_user_id + + + + select count(user_id) from users where user_id = :user_id + + Index: openacs.org-dev/packages/acs-admin/www/users/user-add.adp =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-admin/www/users/user-add.adp,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/acs-admin/www/users/user-add.adp 9 Jul 2002 17:34:56 -0000 1.1.1.1 +++ openacs.org-dev/packages/acs-admin/www/users/user-add.adp 31 Jul 2002 16:30:47 -0000 1.1.1.2 @@ -1,13 +1,14 @@ Add a user +user.email

Add a user

@context_bar@
-
+ @export_vars@ Index: openacs.org-dev/packages/acs-core-docs/www/xml/kernel/db-api.xml =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-core-docs/www/xml/kernel/db-api.xml,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/acs-core-docs/www/xml/kernel/db-api.xml 9 Jul 2002 17:34:57 -0000 1.1.1.1 +++ openacs.org-dev/packages/acs-core-docs/www/xml/kernel/db-api.xml 31 Jul 2002 16:30:50 -0000 1.1.1.2 @@ -2,7 +2,8 @@ Database Access API -by Jon Salz +by Jon Salz. Revised and expanded by +Roberto Mello (rmello at fslc dot usu dot edu), July 2002. @@ -609,52 +610,6 @@ - -Sequence Pooling - - -The database library can transparently maintain pools of sequence values, so -that each request for a new sequence value (using db_nextval) -does not incur a roundtrip to the server. For instance, this functionality is -very useful in the security/sessions library, which very frequently allocates -values from the sec_id_seq sequence. To utilize this -functionality for a particular sequence, register the sequence to be pooled, -either using the db_register_pooled_sequence procedure at server -startup time, or by including a configuration parameter of the form - - - - - -PoolSequence.sequence_name_seq=count - - - - -in any configuration section in the yourservername.ini -file, e.g., e.g., - - - - - -[ns/server/yourservername/acs/security] -PoolSequence.sec_id_seq=20 - - - - -The database library will allocate this number of sequence values at server -startup. It will periodically scan pools and allocate new values for -sequences which are less than half-full. (This normally occurs every 60 -seconds, and is configurable via the -PooledSequenceUpdateInterval parameter in the -[ns/server/yourservername/acs/database] configuration -section.) - - - - API @@ -665,26 +620,8 @@ release the database handle. - - - -db_abort_transaction - - - -db_abort_transaction - - -Aborts all levels of a transaction. That is if this is called within -several nested transactions, all of them are terminated. Use this insetead of -db_dml "abort" "abort transaction". - - - - - db_null @@ -785,55 +722,41 @@ -db_nextval +db_string -db_nextval sequence-name +db_string statement-name sql [ -default default ] [ -bind bind_set_id | -bind bind_value_list ] -Returns the next value for the sequence sequence-name (using a -SQL statement like SELECT sequence-name.nextval FROM -DUAL). If sequence pooling is enabled for the sequence, transparently -uses a value from the pool if available to save a round-trip to the database -(see ). +Returns the first column of the result of SQL query +sql. If sql doesn't return a +row, returns default (or throws an error if +default is unspecified). Analogous to +database_to_tcl_string and +database_to_tcl_string_or_null. -db_register_pooled_sequence +db_nextval -db_register_pooled_sequence sequence-name pool-size +db_nextval sequence-name -Registers the sequence sequence-name to be pooled, with a pool -size of pool-size sequence values (see ). +Returns the next value for the sequence sequence-name (using a +SQL statement like SELECT sequence-name.nextval FROM +DUAL). If sequence pooling is enabled for the sequence, transparently +uses a value from the pool if available to save a round-trip to the database +(see ). -db_string - - - -db_string statement-name sql [ -default default ] [ -bind bind_set_id | -bind bind_value_list ] - - -Returns the first column of the result of SQL query -sql. If sql doesn't return a -row, returns default (or throws an error if -default is unspecified). Analogous to -database_to_tcl_string and -database_to_tcl_string_or_null. - - - - - db_list @@ -866,6 +789,20 @@ +db_list_of_ns_sets + + + +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. + + + + + db_dml @@ -1003,6 +940,99 @@ +db_abort_transaction + + + + +db_abort_transaction + + +Aborts all levels of a transaction. That is if this is called within +several nested transactions, all of them are terminated. Use this insetead of +db_dml "abort" "abort transaction". + + + + + + +db_multirow + + + +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 + of the form + var_name:1, var_name:2, etc, + setting var_name:rowcount to the total number + of rows, and setting var_name:columns to a + list of column names. Each row also has a column, rownum, automatically + added and set to the row number, starting with 1. Note that this will + override any column in the SQL statement named 'rownum', also if you're + using the Oracle rownum pseudo-column. + + + + You may supply a code block, which will be executed for each row in + the loop. This is very useful if you need to make computations that + are better done in Tcl than in SQL, for example using ns_urlencode + or ad_quotehtml, etc. When the Tcl code is executed, all the columns + from the SQL query will be set as local variables in that code. Any + changes made to these local variables will be copied back into the + multirow. + + + + You may also add additional, computed columns to the multirow, using the + -extend { col_1 col_2 ... } switch. This is + useful for things like constructing a URL for the object retrieved by + the query. + + + + If you're constructing your multirow through multiple queries with the + same set of columns, but with different rows, you can use the + -append switch. This causes the rows returned by this query + to be appended to the rows already in the multirow, instead of starting + a clean multirow, as is the normal behavior. The columns must match the + columns in the original multirow, or an error will be thrown. + + + + Your code block may call continue in order to skip a row + and not include it in the multirow. Or you can call break + to skip this row and quit looping. + + + + + Notice the nonstandard numbering (everything + else in Tcl starts at 0); the reason is that the graphics designer, a non + programmer, may wish to work with row numbers. + + + + Example: + + + +db_multirow -extend { user_url } users users_query { + select user_id first_names, last_name, email from cc_users +} { + set user_url [acs_community_member_url -user_id $user_id] +} + + + + + db_resultrows @@ -1059,54 +1089,166 @@ -db_nullify_empty_string + + + + db_name + + + + + + + db_name + + + + Returns the name of the database, as returned by the driver. + + + + + + + + db_type + + + + + + + db_type + + + + Returns the RDBMS type (i.e. oracle, postgresql) this OpenACS installation is + using. The nsv ad_database_type is set up during the bootstrap process. + + + - - -db_nullify_empty_string string - + + + + + db_compatible_rdbms_p + + + + + + db_compatible_rdbms_p db_type + + + Returns 1 if the given db_type is compatible with the current RDBMS. + + + + + + + + db_package_supports_rdbms_p + + + + + + db_package_supports_rdbms_p db_type_list + + + Returns 1 if db_type_list contains the current RDMBS type. A package + intended to run with a given RDBMS must note this in it's package info + file regardless of whether or not it actually uses the database. + + + -For true SQL purists, we provide the convenience function -db_nullify_empty_string, which returns -[db_null] if its string argument is the empty string -and can be used to encapsulate another Oracle quirk: + + + + + db_legacy_package_p + + + + + + db_legacy_package_p db_type_list + + + Returns 1 if the package is a legacy package. We can only tell for certain if + it explicitly supports Oracle 8.1.6 rather than the OpenACS more general oracle. + + + - + + + + + db_version + + + + + + db_version + + + Returns the RDBMS version (i.e. 8.1.6 is a recent Oracle version; 7.1 a + recent PostgreSQL version. + + + - + + + + + db_current_rdbms + + + + + + db_current_rdbms + + + Returns the current rdbms type and version. + + + -set baz "" - -# Clean out the foo table -# -db_dml unused "delete from foo" - -db_dml unused "insert into foo(baz) values('$baz')" - -set n_rows [db_string unused "select count(*) from foo where baz is null"] -# -# $n_rows is 1; in effect, the "baz is null" criterion is matching -# the empty string we just inserted (because of Oracle's coercion -# quirk) - - - - -To balance out this asymmetry, you can explicitly set baz to -null by writing: - - - - - -db_dml foo_insert "insert into foo(baz) values(:1)" {[db_nullify_empty_string $baz]} - - - - + + + + + db_known_database_types + + + + + + db_known_database_types + + + Returns a list of three-element lists describing the database engines known + to OpenACS. Each sublist contains the internal database name (used in file + paths, etc), the driver name, and a "pretty name" to be used in selection + forms displayed to the user. + + + The nsv containing the list is initialized by the bootstrap script and should + never be referenced directly by user code. + Returns the current rdbms type and version. + + + Index: openacs.org-dev/packages/acs-kernel/sql/oracle/tree-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-kernel/sql/oracle/tree-create.sql,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/acs-kernel/sql/oracle/tree-create.sql 9 Jul 2002 17:34:58 -0000 1.1.1.1 +++ openacs.org-dev/packages/acs-kernel/sql/oracle/tree-create.sql 31 Jul 2002 16:30:51 -0000 1.1.1.2 @@ -101,7 +101,7 @@ v_remainder integer := p_int; v_current_div integer; begin - while v_remainder > 0 loop + while v_current_pow >= 1 loop v_current_div:= floor(v_remainder/v_current_pow); -- we're not prepending 0's Index: openacs.org-dev/packages/acs-kernel/sql/postgresql/acs-objects-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-kernel/sql/postgresql/acs-objects-create.sql,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/acs-kernel/sql/postgresql/acs-objects-create.sql 9 Jul 2002 17:34:58 -0000 1.1.1.1 +++ openacs.org-dev/packages/acs-kernel/sql/postgresql/acs-objects-create.sql 31 Jul 2002 16:30:52 -0000 1.1.1.2 @@ -1365,7 +1365,7 @@ where object_id = acs_object__update_last_modified__object_id; if v_parent_id is not null and v_parent_id != 0 then - select acs_object__update_last_modified(v_parent_id, v_last_modified); + perform acs_object__update_last_modified(v_parent_id, v_last_modified); end if; return acs_object__update_last_modified__object_id; Index: openacs.org-dev/packages/acs-tcl/tcl/00-database-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/acs-tcl/tcl/00-database-procs.tcl,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/acs-tcl/tcl/00-database-procs.tcl 9 Jul 2002 17:34:59 -0000 1.1.1.1 +++ openacs.org-dev/packages/acs-tcl/tcl/00-database-procs.tcl 31 Jul 2002 16:30:56 -0000 1.1.1.2 @@ -213,8 +213,9 @@ } proc_doc db_string { statement_name sql args } { - - Returns the first column of the result of the SQL query $sql. + Usage: db_string statement-name sql [ -default default ] [ -bind bind_set_id | -bind bind_value_list ] + +

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 of the values in the first column of the result of SQL query sql. + If sql doesn't return any rows, returns an empty list. Analogous to database_to_tcl_list. + } { ad_arg_parser { bind } $args @@ -258,8 +261,12 @@ } proc_doc db_list_of_lists { statement_name sql args } { + Usage: db_list_of_lists statement-name sql [ -bind bind_set_id | -bind bind_value_list ] - Returns a list containing lists of the values in each column of each row returned by the SQL query $sql. +

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 statement-name sql [ -bind bind_set_id | -bind bind_value_list ] \ + [ -column_array array_name | -column_set set_name ] \ + code_block [ if_no_rows if_no_rows_block ] - Performs the SQL query $sql, executing code_block once for each row with variables set to column values. +
+

Performs the SQL query sql, executing + code_block once for each row with variables set to + column values (or a set or array populated if -column_array or + column_set is specified). If the query returns no rows, executes + if_no_rows_block (if provided).

+

Example:

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_transactions 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 @@

-
- - +
- - - - - - - - - -
- [ - - - - Administer | - - - + + + [ + + Administer | + Manage/Moderate - + ] + - - ] -

-
- - - Search:  - -
- @notification_chunk@ -

+
+ + @notification_chunk@ + +
+ - [ Post a New Message ] + [ Post a New Message ]
- -
- - - - - - - - - - - - - - - - - - - - - - - - + +
SubjectAuthorRepliesLast Post
- - @messages.subject@ - - - (@messages.state@) - + + + + Search:  + @messages.user_name@@messages.n_messages@@messages.last_modified@
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SubjectAuthorRepliesLast 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@
- - - +
- -
- - [ New Forum ] - -  + + + [ New Forum ] + + +   +   - - - Search:  - + + + Search:  + +

- +
- - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + +
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.subject@ -
- @message.user_name@ - @message.posting_date@ - - - [ - reply - | email + + + + + + + @message.subject@ + + + @message.subject@ + + + + + @message.user_name@ + @message.posting_date@ + + + + +
+ [ reply + | email + ] + +
+ [ edit + | delete + + + + | approve + + + | reject + + ] -
- -
- - [ - edit - | delete - - - | approve - - - | reject - - - ] - -
- - - -
@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] %> +
+ + +
+
+ @exported_vars@ Index: openacs.org-dev/packages/forums/www/message-post.adp =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-post.adp,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/forums/www/message-post.adp 9 Jul 2002 17:35:09 -0000 1.1.1.1 +++ openacs.org-dev/packages/forums/www/message-post.adp 31 Jul 2002 16:31:16 -0000 1.1.1.2 @@ -3,7 +3,9 @@ @context_bar@ - + + +

Index: openacs.org-dev/packages/forums/www/message-post.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-post.tcl,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/forums/www/message-post.tcl 9 Jul 2002 17:35:09 -0000 1.1.1.1 +++ openacs.org-dev/packages/forums/www/message-post.tcl 31 Jul 2002 16:31:16 -0000 1.1.1.2 @@ -19,6 +19,10 @@ set user_id [ad_verify_and_get_user_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] + form create message element create message message_id \ @@ -87,13 +91,15 @@ forum::get -forum_id $forum_id -array forum set confirm_p 1 + set content [string trimright $content] set exported_vars [export_form_vars message_id forum_id parent_id subject content html_p confirm_p] + set message(html_p) $html_p set message(subject) $subject set message(content) $content set message(user_id) $user_id - set message(user_name) [db_string select_name {select first_names || ' ' || last_name from persons where person_id = :user_id}] - set message(posting_date) [db_string select_date {select to_char(sysdate, 'Mon DD YYYY HH24:MI:SS') from dual}] + set message(user_name) [db_string select_name {}] + set message(posting_date) [db_string select_date {}] # Let's check if this person is subscribed to the forum # in case we might want to subscribe them to the thread Index: openacs.org-dev/packages/forums/www/message-post.xql =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-post.xql,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/forums/www/message-post.xql 9 Jul 2002 17:35:09 -0000 1.1.1.1 +++ openacs.org-dev/packages/forums/www/message-post.xql 31 Jul 2002 16:31:16 -0000 1.1.1.2 @@ -2,6 +2,14 @@ + + + select first_names || ' ' || last_name + from persons + where person_id = :user_id + + + select forum_id Index: openacs.org-dev/packages/forums/www/message-view-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-view-oracle.xql,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/forums/www/message-view-oracle.xql 9 Jul 2002 17:35:09 -0000 1.1.1.1 +++ openacs.org-dev/packages/forums/www/message-view-oracle.xql 31 Jul 2002 16:31:16 -0000 1.1.1.2 @@ -8,6 +8,7 @@ 0 as n_attachments, subject, content, + html_p, person.name(user_id) as user_name, to_char(posting_date, 'Mon DD YYYY HH24:MI:SS') as posting_date, tree.tree_level(tree_sortkey) as tree_level, @@ -26,6 +27,7 @@ (select count(*) from attachments where object_id = message_id) as n_attachments, subject, content, + html_p, person.name(user_id) as user_name, to_char(posting_date, 'Mon DD YYYY HH24:MI:SS') as posting_date, tree.tree_level(tree_sortkey) as tree_level, Index: openacs.org-dev/packages/forums/www/message-view-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-view-postgresql.xql,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/forums/www/message-view-postgresql.xql 9 Jul 2002 17:35:09 -0000 1.1.1.1 +++ openacs.org-dev/packages/forums/www/message-view-postgresql.xql 31 Jul 2002 16:31:16 -0000 1.1.1.2 @@ -9,6 +9,7 @@ 0 as n_attachments, subject, content, + html_p, person__name(user_id) as user_name, to_char(posting_date, 'Mon DD YYYY HH24:MI:SS') as posting_date, tree_level(tree_sortkey) as tree_level, @@ -27,6 +28,7 @@ (select count(*) from attachments where object_id = message_id) as n_attachments, subject, content, + html_p, person__name(user_id) as user_name, to_char(posting_date, 'Mon DD YYYY HH24:MI:SS') as posting_date, tree_level(tree_sortkey) as tree_level, Index: openacs.org-dev/packages/forums/www/message-view.adp =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-view.adp,v diff -u -N -r1.1.1.2 -r1.1.1.3 --- openacs.org-dev/packages/forums/www/message-view.adp 25 Jul 2002 18:47:15 -0000 1.1.1.2 +++ openacs.org-dev/packages/forums/www/message-view.adp 31 Jul 2002 16:31:16 -0000 1.1.1.3 @@ -2,57 +2,71 @@ Forum @forum.name@: @message.subject@ @context_bar@ +
+
- - - - + +
- @notification_chunk@ - - [ - Post a New Message - ] - - - + + + + - -
+ @notification_chunk@ +
+ + + [ Post a New Message. ] + + +
+ Search:  - -
+
+
-
+
- - -
+ + +
-
- +
- - -<% set width [expr 100 - $responses(tree_level) * 3] %> - - + + + <% set width [expr 100 - $responses(tree_level) * 3] %> + + - - + +
- - - - - - - +
+ + + + + +
Index: openacs.org-dev/packages/forums/www/message-view.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/forums/www/message-view.tcl,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/forums/www/message-view.tcl 9 Jul 2002 17:35:09 -0000 1.1.1.1 +++ openacs.org-dev/packages/forums/www/message-view.tcl 31 Jul 2002 16:31:16 -0000 1.1.1.2 @@ -12,6 +12,11 @@ forum::security::require_read_message -message_id $message_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] + # Check if the user has admin on the message set moderate_p [forum::security::can_moderate_message_p -message_id $message_id] if {!${moderate_p}} { @@ -28,8 +33,7 @@ element create search search_text \ -label Search \ -datatype text \ - -widget text \ - -html {size 60} + -widget text element create search forum_id \ -label ForumID \ @@ -94,7 +98,6 @@ -pretty_name $message(subject) \ -url [ad_conn url]?message_id=$message_id \ ] - append notification_chunk "

" } else { set notification_chunk "" } Index: openacs.org-dev/packages/simple-survey/sql/postgresql/simple-survey-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs.org-dev/packages/simple-survey/sql/postgresql/simple-survey-create.sql,v diff -u -N -r1.1.1.1 -r1.1.1.2 --- openacs.org-dev/packages/simple-survey/sql/postgresql/simple-survey-create.sql 9 Jul 2002 17:35:12 -0000 1.1.1.1 +++ openacs.org-dev/packages/simple-survey/sql/postgresql/simple-survey-create.sql 31 Jul 2002 16:31:28 -0000 1.1.1.2 @@ -180,7 +180,7 @@ -- constraint survsimp_surv_single_edit_p_ck -- check(single_editable_p in ('t','f')), type varchar(20), - display_type varchar(20), + display_type varchar(20) ); -- each question can be