syllabus.php 100 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682
  1. <?php
  2. /*ini_set('display_errors', 1);
  3. ini_set('display_startup_errors', 1);
  4. error_reporting(E_ALL);*/
  5. require_once("../include/constantes.php");
  6. require_once("../include/util.php");
  7. require_once("../include/bd_pdo.php");
  8. require_once("../classes/ValidaSesion.php");
  9. require_once("../classes/MainMenu.php");
  10. $menu = 2;
  11. $submenu = 25;
  12. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  13. $objSesion = new ValidaSesion($pdo, $submenu, APSA);
  14. if(!$objSesion->tieneAcceso()){
  15. $objSesion->terminaSesion();
  16. }
  17. $objSesion->validaPeriodoUsuario();//si no tiene periodo manda a main
  18. //-------
  19. function buscaVacacion($fecha, $vacacionesArr){
  20. $i=0;
  21. foreach($vacacionesArr as $vacacion){
  22. if ($vacacion["fecha"] == $fecha){
  23. return $i;
  24. }
  25. $i++;
  26. }
  27. return false;
  28. }
  29. function getSesiones($arr, $num){
  30. foreach($arr as $ses){
  31. if($ses["sesion"] == $num ){
  32. return $ses["subsesiones"];
  33. }
  34. }
  35. return array();
  36. }
  37. function en_dias($dia, $arr){
  38. foreach($arr as $e){
  39. if($e["dia"] == $dia) return true;
  40. }
  41. return false;
  42. }
  43. //Obtiene materias de profesor
  44. if(empty($matArr[2])){
  45. $stmt = $pdo->prepare('Select * from fs_materiasprofesor(:per, :usr) ');
  46. }
  47. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  48. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  49. if(!$stmt->execute()){
  50. print_r($stmt->errorInfo());
  51. $errorDesc = "Ocurrió un error al cargar los planes de estudios";
  52. exit();
  53. }else
  54. $mat_rs = $stmt->fetchAll();
  55. $stmt->closeCursor();
  56. $stmt = null;
  57. //Obtiene fechas de periodo
  58. $stmt = $pdo->prepare('Select * from fs_periodo(:periodo, NULL, NULL, true)');
  59. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  60. if(!$stmt->execute()){
  61. //print_r($stmt->errorInfo());
  62. $errorDesc = "Ocurrió un error al cargar los datos del periodo";
  63. }else{
  64. $periodo_rs = $stmt->fetch();
  65. }
  66. $stmt->closeCursor();
  67. $fecha_min = $periodo_rs["Periodo_fecha_inicial"];
  68. $fecha_max = $periodo_rs["Periodo_fecha_final"];
  69. $fecha_limite = date ("Y-m-d", strtotime("+18 day", strtotime($fecha_min))); //18 días / 3 semanas
  70. $fecha_limite = date ("Y-m-d", strtotime("+42 day", strtotime($fecha_min))); //18 días / 3 semanas
  71. //Obtiene fechas de periodo
  72. $stmt = $pdo->prepare('Select * from fs_syllabus_excepcion(:periodo, :prof)');
  73. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  74. $stmt->bindParam(":prof", $_SESSION["usuario_id"]);
  75. if(!$stmt->execute()){
  76. //print_r($stmt->errorInfo());
  77. $errorDesc = "Ocurrió un error al cargar los datos del syllabus";
  78. }else{
  79. $ex_rs = $stmt->fetch();
  80. }
  81. $stmt->closeCursor();
  82. if(!empty($ex_rs) && count($ex_rs)>0){
  83. $fecha_nueva =
  84. $t_fecha_limite = strtotime($fecha_limite);
  85. $fecha_nueva = strtotime($ex_rs["SyllabusExcepcion_fecha"]);
  86. if ($fecha_nueva > $t_fecha_limite) {
  87. $fecha_limite = date ("Y-m-d", $fecha_nueva); //18 días / 3 semanas
  88. }
  89. }
  90. //------------
  91. if(isset($_POST["materia"])){
  92. $filter_mat = $_POST["materia"];
  93. $filter_materia_nom = $_POST["materia_nom"];
  94. $filter_gpo_nom = $_POST["gpo_nom"];
  95. $matArr = explode("_",$filter_mat);
  96. //--
  97. if(empty($matArr[2])){
  98. $stmt = $pdo->prepare('Select * from fs_syllabus(:periodo, :prof, :mat, :gpo, NULL )');
  99. }else{
  100. $stmt = $pdo->prepare('Select * from fs_syllabus(:periodo, :prof, :mat, :gpo, :sub )');
  101. $stmt->bindParam(":sub", $matArr[2]);
  102. }
  103. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  104. $stmt->bindParam(":prof", $_SESSION["usuario_id"]);
  105. $stmt->bindParam(":mat", $matArr[0]);
  106. $stmt->bindParam(":gpo", $matArr[1]);
  107. if(!$stmt->execute()){
  108. //print_r($stmt->errorInfo());
  109. $errorDesc = "Ocurrió un error al cargar los datos del sýllabus";
  110. }else{
  111. $syllabus_rs = $stmt->fetch();
  112. }
  113. $stmt->closeCursor();
  114. //Obtiene grupos
  115. $query = "";
  116. //---Tipo de sesiones plan cátedra
  117. $stmt = $pdo->prepare('Select * from fs_sesioncatedra_tipo(NULL)');
  118. if(!$stmt->execute()){
  119. //print_r($stmt->errorInfo());
  120. $errorDesc = "Ocurrió un error al cargar los días de las materias";
  121. }else{
  122. $tipoSesionArr = $stmt->fetchAll();
  123. }
  124. $stmt->closeCursor();
  125. $stmt = null;
  126. //-------------------------
  127. //Periodos con nombramientos
  128. $stmt = $pdo->prepare('Select * from fs_periodosprofesor(:usr_id) WHERE "Periodo_hasHistorico" is true order by "Periodo_id" DESC');
  129. $stmt->bindParam(":usr_id", $_SESSION["usuario_id"]);
  130. if(!$stmt->execute()){
  131. $errorDesc = "Ocurrió un error al cargar los periodos del usuario";
  132. }else{
  133. $periodosN_rs = $stmt->fetchAll();
  134. }
  135. $stmt->closeCursor();
  136. //-------------------------
  137. //Obtiene materias de profesor y los dias que da clase
  138. if(empty($matArr[2])){
  139. $stmt = $pdo->prepare('Select * from fs_materiadias(:usr, :mat, :gpo, NULL)');
  140. }else{
  141. $stmt = $pdo->prepare('Select * from fs_materiadias(:usr, :mat, :gpo, :sub)');
  142. $stmt->bindParam(":sub", $matArr[2]);
  143. }
  144. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  145. $stmt->bindParam(":mat", $matArr[0]);
  146. $stmt->bindParam(":gpo", $matArr[1]);
  147. if(!$stmt->execute()){
  148. //print_r($stmt->errorInfo());
  149. $errorDesc = "Ocurrió un error al cargar los días de las materias";
  150. }else{
  151. $rs = $stmt->fetchAll();
  152. $diasMatArr = array();
  153. foreach($rs as $dia){
  154. $diasMatArr[] = array( "dia"=> $dia["Dia_id"], "hora"=>substr($dia["Horario_hora"],0, 5));
  155. }
  156. }
  157. $stmt->closeCursor();
  158. $stmt = null;
  159. // ---- Obtiene fechas de vacaciones
  160. $stmt = $pdo->prepare('select * from fs_calendarioevento_categoria(:fini, :ffin, 2, :periodo)');
  161. $stmt->bindParam(":fini", $fecha_min);
  162. $stmt->bindParam(":ffin", $fecha_max);
  163. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  164. if(!$stmt->execute()){
  165. $errorDesc = "Ocurrió un error al cargar las fechas de vacaciones";
  166. }else{
  167. $vacaciones_rs = $stmt->fetchAll();
  168. }
  169. $stmt->closeCursor();
  170. $stmt = null;
  171. $vacacionesArr = array();//Guarda los días individuales de vacaciones
  172. foreach($vacaciones_rs as $evento){
  173. $fecha = fechaGuion($evento["CalendarioEvento_fecha"]);
  174. switch($evento["CalendarioRepeticion_id"]){
  175. case 1: //diario
  176. while (strtotime($fecha) <= strtotime($evento["CalendarioReglas_fecha_final"])) {
  177. $vacacionesArr[] = array("fecha"=> $fecha, "titulo"=>$evento["CalendarioEvento_titulo"]);
  178. $fecha = date ("Y-m-d", strtotime("+1 day", strtotime($fecha)));
  179. }
  180. break;
  181. case 2: //semanal
  182. $diasArr = explode(",", $evento["CalendarioReglas_dias_str"]);
  183. while (strtotime($fecha) <= strtotime($evento["CalendarioReglas_fecha_final"])) {
  184. if(in_array(date("w", strtotime($fecha)), $diasArr) ){//si es el día que quiero
  185. $vacacionesArr[] = array("fecha"=> $fecha, "titulo"=>$evento["CalendarioEvento_titulo"]);
  186. }
  187. $fecha = date ("Y-m-d", strtotime("+1 day", strtotime($fecha)));
  188. }
  189. break;
  190. case 3://mensual
  191. $diasArr = explode(",", $evento["CalendarioReglas_dias_str"]);
  192. //reglas
  193. $weekTxt = array(1=>"first", 2=>"second", 3=>"third", 4=>"fourth", -1=>"last");
  194. $dayname = array("sun", "mon", "tue", "wed", "thu", "fri", "sat");
  195. $fecha = date ("Y-m-01", strtotime($fecha));//empieza a revisar en el primer día del mes
  196. $semana = $evento["CalendarioReglas_semana"];
  197. while (strtotime($fecha) <= strtotime($evento["CalendarioReglas_fecha_final"])) {
  198. foreach($diasArr as $d){
  199. //echo "-->". intval(date("w", strtotime($fecha)))." == ". intval($d)."[".$fecha."]";
  200. if($semana == 1 && intval(date("w", strtotime($fecha))) == intval($d) ){//si el día actual es el que quiero lo guarda
  201. $vacacionesArr[] = array("fecha"=> $fecha, "titulo"=>$evento["CalendarioEvento_titulo"]);
  202. }else{//si no calcula siguiente día
  203. if(intval(date("w", strtotime($fecha))) == intval($d)){
  204. $fechaTmp = date ("Y-m-d", strtotime($weekTxt[$semana-1]." ".$dayname[$d], strtotime($fecha)));
  205. }else{
  206. $fechaTmp = date ("Y-m-d", strtotime($weekTxt[$semana]." ".$dayname[$d], strtotime($fecha)));
  207. }
  208. $vacacionesArr[] = array("fecha"=> $fecha, "titulo"=>$evento["CalendarioEvento_titulo"]);
  209. }
  210. }
  211. $fecha = date ("Y-m-01", strtotime("+1 month", strtotime($fecha)));//siguiente mes primer día
  212. }
  213. break;
  214. default: //no se repite
  215. $vacacionesArr[] = array("fecha"=> $fecha, "titulo"=>$evento["CalendarioEvento_titulo"]);
  216. }
  217. }
  218. //----- Calcula fechas de clases
  219. $MESES = array(1=>"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
  220. $DIAS = array("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado");
  221. $calendario = array();
  222. $fechasArr = array();
  223. $fecha = $fecha_min;
  224. $semOld=1;
  225. $cont = 0;
  226. while (strtotime($fecha) <= strtotime($fecha_max)) {
  227. if(date("w", strtotime($fecha)) == $diasMatArr[$cont%count($diasMatArr)]["dia"]) {//si es el día que quiero
  228. if($semOld != floor($cont/count($diasMatArr))+1){
  229. $sem = floor($cont/count($diasMatArr))+1;
  230. $semOld = $sem;
  231. $calendario[] = array("semana"=>$sem-1, "fechas"=>$fechasArr);
  232. $fechasArr = array();
  233. }
  234. $vacPos = buscaVacacion($fecha, $vacacionesArr);
  235. //echo $cont.") Fecha: ".$fecha." [".($vacPos===false?"false":"true")."]<br>";
  236. if($vacPos === false){//no vacaciones
  237. $fechasArr[] = array("numSesion"=>$cont+1, "fecha"=>fechaSlash($fecha)." ".$diasMatArr[$cont%count($diasMatArr)]["hora"], "mes"=>date("n", strtotime($fecha)), "habil"=>true, "dia"=>$DIAS[date("w", strtotime($fecha))-1], "titulo"=>"");
  238. //Si el día de la fecha no es el día del siguiente evento O se reinicia el arreglo de días
  239. //echo "$cont)". fechaSlash($fecha)." ";
  240. //echo "[".date("w", strtotime($fecha))." != ".$diasMatArr[($cont+1)%count($diasMatArr)]["dia"]."] || [ 0 == ".($cont+1)%count($diasMatArr)."]<br>";
  241. if(date("w", strtotime($fecha)) != $diasMatArr[$cont%count($diasMatArr)]["dia"] || ($cont+1)%count($diasMatArr)==0){
  242. $fecha = date ("Y-m-d", strtotime("+1 day", strtotime($fecha)));
  243. //echo "Cambia día<br>";
  244. }
  245. }else{//vacaciones
  246. $fechasArr[] = array("numSesion"=> 0,"fecha"=>fechaSlash($fecha), "mes"=>date("n", strtotime($fecha)), "habil"=>false, "dia"=>$DIAS[date("w", strtotime($fecha))-1], "titulo"=>$vacacionesArr[$vacPos]["titulo"]);
  247. $aux = $cont/count($diasMatArr);//para que sean de la misma semana
  248. //mientras sea el mismodía de la misma semana
  249. //while(date("w", strtotime($fecha)) == $diasMatArr[($cont+1)%count($diasMatArr)]["dia"] && $aux == ($cont+1)/count($diasMatArr)){
  250. //echo "-- while ".date("w", strtotime($fecha)) ."==". $diasMatArr[$cont%count($diasMatArr)]["dia"]." || ".($cont+1)%count($diasMatArr)."==0<br>";
  251. if(date("w", strtotime($fecha)) != $diasMatArr[$cont%count($diasMatArr)]["dia"] || ($cont+1)%count($diasMatArr)==0){
  252. while(date("w", strtotime($fecha)) == $diasMatArr[$cont%count($diasMatArr)]["dia"] && ($cont+1)%count($diasMatArr)!=0){
  253. $cont++;
  254. }
  255. $fecha = date ("Y-m-d", strtotime("+1 day", strtotime($fecha)));
  256. }
  257. /*if(date("w", strtotime($fecha)) != $diasMatArr[$cont%count($diasMatArr)]["dia"] || ($cont+1)%count($diasMatArr)==0){
  258. $fecha = date ("Y-m-d", strtotime("+1 day", strtotime($fecha)));
  259. }*/
  260. }
  261. $cont++;
  262. }else{
  263. $fecha = date ("Y-m-d", strtotime("+1 day", strtotime($fecha)));
  264. //echo "Cambia día else<br>";
  265. }
  266. }
  267. if($semOld != floor($cont/count($diasMatArr))){
  268. $sem = floor($cont/count($diasMatArr))+1;
  269. }else{
  270. $sem = floor($cont/count($diasMatArr));
  271. }
  272. $calendario[] = array("semana"=>$sem, "fechas"=>$fechasArr);
  273. $mesMin = $calendario[0]["fechas"][0]["mes"];
  274. $mesMax = $calendario[count($calendario)-1]["fechas"][0]["mes"];
  275. $cont = 1;
  276. $i=0;
  277. $j=0;
  278. for($i=0; $i< count($calendario); $i++){
  279. for($j=0; $j< count($calendario[$i]["fechas"]); $j++){
  280. if($calendario[$i]["fechas"][$j]["habil"]){
  281. $calendario[$i]["fechas"][$j]["numSesion"] = $cont;
  282. $cont++;
  283. }
  284. }
  285. }
  286. //---Obtiebe contenido de sesiones plan cátedra
  287. if(empty($matArr[2])){
  288. $stmt = $pdo->prepare('Select * from fs_sesioncatedra(:mat, :usr, :gpo, NULL, NULL)');
  289. }else{
  290. $stmt = $pdo->prepare('Select * from fs_sesioncatedra(:mat, :usr, :gpo, :sub, NULL)');
  291. $stmt->bindParam(":sub", $matArr[2]);
  292. }
  293. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  294. $stmt->bindParam(":mat", $matArr[0]);
  295. $stmt->bindParam(":gpo", $matArr[1]);
  296. if(!$stmt->execute()){
  297. //print_r($stmt->errorInfo());
  298. $errorDesc = "Ocurrió un error al cargar las sesiones del plan de cátedra";
  299. }else{
  300. $rs = $stmt->fetchAll();
  301. $sesionesArr = array();
  302. $ses_old = -1;
  303. $subsesionArr = array();
  304. $i = -1;
  305. foreach($rs as $ses){
  306. if($ses_old != $ses["SesionCatedra_numero"]){
  307. $i++;
  308. $sesionesArr[$i]=array("sesion"=>$ses["SesionCatedra_numero"], "subsesiones"=>array());
  309. $ses_old = $ses["SesionCatedra_numero"];
  310. }
  311. $sesionesArr[$i]["subsesiones"][] = array("desc"=>$ses["SesionCatedra_desc"], "tipo_id"=>$ses["SesionCatedraTipo_id"], "tipo"=>$ses["SesionCatedraTipo_desc"], "color"=>$ses["SesionCatedraTipo_color"]);
  312. //$diasMatArr[] = array( "dia"=> $dia["Dia_id"], "hora"=>substr($dia["Horario_hora"],0, 5));
  313. }
  314. }
  315. //print_r($sesionesArr); exit();
  316. $stmt->closeCursor();
  317. $stmt = null;
  318. //Obtiene mapa
  319. $stmt = $pdo->prepare('select * from fs_atributoegreso_materia(:mat)');
  320. $stmt->bindParam(":mat", $matArr[0]);
  321. if(!$stmt->execute()){
  322. $errorDesc = "Ocurrió un error al cargar los datos de los atributos de egreso.";
  323. }else{
  324. $atributos_rs = $stmt->fetchAll();
  325. }
  326. }
  327. ?>
  328. <!DOCTYPE html>
  329. <html lang="es" prefix="og: http://ogp.me/ns#">
  330. <head>
  331. <title>APSA - Facultad de Ingeniería</title>
  332. <meta charset="utf-8">
  333. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  334. <link rel="icon" type="image/png" href="../img/favicon.png" />
  335. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  336. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  337. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  338. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  339. <link rel="stylesheet" href="../css/jquery-ui.css" type="text/css">
  340. <link rel="stylesheet" href="../css/calendar.css" type="text/css">
  341. <link rel="stylesheet" href="./css/richtext.css" type="text/css">
  342. <script src="../js/util.js"></script>
  343. <style>
  344. #copy-box {
  345. position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #fea; border-radius: 5px; padding: 10px 20px;
  346. display: none; z-index:1000;
  347. box-shadow: -1px 5px 5px 1px rgba(0,0,0,0.61);
  348. -webkit-box-shadow: -1px 5px 5px 1px rgba(0,0,0,0.61);
  349. -moz-box-shadow: -1px 5px 5px 1px rgba(0,0,0,0.61);
  350. }
  351. </style>
  352. </head>
  353. <body>
  354. <div>
  355. <?php
  356. //--- Objeto que pinta menu
  357. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, APSA, "Syllabus de materias");//usr, menu, pdo, sist
  358. $menuObj->printMenu();
  359. //--Manejo de errores y mensajes de exito
  360. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  361. switch ($_GET["error"]){
  362. case 0: $errorDesc = "No se reciberon los datos."; break;
  363. case 1: $errorDesc = "Ocurrió un error al insertar los datos del syllabus."; break;
  364. case 2: $errorDesc = "No tienes permisos para realizar esa acción."; break;
  365. case 3: $errorDesc = "Ocurrió un error al cargar los datos del syllabus."; break;
  366. case 4: $errorDesc = "Ocurrió un error al cargar los datos del plan de cátedra."; break;
  367. case 5: $errorDesc = "Ocurrió un error al cargar los datos de los atributos de egreso."; break;
  368. }
  369. }
  370. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  371. switch ($_GET["ok"]){
  372. case 0: $successDesc = "El syllabus se actualizó correctamente."; break;
  373. case 1: $successDesc = "El plan de cátedra se actualizó correctamente."; break;
  374. }
  375. }
  376. ?>
  377. <main class="container-fluid content marco">
  378. <?php include_once("../include/errorMessage.php");?>
  379. <?php include("../include/periodoCambio.php");?>
  380. <!-- Filtro -->
  381. <div class="row">
  382. <div class="col-12">
  383. <form action="syllabus.php" method="post" onsubmit="return validaForm()">
  384. <input type="hidden" id="filter_gpo_nom" name="gpo_nom" value="<?php if(isset($filter_gpo_nom)) echo $filter_gpo_nom;?>">
  385. <input type="hidden" id="filter_materia_nom" name="materia_nom" value="<?php if(isset($filter_materia_nom)) echo $filter_materia_nom;?>">
  386. <div class="form-box form-box-info">
  387. <div class="form-group row">
  388. <label for="filter_materia" class="col-4 col-form-label">Materia y grupo</label>
  389. <div class="col-6">
  390. <div class="datalist datalist-select mb-1 w-100" id="dlMateria">
  391. <div class="datalist-input">Mostrar todas</div>
  392. <span class="ing-buscar icono"></span>
  393. <ul style="display:none">
  394. <?php foreach($mat_rs as $mat) { ?>
  395. <li data-gpo_nom="<?php echo $mat["Grupo_desc"].$mat["Carrera_prefijo"];?>" data-id="<?php echo $mat["Materia_id"]."_".$mat["Grupo_id"]."_".$mat["Submateria_id"];?>" <?php if(isset($filter_mat) && $filter_mat == ($mat["Materia_id"]."_".$mat["Grupo_id"]."_".$mat["Submateria_id"])){
  396. echo "class='selected'";}?> ><?php echo $mat["Materia_desc"]." - ".$mat["Grupo_desc"].$mat["Carrera_prefijo"];?></li>
  397. <?php }?>
  398. </ul>
  399. <input type="hidden" id="filter_materia" name="materia" value="">
  400. </div>
  401. </div>
  402. </div>
  403. </div>
  404. <div class="form-group row">
  405. <div class="col-12 text-center">
  406. <button type="submit" class="btn btn-outline-primary"><?php echo $ICO["buscar"]; ?> Ver Syllabus y plan de cátedra</button>
  407. <!--<button type="button" class="btn btn-outline-danger btn-reset"><?php echo $ICO["borrar"]?> Limpiar</button>-->
  408. </div>
  409. </div>
  410. </form>
  411. </div>
  412. </div>
  413. <?php if(isset($_POST["materia"])){ ?>
  414. <div class="d-flex mt-5 mb-4 resp-block">
  415. <div class="flex-grow-1"><h2 class="font-weight-bold subtitle pr-2"><?php echo $filter_materia_nom;?></h2> </div>
  416. <div class="text-nowrap">
  417. <a href="#" data-toggle="modal" data-target="#modal" class="btn btn-outline-secondary"><span class="ing-copiar"></span> Copiar datos desde...</a>
  418. </div>
  419. </div>
  420. <ul class="nav nav-tabs d-print-none mb-4 resp-block" id="myTab" role="tablist">
  421. <li class="nav-item">
  422. <a class="nav-link active" id="tab1-tab" data-toggle="tab" href="#tab1" role="tab" aria-controls="syllabus" aria-selected="true">Syllabus</a>
  423. </li>
  424. <li class="nav-item">
  425. <a class="nav-link" id="tab2-tab" data-toggle="tab" href="#tab2" role="tab" aria-controls="plan" aria-selected="false">Plan de cátedra</a>
  426. </li>
  427. </ul>
  428. <div class="tab-content resp-block" id="TabContent">
  429. <div class="tab-pane fade show active" id="tab1" role="tabpanel" aria-labelledby="tab1-tab">
  430. <?php if (isset($syllabus_rs)){ ?>
  431. <div class="text-right mb-2">
  432. <form action="./export/pdf_syllabus.php" target="_blank" method="post">
  433. <input type="hidden" name="mat" value="<?php echo $matArr[0];?>">
  434. <input type="hidden" name="gpo" value="<?php echo $matArr[1];?>">
  435. <input type="hidden" name="gpo_nom" value="<?php echo $filter_gpo_nom;?>">
  436. <input type="hidden" name="sub" value="<?php if (isset($matArr[2])){ echo $matArr[2];}?>">
  437. <?php if(strtotime(date("Y-m-d")) <= strtotime($fecha_limite)){ ?>
  438. <button type="button" class="btn btn-outline-primary submitBtn" data-tipo="1"><?php echo $ICO["aceptar"];?> Guardar Syllabus</button>
  439. <?php } ?>
  440. <button type="submit" class="btn btn-outline-secondary"><?php echo $ICO["descargar"];?>Mostrar pdf</button>
  441. </form>
  442. </div>
  443. <?php if(strtotime(date("Y-m-d")) <= strtotime($fecha_limite)){ ?>
  444. <p><button class="btn btn-outline-danger border-0 btn-sm" data-tipo="1" data-toggle="modal" data-target="#modal_confirm"><?php echo $ICO["borrar"];?> Borrar todo</button></p>
  445. <?php } ?>
  446. <div class="row">
  447. <div class="col-12" id="accordion">
  448. <?php if(strtotime(date("Y-m-d")) > strtotime($fecha_limite)){ ?>
  449. <div class="alert alert-warning" role="alert">
  450. <h5 class="text-center my-0"><span class="ing-retardo"></span> El periodo para editar el Syllabus se ha terminado.</h5>
  451. </div>
  452. <?php }?>
  453. <form action="./action/syllabus_insert.php" method="post" id="formaSyllabus">
  454. <input type="hidden" value="<?php echo $filter_mat; ?>" name="materia" id="materiaSyllabus">
  455. <div class="form-box py-0 px-3 mb-0">
  456. <div class="form-group row bg-light mb-0 py-4 rounded-top">
  457. <label for="texto" class="col-3 col-form-label">Información general *</label>
  458. <div class="col-9">
  459. <textarea name="info" id="info" class="richtext" rows="4"><?php if(!empty($syllabus_rs["Syllabus_informacion"])){echo $syllabus_rs["Syllabus_informacion"];}?></textarea>
  460. </div>
  461. </div>
  462. <?php if(isset($atributos_rs) && count($atributos_rs) > 0){ ?>
  463. <div class="form-group row bg-light mb-0 pb-4 rounded-top">
  464. <label for="texto" class="col-3 col-form-label">Atributos de egreso</label>
  465. <div class="col-9">
  466. <?php
  467. $html = "<ul>";
  468. foreach($atributos_rs as $atr){
  469. $html.="<li><b>Atributo {$atr["AtributoEgreso_id"]} nivel {$atr["AtributoNivel_desc"]}:</b> {$atr["AtributoEgreso_desc"]}</li>";
  470. }
  471. $html.="</ul>";
  472. echo $html;
  473. ?>
  474. </div>
  475. </div>
  476. <?php } ?>
  477. </div>
  478. <h4 class="text-primary mb-0 alert-heading bg-light py-3 pl-5 pr-3 rounded ">
  479. <!--<a data-toggle="collapse" href="#collapseInfo" role="button" aria-expanded="true" aria-controls="collapseExample" class="d-block">
  480. <i class="ing-caret ing-fw float-right"></i>!-->INFORMACIÓN DE LA ASIGNATURA
  481. <!--</a>-->
  482. </h4>
  483. <div class="form-box py-4 px-3 mb-0 border-light border" id="collapseInfo" data-parent="#accordion"> <!-- class collapse show -->
  484. <div class="form-group row">
  485. <label for="texto" class="col-3 col-form-label">Descripción *</label>
  486. <div class="col-9">
  487. <textarea name="desc" id="desc" class="richtext" rows="5"><?php if(!empty($syllabus_rs["Syllabus_desc"])){ echo $syllabus_rs["Syllabus_desc"];}?></textarea>
  488. </div>
  489. </div>
  490. <div class="form-group row">
  491. <label for="texto" class="col-3 col-form-label">Objetivos *</label>
  492. <div class="col-9">
  493. <textarea name="obj" id="obj" class="richtext" rows="5"><?php if(!empty($syllabus_rs["Syllabus_obj"])){echo $syllabus_rs["Syllabus_obj"];}?></textarea>
  494. </div>
  495. </div>
  496. <div class="form-group row">
  497. <label for="texto" class="col-3 col-form-label">Capacidades y habilidades que desarrollar *</label>
  498. <div class="col-9">
  499. <textarea name="capacidades" id="capacidades" class="richtext" rows="5"><?php if(!empty($syllabus_rs["Syllabus_capacidades"])){echo $syllabus_rs["Syllabus_capacidades"];}?></textarea>
  500. </div>
  501. </div>
  502. <div class="form-group row">
  503. <label for="texto" class="col-3 col-form-label">Prerrequisitos *</label>
  504. <div class="col-9">
  505. <textarea name="prerrequisitos" id="prerrequisitos" class="richtext" rows="5"><?php if(!empty($syllabus_rs["Syllabus_prerrequisitos"])){echo $syllabus_rs["Syllabus_prerrequisitos"];}?></textarea>
  506. </div>
  507. </div>
  508. <div class="form-group row">
  509. <label for="texto" class="col-3 col-form-label">Temario *</label>
  510. <div class="col-9">
  511. <textarea name="temario" id="temario" class="richtext-table" rows="15"><?php if(!empty($syllabus_rs["Syllabus_temario"])){echo $syllabus_rs["Syllabus_temario"];}?></textarea>
  512. </div>
  513. </div>
  514. <div class="form-group row">
  515. <label for="texto" class="col-3 col-form-label">Construcción de la calificación final *</label>
  516. <div class="col-9">
  517. <textarea name="calificacion" id="calificacion" class="richtext-table" rows="10"><?php if(!empty($syllabus_rs["Syllabus_calificacion"])){echo $syllabus_rs["Syllabus_calificacion"];}?></textarea>
  518. </div>
  519. </div>
  520. <div class="form-group row">
  521. <label for="texto" class="col-3 col-form-label">Fechas importantes *</label>
  522. <div class="col-9">
  523. <textarea name="fechas" id="fechas" class="richtext-table" rows="10"><?php if(!empty($syllabus_rs["Syllabus_fechas"])){echo $syllabus_rs["Syllabus_fechas"];}?></textarea>
  524. </div>
  525. </div>
  526. </div>
  527. <h4 class="text-primary mb-0 alert-heading bg-light py-3 pl-5 pr-3 rounded "ah >
  528. <!--<a class="collapsed d-block" data-toggle="collapse" href="#collapseLin" role="button" aria-expanded="false" aria-controls="collapseExample">
  529. <i class="ing-caret ing-fw float-right"></i>-->LINEAMIENTOS GENERALES<!--</a> -->
  530. </h4>
  531. <div class="form-box py-4 px-3 mb-0 border-light border" id="collapseLin" data-parent="#accordion"> <!-- class collapse -->
  532. <div class="form-group row">
  533. <label for="texto" class="col-3 col-form-label">De la asistencia y puntualidad *</label>
  534. <div class="col-9">
  535. <textarea name="asistencia" id="asistencia" class="richtext" rows="15"><?php if(!empty($syllabus_rs["Syllabus_asistencia"])){echo $syllabus_rs["Syllabus_asistencia"];}?></textarea>
  536. </div>
  537. </div>
  538. <div class="form-group row">
  539. <label for="texto" class="col-3 col-form-label">Del comportamiento en clase *</label>
  540. <div class="col-9">
  541. <textarea name="comportamiento" id="comportamiento" class="richtext" rows="15"><?php if(!empty($syllabus_rs["Syllabus_comportamiento"])){echo $syllabus_rs["Syllabus_comportamiento"];}?></textarea>
  542. </div>
  543. </div>
  544. <div class="form-group row">
  545. <label for="texto" class="col-3 col-form-label">De los exámenes *</label>
  546. <div class="col-9">
  547. <textarea name="examenes" id="examenes" class="richtext" rows="15"><?php if(!empty($syllabus_rs["Syllabus_examenes"])){echo $syllabus_rs["Syllabus_examenes"];}?></textarea>
  548. </div>
  549. </div>
  550. <div class="form-group row">
  551. <label for="texto" class="col-3 col-form-label">De las tareas, prácticas y exposiciones *</label>
  552. <div class="col-9">
  553. <textarea name="tareas" id="tareas" class="richtext" rows="15"><?php if(!empty($syllabus_rs["Syllabus_tareas"])){echo $syllabus_rs["Syllabus_tareas"];}?></textarea>
  554. </div>
  555. </div>
  556. <div class="form-group row">
  557. <label for="texto" class="col-3 col-form-label">Trabajos de investigación *</label>
  558. <div class="col-9">
  559. <textarea name="investigacion" id="investigacion" class="richtext" rows="15"><?php if(!empty($syllabus_rs["Syllabus_investigacion"])){echo $syllabus_rs["Syllabus_investigacion"];}?></textarea>
  560. </div>
  561. </div>
  562. </div>
  563. <h4 class="text-primary mb-0 alert-heading bg-light py-3 pl-5 pr-3 rounded "ah >
  564. <!--<a class="collapsed d-block" data-toggle="collapse" href="#collapseBib" role="button" aria-expanded="false" aria-controls="collapseExample">
  565. <i class="ing-caret ing-fw float-right"></i>-->BIBLIOGRAFÍA<!--</a> -->
  566. </h4>
  567. <div class="form-box py-4 px-3 mb-0 border-light border" id="collapseBib" data-parent="#accordion">
  568. <div class="form-group row">
  569. <label for="texto" class="col-3 col-form-label">Bibliografía recomendada *</label>
  570. <div class="col-9">
  571. <textarea name="bibliografia" id="bibliografia" class="richtext" rows="15"><?php if(!empty($syllabus_rs["Syllabus_bibliografia"])){echo $syllabus_rs["Syllabus_bibliografia"];}?></textarea>
  572. </div>
  573. </div>
  574. </div>
  575. <?php if(strtotime(date("Y-m-d")) <= strtotime($fecha_limite)){ ?>
  576. <div class="form-group row mt-4">
  577. <div class="col-12 text-center">
  578. <button type="button" class="btn btn-outline-primary submitBtn" data-tipo="1"><?php echo $ICO["aceptar"];?> Guardar Syllabus</button>
  579. </div>
  580. </div>
  581. <?php } ?>
  582. </form>
  583. </div>
  584. </div>
  585. <?php } ?>
  586. </div>
  587. <!-- Plan de cátedra -->
  588. <div class="tab-pane fade" id="tab2" role="tabpanel" aria-labelledby="tab2-tab">
  589. <div id="plan_catedra">
  590. <div class="text-right mb-2">
  591. <form action="./export/pdf_plancatedra.php" target="_blank" method="post">
  592. <input type="hidden" name="mat" value="<?php echo $matArr[0];?>">
  593. <input type="hidden" name="gpo" value="<?php echo $matArr[1];?>">
  594. <input type="hidden" name="gpo_nom" value="<?php echo $filter_gpo_nom;?>">
  595. <input type="hidden" name="sub" value="<?php if (isset($matArr[2])){ echo $matArr[2];}?>">
  596. <button type="button" class="btn btn-outline-primary submitBtn2"><?php echo $ICO["aceptar"];?> Guardar Plan de cátedra</button>
  597. <button type="submit" class="btn btn-outline-secondary"><?php echo $ICO["descargar"];?>Mostrar pdf</button>
  598. </form>
  599. </div>
  600. <div class="form-box my-3">
  601. <div class="form-group row">
  602. <label for="semana" class="col-4 col-form-label text-right ">Ir a semana</label>
  603. <div class="col-8 col-md-3">
  604. <select id="semana" class="custom-select">
  605. <?php for($i = 1; $i<=$sem; $i++){?>
  606. <option value="s<?php echo $i;?>">Semana <?php echo $i;?></option>
  607. <?php } ?>
  608. </select>
  609. <!--<div class="datalist datalist-select mb-1 w-100" id="dlSemana">
  610. <div class="datalist-input">Selecciona una semana</div>
  611. <span class="ing-buscar icono"></span>
  612. <ul style="display:none">
  613. <?php for($i = 1; $i<=$sem; $i++){?>
  614. <li data-id="<?php echo $i;?>"><a href="#s<?php echo $i;?>">Semana <?php echo $i;?></a></li>
  615. <?php } ?>
  616. </ul>
  617. <input type="hidden" id="semana" name="semana" value="">
  618. </div>-->
  619. </div>
  620. </div>
  621. <div class="form-group row">
  622. <label for="meses" class="col-4 col-form-label text-right ">Ir a mes</label>
  623. <div class="col-8 col-md-3">
  624. <select id="meses" class="custom-select">
  625. <?php
  626. $i = $mesMin-1;
  627. if($i<=0)
  628. $i=1;
  629. while($i!=$mesMax){?>
  630. <option value="mes<?php echo $i;?>"><?php echo $MESES[$i];?></option>
  631. <?php
  632. $i= ($i)%12+1;
  633. }
  634. ?>
  635. </select>
  636. <!--<div class="datalist datalist-select mb-1 w-100" id="dlSemana">
  637. <div class="datalist-input">Selecciona una semana</div>
  638. <span class="ing-buscar icono"></span>
  639. <ul style="display:none">
  640. <?php for($i = 1; $i<=$sem; $i++){?>
  641. <li data-id="<?php echo $i;?>"><a href="#s<?php echo $i;?>">Semana <?php echo $i;?></a></li>
  642. <?php } ?>
  643. </ul>
  644. <input type="hidden" id="meses" name="semana" value="">
  645. </div>-->
  646. </div>
  647. </div>
  648. </div>
  649. <p><button class="btn btn-outline-danger border-0 btn-sm" data-tipo="2" data-toggle="modal" data-target="#modal_confirm"><?php echo $ICO["borrar"];?> Borrar todo</button></p>
  650. <?php
  651. $first = true;
  652. foreach($calendario as $semana){ ?>
  653. <h4 class="text-primary mb-0 alert-heading bg-light py-3 pl-5 pr-3 rounded " id="s<?php echo $semana["semana"];?>">
  654. <?php echo "Semana ".$semana["semana"];?>
  655. </h4>
  656. <?php foreach($semana["fechas"] as $dia){ ?>
  657. <div class="row border-bottom py-3 sesion-row <?php if(!$dia["habil"]){ echo 'alert-success';}?>" <?php if($dia["habil"]){ ?>data-sesion_num="<?php echo $dia["numSesion"];?>" <?php } ?>>
  658. <?php if($dia["habil"]){ ?>
  659. <div class="col-2 text-center ">
  660. <p class="font-weight-bold mb-1">Sesión <?php echo $dia["numSesion"];?></p>
  661. <p><button class="btn btn-outline-info" title="Mover sesión completa" data-toggle="modal" data-target="#modal_mover_todo"><span class="ing-cambiar ing-rotate-90"></span></button></p>
  662. </div>
  663. <div class="col-10 px-0 mes<?php echo $dia["mes"]; ?>" >
  664. <p class="mb-1"><?php echo $dia["dia"]." ".fechaTexto($dia["fecha"]);?></p>
  665. <div class="sesion-box" data-sesion="<?php echo $dia["numSesion"];?>" id="ses_<?php echo $dia["numSesion"];?>">
  666. <?php $sesArr = getSesiones($sesionesArr, $dia["numSesion"]);
  667. if( count($sesArr)==0){//no hay en BD
  668. ?>
  669. <div class="row sesion-evento mb-1" data-pos="1">
  670. <div class="col-9">
  671. <div class="input-group">
  672. <div class="input-group-prepend">
  673. <button type="button" class="btn btn-outline-danger btn-sm btn-borrar" title="Borrar contenido"><span class="ing-borrar"></span></button>
  674. <button type="button" class="btn btn-outline-info btn-sm btn-copiar" title="Copiar contenido"><span class="ing-copiar"></span></button>
  675. </div>
  676. <input type="text" class="form-control sesion-desc" name="desc[]" placeholder="Temas de la sesión">
  677. <div class="input-group-append">
  678. <div class="input-group-text rounded-0 sesion-color" style="width:40px; background-color:<?php echo $tipoSesionArr[0]["SesionCatedraTipo_color"];?>" title="<?php echo $tipoSesionArr[0]["SesionCatedraTipo_desc"];?>" data-tipo="<?php echo $tipoSesionArr[0]["SesionCatedraTipo_id"];?>">
  679. </div>
  680. <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  681. <span class="sr-only">Toggle Dropdown</span>
  682. </button>
  683. <div class="dropdown-menu">
  684. <?php foreach($tipoSesionArr as $tses){?>
  685. <a class="dropdown-item" href="#" data-color="<?php echo $tses["SesionCatedraTipo_color"];?>" data-tipo="<?php echo $tses["SesionCatedraTipo_id"];?>"><span class="ing-bullet ing-lg mr-2" style="color:<?php echo $tses["SesionCatedraTipo_color"];?>"></span> <?php echo $tses["SesionCatedraTipo_desc"];?></a>
  686. <?php } ?>
  687. </div>
  688. </div>
  689. </div>
  690. </div>
  691. <div class="col-3 botones pt-1">
  692. <div style="width:3em; display:none">
  693. <button class="btn btn-sm btn-block btn-outline-secondary" style="height:40%; font-size:50%; float:left; padding:2px 0;"><?php echo $ICO["arriba"];?></button>
  694. <button class="btn btn-sm btn-block btn-outline-secondary" style="height:40%; font-size:50%; float:left; padding:2px 0;margin-top:2px"><?php echo $ICO["abajo"];?></button>
  695. </div>
  696. <button class="btn btn-outline-success btn-sm btn-agregar ml-1" title="Agregar sesión"><span class="ing-mas"></span></button>
  697. <button class="btn btn-outline-danger btn-sm btn-quitar d-none" title="Quitar sesión"><span class="ing-menos"></span></button>
  698. <!-- no sirve
  699. <button class="btn btn-outline-info btn-sm " title="Mover tema" data-toggle="modal" data-target="#modal_mover"><span class="ing-cambiar ing-rotate-90"></span></button>
  700. -->
  701. </div>
  702. </div>
  703. <?php }else{// Si hay en BD
  704. $p=1;
  705. foreach($sesArr as $ses){?>
  706. <div class="row sesion-evento mb-1" data-pos="<?php echo $p;?>">
  707. <div class="col-9">
  708. <div class="input-group">
  709. <div class="input-group-prepend">
  710. <button type="button" class="btn btn-outline-danger btn-sm btn-borrar" title="Borrar contenido"><span class="ing-borrar"></span></button>
  711. <button type="button" class="btn btn-outline-info btn-sm btn-copiar" title="Copiar contenido"><span class="ing-copiar"></span></button>
  712. </div>
  713. <input type="text" class="form-control sesion-desc" name="desc[]" placeholder="Temas de la sesión" value="<?php echo $ses["desc"]; ?>">
  714. <div class="input-group-append">
  715. <div class="input-group-text rounded-0 sesion-color" style="width:40px; background-color:<?php echo $ses["color"];?>" title="<?php echo $ses["tipo"];?>" data-tipo="<?php echo $ses["tipo_id"];?>">
  716. </div>
  717. <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  718. <span class="sr-only">Toggle Dropdown</span>
  719. </button>
  720. <div class="dropdown-menu">
  721. <?php foreach($tipoSesionArr as $tses){?>
  722. <a class="dropdown-item" href="#" data-color="<?php echo $tses["SesionCatedraTipo_color"];?>" data-tipo="<?php echo $tses["SesionCatedraTipo_id"];?>"><span class="ing-bullet ing-lg mr-2" style="color:<?php echo $tses["SesionCatedraTipo_color"];?>"></span> <?php echo $tses["SesionCatedraTipo_desc"];?></a>
  723. <?php } ?>
  724. </div>
  725. </div>
  726. </div>
  727. </div>
  728. <div class="col-3 botones pt-1">
  729. <div style="width:3em; display:none">
  730. <button class="btn btn-sm btn-block btn-outline-secondary" style="height:40%; font-size:50%; float:left; padding:2px 0;"><?php echo $ICO["arriba"];?></button>
  731. <button class="btn btn-sm btn-block btn-outline-secondary" style="height:40%; font-size:50%; float:left; padding:2px 0;margin-top:2px"><?php echo $ICO["abajo"];?></button>
  732. </div>
  733. <button class="btn btn-outline-success btn-sm btn-agregar ml-1" title="Agregar sesión"><span class="ing-mas"></span></button>
  734. <button class="btn btn-outline-danger btn-sm btn-quitar d-none" title="Quitar sesión"><span class="ing-menos"></span></button>
  735. <!-- no sirve
  736. <button class="btn btn-outline-info btn-sm" title="Mover tema" data-toggle="modal" data-target="#modal_mover"><span class="ing-cambiar ing-rotate-90"></span></button>
  737. -->
  738. </div>
  739. </div>
  740. <?php
  741. $p++;
  742. }
  743. ?>
  744. <?php }//else ?>
  745. </div>
  746. </div>
  747. <?php } else{//Vacaciones ?>
  748. <div class="col-10 offset-2">
  749. <p><?php echo $dia["dia"]." ".fechaTexto($dia["fecha"]);?></p>
  750. <h4 class=""><?php echo $dia["titulo"];?></h4>
  751. </div>
  752. <?php } ?>
  753. </div>
  754. <?php }//for días ?>
  755. <?php }//for semanas ?>
  756. <div class="row mt-4">
  757. <div class="col-12 text-center">
  758. <button type="button" class="btn btn-outline-primary submitBtn2"><?php echo $ICO["aceptar"];?> Guardar Plan de cátedra</button>
  759. </div>
  760. </div>
  761. </div>
  762. </div>
  763. </div>
  764. <?php } ?>
  765. </main>
  766. <div id="bottom"></div>
  767. <a href="#top" id="scroll-up" class="btn btn-primary btn-sm" role="button" aria-pressed="true" style="display: none; position: fixed; bottom: 3rem; right: 1rem;">
  768. <?php echo $ICO['arriba']; ?>
  769. </a>
  770. <!-- Scroll down -->
  771. <a href="#bottom" id="scroll-down" class="btn btn-primary btn-sm" role="button" aria-pressed="true" style="display: none; position: fixed; bottom: 1rem; right: 1rem;">
  772. <?php echo $ICO['abajo']; ?>
  773. </a>
  774. <div id="copy-box"></div>
  775. <!--- FOOTER--->
  776. <?php require_once("../include/footer.php");?>
  777. <?php if($objSesion->puedeEditar() && isset($_POST["materia"])){ ?>
  778. <!-- Modal -->
  779. <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  780. <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
  781. <div class="modal-content">
  782. <div class="modal-header">
  783. <h4 class="col-12 modal-title text-center"><span id="modalLabel">Copiar datos desde&hellip;</span>
  784. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  785. <span aria-hidden="true">&times;</span>
  786. </button></h4>
  787. </div>
  788. <div class="modal-body">
  789. <input type="hidden" name="id" id="id">
  790. <input type="hidden" name="estado" value="1">
  791. <div class="form-box">
  792. <p>Selecciona la materia de la que deseas obtener los datos para copiarlos a la materia actual. Los datos actuales serán sobreescritos.</p>
  793. <div class="form-group row" id="periodoBlock">
  794. <label for="prof" class="col-4 col-form-label">Periodo *</label>
  795. <div class="col-8">
  796. <div class="datalist datalist-select mb-1 w-100" id="dlPeriodoCopy">
  797. <div class="datalist-input">Otros periodos</div>
  798. <span class="ing-buscar icono"></span>
  799. <ul style="display:none">
  800. <?php foreach($periodosN_rs as $per){?>
  801. <li data-id="<?php echo $per["Periodo_id"];?>"><?php echo $per["Periodo_desc"];?></li>
  802. <?php } ?>
  803. </ul>
  804. <input type="hidden" id="periodo_copy" name="periodo" value="">
  805. </div>
  806. </div>
  807. </div>
  808. <div class="form-group row" id="materiaBlock">
  809. <label for="horario" class="col-4 col-form-label">Materia original*</label>
  810. <div class="col-8">
  811. <div class="datalist datalist-select mb-1 w-100" id="dlMateriaCopy">
  812. <div class="datalist-input">Selecciona una materia</div>
  813. <span class="ing-buscar icono"></span>
  814. <ul style="display:none">
  815. <?php
  816. if(isset($mat_rs)){
  817. foreach($mat_rs as $materia) {
  818. if( !(intval($matArr[0]) == intval($materia["Materia_id"]) && intval($matArr[1]) == intval($materia["Grupo_id"]))){
  819. $nombre = $materia["Materia_desc"]." - ".$materia["Grupo_desc"]." ".$materia["Carrera_prefijo"];
  820. ?>
  821. <li data-id="<?php echo $materia["Materia_id"]."_".$materia["Grupo_id"]."_".$materia["Submateria_id"];?>" >
  822. <?php echo $nombre;?></li>
  823. <?php }//if
  824. }//foreach
  825. }//if ?>
  826. </ul>
  827. <input type="hidden" id="materia_copy" name="materia" value="">
  828. </div>
  829. </div>
  830. </div>
  831. <div class="form-group row copiar-block" >
  832. <label for="prof" class="col-4 col-form-label">Copiar *</label>
  833. <div class="col-8">
  834. <div class="datalist datalist-select mb-1 w-100">
  835. <div class="datalist-input">Syllabus y Plan de Cátedra</div>
  836. <span class="ing-buscar icono"></span>
  837. <ul style="display:none">
  838. <li data-id="1">Syllabus y Plan de Cátedra</li>
  839. <li data-id="2">Syllabus</li>
  840. <li data-id="3">Plan de Cátedra</li>
  841. </ul>
  842. <input type="hidden" id="tipo_copy" name="tipo" value="1">
  843. </div>
  844. </div>
  845. </div>
  846. </div>
  847. <div class="form-group row mt-3">
  848. <div class="col-12 text-center">
  849. <button type="button" class="btn btn-outline-primary" id="copiarBtn" data-tipo="1" style="display:none"><?php echo $ICO["aceptar"];?> Copiar estos datos</button>
  850. <button type="reset" class="btn btn-outline-danger" data-dismiss="modal"><?php echo $ICO["cancelar"];?> Cancelar</button>
  851. </div>
  852. </div>
  853. </div>
  854. </div>
  855. </div>
  856. </div>
  857. <div class="modal fade" id="modal_confirm" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  858. <div class="modal-dialog modal-dialog-centered" role="document">
  859. <div class="modal-content">
  860. <div class="modal-body">
  861. <div class="row">
  862. <div class="col">
  863. <p class="font-weight-bold">¿Estás seguro de que quieres borrar todo el contenido del <span id="borrar_tipo"></span>?</p>
  864. <p>Esta acción no se puede deshacer.</p>
  865. </div>
  866. </div>
  867. </div>
  868. <div class="modal-footer">
  869. <input type="hidden" id="tipo_borrar" value="">
  870. <button type="button" class="btn btn-outline-primary btn-borrar-todo"><?php echo $ICO["aceptar"];?> Borrar</button>
  871. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
  872. </div>
  873. </div>
  874. </div>
  875. </div>
  876. <div class="modal fade" id="modal_mover_todo" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  877. <div class="modal-dialog modal-dialog-centered" role="document">
  878. <div class="modal-content">
  879. <div class="modal-body">
  880. <div class="row">
  881. <div class="col">
  882. <p class="font-weight-bold">¿A qué sesión te gustaría mover la sesión actual?</p>
  883. <p>Todos las sesiones se recorrerán.</p>
  884. </div>
  885. </div>
  886. <div class="form-box">
  887. <div class="form-group row">
  888. <label for="sesion_destino_todo" class="col-4 col-form-label">Sesión destino</label>
  889. <div class="col-6">
  890. <select class="custom-select" id="sesion_destino_todo">
  891. <option valida="0">Selecciona una sesión</option>
  892. <?php
  893. $max = 0;
  894. foreach($calendario as $semana){
  895. foreach($semana["fechas"] as $dia){
  896. if($dia["numSesion"]>0){
  897. $max = $dia["numSesion"];
  898. ?>
  899. <option value="<?php echo $dia["numSesion"];?>"><?php echo "#".$dia["numSesion"]." - ".fechaTexto($dia["fecha"]);?></option>
  900. <?php }
  901. }
  902. } ?>
  903. </select>
  904. </div>
  905. </div>
  906. </div>
  907. </div>
  908. <div class="modal-footer">
  909. <input type="hidden" id="sesion_mover_todo" value="">
  910. <button type="button" class="btn btn-outline-primary btn-mover-todo"><?php echo $ICO["aceptar"];?> Mover</button>
  911. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
  912. </div>
  913. </div>
  914. </div>
  915. </div>
  916. <div class="modal fade" id="modal_mover" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  917. <div class="modal-dialog modal-dialog-centered" role="document">
  918. <div class="modal-content">
  919. <div class="modal-body">
  920. <div class="row">
  921. <div class="col">
  922. <p class="font-weight-bold">¿A qué sesión te gustaría mover el tema actual?</p>
  923. <p>Las sesiones no se alteran.</p>
  924. </div>
  925. </div>
  926. <div class="form-box">
  927. <div class="form-group row">
  928. <label for="sesion_destino" class="col-4 col-form-label">Sesión destino</label>
  929. <div class="col-6">
  930. <select class="custom-select" id="sesion_destino">
  931. <option value="0">Selecciona una sesión</option>
  932. <?php
  933. $max = 0;
  934. foreach($calendario as $semana){
  935. foreach($semana["fechas"] as $dia){
  936. if($dia["numSesion"]>0){
  937. $max = $dia["numSesion"];
  938. ?>
  939. <option value="<?php echo $dia["numSesion"];?>"><?php echo "#".$dia["numSesion"]." - ".fechaTexto($dia["fecha"]);?></option>
  940. <?php }
  941. }
  942. } ?>
  943. </select>
  944. </div>
  945. </div>
  946. </div>
  947. </div>
  948. <div class="modal-footer">
  949. <input type="hidden" id="sesion_mover" value="">
  950. <input type="hidden" id="sesion_pos" value="">
  951. <button type="button" class="btn btn-outline-primary btn-mover"><?php echo $ICO["aceptar"];?> Mover</button>
  952. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
  953. </div>
  954. </div>
  955. </div>
  956. </div>
  957. <?php } ?>
  958. </div>
  959. <script src="../js/jquery.min.js"></script>
  960. <script src="../js/bootstrap/popper.min.js"></script>
  961. <script src="../js/bootstrap/bootstrap.min.js"></script>
  962. <script src="../js/fechas.js"></script>
  963. <script src="../js/tinymce/tinymce.min.js"></script>
  964. <script src="../js/sidebarmenu.js"></script>
  965. <script src="../js/datalist.js"></script>
  966. <script>
  967. setDatalist("#periodo", <?php echo $_SESSION["periodo_id"]; ?>);
  968. $(document).on('click', '#dlPeriodo ul li' ,function(){
  969. $("#formaPeriodo").submit();
  970. });
  971. </script>
  972. <script>
  973. $(document).on( "click", ".btn-reset", function(event){
  974. var forma = $(this).parents("form");
  975. forma.find("input[type=text]").val("");
  976. forma.find("select").prop("selectedIndex",0);
  977. forma.submit();
  978. });
  979. var _periodo_fecha_inicial = "<?php echo fechaSlash($periodo_rs["Periodo_fecha_inicial"]); ?>";
  980. var _periodo_fecha_final = "<?php echo fechaSlash($periodo_rs["Periodo_fecha_final"]); ?>";
  981. var _modificado = false;
  982. tinymce.init({
  983. selector: '.richtext',
  984. statusbar: false,
  985. plugins:["lists link"],
  986. toolbar: ['undo redo | bold italic underline forecolor backcolor | bullist numlist indent outdent | alignleft aligncenter alignright alignjustify','h3 link | removeformat'],
  987. branding: false,
  988. menubar: false,
  989. <?php if(strtotime(date("Y-m-d")) > strtotime($fecha_limite)){
  990. echo "readonly : 1,";
  991. } ?>
  992. //valid_elements: "a[href|target=_blank],h3,strong/b,em/i,u,ul,ol,li,blockquote,p[align],br,hr,span[style],-strong/-b,-em/-i,-u,-ul,-ol,-li,-h3,-a,-blockquote,-p,-br,-hr,-span",
  993. //paste_as_text: true,
  994. formats: {
  995. // Changes the default format for the underline button to produce a span with a class and not merge that underline into parent spans
  996. underline: { inline: 'span', styles: { 'text-decoration': 'underline' }, exact: true },
  997. strikethrough: { inline: 'span', styles: { 'text-decoration': 'line-through' }, exact: true }
  998. },
  999. init_instance_callback: function (editor) {
  1000. editor.on('Blur', function (e) {
  1001. if( editor.getContent()!= "")
  1002. _modificado = true;
  1003. });
  1004. }
  1005. });
  1006. tinymce.init({
  1007. selector: '.richtext-table',
  1008. statusbar: false,
  1009. plugins:["lists link table"],
  1010. toolbar: ['undo redo | bold italic underline forecolor backcolor | bullist numlist indent outdent | alignleft aligncenter alignright alignjustify','h3 link | table removeformat'],
  1011. branding: false,
  1012. menubar: false,
  1013. table_toolbar:'',//Quita popup
  1014. <?php if(strtotime(date("Y-m-d")) > strtotime($fecha_limite)){
  1015. echo "readonly : 1,";
  1016. } ?>
  1017. //valid_elements: "a[href|target=_blank],h3,strong/b,em/i,u,ul,ol,li,blockquote,p[align],br,hr,span[style],table,thead,tbody,tr,td,th,-strong/-b,-em/-i,-u,-ul,-ol,-li,-h3,-a,-blockquote,-p,-br,-hr,-span",
  1018. //paste_as_text: true,
  1019. formats: {
  1020. // Changes the default format for the underline button to produce a span with a class and not merge that underline into parent spans
  1021. underline: { inline: 'span', styles: { 'text-decoration': 'underline' }, exact: true },
  1022. strikethrough: { inline: 'span', styles: { 'text-decoration': 'line-through' }, exact: true }
  1023. },
  1024. init_instance_callback: function (editor) {
  1025. editor.on('Blur', function (e) {
  1026. if( editor.getContent()!= "")
  1027. _modificado = true;
  1028. });
  1029. }
  1030. });
  1031. function validaForm(){
  1032. if($("#filter_materia").val()==""){
  1033. invalidDatalist("#filter_materia", true);
  1034. return false;
  1035. }
  1036. return true;
  1037. }
  1038. $(document).ready(function(){
  1039. $("#dlMateria ul li").click(function(){//cambia datalist de materia principal
  1040. if($(".resp-block").length > 0)
  1041. $(".resp-block").hide().removeClass("d-flex");
  1042. var texto = $(this).text();
  1043. $("#filter_materia_nom").val(texto);//Actualiza nombre para enviar forma
  1044. $("#filter_gpo_nom").val( $(this).data("gpo_nom") );//Actualiza nombre para enviar forma
  1045. invalidDatalist("#filter_materia", false);
  1046. });
  1047. });
  1048. </script>
  1049. <?php if($objSesion->puedeEditar() && isset($_POST["materia"])){
  1050. ?>
  1051. <script>
  1052. function valida(){
  1053. var ids=["info", "desc", "obj", "capacidades", "prerrequisitos", "temario", "calificacion", "fechas", "asistencia", "comportamiento", "examenes", "tareas", "investigacion", "bibliografia"];
  1054. var i;
  1055. var incompletos = 0
  1056. for(i=0; i<ids.length; i++){
  1057. if(tinyMCE.get(ids[i]).getContent() == ""){
  1058. /*$("#errorBox").collapse('show');
  1059. $("#errorBox_text").html("Debes completar todos los campos");
  1060. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1061. return false;*/
  1062. incompletos++;
  1063. }
  1064. }
  1065. return incompletos;
  1066. //return true;
  1067. }
  1068. function preguntarAntesDeSalir(){
  1069. if (_modificado)
  1070. return "¿Deseas abandonar la página? Los últimos cambios que realizaste no se guardarán";
  1071. }
  1072. window.onbeforeunload = preguntarAntesDeSalir;
  1073. $(document).ready(function(){
  1074. //$('.richtext').richText();
  1075. setDatalist("#periodo_copy", <?php echo $_SESSION["periodo_id"]; ?>);
  1076. setDatalistFirst("#materia_copy");
  1077. $.each($('.sesion-box'), function(){
  1078. var contenedor = $(this);
  1079. if(contenedor.find(".sesion-evento").length>1){
  1080. contenedor.find(".btn-quitar").removeClass("d-none");
  1081. if(contenedor.find(".sesion-evento").length==5){
  1082. contenedor.find(".sesion-evento .btn-agregar").attr("disabled", true);
  1083. }
  1084. }else{
  1085. contenedor.find(".btn-quitar").addClass("d-none");
  1086. }
  1087. });
  1088. $('#modal').on('show.bs.modal', function (e) {
  1089. $("#dlPeriodoCopy ul li:first").click();
  1090. if(("#dlMateriaCopy ul li").length == 0){
  1091. $("#copiarBtn").hide();
  1092. $(".copiar-block").hide();
  1093. }else{
  1094. $("#copiarBtn").show();
  1095. $(".copiar-block").show();
  1096. }
  1097. })
  1098. $("#dlPeriodoCopy ul li").click(function(){//cambia datalist de modal
  1099. var per = $(this).data("id");
  1100. $.ajax({
  1101. url: './action/materiasrelacionadasprofesor_select.php',
  1102. type: 'POST',
  1103. dataType: 'json',
  1104. data: { "id": <?php echo $_SESSION["usuario_id"];?>, "per":per, "mat": $(filter_materia).val()},
  1105. success: function(result) {
  1106. if(result["error"]!= "" && result["error"] !== undefined){
  1107. $("#errorBox").collapse('show');
  1108. $("#errorBox_text").html(result["error"]);
  1109. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1110. }else{
  1111. html = "";
  1112. var total = 0;
  1113. for(i=0; i<result["materias"].length; i++){
  1114. var sub_id = ""
  1115. if(result["materias"][i]["Submateria_id"] !== null){
  1116. sub_id = result["materias"][i]["Submateria_id"];
  1117. }
  1118. if(result["materias"][i]["Materia_id"]+'_'+result["materias"][i]["Grupo_id"]+'_'+sub_id != $("#filter_materia").val() ){
  1119. nombre = result["materias"][i]["Grupo_desc"]+" "+result["materias"][i]["Carrera_prefijo"]+" - "+result["materias"][i]["Materia_desc"]
  1120. html += '<li data-id="'+result["materias"][i]["Materia_id"]+'_'+result["materias"][i]["Grupo_id"]+'_'+sub_id+'">'+nombre+'</li>';
  1121. total++;
  1122. }
  1123. }
  1124. $("#dlMateriaCopy ul").html(html);
  1125. setDatalistFirst("#materia_copy");
  1126. if(total==0){
  1127. $("#dlMateriaCopy .datalist-input").html("Sin materias relacionadas");
  1128. $("#copiarBtn").hide();
  1129. $(".copiar-block").hide();
  1130. }else{
  1131. $("#copiarBtn").show();
  1132. $(".copiar-block").show();
  1133. }
  1134. }
  1135. },
  1136. error: function(jqXHR, textStatus, errorThrown ){
  1137. modal.modal('hide');
  1138. $("#errorBox").collapse('show');
  1139. $("#errorBox_text").html(errorThrown);
  1140. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1141. }
  1142. });//ajax
  1143. });
  1144. /*
  1145. $("#dlMateriaCopy ul li").click(function(){//cambia datalist de materia principal
  1146. });*/
  1147. $(".submitBtn").click(function(){//Enviar Syllabus
  1148. var incompletos = valida();
  1149. var res = true;
  1150. if(incompletos > 0){
  1151. res = confirm("Se van a guardar los datos actuales del Syllabus.\nAún tienes "+incompletos+ " campo(s) faltante(s), recuerda completarlos.");
  1152. }
  1153. if(res){
  1154. var formData={}
  1155. var ids=["info", "desc", "obj", "capacidades", "prerrequisitos", "temario", "calificacion", "fechas", "asistencia", "comportamiento", "examenes", "tareas", "investigacion", "bibliografia"];
  1156. ids.forEach(function(id) {
  1157. var content = tinymce.get(id).getContent(); // Obtener el contenido del TinyMCE
  1158. formData[id] = content; // Asignar el contenido al objeto JSON utilizando el id como llave
  1159. });
  1160. formData["materia"]=$("#materiaSyllabus").val();
  1161. //if(valida()){
  1162. //$("#formaSyllabus").submit();
  1163. $.ajax({
  1164. url: './action/syllabus_insert.php',
  1165. type: 'POST',
  1166. dataType: 'json',
  1167. data: formData,
  1168. success: function(result) {
  1169. if(result["error"]!= "" && result["error"] !== undefined){
  1170. $("#errorBox").collapse('show');
  1171. $("#errorBox_text").html(result["error"]);
  1172. }else{
  1173. $("#successBox").collapse('show');
  1174. $("#successBox_text").html(result["ok"]);
  1175. _modificado = false;
  1176. }
  1177. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1178. },
  1179. error: function(jqXHR, textStatus, errorThrown ){
  1180. $("#errorBox").collapse('show');
  1181. $("#errorBox_text").html(errorThrown);
  1182. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1183. }
  1184. });//ajax
  1185. //}
  1186. }else{
  1187. $('#scroll-down').click();
  1188. }
  1189. });
  1190. $(".submitBtn2").click(function(){//Enviar Plan de cátedra
  1191. var plan = [];
  1192. var sesion=[];
  1193. var pos=1;
  1194. $.each($('.sesion-box'), function(){
  1195. sesion=[];
  1196. pos=1;
  1197. $(this).find('.sesion-evento').each(function(){
  1198. if($(this).find(".sesion-desc").val().trim()!=""){
  1199. sesion.push({"pos":pos, "desc": $(this).find(".sesion-desc").val().trim(), "tipo":$(this).find(".sesion-color").data("tipo") });
  1200. }
  1201. pos++;
  1202. });
  1203. if(sesion.length>0)
  1204. plan.push({"sesion": $(this).data("sesion"), "contenido":sesion});
  1205. });
  1206. //$("#datos").val(JSON.stringify(plan));
  1207. _modificado = false;
  1208. //$("#formPCatedra").submit();
  1209. $.ajax({
  1210. url: './action/plancatedra_insert.php',
  1211. type: 'POST',
  1212. dataType: 'json',
  1213. data: {"materia":"<?php echo $filter_mat;?>", "materia_nombre":"<?php echo $filter_materia_nom;?>", "json":JSON.stringify(plan)},
  1214. success: function(result) {
  1215. if(result["error"]!= "" && result["error"] !== undefined){
  1216. $("#errorBox").collapse('show');
  1217. $("#errorBox_text").html(result["error"]);
  1218. }else{
  1219. $("#successBox").collapse('show');
  1220. $("#successBox_text").html(result["ok"]);
  1221. _modificado = false;
  1222. }
  1223. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1224. },
  1225. error: function(jqXHR, textStatus, errorThrown ){
  1226. $("#errorBox").collapse('show');
  1227. $("#errorBox_text").html(errorThrown);
  1228. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1229. }
  1230. });//ajax
  1231. });
  1232. $("#copiarBtn").click(function(){
  1233. var per = $("#periodo_copy").val();
  1234. var mat = $("#materia_copy").val();
  1235. var tipo = $("#tipo_copy").val();
  1236. if(tipo == 1 || tipo ==2){
  1237. $.ajax({
  1238. url: './action/syllabus_select.php',
  1239. type: 'POST',
  1240. dataType: 'json',
  1241. data: { "periodo": per, "materia": mat},
  1242. success: function(result) {
  1243. if(result["error"]!= "" && result["error"] !== undefined){
  1244. $("#errorBox").collapse('show');
  1245. $("#errorBox_text").html(result["error"]);
  1246. }else{
  1247. var ids=["info", "desc", "obj", "capacidades", "prerrequisitos", "temario", "calificacion", "fechas", "asistencia", "comportamiento", "examenes", "tareas", "investigacion", "bibliografia"];
  1248. var i;
  1249. for(i=0; i<ids.length; i++){
  1250. //console.log(result["syllabus"][ids[i]])
  1251. tinyMCE.get(ids[i]).setContent(result["syllabus"][ids[i]])
  1252. }
  1253. }
  1254. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1255. },
  1256. error: function(jqXHR, textStatus, errorThrown ){
  1257. $("#errorBox").collapse('show');
  1258. $("#errorBox_text").html(errorThrown);
  1259. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1260. }
  1261. });//ajax
  1262. }
  1263. if(tipo == 1 || tipo ==3){
  1264. $.ajax({
  1265. url: './action/plancatedra_select.php',
  1266. type: 'POST',
  1267. dataType: 'json',
  1268. data: { "periodo": per, "materia": mat},
  1269. success: function(result) {
  1270. if(result["error"]!= "" && result["error"] !== undefined){
  1271. $("#errorBox").collapse('show');
  1272. $("#errorBox_text").html(result["error"]);
  1273. }else{
  1274. //Reinicia todas las sesiones a 1 input
  1275. $.each($('.sesion-box'), function(){
  1276. while($(this).find(".sesion-evento").length > 1){//hay más de 1 sesión
  1277. $(this).find(".sesion-evento:last").remove();
  1278. }
  1279. $(this).find(".sesion-evento .sesion-desc").text("");
  1280. $(this).find(".btn-quitar").addClass("d-none");
  1281. });
  1282. for(var i=0; i<result["sesiones"].length; i++){
  1283. var id = result["sesiones"][i]["sesion"];
  1284. datosSesion($("#ses_"+id).find(".sesion-evento"), result["sesiones"][i]["subsesiones"][0]);
  1285. if(result["sesiones"][i]["subsesiones"].length > 1){//faltan
  1286. for(var j=1; j<result["sesiones"][i]["subsesiones"].length; j++){
  1287. var contenedor = $("#ses_"+id);
  1288. var renglon = contenedor.find(".sesion-evento:first");
  1289. new_reng = renglon.clone().appendTo(contenedor);
  1290. datosSesion(new_reng, result["sesiones"][i]["subsesiones"][j]);
  1291. contenedor.find(".btn-quitar").removeClass("d-none");
  1292. if(contenedor.find(".sesion-evento").length==5){
  1293. contenedor.find(".sesion-evento .btn-agregar").attr("disabled", true);
  1294. }
  1295. }
  1296. }
  1297. }
  1298. }
  1299. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1300. },
  1301. error: function(jqXHR, textStatus, errorThrown ){
  1302. $("#errorBox").collapse('show');
  1303. $("#errorBox_text").html(errorThrown);
  1304. $('#messageBox')[0].scrollIntoView({ block: "end" });
  1305. }
  1306. });//ajax
  1307. }
  1308. $('#modal').modal("hide");
  1309. });
  1310. function datosSesion(contenedor, datos){
  1311. contenedor.find(".sesion-desc").val(datos["desc"]);
  1312. contenedor.find(".sesion-color").css('background-color', datos["color"]).attr("title", datos["tipo"]).data("tipo", datos["tipo_id"]);
  1313. }
  1314. // Manejador del cambio de semana
  1315. $("#semana").change(function() {
  1316. var seccion = $(this).val();
  1317. // Movemos la vista a la sección correspondiente
  1318. $('html, body').animate({
  1319. scrollTop: $("#" + seccion).offset().top - 120
  1320. }, 800);
  1321. });
  1322. $("#meses").change(function() {
  1323. var seccion = $(this).val();
  1324. console.log(seccion);
  1325. // Movemos la vista a la sección correspondiente
  1326. $('html, body').animate({
  1327. scrollTop: $("." + seccion+":first").offset().top - 120
  1328. }, 800);
  1329. });
  1330. $("#scroll-up").click(function() {
  1331. $('html, body').animate({
  1332. scrollTop: $("#myTab").offset().top - 120
  1333. }, 800);
  1334. });
  1335. $('#scroll-down').click(function() {
  1336. $("html, body").animate({
  1337. scrollTop: $("#bottom").offset().top -250
  1338. }, 800);
  1339. return false;
  1340. });
  1341. $(window).scroll(function() {
  1342. if ($(this).scrollTop() > $("#myTab").offset().top -120) {
  1343. $('#scroll-up').fadeIn();
  1344. } else {
  1345. $('#scroll-up').fadeOut();
  1346. }
  1347. if ($(this).scrollTop() < $("#bottom").offset().top-500 ) {
  1348. $('#scroll-down').fadeIn();
  1349. } else {
  1350. $('#scroll-down').fadeOut();
  1351. }
  1352. });
  1353. // Manejar el evento click para cada enlace de navegación
  1354. $(".nav-link").on("click", function(event) {
  1355. if (_modificado === true) {
  1356. // Mostrar un alert
  1357. var resp = confirm("¡Atención! Recuerda que no has guardado los últimos cambios. ¿Deseas continuar?");
  1358. if(resp === false){
  1359. event.preventDefault();
  1360. $('#scroll-down').click();
  1361. return false;
  1362. }else{
  1363. _modificado = false;
  1364. }
  1365. }
  1366. });
  1367. $(".sesion-desc").on("change", function(event){
  1368. _modificado = true;
  1369. });
  1370. $('#modal_confirm').on('show.bs.modal', function (event) {
  1371. var button = $(event.relatedTarget); // Button that triggered the modal
  1372. var tipo = button.data("tipo");
  1373. $("#tipo_borrar").val(tipo);
  1374. if(tipo == 1){
  1375. $("#borrar_tipo").text("Syllabus");
  1376. }else{
  1377. $("#borrar_tipo").text("Plan de cátedra");
  1378. }
  1379. });
  1380. $('.btn-borrar-todo').on('click', function (event) {
  1381. var tipo = parseInt($("#tipo_borrar").val());
  1382. if(tipo==1){//syllabus
  1383. $('.richtext').each(function() {
  1384. tinymce.get($(this).attr('id')).setContent('');
  1385. });
  1386. $('.richtext-table').each(function() {
  1387. tinymce.get($(this).attr('id')).setContent('');
  1388. });
  1389. }else{//plan de cátedra
  1390. $(".sesion-desc").val("");
  1391. }
  1392. $('#modal_confirm').modal('hide');
  1393. });
  1394. $('#modal_mover_todo').on('show.bs.modal', function (event) {
  1395. var button = $(event.relatedTarget); // Button that triggered the modal
  1396. var num_sesion = button.parents(".sesion-row").data("sesion_num");
  1397. $("#sesion_mover_todo").val(num_sesion);
  1398. $("#sesion_destino_todo")[0].selectedIndex = 0;
  1399. $("#sesion_destino_todo option").attr('disabled', false);
  1400. $("#sesion_destino_todo option[value='"+ num_sesion + "']").attr('disabled', true);
  1401. });
  1402. $('.btn-mover-todo').on('click', function (event) {
  1403. var sesion_origen = parseInt($("#sesion_mover_todo").val());
  1404. var sesion_destino = parseInt($("#sesion_destino_todo").val());
  1405. var sesion_max = parseInt($("#sesion_max").val());
  1406. var tmp_data;
  1407. var s_id;
  1408. s_id = parseInt(sesion_origen);
  1409. //tmp_data = $("#ses_"+sesion_origen).html();
  1410. tmp_data = $("#ses_"+sesion_origen).contents().clone();
  1411. if(sesion_origen < sesion_destino){
  1412. do{
  1413. $("#ses_"+s_id).html("");
  1414. //$("#ses_"+s_id).html( $("#ses_"+(s_id+1)).html() );
  1415. $("#ses_"+(s_id+1)).contents().clone().appendTo("#ses_"+s_id);
  1416. s_id++;
  1417. }while(s_id < sesion_destino);
  1418. }else{
  1419. do{
  1420. $("#ses_"+s_id).html("");
  1421. //$("#ses_"+s_id).html( $("#ses_"+(s_id-1)).html() );
  1422. $("#ses_"+(s_id-1)).contents().clone().appendTo("#ses_"+s_id);
  1423. s_id--;
  1424. }while(s_id > sesion_destino);
  1425. }
  1426. $("#ses_"+s_id).html( tmp_data );
  1427. tmp_data.appendTo("#ses_"+s_id);
  1428. _modificado = true;
  1429. $('#modal_mover_todo').modal('hide');
  1430. });
  1431. /*
  1432. $('#modal_mover').on('show.bs.modal', function (event) {
  1433. var button = $(event.relatedTarget); // Button that triggered the modal
  1434. var num_sesion = button.parents(".sesion-row").data("sesion_num");
  1435. var pos_sesion = button.parents(".sesion-evento").data("pos");
  1436. $("#sesion_mover").val(num_sesion);
  1437. $("#sesion_pos").val(pos_sesion);
  1438. $("#sesion_destino")[0].selectedIndex = 0;
  1439. $("#sesion_destino option").attr('disabled', false);
  1440. $("#sesion_destino option[value='"+ num_sesion + "']").attr('disabled', true);
  1441. $.each($('#sesion_destino option'), function(){
  1442. var id = parseInt($(this).val());
  1443. if(id!= 0){
  1444. var total = $("#ses_"+id+" .sesion-evento").length;
  1445. if(total>=5){
  1446. $(this).prop("disabled", true);
  1447. }else{
  1448. $(this).prop("disabled", false);
  1449. }
  1450. }
  1451. });
  1452. });
  1453. //No sirve
  1454. $('.btn-mover').on('click', function (event) {
  1455. var sesion_origen = parseInt($("#sesion_mover").val());
  1456. var sesion_pos = parseInt($("#sesion_pos").val());
  1457. var sesion_destino = parseInt($("#sesion_destino").val());
  1458. var sesion_max = parseInt($("#sesion_max").val());
  1459. var tmp_data;
  1460. var s_id;
  1461. s_id = parseInt(sesion_origen);
  1462. var objOrig = $("#ses_"+sesion_origen).find(".sesion-evento[data-pos='"+sesion_pos+"']");
  1463. $("#ses_"+sesion_destino).append('<div class="row sesion-evento mb-1">'+objOrig.html()+'</div>');
  1464. var contenedor = $("#ses_"+sesion_destino).find(".sesion-evento:last");
  1465. contenedor.data("pos", $("#ses_"+sesion_destino).find(".sesion-evento").length);
  1466. if($("#ses_"+sesion_origen).find(".sesion-evento").length > 1){
  1467. objOrig.remove();
  1468. contenedor.find(".btn-agregar").attr("disabled", false);
  1469. }else{
  1470. objOrig.find(".sesion-desc").val("");
  1471. contenedor.find(".btn-quitar").addClass("d-none");
  1472. }
  1473. if($("#ses_"+sesion_destino).find(".sesion-evento").length > 1){
  1474. contenedor.find(".btn-quitar").removeClass("d-none");
  1475. if($("#ses_"+sesion_destino).find(".sesion-evento").length == 5){
  1476. contenedor.parents(".sesion-box").find(".btn-agregar").attr("disabled", true);
  1477. }
  1478. }
  1479. _modificado = true;
  1480. $('#modal_mover').modal('hide');
  1481. });
  1482. */
  1483. });
  1484. $(document).on( "click", ".btn-agregar", function(e){
  1485. var contenedor = $(this).parents(".sesion-box");
  1486. if(contenedor.find(".sesion-evento").length<5){
  1487. var renglon = $(this).parents(".sesion-evento");
  1488. var new_reng = renglon.clone()
  1489. new_reng.find(".sesion-desc").val("");
  1490. new_reng.appendTo(contenedor);
  1491. new_reng.data("pos", contenedor.find(".sesion-evento").length)
  1492. if(contenedor.find(".sesion-evento").length>1){
  1493. contenedor.find(".btn-quitar").removeClass("d-none");
  1494. if(contenedor.find(".sesion-evento").length==5){
  1495. contenedor.find(".sesion-evento .btn-agregar").attr("disabled", true);
  1496. }
  1497. }else{
  1498. contenedor.find(".btn-quitar").addClass("d-none");
  1499. }
  1500. _modificado = true;
  1501. }
  1502. });
  1503. $(document).on( "click", ".btn-quitar", function(e){
  1504. var contenedor = $(this).parents(".sesion-box");
  1505. if(contenedor.find(".sesion-evento").length>1){
  1506. if(contenedor.find(".sesion-evento").length>1){
  1507. var renglon = $(this).parents(".sesion-evento");
  1508. renglon.remove();
  1509. contenedor.find(".sesion-evento .btn-agregar").attr("disabled", false);
  1510. }
  1511. if(contenedor.find(".sesion-evento").length==1){
  1512. contenedor.find(".btn-quitar").addClass("d-none");
  1513. }
  1514. _modificado = true;
  1515. }
  1516. });
  1517. $(document).on( "click", ".dropdown-item", function(e){
  1518. e.preventDefault(); // Evita que se siga el enlace
  1519. var selectedColor = $(this).data('color'); // Obtiene el color seleccionado
  1520. var selectedText = $(this).text();
  1521. var selectedTipo = $(this).data("tipo");
  1522. $(this).parents(".input-group-append").find('.sesion-color').css('background-color', selectedColor).attr("title", selectedText).data("tipo", selectedTipo); // Cambia el color de fuente
  1523. // Cierra el menú desplegable después de seleccionar un ítem
  1524. $(this).closest('.dropdown-menu').prev('.dropdown-toggle').dropdown('toggle');
  1525. _modificado = true;
  1526. });
  1527. $(document).on( "click", ".btn-copiar", function(e){
  1528. var textoCopiar = $(this).parents(".input-group").find('.sesion-desc');
  1529. textoCopiar.select();
  1530. document.execCommand("copy");
  1531. window.getSelection().removeAllRanges();
  1532. //textoCopiar.blur();
  1533. $('#copy-box').text("Tema copiado");
  1534. $('#copy-box').fadeIn();
  1535. setTimeout(function() {
  1536. $('#copy-box').fadeOut();
  1537. }, 1500);
  1538. });
  1539. $(document).on( "click", ".btn-borrar", function(e){
  1540. var textoBorrar = $(this).parents(".input-group").find('.sesion-desc');
  1541. textoBorrar.val("");
  1542. });
  1543. </script>
  1544. <?php } ?>
  1545. </body>
  1546. </html>