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> ' + 296 ' <a href="javascript:void(0);" class="btn btn-flat modal-action modal-close waves-effect waves-light btn-cancelar">CANCELAR</a> ' + 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.