168 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * File: CdnEngine_Mirror_BunnyCdn.php
 | 
						|
 *
 | 
						|
 * @since   X.X.X
 | 
						|
 * @package W3TC
 | 
						|
 */
 | 
						|
 | 
						|
namespace W3TC;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class: CdnEngine_Mirror_BunnyCdn
 | 
						|
 *
 | 
						|
 * @since X.X.X
 | 
						|
 *
 | 
						|
 * @extends CdnEngine_Mirror
 | 
						|
 */
 | 
						|
class CdnEngine_Mirror_BunnyCdn extends CdnEngine_Mirror {
 | 
						|
	/**
 | 
						|
	 * Constructor.
 | 
						|
	 *
 | 
						|
	 * @param array $config {
 | 
						|
	 *     Configuration.
 | 
						|
	 *
 | 
						|
	 *     @type string $account_api_key Account API key.
 | 
						|
	 *     @type string $storage_api_key Storage API key.
 | 
						|
	 *     @type string $stream_api_key  Steam API key.
 | 
						|
	 *     @type int    $pull_zone_id    Pull zone id.
 | 
						|
	 *     @type string $cdn_hostname    CDN hostname.
 | 
						|
	 * }
 | 
						|
	 */
 | 
						|
	public function __construct( array $config = array() ) {
 | 
						|
		$config = \array_merge(
 | 
						|
			array(
 | 
						|
				'account_api_key' => '',
 | 
						|
				'storage_api_key' => '',
 | 
						|
				'stream_api_key'  => '',
 | 
						|
				'pull_zone_id'    => null,
 | 
						|
				'domain'          => '',
 | 
						|
			),
 | 
						|
			$config
 | 
						|
		);
 | 
						|
 | 
						|
		parent::__construct( $config );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Purge remote files.
 | 
						|
	 *
 | 
						|
	 * @since X.X.X
 | 
						|
	 *
 | 
						|
	 * @param  array $files   Local and remote file paths.
 | 
						|
	 * @param  array $results Results.
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function purge( $files, &$results ) {
 | 
						|
		if ( empty( $this->_config['account_api_key'] ) ) {
 | 
						|
			$results = $this->_get_results( $files, W3TC_CDN_RESULT_HALT, \__( 'Missing account API key.', 'w3-total-cache' ) );
 | 
						|
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( empty( $this->_config['cdn_hostname'] ) ) {
 | 
						|
			$results = $this->_get_results( $files, W3TC_CDN_RESULT_HALT, \__( 'Missing CDN hostname.', 'w3-total-cache' ) );
 | 
						|
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		$url_prefixes = $this->url_prefixes();
 | 
						|
		$api          = new Cdn_BunnyCdn_Api( $this->_config );
 | 
						|
		$results      = array();
 | 
						|
 | 
						|
		try {
 | 
						|
			$items = array();
 | 
						|
 | 
						|
			foreach ( $files as $file ) {
 | 
						|
				foreach ( $url_prefixes as $prefix ) {
 | 
						|
					$items[] = array(
 | 
						|
						'url'       => $prefix . '/' . $file['remote_path'],
 | 
						|
						'recursive' => true,
 | 
						|
					);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			$api->purge( array( 'items' => $items ) );
 | 
						|
 | 
						|
			$results[] = $this->_get_result( '', '', W3TC_CDN_RESULT_OK, 'OK' );
 | 
						|
		} catch ( \Exception $e ) {
 | 
						|
			$results[] = $this->_get_result( '', '', W3TC_CDN_RESULT_HALT, \__( 'Could not purge pull zone items: ', 'w3-total-cache' ) . $e->getMessage() );
 | 
						|
		}
 | 
						|
 | 
						|
		return ! $this->_is_error( $results );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Purge CDN completely.
 | 
						|
	 *
 | 
						|
	 * @since X.X.X
 | 
						|
	 *
 | 
						|
	 * @param  array $results Results.
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	public function purge_all( &$results ) {
 | 
						|
		if ( empty( $this->_config['account_api_key'] ) ) {
 | 
						|
			$results = $this->_get_results( array(), W3TC_CDN_RESULT_HALT, __( 'Missing account API key.', 'w3-total-cache' ) );
 | 
						|
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		// Purge active pull zones: CDN & CDNFSD.
 | 
						|
		$active_zone_ids = array();
 | 
						|
		$config          = Dispatcher::config();
 | 
						|
		$cdn_zone_id     = $config->get_integer( 'cdn.bunnycdn.pull_zone_id' );
 | 
						|
		$cdnfsd_zone_id  = $config->get_integer( 'cdnfsd.bunnycdn.pull_zone_id' );
 | 
						|
 | 
						|
		if ( $config->get_boolean( 'cdn.enabled' ) && 'bunnycdn' === $config->get_string( 'cdn.engine' ) && $cdn_zone_id ) {
 | 
						|
			$active_ids[] = $cdn_zone_id;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( $config->get_boolean( 'cdnfsd.enabled' ) && 'bunnycdn' === $config->get_string( 'cdnfsd.engine' ) && $cdnfsd_zone_id ) {
 | 
						|
			$active_ids[] = $cdnfsd_zone_id;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( empty( $active_ids ) ) {
 | 
						|
			$results = $this->_get_results( array(), W3TC_CDN_RESULT_HALT, __( 'Missing pull zone id.', 'w3-total-cache' ) );
 | 
						|
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		$results = array();
 | 
						|
 | 
						|
		foreach ( $active_ids as $id ) {
 | 
						|
			$api = new Cdn_BunnyCdn_Api( array_merge( $this->_config, array( 'pull_zone_id' => $id ) ) );
 | 
						|
 | 
						|
			try {
 | 
						|
				$api->purge_pull_zone();
 | 
						|
				$results[] = $this->_get_result( '', '' ); // W3TC_CDN_RESULT_OK.
 | 
						|
			} catch ( \Exception $e ) {
 | 
						|
				$results[] = $this->_get_result( '', '', W3TC_CDN_RESULT_HALT, \__( 'Could not purge pull zone', 'w3-total-cache' ) . '; ' . $e->getMessage() );
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return ! $this->_is_error( $results );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get URL prefixes.
 | 
						|
	 *
 | 
						|
	 * If set to "auto", then add URLs for both "http" and "https".
 | 
						|
	 *
 | 
						|
	 * @since X.X.X
 | 
						|
	 *
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	private function url_prefixes() {
 | 
						|
		$url_prefixes = array();
 | 
						|
 | 
						|
		if ( 'auto' === $this->_config['ssl'] || 'enabled' === $this->_config['ssl'] ) {
 | 
						|
			$url_prefixes[] = 'https://' . $this->_config['cdn_hostname'];
 | 
						|
		}
 | 
						|
		if ( 'auto' === $this->_config['ssl'] || 'enabled' !== $this->_config['ssl'] ) {
 | 
						|
			$url_prefixes[] = 'http://' . $this->_config['cdn_hostname'];
 | 
						|
		}
 | 
						|
 | 
						|
		return $url_prefixes;
 | 
						|
	}
 | 
						|
}
 |