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