[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 // This file is part of Moodle - http://moodle.org/ 2 // 3 // Moodle is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU General Public License as published by 5 // the Free Software Foundation, either version 3 of the License, or 6 // (at your option) any later version. 7 // 8 // Moodle is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU General Public License for more details. 12 // 13 // You should have received a copy of the GNU General Public License 14 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 15 16 /** 17 * Competency rule points module. 18 * 19 * @package tool_lp 20 * @copyright 2015 Frédéric Massart - FMCorz.net 21 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 22 */ 23 24 define(['jquery', 25 'core/str', 26 'core/templates', 27 'tool_lp/competency_rule', 28 ], 29 function($, Str, Templates, RuleBase) { 30 31 /** 32 * Competency rule points class. 33 */ 34 var Rule = function() { 35 RuleBase.apply(this, arguments); 36 }; 37 Rule.prototype = Object.create(RuleBase.prototype); 38 39 /** @type {Node} Reference to the container in which the template was included. */ 40 Rule.prototype._container = null; 41 /** @type {Boolean} Whether or not the template was included. */ 42 Rule.prototype._templateLoaded = false; 43 44 /** 45 * The config established by this rule. 46 * 47 * @return {String} 48 * @method getConfig 49 */ 50 Rule.prototype.getConfig = function() { 51 return JSON.stringify({ 52 base: { 53 points: this._getRequiredPoints(), 54 }, 55 competencies: this._getCompetenciesConfig() 56 }); 57 }; 58 59 /** 60 * Gathers the input provided by the user for competencies. 61 * 62 * @return {Array} Containing id, points and required. 63 * @method _getCompetenciesConfig 64 * @protected 65 */ 66 Rule.prototype._getCompetenciesConfig = function() { 67 var competencies = []; 68 69 this._container.find('[data-competency]').each(function() { 70 var node = $(this), 71 id = node.data('competency'), 72 points = parseInt(node.find('[name="points"]').val(), 10), 73 required = node.find('[name="required"]').prop('checked'); 74 75 competencies.push({ 76 id: id, 77 points: points, 78 required: required ? 1 : 0 79 }); 80 }); 81 82 return competencies; 83 }; 84 85 /** 86 * Fetches the required points set by the user. 87 * 88 * @return {Number} 89 * @method _getRequiredPoints 90 * @protected 91 */ 92 Rule.prototype._getRequiredPoints = function() { 93 return parseInt(this._container.find('[name="requiredpoints"]').val() || 1, 10); 94 }; 95 96 /** 97 * Return the type of the module. 98 * 99 * @return {String} 100 * @method getType 101 */ 102 Rule.prototype.getType = function() { 103 return 'core_competency\\competency_rule_points'; 104 }; 105 106 /** 107 * Callback to inject the template. 108 * 109 * @param {Node} container Node to inject in. 110 * @return {Promise} Resolved when done. 111 * @method injectTemplate 112 */ 113 Rule.prototype.injectTemplate = function(container) { 114 var self = this, 115 children = this._tree.getChildren(this._competency.id), 116 context, 117 config = { 118 base: {points: 2}, 119 competencies: [] 120 }; 121 122 this._templateLoaded = false; 123 124 // Only pre-load the configuration when the competency is using this rule. 125 if (self._competency.ruletype == self.getType()) { 126 try { 127 config = JSON.parse(self._competency.ruleconfig); 128 } catch (e) { 129 // eslint-disable-line no-empty 130 } 131 } 132 133 context = { 134 requiredpoints: (config && config.base) ? config.base.points : 2, 135 competency: self._competency, 136 children: [] 137 }; 138 139 $.each(children, function(index, child) { 140 var competency = { 141 id: child.id, 142 shortname: child.shortname, 143 required: false, 144 points: 0 145 }; 146 147 if (config) { 148 $.each(config.competencies, function(index, comp) { 149 if (comp.id == competency.id) { 150 competency.required = comp.required ? true : false; 151 competency.points = comp.points; 152 } 153 }); 154 } 155 156 context.children.push(competency); 157 }); 158 159 return Templates.render('tool_lp/competency_rule_points', context).then(function(html) { 160 self._container = container; 161 container.html(html); 162 container.find('input').change(function() { 163 self._triggerChange(); 164 }); 165 166 // We're done, let's trigger a change. 167 self._templateLoaded = true; 168 self._triggerChange(); 169 }); 170 }; 171 172 /** 173 * Whether or not the current config is valid. 174 * 175 * @return {Boolean} 176 * @method isValid 177 */ 178 Rule.prototype.isValid = function() { 179 if (!this._templateLoaded) { 180 return false; 181 } 182 183 var required = this._getRequiredPoints(), 184 max = 0, 185 valid = true; 186 187 $.each(this._getCompetenciesConfig(), function(index, competency) { 188 if (competency.points < 0) { 189 valid = false; 190 } 191 max += competency.points; 192 }); 193 194 valid = valid && max >= required; 195 return valid; 196 }; 197 198 return /** @alias module:tool_lp/competency_rule_all */ Rule; 199 200 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |