156 lines
3.5 KiB
PHP
156 lines
3.5 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* File: Generic_Plugin_WidgetNews.php
|
||
|
*
|
||
|
* @package W3TC
|
||
|
*/
|
||
|
|
||
|
namespace W3TC;
|
||
|
|
||
|
/**
|
||
|
* Class: Generic_Plugin_WidgetNews
|
||
|
*/
|
||
|
class Generic_Plugin_WidgetNews {
|
||
|
/**
|
||
|
* Config.
|
||
|
*
|
||
|
* @var Config
|
||
|
*/
|
||
|
private $_config = null; // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore
|
||
|
|
||
|
/**
|
||
|
* Constructor.
|
||
|
*/
|
||
|
public function __construct() {
|
||
|
$this->_config = Dispatcher::config();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Runs plugin.
|
||
|
*/
|
||
|
public function run() {
|
||
|
if ( Util_Admin::get_current_wp_page() === 'w3tc_dashboard' ) {
|
||
|
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
|
||
|
}
|
||
|
|
||
|
add_action( 'w3tc_widget_setup', array( $this, 'wp_dashboard_setup' ) );
|
||
|
add_action( 'w3tc_network_dashboard_setup', array( $this, 'wp_dashboard_setup' ) );
|
||
|
|
||
|
if ( is_admin() ) {
|
||
|
add_action( 'wp_ajax_w3tc_widget_latest_news_ajax', array( $this, 'action_widget_latest_news_ajax' ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Dashboard setup action.
|
||
|
*/
|
||
|
public function wp_dashboard_setup() {
|
||
|
Util_Widget::add(
|
||
|
'w3tc_latest_news',
|
||
|
__( 'News', 'w3-total-cache' ),
|
||
|
array(
|
||
|
$this,
|
||
|
'widget_latest',
|
||
|
),
|
||
|
array(
|
||
|
$this,
|
||
|
'widget_latest_control',
|
||
|
),
|
||
|
'side'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns key for transient cache of "widget latest"
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function _widget_latest_cache_key() { // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
|
||
|
return 'dash_' . md5( 'w3tc_latest_news' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prints latest widget contents
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function widget_latest() {
|
||
|
$output = get_transient( $this->_widget_latest_cache_key() );
|
||
|
|
||
|
if ( false !== $output ) {
|
||
|
echo wp_kses(
|
||
|
$output,
|
||
|
array(
|
||
|
'a' => array(
|
||
|
'href' => array(),
|
||
|
'target' => array(),
|
||
|
),
|
||
|
'h4' => array(),
|
||
|
'p' => array(
|
||
|
'style' => array(),
|
||
|
),
|
||
|
)
|
||
|
);
|
||
|
} else {
|
||
|
include W3TC_INC_DIR . '/widget/latest_news.php';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prints latest widget contents.
|
||
|
*/
|
||
|
public function action_widget_latest_news_ajax() {
|
||
|
// load content of feed.
|
||
|
global $wp_version;
|
||
|
|
||
|
$items = array();
|
||
|
$items_count = $this->_config->get_integer( 'widget.latest_news.items' );
|
||
|
|
||
|
include_once ABSPATH . WPINC . '/feed.php';
|
||
|
|
||
|
$feed = fetch_feed( W3TC_NEWS_FEED_URL );
|
||
|
|
||
|
if ( ! is_wp_error( $feed ) ) {
|
||
|
$feed_items = $feed->get_items( 0, $items_count );
|
||
|
|
||
|
foreach ( $feed_items as $feed_item ) {
|
||
|
$items[] = array(
|
||
|
'link' => $feed_item->get_link(),
|
||
|
'title' => htmlspecialchars_decode( $feed_item->get_title() ),
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ob_start();
|
||
|
include W3TC_INC_DIR . '/widget/latest_news_ajax.php';
|
||
|
|
||
|
// Default lifetime in cache of 12 hours (same as the feeds).
|
||
|
set_transient( $this->_widget_latest_cache_key(), ob_get_flush(), 43200 );
|
||
|
die();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Latest widget control.
|
||
|
*
|
||
|
* @param integer $widget_id Widget id.
|
||
|
* @param array $form_inputs Form inputs.
|
||
|
*/
|
||
|
public function widget_latest_control( $widget_id, $form_inputs = array() ) {
|
||
|
if ( 'POST' === ( isset( $_SERVER['REQUEST_METHOD'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_METHOD'] ) ) : '' ) ) {
|
||
|
$this->_config->set( 'widget.latest_news.items', Util_Request::get_integer( 'w3tc_widget_latest_news_items', 3 ) );
|
||
|
$this->_config->save();
|
||
|
delete_transient( $this->_widget_latest_cache_key() );
|
||
|
}
|
||
|
include W3TC_INC_DIR . '/widget/latest_news_control.php';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Enqueue scripts and styles.
|
||
|
*/
|
||
|
public function enqueue() {
|
||
|
wp_enqueue_style( 'w3tc-widget' );
|
||
|
wp_enqueue_script( 'w3tc-metadata' );
|
||
|
wp_enqueue_script( 'w3tc-widget' );
|
||
|
}
|
||
|
}
|