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);
 | |
|    }
 | |
| 
 | |
| 
 | |
| }
 |