89 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace ShortPixel\External\Offload;
 | 
						|
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
 | 
						|
 | 
						|
if ( ! defined( 'ABSPATH' ) ) {
 | 
						|
	exit; // Exit if accessed directly.
 | 
						|
}
 | 
						|
 | 
						|
// Class to check what offloader to use and load it. To offload.
 | 
						|
class Offloader
 | 
						|
{
 | 
						|
		private static $instance;
 | 
						|
		private static $offload_instance;
 | 
						|
		private $offloadName;
 | 
						|
 | 
						|
		public static function getInstance()
 | 
						|
		{
 | 
						|
			 if (is_null(self::$instance))
 | 
						|
			 {
 | 
						|
				  self::$instance = new Offloader();
 | 
						|
			 }
 | 
						|
 | 
						|
			 return self::$instance;
 | 
						|
		}
 | 
						|
 | 
						|
		public function __construct()
 | 
						|
		{
 | 
						|
			  add_action('plugins_loaded', array($this, 'load'));
 | 
						|
				add_action('as3cf_init', array($this, 'initS3Offload'));
 | 
						|
		}
 | 
						|
 | 
						|
		public function load()
 | 
						|
		{
 | 
						|
				$bool = $this->checkVirtualLoaders();
 | 
						|
				if (true === $bool)
 | 
						|
				{
 | 
						|
 						self::$offload_instance = new VirtualFileSystem($this->offloadName);
 | 
						|
				}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		protected function checkVirtualLoaders()
 | 
						|
		{
 | 
						|
			 	if ( class_exists('\Stack\Config') ) // Bitpoke Stack MU
 | 
						|
				{
 | 
						|
						$this->offloadName = 'stack';
 | 
						|
						return true;
 | 
						|
				}
 | 
						|
				elseif (defined('STACK_MEDIA_BUCKET'))
 | 
						|
				{
 | 
						|
						$this->offloadName = 'stack';
 | 
						|
						return true;
 | 
						|
				}
 | 
						|
				elseif (class_exists('\S3_Uploads\Plugin'))
 | 
						|
				{
 | 
						|
					 $this->offloadName = 's3-uploads-human';
 | 
						|
					 return true;
 | 
						|
				}
 | 
						|
/* (Doesn't work)
 | 
						|
				elseif (function_exists('ud_check_stateless_media'))
 | 
						|
				{
 | 
						|
					 $this->offloadName = 'wp-stateless';
 | 
						|
					 return true;
 | 
						|
				} */
 | 
						|
				return false;
 | 
						|
		}
 | 
						|
 | 
						|
		// If As3cfInit is called check WpOffload runtime. This is later in order than plugins_loaded!
 | 
						|
		public function initS3Offload($as3cf)
 | 
						|
		{
 | 
						|
					if (is_null(self::$offload_instance))
 | 
						|
					{
 | 
						|
							$this->offloadName = 'wp-offload';
 | 
						|
						  self::$offload_instance = new wpOffload($as3cf);
 | 
						|
					}
 | 
						|
					else {
 | 
						|
						  Log::addError('Instance is not null - other virtual component has loaded! (' . $this->offloadName . ')');
 | 
						|
					}
 | 
						|
		}
 | 
						|
 | 
						|
		public function getOffloadName()
 | 
						|
		{
 | 
						|
			 return $this->offloadName;
 | 
						|
		}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
Offloader::getInstance(); // init
 |