page = $page;
$this->time = time();
$this->makeFileList();
}
// tableaux des noms des fichiers
// noter que le chemin et l'extension ne varient pas
public function makeFileList()
{
// globbing = utiliser un pattern pour cibler des fichiers
$nameList = glob('data/' . $this->page . '/' . $this->format . '/*.' . $this->format);
$this->fileListCount = count($nameList);
for($i = 0; $i < $this->fileListCount; $i++)
{
$pathInfo = pathinfo($nameList[$i]);
$fileCode = $pathInfo['filename'];
$this->fileList[$i] = [
'fileCode' => $fileCode,
'fileName' => $nameList[$i],
'content' => '',
//'date' => getdate() // peut-être utile plus tard
];
}
}
private function makeHtmlMiniImages($content)
{
while(preg_match('#
#', $content))
{
// ? => mode paresseux, on fait matcher le moins d'occurences possibles
$pattern = '#(
)#';
// insérer -mini au nom du dossier et au fichier
$content = preg_replace($pattern, '$1$2-mini$3-mini$4', $content);
}
return $content;
}
// GET
// SET
// fonctions CRUD (create - read - update - delete)
// create
public function create($content)
{
// $format dépend de la classe qui a été instanciée
// nommer les fichiers avec le timestamp pour:
// - les trier par ordre chronologique
// - rendre quasi impossible d'avoir deux fois le même nom
if($this->format == 'html')
{
// html version images normales
$contentMaxi = $content;
$fileName = 'data/' . $this->page . '/' . $this->format . '-maxi-images/' . $this->time . '.' . $this->format;
$file = fopen($fileName, 'w'); // w pour créer ou écraser
fputs($file, $contentMaxi);
fclose($file);
chmod($fileName, 0666);
// html version petites images
$content = self::makeHtmlMiniImages($content);
}
$fileName = 'data/' . $this->page . '/' . $this->format . '/' . $this->time . '.' . $this->format;
$file = fopen($fileName, 'w'); // w pour créer ou écraser
fputs($file, $content);
fclose($file);
chmod($fileName, 0666);
}
// read
public function readAll() // ajoute le contenu à FileList
{
for($i = 0; $i < $this->fileListCount; $i++)
{
$this->fileList[$i]['content'] = file_get_contents($this->fileList[$i]['fileName']);
}
}
public function readOne()
{
return(file_get_contents('data/' . $this->page . '/' . $this->format . '/' . $this->fileCode . '.' . $this->format));
}
// update
public function update($content)
{
if($this->format == 'html')
{
// html version images normales
$contentMaxi = $content;
$fileName = 'data/' . $this->page . '/' . $this->format . '-maxi-images/' . $this->fileCode . '.' . $this->format;
if(file_exists($fileName) && empty($content))
{
$this->delete();
}
elseif(!empty($content))
{
$file = fopen($fileName, 'w'); // w pour créer ou écraser
fputs($file, $contentMaxi);
fclose($file);
chmod($fileName, 0666);
}
// html version petites images
$content = self::makeHtmlMiniImages($content);
}
// json ou html version petites images
$fileName = 'data/' . $this->page . '/' . $this->format . '/' . $this->fileCode . '.' . $this->format;
if(file_exists($fileName) && empty($content))
{
$this->delete();
}
elseif(!empty($content))
{
$file = fopen($fileName, 'w'); // w pour créer ou écraser
fputs($file, $content);
fclose($file);
chmod($fileName, 0666);
}
}
// delete
public function delete()
{
unlink('data/' . $this->page . '/' . $this->format . '/' . $this->fileCode . '.' . $this->format);
}
}