225 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace ShortPixel\Controller;
 | |
| 
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
|  exit; // Exit if accessed directly.
 | |
| }
 | |
| 
 | |
| use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
 | |
| 
 | |
| use ShortPixel\Model\ResponseModel as ResponseModel;
 | |
| use ShortPixel\Model\Image\ImageModel as ImageModel;
 | |
| 
 | |
| 
 | |
| class ResponseController
 | |
| {
 | |
| 
 | |
|     protected static $items = array();
 | |
| 
 | |
| 		protected static $queueName; // the current queueName.
 | |
| 		protected static $queueType;  // the currrent queueType.
 | |
| 		protected static $queueMaxTries;
 | |
| 
 | |
| 		protected static $screenOutput  = 1; // see consts down
 | |
| 
 | |
| 		// Some form of issue keeping
 | |
| 		const ISSUE_BACKUP_CREATE = 10; // Issues with backups in ImageModel
 | |
| 		const ISSUE_BACKUP_EXISTS = 11;
 | |
| 		const ISSUE_OPTIMIZED_NOFILE = 12; // Issues with missing files
 | |
| 		const ISSUE_QUEUE_FAILED = 13;  // Issues with enqueueing items ( Queue )
 | |
| 		const ISSUE_FILE_NOTWRITABLE = 20; // Issues with file writing
 | |
| 		const ISSUE_DIRECTORY_NOTWRITABLE = 30; // Issues with directory writing
 | |
| 
 | |
| 
 | |
| 		const ISSUE_API = 50; // Issues with API - general
 | |
| 		const ISSUE_QUOTA = 100; // Issues with Quota.
 | |
| 
 | |
| 		const OUTPUT_MEDIA = 1; // Has context of image, needs simple language
 | |
| 		const OUTPUT_BULK = 2;
 | |
| 		const OUTPUT_CLI = 3;  // Has no context, needs more information
 | |
| 
 | |
| 
 | |
| 		/** Correlates type of item with the queue being used.  Be aware that usage *outside* the queue system needs to manually set type
 | |
| 		* @param Object QueueObject being used.
 | |
| 		*
 | |
| 		*/
 | |
| 		public static function setQ($q)
 | |
| 		{
 | |
| 			 $queueType = $q->getType();
 | |
| 
 | |
| 			 self::$queueName = $q->getQueueName();
 | |
| 			 self::$queueType = $queueType;
 | |
| 			 self::$queueMaxTries = $q->getShortQ()->getOption('retry_limit');
 | |
| 
 | |
| 			 if (! isset(self::$items[$queueType]))
 | |
| 			 {
 | |
| 				  self::$items[self::$queueType]  = array();
 | |
| 			 }
 | |
| 		}
 | |
| 
 | |
| 		public static function setOutput($output)
 | |
| 		{
 | |
| 				self::$screenOutput = $output;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		public static function getResponseItem($item_id)
 | |
| 		{
 | |
| 				if (is_null(self::$queueType)) // fail-safe
 | |
| 				{
 | |
| 					$itemType = "Unknown";
 | |
| 				}
 | |
| 				else {
 | |
| 					$itemType = self::$queueType;
 | |
| 				}
 | |
| 
 | |
| 				if (isset(self::$items[$itemType][$item_id]))
 | |
| 				{
 | |
| 					 $item = self::$items[$itemType][$item_id];
 | |
| 				}
 | |
| 				else {
 | |
| 						$item = new ResponseModel($item_id, $itemType);
 | |
| 				}
 | |
| 
 | |
| 				return $item;
 | |
| 		}
 | |
| 
 | |
| 		protected static function updateResponseItem($item)
 | |
| 		{
 | |
| 				$itemType = $item->item_type;
 | |
| 			  self::$items[$itemType][$item->item_id] = $item;
 | |
| 		}
 | |
| 
 | |
| 		// ?
 | |
| 		//
 | |
| 		public static function addData($item_id, $name, $value = null)
 | |
| 		{
 | |
| 			if (! is_array($name) && ! is_object($name) )
 | |
| 			{
 | |
| 				$data = array($name => $value);
 | |
| 			}
 | |
| 			else {
 | |
| 				$data = $name;
 | |
| 			}
 | |
| 
 | |
| 			$item_type = (array_key_exists('item_type', $data)) ? $data['item_type'] : false;
 | |
| 			// If no queue / queue type is set, set it if item type is passed to ResponseController.  For items outside the queue system.
 | |
| 			if ($item_type && is_null(self::$queueType))
 | |
| 			{
 | |
| 				 self::$queueType = $item_type;
 | |
| 			}
 | |
| 
 | |
| 			$resp = self::getResponseItem($item_id); // responseModel
 | |
| 
 | |
| 			foreach($data as $prop => $val)
 | |
| 			{
 | |
| 					if (property_exists($resp, $prop))
 | |
| 					{
 | |
| 
 | |
| 						 $resp->$prop = $val;
 | |
| 					}
 | |
| 					else {
 | |
| 					}
 | |
| 
 | |
| 			}
 | |
| 			self::updateResponseItem($resp);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		public static function formatItem($item_id)
 | |
| 		{
 | |
| 				 $item = self::getResponseItem($item_id); // ResponseMOdel
 | |
| 				 $text = $item->message;
 | |
| 
 | |
| 				 if ($item->is_error)
 | |
| 				 	  $text = self::formatErrorItem($item, $text);
 | |
| 				 else {
 | |
| 					 	$text = self::formatRegularItem($item, $text);
 | |
| 				 }
 | |
| 
 | |
| 				 return $text;
 | |
| 		}
 | |
| 
 | |
| 		private static function formatErrorItem($item, $text)
 | |
| 		{
 | |
| 			switch($item->issue_type)
 | |
| 			{
 | |
| 				 case self::ISSUE_BACKUP_CREATE:
 | |
| 				 		if (self::$screenOutput < self::OUTPUT_CLI) // all but cli .
 | |
| 				 			$text .= sprintf(__(' - file %s', 'shortpixel-image-optimiser'), $item->fileName);
 | |
| 				 break;
 | |
| 			}
 | |
| 
 | |
| 			switch($item->fileStatus)
 | |
| 			{
 | |
| 				  case ImageModel::FILE_STATUS_ERROR:
 | |
| 							$text .= sprintf(__('( %s %d ) ', 'shortpixel-image-optimizer'), (strtolower($item->item_type) == 'media') ?  __('Attachment ID ') : __('Custom Type '), $item->item_id);
 | |
| 					break;
 | |
| 			}
 | |
| 
 | |
| 			switch($item->apiStatus)
 | |
| 			{
 | |
| 				  case ApiController::STATUS_FAIL:
 | |
| 							$text .= sprintf(__('( %s %d ) ', 'shortpixel-image-optimizer'), (strtolower($item->item_type) == 'media') ?  __('Attachment ID ') : __('Custom Type '), $item->item_id);
 | |
| 					break;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			if (self::$screenOutput == self::OUTPUT_CLI)
 | |
| 			{
 | |
| 				 $text = '(' . self::$queueName . ' : ' . $item->fileName . ') ' . $text . ' ';
 | |
| 			}
 | |
| 
 | |
| 			return $text;
 | |
| 		}
 | |
| 
 | |
| 		private static function formatRegularItem($item, $text)
 | |
| 		{
 | |
| 
 | |
| 			  if (! $item->is_done && $item->apiStatus == ApiController::STATUS_UNCHANGED)
 | |
| 				{
 | |
| 					 	$text = sprintf(__('Optimizing - waiting for results (%d/%d)','shortpixel-image-optimiser'), $item->images_done, $item->images_total);
 | |
| 				}
 | |
| 				if (! $item->is_done && $item->apiStatus == ApiController::STATUS_ENQUEUED)
 | |
| 				{
 | |
| 				  	$text = sprintf(__('Optimizing - Item has been sent to ShortPixel (%d/%d)','shortpixel-image-optimiser'), $item->images_done, $item->images_total);
 | |
| 				}
 | |
| 
 | |
| 				switch($item->apiStatus)
 | |
| 				{
 | |
| 					 case ApiController::STATUS_SUCCESS:
 | |
| 					 	$text = __('Item successfully optimized', 'shortpixel-image-optimiser');
 | |
| 					 break;
 | |
| 
 | |
| 					 case ApiController::STATUS_FAIL:
 | |
| 					 case ApiController::ERR_TIMEOUT:
 | |
| 						 if (self::$screenOutput < self::OUTPUT_CLI)
 | |
| 						 {
 | |
| 						 }
 | |
| 					 break;
 | |
|            case ApiController::STATUS_NOT_API:
 | |
|               $action = (property_exists($item, 'action')) ? ucfirst($item->action) : __('Action', 'shortpixel-image-optimiser');
 | |
|               $filename = (property_exists($item, 'fileName')) ? $item->fileName : '';
 | |
|               $text = sprintf(__('%s completed for %s'), $action, $item->fileName);
 | |
|            break;
 | |
| 				}
 | |
| 
 | |
| 				if (self::$screenOutput == self::OUTPUT_CLI)
 | |
| 				{
 | |
| 					 $text = '(' . self::$queueName . ' : ' . $item->fileName . ') ' . $text . ' ';
 | |
|            if ($item->tries > 0)
 | |
| 					      $text .= sprintf(__('(cycle %d)', 'shortpixel-image-optimiser'), intval($item->tries) );
 | |
| 				}
 | |
| 
 | |
| 				return $text;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		private function responseStrings()
 | |
| 		{
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| } // Class
 |