File "screen.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/libraries/system/screen.php
File size: 6.35 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking - Libraries
* @subpackage system
* @author E4J s.r.l.
* @copyright Copyright (C) 2018 E4J s.r.l. All Rights Reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
* @link https://vikwp.com
*/
// No direct access
defined('ABSPATH') or die('No script kiddies please!');
/**
* Helper class to setup the WordPress Screen.
*
* @since 1.2.5
*/
class VikBookingScreen
{
/**
* Creates the option section within the WP Screen for VikBooking.
*
* @return void
*/
public static function options()
{
$app = JFactory::getApplication();
// make sure we are in VikBooking (back-end)
if (!$app->isAdmin() || $app->input->get('page') != 'vikbooking')
{
// abort
return;
}
// extract view from request
$view = $app->input->get('view', null);
if (empty($view))
{
// no view, try to check 'task'
$view = $app->input->get('task', 'dashboard');
}
// allowed views to display screen options
$allowed_views = array(
'dashboard',
'orders',
'seasons',
'restrictions',
'trackings',
'rooms',
);
if (!in_array($view, $allowed_views))
{
// abort
return;
}
// create pagination option
$args = array(
'label' => __('Number of items per page:'),
'default' => 20,
'option' => 'vikbooking_list_limit',
);
add_screen_option('per_page', $args);
}
/**
* Filters a screen option value before it is set.
*
* @param boolean $skip Whether to save or skip saving the screen option value. Default false.
* @param string $option The option name.
* @param mixed $value The option value.
*
* @return mixed Returning false to the filter will skip saving the current option.
*/
public static function saveOption($skip, $option, $value)
{
$lookup = array(
'vikbooking_list_limit',
);
if (in_array($option, $lookup))
{
/**
* We also update the global list limit fallback option
*
* @since 1.4.0
*/
if ($option == 'vikbooking_list_limit')
{
// cannot have a value lower than 1
$value = max(array(1, (int) $value));
// refresh cached value
JFactory::getApplication()->setUserState('com_vikbooking.limit', $value);
update_option($option, (int) $value);
}
// return value to save it
return $value;
}
// skip otherwise
return $skip;
}
/**
* Creates the Help tabs within the WP Screen for VikBooking.
*
* @param WP_Screen $screen The current screen instance.
*
* @return void
*/
public static function help($screen = null)
{
$app = JFactory::getApplication();
// make sure we are in VikBooking (back-end)
if (!$app->isAdmin() || $app->input->get('page') != 'vikbooking')
{
// abort
return;
}
// make sure $screen is a valid instance
if (!class_exists('WP_Screen') || !$screen instanceof WP_Screen)
{
if (VIKBOOKING_DEBUG)
{
// trigger warning in case debug is enabled
trigger_error('Method ' . __METHOD__ . ' has been called too early', E_USER_WARNING);
}
// abort
return;
}
// extract view from request
$view = $app->input->get('view', null);
if (empty($view))
{
// no view, try to check 'task'
$view = $app->input->get('task', 'dashboard');
}
// make sure the view is supported
if (!isset(static::$lookup[$view]))
{
// view not supported
return;
}
// check if we have a link to an existing item
if (is_string(static::$lookup[$view]))
{
// use the linked element
$view = static::$lookup[$view];
}
// check if the view documentation has been already cached
$doc = get_transient('vikbooking_screen_' . $view);
if (!$doc)
{
// evaluate if we should stop using HELP tabs after 3 failed attempts
$fail = (int) get_option('vikbooking_screen_failed_attempts', 0);
if ($fail >= 5)
{
// Do not proceed as we hit too many failure attempts contiguously.
// Reset 'vikbooking_screen_failed_attempts' option to restart using HELP tabs.
return;
}
// create POST arguments
$args = array(
'documentation_alias' => 'vik-booking',
'lang' => substr(JFactory::getLanguage()->getTag(), 0, 2),
);
$args = array_merge($args, static::$lookup[$view]);
$http = new JHttp();
// make HTTP post
$response = $http->post('https://vikwp.com/index.php?option=com_vikhelpdesk&format=json', $args);
if ($response->code != 200)
{
// increase total number of failed attempts
update_option('vikbooking_screen_failed_attempts', $fail + 1);
return;
}
// try to decode JSON
$doc = json_decode($response->body);
if (!is_array($doc))
{
// increase total number of failed attempts
update_option('vikbooking_screen_failed_attempts', $fail + 1);
return;
}
// reset total number of failed attempts
update_option('vikbooking_screen_failed_attempts', 0);
// cache retrieved documentation (for one week only)
set_transient('vikbooking_screen_' . $view, json_encode($doc), WEEK_IN_SECONDS);
}
else
{
// JSON decode the cached documentation
$doc = json_decode($doc);
}
// iterate category sections
foreach ($doc as $i => $cat)
{
// add subcategory as help tab
$screen->add_help_tab(array(
'id' => 'vikbooking-' . $view . '-' . ($i + 1),
'title' => $cat->contentTitle,
'content' => $cat->content,
));
}
// add help sidebar
$screen->set_help_sidebar(
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p><a href="https://vikwp.com/documentation/vik-booking/" target="_blank">VikWP.com</a></p>'
);
}
/**
* Clears the cache for the specified view, if specified.
*
* @param string|null $view Clear the cache for the specified view (if specified)
* or for all the existing views.
*
* @return void
*/
public static function clearCache($view = null)
{
if ($view)
{
delete_transient('vikbooking_screen_' . $view);
}
else
{
foreach (static::$lookup as $view => $args)
{
if (is_array($args))
{
delete_transient('vikbooking_screen_' . $view);
}
}
// delete settings too
delete_option('vikbooking_screen_failed_attempts');
delete_option('vikbooking_list_limit');
}
}
/**
* Lookup used to retrieve the arguments for the HTTP request.
*
* @var array
*/
protected static $lookup = array(
/**
* @todo define documentation lookup here
*/
);
}