From: cash Date: Fri, 19 Nov 2010 20:43:48 +0000 (+0000) Subject: saving widget settings X-Git-Url: https://gitweb.fluxo.info/?a=commitdiff_plain;h=3b46665b3f4ee10e9d2778033ea7180cca7571eb;p=lorea%2Felgg.git saving widget settings git-svn-id: http://code.elgg.org/elgg/trunk@7350 36083f99-b078-4883-b0ff-0f9b5a30f544 --- 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 @@ 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 * @@ -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: $(this).attr('id').substring(14) + // widget_delete_button_ + 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 @@ getGUID(); +$widget = $vars['widget']; -$form_body = $vars['body']; -$form_body .= "

"; -$form_body .= "

" . 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'))) . "

"; +$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")) -?> - \ No newline at end of file +?> +
+ $body, + 'action' => "action/widgets/save", + 'internalid' => "widgetform$guid" +); +echo elgg_view('input/form', $params); +// _guid; +?> +
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(); ?>

canEdit()) { + if ($can_edit) { echo elgg_view('widgets/controls', array('widget' => $widget)); } ?>
+ $widget)); + } + ?>

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.