177 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace ShortPixel;
 | 
						|
 | 
						|
if ( ! defined( 'ABSPATH' ) ) {
 | 
						|
 exit; // Exit if accessed directly.
 | 
						|
}
 | 
						|
 | 
						|
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
 | 
						|
 | 
						|
class cacheRemover
 | 
						|
{
 | 
						|
    protected $has_supercache  = false; // supercache seems to replace quite fine, without our help. @todo Test if this is needed
 | 
						|
    protected $has_w3tc = false;
 | 
						|
    protected $has_wpengine = false;
 | 
						|
    protected $has_fastestcache = false;
 | 
						|
    protected $has_siteground = false;
 | 
						|
    protected $has_litespeed = false;
 | 
						|
 | 
						|
		private static $instance;
 | 
						|
 | 
						|
    public function __construct()
 | 
						|
    {
 | 
						|
			 $this->addHooks();
 | 
						|
			 $this->checkCaches();
 | 
						|
    }
 | 
						|
 | 
						|
		public static function getInstance()
 | 
						|
		{
 | 
						|
			 if (is_null(self::$instance))
 | 
						|
			 	self::$instance = new cacheRemover();
 | 
						|
 | 
						|
			return self::$instance;
 | 
						|
		}
 | 
						|
 | 
						|
		public function addHooks()
 | 
						|
		{
 | 
						|
			add_action('shortpixel/image/optimised', array($this, 'flushCache'));
 | 
						|
		}
 | 
						|
 | 
						|
    /** Checks which cache plugins are active on the moment a flush is needed */
 | 
						|
    public function checkCaches()
 | 
						|
    {
 | 
						|
      if ( function_exists( 'w3tc_pgcache_flush' ) )
 | 
						|
        $this->has_w3tc = true;
 | 
						|
 | 
						|
      if ( function_exists('wp_cache_clean_cache') )
 | 
						|
        $this->has_supercache = true;
 | 
						|
 | 
						|
      if ( class_exists( 'WpeCommon' ) )
 | 
						|
          $this->has_wpengine = true;
 | 
						|
 | 
						|
      global $wp_fastest_cache;
 | 
						|
      if ( method_exists( 'WpFastestCache', 'deleteCache' ) && !empty( $wp_fastest_cache ) )
 | 
						|
          $this->has_fastestcache = true;
 | 
						|
 | 
						|
      // SG SuperCacher
 | 
						|
      if (function_exists('sg_cachepress_purge_cache')) {
 | 
						|
	        $this->has_siteground = true;
 | 
						|
      }
 | 
						|
 | 
						|
      if (defined( 'LSCWP_DIR' ))
 | 
						|
      {
 | 
						|
          $this->has_litespeed = true;
 | 
						|
      }
 | 
						|
 | 
						|
      // @todo WpRocket?
 | 
						|
      // @todo BlueHost Caching?
 | 
						|
    }
 | 
						|
 | 
						|
    /* Tries to flush cache there were we have issues
 | 
						|
    *
 | 
						|
    * @param Array $args Argument Array to provide data.
 | 
						|
    */
 | 
						|
    public function flushCache($imageItem)
 | 
						|
    {
 | 
						|
        if ($imageItem->get('type') == 'custom')
 | 
						|
				{
 | 
						|
					$post_id = 0;
 | 
						|
				}
 | 
						|
				else {
 | 
						|
					$post_id = $imageItem->get('id');
 | 
						|
				}
 | 
						|
 | 
						|
        // important - first check the available cache plugins
 | 
						|
        $this->checkCaches();
 | 
						|
 | 
						|
        $bool = apply_filters('shortpixel/external/flush_cache', true, $post_id, $imageItem);
 | 
						|
        if (false === $bool)
 | 
						|
        {
 | 
						|
           return false;
 | 
						|
        }
 | 
						|
 | 
						|
        // general WP
 | 
						|
        if ($post_id > 0)
 | 
						|
          clean_post_cache($post_id);
 | 
						|
        else
 | 
						|
          wp_cache_flush();
 | 
						|
 | 
						|
        /*  Verified working without.
 | 
						|
          if ($this->has_supercache)
 | 
						|
            $this->removeSuperCache();
 | 
						|
        */
 | 
						|
        if ($this->has_w3tc)
 | 
						|
            $this->removeW3tcCache();
 | 
						|
 | 
						|
        if ($this->has_wpengine)
 | 
						|
            $this->removeWpeCache();
 | 
						|
 | 
						|
        if ($this->has_siteground)
 | 
						|
            $this->removeSiteGround();
 | 
						|
 | 
						|
        if ($this->has_fastestcache)
 | 
						|
            $this->removeFastestCache();
 | 
						|
 | 
						|
        if ($this->has_litespeed)
 | 
						|
            $this->litespeedReset($imageItem);
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    protected function removeSuperCache()
 | 
						|
    {
 | 
						|
       global $file_prefix, $supercachedir;
 | 
						|
	     if ( empty( $supercachedir ) && function_exists( 'get_supercache_dir' ) ) {
 | 
						|
	          $supercachedir = get_supercache_dir();
 | 
						|
	     }
 | 
						|
	     wp_cache_clean_cache( $file_prefix );
 | 
						|
    }
 | 
						|
 | 
						|
    protected function removeW3tcCache()
 | 
						|
    {
 | 
						|
      w3tc_pgcache_flush();
 | 
						|
    }
 | 
						|
 | 
						|
    protected function removeWpeCache()
 | 
						|
    {
 | 
						|
      if ( method_exists( 'WpeCommon', 'purge_memcached' ) ) {
 | 
						|
          \WpeCommon::purge_memcached();
 | 
						|
      }
 | 
						|
      if ( method_exists( 'WpeCommon', 'clear_maxcdn_cache' ) ) {
 | 
						|
          \WpeCommon::clear_maxcdn_cache();
 | 
						|
      }
 | 
						|
      if ( method_exists( 'WpeCommon', 'purge_varnish_cache' ) ) {
 | 
						|
          \WpeCommon::purge_varnish_cache();
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    protected function removeFastestCache()
 | 
						|
    {
 | 
						|
      global $wp_fastest_cache;
 | 
						|
      $wp_fastest_cache->deleteCache();
 | 
						|
    }
 | 
						|
 | 
						|
    protected function removeSiteGround()
 | 
						|
    {
 | 
						|
    		sg_cachepress_purge_cache();
 | 
						|
    }
 | 
						|
 | 
						|
    protected function litespeedReset($imageItem)
 | 
						|
    {
 | 
						|
      // Suppress the notices on purge.
 | 
						|
      if (! defined( 'LITESPEED_PURGE_SILENT' ))
 | 
						|
      {
 | 
						|
         define('LITESPEED_PURGE_SILENT', true);
 | 
						|
      }
 | 
						|
 | 
						|
			$urls = $imageItem->getAllUrls();
 | 
						|
			foreach($urls as $url)
 | 
						|
			{
 | 
						|
				 do_action('litespeed_purge_url', $url, false, true);
 | 
						|
			}
 | 
						|
  //    do_action('litespeed_media_reset', $post_id);
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
cacheRemover::getInstance();
 |