diff options
author | cash <cash.costello@gmail.com> | 2011-12-31 17:22:55 -0500 |
---|---|---|
committer | cash <cash.costello@gmail.com> | 2011-12-31 17:23:25 -0500 |
commit | dfcd3dafeeb61fe61fec96f4a0a6c09ed92deda7 (patch) | |
tree | a0ad4a6e878b24c2dc83afefb5c369ae9220af37 | |
parent | db073ebcb0d52f263eac5a39560b113a4aec7a1d (diff) | |
download | elgg-dfcd3dafeeb61fe61fec96f4a0a6c09ed92deda7.tar.gz elgg-dfcd3dafeeb61fe61fec96f4a0a6c09ed92deda7.tar.bz2 |
Fixes #4255 new widget ordering code
-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; } |