wp_back/wp-content/plugins/shortpixel-image-optimiser/class/Controller/Queue/MediaLibraryQueue.php

97 lines
2.4 KiB
PHP
Raw Normal View History

2024-05-20 15:37:46 +03:00
<?php
namespace ShortPixel\Controller\Queue;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
use ShortPixel\ShortQ\ShortQ as ShortQ;
use ShortPixel\Controller\CacheController as CacheController;
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
class MediaLibraryQueue extends Queue
{
protected $queueName = '';
protected $cacheName = 'MediaCache'; // When preparing, write needed data to cache.
protected static $instance;
/* MediaLibraryQueue Instance */
public function __construct($queueName = 'Media')
{
$shortQ = new ShortQ(self::PLUGIN_SLUG);
$this->q = $shortQ->getQueue($queueName);
$this->queueName = $queueName;
$options = array(
'numitems' => 2, // amount of items to pull per tick when optimizing
'mode' => 'wait',
'process_timeout' => 7000, // time between request for the image. (in milisecs)
'retry_limit' => 30, // amount of times it will retry without errors before giving up
'enqueue_limit' => 200, // amount of items added to the queue when preparing.
);
$options = apply_filters('shortpixel/medialibraryqueue/options', $options);
$this->q->setOptions($options);
}
public function getType()
{
return 'media';
}
protected function prepare()
{
$items = $this->queryPostMeta();
return $this->prepareItems($items);
}
private function queryPostMeta()
{
$last_id = $this->getStatus('last_item_id');
$limit = $this->q->getOption('enqueue_limit');
$prepare = array();
global $wpdb;
$sqlmeta = "SELECT DISTINCT post_id FROM " . $wpdb->prefix . "postmeta where (meta_key = %s or meta_key = %s)";
$prepare[] = '_wp_attached_file';
$prepare[] = '_wp_attachment_metadata';
if ($last_id > 0)
{
$sqlmeta .= " and post_id < %d ";
$prepare [] = intval($last_id);
}
$sqlmeta .= ' order by post_id DESC LIMIT %d ';
$prepare[] = $limit;
$sqlmeta = $wpdb->prepare($sqlmeta, $prepare);
$results = $wpdb->get_col($sqlmeta);
$fs = \wpSPIO()->filesystem();
$items = array();
foreach($results as $item_id)
{
$items[] = $item_id; //$fs->getImage($item_id, 'media');
}
// Remove failed object, ie if getImage returned false.
return array_filter($items);
}
/* public function queueToMediaItem($queueItem)
{
$id = $queueItem->id;
return $fs->getMediaImage($id);
} */
}