Index: openacs-4/packages/new-portal/sql/oracle/api-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/sql/oracle/api-create.sql,v
diff -u -r1.34 -r1.35
--- openacs-4/packages/new-portal/sql/oracle/api-create.sql 29 Mar 2002 18:48:28 -0000 1.34
+++ openacs-4/packages/new-portal/sql/oracle/api-create.sql 18 Apr 2002 03:31:11 -0000 1.35
@@ -104,9 +104,34 @@
page_id in portal_pages.page_id%TYPE
)
is
+ v_portal_id portal_pages.portal_id%TYPE;
+ v_sort_key portal_pages.sort_key%TYPE;
+ v_curr_sort_key portal_pages.sort_key%TYPE;
+ v_page_count_from_0 integer;
begin
- delete from portal_pages where page_id = portal_page.delete.page_id;
-
+ -- sort keys MUST be an unbroken sequece from 0 to max(sort_key)
+ select portal_id into v_portal_id
+ from portal_pages
+ where page_id = portal_page.delete.page_id;
+
+ select sort_key into v_sort_key
+ from portal_pages
+ where page_id = portal_page.delete.page_id;
+
+ select (count(*) - 1) into v_page_count_from_0
+ from portal_pages
+ where portal_id = v_portal_id;
+
+ for i in 0..v_page_count_from_0 loop
+ if i = v_sort_key then
+ delete from portal_pages where page_id = portal_page.delete.page_id;
+ elsif i > v_sort_key then
+ -- raise_application_error(-20000, 'del ' || i || ' ' || v_sort_key );
+ update portal_pages set sort_key = -1 where sort_key = i;
+ update portal_pages set sort_key = i - 1 where sort_key = -1;
+ end if;
+ end loop;
+
acs_object.delete(page_id);
end delete;
Index: openacs-4/packages/new-portal/tcl/portal-procs-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/tcl/portal-procs-oracle.xql,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/new-portal/tcl/portal-procs-oracle.xql 16 Apr 2002 13:55:44 -0000 1.14
+++ openacs-4/packages/new-portal/tcl/portal-procs-oracle.xql 18 Apr 2002 03:31:11 -0000 1.15
@@ -4,7 +4,7 @@
oracle8.1.6
-
+
begin
@@ -40,7 +40,7 @@
end;
-
+
@@ -120,19 +120,23 @@
-
-
+
begin
-
- :1 := portal_page.new (
- pretty_name => :pretty_name,
- portal_id => :portal_id,
- layout_id => :layout_id
- );
-
+ :1 := portal_page.new (
+ pretty_name => :pretty_name,
+ portal_id => :portal_id,
+ layout_id => :layout_id
+ );
end;
+
+
-
+
+
+ begin
+ portal_page.delete ( page_id => :page_id );
+ end;
+
Index: openacs-4/packages/new-portal/tcl/portal-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/tcl/portal-procs.tcl,v
diff -u -r1.130 -r1.131
--- openacs-4/packages/new-portal/tcl/portal-procs.tcl 16 Apr 2002 13:55:44 -0000 1.130
+++ openacs-4/packages/new-portal/tcl/portal-procs.tcl 18 Apr 2002 03:31:11 -0000 1.131
@@ -250,7 +250,6 @@
{-hide_links_p "f"}
{-render_style "individual"}
portal_id
- {theme_id ""}
} {
Get a portal by id. If it's not found, say so.
FIXME: right now the render style is totally ignored (ben)
@@ -274,9 +273,6 @@
db_1row portal_select {} -column_array portal
set page_id $portal(page_id)
- # theme_id override
- if { $theme_id != "" } { set portal(theme_id) $theme_id }
-
db_foreach element_select {} -column_array entry {
# put the element IDs into buckets by region...
lappend element_ids($entry(region)) $entry(element_id)
@@ -367,7 +363,7 @@
ad_proc -public configure {
{-page_id ""}
{-template_p "f"}
- {-referer "f"}
+ {-referer ""}
portal_id
return_url
} {
@@ -416,7 +412,7 @@
append theme_data ""
- # XXXX page support
+ # page support
if { $template_p == "f" } {
set element_src "[portal::www_path]/place-element"
} else {
@@ -440,7 +436,7 @@
"
@@ -520,9 +516,22 @@
-
"
+ "
+ # reverting to template support
+ # this is new code (4/15/02)
+ if {![empty_string_p [get_portal_template_id $portal_id]]} {
+ append template "
+
+
"
+ }
+
# This hack is to work around the acs-templating system
set __adp_stub "[get_server_root][www_path]/."
set {master_template} \"master\"
@@ -559,6 +568,69 @@
set op [ns_set get $form op]
switch $op {
+ "Revert" {
+ db_transaction {
+ set template_id [get_portal_template_id $portal_id]
+
+ # revert theme
+ set theme_id [get_theme_id -portal_id $template_id]
+ db_dml revert_theme_update {}
+
+ # revert pages
+ # first equalize number of pages in the target
+ set template_page_count [page_count -portal_id $template_id]
+ set target_page_count [page_count -portal_id $portal_id]
+ set difference [expr $template_page_count - $target_page_count]
+
+ if {$difference > 0} {
+ # less pages in target
+ for {set x 0} {$x < $difference} {incr x} {
+
+ set pretty_name "portal revert dummy page $x"
+ page_create \
+ -pretty_name $pretty_name \
+ -portal_id $portal_id
+ }
+ } elseif {$difference < 0} {
+ # more pages in target, delete them from the end,
+ # putting any elements on them on the first page,
+ # we put them in the right place later
+ for {set x 0} {$x < [expr abs($difference)]} {incr x} {
+
+ set max_page_id [db_string revert_max_page_id_select {}]
+ set page_id [db_string revert_min_page_id_select {}]
+ set region 1
+
+ db_foreach revert_move_elements_for_del {} {
+ db_dml move_to_page_update {}
+ }
+
+ page_delete -page_id $max_page_id
+ }
+ }
+
+ # now that they have the same number of pages, get to it
+ foreach source_page_id \
+ [list_pages_tcl_list -portal_id $template_id] {
+
+ db_1row revert_get_source_page_info {}
+
+ set target_page_id \
+ [db_string revert_get_target_page_id {}]
+
+ db_dml revert_page_update {}
+
+ # revert elements in two steps like "swap"
+ db_foreach revert_get_source_elements {} {
+ # the element might not be on the target page...
+ set target_element_id \
+ [db_string revert_get_target_element {}]
+
+ db_dml revert_element_update {}
+ }
+ }
+ }
+ }
"Rename" {
portal::update_name $portal_id [ns_set get $form new_name]
}
@@ -801,7 +873,7 @@
} {
deletes the page
} {
- return [db_dml page_delete {}]
+ return [db_exec_plsql page_delete {}]
}
ad_proc -public page_create {
@@ -1748,6 +1820,14 @@
}
}
+ ad_proc -public get_theme_id {
+ {-portal_id:required}
+ } {
+ self explanatory
+ } {
+ return [db_string get_theme_id_select {}]
+ }
+
ad_proc -public get_theme_id_from_name {
{-theme_name:required}
} {
Index: openacs-4/packages/new-portal/tcl/portal-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/tcl/portal-procs.xql,v
diff -u -r1.25 -r1.26
--- openacs-4/packages/new-portal/tcl/portal-procs.xql 16 Apr 2002 13:55:44 -0000 1.25
+++ openacs-4/packages/new-portal/tcl/portal-procs.xql 18 Apr 2002 03:31:11 -0000 1.26
@@ -132,6 +132,114 @@
+
+
+ update portals set theme_id = :theme_id where portal_id = :portal_id
+
+
+
+
+
+ select max(page_id) from portal_pages where portal_id = :portal_id
+
+
+
+
+
+ select min(page_id) from portal_pages where portal_id = :portal_id
+
+
+
+
+
+ select element_id from portal_element_map where page_id = :max_page_id
+
+
+
+
+
+ select pretty_name, layout_id, sort_key
+ from portal_pages
+ where page_id = :source_page_id
+
+
+
+
+
+ select page_id
+ from portal_pages
+ where portal_id = :portal_id
+ and sort_key = :sort_key
+
+
+
+
+
+ update portal_pages
+ set pretty_name = :pretty_name,
+ layout_id = :layout_id
+ where page_id = :target_page_id
+
+
+
+
+
+ select region, sort_key, state,
+ pd.datasource_id as datasource_id,
+ pd.name as name
+ from portal_element_map pem,
+ portal_datasources pd
+ where pem.page_id = :source_page_id
+ and pem.datasource_id = pd.datasource_id
+
+
+
+
+
+ select element_id
+ from portal_element_map pem, portal_pages pp
+ where pp.portal_id = :portal_id
+ and pem.page_id = pp.page_id
+ and pem.datasource_id = :datasource_id
+
+
+
+
+
+ update portal_element_map
+ set region = :region,
+ sort_key = :sort_key,
+ state = :state,
+ page_id = :target_page_id
+ where element_id = :target_element_id
+
+
+
+
+
+ update portals
+ set theme_id = :theme_id
+ where portal_id = :portal_id
+
+
+
+
+
+ update portals
+ set theme_id = :theme_id
+ where portal_id = :portal_id
+
+
+
+
+
+
+ update portals
+ set theme_id = :theme_id
+ where portal_id = :portal_id
+
+
+
update portals
@@ -214,12 +322,6 @@
-
-
- delete from portal_pages where page_id = :page_id
-
-
-
select page_id
@@ -577,9 +679,9 @@
-
+
- select theme_id from portal_element_themes where name = :theme_name
+ select theme_id from portals where portal_id = :portal_id
Index: openacs-4/packages/new-portal/www/admin/index.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/www/admin/index.adp,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/new-portal/www/admin/index.adp 16 Apr 2002 15:11:33 -0000 1.5
+++ openacs-4/packages/new-portal/www/admin/index.adp 18 Apr 2002 03:31:12 -0000 1.6
@@ -21,17 +21,20 @@
Welcome to Portals
+