143 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace W3TC;
 | |
| 
 | |
| if ( !defined( 'W3TC_CDN_EDGECAST_PURGE_URL' ) ) define( 'W3TC_CDN_EDGECAST_PURGE_URL', 'http://api.edgecast.com/v2/mcc/customers/%s/edge/purge' );
 | |
| define( 'W3TC_CDN_EDGECAST_MEDIATYPE_WINDOWS_MEDIA_STREAMING', 1 );
 | |
| define( 'W3TC_CDN_EDGECAST_MEDIATYPE_FLASH_MEDIA_STREAMING', 2 );
 | |
| define( 'W3TC_CDN_EDGECAST_MEDIATYPE_HTTP_LARGE_OBJECT', 3 );
 | |
| define( 'W3TC_CDN_EDGECAST_MEDIATYPE_HTTP_SMALL_OBJECT', 8 );
 | |
| define( 'W3TC_CDN_EDGECAST_MEDIATYPE_APPLICATION_DELIVERY_NETWORK', 14 );
 | |
| 
 | |
| /**
 | |
|  * class CdnEngine_Mirror_Edgecast
 | |
|  */
 | |
| class CdnEngine_Mirror_Edgecast extends CdnEngine_Mirror {
 | |
| 	/**
 | |
| 	 * PHP5 Constructor
 | |
| 	 *
 | |
| 	 * @param array   $config
 | |
| 	 */
 | |
| 	function __construct( $config = array() ) {
 | |
| 		$config = array_merge( array(
 | |
| 				'apiid' => '',
 | |
| 				'apikey' => ''
 | |
| 			), $config );
 | |
| 
 | |
| 		parent::__construct( $config );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Purges remote files
 | |
| 	 *
 | |
| 	 * @param array   $files
 | |
| 	 * @param array   $results
 | |
| 	 * @return boolean
 | |
| 	 */
 | |
| 	function purge( $files, &$results ) {
 | |
| 		if ( empty( $this->_config['account'] ) ) {
 | |
| 			$results = $this->_get_results( $files, W3TC_CDN_RESULT_HALT, __( 'Empty account #.', 'w3-total-cache' ) );
 | |
| 
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		if ( empty( $this->_config['token'] ) ) {
 | |
| 			$results = $this->_get_results( $files, W3TC_CDN_RESULT_HALT, __( 'Empty token.', 'w3-total-cache' ) );
 | |
| 
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		foreach ( $files as $file ) {
 | |
| 			$local_path = $file['local_path'];
 | |
| 			$remote_path = $file['remote_path'];
 | |
| 
 | |
| 			$url = $this->format_url( $remote_path );
 | |
| 
 | |
| 			$error = null;
 | |
| 
 | |
| 			if ( $this->_purge_content( $url, W3TC_CDN_EDGECAST_MEDIATYPE_HTTP_SMALL_OBJECT, $error ) ) {
 | |
| 				$results[] = $this->_get_result( $local_path, $remote_path,
 | |
| 					W3TC_CDN_RESULT_OK, __( 'OK', 'w3-total-cache' ), $file );
 | |
| 			} else {
 | |
| 				$results[] = $this->_get_result( $local_path, $remote_path,
 | |
| 					W3TC_CDN_RESULT_ERROR,
 | |
| 					sprintf( __( 'Unable to purge (%s).', 'w3-total-cache' ), $error ),
 | |
| 					$file );
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return !$this->_is_error( $results );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Purges CDN completely
 | |
| 	 *
 | |
| 	 * @param unknown $results
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	function purge_all( &$results ) {
 | |
| 		return $this->purge( array( array( 'local_path'=>'*', 'remote_path'=> '*' ) ), $results );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Purge content
 | |
| 	 *
 | |
| 	 * @param string  $path
 | |
| 	 * @param int     $type
 | |
| 	 * @param string  $error
 | |
| 	 * @return boolean
 | |
| 	 */
 | |
| 	function _purge_content( $path, $type, &$error ) {
 | |
| 		$url = sprintf( W3TC_CDN_EDGECAST_PURGE_URL, $this->_config['account'] );
 | |
| 		$args = array(
 | |
| 			'method' => 'PUT',
 | |
| 			'user-agent' => W3TC_POWERED_BY,
 | |
| 			'headers' => array(
 | |
| 				'Accept' => 'application/json',
 | |
| 				'Content-Type' => 'application/json',
 | |
| 				'Authorization' => sprintf( 'TOK:%s', $this->_config['token'] )
 | |
| 			),
 | |
| 			'body' => json_encode( array(
 | |
| 					'MediaPath' => $path,
 | |
| 					'MediaType' => $type
 | |
| 				) )
 | |
| 		);
 | |
| 
 | |
| 		$response = wp_remote_request( $url, $args );
 | |
| 
 | |
| 		if ( is_wp_error( $response ) ) {
 | |
| 			$error = implode( '; ', $response->get_error_messages() );
 | |
| 
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		switch ( $response['response']['code'] ) {
 | |
| 		case 200:
 | |
| 			return true;
 | |
| 
 | |
| 		case 400:
 | |
| 			$error = __( 'Invalid Request Parameter', 'w3-total-cache' );
 | |
| 			return false;
 | |
| 
 | |
| 		case 403:
 | |
| 			$error = __( 'Authentication Failure or Insufficient Access Rights', 'w3-total-cache' );
 | |
| 			return false;
 | |
| 
 | |
| 		case 404:
 | |
| 			$error = __( 'Invalid Request URI', 'w3-total-cache' );
 | |
| 			return false;
 | |
| 
 | |
| 		case 405:
 | |
| 			$error = __( 'Invalid Request', 'w3-total-cache' );
 | |
| 			return false;
 | |
| 
 | |
| 		case 500:
 | |
| 			$error = __( 'Server Error', 'w3-total-cache' );
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		$error = 'Unknown error';
 | |
| 
 | |
| 		return false;
 | |
| 	}
 | |
| }
 |