File "Widget.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/cache/.wp-cli/wp-content/plugins/ajax-search-for-woocommerce/includes/Analytics/Widget.php
File size: 6.1 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace DgoraWcas\Analytics;
use DgoraWcas\Helpers;
use DgoraWcas\Multilingual;
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class Widget {
/**
* @var Analytics
*/
private $analytics;
/**
* @var UserInterface
*/
private $ui;
/**
* Constructor
*
* @param Analytics $analytics
* @param UserInterface $ui
*/
public function __construct( Analytics $analytics, UserInterface $ui ) {
$this->analytics = $analytics;
$this->ui = $ui;
}
public function init() {
if ( $this->analytics->isModuleEnabled() && $this->isCriticalSearchesWidgetEnabled() ) {
if ( current_user_can( Helpers::shopManagerHasAccess() ? 'manage_woocommerce' : 'manage_options' ) ) {
add_action( 'wp_dashboard_setup', array( $this, 'addWidget' ) );
if ( Multilingual::isMultilingual() ) {
add_action( 'admin_init', array( $this, 'enqueueTabsScript' ), 5 );
}
}
}
}
/**
* Check if the Analytics widget is enabled
*
* @return bool
*/
public function isCriticalSearchesWidgetEnabled() {
return DGWT_WCAS()->settings->getOption( 'analytics_critical_searches_widget_enabled', 'off' ) === 'on';
}
public function addWidget() {
wp_add_dashboard_widget(
'fibosearch_analytics_critical_searches',
esc_html__( 'FiboSearch - Search Analytics', 'ajax-search-for-woocommerce' ),
array( $this, 'render' )
);
}
public function render() {
$data = new Data();
$vars = array(
'days' => $this->ui->getExpirationInDays(),
'critical-searches' => array(),
'critical-searches-total' => 0,
'settings-analytics-url' => admin_url( 'admin.php?page=dgwt_wcas_settings#analytics' ),
'multilingual' => array(),
);
if ( Multilingual::isMultilingual() ) {
$vars['multilingual'] = array(
'current-lang' => Multilingual::getCurrentLanguage(),
'langs' => array()
);
foreach ( Multilingual::getLanguages() as $lang ) {
$data->setLang( $lang );
$vars['multilingual']['langs'][ $lang ] = array(
'name' => Multilingual::getLanguageField( $lang, 'name' ),
'critical-searches' => $data->getCriticalSearches( UserInterface::CRITICAL_SEARCHES_LOAD_LIMIT ),
'critical-searches-total' => $data->getTotalCriticalSearches(),
);
}
} else {
$vars['critical-searches'] = $data->getCriticalSearches( UserInterface::CRITICAL_SEARCHES_LOAD_LIMIT );
$vars['critical-searches-total'] = $data->getTotalCriticalSearches();
}
ob_start();
?>
<h3><strong><?php _e( 'Critical searches without result', 'ajax-search-for-woocommerce' ); ?></strong></h3>
<?php if ( ! empty( $vars['multilingual'] ) ) { ?>
<p>
<?php _e( 'Language', 'ajax-search-for-woocommerce' ); ?>:
<span class="dgwt-wcas-widget-tab-wrapper">
<?php
$next = false;
foreach ( $vars['multilingual']['langs'] as $lang => $langData ) {
if ( $next ) {
echo ' | ';
}
printf( '<a class="dgwt-wcas-widget-tab" title="%s" href="%s">%s</a>', esc_attr( $langData['name'] ), esc_attr( '#dgwt-wcas-widget-tab-content-' . $lang ), esc_html( $langData['name'] ) );
$next = true;
}
?>
</span>
</p>
<?php
foreach ( $vars['multilingual']['langs'] as $lang => $langName ) {
?>
<div class="dgwt-wcas-widget-tab-content"
id="dgwt-wcas-widget-tab-content-<?php echo esc_attr( $lang ); ?>">
<?php $this->renderTable(
array_merge( $vars, $vars['multilingual']['langs'][ $lang ] )
); ?>
</div>
<?php
}
} else {
$this->renderTable( $vars );
}
?>
<p>
<?php printf( __( "Go to FiboSearch Settings page → %s to see more.", 'ajax-search-for-woocommerce' ), sprintf( '<a title="%2$s" href="%1$s">%2$s</a>', $vars['settings-analytics-url'], esc_attr__( 'Analytics tab', 'ajax-search-for-woocommerce' ) ) ); ?>
</p>
<?php
echo ob_get_clean();
}
private function renderTable( $vars ) {
if ( ! empty( $vars['critical-searches'] ) ) { ?>
<p>
<?php printf( _n( 'The FiboSearch analyzer found <b>1 critical search phrase</b>.', 'The FiboSearch analyzer found <b>%d critical search phrases</b>.', $vars['critical-searches-total'], 'ajax-search-for-woocommerce' ), $vars['critical-searches-total'] );
echo ' ';
printf( _n( 'These phrases have been typed by users over the last 1 day.', 'These phrases have been typed by users over the last %d days.', $vars['days'], 'ajax-search-for-woocommerce' ), $vars['days'] );
echo ' ';
_e( "These phrases don`t return any search results. It's time to fix it.", 'ajax-search-for-woocommerce' );
?>
</p>
<table class="widefat fixed">
<thead>
<tr>
<th>#</th>
<th><?php _e( 'Phrase', 'ajax-search-for-woocommerce' ); ?></th>
<th><?php _e( 'Repetitions', 'ajax-search-for-woocommerce' ); ?></th>
</tr>
</thead>
<tbody>
<?php
$i = 1;
foreach ( $vars['critical-searches'] as $row ) {
?>
<tr>
<td><?php echo $i; ?></td>
<td><?php echo esc_html( $row['phrase'] ); ?></td>
<td><?php echo esc_html( $row['qty'] ); ?></td>
</tr>
<?php
$i ++;
}
?>
</tbody>
</table>
<?php
} else {
?>
<p>
<?php printf( __( "Fantastic! The FiboSearch analyzer hasn't found any critical search phrases for the last %d days.", 'ajax-search-for-woocommerce' ), $vars['days'] ); ?>
</p>
<?php
}
}
public function enqueueTabsScript() {
wp_enqueue_style( 'jquery' );
ob_start();
?>
<script>
(function ($) {
$(document).ready(function () {
const tabs = $('.dgwt-wcas-widget-tab');
tabs.on('click', function (event) {
event.preventDefault();
$('.dgwt-wcas-widget-tab.dgwt-wcas-widget-tab-active').removeClass('dgwt-wcas-widget-tab-active');
$(this).addClass('dgwt-wcas-widget-tab-active');
$('.dgwt-wcas-widget-tab-content').hide();
$($(this).attr('href')).show();
});
if (tabs.length > 0) {
$(tabs[0]).trigger('click');
}
});
}(jQuery)
);
</script>
<?php
$script = str_replace( array( '<script>', '</script>' ), array( '', '' ), ob_get_clean() );
wp_add_inline_script( 'jquery', $script );
}
}