// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Adds support for confirmation via JS modal for some management actions at the Manage policies page.
*
* @module tool_policy/managedocsactions
* @copyright 2018 David Mudrák <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define([
'jquery',
'core/log',
'core/config',
'core/str',
'core/modal_save_cancel',
'core/modal_events'
], function($, Log, Config, Str, ModalSaveCancel, ModalEvents) {
"use strict";
/**
* List of action selectors.
*
* @property {string} LINKS - Selector for all action links
* @property {string} MAKE_CURRENT
*/
var ACTION = {
LINKS: '[data-action]',
MAKE_CURRENT: '[data-action="makecurrent"]',
INACTIVATE: '[data-action="inactivate"]',
DELETE: '[data-action="delete"]'
};
/**
* @constructor
* @param {Element} base - Management area wrapping element
*/
function ManageDocsActions(base) {
this.base = base;
this.initEvents();
}
/**
* Register event listeners.
*/
ManageDocsActions.prototype.initEvents = function() {
var self = this;
self.base.on('click', ACTION.LINKS, function(e) {
e.stopPropagation();
var link = $(e.currentTarget);
var promise;
var strings;
if (link.is(ACTION.MAKE_CURRENT)) {
promise = Str.get_strings([
{key: 'activating', component: 'tool_policy'},
{key: 'activateconfirm', component: 'tool_policy', param: {
name: link.closest('[data-policy-name]').attr('data-policy-name'),
revision: link.closest('[data-policy-revision]').attr('data-policy-revision')
}},
{key: 'activateconfirmyes', component: 'tool_policy'}
]);
} else if (link.is(ACTION.INACTIVATE)) {
promise = Str.get_strings([
{key: 'inactivating', component: 'tool_policy'},
{key: 'inactivatingconfirm', component: 'tool_policy', param: {
name: link.closest('[data-policy-name]').attr('data-policy-name'),
revision: link.closest('[data-policy-revision]').attr('data-policy-revision')
}},
{key: 'inactivatingconfirmyes', component: 'tool_policy'}
]);
} else if (link.is(ACTION.DELETE)) {
promise = Str.get_strings([
{key: 'deleting', component: 'tool_policy'},
{key: 'deleteconfirm', component: 'tool_policy', param: {
name: link.closest('[data-policy-name]').attr('data-policy-name'),
revision: link.closest('[data-policy-revision]').attr('data-policy-revision')
}},
{key: 'delete', component: 'core'}
]);
} else {
Log.error('unknown action type detected', 'tool_policy/managedocsactions');
return;
}
e.preventDefault();
promise.then(function(strs) {
strings = strs;
return ModalSaveCancel.create({
title: strings[0],
body: strings[1],
});
}).then(function(modal) {
modal.setSaveButtonText(strings[2]);
modal.getRoot().on(ModalEvents.save, function() {
window.location.href = link.attr('href') + '&sesskey=' + Config.sesskey + '&confirm=1';
});
modal.getRoot().on(ModalEvents.hidden, function() {
modal.destroy();
});
modal.show();
return true;
}).catch(function(e) {
Log.error(e);
return false;
});
});
};
return {
/**
* Factory method returning instance of the ManageDocsActions
*
* @param {String} baseid - ID of the management area wrapping element
* @return {ManageDocsActions}
*/
init: function(baseid) {
var base = $(document.getElementById(baseid));
if (base.length) {
return new ManageDocsActions(base);
} else {
throw new Error("managedocsactions: Invalid base element identifier");
}
}
};
});