summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2013-01-23 21:33:19 -0500
committerBharat Mediratta <bharat@menalto.com>2013-01-23 21:33:19 -0500
commitaa8fffcd8fc7d16f4bd84a9f8f7ead206d9ce45a (patch)
tree484ad936b32d0683c0ad45c898fa900ca5857546
parentde78d3bfca20fec80fc87a7c5e2d18f3fdd791f1 (diff)
Extract reweighting logic out of Organize_Controller into
item::reweight_all_children as an API and write a test for it. Work in progress on #1914.
-rw-r--r--modules/gallery/helpers/item.php12
-rw-r--r--modules/gallery/tests/Item_Helper_Test.php15
-rw-r--r--modules/organize/controllers/organize.php8
3 files changed, 28 insertions, 7 deletions
diff --git a/modules/gallery/helpers/item.php b/modules/gallery/helpers/item.php
index 20a865d1..b2c4cadf 100644
--- a/modules/gallery/helpers/item.php
+++ b/modules/gallery/helpers/item.php
@@ -437,4 +437,16 @@ class item_Core {
}
return call_user_func_array($callback, $args);
}
+
+ /**
+ * Reset all child weights of a given album to a monotonically increasing sequence based on the
+ * current sort order of the album.
+ */
+ static function resequence_child_weights($album) {
+ $weight = 0;
+ foreach ($album->children() as $child) {
+ $child->weight = ++$weight;
+ $child->save();
+ }
+ }
} \ No newline at end of file
diff --git a/modules/gallery/tests/Item_Helper_Test.php b/modules/gallery/tests/Item_Helper_Test.php
index 0c08d1af..63081884 100644
--- a/modules/gallery/tests/Item_Helper_Test.php
+++ b/modules/gallery/tests/Item_Helper_Test.php
@@ -235,4 +235,19 @@ class Item_Helper_Test extends Gallery_Unit_Test_Case {
$level3b->id,
item::find_by_relative_url("{$level1->slug}/{$level2b->slug}/{$level3b->slug}")->id);
}
+
+ public function resequence_child_weights_test() {
+ $album = test::random_album();
+ $photo1 = test::random_photo($album);
+ $photo2 = test::random_photo($album);
+ $this->assert_true($photo2->weight > $photo1->weight);
+
+ $album->reload();
+ $album->sort_order = "DESC";
+ $album->save();
+ item::resequence_child_weights($album);
+
+ $this->assert_equal(2, $photo1->reload()->weight);
+ $this->assert_equal(1, $photo2->reload()->weight);
+ }
}
diff --git a/modules/organize/controllers/organize.php b/modules/organize/controllers/organize.php
index 97280489..37920020 100644
--- a/modules/organize/controllers/organize.php
+++ b/modules/organize/controllers/organize.php
@@ -128,13 +128,7 @@ class Organize_Controller extends Controller {
access::required("edit", $album);
if ($album->sort_column != "weight") {
- // Force all the weights into the current order before changing the order to manual
- $weight = 0;
- foreach ($album->children() as $child) {
- $child->weight = ++$weight;
- $child->save();
- }
-
+ item::resequence_child_weights($album);
$album->sort_column = "weight";
$album->sort_order = "ASC";
$album->save();