{"version":3,"file":"myrequestactions.min.js","sources":["../src/myrequestactions.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 * AMD module to enable users to manage their own data requests.\n *\n * @module     tool_dataprivacy/myrequestactions\n * @package    tool_dataprivacy\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_factory',\n    'core/modal_events',\n    'core/templates',\n    'core/pending'],\nfunction($, Ajax, Notification, Str, ModalFactory, ModalEvents, Templates, Pending) {\n\n    /**\n     * List of action selectors.\n     *\n     * @type {{CANCEL_REQUEST: string}}\n     * @type {{CONTACT_DPO: string}}\n     */\n    var ACTIONS = {\n        CANCEL_REQUEST: '[data-action=\"cancel\"]',\n        CONTACT_DPO: '[data-action=\"contactdpo\"]',\n    };\n\n    /**\n     * MyRequestActions class.\n     */\n    var MyRequestActions = function() {\n        this.registerEvents();\n    };\n\n    /**\n     * Register event listeners.\n     */\n    MyRequestActions.prototype.registerEvents = function() {\n        $(ACTIONS.CANCEL_REQUEST).click(function(e) {\n            e.preventDefault();\n\n            var requestId = $(this).data('requestid');\n            var stringkeys = [\n                {\n                    key: 'cancelrequest',\n                    component: 'tool_dataprivacy'\n                },\n                {\n                    key: 'cancelrequestconfirmation',\n                    component: 'tool_dataprivacy'\n                }\n            ];\n\n            Str.get_strings(stringkeys).then(function(langStrings) {\n                var title = langStrings[0];\n                var confirmMessage = langStrings[1];\n                return ModalFactory.create({\n                    title: title,\n                    body: confirmMessage,\n                    type: ModalFactory.types.SAVE_CANCEL\n                }).then(function(modal) {\n                    modal.setSaveButtonText(title);\n\n                    // Handle save event.\n                    modal.getRoot().on(ModalEvents.save, function() {\n                        // Cancel the request.\n                        var params = {\n                            'requestid': requestId\n                        };\n\n                        var request = {\n                            methodname: 'tool_dataprivacy_cancel_data_request',\n                            args: params\n                        };\n\n                        Ajax.call([request])[0].done(function(data) {\n                            if (data.result) {\n                                window.location.reload();\n                            } else {\n                                Notification.addNotification({\n                                    message: data.warnings[0].message,\n                                    type: 'error'\n                                });\n                            }\n                        }).fail(Notification.exception);\n                    });\n\n                    // Handle hidden event.\n                    modal.getRoot().on(ModalEvents.hidden, function() {\n                        // Destroy when hidden.\n                        modal.destroy();\n                    });\n\n                    return modal;\n                });\n            }).done(function(modal) {\n                // Show the modal!\n                modal.show();\n\n            }).fail(Notification.exception);\n        });\n\n        $(ACTIONS.CONTACT_DPO).click(function(e) {\n            var pendingPromise = new Pending('dataprivacy/crud:initModal:contactdpo');\n            e.preventDefault();\n\n            var replyToEmail = $(this).data('replytoemail');\n\n            var keys = [\n                {\n                    key: 'contactdataprotectionofficer',\n                    component: 'tool_dataprivacy'\n                },\n                {\n                    key: 'send',\n                    component: 'tool_dataprivacy'\n                },\n            ];\n\n            var sendButtonText = '';\n            Str.get_strings(keys).then(function(langStrings) {\n                var modalTitle = langStrings[0];\n                sendButtonText = langStrings[1];\n                var context = {\n                    'replytoemail': replyToEmail\n                };\n                return ModalFactory.create({\n                    title: modalTitle,\n                    body: Templates.render('tool_dataprivacy/contact_dpo', context),\n                    type: ModalFactory.types.SAVE_CANCEL,\n                    large: true\n                });\n            }).then(function(modal) {\n                modal.setSaveButtonText(sendButtonText);\n\n                // Show the modal!\n                modal.show();\n\n                // Handle send event.\n                modal.getRoot().on(ModalEvents.save, function(e) {\n                    var message = $('#message').val().trim();\n                    if (message.length === 0) {\n                        e.preventDefault();\n                        // Show validation error when the message is empty.\n                        $('[data-region=\"messageinput\"]').addClass('has-danger notifyproblem');\n                        $('#id_error_message').removeAttr('hidden');\n                    } else {\n                        // Send the message.\n                        sendMessageToDPO(message);\n                    }\n                });\n\n                // Handle hidden event.\n                modal.getRoot().on(ModalEvents.hidden, function() {\n                    // Destroy when hidden.\n                    modal.destroy();\n                });\n\n                return;\n            }).then(pendingPromise.resolve)\n            .catch(Notification.exception);\n        });\n    };\n\n    /**\n     * Send message to the Data Protection Officer.\n     *\n     * @param {String} message The message to send.\n     */\n    function sendMessageToDPO(message) {\n        var request = {\n            methodname: 'tool_dataprivacy_contact_dpo',\n            args: {\n                message: message\n            }\n        };\n\n        var requestType = 'success';\n        Ajax.call([request])[0].then(function(data) {\n            if (data.result) {\n                return Str.get_string('requestsubmitted', 'tool_dataprivacy');\n            }\n            requestType = 'error';\n            return data.warnings.join('<br>');\n\n        }).done(function(message) {\n            Notification.addNotification({\n                message: message,\n                type: requestType\n            });\n\n        }).fail(Notification.exception);\n    }\n\n    return /** @alias module:tool_dataprivacy/myrequestactions */ {\n        // Public variables and functions.\n\n        /**\n         * Initialise the unified user filter.\n         *\n         * @method init\n         * @return {MyRequestActions}\n         */\n        'init': function() {\n            return new MyRequestActions();\n        }\n    };\n});\n"],"names":["define","$","Ajax","Notification","Str","ModalFactory","ModalEvents","Templates","Pending","ACTIONS","MyRequestActions","registerEvents","prototype","click","e","preventDefault","requestId","this","data","get_strings","key","component","then","langStrings","title","confirmMessage","create","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","on","save","request","methodname","args","call","done","result","window","location","reload","addNotification","message","warnings","fail","exception","hidden","destroy","show","pendingPromise","replyToEmail","sendButtonText","modalTitle","context","render","large","val","trim","length","addClass","removeAttr","requestType","get_string","join","sendMessageToDPO","resolve","catch"],"mappings":";;;;;;;;AAuBAA,2CAAO,CACH,SACA,YACA,oBACA,WACA,qBACA,oBACA,iBACA,iBACJ,SAASC,EAAGC,KAAMC,aAAcC,IAAKC,aAAcC,YAAaC,UAAWC,aAQnEC,uBACgB,yBADhBA,oBAEa,6BAMbC,iBAAmB,gBACdC,yBAMTD,iBAAiBE,UAAUD,eAAiB,WACxCV,EAAEQ,wBAAwBI,OAAM,SAASC,GACrCA,EAAEC,qBAEEC,UAAYf,EAAEgB,MAAMC,KAAK,aAY7Bd,IAAIe,YAXa,CACb,CACIC,IAAK,gBACLC,UAAW,oBAEf,CACID,IAAK,4BACLC,UAAW,sBAISC,MAAK,SAASC,iBAClCC,MAAQD,YAAY,GACpBE,eAAiBF,YAAY,UAC1BlB,aAAaqB,OAAO,CACvBF,MAAOA,MACPG,KAAMF,eACNG,KAAMvB,aAAawB,MAAMC,cAC1BR,MAAK,SAASS,cACbA,MAAMC,kBAAkBR,OAGxBO,MAAME,UAAUC,GAAG5B,YAAY6B,MAAM,eAM7BC,QAAU,CACVC,WAAY,uCACZC,KANS,WACItB,YAQjBd,KAAKqC,KAAK,CAACH,UAAU,GAAGI,MAAK,SAAStB,MAC9BA,KAAKuB,OACLC,OAAOC,SAASC,SAEhBzC,aAAa0C,gBAAgB,CACzBC,QAAS5B,KAAK6B,SAAS,GAAGD,QAC1BlB,KAAM,aAGfoB,KAAK7C,aAAa8C,cAIzBlB,MAAME,UAAUC,GAAG5B,YAAY4C,QAAQ,WAEnCnB,MAAMoB,aAGHpB,YAEZS,MAAK,SAAST,OAEbA,MAAMqB,UAEPJ,KAAK7C,aAAa8C,cAGzBhD,EAAEQ,qBAAqBI,OAAM,SAASC,OAC9BuC,eAAiB,IAAI7C,QAAQ,yCACjCM,EAAEC,qBAEEuC,aAAerD,EAAEgB,MAAMC,KAAK,gBAa5BqC,eAAiB,GACrBnD,IAAIe,YAZO,CACP,CACIC,IAAK,+BACLC,UAAW,oBAEf,CACID,IAAK,OACLC,UAAW,sBAKGC,MAAK,SAASC,iBAC5BiC,WAAajC,YAAY,GAC7BgC,eAAiBhC,YAAY,OACzBkC,QAAU,cACMH,qBAEbjD,aAAaqB,OAAO,CACvBF,MAAOgC,WACP7B,KAAMpB,UAAUmD,OAAO,+BAAgCD,SACvD7B,KAAMvB,aAAawB,MAAMC,YACzB6B,OAAO,OAEZrC,MAAK,SAASS,OACbA,MAAMC,kBAAkBuB,gBAGxBxB,MAAMqB,OAGNrB,MAAME,UAAUC,GAAG5B,YAAY6B,MAAM,SAASrB,OACtCgC,QAAU7C,EAAE,YAAY2D,MAAMC,OACX,IAAnBf,QAAQgB,QACRhD,EAAEC,iBAEFd,EAAE,gCAAgC8D,SAAS,4BAC3C9D,EAAE,qBAAqB+D,WAAW,oBAwB5BlB,aAClBV,QAAU,CACVC,WAAY,+BACZC,KAAM,CACFQ,QAASA,UAIbmB,YAAc,UAClB/D,KAAKqC,KAAK,CAACH,UAAU,GAAGd,MAAK,SAASJ,aAC9BA,KAAKuB,OACErC,IAAI8D,WAAW,mBAAoB,qBAE9CD,YAAc,QACP/C,KAAK6B,SAASoB,KAAK,YAE3B3B,MAAK,SAASM,SACb3C,aAAa0C,gBAAgB,CACzBC,QAASA,QACTlB,KAAMqC,iBAGXjB,KAAK7C,aAAa8C,WA3CLmB,CAAiBtB,YAKzBf,MAAME,UAAUC,GAAG5B,YAAY4C,QAAQ,WAEnCnB,MAAMoB,gBAIX7B,KAAK+B,eAAegB,SACtBC,MAAMnE,aAAa8C,eAkCkC,MASlD,kBACG,IAAIvC"}