// 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/>.
/**
* Handle selecting parent competency in competency form.
*
* @module tool_lp/parentcompetency_form
* @copyright 2015 Issam Taboubi <issam.taboubi@umontreal.ca>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/ajax', 'core/str', 'tool_lp/competencypicker', 'core/templates', 'core/notification'],
function($, ajax, Str, Picker, Templates, Notification) {
/**
* Parent Competency Form object.
* @param {String} buttonSelector The parent competency button selector.
* @param {String} inputHiddenSelector The hidden input field selector.
* @param {String} staticElementSelector The static element displaying the parent competency.
* @param {Number} frameworkId The competency framework ID.
* @param {Number} pageContextId The page context ID.
*/
var ParentCompetencyForm = function(buttonSelector,
inputHiddenSelector,
staticElementSelector,
frameworkId,
pageContextId) {
this.buttonSelector = buttonSelector;
this.inputHiddenSelector = inputHiddenSelector;
this.staticElementSelector = staticElementSelector;
this.frameworkId = frameworkId;
this.pageContextId = pageContextId;
// Register the events.
this.registerEvents();
};
/** @var {String} The parent competency button selector. */
ParentCompetencyForm.prototype.buttonSelector = null;
/** @var {String} The hidden input field selector. */
ParentCompetencyForm.prototype.inputHiddenSelector = null;
/** @var {String} The static element displaying the parent competency. */
ParentCompetencyForm.prototype.staticElementSelector = null;
/** @var {Number} The competency framework ID. */
ParentCompetencyForm.prototype.frameworkId = null;
/** @var {Number} The page context ID. */
ParentCompetencyForm.prototype.pageContextId = null;
/**
* Set the parent competency in the competency form.
*
* @param {Object} data Data containing selected competency.
* @method setParent
*/
ParentCompetencyForm.prototype.setParent = function(data) {
var self = this;
if (data.competencyId !== 0) {
ajax.call([
{methodname: 'core_competency_read_competency', args: {
id: data.competencyId
}}
])[0].done(function(competency) {
$(self.staticElementSelector).html(competency.shortname);
$(self.inputHiddenSelector).val(competency.id);
}).fail(Notification.exception);
} else {
// Root of competency framework selected.
Str.get_string('competencyframeworkroot', 'tool_lp').then(function(rootframework) {
$(self.staticElementSelector).html(rootframework);
$(self.inputHiddenSelector).val(data.competencyId);
return;
}).fail(Notification.exception);
}
};
/**
* Register the events of parent competency button click.
*
* @method registerEvents
*/
ParentCompetencyForm.prototype.registerEvents = function() {
var self = this;
// Event on edit parent button.
$(self.buttonSelector).on('click', function(e) {
e.preventDefault();
var picker = new Picker(self.pageContextId, self.frameworkId, 'self', false);
// Override the render method to make framework selectable.
picker._render = function() {
var self = this;
return self._preRender().then(function() {
var context = {
competencies: self._competencies,
framework: self._getFramework(self._frameworkId),
frameworks: self._frameworks,
search: self._searchText,
singleFramework: self._singleFramework,
};
return Templates.render('tool_lp/competency_picker_competencyform', context);
});
};
// On selected competency.
picker.on('save', function(e, data) {
self.setParent(data);
});
picker.display();
});
};
return {
/**
* Main initialisation.
* @param {String} buttonSelector The parent competency button selector.
* @param {String} inputSelector The hidden input field selector.
* @param {String} staticElementSelector The static element displaying the parent competency.
* @param {Number} frameworkId The competency framework ID.
* @param {Number} pageContextId The page context ID.
* @method init
*/
init: function(buttonSelector,
inputSelector,
staticElementSelector,
frameworkId,
pageContextId) {
// Create instance.
new ParentCompetencyForm(buttonSelector,
inputSelector,
staticElementSelector,
frameworkId,
pageContextId);
}
};
});