<?php
/**
- * Elgg widget save action
+ * Elgg save widget settings action
*
* @package Elgg.Core
* @subpackage Widgets.Management
*/
$guid = get_input('guid');
-$params = $_REQUEST['params'];
-$pageurl = get_input('pageurl');
-$noforward = get_input('noforward', false);
+$params = get_input('params');
-$result = false;
+$result = elgg_save_widget_settings($guid, $params);
-if (!empty($guid)) {
- $result = save_widget_info($guid, $params);
-}
-
-if ($noforward) {
- exit;
-}
-
-if ($result) {
- system_message(elgg_echo('widgets:save:success'));
-} else {
+if (!$result) {
register_error(elgg_echo('widgets:save:failure'));
}
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 widgets
*
* @param array $params An array of name => value parameters
*
* @return bool
+ * @deprecated 1.8
*/
function save_widget_info($widget_guid, $params) {
+ elgg_deprecated_notice("save_widget_info() is deprecated for elgg_save_widget_settings", 1.8);
if ($widget = get_entity($widget_guid)) {
$subtype = $widget->getSubtype();
* @param int $owner Owner guid
*
* @return void
+ * @deprecated 1.8
*/
function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, $context, $owner) {
+ elgg_deprecated_notice("reorder_widgets_from_panel() is deprecated", 1.8);
$return = true;
$mainwidgets = explode('::', $panelstring1);
* @return void
*/
function widgets_init() {
- register_action('widgets/reorder');
register_action('widgets/save');
register_action('widgets/add');
register_action('widgets/move');
event.preventDefault();\r
});\r
\r
- $('a.widget_delete').bind('click', elgg.ui.widgets.remove);\r
-\r
+ $('a.widget_delete_button').bind('click', elgg.ui.widgets.remove);\r
+ $('a.widget_edit_button').bind('click', elgg.ui.widgets.editToggle);\r
+ $('.widget_edit > form ').bind('submit', elgg.ui.widgets.saveSettings);\r
elgg.ui.widgets.equalHeight(".widget_column");\r
};\r
\r
// insert a widget into the layout\r
elgg.ui.widgets.insert = function(html) {\r
$('#widget_col_1').prepend(html);\r
- $('#widget_col_1').children(":first").find('a.widget_delete').bind('click', elgg.ui.widgets.remove);\r
+ $('#widget_col_1').children(":first").find('a.widget_delete_button').bind('click', elgg.ui.widgets.remove);\r
+ $('#widget_col_1').children(":first").find('a.widget_edit_button').bind('click', elgg.ui.widgets.editToggle);\r
}\r
\r
// remove a widget from the layout\r
$(this).parent().parent().parent().parent().remove();\r
elgg.action('widgets/delete', {\r
data: {\r
- // widget_delete_<guid>\r
- guid: $(this).attr('id').substring(14)\r
+ // widget_delete_button_<guid>\r
+ guid: $(this).attr('id').substring(21)\r
}\r
});\r
event.preventDefault();\r
}\r
\r
+elgg.ui.widgets.editToggle = function(event) {\r
+ $(this).parent().parent().parent().parent().find('.widget_edit').slideToggle('medium');\r
+ event.preventDefault();\r
+}\r
+\r
+elgg.ui.widgets.saveSettings = function(event) {\r
+ $(this).parent().slideToggle('medium');\r
+ elgg.action('widgets/save', {\r
+ data: $(this).serialize()\r
+ });\r
+ event.preventDefault();\r
+}\r
\r
elgg.ui.widgets.equalHeight = function(selector) {\r
var maxHeight = 0;\r
.widget_title li {
margin: 0 4px;
}
+.widget_edit {
+ display: none;
+ margin-bottom:2px;
+ padding: 8px;
+ background-color: white;
+}
.widget_content {
background-color: #ffffff;
padding: 10px;
$params = array(
'text' => 'delete',
- 'href' => '#', //elgg_get_site_url() . "action/widgets/delete?guid=$widget->guid",
+ 'href' => elgg_get_site_url() . "action/widgets/delete?guid=$widget->guid",
'is_action' => true,
- 'class' => 'widget_delete',
- 'internalid' => "widget_delete_$widget->guid"
+ 'class' => 'widget_delete_button',
+ 'internalid' => "widget_delete_button_$widget->guid"
);
$delete_link = elgg_view('output/url', $params);
$params = array(
'text' => 'edit',
- 'href' => elgg_get_site_url() . "#",
- 'is_action' => true,
+ 'href' => "#",
+ 'class' => 'widget_edit_button',
+ 'internalid' => "widget_edit_button_$widget->guid"
);
$edit_link = elgg_view('output/url', $params);
<?php
/**
- * Elgg edit widget layout
+ * Elgg widget edit settings
*
* @package Elgg
* @subpackage Core
*/
-$guid = $vars['entity']->getGUID();
+$widget = $vars['widget'];
-$form_body = $vars['body'];
-$form_body .= "<p><label>" . elgg_echo('access') . ": " . elgg_view('input/access', array('internalname' => 'params[access_id]','value' => $vars['entity']->access_id)) . "</label></p>";
-$form_body .= "<p>" . elgg_view('input/hidden', array('internalname' => 'guid', 'value' => $guid)) . elgg_view('input/hidden', array('internalname' => 'noforward', 'value' => 'true')) . elgg_view('input/submit', array('internalname' => "submit$guid", 'value' => elgg_echo('save'))) . "</p>";
+$edit_view = "widgets/$widget->handler/edit";
+$custom_form_section = elgg_view($edit_view, array('entity' => $widget));
-echo elgg_view('input/form', array('internalid' => "widgetform$guid", 'body' => $form_body, 'action' => "action/widgets/save"))
-?>
-<script type="text/javascript">
-$(document).ready(function() {
-
- $("#widgetform<?php echo $guid; ?>").submit(function () {
-
- $("#submit<?php echo $guid; ?>").attr("disabled","disabled");
- $("#submit<?php echo $guid; ?>").attr("value","<?php echo elgg_echo("saving"); ?>");
- $("#widgetcontent<?php echo $guid; ?>").html('<?php echo elgg_view('ajax/loader',array('slashes' => true)); ?>');
- $("#widget<?php echo $guid; ?> .toggle_box_edit_panel").click();
-
- var variables = $("#widgetform<?php echo $guid; ?>").serialize();
- $.post($("#widgetform<?php echo $guid; ?>").attr("action"),variables,function() {
- $("#submit<?php echo $guid; ?>").attr("disabled","");
- $("#submit<?php echo $guid; ?>").attr("value","<?php echo elgg_echo("save"); ?>");
- $("#widgetcontent<?php echo $guid; ?>").load("<?php echo elgg_get_site_url(); ?>pg/view/<?php echo $guid; ?>?shell=no&username=<?php echo elgg_get_page_owner()->username; ?>&context=<?php echo elgg_get_context(); ?>&callback=true");
- });
- return false;
+$access = elgg_view('input/access', array('internalname' => 'params[access_id]','value' => $widget->access_id));
+$hidden = elgg_view('input/hidden', array('internalname' => 'guid', 'value' => $widget->guid)) .
+$hidden .= elgg_view('input/hidden', array('internalname' => 'noforward', 'value' => 'true'));
+$submit = elgg_view('input/submit', array('internalname' => "submit$guid", 'value' => elgg_echo('save')));
- });
+$body = <<<___END
+ $custom_form_section
+ <p>
+ <label>Access:</label> $access
+ </p>
+ <p>
+ $hidden
+ $submit
+ </p>
+___END;
-});
-</script>
\ No newline at end of file
+?>
+<div class="widget_edit">
+<?php
+$params = array(
+ 'body' => $body,
+ 'action' => "action/widgets/save",
+ 'internalid' => "widgetform$guid"
+);
+echo elgg_view('input/form', $params);
+// _<?php echo $widget->guid;
+?>
+</div>
$title = "Widget Title";
$display_view = "widgets/$handler/view";
-$edit_view = "widgets/$handler/edit";
+
+$can_edit = $widget->canEdit();
?>
<div class="widget draggable" id="widget_<?php echo $widget->guid; ?>">
<div class="widget_title drag_handle">
<h3><?php echo $title; ?></h3>
<?php
- if ($widget->canEdit()) {
+ if ($can_edit) {
echo elgg_view('widgets/controls', array('widget' => $widget));
}
?>
</div>
+ <?php
+ if ($can_edit) {
+ echo elgg_view('widgets/editwrapper', array('widget' => $widget));
+ }
+ ?>
<div class="widget_content">
<?php echo elgg_view($display_view, $vars); ?>
<p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>