diff options
-rw-r--r-- | actions/widgets/add.php | 5 | ||||
-rw-r--r-- | actions/widgets/save.php | 11 | ||||
-rw-r--r-- | engine/classes/ElggWidget.php | 45 | ||||
-rw-r--r-- | engine/lib/widgets.php | 43 |
4 files changed, 54 insertions, 50 deletions
diff --git a/actions/widgets/add.php b/actions/widgets/add.php index 6c2859c21..cdb26ef07 100644 --- a/actions/widgets/add.php +++ b/actions/widgets/add.php @@ -14,10 +14,11 @@ $column = get_input('column', 1); if (!empty($user_guid)) { $user = get_entity($user_guid); if ($user && $user->canEdit()) { - $guid = elgg_create_widget($user->getGUID(), $handler); + $guid = elgg_create_widget($user->getGUID(), $handler, $context); if ($guid) { $widget = get_entity($guid); - $widget->setContext($context); + + // position the widget $widget->move($column, 0); // send widget html for insertion diff --git a/actions/widgets/save.php b/actions/widgets/save.php index 13ea90e85..8854d7810 100644 --- a/actions/widgets/save.php +++ b/actions/widgets/save.php @@ -9,15 +9,12 @@ $guid = get_input('guid'); $params = get_input('params'); -$result = elgg_save_widget_settings($guid, $params); - -if (!$result) { - register_error(elgg_echo('widgets:save:failure')); -} else { - // send back the widget contents - $widget = get_entity($guid); +$widget = get_entity($guid); +if ($widget && $widget->saveSettings($params)) { $view = "widgets/$widget->handler/view"; echo elgg_view($view, array('entity' => $widget)); +} else { + register_error(elgg_echo('widgets:save:failure')); } forward(REFERER);
\ No newline at end of file diff --git a/engine/classes/ElggWidget.php b/engine/classes/ElggWidget.php index e1c975777..1622aa5b3 100644 --- a/engine/classes/ElggWidget.php +++ b/engine/classes/ElggWidget.php @@ -144,4 +144,49 @@ class ElggWidget extends ElggObject { } $this->column = $column; } + + /** + * Saves the widget's settings + * + * Plugins can override the save mechanism using the plugin hook: + * 'widget_settings', <widget handler identifier>. The widget and + * the parameters are passed. The plugin hook handler should return + * true to indicate that it has successfully saved the settings. + * + * @warning The values in the parameter array cannot be arrays + * + * @param array $params An array of name => value parameters + * + * @return bool + * @since 1.8.0 + */ + public function saveSettings($params) { + if (!$this->canEdit()) { + return false; + } + + // plugin hook handlers should return true to indicate the settings have + // been saved so that default code does not run + $hook_params = array( + 'widget' => $this, + 'params' => $params + ); + if (elgg_trigger_plugin_hook('widget_settings', $this->handler, $hook_params, false) == true) { + return true; + } + + if (is_array($params) && count($params) > 0) { + foreach ($params as $name => $value) { + if (is_array($value)) { + // private settings cannot handle arrays + return false; + } else { + $this->$name = $value; + } + } + $this->save(); + } + + return true; + } }
\ No newline at end of file diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php index f5b473fd9..4a879e1ee 100644 --- a/engine/lib/widgets.php +++ b/engine/lib/widgets.php @@ -58,7 +58,7 @@ function elgg_get_widgets($user_guid, $context) { * @return int|false Widget GUID or false on failure * @since 1.8 */ -function elgg_create_widget($owner_guid, $handler, $access_id = null) { +function elgg_create_widget($owner_guid, $handler, $context, $access_id = null) { if (empty($owner_guid) || empty($handler) || !elgg_is_widget_type($handler)) { return false; } @@ -83,51 +83,12 @@ function elgg_create_widget($owner_guid, $handler, $access_id = null) { // private settings cannot be set until ElggWidget saved $widget->handler = $handler; + $widget->context = $context; return $widget->getGUID(); } /** - * Saves a widget's settings - * - * Plugins can override this save function by defining a function of the name - * "elgg_save_{$widget->handler}_widget_settings" that takes the widget object - * and the parameter array as arguments - * - * @param int $guid The GUID of the widget - * @param array $params An array of name => value parameters - * - * @return bool - * @since 1.8.0 - */ -function elgg_save_widget_settings($guid, $params) { - $widget = get_entity($guid); - if (!$widget || !$widget->canEdit()) { - return false; - } - - // check if a plugin is overriding the save function - $function = "elgg_save_{$widget->handler}_widget_settings"; - if (is_callable($function)) { - return $function($widget, $params); - } - - if (is_array($params) && count($params) > 0) { - foreach ($params as $name => $value) { - if (is_array($value)) { - // private settings cannot handle arrays - return false; - } else { - $widget->$name = $value; - } - } - $widget->save(); - } - - return true; -} - -/** * Can the user edit the widget layout * * Triggers a 'permissions_check', 'widget_layout' plugin hook |