97 lines
2.4 KiB
PHP
97 lines
2.4 KiB
PHP
|
<?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);
|
||
|
} */
|
||
|
|
||
|
}
|