PageSourceSearch

https://ta-tum.com/js/modules/teacher/classroom_admin/AddClassParents.js

js ta-tum.com collected 2026-10-01 14:51:56 UTC 11,814 bytes, 305 lines download raw bytes

1/**
2 * Module AddClass Parents
3 * @description Controlador para agregar Parents a Classroom
4 * @author Alejandro Micheloud
5 */
6
7var AddClassParents = function (sco) {
8    var scope = sco;
9    var builded = false;
10    var bar = null;
11    var student_guid = null;
12
13    function reset() {
14        student_guid = null;
15    }
16    /**
17     * Se invoca cuando el módulo recibe foco
18     * @returns {undefined}
19     */
20    function show() {
21        console.log("AddClassParents:show();");
22        if (!builded) {
23            build();
24        } else {
25            getStudents();
26        }
27        scope.find(".mParents.d-parents").show();
28    }
29
30    /**
31     * Show loading
32     * @returns {undefined}
33     */
34    function showLoading() {
35        mTeacherHome.getAddClassModule().showLoading();
36    }
37
38    /**
39     * Hide loading
40     * @returns {undefined}
41     */
42    function hideLoading() {
43        mTeacherHome.getAddClassModule().hideLoading();
44    }
45
46    function showLoadingParentForm() {
47        getParentForm().find(".d-loader").show();
48    }
49
50    function hideLoadingParentForm() {
51        getParentForm().find(".d-loader").hide();
52    }
53
54    function getStudents() {
55        if (mTeacherHome.getAddClassModule().getMode() === "edit") {
56            showLoading();
57            mCom.ajax("classroom/students-parents/" + mTeacherHome.getAddClassModule().getClassroomGUID(), "GET", "", function (data, status) {
58                console.log("getStudents() result");
59                console.log(data);
60                console.log(status);
61                hideLoading();
62                if (status === "success") {
63                    renderStudents(data);
64                }
65            }, function (err, status, msg) {
66                hideLoading();
67                mToast.toast(lang.classroom_get_student_error, 3000);
68                console.log(err);
69                console.log(status);
70                console.log(msg);
71            });
72        }
73    }
74
75    function renderStudents(data) {
76
77        scope.find(".mParents ul.collection").html("");
78        var cantidad = data.length;
79        var cantidad_vinculados = 0;
80        for (var i = 0; i < cantidad; i++) {
81            scope.find(".mParents ul.collection").append(getParentItemHtml(data[i]));
82            scope.find(".mParents ul.collection li").last().data(data[i]);
83            var parents_html = "<ul>";
84
85            if (data[i].hasOwnProperty("parents")) {
86                if (data[i].parents.length > 0) {
87                    cantidad_vinculados++;
88                }
89                for (var j = 0; j < data[i].parents.length; j++) {
90                    if (data[i].parents[j].classroom_parent_guid !== null) {
91
92
93                        parents_html += "<li>" +
94                                lang.classroom_info_parent_linked
95                                .split('[FILIATION]').join(lang['classroom_info_parent_filiation_' + data[i].parents[j].filiation])
96                                .split('[NAME]').join(data[i].parents[j].parent_name + ' ' + data[i].parents[j].parent_lastname)
97                                .split('[DATE]').join(data[i].parents[j].parent_linked_at) +
98                                "</li>";
99                    }
100                }
101            }
102            parents_html += "</ul>";
103
104            scope.find(".mParents ul.collection li")
105                    .last()
106                    .addClass((data[i].student_linked_at !== null) ? "s-linked" : "")
107                    .find("div.parents")
108                    .html(parents_html);
109
110        }
111        // comportamientos
112        scope.find('.tooltipped').tooltip({delay: 50});
113        scope.find(".mParents ul.collection li a.btn-send-invite").click(availableSoon);
114        scope.find(".mParents ul.collection li .actions .btn").click(function (e) {
115            var action = $(this).attr("action");
116            var student = $(this).closest("li").data();
117            console.log("action: " + action);
118            switch (action) {
119                /*
120                 case "edit":
121                 student_guid = student.guid;
122                 var mForm = getParentForm();
123                 mForm.find(".d-header span").html("Alumno: " + getStudentName(student));
124                 mForm.find("#d-classroom-student-parent-email").val(student.temp_parent_email);
125                 mForm.modal('open');
126                 mForm.find("#d-classroom-student-parent-email").trigger("keyup");
127                 break;
128                 */
129                case "token":
130                    var html = String(lang.classroom_info_parent_token);
131                    html = html.split("[student]").join(getStudentName(student));
132                    html = html.split("[student_token]").join(student.student_link_code);
133                    html = html.split("[parent_token]").join(student.parent_link_code);
134                    //$("#modal-info .modal-content").html(html);
135                    //$("#modal-info").modal("open");
136                    mDiscover.openInfo(lang.classroom_info_student_token_title, html);
137                    break;
138            }
139            //console.log(student);
140        });
141
142        // from webservice
143        // scope.find(".d-parents ul.collection").append(());
144
145        if (bar === null) {
146            bar = new ProgressBar.Line(scope.find(".mParents .connect-progress")[0], {
147                strokeWidth: 4,
148                easing: 'easeInOut',
149                duration: 1400,
150                color: '#94b447',
151                trailColor: '#291f1a',
152                trailWidth: 4,
153                svgStyle: {width: '100%', height: '100%'}
154            });
155        }
156
157        var percent = cantidad_vinculados / cantidad;
158        if (cantidad === 0) {
159            percent = 0;
160        }
161        scope.find(".mParents .connect-status span").html(lang.classroom_info_parents_linked + cantidad_vinculados + " de " + cantidad + " ( " + Math.round(percent * 100) + "% )");
162        bar.animate(percent);  // Number from 0.0 to 1.0
163    }
164
165    function onChangeParentFormInput(e) {
166        e.preventDefault();
167        var $form = getParentForm();
168        console.log("onChangeParentFormInput:onChangeForm() ");
169
170        if ($form[0].checkValidity()) {
171            $form.find(".btn-submit").removeClass("disabled");
172            if (e.keyCode === 13) {
173                // formulario correcto, tecla ENTER presionada
174                $form.find(".btn-submit").click();
175            }
176        } else {
177            $form.find(".btn-submit").addClass("disabled");
178        }
179    }
180
181    /**
182     * Constructor de módulo
183     * @returns {undefined}
184     */
185    function build() {
186
187        builded = true;
188
189        // estructura de Parents TAB
190        scope.append(getParentsHtml());
191
192        getStudents();
193
194        // modal
195        $("#modal-container").append(getParentModal());
196        $fModal = getParentModalRef();
197        /*
198         $fModal.modal({
199         starting_top: '0%',
200         ending_top: '10%'
201         });
202         */
203        $fModal.find("input").off("keyup").on("keyup", onChangeParentFormInput);
204        //$fModal.find(".btn-submit").off("click").on("click", saveParentEmail);
205
206        // Invite invitation
207        scope.find(".mParents .btn-send-invite").click(availableSoon);
208
209        $("body").on("on_classroom-parent_join", function (e, notify) {
210            if (scope.find(".mParents.d-parents").is(":visible")) {
211                getStudents();
212            } else {
213                console.log("evento recibido, módulo fuera de foco");
214            }
215        });
216
217    }
218
219    /**
220     * Constructor
221     * @returns {undefined}
222     */
223    function init() {
224        // nada, latente hasta show
225    }
226    init();
227
228// helpers
229    function getParentModalRef() {
230        return $("#modal-container .modal.d-classroom-parent-form");
231    }
232    function getParentForm() {
233        return $("#modal-container .modal.d-classroom-parent-form form.d-form");
234    }
235    function getParentsHtml() {
236        return '<div class="d-tab-content d-parents mParents">' +
237                '    <div class="d-title">VINCULA PADRES O TUTORES</div>' +
238                '    <div class="d-information">Genera e imprime los códigos de vinculación o envía lso por correo electrónico a los padres de tus alumnos.</div>' +
239                '    <a href="javascript:void(0)" class="btn dark btn-send-invite">Generar códigos</a>' +
240                '    <div class="d-status-parents">' +
241                '            <div class="connect-progress"></div>' +
242                '            <div class="connect-status">' +
243                '                <span>...</span>' +
244                '            </div>' +
245                '    </div>' +
246                '    <div class="row d-list">' +
247                '        <div class="parents-of">Padres de</div>' +
248                '        <ul class="collection">' +
249                '        </ul>' +
250                '    </div>' +
251                '    <div class="row d-footer">' +
252                '    </div>' +
253                '</div>';
254    }
255    function getParentItemHtml(student) {
256        var icon = (student.avatar !== "") ? '<div class="icon circle" style="background-image:url(' + student.avatar + ');"></div>' : '<div class="icon"></div>';
257        return '<li class="collection-item">' +
258                '    <div class="parent">' +
259                '       ' + icon + 
260                '       <span>“' + getStudentName(student) + '”</span>' +
261                '    </div>' +
262                '    <a href="javascript:void(0);" class="btn dark btn-send-invite">Enviar invitación</a>' +
263                '    <div class="actions">' +
264                '       <div class="icon-action code btn btn-bitmap" title="Código" action="token"></div>' +
265                '    </div>' +
266                '    <div class="clear"></div>' +
267                '       <div class="parents"></div>' +
268                '</li>';
269    }
270    function getParentModal() {
271        return '  <div class="modal d-classroom-parent-form">' +
272                '    <form class="d-form">' +
273                '      <div class="modal-content">' +
274                '      <div class="d-header">' +
275                '        <i class="material-icons">person</i>' +
276                '        <span>Alumno </span>' +
277                '      </div>' +
278                '            <!-- LOADER -->' +
279                '            <div class="d-loader">' +
280                '                <div class="progress">' +
281                '                    <div class="indeterminate"></div>' +
282                '                </div>' +
283                '             </div>' +
284                '            <!-- END LOADER -->' +
285                '          <div class="row">' +
286                '              <div class="col s12 label">' +
287                '                  <label for="d-classroom-student-parent-email">Correo electrónico del Padre o Tutor</label>' +
288                '              </div>' +
289                '              <div class="col s12 input-field">' +
290                '                  <input type="text" id="d-classroom-student-parent-email" required="required" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" />' +
291                '              </div>' +
292                '          </div>' +
293                '       </div>' +
294                '       <div class="modal-footer">' +
295                '           <a href="javascript:void(0);" class="btn blue waves-effect waves-light disabled btn-submit">GUARDAR</a>&nbsp;' +
296                '           <a href="javascript:void(0);" class="btn btn-flat modal-action modal-close waves-effect waves-light btn-cancelar">CANCELAR</a>&nbsp;' +
297                '       </div>' +
298                '    </form>' +
299                '</div>';
300    }
301
302// public methods
303    this.show = show;
304    this.reset = reset;
305};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.