132 lines
3.3 KiB
PHP
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
|