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.19 -r1.20
--- openacs-4/packages/edit-this-page/edit-this-page.info 5 Aug 2018 21:56:22 -0000 1.19
+++ openacs-4/packages/edit-this-page/edit-this-page.info 31 Jul 2024 11:48:04 -0000 1.20
@@ -7,7 +7,7 @@
f
f
-
+
postgresql
@@ -17,7 +17,7 @@
An easy-to-use content management system.
An Easy to use publishing system with versioning and permissions.
-
+
Fisheye: Tag 1.2 refers to a dead (removed) revision in file `openacs-4/packages/edit-this-page/www/etp-swap-oracle.xql'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag 1.3 refers to a dead (removed) revision in file `openacs-4/packages/edit-this-page/www/etp-swap-postgresql.xql'.
Fisheye: No comparison available. Pass `N' to diff?
Index: openacs-4/packages/edit-this-page/www/etp-swap.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/www/etp-swap.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/edit-this-page/www/etp-swap.tcl 20 Jan 2018 22:42:50 -0000 1.2
+++ openacs-4/packages/edit-this-page/www/etp-swap.tcl 31 Jul 2024 11:48:04 -0000 1.3
@@ -4,11 +4,18 @@
@author Luke Pond (dlpond@pobox.com)
@creation-date 2001-06-01
- Swaps the page with the given sort order
- with the one preceding it.
+ Swaps the page with the given sort order with the one preceding
+ it.
} {
- sort_order
+ sort_order:notnull
+} -validate {
+ is_binary {
+ if {![regexp {^[0-1]+$} $sort_order]} {
+ ad_complain [_ acs-templating.Invalid_number]
+ return
+ }
+ }
}
etp::check_write_access
@@ -17,29 +24,57 @@
set package_id [ad_conn package_id]
-db_foreach get_prev_key "" {
- set prev_sort_key $tree_sortkey
- break;
-}
+set folder_id [::etp::get_folder_id $package_id]
+set prev_sort_key [db_string get_prev_key {
+ select tree_sortkey
+ from cr_items
+ where parent_id = :folder_id
+ and tree_sortkey < :sort_key
+ order by tree_sortkey desc
+ fetch first 1 rows only
+}]
+
db_transaction {
-db_foreach get_all_keys "" {
+ db_foreach get_all_keys {
+ select tree_sortkey, item_id
+ from cr_items
+ where tree_sortkey >= :prev_sort_key
+ order by tree_sortkey
+ } {
+ if {[regsub "^$prev_sort_key" $tree_sortkey $sort_key new_sortkey] ||
+ [regsub "^$sort_key" $tree_sortkey $prev_sort_key new_sortkey]} {
- if {[regsub "^$prev_sort_key" $tree_sortkey $sort_key new_sortkey] ||
- [regsub "^$sort_key" $tree_sortkey $prev_sort_key new_sortkey]} {
+ #
+ # Because tree_sortkey is unique, we need to use this
+ # swapping idiom. We assume "0" to be a safe temporary
+ # value for a sortkey.
+ #
+ db_dml c_eq_a_key {
+ update cr_items set
+ tree_sortkey = '0'
+ where tree_sortkey = :new_sortkey
+ }
- # fortunately tree_sortkey is not unique, so it doesn't matter
- # if we temporarily have two rows with the same key here.
+ db_dml a_eq_b_key {
+ update cr_items set
+ tree_sortkey = :new_sortkey
+ where item_id = :item_id
+ }
- db_dml update_key ""
+ db_dml b_eq_c_key {
+ update cr_items set
+ tree_sortkey = :tree_sortkey
+ where tree_sortkey = '0'
+ }
- } else {
- # because of how we ordered the select, we're done.
- # db_foreach will flush the remaining result rows.
- break
+ } else {
+ # because of how we ordered the select, we're done.
+ # db_foreach will flush the remaining result rows.
+ break
+ }
}
-}
}