2017-09-12 16:32:01 +00:00
< ? php
namespace router\controller ;
2017-09-14 17:56:24 +00:00
use \database\core\DatabaseDriver ;
2017-09-13 13:03:36 +00:00
2017-09-12 16:32:01 +00:00
class ics {
private $diplome_id ;
/* PRE - CALL
*
* @ url < String > Calling URI
*
*/
public function __construct ( $url ){
$this -> diplome_id = $url [ 'diplome_id' ];
2017-09-13 13:03:36 +00:00
2017-09-12 16:32:01 +00:00
}
/* 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 */
2017-09-14 15:15:08 +00:00
header ( 'Content-Type: text/calendar; charset=utf-8' );
header ( 'Content-Disposition: attachment; filename=' . $this -> diplome_id . '.ics' );
2017-09-12 16:32:01 +00:00
/* (2) Body */
readfile ( $file_name );
}
2017-09-13 13:03:36 +00:00
2017-09-15 18:21:52 +00:00
public function lessons (){
2017-09-13 13:03:36 +00:00
2017-09-14 17:56:24 +00:00
/* [ 1 ] Get database data
2017-09-13 13:03:36 +00:00
=========================================================*/
2017-09-14 17:56:24 +00:00
/* (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 " );
2017-09-15 18:21:52 +00:00
echo " <form method='POST' action='/xlessons/ " . $this -> diplome_id . " '> " ;
echo " <table><thead style='font-weight: bold;'><tr><td>Read name</td><td>Correction</td></tr></thead><tbody> " ;
2017-09-14 17:56:24 +00:00
foreach ( $d_cols as $data ){
$id = $data [ 'id_event' ];
$basename = $data [ 'basename' ];
$color = $data [ 'color' ];
$name = $data [ 'name' ];
2017-09-15 18:21:52 +00:00
echo " <tr><td> $basename </td><td><input type='text' style='display: inline-block; margin: 1em .2em; padding: .2em; border: none; background-color: $color ;' name='name[ $id ]' value=' $name '></td></tr> " ;
2017-09-14 17:56:24 +00:00
}
2017-09-15 18:21:52 +00:00
echo " </tbody></table> " ;
2017-09-14 17:56:24 +00:00
echo " <input type='submit' value='SAVE'> " ;
2017-09-15 18:21:52 +00:00
2017-09-14 17:56:24 +00:00
echo " </form> " ;
}
2017-09-15 18:21:52 +00:00
// todo
2017-09-15 18:36:12 +00:00
public function location (){
/* [ 1 ] Get events data
=========================================================*/
/* (1) Get the list of available events */
2017-09-15 23:37:54 +00:00
// $sqlr = DatabaseDriver::getPDO()->prepare("SELECT * FROM event WHERE id_diplome = :idd");
// $sqlr->execute([ ':idd' => $this->diplome_id ]);
// $events = $sqlr->fetchAll();
2017-09-15 18:36:12 +00:00
/* (2) Manage error */
2017-09-15 23:37:54 +00:00
// if( !$events )
// die("Correction not available for this diplome");
2017-09-15 18:36:12 +00:00
/* [ 2 ] Get location data
=========================================================*/
2017-09-15 23:37:54 +00:00
// foreach($events as &$event){
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
$location = [];
2017-09-15 18:36:12 +00:00
/* (1) Get the list of available locations*/
2017-09-15 23:37:54 +00:00
$sqlr = DatabaseDriver :: getPDO () -> prepare ( " SELECT l.id_location as idl, l.name as name, l.basename as basename, 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 idl, name, basename, ename, color " );
$sqlr -> execute ([ ':idd' => $this -> diplome_id ]);
$fetched = $sqlr -> fetchAll ();
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
if ( ! $fetched ){
$fetched [] = [];
$locdata [] = [];
}
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
foreach ( $fetched as $raw ){
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
if ( ! isset ( $location [ $raw [ 'ename' ]]) )
$location [ $raw [ 'ename' ]] = [];
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
$location [ $raw [ 'ename' ]][] = intval ( $raw [ 'idl' ] );
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
$locdata [ $raw [ 'ename' ]] = [ $raw [ 'name' ], $raw [ 'basename' ], $raw [ 'color' ] ];
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
}
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
// }
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
echo " <form method='POST' action='/xlocation/ " . $this -> diplome_id . " '> " ;
echo " <table><thead style='font-weight: bold;'><tr><td>Lesson</td><td>Read name</td><td>Correction</td></tr></thead><tbody> " ;
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
foreach ( $location as $ename => $ids ){
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
$color = $locdata [ $ename ][ 2 ];
$id = implode ( " , " , $ids );
$name = $locdata [ $ename ][ 0 ];
$basename = $locdata [ $ename ][ 1 ];
2017-09-15 18:36:12 +00:00
2017-09-15 23:37:54 +00:00
echo " <tr><td><b> $ename </b></td><td> $basename </td><td><input type='text' style='display: inline-block; margin: 1em .2em; padding: .2em; border: none; background-color: $color ;' name='name[ $id ]' value=' $name '></td></tr> " ;
2017-09-15 18:36:12 +00:00
}
echo " </tbody></table> " ;
echo " <input type='submit' value='SAVE'> " ;
echo " </form> " ;
}
2017-09-14 17:56:24 +00:00
2017-09-15 18:21:52 +00:00
public function correct_lessons (){
2017-09-14 17:56:24 +00:00
/* [ 1 ] Update data
=========================================================*/ {
2017-09-13 13:03:36 +00:00
2017-09-14 17:56:24 +00:00
/* (1) Check $_POST['name'] */
if ( ! isset ( $_POST [ 'name' ]) || ! is_array ( $_POST [ 'name' ]) )
die ( " No data received " );
2017-09-13 13:03:36 +00:00
2017-09-14 17:56:24 +00:00
/* (2) Store corrections */
foreach ( $_POST [ 'name' ] as $id => $correct ){
2017-09-13 13:03:36 +00:00
2017-09-14 17:56:24 +00:00
if ( ! empty ( trim ( $correct )) ){
$sqlr = DatabaseDriver :: getPDO () -> prepare ( " UPDATE event SET name = :name WHERE id_event = :ide " );
$sqlr -> execute ([ ':name' => $correct , ':ide' => $id ]);
2017-09-13 13:03:36 +00:00
2017-09-14 17:56:24 +00:00
}
2017-09-13 13:03:36 +00:00
2017-09-14 17:56:24 +00:00
}
2017-09-13 13:03:36 +00:00
}
2017-09-14 22:12:12 +00:00
/* [ 2 ] Update file one the fly
=========================================================*/
/* (1) Get corrections */
2017-09-15 18:21:52 +00:00
$sqlr = DatabaseDriver :: getPDO () -> prepare ( " SELECT id_event, name FROM event WHERE id_diplome = :idd " );
2017-09-14 22:12:12 +00:00
$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 )
2017-09-15 18:21:52 +00:00
$corrections [ $c [ 'id_event' ]] = $c [ 'name' ];
2017-09-14 22:12:12 +00:00
/* (3) Get file pointer */
2017-09-14 22:18:56 +00:00
$fp = @ file_get_contents ( __ROOT__ . " /tmp/ " . $this -> diplome_id . " .ics " );
2017-09-14 22:12:12 +00:00
/* (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 //
2017-09-15 18:21:52 +00:00
if ( preg_match ( '@^DESCRIPTION:event\@(\d+)$@' , $line [ $l ], $m ) ){
2017-09-14 22:12:12 +00:00
// {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: /' );
2017-09-13 13:03:36 +00:00
}
2017-09-15 18:21:52 +00:00
// todo
2017-09-15 18:40:29 +00:00
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 */
2017-09-15 23:37:54 +00:00
foreach ( $_POST [ 'name' ] as $ids => $correct ){
2017-09-15 18:40:29 +00:00
if ( ! empty ( trim ( $correct )) ){
2017-09-15 23:37:54 +00:00
// 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 ]);
}
2017-09-15 18:40:29 +00:00
}
}
}
/* [ 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: /' );
}
2017-09-15 18:21:52 +00:00
2017-09-12 16:32:01 +00:00
/* POST - CALL
*
*/
public function __destruct (){
}
}