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
 |