diff options
author | Arthur Schiwon <blizzz@owncloud.com> | 2014-02-26 18:04:55 +0100 |
---|---|---|
committer | Arthur Schiwon <blizzz@owncloud.com> | 2014-06-02 12:53:54 +0200 |
commit | b3d68fc17558fd5828b292c4474f8a538d1148a9 (patch) | |
tree | 2600e185750345597e1a469e3bf36d0f6c9d7515 /settings/js/users/deleteHandler.js | |
parent | b6b133237ae4624b81a2a4c86cd237a0ce70afd8 (diff) | |
download | nextcloud-server-b3d68fc17558fd5828b292c4474f8a538d1148a9.tar.gz nextcloud-server-b3d68fc17558fd5828b292c4474f8a538d1148a9.zip |
refactor delete handling and apply it to users and groups
Diffstat (limited to 'settings/js/users/deleteHandler.js')
-rw-r--r-- | settings/js/users/deleteHandler.js | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/settings/js/users/deleteHandler.js b/settings/js/users/deleteHandler.js new file mode 100644 index 00000000000..83d1cafc30d --- /dev/null +++ b/settings/js/users/deleteHandler.js @@ -0,0 +1,153 @@ +/** + * Copyright (c) 2014, Arthur Schiwon <blizzz@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + */ + + +/** + * @brief takes care of deleting things represented by an ID + * @param String endpoint: the corresponding ajax PHP script. Currently limited + * to settings - ajax path. + * @param String paramID: the by the script expected parameter name holding the + * ID of the object to delete + * @param Function markCallback: the function to be called after successfully + * marking the object for deletion. + * @param Function removeCallback: the function to be called after successful + * delete. The id of the object will be passed as argument. Insuccessful + * operations will display an error using OC.dialogs, no callback is fired. + */ +function DeleteHandler(endpoint, paramID, markCallback, removeCallback) { + this.oidToDelete = false; + this.canceled = false; + + this.ajaxEndpoint = endpoint; + this.ajaxParamID = paramID; + + this.markCallback = markCallback; + this.removeCallback = removeCallback; + this.undoCallback = false; + + this.notifier = false; + this.notificationDataID = false; + this.notificationMessage = false; + this.notificationPlaceholder = '%oid'; +} + +/** + * @brief enabled the notification system. Required for undo UI. + * @param Object notifier: Usually OC.Notification + * @param String dataID: an identifier for the notificatior, e.g. 'deleteuser' + * @param String message: the message that should be shown upon delete. %oid + * will be replaced with the affected id of the item to be deleted + * @param Function undoCb: called after "undo" was clicked so consument can + * update the web interface + */ +DeleteHandler.prototype.setNotification = function(notifier, dataID, message, undoCb) { + this.notifier = notifier; + this.notificationDataID = dataID; + this.notificationMessage = message; + this.undoCallback = undoCb; + + dh = this; + + $('#notification').on('click', '.undo', function () { + if ($('#notification').data(dh.notificationDataID)) { + oid = dh.oidToDelete; + UserDeleteHandler.cancel(); + if(typeof dh.undoCallback !== 'undefined') { + dh.undoCallback(oid); + } + } + dh.notifier.hide(); + }); +} + +/** + * @brief shows the Undo Notification (if configured) + */ +DeleteHandler.prototype.showNotification = function() { + if(this.notifier !== false) { + if(!this.notifier.isHidden()) { + this.hideNotification(); + } + $('#notification').data(this.notificationDataID, true); + msg = this.notificationMessage.replace(this.notificationPlaceholder, + this.oidToDelete); + console.log('NOTISHOW ' + msg); + this.notifier.showHtml(msg); + } +} + +/** + * @brief hides the Undo Notification + */ +DeleteHandler.prototype.hideNotification = function() { + if(this.notifier !== false) { + $('#notification').removeData(this.notificationDataID); + this.notifier.hide(); + } +} + +/** + * @brief initilizes the delete operation for a given object id + * @param String oid: the object id + */ +DeleteHandler.prototype.mark = function(oid) { + if(this.oidToDelete !== false) { + this.delete(); + } + this.oidToDelete = oid; + this.canceled = false; + this.markCallback(oid); + this.showNotification(); +} + +/** + * @brief cancels a delete operation + */ +DeleteHandler.prototype.cancel = function(oid) { + this.canceled = true; + this.oidToDelete = false; +} + +/** + * @brief executes a delete operation. Requires that the operation has been + * initilized by mark(). On error, it will show a message via + * OC.dialogs.alert. On success, a callback is fired so that the client can + * update the web interface accordingly. + */ +DeleteHandler.prototype.delete = function() { + if(this.canceled || this.oidToDelete === false) { + return false; + } + + dh = this; + console.log($('#notification').data(this.notificationDataID)); + if($('#notification').data(this.notificationDataID) === true) { + dh.hideNotification(); + console.log('HIDDEN NOTI'); + } + + payload = {}; + payload[dh['ajaxParamID']] = dh.oidToDelete; + $.ajax({ + type: 'POST', + url: OC.filePath('settings', 'ajax', dh.ajaxEndpoint), + async: false, + data: payload, + success: function (result) { + if (result.status === 'success') { + // Remove undo option, & remove user from table + + //TODO: following line + dh.removeCallback(dh.oidToDelete); + dh.canceled = true; + console.log(dh.ajaxEndpoint); + } else { + OC.dialogs.alert(result.data.message, t('settings', 'Unable to delete ' + escapeHTML(dh.oidToDelete))); + dh.undoCallback(dh.oidToDelete); + } + } + }); +}
\ No newline at end of file |