ajax = $ajax;
$this->page = $page;
$this->folder = $folder;
$this->permissions = $permissions;
$this->path = 'data/' . $this->folder . '/images/';
$this->pathMini = 'data/' . $this->folder . '/images-mini/';
}
// GET
// SET
public function setFolder(string $folder)
{
$this->folder = $folder;
$this->path = 'data/' . $this->folder . '/images/';
$this->pathMini = 'data/' . $this->folder . '/images-mini/';
}
public function setFileName($fileName)
{
$this->FileName = $fileName;
}
public function setThumbnailWidth(int $width)
{
$this->width = $width;
}
public function upload()
{
// traitement et enregistrement de l'image
if (isset($_FILES['upload']) AND $_FILES['upload']['error'] == 0) // 0 signifie ok
{
//$this->pathInfos = pathinfo($_FILES['upload']['name']);
$this->pathInfos = pathinfo($this->FileName);
$extension = $this->pathInfos['extension'];
$extautorisées = array('jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff');
// on prend la même liste que celle côté javascript, le SVG est bloqué pour raison de sécurité (javascript à l'intérieur)
if (in_array($extension, $extautorisées))
{
move_uploaded_file($_FILES['upload']['tmp_name'], $this->path . $this->FileName);
chmod($this->path . $this->FileName, $this->permissions);
}
else
{
$this->erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff
le format svg n\'est pas supporté';
}
}
else
{
$this->erreur = 'Erreur: Le fichier n\'a pas pu être téléchargé correctement.
Au fait, "upload_max_filesize" dans le php.ini vaut ' . ini_get('upload_max_filesize') . '.';
}
// retour des rêquetes AJAX
if($this->ajax && empty($Image->erreur))
{
// chemin en JSON attendu par l'éditeur
$this->reponseAjax = '{"url": "data/' . $this->folder . '/images/' . $this->FileName . '"}';
}
}
// miniatures des photos
public function makeThumbnail()
{
global $imageLibrary;
if($imageLibrary == 'imagick')
{
$Image = new Imagick($this->path . $this->FileName);
$source = $Image->getImageGeometry();
if($source['width'] > $this->width)
{
// 0 signifie qu'on conserve les proportions
$Image->thumbnailImage($this->width, 0);
}
// écriture dans un fichier
$nomMiniImage = $this->pathMini . $this->pathInfos['filename'] . '-mini.' . $this->pathInfos['extension'];
$Image->writeImage($nomMiniImage);
chmod($nomMiniImage, $this->permissions);
}
elseif($imageLibrary == 'gd')
{
// cette fonction fonctionne pour tous les formats
$source = imagecreatefromstring(file_get_contents($this->path . $this->FileName));
// on créera un jpg quelque soit l'image d'origine
// nécessite une correction du html dans Article::makeHtmlMiniImages()
$nomMiniImage = $this->pathMini . $this->pathInfos['filename'] . '-mini.jpg';
$ratio = imagesy($source) / imagesx($source);
if(imagesx($source) > $this->width)
{
$height = intval($this->width * $ratio); // GD veut des pixels entiers
// créer un rectangle noir
$destination = imagecreatetruecolor($this->width, $height);
// sélectionne un rectangle dans l'image source
// et le place dans un rectangle dans la nouvelle
imagecopyresampled($destination, $source, 0, 0, 0, 0, $this->width, $height, imagesx($source), imagesy($source));
// envoie l'image dans un fichier
imagejpeg($destination, $nomMiniImage);
}
else
{
imagejpeg($source, $nomMiniImage);
}
chmod($nomMiniImage, $this->permissions);
}
else
{
// utiliser la grande image si il est impossible de créer une miniature
// message d'erreur
$_SESSION['erreur'] = addslashes("Echec de la création d'une miniature. Vérifier le fichier config.php");
header('Location: index.php?page=' . $this->folder . '&erreur=dependance_bibli_images');
exit();
}
}
}