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

102 lines
2.2 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\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);
}
}