136 lines
3.8 KiB
PHP
136 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace service;
|
|
|
|
use \database\core\DatabaseDriver;
|
|
|
|
|
|
|
|
class Updater{
|
|
|
|
/* [1] Attributes
|
|
=========================================================*/
|
|
private $config = null;
|
|
private $d_data = null;
|
|
|
|
|
|
/* (1) Constructs and initialise an updater
|
|
*
|
|
* @d_id<String> Diplome id to update (only)
|
|
*
|
|
* @return instance<Updater> New Updater
|
|
*
|
|
---------------------------------------------------------*/
|
|
public function __construct($d_id=null){
|
|
|
|
/* [1] Fetch config
|
|
=========================================================*/ {
|
|
|
|
/* (1) Try to load the configuration */
|
|
$this->config = Config::load("http://sciences.univ-pau.fr/edt/_ressource.js", "http://sciences.univ-pau.fr/edt/_periode.js");
|
|
|
|
/* (2) If cannot fetch config */
|
|
if( !($this->config instanceof Config) )
|
|
throw new \Exception("Cannot fetch configuration");
|
|
|
|
}
|
|
|
|
|
|
$d_list = $this->config->getDiplomes();
|
|
if( !is_null($d_id) && isset($d_list[$d_id]) )
|
|
$this->d_data = [ $d_id, $d_list[$d_id] ];
|
|
|
|
}
|
|
|
|
|
|
|
|
/* (2) Update the ICS files
|
|
*
|
|
* @return error<bool> FALSE on error
|
|
*
|
|
---------------------------------------------------------*/
|
|
public function update(){
|
|
|
|
|
|
/* [1] If only 1 diplome to update -> do it
|
|
=========================================================*/
|
|
if( is_array($this->d_data) ){
|
|
|
|
$d_id = $this->d_data[0];
|
|
$d_name = $this->d_data[1];
|
|
|
|
file_put_contents(__ROOT__."/tmp/$d_id.ics", "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//xdrm.io//NONSGML v1.0//EN\nMETHOD:PUBLISH\nX-WR-CALNAME: UPPA $d_name\n");
|
|
\chmod(__ROOT__."/tmp/$d_id.ics", 00775);
|
|
|
|
/* (1) Browse each date
|
|
---------------------------------------------------------*/
|
|
foreach($this->config->getPeriods() as $p_id=>$p_date){
|
|
|
|
/* (1) Load image in the extractor */
|
|
$calext = new CalendarExtractor($d_id, "http://sciences.univ-pau.fr/edt/diplomes/${d_id}${p_id}.png", $p_date);
|
|
|
|
/* (2) Extract calendar data */
|
|
$calext->process();
|
|
|
|
/* (3) Get ICS events representation */
|
|
$EVENTS = $calext->toIcs();
|
|
|
|
/* (4) Add to file */
|
|
file_put_contents(__ROOT__."/tmp/$d_id.ics", $EVENTS, FILE_APPEND);
|
|
|
|
}
|
|
|
|
file_put_contents(__ROOT__."/tmp/$d_id.ics", "END:VCALENDAR", FILE_APPEND);
|
|
|
|
/* (2) Register update
|
|
---------------------------------------------------------*/
|
|
$sqlr = DatabaseDriver::getPDO()->prepare("UPDATE diplome SET updated_at = CURRENT_TIMESTAMP WHERE id_diplome = :idd");
|
|
$sqlr->execute([ ':idd' => $d_id ]);
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
/* [2] Else -> Browse each diplome
|
|
=========================================================*/
|
|
foreach($this->config->getDiplomes() as $d_id=>$d_name){
|
|
|
|
file_put_contents(__ROOT__."/tmp/$d_id.ics", "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//xdrm.io//NONSGML v1.0//EN\nMETHOD:PUBLISH\nX-WR-CALNAME:UPPA $d_name\n");
|
|
\chmod(__ROOT__."/tmp/$d_id.ics", 0775);
|
|
|
|
/* (1) Browse each date
|
|
---------------------------------------------------------*/
|
|
foreach($this->config->getPeriods() as $p_id=>$p_date){
|
|
|
|
/* (1) Load image in the extractor */
|
|
$calext = new CalendarExtractor($d_id, "http://sciences.univ-pau.fr/edt/diplomes/${d_id}${p_id}.png", $p_date);
|
|
|
|
/* (2) Extract calendar data */
|
|
$calext->process();
|
|
|
|
/* (3) Get ICS events representation */
|
|
$EVENTS = $calext->toIcs();
|
|
|
|
/* (4) Add to file */
|
|
file_put_contents(__ROOT__."/tmp/$d_id.ics", $EVENTS, FILE_APPEND);
|
|
\chmod(__ROOT__."/tmp/$d_id.ics", 0775);
|
|
|
|
}
|
|
|
|
file_put_contents(__ROOT__."/tmp/$d_id.ics", "END:VCALENDAR", FILE_APPEND);
|
|
\chmod(__ROOT__."/tmp/$d_id.ics", 0775);
|
|
|
|
/* (2) Register update
|
|
---------------------------------------------------------*/
|
|
$sqlr = DatabaseDriver::getPDO()->prepare("UPDATE diplome SET updated_at = CURRENT_TIMESTAMP WHERE id_diplome = :idd");
|
|
$sqlr->execute([ ':idd' => $d_id ]);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
} |