wp_back/wp-content/plugins/shortpixel-image-optimiser/class/Controller/StatsController.php
2024-05-20 15:37:46 +03:00

132 lines
3.3 KiB
PHP

<?php
namespace ShortPixel\Controller;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
use ShortPixel\Model\StatsModel as StatsModel;
use ShortPixel\Controller\Queue\StatsQueue as StatsQueue;
class StatsController extends \ShortPixel\Controller
{
protected $model;
protected $queue;
protected static $instance;
protected $stats = array(
// 'processed'
);
public function __construct()
{
$this->model = new StatsModel();
}
public static function getInstance()
{
if (is_null(self::$instance))
self::$instance = new StatsController();
return self::$instance;
}
public function find(... $params)
{
if (count($params) == 1)
{
$stat = $this->model->get($params[0]); // check if stat is simple property
if (! is_null($stat) )
{
return $stat;
}
}
$stat = $this->model->getStat(array_shift($params));
for($i = 0; $i < count($params); $i++)
{
$stat = $stat->grab($params[$i]);
}
if (is_object($stat)) // failed to get statistic.
{
Log::addWarn('Statistics for this path failed', $params );
return 0;
}
else
return $stat;
}
public function reset()
{
$this->model->reset();
}
public function getAverageCompression()
{
$totalOptimized = $this->model->get('totalOptimized');
$totalOriginal = $this->model->get('totalOriginal');
$average = 0;
if ($totalOptimized > 0 && $totalOriginal > 0)
{
$average = round(( 1 - ( $totalOptimized / $totalOriginal ) ) * 100, 2);
}
return $average;
}
// This is not functional @todo
public function addImage($stats)
{
$stats->type = 'media';
$stats->compression = 'lossy';
$stats->images = 6;
$stats->items = 1;
$stats->timestamp = 0;
$this->model->add($stats);
}
/** This is a different calculation since the thumbs and totals are products of a database query without taking into account optimizable, excluded thumbs etc. This is a performance thing */
public function thumbNailsToOptimize()
{
$totalThumbs = $this->find('media',
'thumbsTotal'); // according to database.
$totalThumbsOptimized = $this->find('media', 'thumbs');
$excludedThumbnails = \wpSPIO()->settings()->excludeSizes;
$excludeCount = (is_array($excludedThumbnails)) ? count($excludedThumbnails) : 0;
// Totalthumbs - thumbsOptimized - minus amount of excluded (guess)
$toOptimize = $totalThumbs - $totalThumbsOptimized - ($this->find('media', 'items') * $excludeCount);
return $toOptimize;
}
/** This count all possible optimizable images (approx). Not checking settings like excludesizes / webp / original images etc. More fine-grained approx in BulkViewController */
public function totalImagesToOptimize()
{
$totalImagesOptimized = $this->find('total', 'images');
$totalImages = $this->find('total', 'itemsTotal') + $this->find('total', 'thumbsTotal');
$toOpt = $totalImages - $totalImagesOptimized;
return $toOpt;
}
} // class