]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #4283 moving widgets from inactive plugins to the bottom of columns
authorCash Costello <cash.costello@gmail.com>
Fri, 10 Feb 2012 02:13:50 +0000 (21:13 -0500)
committerCash Costello <cash.costello@gmail.com>
Fri, 10 Feb 2012 02:16:27 +0000 (21:16 -0500)
engine/classes/ElggWidget.php

index 7914fa140de8f7374d8a08087416764dd8daaeef..99708f66a9ea3d189dd4c3e63de10847f6127d08 100644 (file)
@@ -131,11 +131,21 @@ class ElggWidget extends ElggObject {
 
                usort($widgets, create_function('$a,$b','return (int)$a->order > (int)$b->order;'));
 
+               // remove widgets from inactive plugins
+               $widget_types = elgg_get_widget_types($this->context);
+               $inactive_widgets = array();
+               foreach ($widgets as $index => $widget) {
+                       if (!array_key_exists($widget->handler, $widget_types)) {
+                               $inactive_widgets[] = $widget;
+                               unset($widgets[$index]);
+                       }
+               }
+
                if ($rank == 0) {
                        // top of the column
-                       $this->order = $widgets[0]->order - 10;
+                       $this->order = reset($widgets)->order - 10;
                } elseif ($rank == (count($widgets) - 1)) {
-                       // bottom of the column
+                       // bottom of the column of active widgets
                        $this->order = end($widgets)->order + 10;
                } else {
                        // reorder widgets
@@ -147,7 +157,7 @@ class ElggWidget extends ElggObject {
                                }
                        }
 
-                       // split the array in two and recombine with the moved array in middle
+                       // split the array in two and recombine with the moved widget in middle
                        $before = array_slice($widgets, 0, $rank);
                        array_push($before, $this);
                        $after = array_slice($widgets, $rank);
@@ -159,6 +169,22 @@ class ElggWidget extends ElggObject {
                                $order += 10;
                        }
                }
+
+               // put inactive widgets at the bottom
+               if ($inactive_widgets) {
+                       $bottom = 0;
+                       foreach ($widgets as $widget) {
+                               if ($widget->order > $bottom) {
+                                       $bottom = $widget->order;
+                               }
+                       }
+                       $bottom += 10;
+                       foreach ($inactive_widgets as $widget) {
+                               $widget->order = $bottom;
+                               $bottom += 10;
+                       }
+               }
+
                $this->column = $column;
        }