Calling URI * */ public function __construct($url){ $this->diplome_id = $url['diplome_id']; } /* CALL * */ public function download(){ /* [1] Check .ics file =========================================================*/ /* (1) Set file name */ $file_name = __ROOT__."/tmp/".$this->diplome_id.".ics"; /* (2) Check if exists */ if( !file_exists($file_name) ) die("An error occured. Please contact the developers.\n"); /* [2] Display file =========================================================*/ /* (1) Headers */ header('Content-Type: text/calendar; charset=utf-8'); header('Content-Disposition: attachment; filename='.$this->diplome_id.'.ics'); /* (2) Body */ readfile($file_name); } public function view(){ /* [1] Get periods =========================================================*/ { /* (1) Get the list of available periods */ $sqlr = DatabaseDriver::getPDO()->query("SELECT * from period"); $periods = $sqlr->fetchAll(); /* (2) Manage error */ if( !$periods ) die("Error cannot get config"); /* (3) Begin html */ echo ""; echo " ICS UPPA university"; echo " "; echo " "; echo ""; echo ""; } /* [2] For each period (week) =========================================================*/ { echo "
"; $cal_height = 54; // in css:vw foreach($periods as $period){ echo "
"; /* (1) Display week number */ $days = [ date('Y-m-d', strtotime($period['monday'].' + 0 days')), date('Y-m-d', strtotime($period['monday'].' + 1 days')), date('Y-m-d', strtotime($period['monday'].' + 2 days')), date('Y-m-d', strtotime($period['monday'].' + 3 days')), date('Y-m-d', strtotime($period['monday'].' + 4 days')) ]; echo "
Week from ${days[0]} to ${days[4]}
"; echo "
"; /* (2) For each day */ foreach($days as $day_n=>$day){ /* (2.1) Display day grid */ echo "
"; /* (2.2) Get available courses */ $sqlr = DatabaseDriver::getPDO()->prepare("SELECT DATE_FORMAT(c.start_date, '%H:%i') as startd, DATE_FORMAT(c.stop_date, '%H:%i') as stopd, l.basename as lbname, l.name as lname, e.basename as ebname, e.name as ename, e.color as color FROM event as e, location as l, course as c WHERE e.id_diplome = :idd AND c.id_event = e.id_event AND c.id_location = l.id_location AND DATE_FORMAT(c.start_date, '%Y-%m-%d') = :day ORDER BY startd ASC"); $sqlr->execute([ ':idd' => $this->diplome_id, ':day' => $day ]); $courses = $sqlr->fetchAll(); /* (2.3) Manage error */ if( !$courses ) continue; /* (2.4) For each course */ foreach($courses as $course){ $start_hour = 0; $stop_hour = 0; /* (2.4.1) Extract time in hour */ if( preg_match('@^(\d+):(\d+)$@', $course['startd'], $m) ) $start_hour = $m[1] + $m[2]/60; if( preg_match('@^(\d+):(\d+)$@', $course['stopd'], $m) ) $stop_hour = $m[1] + $m[2]/60; /* (2.4.2) Calc positionning */ $top = ($start_hour-CE::$start_h) * $cal_height / (CE::$stop_h-CE::$start_h); $height = ($stop_hour-CE::$start_h) * $cal_height / (CE::$stop_h-CE::$start_h) - $top; $color = $course['color']; /* (2.4.3) Position
according to hours */ echo "
"; echo "
".$course['startd']."
"; echo "
".$course['stopd']."
"; echo "
"; echo "".$course['ename'].""; echo "".$course['lname'].""; echo "
"; echo "
"; } } echo "
"; } echo "
"; } echo ""; // echo "
"; // echo ""; // foreach($d_cols as $data){ // $id = $data['id_event']; // $basename = $data['basename']; // $color = $data['color']; // $name = $data['name']; // echo ""; // } // echo "
Read nameCorrection
$basename
"; // echo ""; // echo "
"; } public function lessons(){ /* [1] Get database data =========================================================*/ /* (1) Get the list of available events */ $sqlr = DatabaseDriver::getPDO()->prepare("SELECT * FROM event WHERE id_diplome = :idd"); $sqlr->execute([ ':idd' => $this->diplome_id ]); $d_cols = $sqlr->fetchAll(); /* (2) Manage error */ if( !$d_cols ) die("Correction not available for this diplome"); echo "
"; echo ""; foreach($d_cols as $data){ $id = $data['id_event']; $basename = $data['basename']; $color = $data['color']; $name = $data['name']; echo ""; } echo "
Read nameCorrection
$basename
"; echo ""; echo "
"; } // todo public function location(){ /* [1] Get events data =========================================================*/ /* (1) Get the list of available events */ // $sqlr = DatabaseDriver::getPDO()->prepare("SELECT * FROM event WHERE id_diplome = :idd"); // $sqlr->execute([ ':idd' => $this->diplome_id ]); // $events = $sqlr->fetchAll(); /* (2) Manage error */ // if( !$events ) // die("Correction not available for this diplome"); /* [2] Get location data =========================================================*/ // foreach($events as &$event){ $location = []; /* (1) Get the list of available locations*/ $sqlr = DatabaseDriver::getPDO()->prepare("SELECT GROUP_CONCAT(DISTINCT l.id_location SEPARATOR ',') as idl, l.name as lname, l.basename as lbasename, e.name as ename, e.color as color FROM location as l, event as e WHERE l.id_event = e.id_event AND e.id_diplome = :idd GROUP BY lname, lbasename, ename, color ORDER BY ename ASC, lbasename ASC"); $sqlr->execute([ ':idd' => $this->diplome_id ]); $fetched = $sqlr->fetchAll(); if( !$fetched ) $fetched[] = []; // foreach($fetched as $raw) // $location[$raw['ename']] = [ $raw['ename'], $raw['idl'], $raw['lname'], $raw['lbasename'], $raw['color'] ]; // } echo "
"; echo ""; foreach($fetched as $raw){ $color = $raw['color']; $id = $raw['idl']; $name = $raw['lname']; $basename = $raw['lbasename']; $ename = $raw['ename']; echo ""; } echo "
LessonRead nameCorrection
$ename$basename
"; echo ""; echo "
"; } public function correct_lessons(){ /* [1] Update data =========================================================*/ { /* (1) Check $_POST['name'] */ if( !isset($_POST['name']) || !is_array($_POST['name']) ) die("No data received"); /* (2) Store corrections */ foreach($_POST['name'] as $id=>$correct){ if( !empty(trim($correct)) ){ $sqlr = DatabaseDriver::getPDO()->prepare("UPDATE event SET name = :name WHERE id_event = :ide"); $sqlr->execute([ ':name' => $correct, ':ide' => $id ]); } } } /* [2] Update file one the fly =========================================================*/ /* (1) Get corrections */ $sqlr = DatabaseDriver::getPDO()->prepare("SELECT id_event, name FROM event WHERE id_diplome = :idd"); $sqlr->execute([ ':idd' => $this->diplome_id ]); /* (2) Manage error */ if( !($fetched=$sqlr->fetchAll()) ) die("Cannot update the .ics file now"); /* (3) Format data */ $corrections = []; foreach($fetched as $c) $corrections[$c['id_event']] = $c['name']; /* (3) Get file pointer */ $fp = @file_get_contents(__ROOT__."/tmp/".$this->diplome_id.".ics"); /* (4) Manage error */ if( !$fp ) die("Cannot update the .ics file now"); /* (4) Read line by line */ $line = explode("\n", $fp); for( $l = 0 ; $l < count($line)-1 ; $l++ ){ // {1} If got the right pointer // if( preg_match('@^DESCRIPTION:event\@(\d+)$@', $line[$l], $m) ){ // {2} If is in the list of correction // if( !isset($corrections[$m[1]]) ) continue; // {3} Rewrite name // $line[++$l] = "SUMMARY:".$corrections[$m[1]]; } } /* (5) Back in file */ file_put_contents(__ROOT__."/tmp/".$this->diplome_id.".ics", implode("\n", $line)); header('Location: /'); } // todo public function correct_location(){ /* [1] Update data =========================================================*/ { /* (1) Check $_POST['name'] */ if( !isset($_POST['name']) || !is_array($_POST['name']) ) die("No data received"); /* (2) Store corrections */ foreach($_POST['name'] as $ids=>$correct){ if( !empty(trim($correct)) ){ // check if containing id list if( !preg_match('@^\d+(,\d+)*$@', $ids) ) continue; // update for each location $id_list = explode(',', $ids); foreach($id_list as $id){ $sqlr = DatabaseDriver::getPDO()->prepare("UPDATE location SET name = :name WHERE id_location = :idl"); $sqlr->execute([ ':name' => $correct, ':idl' => $id ]); } } } } /* [2] Update file one the fly =========================================================*/ /* (1) Get corrections */ $sqlr = DatabaseDriver::getPDO()->prepare("SELECT l.id_location as id_location, l.name as name FROM location as l, event as e WHERE l.id_event = e.id_event AND e.id_diplome = :idd"); $sqlr->execute([ ':idd' => $this->diplome_id ]); /* (2) Manage error */ if( !($fetched=$sqlr->fetchAll()) ) die("Cannot update the .ics file now"); /* (3) Format data */ $corrections = []; foreach($fetched as $c) $corrections[$c['id_location']] = $c['name']; /* (3) Get file pointer */ $fp = @file_get_contents(__ROOT__."/tmp/".$this->diplome_id.".ics"); /* (4) Manage error */ if( !$fp ) die("Cannot update the .ics file now"); /* (4) Read line by line */ $line = explode("\n", $fp); for( $l = 0 ; $l < count($line)-1 ; $l++ ){ // {1} If got the right pointer // if( preg_match('@^DESCRIPTION:location\@(\d+)$@', $line[$l], $m) ){ // {2} If is in the list of correction // if( !isset($corrections[$m[1]]) ) continue; // {3} Rewrite name // $line[++$l] = "LOCATION:".$corrections[$m[1]]; } } /* (5) Back in file */ file_put_contents(__ROOT__."/tmp/".$this->diplome_id.".ics", implode("\n", $line)); header('Location: /'); } /* POST-CALL * */ public function __destruct(){ } }