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 @@
- Change Theme: + Change Theme: @theme_data@

" @@ -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 " +
+

+ + + Revert to the default arrangement: + +
" + } + # 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 +

+ Portals in the system: +

- + You have not configured any portals.

Index: openacs-4/packages/new-portal/www/admin/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/www/admin/index.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/new-portal/www/admin/index.tcl 16 Apr 2002 13:55:46 -0000 1.3 +++ openacs-4/packages/new-portal/www/admin/index.tcl 18 Apr 2002 03:31:12 -0000 1.4 @@ -27,10 +27,10 @@ permission::require_permission -object_id [ad_conn package_id] -privilege admin set query "select - portal_id, name + portal_id, name, template_id from portals" -template::query get_users_portals users_portals multirow $query +template::query get_portals portals multirow $query ad_return_template