File "aitools.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/admin/helpers/widgets/aitools.php
File size: 3.85 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking
* @subpackage com_vikbooking
* @author Alessio Gaggii - E4J srl
* @copyright Copyright (C) 2024 E4J srl. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* @link https://vikwp.com
*/
defined('ABSPATH') or die('No script kiddies please!');
/**
* Class handler for admin widget "AI Tools".
*
* @since 1.17 (J) - 1.7 (WP)
*/
class VikBookingAdminWidgetAitools extends VikBookingAdminWidget
{
/**
* @inheritDOc
*/
public function __construct()
{
// call parent constructor
parent::__construct();
$this->widgetName = JText::translate('VBO_W_AITOOLS_TITLE');
$this->widgetDescr = JText::translate('VBO_W_AITOOLS_DESCR');
$this->widgetId = basename(__FILE__, '.php');
$this->widgetIcon = '<i class="' . VikBookingIcons::i('magic') . '"></i>';
$this->widgetStyleName = 'violet';
}
/**
* @inheritDoc
*/
public function getPriority()
{
// give this widget a higher priority
return 15;
}
/**
* @inheritDoc
*/
public function preflight()
{
if (VBOPlatformDetection::isJoomla()) {
// can be used only if VCM is installed and the AI channel is supported (not necessarily active)
return class_exists('VikChannelManager') && defined('VikChannelManagerConfig::AI');
}
return parent::preflight();
}
/**
* @inheritDoc
*/
public function preload()
{
$options = [
'version' => defined('VIKCHANNELMANAGER_SOFTWARE_VERSION') ? VIKCHANNELMANAGER_SOFTWARE_VERSION : VIKBOOKING_SOFTWARE_VERSION,
];
if (class_exists('VikChannelManager')) {
// manually load required dependencies
JHtml::fetch('script', VCM_ADMIN_URI . 'layouts/ai/assistant/aitools.js', $options);
JHtml::fetch('stylesheet', VCM_ADMIN_URI . 'layouts/ai/assistant/aitools.css', $options);
JHtml::fetch('script', VCM_ADMIN_URI . 'assets/js/katex/katex.min.js', $options);
JHtml::fetch('script', VCM_ADMIN_URI . 'assets/js/katex/auto-render.min.js', $options);
JHtml::fetch('stylesheet', VCM_ADMIN_URI . 'assets/js/katex/katex.min.css', $options);
// language definitions
JText::script('VBO_AI_ASSISTANT_DISCLAIMER');
JText::script('VBO_AI_ASSISTANT_DISCOVER_HINT');
JText::script('VBO_AI_ASSISTANT_DISCOVER_TITLE');
}
}
/**
* @inheritDoc
*/
public function render(?VBOMultitaskData $data = null)
{
$auto_focus = false;
$prompt = null;
$scope = null;
// if we are rendering the widget on a modal, register a script to prevent the latter
// from dismissing whenever the ESC key is pressed
if ($data && $data->isModalRendering()) {
$auto_focus = true;
$prompt = (array) $this->getOption('prompt', null);
$scope = $this->getOption('scope');
?>
<script>
(function() {
const vbo_modal_ai_assistant_dismiss = (event) => {
if (event.key == 'Escape') {
event.preventDefault();
event.stopPropagation();
return false;
}
};
document.addEventListener('keyup', vbo_modal_ai_assistant_dismiss);
document.addEventListener(VBOCore.widget_modal_dismissed + '<?php echo $data->getModalJsIdentifier(); ?>', (e) => {
document.removeEventListener('keyup', vbo_modal_ai_assistant_dismiss);
VBOCore.emitEvent('vbo-widget-ai-tools-dismissed');
});
})();
</script>
<?php
}
// display by using a specific layout provided by VCM
echo JLayoutHelper::render(
'ai.assistant.chat',
[
// prevent the layout from loading the required assets
'load_assets' => false,
// auto-focus textarea
'auto_focus' => $auto_focus,
// default prompt
'prompt' => $prompt,
// default scope
'scope' => $scope,
// show widget title (VBO dashboard only)
'widget_title' => is_null($data),
// widget icon
'widget_icon' => $this->widgetIcon,
// widget name
'widget_name' => $this->widgetName,
],
null,
[
'component' => 'com_vikchannelmanager',
'client' => 'admin',
]
);
}
}