MDL-44342 airnotifier: rest.php should return success information
authorJuan Leyva <juanleyvadelgado@gmail.com>
Mon, 24 Mar 2014 14:44:35 +0000 (15:44 +0100)
committerJuan Leyva <juanleyvadelgado@gmail.com>
Mon, 7 Apr 2014 10:13:35 +0000 (12:13 +0200)
Javascript should handle properly errors, also, the eye and spinner
should be synchronized with the remote operation

message/output/airnotifier/externallib.php
message/output/airnotifier/rest.php
message/output/airnotifier/yui/toolboxes/toolboxes.js

index 3be2313..cc95b89 100755 (executable)
@@ -165,7 +165,8 @@ class message_airnotifier_external extends external_api {
                     new external_single_structure(
                         array (
                             'userid'     => new external_value(PARAM_INT, 'userid id'),
-                            'configured' => new external_value(PARAM_INT, '1 is the user preferences have been configured and 0 if not')
+                            'configured' => new external_value(PARAM_INT,
+                                '1 if the user preferences have been configured and 0 if not')
                         )
                     ),
                     'list of preferences by user'),
index 9a981f8..87e25ec 100755 (executable)
@@ -43,8 +43,17 @@ require_capability('message/airnotifier:managedevice', $usercontext);
 
 echo $OUTPUT->header();
 
+// Response class to be converted to json string.
+$response = new stdClass();
+
 $device = $DB->get_record('message_airnotifier_devices', array('id' => $id), '*', MUST_EXIST);
 
+// Check that the device belongs to the current user.
+$userdevice = $DB->get_record('user_devices', array('id' => $device->userdeviceid, 'userid' => $USER->id), '*', MUST_EXIST);
+
 $device->enable = required_param('enable', PARAM_BOOL);
 $DB->update_record('message_airnotifier_devices', $device);
+$response->success = true;
 
+echo json_encode($response);
+die;
\ No newline at end of file
index a3650da..aded3e7 100755 (executable)
@@ -7,7 +7,6 @@ YUI.add('moodle-message_airnotifier-toolboxes', function(Y) {
     var CSS = {
         AIRNOTIFIERCONTENT : 'fieldset#messageprocessor_airnotifier',
         HIDEDEVICE : 'a.hidedevice',
-        DELETEDEVICE : 'a.deletedevice',
         DEVICELI : 'li.airnotifierdevice',
         DIMCLASS : 'dimmed',
         DIMMEDTEXT : 'dimmed_text',
@@ -56,17 +55,13 @@ YUI.add('moodle-message_airnotifier-toolboxes', function(Y) {
             var element = button.ancestor(CSS.DEVICELI);
             var hideicon = button.one('img');
 
-            var dimarea;
             var toggle_class = CSS.DIMMEDTEXT;
 
             var status = '';
-            var value;
             if (element.hasClass(toggle_class)) {
                 status = 'hide';
-                value = 1;
             } else {
                 status = 'show';
-                value = 0;
             }
 
             // Change the UI.
@@ -80,18 +75,16 @@ YUI.add('moodle-message_airnotifier-toolboxes', function(Y) {
             });
             button.set('title', newstring);
             button.set('className', 'editing_' + status);
-
-            return value;
         },
         /**
          * Send a request using the REST API
          *
          * @param data The data to submit
          * @param statusspinner (optional) A statusspinner which may contain a section loader
-         * @param optionalconfig (optional) Any additional configuration to submit
+         * @param callbacksuccess Call back on success
          * @return response responseText field from responce
          */
-        send_request : function(data, statusspinner, optionalconfig) {
+        send_request : function(data, statusspinner, callbacksuccess) {
             // Default data structure
             if (!data) {
                 data = {};
@@ -102,6 +95,10 @@ YUI.add('moodle-message_airnotifier-toolboxes', function(Y) {
                 data[varname] = pageparams[varname];
             }
 
+            if (statusspinner) {
+                statusspinner.show();
+            }
+
             data.sesskey = M.cfg.sesskey;
 
             var uri = M.cfg.wwwroot + this.get('ajaxurl');
@@ -116,35 +113,28 @@ YUI.add('moodle-message_airnotifier-toolboxes', function(Y) {
                         try {
                             responsetext = Y.JSON.parse(response.responseText);
                             if (responsetext.error) {
-                                new M.core.ajaxException(responsetext);
+                                Y.use('moodle-core-notification-ajaxexception', function() {
+                                    return new M.core.ajaxException(responsetext).show();
+                                });
+                            } else if (responsetext.success) {
+                                callbacksuccess();
                             }
                         } catch (e) {}
                         if (statusspinner) {
-                            window.setTimeout(function(e) {
-                                statusspinner.hide();
-                            }, 400);
+                            statusspinner.hide();
                         }
                     },
                     failure : function(tid, response) {
                         if (statusspinner) {
                             statusspinner.hide();
                         }
-                        new M.core.ajaxException(response);
+                        Y.use('moodle-core-notification-ajaxexception', function() {
+                            return new M.core.ajaxException(response).show();
+                        });
                     }
                 },
                 context: this,
-                sync: true
-            }
-
-            // Apply optional config.
-            if (optionalconfig) {
-                for (varname in optionalconfig) {
-                    config[varname] = optionalconfig[varname];
-                }
-            }
-
-            if (statusspinner) {
-                statusspinner.show();
+                sync: false
             }
 
             // Send the request.
@@ -203,39 +193,10 @@ YUI.add('moodle-message_airnotifier-toolboxes', function(Y) {
             Y.all(baseselector).each(this._setup_for_device, this);
         },
         _setup_for_device : function(toolboxtarget) {
-            // Delete.
-            this.replace_button(toolboxtarget, CSS.DELETEDEVICE, this.delete_device);
 
             // Show/Hide.
             var showhide = this.replace_button(toolboxtarget, CSS.HIDEDEVICE, this.toggle_hide_device);
         },
-        delete_device : function(e) {
-            // Prevent the default button action.
-            e.preventDefault();
-
-            // Get the element we're working on.
-            var element   = e.target.ancestor(CSS.DEVICELI);
-
-            var confirmstring = '';
-            var plugindata = {
-                name : element.one('*').getHTML() // Get the label.
-            }
-            confirmstring = M.util.get_string('deletecheckdevicename', 'message_airnotifier', plugindata);
-
-            // Confirm element removal.
-            if (!confirm(confirmstring)) {
-                return false;
-            }
-
-            // Actually remove the element.
-            element.remove();
-            var data = {
-                'class' : 'device',
-                'action' : 'DELETE',
-                'id'    : this.get_element_id(element)
-            };
-            this.send_request(data);
-        },
         toggle_hide_device : function(e) {
             // Prevent the default button action.
             e.preventDefault();
@@ -245,7 +206,13 @@ YUI.add('moodle-message_airnotifier-toolboxes', function(Y) {
 
             var button = e.target.ancestor('a', true);
 
-            var value = this.toggle_hide_device_ui(button);
+            var value;
+            // Enable the device in case the CSS is dimmed.
+            if (element.hasClass(CSS.DIMMEDTEXT)) {
+                value = 1;
+            } else {
+                value = 0;
+            }
 
             // Send the request.
             var data = {
@@ -254,7 +221,12 @@ YUI.add('moodle-message_airnotifier-toolboxes', function(Y) {
                 'id'    : this.get_element_id(element)
             };
             var spinner = M.util.add_spinner(Y, element);
-            this.send_request(data, spinner);
+
+            var context = this;
+            var callback = function() {
+                context.toggle_hide_device_ui(button);
+            };
+            this.send_request(data, spinner, callback);
         }
     }, {
         NAME : 'message-device-toolbox',