aboutsummaryrefslogtreecommitdiffstats
path: root/settings/js/users/deleteHandler.js
diff options
context:
space:
mode:
Diffstat (limited to 'settings/js/users/deleteHandler.js')
-rw-r--r--settings/js/users/deleteHandler.js171
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);
+ }
+ }
+ });
+};