Proyectos de Subversion Moodle

Rev

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

{"version":3,"file":"permissionmanager.min.js","sources":["../src/permissionmanager.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 * @copyright  2015 Martin Mastny <mastnym@vscht.cz>\n * @since      3.0\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n /**\n  * @module core/permissionmanager\n  */\ndefine(['jquery', 'core/config', 'core/notification', 'core/templates', 'core/yui'],\n    function($, config, notification, templates, Y) {\n\n     /**\n      * Used CSS selectors\n      * @access private\n      */\n    var SELECTORS = {\n        ADDROLE: 'a.allowlink, a.prohibitlink',\n        REMOVEROLE: 'a.preventlink, a.unprohibitlink',\n        UNPROHIBIT: 'a.unprohibitlink'\n        };\n    var rolesloadedevent = $.Event('rolesloaded');\n    var contextid;\n    var contextname;\n    var adminurl;\n    var overideableroles;\n    var panel = null;\n\n    /**\n     * Load all possible roles, which could be assigned from server\n     *\n     * @access private\n     * @method loadOverideableRoles\n     */\n    var loadOverideableRoles = function() {\n        var params = {\n            contextid: contextid,\n            getroles: 1,\n            sesskey: config.sesskey\n        };\n\n        // Need to tell jQuery to expect JSON as the content type may not be correct (MDL-55041).\n        $.post(adminurl + 'roles/ajax.php', params, null, 'json')\n            .done(function(data) {\n              try {\n                  overideableroles = data;\n                  loadOverideableRoles = function() {\n                      $('body').trigger(rolesloadedevent);\n                  };\n                  loadOverideableRoles();\n              } catch (err) {\n                  notification.exception(err);\n              }\n            })\n            .fail(function(jqXHR, status, error) {\n                notification.exception(error);\n            });\n    };\n\n    /**\n     * Perform the UI changes after server change\n     *\n     * @access private\n     * @method changePermissions\n     * @param {JQuery} row\n     * @param {int} roleid\n     * @param {string} action\n     */\n    var changePermissions = function(row, roleid, action) {\n        var params = {\n            contextid: contextid,\n            roleid: roleid,\n            sesskey: M.cfg.sesskey,\n            action: action,\n            capability: row.data('name')\n        };\n        $.post(adminurl + 'roles/ajax.php', params, null, 'json')\n        .done(function(data) {\n            var action = data;\n            try {\n                var templatedata = {rolename: overideableroles[roleid],\n                                    roleid: roleid,\n                                    adminurl: adminurl,\n                                    imageurl: M.util.image_url('t/delete', 'moodle')\n                                    };\n                switch (action) {\n                    case 'allow':\n                        templatedata.spanclass = 'allowed';\n                        templatedata.linkclass = 'preventlink';\n                        templatedata.action = 'prevent';\n                        templatedata.icon = 't/delete';\n                        templatedata.iconalt = M.util.get_string('deletexrole', 'core_role', overideableroles[roleid]);\n                        break;\n                    case 'prohibit':\n                        templatedata.spanclass = 'forbidden';\n                        templatedata.linkclass = 'unprohibitlink';\n                        templatedata.action = 'unprohibit';\n                        templatedata.icon = 't/delete';\n                        templatedata.iconalt = M.util.get_string('deletexrole', 'core_role', overideableroles[roleid]);\n                        break;\n                    case 'prevent':\n                        row.find('a[data-role-id=\"' + roleid + '\"]').first().closest('.allowed').remove();\n                        return;\n                    case 'unprohibit':\n                        row.find('a[data-role-id=\"' + roleid + '\"]').first().closest('.forbidden').remove();\n                        return;\n                    default:\n                        return;\n                }\n                templates.render('core/permissionmanager_role', templatedata)\n                .done(function(content) {\n                    if (action == 'allow') {\n                        $(content).insertBefore(row.find('.allowmore').first());\n                    } else if (action == 'prohibit') {\n                        $(content).insertBefore(row.find('.prohibitmore').first());\n                        // Remove allowed link\n                        var allowedLink = row.find('.allowedroles').first().find('a[data-role-id=\"' + roleid + '\"]');\n                        if (allowedLink) {\n                            allowedLink.first().closest('.allowed').remove();\n                        }\n                    }\n                    panel.hide();\n                })\n                .fail(notification.exception);\n            } catch (err) {\n                notification.exception(err);\n            }\n        })\n        .fail(function(jqXHR, status, error) {\n            notification.exception(error);\n        });\n    };\n\n    /**\n     * Prompts user for selecting a role which is permitted\n     *\n     * @access private\n     * @method handleAddRole\n     * @param {event} e\n     */\n    var handleAddRole = function(e) {\n        e.preventDefault();\n\n        var link = $(e.currentTarget);\n\n        // TODO: MDL-57778 Convert to core/modal.\n        $('body').one('rolesloaded', function() {\n            Y.use('moodle-core-notification-dialogue', function() {\n                var action = link.data('action');\n                var row = link.closest('tr.rolecap');\n                var confirmationDetails = {\n                    cap: row.data('humanname'),\n                    context: contextname\n                };\n                var message = M.util.get_string('role' + action + 'info', 'core_role', confirmationDetails);\n                if (panel === null) {\n                    panel = new M.core.dialogue({\n                        draggable: true,\n                        modal: true,\n                        closeButton: true,\n                        width: '450px'\n                    });\n                }\n                panel.set('headerContent', M.util.get_string('role' + action + 'header', 'core_role'));\n\n                var i, existingrolelinks;\n\n                var roles = [];\n                switch (action) {\n                    case 'allow':\n                        existingrolelinks = row.find(SELECTORS.REMOVEROLE);\n                        break;\n                    case 'prohibit':\n                        existingrolelinks = row.find(SELECTORS.UNPROHIBIT);\n                        break;\n                }\n                for (i in overideableroles) {\n                    var disabled = '';\n                    var disable = existingrolelinks.filter(\"[data-role-id='\" + i + \"']\").length;\n                    if (disable) {\n                        disabled = 'disabled';\n                    }\n                    var roledetails = {roleid: i, rolename: overideableroles[i], disabled: disabled};\n                    roles.push(roledetails);\n                }\n\n                templates.render('core/permissionmanager_panelcontent', {message: message, roles: roles})\n                .done(function(content) {\n                    panel.set('bodyContent', content);\n                    panel.show();\n                    $('div.role_buttons').on('click', 'button', function(e) {\n                        var roleid = $(e.currentTarget).data('role-id');\n                        changePermissions(row, roleid, action);\n                    });\n                })\n                .fail(notification.exception);\n\n            });\n        });\n        loadOverideableRoles();\n    };\n\n    /**\n     * Prompts user when removing permission\n     *\n     * @access private\n     * @method handleRemoveRole\n     * @param {event} e\n     */\n    var handleRemoveRole = function(e) {\n        e.preventDefault();\n        var link = $(e.currentTarget);\n        $('body').one('rolesloaded', function() {\n            var action = link.data('action');\n            var roleid = link.data('role-id');\n            var row = link.closest('tr.rolecap');\n            var questionDetails = {\n                role: overideableroles[roleid],\n                cap: row.data('humanname'),\n                context: contextname\n            };\n\n            notification.confirm(M.util.get_string('confirmunassigntitle', 'core_role'),\n                M.util.get_string('confirmrole' + action, 'core_role', questionDetails),\n                M.util.get_string('confirmunassignyes', 'core_role'),\n                M.util.get_string('confirmunassignno', 'core_role'),\n                function() {\n                   changePermissions(row, roleid, action);\n                }\n            );\n         });\n        loadOverideableRoles();\n    };\n\n    return /** @alias module:core/permissionmanager */ {\n        /**\n         * Initialize permissionmanager\n         * @access public\n         * @param {Object} args\n         */\n        initialize: function(args) {\n            contextid = args.contextid;\n            contextname = args.contextname;\n            adminurl = args.adminurl;\n            var body = $('body');\n            body.on('click', SELECTORS.ADDROLE, handleAddRole);\n            body.on('click', SELECTORS.REMOVEROLE, handleRemoveRole);\n        }\n    };\n});\n"],"names":["define","$","config","notification","templates","Y","contextid","contextname","adminurl","overideableroles","SELECTORS","rolesloadedevent","Event","panel","loadOverideableRoles","params","getroles","sesskey","post","done","data","trigger","err","exception","fail","jqXHR","status","error","changePermissions","row","roleid","action","M","cfg","capability","templatedata","rolename","imageurl","util","image_url","spanclass","linkclass","icon","iconalt","get_string","find","first","closest","remove","render","content","insertBefore","allowedLink","hide","handleAddRole","e","preventDefault","link","currentTarget","one","use","i","existingrolelinks","confirmationDetails","cap","context","message","core","dialogue","draggable","modal","closeButton","width","set","roles","disabled","filter","length","roledetails","push","show","on","handleRemoveRole","questionDetails","role","confirm","initialize","args","body"],"mappings":"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"}