You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

89 lines
2.9 KiB

<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_once _DIR_PLUGIN_OPTIMAGES . 'vendor/autoload.php';
use Spatie\ImageOptimizer\OptimizerChain;
use Spatie\ImageOptimizer\Optimizers\Jpegoptim;
use Spatie\ImageOptimizer\Optimizers\Pngquant;
use Spatie\ImageOptimizer\Optimizers\Optipng;
use Spatie\ImageOptimizer\Optimizers\Gifsicle;
/**
* À l'ajout d'un document dont l'extension est jpg, png ou gif
* on fait appel à image-optimizer pour compresser les images
* puis on met à jour la taille du fichier dans la base de données
*
* À la suppression d'un document, on vérifie l'existence d'une copie
* et on la supprime du serveur
*
* @param mixed $flux
* @return mixed $flux
*/
function optimages_post_edition($flux) {
if (
is_array($flux) && isset($flux['args']['operation']) && ($flux['args']['operation'] == 'ajouter_document')
and ($document = sql_fetsel('*', 'spip_documents', 'id_document=' . intval($flux['args']['id_objet'])))
) {
if (in_array($document['extension'], ['jpg', 'png', 'gif'])) {
include_spip('inc/documents');
$fichier = get_spip_doc($document['fichier']);
$id_document = $document['id_document'];
$backup = lire_config('optimages/sauvegarde') ?? '';
if ($backup === 'on') {
$clone = $fichier . '.back';
copy($fichier, $clone);
}
$optimizer_chain = (new OptimizerChain());
$jpegoptim = lire_config('optimages/jpegoptim_activer') ?? '';
$jpegoptim_opt = explode(', ', lire_config('optimages/jpegoptim_options')) ?? [];
if ($jpegoptim === 'on') {
$optimizer_chain->addOptimizer(new Jpegoptim($jpegoptim_opt));
}
$pngquant = lire_config('optimages/pngquant_activer') ?? '';
$pngquant_opt = explode(', ', lire_config('optimages/pngquant_options')) ?? [];
if ($pngquant === 'on') {
$optimizer_chain->addOptimizer(new Pngquant($pngquant_opt));
}
$optipng = lire_config('optimages/optipng_activer') ?? '';
$optipng_opt = explode(', ', lire_config('optimages/optipng_options')) ?? [];
if ($optipng === 'on') {
$optimizer_chain->addOptimizer(new Optipng($optipng_opt));
}
$gifsicle = lire_config('optimages/gifsicle_activer') ?? '';
$gifsicle_opt = explode(', ', lire_config('optimages/gifsicle_options')) ?? [];
if ($gifsicle === 'on') {
$optimizer_chain->addOptimizer(new Gifsicle($gifsicle_opt));
}
$optimizer_chain->optimize($fichier);
$poids = filesize($fichier);
sql_updateq('spip_documents', ['taille' => $poids], 'id_document=' . intval($id_document));
}
}
if (is_array($flux) && isset($flux['args']['operation']) && ($flux['args']['operation'] == 'supprimer_document')) {
$document = $flux['args']['document'];
if (in_array($document['extension'], ['jpg', 'png', 'gif'])) {
$fichier = $flux['args']['document']['fichier'];
$clone = $fichier . '.back';
if (file_exists(_DIR_IMG . $clone)) {
unlink(_DIR_IMG . $clone);
}
}
}
return $flux;
}