diff options
Diffstat (limited to 'settings/js/users/deleteHandler.js')
-rw-r--r-- | settings/js/users/deleteHandler.js | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/settings/js/users/deleteHandler.js b/settings/js/users/deleteHandler.js new file mode 100644 index 00000000000..894744ba3e9 --- /dev/null +++ b/settings/js/users/deleteHandler.js @@ -0,0 +1,171 @@ +/** + * 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. + */ + +/** + * takes care of deleting things represented by an ID + * + * @class + * @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 {markCallback} markCallback function to be called after successfully + * marking the object for deletion. + * @param {removeCallback} removeCallback the function to be called after + * successful delete. + */ +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'; +} + +/** + * The function to be called after successfully marking the object for deletion + * @callback markCallback + * @param {string} oid the ID of the specific user or group + */ + +/** + * The function to be called after successful delete. The id of the object will + * be passed as argument. Unsuccessful operations will display an error using + * OC.dialogs, no callback is fired. + * @callback removeCallback + * @param {string} oid the ID of the specific user or group + */ + +/** + * This callback is fired after "undo" was clicked so the consumer can update + * the web interface + * @callback undoCallback + * @param {string} oid the ID of the specific user or group + */ + +/** + * enabled the notification system. Required for undo UI. + * + * @param {object} notifier Usually OC.Notification + * @param {string} dataID an identifier for the notifier, 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 {undoCallback} undoCallback called after "undo" was clicked + */ +DeleteHandler.prototype.setNotification = function(notifier, dataID, message, undoCallback) { + this.notifier = notifier; + this.notificationDataID = dataID; + this.notificationMessage = message; + this.undoCallback = undoCallback; + + var dh = this; + + $('#notification').on('click', '.undo', function () { + if ($('#notification').data(dh.notificationDataID)) { + var oid = dh.oidToDelete; + dh.cancel(); + if(typeof dh.undoCallback !== 'undefined') { + dh.undoCallback(oid); + } + } + dh.notifier.hide(); + }); +}; + +/** + * 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); + var msg = this.notificationMessage.replace(this.notificationPlaceholder, + this.oidToDelete); + this.notifier.showHtml(msg); + } +}; + +/** + * hides the Undo Notification + */ +DeleteHandler.prototype.hideNotification = function() { + if(this.notifier !== false) { + $('#notification').removeData(this.notificationDataID); + this.notifier.hide(); + } +}; + +/** + * initializes 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(); +}; + +/** + * cancels a delete operation + */ +DeleteHandler.prototype.cancel = function() { + this.canceled = true; + this.oidToDelete = false; +}; + +/** + * executes a delete operation. Requires that the operation has been + * initialized 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; + } + + var dh = this; + if($('#notification').data(this.notificationDataID) === true) { + dh.hideNotification(); + } + + var 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; + } else { + OC.dialogs.alert(result.data.message, t('settings', 'Unable to delete ' + escapeHTML(dh.oidToDelete))); + dh.undoCallback(dh.oidToDelete); + } + } + }); +}; |