Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
 
2
define(['jquery', 'core/str', 'core/modal_factory', 'core/modal_events',
3
    'core/fragment', 'core/templates', 'core/ajax', 'core/notification'],
4
function($, Str, Modal, ModalEvents, Fragment, Templates, AJAX, Notification) {
5
 
6
    return {
7
        init: function(contextID) {
8
 
9
            var groupModal = document.getElementsByClassName('group-widget-viewmembers');
10
            Array.from(groupModal).forEach(function(element) {
11
                element.addEventListener('click', function(e) {
12
                    e.preventDefault();
13
                    var target = e.target;
14
                    var group = target.getAttribute('data-group');
15
                    Modal.create({
16
                        title: Str.get_string('groups', 'core')
17
                    }).then(function(modal) {
18
                        modal.show();
19
                        var args = JSON.stringify({group: group});
20
                        var params = {widget: 'groups', method: 'viewmembers', args: args};
21
                        Fragment.loadFragment('block_dash', 'loadwidget', contextID, params).then((html, js) => {
22
                            modal.setBody(html);
23
                            Templates.runTemplateJS(js);
24
                            return html;
25
                        }).catch(Notification.exception);
26
                        modal.getRoot().on(ModalEvents.hidden, function() {
27
                            modal.destroy();
28
                        });
29
                        return modal;
30
                    }).catch(Notification.exception);
31
                });
32
            });
33
 
34
            var groupUsers = document.getElementsByClassName('add-group-users');
35
            Array.from(groupUsers).forEach(function(element) {
36
                element.addEventListener('click', function(e) {
37
                    e.preventDefault();
38
                    addGroupUsers(e);
39
                });
40
            });
41
 
42
            /**
43
             * Modal create for add member to groups menu.
44
             * @param {Event} e
45
             */
46
            function addGroupUsers(e) {
47
                var target = e.target;
48
                var group = target.getAttribute('data-group');
49
                Modal.create({
50
                    type: Modal.types.SAVE_CANCEL,
51
                    title: Str.get_string('widget:groups:adduser', 'block_dash'),
52
                }).then(function(modal) {
53
                    modal.setLarge(true);
54
                    modal.show();
55
 
56
                    var args = JSON.stringify({group: group});
57
                    var params = {widget: 'groups', method: 'addmembers', args: args};
58
                    Fragment.loadFragment('block_dash', 'loadwidget', contextID, params).then((html, js) => {
59
                        modal.setBody(html);
60
                        modal.getRoot().get(0).querySelectorAll('form').forEach(form => {
61
                            groupAddEventListeners(form);
62
                        });
63
 
64
                        Templates.runTemplateJS(js);
65
                        return html;
66
                    }).catch(Notification.exception);
67
 
68
                    modal.getRoot().on(ModalEvents.hidden, function() {
69
                        modal.destroy();
70
                    });
71
 
72
                    // Apply and save method.
73
                    modal.getRoot().on(ModalEvents.save, (e) => {
74
                        e.preventDefault();
75
                        modal.getRoot().get(0).querySelectorAll('form').forEach(form => {
76
                            form.querySelector('#id_submitbutton').click();
77
                        });
78
                    });
79
                    return modal;
80
                }).catch(Notification.exception);
81
            }
82
 
83
            /**
84
             * Event listener for add memebers to groups form submit.
85
             * @param {Array} form
86
             */
87
            function groupAddEventListeners(form) {
88
                form.addEventListener('submit', function(e) {
89
                    e.preventDefault();
90
                    var formdata = new FormData(e.target);
91
                    if (e.target.querySelector('[name="users[]"]').value == '') {
92
                        return false;
93
                    }
94
                    var formdatastr = new URLSearchParams(formdata).toString();
95
                    var promises = AJAX.call([{
96
                        methodname: 'block_dash_groups_add_members',
97
                        args: {formdata: formdatastr}
98
                    }]);
99
 
100
                    promises[0].done((response) => {
101
                        if (response == true) {
102
                            window.location.reload();
103
                        } else {
104
                            // TODO: Error Notification.
105
                        }
106
                    });
107
                    return true;
108
                });
109
            }
110
 
111
            // Leave group.
112
            var leaveGroupModal = document.getElementsByClassName('group-widget-leavegroup');
113
            Array.from(leaveGroupModal).forEach(function(element) {
114
                element.addEventListener('click', function(e) {
115
                    e.preventDefault();
116
                    leaveGroup(e);
117
                });
118
            });
119
 
120
            /**
121
             * Event observer for leave group menu clicked to trigger the confirmation modal.
122
             * @param {event} e
123
             */
124
            function leaveGroup(e) {
125
                var target = e.target;
126
                var group = target.getAttribute('data-group');
127
                var groupname = target.getAttribute('data-groupname');
128
 
129
                Modal.create({
130
                    type: Modal.types.SAVE_CANCEL,
131
                    title: Str.get_string('groups', 'core'),
132
                }).then(function(modal) {
133
                    Str.get_string('confirm', 'core').then((html) => {
134
                        modal.setSaveButtonText(html);
135
                        return html;
136
                    }).catch(Notification.exception);
137
                    modal.show();
138
 
139
                    Str.get_string('confirmleavegroup', 'block_dash', groupname).then((html) => {
140
                        modal.setBody(html);
141
                        return html;
142
                    }).catch(Notification.exception);
143
 
144
                    modal.getRoot().on(ModalEvents.save, (e) => {
145
                        e.preventDefault();
146
                        var promises = AJAX.call([{
147
                            methodname: 'block_dash_groups_leave_group',
148
                            args: {groupid: group}
149
                        }]);
150
 
151
                        promises[0].done((response) => {
152
                            if (response == true) {
153
                                window.location.reload();
154
                            } else {
155
                                // TODO: Error Notification.
156
                            }
157
                        });
158
                    });
159
 
160
                    modal.getRoot().on(ModalEvents.hidden, function() {
161
                        modal.destroy();
162
                    });
163
 
164
                    modal.getRoot().on(ModalEvents.destroyed, function() {
165
                        modal.remove();
166
                        modal.attachmentPoint.remove();
167
                    });
168
                    return modal;
169
                }).catch(Notification.exception);
170
            }
171
 
172
            // Create group.
173
            var createGroupModal = document.getElementsByClassName('create-group');
174
            Array.from(createGroupModal).forEach(function(element) {
175
                element.addEventListener('click', function(e) {
176
                    e.preventDefault();
177
                    createGroup();
178
                });
179
            });
180
 
181
            /**
182
             * Event listner for create group modal trigger.
183
             */
184
            function createGroup() {
185
 
186
                Modal.create({
187
                    type: Modal.types.SAVE_CANCEL,
188
                    title: Str.get_string('groups', 'core'),
189
                }).then(function(modal) {
190
                    modal.show();
191
 
192
                    var args = "";
193
                    var params = {widget: 'groups', method: 'creategroup', args: args};
194
                    Fragment.loadFragment('block_dash', 'loadwidget', contextID, params).then((html, js) => {
195
                        modal.setBody(html);
196
                        Templates.runTemplateJS(js);
197
                        modal.getRoot().get(0).querySelectorAll('form').forEach(form => {
198
                            createGroupEvent(form);
199
                        });
200
                        return html;
201
                    }).catch(Notification.exception);
202
 
203
                    // Apply and save method.
204
                    modal.getRoot().on(ModalEvents.save, (e) => {
205
                        e.preventDefault();
206
                        modal.getRoot().get(0).querySelectorAll('form').forEach(form => {
207
                            form.querySelector('#id_submitbutton').click();
208
                        });
209
                    });
210
 
211
                    modal.getRoot().on(ModalEvents.hidden, function() {
212
                        modal.destroy();
213
                    });
214
                    return modal;
215
                }).catch(Notification.exception);
216
 
217
 
218
            }
219
            /**
220
             * Event listner for create group forms in modal to init the group creation.
221
             * @param {Array} form
222
             */
223
            function createGroupEvent(form) {
224
                form.addEventListener('submit', function(e) {
225
                    e.preventDefault();
226
                    var formdata = new FormData(e.target);
227
                    if (e.target.querySelector('[name="name"]').value == ""
228
                        || e.target.querySelector('[name="courseid"]').value == '') {
229
                        return false;
230
                    }
231
                    var formdatastr = new URLSearchParams(formdata).toString();
232
                    var promises = AJAX.call([{
233
                        methodname: 'block_dash_groups_create_group',
234
                        args: {formdata: formdatastr}
235
                    }]);
236
 
237
                    promises[0].done((response) => {
238
                        return (response == true) ? window.location.reload() : '';
239
                    });
240
                    return true;
241
                });
242
            }
243
        }
244
    };
245
});