ascvh@#%(^-^)V ?host,ip,port,protocol,title,domain,country,city,link,org ???à JFIF  x x ?? C         ?? C   ?à   " ??     ?? μ  } !1AQa "q2?‘?#B±áR?e$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??…???‰?’“”?–—???¢£¤¥|§¨?a23′μ?·?1o??????èéêòó???×?ùúáa?????èéê?òó???÷?ùú??     ?? μ   w !1AQ aq"2?B‘?±á #3Rebr?{ gilour
<?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