diff options
Diffstat (limited to 'engine')
-rw-r--r-- | engine/classes/ElggWidget.php | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/engine/classes/ElggWidget.php b/engine/classes/ElggWidget.php index 7a5a37ac8..70eaf8a73 100644 --- a/engine/classes/ElggWidget.php +++ b/engine/classes/ElggWidget.php @@ -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; } |