Proyectos de Subversion Moodle

Rev

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

{"version":3,"file":"requestactions.min.js","sources":["../src/requestactions.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 * Request actions.\n *\n * @module     tool_dataprivacy/requestactions\n * @copyright  2018 Jun Pataleta\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n    'jquery',\n    'core/ajax',\n    'core/notification',\n    'core/str',\n    'core/modal_save_cancel',\n    'core/modal_events',\n    'core/templates',\n    'tool_dataprivacy/data_request_modal',\n    'tool_dataprivacy/events',\n    'tool_dataprivacy/selectedcourses'\n], function(\n    $, Ajax, Notification, Str, ModalSaveCancel, ModalEvents, Templates, ModalDataRequest, DataPrivacyEvents, SelectedCourses\n) {\n\n    /**\n     * List of action selectors.\n     *\n     * @type {{APPROVE_REQUEST: string}}\n     * @type {{DENY_REQUEST: string}}\n     * @type {{VIEW_REQUEST: string}}\n     * @type {{MARK_COMPLETE: string}}\n     * @type {{CHANGE_BULK_ACTION: string}}\n     * @type {{CONFIRM_BULK_ACTION: string}}\n     * @type {{SELECT_ALL: string}}\n     */\n    var ACTIONS = {\n        APPROVE_REQUEST: '[data-action=\"approve\"]',\n        DENY_REQUEST: '[data-action=\"deny\"]',\n        VIEW_REQUEST: '[data-action=\"view\"]',\n        MARK_COMPLETE: '[data-action=\"complete\"]',\n        CHANGE_BULK_ACTION: '[id=\"bulk-action\"]',\n        CONFIRM_BULK_ACTION: '[id=\"confirm-bulk-action\"]',\n        SELECT_ALL: '[data-action=\"selectall\"]',\n        APPROVE_REQUEST_SELECT_COURSE: '[data-action=\"approve-selected-courses\"]',\n    };\n\n    /**\n     * List of available bulk actions.\n     *\n     * @type {{APPROVE: number}}\n     * @type {{DENY: number}}\n     */\n    var BULK_ACTIONS = {\n        APPROVE: 1,\n        DENY: 2\n    };\n\n    /**\n     * List of selectors.\n     *\n     * @type {{SELECT_REQUEST: string}}\n     */\n    var SELECTORS = {\n        SELECT_REQUEST: '.selectrequests'\n    };\n\n    /**\n     * RequestActions class.\n     */\n    var RequestActions = function() {\n        this.registerEvents();\n    };\n\n    /**\n     * Register event listeners.\n     */\n    RequestActions.prototype.registerEvents = function() {\n        $(ACTIONS.VIEW_REQUEST).click(function(e) {\n            e.preventDefault();\n\n            var requestId = $(this).data('requestid');\n            var contextId = $(this).data('contextid');\n\n            // Cancel the request.\n            var params = {\n                'requestid': requestId\n            };\n\n            var request = {\n                methodname: 'tool_dataprivacy_get_data_request',\n                args: params\n            };\n\n            var promises = Ajax.call([request]);\n            $.when(promises[0]).then(function(data) {\n                if (data.result) {\n                    return data.result;\n                }\n                // Fail.\n                Notification.addNotification({\n                    message: data.warnings[0].message,\n                    type: 'error'\n                });\n                return false;\n\n            }).then(function(data) {\n                var body = Templates.render('tool_dataprivacy/request_details', data);\n                var templateContext = {\n                    approvedeny: data.approvedeny,\n                    canmarkcomplete: data.canmarkcomplete,\n                    allowfiltering: data.allowfiltering\n                };\n                return ModalDataRequest.create({\n                    title: data.typename,\n                    body: body,\n                    large: true,\n                    templateContext: templateContext\n                });\n\n            }).then(function(modal) {\n                // Handle approve event.\n                modal.getRoot().on(DataPrivacyEvents.approve, function() {\n                    showConfirmation(DataPrivacyEvents.approve, approveEventWsData(requestId));\n                });\n\n                // Handle deny event.\n                modal.getRoot().on(DataPrivacyEvents.deny, function() {\n                    showConfirmation(DataPrivacyEvents.deny, denyEventWsData(requestId));\n                });\n\n                // Handle send event.\n                modal.getRoot().on(DataPrivacyEvents.complete, function() {\n                    var params = {\n                        'requestid': requestId\n                    };\n                    handleSave('tool_dataprivacy_mark_complete', params);\n                });\n\n                // Handle hidden event.\n                modal.getRoot().on(ModalEvents.hidden, function() {\n                    // Destroy when hidden.\n                    modal.destroy();\n                });\n\n                modal.getRoot().on(DataPrivacyEvents.approveSelectCourses, function() {\n                    new SelectedCourses(contextId, requestId);\n                });\n\n                // Show the modal!\n                modal.show();\n\n                return;\n\n            }).catch(Notification.exception);\n        });\n\n        $(ACTIONS.APPROVE_REQUEST_SELECT_COURSE).click(function(e) {\n            e.preventDefault();\n\n            var requestId = $(this).data('requestid');\n            var contextId = $(this).data('contextid');\n\n            new SelectedCourses(contextId, requestId);\n        });\n\n        $(ACTIONS.APPROVE_REQUEST).click(function(e) {\n            e.preventDefault();\n\n            var requestId = $(this).data('requestid');\n            showConfirmation(DataPrivacyEvents.approve, approveEventWsData(requestId));\n        });\n\n        $(ACTIONS.DENY_REQUEST).click(function(e) {\n            e.preventDefault();\n\n            var requestId = $(this).data('requestid');\n            showConfirmation(DataPrivacyEvents.deny, denyEventWsData(requestId));\n        });\n\n        $(ACTIONS.MARK_COMPLETE).click(function(e) {\n            e.preventDefault();\n\n            var requestId = $(this).data('requestid');\n            showConfirmation(DataPrivacyEvents.complete, completeEventWsData(requestId));\n        });\n\n        $(ACTIONS.CONFIRM_BULK_ACTION).click(function() {\n            var requestIds = [];\n            var actionEvent = '';\n            var wsdata = {};\n            var bulkActionKeys = [\n                {\n                    key: 'selectbulkaction',\n                    component: 'tool_dataprivacy'\n                },\n                {\n                    key: 'selectdatarequests',\n                    component: 'tool_dataprivacy'\n                },\n                {\n                    key: 'ok'\n                }\n            ];\n\n            var bulkaction = parseInt($('#bulk-action').val());\n\n            if (bulkaction != BULK_ACTIONS.APPROVE && bulkaction != BULK_ACTIONS.DENY) {\n                Str.get_strings(bulkActionKeys).done(function(langStrings) {\n                    Notification.alert('', langStrings[0], langStrings[2]);\n                }).fail(Notification.exception);\n\n                return;\n            }\n\n            $(\".selectrequests:checked\").each(function() {\n                requestIds.push($(this).val());\n            });\n\n            if (requestIds.length < 1) {\n                Str.get_strings(bulkActionKeys).done(function(langStrings) {\n                    Notification.alert('', langStrings[1], langStrings[2]);\n                }).fail(Notification.exception);\n\n                return;\n            }\n\n            switch (bulkaction) {\n                case BULK_ACTIONS.APPROVE:\n                    actionEvent = DataPrivacyEvents.bulkApprove;\n                    wsdata = bulkApproveEventWsData(requestIds);\n                    break;\n                case BULK_ACTIONS.DENY:\n                    actionEvent = DataPrivacyEvents.bulkDeny;\n                    wsdata = bulkDenyEventWsData(requestIds);\n            }\n\n            showConfirmation(actionEvent, wsdata);\n        });\n\n        $(ACTIONS.SELECT_ALL).change(function(e) {\n            e.preventDefault();\n\n            var selectAll = $(this).is(':checked');\n            $(SELECTORS.SELECT_REQUEST).prop('checked', selectAll);\n        });\n    };\n\n    /**\n     * Return the webservice data for the approve request action.\n     *\n     * @param {Number} requestId The ID of the request.\n     * @return {Object}\n     */\n    function approveEventWsData(requestId) {\n        return {\n            'wsfunction': 'tool_dataprivacy_approve_data_request',\n            'wsparams': {'requestid': requestId}\n        };\n    }\n\n    /**\n     * Return the webservice data for the bulk approve request action.\n     *\n     * @param {Array} requestIds The array of request ID's.\n     * @return {Object}\n     */\n    function bulkApproveEventWsData(requestIds) {\n        return {\n            'wsfunction': 'tool_dataprivacy_bulk_approve_data_requests',\n            'wsparams': {'requestids': requestIds}\n        };\n    }\n\n    /**\n     * Return the webservice data for the deny request action.\n     *\n     * @param {Number} requestId The ID of the request.\n     * @return {Object}\n     */\n    function denyEventWsData(requestId) {\n        return {\n            'wsfunction': 'tool_dataprivacy_deny_data_request',\n            'wsparams': {'requestid': requestId}\n        };\n    }\n\n    /**\n     * Return the webservice data for the bulk deny request action.\n     *\n     * @param {Array} requestIds The array of request ID's.\n     * @return {Object}\n     */\n    function bulkDenyEventWsData(requestIds) {\n        return {\n            'wsfunction': 'tool_dataprivacy_bulk_deny_data_requests',\n            'wsparams': {'requestids': requestIds}\n        };\n    }\n\n    /**\n     * Return the webservice data for the complete request action.\n     *\n     * @param {Number} requestId The ID of the request.\n     * @return {Object}\n     */\n    function completeEventWsData(requestId) {\n        return {\n            'wsfunction': 'tool_dataprivacy_mark_complete',\n            'wsparams': {'requestid': requestId}\n        };\n    }\n\n    /**\n     * Show the confirmation dialogue.\n     *\n     * @param {String} action The action name.\n     * @param {Object} wsdata Object containing ws data.\n     */\n    function showConfirmation(action, wsdata) {\n        var keys = [];\n\n        switch (action) {\n            case DataPrivacyEvents.approve:\n                keys = [\n                    {\n                        key: 'approverequest',\n                        component: 'tool_dataprivacy'\n                    },\n                    {\n                        key: 'confirmapproval',\n                        component: 'tool_dataprivacy'\n                    }\n                ];\n                break;\n            case DataPrivacyEvents.bulkApprove:\n                keys = [\n                    {\n                        key: 'bulkapproverequests',\n                        component: 'tool_dataprivacy'\n                    },\n                    {\n                        key: 'confirmbulkapproval',\n                        component: 'tool_dataprivacy'\n                    }\n                ];\n                break;\n            case DataPrivacyEvents.deny:\n                keys = [\n                    {\n                        key: 'denyrequest',\n                        component: 'tool_dataprivacy'\n                    },\n                    {\n                        key: 'confirmdenial',\n                        component: 'tool_dataprivacy'\n                    }\n                ];\n                break;\n            case DataPrivacyEvents.bulkDeny:\n                keys = [\n                    {\n                        key: 'bulkdenyrequests',\n                        component: 'tool_dataprivacy'\n                    },\n                    {\n                        key: 'confirmbulkdenial',\n                        component: 'tool_dataprivacy'\n                    }\n                ];\n                break;\n            case DataPrivacyEvents.complete:\n                keys = [\n                    {\n                        key: 'markcomplete',\n                        component: 'tool_dataprivacy'\n                    },\n                    {\n                        key: 'confirmcompletion',\n                        component: 'tool_dataprivacy'\n                    }\n                ];\n                break;\n        }\n\n        var modalTitle = '';\n        Str.get_strings(keys).then(function(langStrings) {\n            modalTitle = langStrings[0];\n            var confirmMessage = langStrings[1];\n            return ModalSaveCancel.create({\n                title: modalTitle,\n                body: confirmMessage,\n            });\n        }).then(function(modal) {\n            modal.setSaveButtonText(modalTitle);\n\n            // Handle save event.\n            modal.getRoot().on(ModalEvents.save, function() {\n                handleSave(wsdata.wsfunction, wsdata.wsparams);\n            });\n\n            // Handle hidden event.\n            modal.getRoot().on(ModalEvents.hidden, function() {\n                // Destroy when hidden.\n                modal.destroy();\n            });\n\n            modal.show();\n\n            return;\n\n        }).catch(Notification.exception);\n    }\n\n    /**\n     * Calls a web service function and reloads the page on success and shows a notification.\n     * Displays an error notification, otherwise.\n     *\n     * @param {String} wsfunction The web service function to call.\n     * @param {Object} params The parameters for the web service functoon.\n     */\n    function handleSave(wsfunction, params) {\n        // Confirm the request.\n        var request = {\n            methodname: wsfunction,\n            args: params\n        };\n\n        Ajax.call([request])[0].done(function(data) {\n            if (data.result) {\n                // On success, reload the page so that the data request table will be updated.\n                // TODO: Probably in the future, better to reload the table or the target data request via AJAX.\n                window.location.reload();\n            } else {\n                // Add the notification.\n                Notification.addNotification({\n                    message: data.warnings[0].message,\n                    type: 'error'\n                });\n            }\n        }).fail(Notification.exception);\n    }\n\n    return RequestActions;\n});\n"],"names":["define","$","Ajax","Notification","Str","ModalSaveCancel","ModalEvents","Templates","ModalDataRequest","DataPrivacyEvents","SelectedCourses","ACTIONS","BULK_ACTIONS","SELECTORS","RequestActions","registerEvents","approveEventWsData","requestId","denyEventWsData","showConfirmation","action","wsdata","keys","approve","key","component","bulkApprove","deny","bulkDeny","complete","modalTitle","get_strings","then","langStrings","confirmMessage","create","title","body","modal","setSaveButtonText","getRoot","on","save","handleSave","wsfunction","wsparams","hidden","destroy","show","catch","exception","params","request","methodname","args","call","done","data","result","window","location","reload","addNotification","message","warnings","type","fail","prototype","click","e","preventDefault","this","contextId","promises","when","render","templateContext","approvedeny","canmarkcomplete","allowfiltering","typename","large","approveSelectCourses","completeEventWsData","requestIds","actionEvent","bulkActionKeys","bulkaction","parseInt","val","each","push","length","alert","bulkApproveEventWsData","bulkDenyEventWsData","change","selectAll","is","prop"],"mappings":"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"}