summary refs log tree commit diff
path: root/webclient
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--webclient/components/matrix/matrix-service.js29
-rw-r--r--webclient/room/room-controller.js10
2 files changed, 36 insertions, 3 deletions
diff --git a/webclient/components/matrix/matrix-service.js b/webclient/components/matrix/matrix-service.js
index bedabe6286..eadbb03d9e 100644
--- a/webclient/components/matrix/matrix-service.js
+++ b/webclient/components/matrix/matrix-service.js
@@ -522,7 +522,6 @@ angular.module('matrixService', [])
             return powerLevel;
         },
             
-        // 
         /**
          * Change the power level of a user
          * @param {String} room_id the room id
@@ -554,7 +553,33 @@ angular.module('matrixService', [])
             
             // The room does not exist or does not contain power_levels data
             var deferred = $q.defer();
-            deferred.reject({data:{error: "Invalied room: " + room_id}});
+            deferred.reject({data:{error: "Invalid room: " + room_id}});
+            return deferred.promise;
+        },
+            
+        /**
+         * reset the power level of a user so that he will use the room default power level
+         * @param {String} room_id the room id
+         * @param {String} user_id the user id
+         * @returns {promise} an $http promise
+         */
+        resetUserPowerLevel: function(room_id, user_id) {
+            // Hack: currently, there is no home server API so do it by hand by updating
+            // the current m.room.power_levels of the room and send it to the server
+            var room = $rootScope.events.rooms[room_id];
+            if (room && room["m.room.power_levels"]) {
+                var content = angular.copy(room["m.room.power_levels"].content);
+                delete content[user_id];
+                
+                var path = "/rooms/$room_id/state/m.room.power_levels";
+                path = path.replace("$room_id", encodeURIComponent(room_id));
+                
+                return doRequest("PUT", path, undefined, content);
+            }
+            
+            // The room does not exist or does not contain power_levels data
+            var deferred = $q.defer();
+            deferred.reject({data:{error: "Invalid room: " + room_id}});
             return deferred.promise;
         }
 
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index d96241b863..ab8b35961c 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -299,13 +299,21 @@ angular.module('RoomController', ['ngSanitize', 'mFileInput'])
                     break;
                     
                 case "/op":
+                    // Define the power level of an user
                     if (3 === args.length) {
                         var user_id = args[1];
                         var powerLevel = parseInt(args[2]);
-
                         promise = matrixService.setUserPowerLevel($scope.room_id, user_id, powerLevel);
                     }
                     break;
+                    
+                case "/deop":
+                    // Reset the power level of an user
+                    if (2 === args.length) {
+                        var user_id = args[1];
+                        promise = matrixService.resetUserPowerLevel($scope.room_id, user_id);
+                    }
+                    break;
             }
         }
         else {