1/** 2 * Module School Admin: Edit Students 3 * @description Módulo para agregar docentes a colegio 4 * @author Alejandro Micheloud 5 */ 6 7function StudentModalEdit(_sm) { 8 9 var callback = null; 10 var mModal = null; 11 var _this = this; 12 var student = null; 13 var SchoolManager = _sm; 14 15 function reset() { 16 getModal().find("input.t-name").val(""); 17 getModal().find("input.t-lastname").val(""); 18 getModal().find("input.t-username").val(""); 19 getModal().find("input.t-password").val(""); 20 } 21 22 function getStudent() { 23 reset(); 24 mDiscover.showLoading(); 25 mCom.ajax("school/admin/student/" + student.guid, "GET", "", function (data, status) { 26 console.log(data); 27 student = data; 28 mDiscover.hideLoading(); 29 renderStudent(); 30 }, function (err, status, msg) { 31 mToast.toast("Problemas al buscar alumno", 3000); 32 mDiscover.hideLoading(); 33 }); 34 } 35 36 function linkToClassroom(classroom_ar) { 37 mDiscover.showLoading(); 38 var data = {}; 39 data.student_guid = student.guid; 40 data.student_name = student.name; 41 data.student_lastname = student.lastname; 42 data.classroom_ar = classroom_ar; 43 mCom.ajax("school/admin/student/link-to-classrooms", "PUT", data, function (data, status) { 44 console.log(data); 45 mDiscover.hideLoading(); 46 getStudent(); 47 }, function (err, status, msg) { 48 mToast.toast("Problemas al vincular", 3000); 49 mDiscover.hideLoading(); 50 }); 51 } 52 function unlinkClassroom(classroom_student_guid) { 53 mDiscover.showLoading(); 54 var data = {}; 55 data.classroom_student_guid = classroom_student_guid; 56 data.student_guid = student.guid; 57 mCom.ajax("school/admin/student/unlink-to-classroom", "PUT", data, function (data, status) { 58 console.log(data); 59 mDiscover.hideLoading(); 60 getStudent(); 61 }, function (err, status, msg) { 62 mToast.toast("Problemas al desvincular", 3000); 63 mDiscover.hideLoading(); 64 }); 65 } 66
67 function renderStudent() { 68 getModal().find("input.t-name").val(student.name); 69 getModal().find("input.t-lastname").val(student.lastname); 70 getModal().find("input.t-username").val(student.username); 71 getModal().find("input.t-password").val(student.password); 72 73 getModal().find("select.t-age").val(student.age); 74 if (student.is_active > 0) { 75 getModal().find("select.t-license").val("active"); 76 } else { 77 getModal().find("select.t-license").val("no-active"); 78 } 79 if (student.classrooms.length === 0) { 80 getModal().find(".d-value .linked-list").html(getHtmlEmptyLinkedClassrooms()); 81 } else { 82 getModal().find(".d-value .linked-list").html(""); 83 for (var i = 0; i < student.classrooms.length; i++) { 84 getModal().find(".d-value .linked-list").append(getHtmlSchool(student.classrooms[i])); 85 getModal().find(".d-value .linked-list .d-school") 86 .last() 87 .data(student.classrooms[i]) 88 .find(".d-ico-unlink") 89 .click(function () { 90 var classroom = $(this).closest(".d-school").data(); 91 mDiscover.openConfirm("Atención", "¿Seguro que desea desvincular al alumno de la clase '" + classroom.name + "'?", function (response) { 92 mModal.show(); 93 if (response) { 94 unlinkClassroom(classroom.classroom_student_guid); 95 } 96 }); 97 }); 98 } 99 } 100 getModal().find(".bt-edit-password").removeClass("disabled").off("click").on("click", showPassword); 101 getModal().find(".password-mask").show(); 102 } 103 function showPassword() { 104 getModal().find(".password-mask").hide(); 105 getModal().find(".bt-edit-password").addClass("disabled"); 106 } 107 108 function init() { 109 $("#modal-container .modal.d-modal-admin-school-edit-students").remove(); 110 $("#modal-container").append(getHtmlModal()); 111 mModal = new Modal(getModal()); 112 113 getModal().find(".d-modal-close").click(function () { 114 _this.hide(); 115 }); 116 getModal().find(".d-footer .btn-cancel").click(function () { 117 _this.hide(); 118 }); 119 120 // link to class 121 getModal().find(".btn.link-class").click(function () { 122 SchoolManager.getClassroomSelector().show(function (classroom_ar) { 123 linkToClassroom(classroom_ar); 124 mModal.show(); 125 }); 126 }); 127 128 getModal().find(".btn-save").click(function () { 129 if (!getModal().find("form")[0].checkValidity()) { 130 mToast.toast("Debes completar correctamente el formulario."); 131 return; 132 } 133 134 var data = {}; 135 data.school_guid = mDiscover.getUser().schools[0].guid; 136 data.guid = student.guid; 137 data.name = getModal().find("input.t-name").val(); 138 data.lastname = getModal().find("input.t-lastname").val(); 139 data.username = getModal().find("input.t-username").val(); 140 data.password = getModal().find("input.t-password").val();
141 data.age = getModal().find("select.t-age").val(); 142 data.is_verified = getModal().find("select.t-license").val() === "active"; 143 144 mDiscover.showLoading(); 145 mCom.ajax("school/admin/student", "PUT", data, function (data, status) { 146 console.log(data); 147 mDiscover.hideLoading(); 148 if (data.is_verified && !data.have_license) { 149 mToast.toast("Se guardó correctamente", 3000); 150 mToast.toast("Atención: No tienes licencias disponibles para alumno.", 6000); 151 } else { 152 mToast.toast("Se guardó correctamente", 3000); 153 } 154 if (isFunction(callback)) { 155 callback(); 156 } 157 mModal.hide(); 158 }, function (err, status, msg) { 159 mToast.toast("Problemas al guardar, por favor revisa que los datos sean correctos", 3000); 160 mDiscover.hideLoading(); 161 }); 162 }); 163 164 } 165 166 // helpers 167 function getModal() { 168 return $("#modal-container .modal.d-modal-admin-school-edit-students"); 169 } 170 function getHtmlModal() { 171 return '<div class="modal d-modal-admin-school-edit-students">' + 172 ' <div class="modal-content wrap-dialog-popup">' + 173 ' <div class="modal-body">' + 174 ' <div class="d-header">' + 175 ' <div class="d-title">Editar Alumno</div>' + 176 ' <div class="d-modal-close btn btn-bitmap"></div>' + 177 ' </div>' + 178 ' <div class="d-content">' + 179 ' <form class="d-form">' + 180 ' <div class="d-avatar"></div>' + 181 ' <div class="d-avatar-bg"></div>' + 182 ' <table class="f-teacher">' + 183 ' <tr>' + 184 ' <td class="d-label">Nombre</td>' + 185 ' <td class="d-value"><input type="text" class="simple-input t-name" required="required" pattern=".{2,30}" /></td>' + 186 ' </tr>' + 187 ' <tr>' + 188 ' <td class="d-label">Apellido</td>' + 189 ' <td class="d-value"><input type="text" class="simple-input t-lastname" required="required" pattern=".{2,30}" /></td>' + 190 ' </tr>' + 191 ' <tr style="display:none;">' + 192 ' <td class="d-label">Edad</td>' + 193 ' <td class="d-value">' + 194 ' <select class="simple-input t-age">' + 195 ' <option value="1">1</option>' + 196 ' <option value="2">2</option>' + 197 ' <option value="3">3</option>' + 198 ' <option value="4">4</option>' + 199 ' <option value="5">5</option>' + 200 ' <option value="6">6</option>' + 201 ' <option value="7">7</option>' + 202 ' <option value="8">8</option>' + 203 ' <option value="9">9</option>' + 204 ' <option value="10" selected="selected">10</option>' + 205 ' <option value="11">11</option>' + 206 ' <option value="12">12</option>' + 207 ' <option value="13">13</option>' + 208 ' <option value="14">14</option>' + 209 ' <option value="15">15</option>' + 210 ' <option value="16">16</option>' + 211 ' <option value="17">17</option>' + 212 ' <option value="18">18 o más</option>' + 213 ' </select>' + 214 ' </td>' + 215 ' </tr>' + 216 ' <tr>' + 217 ' <td class="d-label">Email</td>' + 218 ' <td class="d-value"><input type="text" class="simple-input t-username" disabled="disabled" required="required" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" /></td>' + 219 ' </tr>' + 220 ' <tr>' + 221 ' <td class="d-label">Contraseña</td>' + 222 ' <td class="d-value relative">' + 223 /* Al editar no se requiere clave, porque hay usuarios creados con google oauth que no tienen clave */ 224 ' <input type="text" class="simple-input t-password" pattern=".{0,40}" />' + 225 ' <div class="password-mask">#####################</div>' + 226 ' <div class="btn orange bt-edit-password">Editar</div>' + 227 ' </td>' + 228 ' </tr>' + 229 ' <tr>' + 230 ' <td class="d-label">Licencia</td>' + 231 ' <td class="d-value">' + 232 ' <select class="simple-input t-license" required="required">' + 233 ' <option value="active">Activa</option>' + 234 ' <option value="no-active">No activa</option>' + 235 ' </select>' + 236 ' </td>' + 237 ' </tr>' + 238 ' </table>' + 239 ' <table width="100%">' + 240 ' <tr>' + 241 ' <td class="d-label left"><div class="linked-label">Sus clases</div> <div class="btn link-class">Vincular clases <span class="d-icon"></span></div></td>' + 242 ' </tr>' + 243 ' <tr>' + 244 ' <td class="d-value">' + 245 ' <div class="linked-list">' + getHtmlEmptyLinkedClassrooms() + '</div>' + 246 ' </td>' + 247 ' </tr>' + 248 ' </table>' + 249 ' </form>' + 250 ' </div>' + 251 ' <div class="d-footer">' + 252 ' <div class="btn default btn-cancel">Descartar</div>' + 253 ' <div class="btn orange btn-save">Guardar</div>' + 254 ' </div>' + 255 ' </div>' + 256 ' </div>' + 257 '</div>'; 258 } 259 function getHtmlEmptyLinkedClassrooms() { 260 return '<div class="empty">Este alumno aún no tiene clases.<br>Para vincular una clase, pulsa en "Vincular clases"</div>'; 261 } 262 function getHtmlSchool(school) { 263 var avatar = (school.avatar !== "") ? school.avatar : "css/img/avatar_clase.jpg"; 264 var students = (school.amount_students === 1) ? "1 alumno" : school.amount_students + " alumnos"; 265 return '<div class="d-card d-school">' + 266 ' <div class="btn d-ico-unlink"></div>' + 267 ' <div class="d-avatar-school" style="background-image: url(' + avatar + ')"></div>' + 268 ' <div class="d-avatar-bg"></div>' + 269 ' <div class="d-name">' + school.name + '</div>' + 270 ' <div class="d-education-level">' + school.education_level + '</div>' + 271 ' <div class="d-amount-students">' + students + '</div>' + 272 '</div>'; 273 } 274 this.show = function (_student, _callback) { 275 student = _student; 276 callback = _callback; 277 mModal.show(); 278 getStudent(); 279 }; 280 this.hide = function () { 281 mModal.hide(); 282 if (isFunction(callback)) { 283 callback(null); 284 } 285 }; 286 287 288 init(); 289}
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.