wp_back/wp-content/plugins/shortpixel-image-optimiser/class/Controller/View/EditMediaViewController.php

353 lines
13 KiB
PHP
Raw Normal View History

2024-05-20 15:37:46 +03:00
<?php
namespace ShortPixel\Controller\View;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
use ShortPixel\Helper\UiHelper as UiHelper;
use ShortPixel\Helper\UtilHelper as UtilHelper;
use ShortPixel\Controller\OptimizeController as OptimizeController;
use ShortPixel\Controller\ErrorController as ErrorController;
use ShortPixel\Model\File\FileModel as FileModel;
use ShortPixel\Helper\DownloadHelper as DownloadHelper;
// Future contoller for the edit media metabox view.
class EditMediaViewController extends \ShortPixel\ViewController
{
protected $template = 'view-edit-media';
// protected $model = 'image';
protected $post_id;
protected $legacyViewObj;
protected $imageModel;
protected $hooked;
protected static $instance;
public function __construct()
{
parent::__construct();
}
protected function loadHooks()
{
add_action( 'add_meta_boxes_attachment', array( $this, 'addMetaBox') );
$this->hooked = true;
}
public function load()
{
if (! $this->hooked)
$this->loadHooks();
$fs = \wpSPIO()->filesystem();
$fs->startTrustedMode();
}
public function addMetaBox()
{
add_meta_box(
'shortpixel_info_box', // this is HTML id of the box on edit screen
__('ShortPixel Info', 'shortpixel-image-optimiser'), // title of the box
array( $this, 'doMetaBox'), // function to be called to display the info
null,//, // on which edit screen the box should appear
'side'//'normal', // part of page where the box should appear
//'default' // priority of the box
);
}
public function dometaBox($post)
{
$this->post_id = $post->ID;
$this->view->debugInfo = array();
$this->view->id = $this->post_id;
$this->view->list_actions = '';
$fs = \wpSPIO()->filesystem();
$this->imageModel = $fs->getMediaImage($this->post_id);
// Asking for something non-existing.
if ($this->imageModel === false)
{
$this->view->status_message = __('File Error. This could be not an image or the file is missing', 'shortpixel-image-optimiser');
$this->loadView();
return false;
}
$this->view->status_message = null;
$this->view->text = UiHelper::getStatusText($this->imageModel);
$this->view->list_actions = UiHelper::getListActions($this->imageModel);
if ( count($this->view->list_actions) > 0)
$this->view->list_actions = UiHelper::renderBurgerList($this->view->list_actions, $this->imageModel);
else
$this->view->list_actions = '';
//$this->imageModel->cancelUserExclusions();
$this->view->actions = UiHelper::getActions($this->imageModel);
$this->view->stats = $this->getStatistics();
if (! $this->userIsAllowed)
{
$this->view->actions = array();
$this->view->list_actions = '';
}
if(true === \wpSPIO()->env()->is_debug )
{
$this->view->debugInfo = $this->getDebugInfo();
}
$this->loadView();
}
protected function getStatusMessage()
{
return UIHelper::renderSuccessText($this->imageModel);
}
protected function getStatistics()
{
//$data = $this->data;
$stats = array();
$imageObj = $this->imageModel;
$did_keepExif = $imageObj->getMeta('did_keepExif');
$did_convert = $imageObj->getMeta()->convertMeta()->isConverted();
$resize = $imageObj->getMeta('resize');
// Not optimized, not data.
if (! $imageObj->isOptimized())
return array();
if ($did_keepExif)
$stats[] = array(__('EXIF kept', 'shortpixel-image-optimiser'), '');
elseif ( $did_keepExif === false) {
$stats[] = array(__('EXIF removed', 'shortpixel-image-optimiser'), '');
}
if (true === $did_convert )
{
$ext = $imageObj->getMeta()->convertMeta()->getFileFormat();
$stats[] = array( sprintf(__('Converted from %s','shortpixel-image-optimiser'), $ext), '');
}
elseif (false !== $imageObj->getMeta()->convertMeta()->didTry()) {
$ext = $imageObj->getMeta()->convertMeta()->getFileFormat();
$error = $imageObj->getMeta()->convertMeta()->getError(); // error code.
$stats[] = array(UiHelper::getConvertErrorReason($error, $ext), '');
}
if ($resize == true)
{
$from = $imageObj->getMeta('originalWidth') . 'x' . $imageObj->getMeta('originalHeight');
$to = $imageObj->getMeta('resizeWidth') . 'x' . $imageObj->getMeta('resizeHeight');
$type = ($imageObj->getMeta('resizeType') !== null) ? '(' . $imageObj->getMeta('resizeType') . ')' : '';
$stats[] = array(sprintf(__('Resized %s %s to %s'), $type, $from, $to), '');
}
$tsOptimized = $imageObj->getMeta('tsOptimized');
if ($tsOptimized !== null)
$stats[] = array(__("Optimized on :", 'shortpixel-image-optimiser') . "<br /> ", UiHelper::formatTS($tsOptimized) );
if ($imageObj->isOptimized())
{
$stats[] = array( sprintf(__('%s %s Read more about theses stats %s ', 'shortpixel-image-optimiser'), '
<p><img alt=' . esc_html('Info Icon', 'shortpixel-image-optimiser') . ' src=' . esc_url( wpSPIO()->plugin_url('res/img/info-icon.png' )) . ' style="margin-bottom: -4px;"/>', '<a href="https://shortpixel.com/knowledge-base/article/553-the-stats-from-the-shortpixel-column-in-the-media-library-explained" target="_blank">', '</a></p>'), '');
}
return $stats;
}
protected function getDebugInfo()
{
if(! \wpSPIO()->env()->is_debug )
{
return array();
}
$meta = \wp_get_attachment_metadata($this->post_id);
$fs = \wpSPIO()->filesystem();
$imageObj = $this->imageModel;
if ($imageObj->isProcessable())
{
$optimizeData = $imageObj->getOptimizeData();
$urls = $optimizeData['urls'];
}
$thumbnails = $imageObj->get('thumbnails');
$processable = ($imageObj->isProcessable()) ? '<span class="green">Yes</span>' : '<span class="red">No</span> (' . $imageObj->getReason('processable') . ')';
$anyFileType = ($imageObj->isProcessableAnyFileType()) ? '<span class="green">Yes</span>' : '<span class="red">No</span>';
$restorable = ($imageObj->isRestorable()) ? '<span class="green">Yes</span>' : '<span class="red">No</span> (' . $imageObj->getReason('restorable') . ')';
$hasrecord = ($imageObj->hasDBRecord()) ? '<span class="green">Yes</span>' : '<span class="red">No</span> ';
$debugInfo = array();
$debugInfo[] = array(__('URL (get attachment URL)', 'shortpixel_image_optiser'), wp_get_attachment_url($this->post_id));
$debugInfo[] = array(__('File (get attached)'), get_attached_file($this->post_id));
if ($imageObj->is_virtual())
{
$virtual = $imageObj->get('virtual_status');
if($virtual == FileModel::$VIRTUAL_REMOTE)
$vtext = 'Remote';
elseif($virtual == FileModel::$VIRTUAL_STATELESS)
$vtext = 'Stateless';
else
$vtext = 'Not set';
$debugInfo[] = array(__('Is Virtual: ') . $vtext, $imageObj->getFullPath() );
}
$debugInfo[] = array(__('Size and Mime (ImageObj)'), $imageObj->get('width') . 'x' . $imageObj->get('height'). ' (' . $imageObj->get('mime') . ')');
$debugInfo[] = array(__('Status (ShortPixel)'), $imageObj->getMeta('status') . ' ' );
$debugInfo[] = array(__('Processable'), $processable);
$debugInfo[] = array(__('Avif/Webp needed'), $anyFileType);
$debugInfo[] = array(__('Restorable'), $restorable);
$debugInfo[] = array(__('Record'), $hasrecord);
if ($imageObj->getMeta()->convertMeta()->didTry())
{
$debugInfo[] = array(__('Converted'), ($imageObj->getMeta()->convertMeta()->isConverted() ?'<span class="green">Yes</span>' : '<span class="red">No</span> '));
$debugInfo[] = array(__('Checksum'), $imageObj->getMeta()->convertMeta()->didTry());
$debugInfo[] = array(__('Error'), $imageObj->getMeta()->convertMeta()->getError());
}
$debugInfo[] = array(__('WPML Duplicates'), json_encode($imageObj->getWPMLDuplicates()) );
if ($imageObj->getParent() !== false)
{
$debugInfo[] = array(__('WPML duplicate - Parent: '), $imageObj->getParent());
}
if (isset($urls))
{
$debugInfo[] = array(__('To Optimize URLS'), $urls);
}
if (isset($optimizeData))
{
$debugInfo[] = array(__('Optimize Data'), $optimizeData);
$optControl = new optimizeController();
$q = $optControl->getQueue($imageObj->get('type'));
$debugInfo[] = array(__('Image to Queue'), $q->_debug_imageModelToQueue($imageObj) );
}
$debugInfo['imagemetadata'] = array(__('ImageModel Metadata (ShortPixel)'), $imageObj);
$debugInfo[] = array('', '<hr>');
$debugInfo['wpmetadata'] = array(__('WordPress Get Attachment Metadata'), $meta );
$debugInfo[] = array('', '<hr>');
if ($imageObj->hasBackup())
$backupFile = $imageObj->getBackupFile();
else {
$backupFile = $fs->getFile($fs->getBackupDirectory($imageObj) . $imageObj->getBackupFileName());
}
$debugInfo[] = array(__('Backup Folder'), (string) $backupFile->getFileDir() );
if ($imageObj->hasBackup())
$backupText = __('Backup File :');
else {
$backupText = __('Target Backup File after optimization (no backup) ');
}
$debugInfo[] = array( $backupText, (string) $backupFile . '(' . UiHelper::formatBytes($backupFile->getFileSize()) . ')' );
$debugInfo[] = array(__("No Main File Backup Available"), '');
if ($imageObj->getMeta()->convertMeta()->isConverted())
{
$convertedBackup = ($imageObj->hasBackup(array('forceConverted' => true))) ? '<span class="green">Yes</span>' : '<span class="red">No</span>';
$backup = $imageObj->getBackupFile(array('forceConverted' => true));
$debugInfo[] = array('Has converted backup', $convertedBackup);
if (is_object($backup))
$debugInfo[] = array('Backup: ', $backup->getFullPath() );
}
if ($or = $imageObj->hasOriginal())
{
$original = $imageObj->getOriginalFile();
$debugInfo[] = array(__('Has Original File: '), $original->getFullPath() . '(' . UiHelper::formatBytes($original->getFileSize()) . ')');
$orbackup = $original->getBackupFile();
if ($orbackup)
$debugInfo[] = array(__('Has Backup Original Image'), $orbackup->getFullPath() . '(' . UiHelper::formatBytes($orbackup->getFileSize()) . ')');
$debugInfo[] = array('', '<hr>');
}
if (! isset($meta['sizes']) )
{
$debugInfo[] = array('', __('Thumbnails were not generated', 'shortpixel-image-optimiser'));
}
else
{
foreach($thumbnails as $thumbObj)
{
$size = $thumbObj->get('size');
$display_size = ucfirst(str_replace("_", " ", $size));
//$thumbObj = $imageObj->getThumbnail($size);
if ($thumbObj === false)
{
$debugInfo[] = array(__('Thumbnail not found / loaded: ', 'shortpixel-image-optimiser'), $size );
continue;
}
$url = $thumbObj->getURL(); //$fs->pathToURL($thumbObj); //wp_get_attachment_image_src($this->post_id, $size);
$filename = $thumbObj->getFullPath();
$backupFile = $thumbObj->getBackupFile();
if ($thumbObj->hasBackup())
{
$backup = $backupFile->getFullPath();
$backupText = __('Backup File :');
}
else {
$backupFile = $fs->getFile($fs->getBackupDirectory($thumbObj) . $thumbObj->getBackupFileName());
$backup = $backupFile->getFullPath();
$backupText = __('Target Backup File after optimization (no backup) ');
}
$width = $thumbObj->get('width');
$height = $thumbObj->get('height');
$processable = ($thumbObj->isProcessable()) ? '<span class="green">Yes</span>' : '<span class="red">No</span> (' . $thumbObj->getReason('processable') . ')';
$restorable = ($thumbObj->isRestorable()) ? '<span class="green">Yes</span>' : '<span class="red">No</span> (' . $thumbObj->getReason('restorable') . ')';
$hasrecord = ($thumbObj->hasDBRecord()) ? '<span class="green">Yes</span>' : '<span class="red">No</span> ';
$dbid = $thumbObj->getMeta('databaseID');
$debugInfo[] = array('', "<div class='$size previewwrapper'><img src='" . $url . "'><p class='label'>
<b>URL:</b> $url ( $display_size - $width X $height ) <br><b>FileName:</b> $filename <br> <b> $backupText </b> $backup </p>
<p><b>Processable: </b> $processable <br> <b>Restorable:</b> $restorable <br> <b>Record:</b> $hasrecord ($dbid) </p>
<hr></div>");
}
}
return $debugInfo;
}
} // controller .