diff options
-rw-r--r-- | actions/widgets/save.php | 20 | ||||
-rw-r--r-- | engine/lib/widgets.php | 44 | ||||
-rw-r--r-- | js/lib/ui.widgets.js | 24 | ||||
-rw-r--r-- | views/default/css.php | 6 | ||||
-rw-r--r-- | views/default/widgets/controls.php | 11 | ||||
-rw-r--r-- | views/default/widgets/editwrapper.php | 57 | ||||
-rw-r--r-- | views/default/widgets/wrapper.php | 10 |
7 files changed, 116 insertions, 56 deletions
diff --git a/actions/widgets/save.php b/actions/widgets/save.php index 945634d97..4af60c7de 100644 --- a/actions/widgets/save.php +++ b/actions/widgets/save.php @@ -1,29 +1,17 @@ <?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')); } diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php index 92d022913..1396a9d8f 100644 --- a/engine/lib/widgets.php +++ b/engine/lib/widgets.php @@ -86,6 +86,45 @@ function elgg_create_widget($owner_guid, $handler, $access_id = null) { } /** + * 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 int $user_guid The GUID of the user or 0 for logged in user @@ -371,8 +410,10 @@ function get_widget_types() { * @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(); @@ -428,8 +469,10 @@ function save_widget_info($widget_guid, $params) { * @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); @@ -597,7 +640,6 @@ function widget_run_once() { * @return void */ function widgets_init() { - register_action('widgets/reorder'); register_action('widgets/save'); register_action('widgets/add'); register_action('widgets/move'); diff --git a/js/lib/ui.widgets.js b/js/lib/ui.widgets.js index 59cafd7ad..f20ac19c2 100644 --- a/js/lib/ui.widgets.js +++ b/js/lib/ui.widgets.js @@ -39,15 +39,17 @@ elgg.ui.widgets.init = function() { event.preventDefault();
});
- $('a.widget_delete').bind('click', elgg.ui.widgets.remove);
-
+ $('a.widget_delete_button').bind('click', elgg.ui.widgets.remove);
+ $('a.widget_edit_button').bind('click', elgg.ui.widgets.editToggle);
+ $('.widget_edit > form ').bind('submit', elgg.ui.widgets.saveSettings);
elgg.ui.widgets.equalHeight(".widget_column");
};
// insert a widget into the layout
elgg.ui.widgets.insert = function(html) {
$('#widget_col_1').prepend(html);
- $('#widget_col_1').children(":first").find('a.widget_delete').bind('click', elgg.ui.widgets.remove);
+ $('#widget_col_1').children(":first").find('a.widget_delete_button').bind('click', elgg.ui.widgets.remove);
+ $('#widget_col_1').children(":first").find('a.widget_edit_button').bind('click', elgg.ui.widgets.editToggle);
}
// remove a widget from the layout
@@ -55,13 +57,25 @@ elgg.ui.widgets.remove = function(event) { $(this).parent().parent().parent().parent().remove();
elgg.action('widgets/delete', {
data: {
- // widget_delete_<guid>
- guid: $(this).attr('id').substring(14)
+ // widget_delete_button_<guid>
+ guid: $(this).attr('id').substring(21)
}
});
event.preventDefault();
}
+elgg.ui.widgets.editToggle = function(event) {
+ $(this).parent().parent().parent().parent().find('.widget_edit').slideToggle('medium');
+ event.preventDefault();
+}
+
+elgg.ui.widgets.saveSettings = function(event) {
+ $(this).parent().slideToggle('medium');
+ elgg.action('widgets/save', {
+ data: $(this).serialize()
+ });
+ event.preventDefault();
+}
elgg.ui.widgets.equalHeight = function(selector) {
var maxHeight = 0;
diff --git a/views/default/css.php b/views/default/css.php index c78e7ebd2..29930d445 100644 --- a/views/default/css.php +++ b/views/default/css.php @@ -923,6 +923,12 @@ li.navigation_more ul li { .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; diff --git a/views/default/widgets/controls.php b/views/default/widgets/controls.php index 881057969..891a53595 100644 --- a/views/default/widgets/controls.php +++ b/views/default/widgets/controls.php @@ -10,17 +10,18 @@ $widget = $vars['widget']; $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); diff --git a/views/default/widgets/editwrapper.php b/views/default/widgets/editwrapper.php index 0ac1de6d0..cf985445b 100644 --- a/views/default/widgets/editwrapper.php +++ b/views/default/widgets/editwrapper.php @@ -1,38 +1,41 @@ <?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> diff --git a/views/default/widgets/wrapper.php b/views/default/widgets/wrapper.php index 55cdd18b6..52ca87cab 100644 --- a/views/default/widgets/wrapper.php +++ b/views/default/widgets/wrapper.php @@ -24,18 +24,24 @@ if ($vars['entity'] instanceof ElggObject && $vars['entity']->getSubtype() == 'w $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> |