| Server IP : 195.130.67.5 / Your IP : 216.73.217.154 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Old Sites/repository/wp-content/plugins/updraftplus/includes/ |
Upload File : |
<?php
if (!defined('ABSPATH')) die('No direct access allowed');
if (!class_exists('Updraft_Dashboard_News')) :
/**
* Handles all stuffs related to Dashboard News
*/
class Updraft_Dashboard_News {
/**
* dashboard news feed URL
*
* @var String
*/
private $feed_url;
/**
* news page URL
*
* @var String
*/
private $link;
/**
* various translations to use in the UI
*
* @var Array
*/
private $translations;
/**
* slug to use, where needed
*
* @var String
*/
private $slug;
/**
* constructor of class Updraft_Dashboard_News
*
* @param String $feed_url - dashboard news feed URL
* @param String $link - web page URL
* @param Array $translations - an array of translations, with keys: product_title, item_prefix, item_description, dismiss_confirm
*/
public function __construct($feed_url, $link, $translations) {
$this->feed_url = $feed_url;
$this->link = $link;
$this->translations = $translations;
$this->slug = sanitize_title($translations['product_title']);
$dashboard_news_transient_name = $this->get_transient_name();
add_filter('pre_set_transient_'.$dashboard_news_transient_name, array($this, 'pre_set_transient_for_dashboard_news'), 10);
add_filter('transient_'.$dashboard_news_transient_name, array($this, 'transient_for_dashboard_news'), 10);
add_action('wp_ajax_'.$this->slug.'_ajax_dismiss_dashboard_news', array($this, 'dismiss_dashboard_news'));
if ('index.php' == $GLOBALS['pagenow'] && !get_user_meta(get_current_user_id(), $this->slug.'_dismiss_dashboard_news', true)) {
add_action('admin_print_footer_scripts', array($this, 'admin_print_footer_scripts'));
}
}
/**
* Get the transient name
*
* @return String
*/
private function get_transient_name() {
$locale = function_exists('get_user_locale') ? get_user_locale() : get_locale();
include(ABSPATH.WPINC.'/version.php');
$dash_prefix = version_compare($wp_version, '4.8', '>=') ? 'dash_v2_' : 'dash_';
return version_compare($wp_version, '4.3', '>=') ? $dash_prefix.md5('dashboard_primary_'.$locale) : 'dash_'.md5('dashboard_primary');
}
/**
* Filters a transient for dashboard news before its value is set
*
* @param String $value - New value of transient
* @return String HTML of Wordpress News & Events same as $transient param
*/
public function pre_set_transient_for_dashboard_news($value) {
if (!function_exists('wp_dashboard_primary_output')) return $value;
// Not needed first if condition, because filter hook name have already transient name. It is for better checking
if (!get_user_meta(get_current_user_id(), $this->slug.'_dismiss_dashboard_news', true)) {
// Gets the news, when fetching WP news first time (transient cache does not exist)
$this->get_dashboard_news_html();
}
return $value;
}
/**
* Filters a transient for dashboard news when getting transient value
*
* @param String $value - New value of transient
* @return String - HTML of Wordpress News & Events
*/
public function transient_for_dashboard_news($value) {
if (!function_exists('wp_dashboard_primary_output')) return $value;
$dashboard_news_transient_name = $this->get_transient_name();
// Not needed first if condition, because filter hook name have already transient name. It is for better checking
if (!get_user_meta(get_current_user_id(), $this->slug.'_dismiss_dashboard_news', true) && !empty($value)) {
return $value.$this->get_dashboard_news_html();
}
return $value;
}
/**
* get dashboard news html
*
* @return String - the resulting message
*/
private function get_dashboard_news_html() {
$cache_key = $this->slug.'_dashboard_news';
if (false !== ($output = get_transient($cache_key))) return $output;
$feeds = array(
$this->slug => array(
'link' => $this->link,
'url' => $this->feed_url,
'title' => $this->translations['product_title'],
'items' => apply_filters($this->slug.'_dashboard_news_items_count', 2),
'show_summary' => 0,
'show_author' => 0,
'show_date' => 0,
)
);
ob_start();
wp_dashboard_primary_output('dashboard_primary', $feeds);
$original_formatted_news = ob_get_clean();
$formatted_news = preg_replace('/<a(.+?)>(.+?)<\/a>/i', "<a$1>".$this->translations['item_prefix'].": $2</a>", $original_formatted_news);
$formatted_news = str_replace('<li>', '<li class="'.$this->slug.'_dashboard_news_item">', $formatted_news);
$formatted_news = str_replace('</li>', '<a href="#" class="dashicons dashicons-no-alt" title="'.esc_attr($this->translations['dismiss_tooltip']).'" onClick="'.$this->slug.'_dismiss_dashboard_news(); return false;" style="float: right; box-shadow: none;"></li></a>', $formatted_news);
set_transient($this->slug.'_dashboard_news', $formatted_news, 43200); // 12 hours
return $formatted_news;
}
/**
* Prints javascripts in admin footer
*/
public function admin_print_footer_scripts() {
?>
<script>
function <?php echo $this->slug; ?>_dismiss_dashboard_news() {
if (confirm("<?php echo esc_js($this->translations['dismiss_confirm']); ?>")) {
jQuery.ajax({
url: '<?php echo admin_url('admin-ajax.php');?>',
data : {
action: '<?php echo $this->slug; ?>_ajax_dismiss_dashboard_news',
nonce : '<?php echo wp_create_nonce($this->slug.'-dismiss-news-nonce');?>'
},
success: function(response) {
jQuery('.<?php echo $this->slug; ?>_dashboard_news_item').slideUp('slow');
},
error: function(response, status, error_code) {
console.log("<?php echo $this->slug; ?>_dismiss_dashboard_news: error: "+status+" ("+error_code+")");
console.log(response);
}
});
}
}
</script>
<?php
}
/**
* Dismiss dashboard news
*/
public function dismiss_dashboard_news() {
$nonce = empty($_REQUEST['nonce']) ? '' : $_REQUEST['nonce'];
if (!wp_verify_nonce($nonce, $this->slug.'-dismiss-news-nonce')) die('Security check.');
update_user_meta(get_current_user_id(), $this->slug.'_dismiss_dashboard_news', true);
die();
}
}
endif;