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
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; |
|
}
|
|
|