102 lines
2.2 KiB
PHP
102 lines
2.2 KiB
PHP
|
<?php
|
||
|
namespace ShortPixel\Controller\Queue;
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit; // Exit if accessed directly.
|
||
|
}
|
||
|
|
||
|
use ShortPixel\ShortQ\ShortQ as ShortQ;
|
||
|
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
|
||
|
|
||
|
class CustomQueue extends Queue
|
||
|
{
|
||
|
|
||
|
protected $queueName = '';
|
||
|
protected $cacheName = 'CustomCache'; // When preparing, write needed data to cache.
|
||
|
|
||
|
protected static $instance;
|
||
|
|
||
|
public function __construct($queueName = 'Custom')
|
||
|
{
|
||
|
$shortQ = new ShortQ(static::PLUGIN_SLUG);
|
||
|
$this->q = $shortQ->getQueue($queueName);
|
||
|
$this->queueName = $queueName;
|
||
|
|
||
|
$options = array(
|
||
|
'numitems' => 5,
|
||
|
'mode' => 'wait',
|
||
|
'process_timeout' => 7000,
|
||
|
'retry_limit' => 20,
|
||
|
'enqueue_limit' => 120,
|
||
|
);
|
||
|
|
||
|
$options = apply_filters('shortpixel/customqueue/options', $options);
|
||
|
$this->q->setOptions($options);
|
||
|
}
|
||
|
|
||
|
public function getType()
|
||
|
{
|
||
|
return 'custom';
|
||
|
}
|
||
|
|
||
|
|
||
|
public function prepare()
|
||
|
{
|
||
|
$items = $this->queryItems();
|
||
|
|
||
|
return $this->prepareItems($items);
|
||
|
}
|
||
|
|
||
|
public function queryItems()
|
||
|
{
|
||
|
$last_id = $this->getStatus('last_item_id');
|
||
|
$limit = $this->q->getOption('enqueue_limit');
|
||
|
$prepare = array();
|
||
|
$items = array();
|
||
|
|
||
|
global $wpdb;
|
||
|
|
||
|
$folderSQL = ' SELECT id FROM ' . $wpdb->prefix . 'shortpixel_folders where status >= 0';
|
||
|
$folderRow = $wpdb->get_col($folderSQL);
|
||
|
|
||
|
// No Active Folders, No Items.
|
||
|
if (count($folderRow) == 0)
|
||
|
return $items;
|
||
|
|
||
|
// List of prepared (%d) for the folders.
|
||
|
$query_arr = join( ',', array_fill( 0, count( $folderRow ), '%d' ) );
|
||
|
|
||
|
$sql = 'SELECT id FROM ' . $wpdb->prefix . 'shortpixel_meta WHERE folder_id in ( ';
|
||
|
|
||
|
$sql .= $query_arr . ') ';
|
||
|
$prepare = $folderRow;
|
||
|
|
||
|
if ($last_id > 0)
|
||
|
{
|
||
|
$sql .= " AND id < %d ";
|
||
|
$prepare [] = intval($last_id);
|
||
|
}
|
||
|
|
||
|
|
||
|
$sql .= ' order by id DESC LIMIT %d ';
|
||
|
$prepare[] = $limit;
|
||
|
|
||
|
$sql = $wpdb->prepare($sql, $prepare);
|
||
|
|
||
|
$results = $wpdb->get_col($sql);
|
||
|
|
||
|
$fs = \wpSPIO()->filesystem();
|
||
|
|
||
|
|
||
|
|
||
|
foreach($results as $item_id)
|
||
|
{
|
||
|
$items[] = $item_id; //$fs->getImage($item_id, 'custom');
|
||
|
}
|
||
|
|
||
|
return array_filter($items);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|