]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #4255 new widget ordering code
authorcash <cash.costello@gmail.com>
Sat, 31 Dec 2011 22:22:55 +0000 (17:22 -0500)
committercash <cash.costello@gmail.com>
Sat, 31 Dec 2011 22:23:25 +0000 (17:23 -0500)
engine/classes/ElggWidget.php

index 7a5a37ac845cf58e1d498f97a6147289b29626c0..70eaf8a73e6ab4b7846a49ac78eec31b9b48dec0 100644 (file)
@@ -133,17 +133,30 @@ class ElggWidget extends ElggObject {
                if ($rank == 0) {
                        // top of the column
                        $this->order = $widgets[0]->order - 10;
-               } elseif ($rank == count($widgets)) {
+               } elseif ($rank == (count($widgets)-1)) {
                        // bottom of the column
                        $this->order = end($widgets)->order + 10;
                } else {
-                       // reorder widgets that are below
-                       $this->order = $widgets[$rank]->order;
-                       for ($index = $rank; $index < count($widgets); $index++) {
-                               if ($widgets[$index]->guid != $this->guid) {
-                                       $widgets[$index]->order += 10;
+                       // reorder widgets
+
+                       // remove the widget that's being moved from the array
+                       foreach ($widgets as $index => $widget) {
+                               if ($widget->guid == $this->guid) {
+                                       unset($widgets[$index]);
                                }
                        }
+
+                       // split the array in two and recombine with the moved array in middle
+                       $before = array_slice($widgets, 0, $rank);
+                       array_push($before, $this);
+                       $after = array_slice($widgets, $rank);
+                       $widgets = array_merge($before, $after);
+                       ksort($widgets);
+                       $order = 0;
+                       foreach ($widgets as $widget) {
+                               $widget->order = $order;
+                               $order += 10;
+                       }
                }
                $this->column = $column;
        }