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

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