Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

{"version":3,"file":"user_evidence_actions.min.js","sources":["../src/user_evidence_actions.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * User evidence actions.\n *\n * @module     tool_lp/user_evidence_actions\n * @copyright  2015 Frédéric Massart - FMCorz.net\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery',\n        'core/templates',\n        'core/ajax',\n        'core/notification',\n        'core/str',\n        'tool_lp/menubar',\n        'tool_lp/competencypicker_user_plans'],\n        function($, templates, ajax, notification, str, Menubar, PickerUserPlans) {\n\n    /**\n     * UserEvidenceActions class.\n     *\n     * Note that presently this cannot be instantiated more than once per page.\n     *\n     * @param {String} type The type of page we're in.\n     */\n    var UserEvidenceActions = function(type) {\n        this._type = type;\n\n        if (type === 'evidence') {\n            // This is the page to view one evidence.\n            this._region = '[data-region=\"user-evidence-page\"]';\n            this._evidenceNode = '[data-region=\"user-evidence-page\"]';\n            this._template = 'tool_lp/user_evidence_page';\n            this._contextMethod = 'tool_lp_data_for_user_evidence_page';\n\n        } else if (type === 'list') {\n            // This is the page to view a list of evidence.\n            this._region = '[data-region=\"user-evidence-list\"]';\n            this._evidenceNode = '[data-region=\"user-evidence-node\"]';\n            this._template = 'tool_lp/user_evidence_list_page';\n            this._contextMethod = 'tool_lp_data_for_user_evidence_list_page';\n\n        } else {\n            throw new TypeError('Unexpected type.');\n        }\n    };\n\n    /** @property {String} Ajax method to fetch the page data from. */\n    UserEvidenceActions.prototype._contextMethod = null;\n    /** @property {String} Selector to find the node describing the evidence. */\n    UserEvidenceActions.prototype._evidenceNode = null;\n    /** @property {String} Selector mapping to the region to update. Usually similar to wrapper. */\n    UserEvidenceActions.prototype._region = null;\n    /** @property {String} Name of the template used to render the region. */\n    UserEvidenceActions.prototype._template = null;\n    /** @property {String} Type of page/region we're in. */\n    UserEvidenceActions.prototype._type = null;\n\n    /**\n     * Resolve the arguments to refresh the region.\n     *\n     * @param  {Object} evidenceData Evidence data from evidence node.\n     * @return {Object} List of arguments.\n     */\n    UserEvidenceActions.prototype._getContextArgs = function(evidenceData) {\n        var self = this,\n            args = {};\n\n        if (self._type === 'evidence') {\n            args = {\n                id: evidenceData.id\n            };\n\n        } else if (self._type === 'list') {\n            args = {\n                userid: evidenceData.userid\n            };\n        }\n\n        return args;\n    };\n\n    /**\n     * Callback to render the region template.\n     *\n     * @param {Object} context The context for the template.\n     * @return {Promise}\n     */\n    UserEvidenceActions.prototype._renderView = function(context) {\n        var self = this;\n        return templates.render(self._template, context)\n            .then(function(newhtml, newjs) {\n                templates.replaceNode($(self._region), newhtml, newjs);\n                return;\n            });\n    };\n\n    /**\n     * Call multiple ajax methods, and refresh.\n     *\n     * @param  {Array}  calls    List of Ajax calls.\n     * @param  {Object} evidenceData Evidence data from evidence node.\n     * @return {Promise}\n     */\n    UserEvidenceActions.prototype._callAndRefresh = function(calls, evidenceData) {\n        var self = this;\n        calls.push({\n            methodname: self._contextMethod,\n            args: self._getContextArgs(evidenceData)\n        });\n\n        // Apply all the promises, and refresh when the last one is resolved.\n        return $.when.apply($.when, ajax.call(calls))\n            .then(function() {\n                return self._renderView(arguments[arguments.length - 1]);\n            })\n            .fail(notification.exception);\n    };\n\n    /**\n     * Delete a plan and reload the region.\n     *\n     * @param  {Object} evidenceData Evidence data from evidence node.\n     */\n    UserEvidenceActions.prototype._doDelete = function(evidenceData) {\n        var self = this,\n            calls = [{\n                methodname: 'core_competency_delete_user_evidence',\n                args: {id: evidenceData.id}\n            }];\n        self._callAndRefresh(calls, evidenceData);\n    };\n\n    /**\n     * Delete a plan.\n     *\n     * @param  {Object} evidenceData Evidence data from evidence node.\n     */\n    UserEvidenceActions.prototype.deleteEvidence = function(evidenceData) {\n        var self = this,\n            requests;\n\n        requests = ajax.call([{\n            methodname: 'core_competency_read_user_evidence',\n            args: {id: evidenceData.id}\n        }]);\n\n        requests[0].done(function(evidence) {\n            str.get_strings([\n                {key: 'confirm', component: 'moodle'},\n                {key: 'deleteuserevidence', component: 'tool_lp', param: evidence.name},\n                {key: 'delete', component: 'moodle'},\n                {key: 'cancel', component: 'moodle'}\n            ]).done(function(strings) {\n                notification.confirm(\n                    strings[0], // Confirm.\n                    strings[1], // Delete evidence X?\n                    strings[2], // Delete.\n                    strings[3], // Cancel.\n                    function() {\n                        self._doDelete(evidenceData);\n                    }\n                );\n            }).fail(notification.exception);\n        }).fail(notification.exception);\n\n    };\n\n    /**\n     * Delete evidence handler.\n     *\n     * @param  {Event} e The event.\n     */\n    UserEvidenceActions.prototype._deleteEvidenceHandler = function(e) {\n        e.preventDefault();\n        var data = this._findEvidenceData($(e.target));\n        this.deleteEvidence(data);\n    };\n\n    /**\n     * Link a competency and reload.\n     *\n     * @param {Object} evidenceData Evidence data from evidence node.\n     * @param {Number} competencyIds The competency IDs.\n     */\n    UserEvidenceActions.prototype._doCreateUserEvidenceCompetency = function(evidenceData, competencyIds) {\n        var self = this,\n            calls = [];\n\n        $.each(competencyIds, function(index, competencyId) {\n            calls.push({\n                methodname: 'core_competency_create_user_evidence_competency',\n                args: {\n                    userevidenceid: evidenceData.id,\n                    competencyid: competencyId,\n                }\n            });\n        });\n\n        self._callAndRefresh(calls, evidenceData);\n    };\n\n    /**\n     * Create a user evidence competency.\n     *\n     * @param  {Object} evidenceData Evidence data from evidence node.\n     */\n    UserEvidenceActions.prototype.createUserEvidenceCompetency = function(evidenceData) {\n        var self = this,\n            picker = new PickerUserPlans(evidenceData.userid);\n\n        picker.on('save', function(e, data) {\n            var competencyIds = data.competencyIds;\n            self._doCreateUserEvidenceCompetency(evidenceData, competencyIds, data.requestReview);\n        });\n\n        picker.display();\n    };\n\n    /**\n     * Create user evidence competency handler.\n     *\n     * @param  {Event} e The event.\n     */\n    UserEvidenceActions.prototype._createUserEvidenceCompetencyHandler = function(e) {\n        e.preventDefault();\n        var data = this._findEvidenceData($(e.target));\n        this.createUserEvidenceCompetency(data);\n    };\n\n    /**\n     * Remove a linked competency and reload.\n     *\n     * @param {Object} evidenceData Evidence data from evidence node.\n     * @param {Number} competencyId The competency ID.\n     */\n    UserEvidenceActions.prototype._doDeleteUserEvidenceCompetency = function(evidenceData, competencyId) {\n        var self = this,\n            calls = [];\n\n        calls.push({\n            methodname: 'core_competency_delete_user_evidence_competency',\n            args: {\n                userevidenceid: evidenceData.id,\n                competencyid: competencyId,\n            }\n        });\n\n        self._callAndRefresh(calls, evidenceData);\n    };\n\n    /**\n     * Delete a user evidence competency.\n     *\n     * @param  {Object} evidenceData Evidence data from evidence node.\n     * @param  {Number} competencyId The competency ID.\n     */\n    UserEvidenceActions.prototype.deleteUserEvidenceCompetency = function(evidenceData, competencyId) {\n        this._doDeleteUserEvidenceCompetency(evidenceData, competencyId);\n    };\n\n    /**\n     * Delete user evidence competency handler.\n     *\n     * @param  {Event} e The event.\n     */\n    UserEvidenceActions.prototype._deleteUserEvidenceCompetencyHandler = function(e) {\n        var data = this._findEvidenceData($(e.currentTarget)),\n            competencyId = $(e.currentTarget).data('id');\n        e.preventDefault();\n        this.deleteUserEvidenceCompetency(data, competencyId);\n    };\n\n    /**\n     * Send request review for user evidence competencies and reload the region.\n     *\n     * @param  {Object} evidenceData Evidence data from evidence node.\n     */\n    UserEvidenceActions.prototype._doReviewUserEvidenceCompetencies = function(evidenceData) {\n        var self = this,\n            calls = [{\n                methodname: 'core_competency_request_review_of_user_evidence_linked_competencies',\n                args: {id: evidenceData.id}\n            }];\n        self._callAndRefresh(calls, evidenceData);\n    };\n\n    /**\n     * Send request review for user evidence competencies.\n     *\n     * @param  {Object} evidenceData Evidence data from evidence node.\n     */\n    UserEvidenceActions.prototype.reviewUserEvidenceCompetencies = function(evidenceData) {\n        var self = this,\n            requests;\n\n        requests = ajax.call([{\n            methodname: 'core_competency_read_user_evidence',\n            args: {id: evidenceData.id}\n        }]);\n\n        requests[0].done(function(evidence) {\n            str.get_strings([\n                {key: 'confirm', component: 'moodle'},\n                {key: 'sendallcompetenciestoreview', component: 'tool_lp', param: evidence.name},\n                {key: 'confirm', component: 'moodle'},\n                {key: 'cancel', component: 'moodle'}\n            ]).done(function(strings) {\n                notification.confirm(\n                    strings[0], // Confirm.\n                    strings[1], // Send all competencies in review for X?\n                    strings[2], // Confirm.\n                    strings[3], // Cancel.\n                    function() {\n                        self._doReviewUserEvidenceCompetencies(evidenceData);\n                    }\n                );\n            }).fail(notification.exception);\n        }).fail(notification.exception);\n\n    };\n\n    /**\n     * Send request review for user evidence competencies handler.\n     *\n     * @param  {Event} e The event.\n     */\n    UserEvidenceActions.prototype._reviewUserEvidenceCompetenciesHandler = function(e) {\n        e.preventDefault();\n        var data = this._findEvidenceData($(e.target));\n        this.reviewUserEvidenceCompetencies(data);\n    };\n\n    /**\n     * Find the evidence data from the evidence node.\n     *\n     * @param  {Node} node The node to search from.\n     * @return {Object} Evidence data.\n     */\n    UserEvidenceActions.prototype._findEvidenceData = function(node) {\n        var parent = node.parentsUntil($(this._region).parent(), this._evidenceNode),\n            data;\n\n        if (parent.length != 1) {\n            throw new Error('The evidence node was not located.');\n        }\n\n        data = parent.data();\n        if (typeof data === 'undefined' || typeof data.id === 'undefined') {\n            throw new Error('Evidence data could not be found.');\n        }\n\n        return data;\n    };\n\n    /**\n     * Enhance a menu bar.\n     *\n     * @param  {String} selector Menubar selector.\n     */\n    UserEvidenceActions.prototype.enhanceMenubar = function(selector) {\n        var self = this;\n        Menubar.enhance(selector, {\n            '[data-action=\"user-evidence-delete\"]': self._deleteEvidenceHandler.bind(self),\n            '[data-action=\"link-competency\"]': self._createUserEvidenceCompetencyHandler.bind(self),\n            '[data-action=\"send-competencies-review\"]': self._reviewUserEvidenceCompetenciesHandler.bind(self),\n        });\n    };\n\n    /**\n     * Register the events in the region.\n     *\n     * At this stage this cannot be used with enhanceMenubar or multiple handlers\n     * will be added to the same node.\n     */\n    UserEvidenceActions.prototype.registerEvents = function() {\n        var wrapper = $(this._region),\n            self = this;\n\n        wrapper.find('[data-action=\"user-evidence-delete\"]').click(self._deleteEvidenceHandler.bind(self));\n        wrapper.find('[data-action=\"link-competency\"]').click(self._createUserEvidenceCompetencyHandler.bind(self));\n        wrapper.find('[data-action=\"delete-competency-link\"]').click(self._deleteUserEvidenceCompetencyHandler.bind(self));\n        wrapper.find('[data-action=\"send-competencies-review\"]').click(self._reviewUserEvidenceCompetenciesHandler.bind(self));\n    };\n\n    return /** @alias module:tool_lp/user_evidence_actions */ UserEvidenceActions;\n});\n"],"names":["define","$","templates","ajax","notification","str","Menubar","PickerUserPlans","UserEvidenceActions","type","_type","_region","_evidenceNode","_template","_contextMethod","TypeError","prototype","_getContextArgs","evidenceData","args","this","id","userid","_renderView","context","self","render","then","newhtml","newjs","replaceNode","_callAndRefresh","calls","push","methodname","when","apply","call","arguments","length","fail","exception","_doDelete","deleteEvidence","done","evidence","get_strings","key","component","param","name","strings","confirm","_deleteEvidenceHandler","e","preventDefault","data","_findEvidenceData","target","_doCreateUserEvidenceCompetency","competencyIds","each","index","competencyId","userevidenceid","competencyid","createUserEvidenceCompetency","picker","on","requestReview","display","_createUserEvidenceCompetencyHandler","_doDeleteUserEvidenceCompetency","deleteUserEvidenceCompetency","_deleteUserEvidenceCompetencyHandler","currentTarget","_doReviewUserEvidenceCompetencies","reviewUserEvidenceCompetencies","_reviewUserEvidenceCompetenciesHandler","node","parent","parentsUntil","Error","enhanceMenubar","selector","enhance","bind","registerEvents","wrapper","find","click"],"mappings":"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"}