%PDF- %PDF-
| Direktori : /home/gachan/www/wp-content/plugins/mailchimp/includes/admin/ |
| Current File : /home/gachan/www/wp-content/plugins/mailchimp/includes/admin/class-remote-content-block.php |
<?php
/**
* Class MC4WP_Remote_Content_Block
*
* @package MailChimp for WordPress
* @author Danny van Kooten
*/
class MC4WP_Remote_Content_Block {
/**
* @var string
*/
protected $content = '';
/**
* @var int
*/
protected $cache_time = 7200; // 2 hours
/**
* @var string
*/
protected $cache_key = '';
/**
* @var string
*/
protected $url = '';
/**
* @param string $url
* @param int $cache_time
* @param string $fallback_content
*/
public function __construct( $url, $cache_time = 7200, $fallback_content = '' ) {
$this->url = $url;
$this->cache_time = $cache_time;
$this->content = $fallback_content;
// don't let this transient key exceed 45 characters total
// use end of url as key because it's likely same domain is used
$this->cache_key = 'mc4wp_remote_content_' . substr( sanitize_key( $this->url ), -23 ); // 44 characters
}
/**
* @return bool
*/
public function fetch() {
// first, try transient cache
if( $this->fetch_from_cache() ) {
return true;
}
// no? try remote url
if( $this->fetch_from_remote() ) {
return true;
}
return false;
}
/**
* @return bool
*/
protected function fetch_from_cache() {
$content = get_transient( $this->cache_key );
if( ! is_string( $content ) ) {
return false;
}
$this->content = $content;
return true;
}
/**
* @return bool
*/
protected function fetch_from_remote() {
$args = array(
'timeout' => 3,
'user-agent' => ''
);
$response = wp_remote_get( $this->url, $args );
$response_code = (int) wp_remote_retrieve_response_code( $response );
if( $response_code !== 200 ) {
return false;
}
$content = wp_remote_retrieve_body( $response );
if( empty( $content ) ) {
return false;
}
$this->content = $content;
$this->cache( $content );
return true;
}
/**
* @return string
*/
public function __toString() {
$this->fetch();
return $this->content;
}
/**
* Output the content block
*/
public function output() {
echo $this;
}
/**
* Refresh content
*/
public function refresh() {
delete_transient( $this->cache_key );
}
/**
* Cache content for the given cache time
*
* @param string $content
*/
protected function cache( $content ) {
set_transient( $this->cache_key, $content, $this->cache_time );
}
}