Index: openacs-4/packages/edit-this-page/Changes =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/Changes,v diff -u -r1.3 -r1.4 --- openacs-4/packages/edit-this-page/Changes 4 Apr 2003 15:56:20 -0000 1.3 +++ openacs-4/packages/edit-this-page/Changes 23 Sep 2003 19:13:19 -0000 1.4 @@ -1,5 +1,9 @@ Edit This Page version history +22 September 2003 +-Added support for enhanched text widget to content attribute +-Converted etp-edit to use ad_form/form-builder + 25 January 2003 -Oracle is broken. We will fix it later. -Changed base content type to be etp_page_revision, all custom types should Index: openacs-4/packages/edit-this-page/edit-this-page.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/edit-this-page.info,v diff -u -r1.7 -r1.8 --- openacs-4/packages/edit-this-page/edit-this-page.info 17 May 2003 10:30:36 -0000 1.7 +++ openacs-4/packages/edit-this-page/edit-this-page.info 23 Sep 2003 19:13:19 -0000 1.8 @@ -7,7 +7,7 @@ f f - + postgresql Index: openacs-4/packages/edit-this-page/sql/postgresql/edit-this-page-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/sql/postgresql/edit-this-page-create.sql,v diff -u -r1.12 -r1.13 --- openacs-4/packages/edit-this-page/sql/postgresql/edit-this-page-create.sql 17 May 2003 10:31:27 -0000 1.12 +++ openacs-4/packages/edit-this-page/sql/postgresql/edit-this-page-create.sql 23 Sep 2003 19:13:20 -0000 1.13 @@ -72,6 +72,53 @@ end; ' language 'plpgsql'; +create or replace function etp__create_page(integer, integer, varchar, varchar, varchar) +returns integer as ' +declare + p_item_id alias for $1; + p_package_id alias for $2; + p_name alias for $3; + p_title alias for $4; + p_content_type alias for $5; -- default null -> use content_revision + v_item_id integer; + v_revision_id integer; + v_folder_id integer; +begin + if p_item_id is null then + v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id); + else + v_item_id := acs_object__new(p_item_id, ''content_item'', now(), null, null, p_package_id); + end if; + + v_folder_id := etp__get_folder_id(p_package_id); + +-- due to a change in acs_object__delete we can reference the actual +-- object type we want +-- using this we can more easily search, but we will have to create a service +-- contract for each custom content type +-- we define a default etp_page_revision and service contract to go with it +-- make sure to subtype from etp_page_revision for any custom types +-- 2003-01-12 DaveB + + insert into cr_items ( + item_id, parent_id, name, content_type + ) values ( + v_item_id, v_folder_id, p_name, p_content_type + ); + + v_revision_id := acs_object__new(null, p_content_type, now(), null, null, v_item_id); + + insert into cr_revisions (revision_id, item_id, title, + publish_date, mime_type) + values (v_revision_id, v_item_id, p_title, now(), ''text/html''); + + update cr_items set live_revision = v_revision_id + where item_id = v_item_id; + + return 1; +end; +' language 'plpgsql'; + create function etp__create_extlink(integer, varchar, varchar, varchar) returns integer as ' declare @@ -179,7 +226,58 @@ end; ' language 'plpgsql'; +create or replace function etp__create_new_revision(integer, varchar, integer, integer) +returns integer as ' +declare + p_package_id alias for $1; + p_name alias for $2; + p_user_id alias for $3; + p_revision_id alias for $4; + v_revision_id integer; + v_item_id integer; + v_content_type varchar; +begin + select max(r.revision_id) + into v_revision_id + from cr_revisions r, cr_items i + where i.name = p_name + and i.parent_id = etp__get_folder_id(p_package_id) + and r.item_id = i.item_id; + + select item_id + into v_item_id + from cr_revisions + where revision_id = v_revision_id; + + select object_type + into v_content_type + from acs_objects + where object_id = v_revision_id; + + -- cannot use acs_object__new because it creates attributes with their + -- default values, which is not what we want. + + + insert into acs_objects (object_id, object_type, creation_date, creation_user, context_id) + values (p_revision_id, v_content_type, now(), p_user_id, v_item_id); + + insert into cr_revisions (revision_id, item_id, title, description, content, mime_type) + select p_revision_id, item_id, title, description, content, mime_type + from cr_revisions r + where r.revision_id = v_revision_id; + + -- copy extended attributes to the new revision, if there are any + insert into acs_attribute_values (object_id, attribute_id, attr_value) + select p_revision_id as object_id, attribute_id, attr_value + from acs_attribute_values + where object_id = v_revision_id; + + return 1; +end; +' language 'plpgsql'; + + create function etp__get_folder_id (integer) returns integer as ' declare Index: openacs-4/packages/edit-this-page/sql/postgresql/upgrade/upgrade-1.3.sql-1.5.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/sql/postgresql/upgrade/Attic/upgrade-1.3.sql-1.5.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/edit-this-page/sql/postgresql/upgrade/upgrade-1.3.sql-1.5.sql 23 Sep 2003 19:13:20 -0000 1.1 @@ -0,0 +1,50 @@ +--add new pl/pgsql proc +--Dave Bauer dave@thedesignexperience.org +--2003-09-22 + +create or replace function etp__create_page(integer, integer, varchar, varchar, varchar) +returns integer as ' +declare + p_item_id alias for $1; + p_package_id alias for $2; + p_name alias for $3; + p_title alias for $4; + p_content_type alias for $5; -- default null -> use content_revision + v_item_id integer; + v_revision_id integer; + v_folder_id integer; +begin + if p_item_id is null then + v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id); + else + v_item_id := acs_object__new(p_item_id, ''content_item'', now(), null, null, p_package_id); + end if; + + v_folder_id := etp__get_folder_id(p_package_id); + +-- due to a change in acs_object__delete we can reference the actual +-- object type we want +-- using this we can more easily search, but we will have to create a service +-- contract for each custom content type +-- we define a default etp_page_revision and service contract to go with it +-- make sure to subtype from etp_page_revision for any custom types +-- 2003-01-12 DaveB + + insert into cr_items ( + item_id, parent_id, name, content_type + ) values ( + v_item_id, v_folder_id, p_name, p_content_type + ); + + v_revision_id := acs_object__new(null, p_content_type, now(), null, null, v_item_id); + + insert into cr_revisions (revision_id, item_id, title, + publish_date, mime_type) + values (v_revision_id, v_item_id, p_title, now(), ''text/html''); + + update cr_items set live_revision = v_revision_id + where item_id = v_item_id; + + return 1; +end; +' language 'plpgsql'; Index: openacs-4/packages/edit-this-page/tcl/etp-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/tcl/etp-procs-postgresql.xql,v diff -u -r1.10 -r1.11 --- openacs-4/packages/edit-this-page/tcl/etp-procs-postgresql.xql 4 Apr 2003 15:20:28 -0000 1.10 +++ openacs-4/packages/edit-this-page/tcl/etp-procs-postgresql.xql 23 Sep 2003 19:13:20 -0000 1.11 @@ -48,6 +48,7 @@ select etp__create_page( + :item_id, :package_id, :name, :title, @@ -74,7 +75,7 @@ - select i.item_id, i.name, r.revision_id, r.title, + select i.item_id, i.name, r.revision_id, r.title, r.mime_type, r.description, r.publish_date, r.content $extended_attributes from cr_items i, cr_revisions r where i.parent_id = etp__get_folder_id(:package_id) @@ -86,7 +87,7 @@ - select i.item_id, i.name, r.revision_id, r.title, + select i.item_id, i.name, r.revision_id, r.title, r.mime_type, r.description, r.publish_date, r.content $extended_attributes from cr_items i, cr_revisions r where i.parent_id = etp__get_folder_id(:package_id) @@ -166,4 +167,10 @@ + + + select etp__get_folder_id(:package_id) + + + Index: openacs-4/packages/edit-this-page/tcl/etp-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/tcl/etp-procs.tcl,v diff -u -r1.13 -r1.14 --- openacs-4/packages/edit-this-page/tcl/etp-procs.tcl 7 Jul 2003 16:17:16 -0000 1.13 +++ openacs-4/packages/edit-this-page/tcl/etp-procs.tcl 23 Sep 2003 19:13:20 -0000 1.14 @@ -183,7 +183,7 @@ } -ad_proc -public make_page { name {title "Untitled"} } { +ad_proc -public make_page { name {title "Untitled"} {item_id ""}} { @author Luke Pond @creation-date 2001-05-31 @param name the name of the page you wish to create @@ -318,6 +318,8 @@ db_1row get_page_attributes_other_revision "" -column_array pa } + set pa(content) [template::util::richtext get_property html_value [list $pa(content) $pa(mime_type)]] + # add in the context bar if { $name == "index" } { set cb [ad_context_bar] @@ -698,4 +700,11 @@ } } +ad_proc -public get_folder_id { package_id } { + @param package_id + @returns content folder associated with package_id etp package instance +} { + return [db_exec_plsql get_folder_id ""] } + +} Fisheye: Tag 1.4 refers to a dead (removed) revision in file `openacs-4/packages/edit-this-page/www/etp-edit-2.tcl'. Fisheye: No comparison available. Pass `N' to diff? Index: openacs-4/packages/edit-this-page/www/etp-edit-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/www/etp-edit-postgresql.xql,v diff -u -r1.3 -r1.4 --- openacs-4/packages/edit-this-page/www/etp-edit-postgresql.xql 18 Dec 2001 19:28:00 -0000 1.3 +++ openacs-4/packages/edit-this-page/www/etp-edit-postgresql.xql 23 Sep 2003 19:13:20 -0000 1.4 @@ -10,12 +10,12 @@ - select $attribute as value, r.title as page_title + select $attribute as value, r.title as page_title, mime_type from cr_revisions r, cr_items i where i.parent_id = etp__get_folder_id(:package_id) and i.name = :name and i.item_id = r.item_id - and r.revision_id = :revision_id + and r.revision_id = :old_revision_id @@ -27,8 +27,15 @@ where i.parent_id = etp__get_folder_id(:package_id) and i.name = :name and i.item_id = r.item_id - and r.revision_id = :revision_id + and r.revision_id = :old_revision_id + + + + +select etp__create_new_revision(:package_id, :name, :user_id, :revision_id); + + Index: openacs-4/packages/edit-this-page/www/etp-edit.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/www/etp-edit.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/edit-this-page/www/etp-edit.adp 19 Jun 2003 01:12:30 -0000 1.4 +++ openacs-4/packages/edit-this-page/www/etp-edit.adp 23 Sep 2003 19:13:20 -0000 1.5 @@ -1,15 +1,4 @@ @page_title;noquote@ @context;noquote@ - -
-@form_vars;noquote@ - - - -
-@widget;noquote@ -
- -
-
\ No newline at end of file + Index: openacs-4/packages/edit-this-page/www/etp-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/www/etp-edit.tcl,v diff -u -r1.6 -r1.7 --- openacs-4/packages/edit-this-page/www/etp-edit.tcl 11 Aug 2003 21:06:57 -0000 1.6 +++ openacs-4/packages/edit-this-page/www/etp-edit.tcl 23 Sep 2003 19:13:20 -0000 1.7 @@ -18,72 +18,156 @@ etp::check_write_access set package_id [ad_conn package_id] -set revision_id [etp::get_latest_revision_id $package_id $name] +set user_id [ad_conn user_id] +set old_revision_id [etp::get_latest_revision_id $package_id $name] + set content_type [etp::get_content_type $name] set attribute_desc [etp::get_attribute_desc $attribute $content_type] -ns_log Notice "etp-edit: attr_desc is $attribute_desc" set attribute_title [etp::get_attribute_pretty_name $attribute_desc $name] +set type [etp::get_attribute_data_type $attribute_desc] +set html [etp::get_attribute_html $attribute_desc] +#transform old style ETP html attributes to ad_form style +regsub -all "=" $html " " html +set default [etp::get_attribute_default $attribute_desc] -# figure out the attribute's value +set element $attribute -if { [lsearch -exact {title description content} $attribute] >= 0 } { - # value is stored in cr_revisions table +# see if a select-list callback function was specified +if { [info commands $default] != "" } { + set query_results [eval $default option_list $attribute_id] + set widget select +} elseif {$type == "string" && [regexp -nocase {(rows|cols)} $html]} { + if {[string equal $attribute content]} { - db_1row get_standard_attribute "" + set widget "(richtext)" + set type richtext } else { - # value is stored in acs_attribute_values - set attribute_id [etp::get_attribute_id $attribute_desc] - db_1row get_extended_attribute "" + set widget "(textarea)" } + +} elseif {$type == "date"} { + set widget "(date),to_sql(linear_date),from_sql(sql_date)" + set widget_extra [list format "Month DD YYYY"] + set element datevalue +} else { + set widget "(text)" +} +# to set values, we'll use -edit_request block or -on_request block. +# we really need to grab the item_id/revision_id -# TODO: need to implement select lists also -# TODO: what about default values? +set widget_list [list $element:${type}${widget} [list label "$attribute_title"] [list html $html] ] -set type [etp::get_attribute_data_type $attribute_desc] -set html [etp::get_attribute_html $attribute_desc] -set default [etp::get_attribute_default $attribute_desc] +if {[exists_and_not_null widget_extra]} { + lappend widget_list $widget_extra +} -ns_log Notice "default is $default; [info commands $default]" -# see if a select-list callback function was specified -if { [info commands $default] != "" } { - set query_results [eval $default option_list $attribute_id] - set widget "\n" -} elseif {$type == "string" && [regexp -nocase {(rows|cols)} $html]} { - set widget "\n" -} elseif {$type == "date"} { - if [empty_string_p $value] { - set widget [ad_dateentrywidget datevalue] + + db_exec_plsql create_new_revision "" + + set attribute_id [etp::get_attribute_id $attribute_desc] + if { $attribute_id == -1} { + # standard attribute + + # DRB: The following code's an absolute hack, but then again the original + # code's pretty much an absolute hack, too. We need to sit down and make + # some decisions about how to stuff Oracle clob and PG (and other reasonable + # RDBMS's) long text type in an RDBMS-independent fashion. + + # This isn't as ugly as it could be in the sense that the test for clobness is + # encapsulated in the query file. So maybe it's not quite as ugly a hack + # as I make it out to be ... you decide! + + if { ![empty_string_p [db_map update_${attribute}_attribute_clob]] } { + db_dml update_${attribute}_attribute_clob "" -blobs [list $value] + } else { + db_dml update_attribute "" + } + } else { - # Put the date back into YYYY-MM-DD format - set date_format [etp::get_application_param date_format] - set value [db_string transform_date ""] - set widget [ad_dateentrywidget datevalue $value] + # extended_attribute + db_transaction { + db_dml delete_ext_attribute "" + db_dml insert_ext_attribute "" + } } -} else { - set widget "\n" + + # As a convenience, if you change the Title of an index page, + # we also update the package instance name so that the context bar + # reflects the new title. Note this is something you can't do through + # the Site Map UI. + + if { $name == "index" && $attribute == "title" } { + db_dml update_package_instance_name "" + } + + ad_returnredirect "etp?[export_url_vars name]" } -set form_vars [export_form_vars name attribute] -set page_title "$attribute_title for page '$page_title'" +set page_title "$attribute_title for page \"$page_title\"" if {$name == "index"} { set context [list [list "etp?[export_url_vars name]" Edit] $attribute_title] } else { set context [list [list $name $name] [list "etp?[export_url_vars name]" Edit] $attribute_title] } - - -