]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
saving widget settings
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Fri, 19 Nov 2010 20:43:48 +0000 (20:43 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Fri, 19 Nov 2010 20:43:48 +0000 (20:43 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@7350 36083f99-b078-4883-b0ff-0f9b5a30f544

actions/widgets/save.php
engine/lib/widgets.php
js/lib/ui.widgets.js
views/default/css.php
views/default/widgets/controls.php
views/default/widgets/editwrapper.php
views/default/widgets/wrapper.php

index 945634d97002ccfdcf7c9be520d26923187744bc..4af60c7debc38ca569b719bc4307b4582a0e033e 100644 (file)
@@ -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'));
 }
 
index 92d022913d14abc48dbca7d5e27bbf7ac2f5874d..1396a9d8fd68125f4e6630e819902cdda324037d 100644 (file)
@@ -85,6 +85,45 @@ function elgg_create_widget($owner_guid, $handler, $access_id = null) {
        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
  *
@@ -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');
index 59cafd7ad25d32918048edcc72d98c9a4ba5a084..f20ac19c282bf1016137379cf003e640dcca4985 100644 (file)
@@ -39,15 +39,17 @@ elgg.ui.widgets.init = function() {
                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
@@ -55,13 +57,25 @@ elgg.ui.widgets.remove = function(event) {
        $(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
index c78e7ebd22e9d77de1d57db6461e6c96aefd270e..29930d4459204b94cbc32ef1da73bcf0963a7dc9 100644 (file)
@@ -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;
index 881057969eaf43fdd0ed31144a12e721484c93d9..891a53595f3ea0cbcaac9216620eb53d67c61ae3 100644 (file)
@@ -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);
 
index 0ac1de6d07fe9d3061cfb0216c2b5367672ff822..cf985445bd2e7310c21cfdf076c0194437b31f05 100644 (file)
@@ -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>
index 55cdd18b66890af2663c4031801b8f18d349456a..52ca87cabf126fbd3fafa600cff3e09d86685d3d 100644 (file)
@@ -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>