Current File : //usr/local/lsws/add-ons/webcachemgr/src/View/Model/Ajax/CacheMgrRowViewModel.php |
<?php
/* * ******************************************
* LiteSpeed Web Server Cache Manager
* @author: LiteSpeed Technologies, Inc. (https://www.litespeedtech.com)
* @copyright: (c) 2018-2019
* ******************************************* */
namespace Lsc\Wp\View\Model\Ajax;
use \Lsc\Wp\Context\Context;
use \Lsc\Wp\LSCMException;
use \Lsc\Wp\PluginVersion;
use Lsc\Wp\Util;
use \Lsc\Wp\WPInstall;
class CacheMgrRowViewModel
{
const FLD_LIST_DATA = 'listData';
/**
* @var WPInstall
*/
protected $wpInstall;
/**
* @var mixed[]
*/
protected $tplData = array();
/**
*
* @param WPInstall $wpInstall
*/
public function __construct( WPInstall $wpInstall )
{
$this->wpInstall = $wpInstall;
$this->init();
}
protected function init()
{
$this->getActiveVerData();
$this->setListRowData();
}
/**
*
* @param string $field
* @return null|mixed
*/
public function getTplData( $field )
{
if ( !isset($this->tplData[$field]) ) {
return null;
}
return $this->tplData[$field];
}
/**
*
* @param string $type
* @return string
*/
public function getSortVal( $type )
{
$listData = $this->getTplData(self::FLD_LIST_DATA);
return $listData[$this->wpInstall->getPath()]["{$type}Data"]['sort'];
}
protected function setListRowData()
{
$listData = array();
$info = array(
'statusData' =>
$this->getStatusDisplayData(),
'flagData' => $this->getFlagDisplayData(),
'siteUrl' => Util::tryIdnToUtf8(
$this->wpInstall->getData(WPInstall::FLD_SITEURL)
)
);
$listData[$this->wpInstall->getPath()] = $info;
$this->tplData[self::FLD_LIST_DATA] = $listData;
}
/**
*
* @return string[]
*/
protected function getStatusDisplayData()
{
$statusInfo = array(
'disabled' => array(
'sort' => 'disabled',
'state' => '<span '
. 'class="glyphicon glyphicon-flash status-disabled" '
. 'data-uk-tooltip title="LSCWP is disabled."></span>',
'btn_content' => '<span class="enable_btn"></span>',
'btn_title' => 'Click to enable LSCache',
'onclick' =>
'onclick="javascript:lscwpEnableSingle(this);"',
'btn_attributes' => 'data-uk-tooltip',
'btn_state' => ''
),
'enabled' => array(
'sort' => 'enabled',
'state' => '<span '
. 'class="glyphicon glyphicon-flash status-enabled" '
. 'data-uk-tooltip title="LSCWP is enabled."></span>',
'btn_content' => '<span class="disable_btn"></span>',
'btn_title' => 'Click to disable LSCache',
'onclick' =>
'onclick="javascript:lscwpDisableSingle(this);"',
'btn_attributes' => 'data-uk-tooltip',
'btn_state' => ''
),
'adv_cache' => array(
'sort' => 'warning',
'state' => '<span class="status-warning" '
. 'data-uk-tooltip '
. 'title="LSCache is enabled but not caching. Please visit '
. 'the WordPress Dashboard for more information."></span>',
'btn_content' => '<span class="disable_btn"></span>',
'btn_title' => 'Click to disable LSCache',
'onclick' =>
'onclick="javascript:lscwpDisableSingle(this);"',
'btn_attributes' => 'data-uk-tooltip',
'btn_state' => ''
),
'disabled_no_active_ver' => array(
'sort' => 'disabled',
'state' => '<span '
. 'class="glyphicon glyphicon-flash status-disabled" '
. 'data-uk-tooltip title="LSCWP is disabled."></span>',
'btn_content' => '<span class="inactive-action-btn" '
. 'data-uk-tooltip '
. 'title="No active LSCWP version set! Cannot enable '
. 'LSCache."></span>',
'onclick' => '',
'btn_attributes' => '',
'btn_state' => 'disabled',
),
'error' => array(
'sort' => 'error',
/**
* 'state' added individually later.
*/
'btn_title' => '',
'btn_content' => '<span class="inactive-action-btn"></span>',
'onclick' => '',
'btn_attributes' => '',
'btn_state' => 'disabled'
),
'removed' => array(
'sort' => 'removed',
'state' => '<span class="status-removed" '
. 'data-uk-tooltip '
. 'title="Installation could not be found and has been '
. 'removed."></span>',
'btn_content' => '<span class="inactive-action-btn"></span>',
'onclick' => '',
'btn_attributes' => '',
'btn_state' => 'disabled',
)
);
$wpStatus = $this->wpInstall->getStatus();
if ( $wpStatus & WPInstall::ST_ERR_REMOVE ) {
$currStatusData = $statusInfo['removed'];
}
elseif ( $this->wpInstall->hasFatalError($wpStatus) ) {
$fatalErrStateInfo =
Util::getFatalErrorStateMessageAndLink($wpStatus);
$currStatusData = $statusInfo['error'];
$currStatusData['state'] = '<a '
. "href=\"{$fatalErrStateInfo['link']}\" "
. 'target="_blank" rel="noopener" data-uk-tooltip '
. "title =\"{$fatalErrStateInfo['stateMsg']}\" "
. 'class="status-error"></a>';
}
elseif ( ($wpStatus & WPInstall::ST_PLUGIN_INACTIVE ) ) {
if ( !$this->getActiveVerData() ) {
$currStatusData = $statusInfo['disabled_no_active_ver'];
}
else {
$currStatusData = $statusInfo['disabled'];
}
}
elseif ( !($wpStatus & WPInstall::ST_LSC_ADVCACHE_DEFINED) ) {
$currStatusData = $statusInfo['adv_cache'];
}
else {
$currStatusData = $statusInfo['enabled'];
}
return $currStatusData;
}
/**
*
* @return string[]
*/
protected function getFlagDisplayData()
{
$flagInfo = array(
0 => array(
'sort' => 'unflagged',
'icon' => '<span class="glyphicon glyphicon-flag ls-flag ls-flag-unset"></span>',
'btn_title' => 'Click to set flag',
'onclick' => 'onclick="javascript:lscwpFlagSingle(this);"',
'btn_attributes' => 'data-uk-tooltip'
),
1 => array(
'sort' => 'flagged',
'icon' => '<span class="glyphicon glyphicon-flag ls-flag ls-flag-set"></span>',
'btn_title' => 'Click to unset flag',
'onclick' => 'onclick="javascript:lscwpUnflagSingle(this);"',
'btn_attributes' => 'data-uk-tooltip'
),
2 => array (
'sort' => 'removed',
'icon' => '<span class="glyphicon glyphicon-flag ls-flag ls-flag-removed"></span>',
'btn_title' => '',
'onclick' => '',
'btn_attributes' => ''
)
);
$wpStatus = $this->wpInstall->getStatus();
if ( $wpStatus & WPInstall::ST_ERR_REMOVE ) {
$currFlagData = $flagInfo[2];
}
elseif ( ($wpStatus & WPInstall::ST_FLAGGED ) ) {
$currFlagData = $flagInfo[1];
}
else {
$currFlagData = $flagInfo[0];
}
return $currFlagData;
}
/**
*
* @return boolean|string
*/
protected function getActiveVerData()
{
try
{
$currVer = PluginVersion::getCurrentVersion();
}
catch ( LSCMException $e )
{
//don't care about the exception in ajax load.
$currVer = false;
}
return $currVer;
}
/**
*
* @param string $tplID
* @return null|string
*/
public function getTpl( $tplID )
{
$sharedTplDir = Context::getOption()->getSharedTplDir();
switch ($tplID) {
case 'actions_td':
return "{$sharedTplDir}/Ajax/CacheMgrActionsCol.tpl";
case 'status_td':
return "{$sharedTplDir}/Ajax/CacheMgrStatusCol.tpl";
case 'flag_td':
return "{$sharedTplDir}/Ajax/CacheMgrFlagCol.tpl";
//no default
}
}
}