image-heberg/classes/HelperAdmin.php

281 lines
9.1 KiB
PHP

<?php
/*
* Copyright 2008-2023 Anael MOBILIA
*
* This file is part of image-heberg.fr.
*
* image-heberg.fr is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* image-heberg.fr is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with image-heberg.fr. If not, see <http://www.gnu.org/licenses/>
*/
namespace ImageHeberg;
use PDO;
use ArrayObject;
use Imagick;
/**
* Bibliothèque d'outils pour la gestion du site en tant qu'admin
*/
abstract class HelperAdmin
{
/**
* Liste des images n'ayant jamais été affichées et présentes sur le serveur depuis xx temps
* @return ArrayObject
*/
public static function getNeverUsedFiles(): ArrayObject
{
// Toutes les images jamais affichées & envoyées il y a plus de xx jours
$req = 'SELECT im.new_name
FROM images im
WHERE im.last_view IS NULL
AND im.date_envoi < DATE_SUB(CURRENT_DATE(), INTERVAL ' . _DELAI_EFFACEMENT_IMAGES_JAMAIS_AFFICHEES_ . ' DAY)
/* Préservation des fichiers des membres */
AND 0 = (
SELECT COUNT(*)
FROM possede po
WHERE po.images_id = im.id
)
/* Préservation si miniature affichée */
AND 0 = (
SELECT COUNT(*)
FROM thumbnails th
WHERE th.images_id = im.id
AND th.last_view IS NOT NULL
)
';
// Exécution de la requête
$resultat = MaBDD::getInstance()->query($req);
$monRetour = new ArrayObject();
// Pour chaque résultat retourné
foreach ($resultat->fetchAll() as $value) {
// J'ajoute le nom de l'image
$monRetour->append($value->new_name);
}
return $monRetour;
}
/**
* Liste des images plus utilisées depuis au moins xx jours
* @return ArrayObject
*/
public static function getUnusedFiles(): ArrayObject
{
// Toutes les images non affichées depuis xx jours
$req = 'SELECT im.new_name
FROM images im
WHERE im.last_view < DATE_SUB(CURRENT_DATE(), INTERVAL ' . _DELAI_INACTIVITE_AVANT_EFFACEMENT_IMAGES_ . ' DAY)
/* Non prise en compte des images jamais affichées */
AND im.last_view IS NOT NULL
/* Préservation des images membres */
AND 0 = (
SELECT COUNT(*)
FROM possede po
WHERE po.images_id = im.id
)
/* Préservation si miniature affichée */
AND 0 = (
SELECT COUNT(*)
FROM thumbnails th
WHERE th.images_id = im.id
AND th.last_view > DATE_SUB(CURRENT_DATE(), INTERVAL ' . _DELAI_INACTIVITE_AVANT_EFFACEMENT_IMAGES_ . ' DAY)
)';
// Exécution de la requête
$resultat = MaBDD::getInstance()->query($req);
$monRetour = new ArrayObject();
// Pour chaque résultat retourné
foreach ($resultat->fetchAll() as $value) {
// J'ajoute le nom de l'image
$monRetour->append($value->new_name);
}
return $monRetour;
}
/**
* Liste des comptes sans images et créés depuis au moins xx jours
* @return ArrayObject
*/
public static function getNeverUsedAccounts(): ArrayObject
{
// Toutes les comptes créés et jamais utilisés depuis xx jours
$req = 'SELECT m.id
FROM membres m
WHERE m.date_inscription < DATE_SUB(CURRENT_DATE(), INTERVAL ' . _DELAI_EFFACEMENT_COMPTES_JAMAIS_UTILISES_ . ' DAY)
/* Préservation des comptes possédant des images */
AND 0 = (
SELECT COUNT(*)
FROM possede po
WHERE po.membres_id = m.id
)';
// Exécution de la requête
$resultat = MaBDD::getInstance()->query($req);
$monRetour = new ArrayObject();
// Pour chaque résultat retourné
foreach ($resultat->fetchAll() as $value) {
// J'ajoute l'ID du compte
$monRetour->append($value->id);
}
return $monRetour;
}
/**
* Liste de l'ensemble des images en BDD
* @return ArrayObject
*/
public static function getAllImagesNameBDD(): ArrayObject
{
// Toutes les images (sauf 404 & banned)
$req = 'SELECT md5 FROM images WHERE id > 2';
// Exécution de la requête
$resultat = MaBDD::getInstance()->query($req);
$monRetour = new ArrayObject();
// Pour chaque résultat retourné
foreach ($resultat->fetchAll() as $value) {
// J'ajoute le nom de l'image
$monRetour->append($value->md5);
}
return $monRetour;
}
/**
* Liste de l'ensemble des images en HDD
* @param string $path path à analyser
* @return ArrayObject
*/
public static function getAllImagesNameHDD(string $path): ArrayObject
{
$monRetour = new ArrayObject();
// Scanne le répertoire des images
$scan_rep = scandir($path);
// Pour chaque item
foreach ($scan_rep as $item) {
if (!in_array($item, ['.', '..', '_dummy', 'z_cache'])) {
if (is_dir($path . $item)) {
// Appel récursif
if ($path . $item . '/' !== _PATH_MINIATURES_) {
$monRetourTmp = self::getAllImagesNameHDD($path . $item . '/');
// Parsage et récupération des sous fichiers...
foreach ($monRetourTmp as $fichier) {
$monRetour->append($fichier);
}
}
} elseif ($item !== _IMAGE_404_ && $item !== _IMAGE_BAN_) {
$monRetour->append($item);
}
}
}
return $monRetour;
}
/**
* Liste de l'ensemble des miniatures en BDD
*/
public static function getAllMiniaturesNameBDD(): ArrayObject
{
// Toutes les images
$req = 'SELECT md5 FROM thumbnails';
// Exécution de la requête
$resultat = MaBDD::getInstance()->query($req);
$monRetour = new ArrayObject();
// Pour chaque résultat retourné
foreach ($resultat->fetchAll() as $value) {
// J'ajoute le nom de l'image
$monRetour->append($value->md5);
}
return $monRetour;
}
/**
* Toutes les images avec un même MD5
* @param string $unMd5
* @return ArrayObject
*/
public static function getImageByMd5(string $unMd5): ArrayObject
{
// Images avec le même MD5
$req = MaBDD::getInstance()->prepare('SELECT new_name FROM images WHERE md5 = :md5');
$req->bindValue(':md5', $unMd5);
$req->execute();
$monRetour = new ArrayObject();
// Pour chaque résultat retourné
foreach ($req->fetchAll() as $value) {
// J'ajoute le nom de l'image
$monRetour->append($value->new_name);
}
return $monRetour;
}
/**
* Toutes les images signalées
* @return ArrayObject
*/
public static function getImagesSignalees(): ArrayObject
{
// Images signalées
$req = 'SELECT new_name FROM images WHERE isSignalee = 1 and isBloquee = 0';
// Exécution de la requête
$resultat = MaBDD::getInstance()->query($req);
$monRetour = new ArrayObject();
// Pour chaque résultat retourné
foreach ($resultat->fetchAll() as $value) {
// J'ajoute le nom de l'image
$monRetour->append($value->new_name);
}
return $monRetour;
}
/**
* Images dont les statistiques d'affichage sont incohérentes
* @param int $nbMax Nb affichage / jour à partir duquel on veut les images
* @return ArrayObject
*/
public static function getImagesTropAffichees(int $nbMax): ArrayObject
{
// Images avec trop d'affichages
$req = 'SELECT new_name, (nb_view_v4 + nb_view_v6) / DATEDIFF(NOW(), date_envoi) as nbViewPerDay FROM images WHERE isBloquee = 0 and isApprouvee = 0 HAVING nbViewPerDay > ' . $nbMax . ' ORDER BY nbViewPerDay DESC';
// Exécution de la requête
$resultat = MaBDD::getInstance()->query($req);
$monRetour = new ArrayObject();
// Pour chaque résultat retourné
foreach ($resultat->fetchAll() as $value) {
// J'ajoute le nom de l'image
$monRetour->append($value->new_name);
}
return $monRetour;
}
}