aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/plugins/settings/save.php54
-rw-r--r--actions/plugins/usersettings/save.php57
-rw-r--r--engine/lib/admin.php4
-rw-r--r--engine/lib/deprecated-1.8.php14
-rw-r--r--engine/lib/plugins.php22
-rw-r--r--views/default/admin/components/plugin_settings.php35
-rw-r--r--views/default/core/settings/tools.php6
-rw-r--r--views/default/core/settings/tools/plugin.php14
-rw-r--r--views/default/object/plugin.php27
9 files changed, 136 insertions, 97 deletions
diff --git a/actions/plugins/settings/save.php b/actions/plugins/settings/save.php
index 3fa45e0c1..d768d3604 100644
--- a/actions/plugins/settings/save.php
+++ b/actions/plugins/settings/save.php
@@ -1,34 +1,37 @@
<?php
/**
- * Elgg plugin settings save action.
+ * Saves global plugin settings.
*
- * @package Elgg
- * @subpackage Core
+ * This action can be overriden for a specific plugin by creating the
+ * settings/<plugin_id>/save action in that plugin.
+ *
+ * @uses array $_REQUEST['params'] A set of key/value pairs to save to the ElggPlugin entity
+ * @uses int $_REQUEST['plugin_id'] The ID of the plugin
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
*/
$params = get_input('params');
-$plugin = get_input('plugin');
-if (!$plugin_info = load_plugin_manifest($plugin)) {
- register_error(elgg_echo('plugins:settings:save:fail', array($plugin)));
+$plugin_id = get_input('plugin_id');
+$plugin = elgg_get_plugin_from_id($plugin_id);
+
+if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('plugins:settings:save:fail', array($plugin_id)));
forward(REFERER);
}
-$plugin_name = $plugin_info['name'];
+$plugin_name = $plugin->manifest->getName();
$result = false;
-$options = array(
- 'plugin' => $plugin,
- 'manifest' => $plugin_info,
- 'settings' => $params
-);
-
// allow a plugin to override the save action for their settings
-if (elgg_action_exist("settings/$plugin/save")) {
- action("settings/$plugin/save");
+if (elgg_action_exist("settings/$plugin_id/save")) {
+ action("settings/$plugin_id/save");
} else {
foreach ($params as $k => $v) {
- if (!$result = set_plugin_setting($k, $v, $plugin)) {
+ $result = $plugin->setSetting($k, $v);
+ if (!$result) {
register_error(elgg_echo('plugins:settings:save:fail', array($plugin_name)));
forward(REFERER);
exit;
@@ -37,21 +40,4 @@ if (elgg_action_exist("settings/$plugin/save")) {
}
system_message(elgg_echo('plugins:settings:save:ok', array($plugin_name)));
-forward(REFERER);
-//
-//$trigger = elgg_trigger_plugin_hook('plugin:save_settings', $plugin, $options, NULL);
-//if ($trigger === NULL) {
-// foreach ($params as $k => $v) {
-// if (!$result = set_plugin_setting($k, $v, $plugin)) {
-// register_error(elgg_echo('plugins:settings:save:fail', array($plugin_name)));
-// forward(REFERER);
-// exit;
-// }
-// }
-//} elseif ($trigger === FALSE) {
-// register_error(elgg_echo('plugins:settings:save:fail', array($plugin_name)));
-// forward(REFERER);
-//}
-//
-//system_message(elgg_echo('plugins:settings:save:ok', array($plugin_name)));
-//forward(REFERER); \ No newline at end of file
+forward(REFERER); \ No newline at end of file
diff --git a/actions/plugins/usersettings/save.php b/actions/plugins/usersettings/save.php
index a54df627a..794ce4046 100644
--- a/actions/plugins/usersettings/save.php
+++ b/actions/plugins/usersettings/save.php
@@ -1,27 +1,58 @@
<?php
/**
- * Elgg plugin user settings save action.
+ * Saves user-specific plugin settings.
*
- * @package Elgg
- * @subpackage Core
+ * This action can be overriden for a specific plugin by creating the
+ * settings/<plugin_id>/save action in that plugin.
+ *
+ * @uses array $_REQUEST['params'] A set of key/value pairs to save to the ElggPlugin entity
+ * @uses int $_REQUEST['plugin_id'] The id of the plugin
+ * @uses int $_REQUEST['user_guid'] The GUID of the user to save settings for.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
*/
$params = get_input('params');
-$plugin = get_input('plugin');
+$plugin_id = get_input('plugin_id');
+$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid());
+$plugin = elgg_get_plugin_from_id($plugin_id);
+$user = get_entity($user_guid);
+
+if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_id)));
+ forward(REFERER);
+}
+
+if (!($user instanceof ElggUser)) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_id)));
+ forward(REFERER);
+}
+
+$plugin_name = $plugin->manifest->getName();
+
+// make sure we're admin or the user
+if (!$user->canEdit()) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_name)));
+ forward(REFERER);
+}
$result = false;
-foreach ($params as $k => $v) {
- // Save
- $result = set_plugin_usersetting($k, $v, elgg_get_logged_in_user_guid(), $plugin);
+if (elgg_action_exist("usersettings/$plugin_id/save")) {
+ action("usersettings/$plugin_id/save");
+} else {
+ foreach ($params as $k => $v) {
+ // Save
+ $result = $plugin->setUserSetting($k, $v, $user->guid);
- // Error?
- if (!$result) {
- register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin)));
- forward(REFERER);
- exit;
+ // Error?
+ if (!$result) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_name)));
+ forward(REFERER);
+ }
}
}
-system_message(elgg_echo('plugins:usersettings:save:ok', array($plugin)));
+system_message(elgg_echo('plugins:usersettings:save:ok', array($plugin_name)));
forward(REFERER);
diff --git a/engine/lib/admin.php b/engine/lib/admin.php
index d076bbd3d..0ec02cded 100644
--- a/engine/lib/admin.php
+++ b/engine/lib/admin.php
@@ -202,8 +202,8 @@ function admin_settings_page_handler($page) {
&& elgg_view_exists("settings/{$page[1]}/edit")) {
$view = '/admin/components/plugin_settings';
- $vars['plugin'] = $page[1];
- $vars['entity'] = find_plugin_settings($page[1]);
+ $plugin = elgg_get_plugin_from_id($page[1]);
+ $vars['plugin'] = $plugin;
$title = elgg_echo("admin:plugin_settings:{$page[1]}");
$title = elgg_echo("admin:{$page[0]}");
} else {
diff --git a/engine/lib/deprecated-1.8.php b/engine/lib/deprecated-1.8.php
index 684e8f9b3..ee3265a12 100644
--- a/engine/lib/deprecated-1.8.php
+++ b/engine/lib/deprecated-1.8.php
@@ -2972,19 +2972,7 @@ function load_plugins() {
*/
function find_plugin_usersettings($plugin_id = null, $user_guid = 0) {
elgg_deprecated_notice('find_plugin_usersettings() is deprecated by elgg_get_all_plugin_user_settings()', 1.8);
-
- $settings = elgg_get_all_plugin_user_settings($user_guid, $plugin_id);
- $return = false;
-
- if ($settings) {
- $return = new stdClass;
-
- foreach ($settings as $k => $v) {
- $return->$k = $v;
- }
- }
-
- return $return;
+ return elgg_get_all_plugin_user_settings($user_guid, $plugin_id, true);
}
/**
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
index fc3dc8006..b33b8d0ac 100644
--- a/engine/lib/plugins.php
+++ b/engine/lib/plugins.php
@@ -772,13 +772,15 @@ function elgg_get_calling_plugin_entity() {
/**
* Returns an array of all plugin settings for a user.
*
- * @param mixed $user_guid The user GUID or null for the currently logged in user.
- * @param string $plugin_id The plugin ID
+ * @param mixed $user_guid The user GUID or null for the currently logged in user.
+ * @param string $plugin_id The plugin ID
+ * @param bool $return_obj Return settings as an object? This can be used to in reusable
+ * views where the settings are passed as $vars['entity'].
* @return array
*
* @since 1.8
*/
-function elgg_get_all_plugin_user_settings($user_guid = null, $plugin_id = null) {
+function elgg_get_all_plugin_user_settings($user_guid = null, $plugin_id = null, $return_obj = false) {
if ($plugin_id) {
$plugin = elgg_get_plugin_from_id($plugin_id);
} else {
@@ -789,7 +791,19 @@ function elgg_get_all_plugin_user_settings($user_guid = null, $plugin_id = null)
return false;
}
- return $plugin->getAllUserSettings($user_guid);
+ $settings = $plugin->getAllUserSettings($user_guid);
+
+ if ($settings && $return_obj) {
+ $return = new stdClass;
+
+ foreach ($settings as $k => $v) {
+ $return->$k = $v;
+ }
+
+ return $return;
+ } else {
+ return $settings;
+ }
}
/**
diff --git a/views/default/admin/components/plugin_settings.php b/views/default/admin/components/plugin_settings.php
index d5e25b4c1..8179728ed 100644
--- a/views/default/admin/components/plugin_settings.php
+++ b/views/default/admin/components/plugin_settings.php
@@ -2,30 +2,33 @@
/**
* Elgg plugin settings
*
- * @package Elgg
- * @subpackage Core
+ * @uses ElggPlugin $vars['plugin'] The plugin object to display settings for.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
*/
$plugin = $vars['plugin'];
-$plugin_info = load_plugin_manifest($plugin);
-
-$form_body = elgg_view("settings/{$plugin}/edit", $vars);
-$form_body .= elgg_view('input/hidden', array('internalname' => 'plugin', 'value' => $plugin));
-$form_body .= elgg_view('input/submit', array('value' => elgg_echo('save')));
-//$form_body .= elgg_view('input/reset', array('value' => elgg_echo('reset')));
+$plugin_id = $plugin->getID();
+if (elgg_view("settings/$plugin_id/edit")) {
?>
-<div class="elgg-module elgg-module-inline">
+
+<div class="elgg-module elgg-module-info">
<div class="elgg-head">
- <h3><?php echo $plugin_info['name']; ?></h3>
+ <h3><?php echo $plugin->manifest->getName(); ?></h3>
</div>
<div class="elgg-body">
- <?php
- echo elgg_view('input/form', array(
- 'body' => $form_body,
- 'internalid' => 'plugin_settings',
- 'action' => "action/plugins/settings/save",
+ <div id="<?php echo $plugin_id; ?>_settings">
+ <?php echo elgg_view("object/plugin", array(
+ 'plugin' => $plugin,
+ // in for backward compatibility
+ 'entity' => $plugin,
+ 'type' => 'admin'
));
- ?>
+ ?>
+ </div>
</div>
</div>
+<?php
+} \ No newline at end of file
diff --git a/views/default/core/settings/tools.php b/views/default/core/settings/tools.php
index e280e0d8e..73af8d738 100644
--- a/views/default/core/settings/tools.php
+++ b/views/default/core/settings/tools.php
@@ -2,8 +2,10 @@
/**
* Elgg plugin specific user settings.
*
- * @package Elgg
- * @subpackage Core
+ * @uses array $vars['installed_plugins'] An array of plugins as returned by elgg_get_plugins()
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
*/
// Description of what's going on
diff --git a/views/default/core/settings/tools/plugin.php b/views/default/core/settings/tools/plugin.php
index ab25e7fb8..89e08bb64 100644
--- a/views/default/core/settings/tools/plugin.php
+++ b/views/default/core/settings/tools/plugin.php
@@ -2,30 +2,34 @@
/**
* This displays a plugin's user settings.
*
- * @package Elgg.Plugin
- * @subpackage Settings
+ * @uses ElggPlugin $vars['plugin'] The plugin to show settings for.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
*/
$plugin = $vars['plugin'];
$plugin_id = $plugin->getID();
-$user_guid = $details['user_guid'];
+$user_guid = $vars['user_guid'];
+
if (!$user_guid) {
$user_guid = elgg_get_logged_in_user_guid();
}
if (elgg_view("usersettings/$plugin_id/edit")) {
?>
+
<div class="elgg-module elgg-module-info">
<div class="elgg-head">
<h3><?php echo $plugin->manifest->getName(); ?></h3>
</div>
<div class="elgg-body">
- <div id="<?php echo $plugin; ?>_settings">
+ <div id="<?php echo $plugin_id; ?>_settings">
<?php echo elgg_view("object/plugin", array(
'plugin' => $plugin,
'entity' => find_plugin_usersettings($plugin_id, $user_guid),
- 'prefix' => 'user'
+ 'type' => 'user'
));
?>
</div>
diff --git a/views/default/object/plugin.php b/views/default/object/plugin.php
index 054931a38..b3bb6eb93 100644
--- a/views/default/object/plugin.php
+++ b/views/default/object/plugin.php
@@ -1,21 +1,32 @@
<?php
/**
- * Elgg plugin
+ * Used to show plugin user settings.
*
- * @package Elgg
- * @subpackage Core
+ * @package Elgg.Core
+ * @subpackage Plugins
*/
-$entity = $vars['entity'];
$plugin = $vars['plugin'];
$plugin_id = $plugin->getID();
-$prefix = $vars['prefix']; // Do we want to show admin settings (default) or user settings
+$user_guid = elgg_get_array_value('user_guid', $vars, elgg_get_logged_in_user_guid());
-$form_body = elgg_view("{$prefix}settings/{$plugin_id}/edit", $vars)
- . "<p>" . elgg_view('input/hidden', array('internalname' => 'plugin', 'value' => $plugin_id))
+// Do we want to show admin settings or user settings
+$type = elgg_get_array_value('type', $vars, '');
+
+if ($type == 'user') {
+ $view = "{$type}settings/{$plugin_id}/edit";
+ $action = "action/plugins/usersettings/save";
+} else {
+ $view = "settings/{$plugin_id}/edit";
+ $action = "action/plugins/settings/save";
+}
+
+$form_body = elgg_view($view, $vars)
+ . "<p>" . elgg_view('input/hidden', array('internalname' => 'plugin_id', 'value' => $plugin_id))
+ . elgg_view('input/hidden', array('internalname' => 'user_guid', 'value' => $user_guid))
. elgg_view('input/submit', array('value' => elgg_echo('save'))) . "</p>";
?>
<div>
- <?php echo elgg_view('input/form', array('body' => $form_body, 'action' => "action/plugins/{$prefix}settings/save")); ?>
+ <?php echo elgg_view('input/form', array('body' => $form_body, 'action' => $action)); ?>
</div> \ No newline at end of file