File "manifest.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/admin/helpers/src/webapp/manifest.php
File size: 3.63 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking
* @subpackage core
* @author E4J s.r.l.
* @copyright Copyright (C) 2023 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!');
/**
* VikBooking Web App Manifest handling class.
*
* @since 1.16.5 (J) - 1.6.5 (WP)
*/
final class VBOWebappManifest
{
/**
* Loads the Web App Manifest JSON file and attaches it to the document.
*
* @return bool
*/
public static function load()
{
if (!is_file(self::getPath())) {
// attempt to build the manifest
try {
self::build();
} catch (Exception $e) {
// manifest shall not be built or loaded
return false;
}
}
// access the document
$document = JFactory::getDocument();
// prevent conflicts
if (!method_exists($document, 'addHeadLink')) {
return false;
}
// attach the link tag to the document head
$document->addHeadLink(self::getUri(), 'manifest');
return true;
}
/**
* Attempts to build the manifest file. This will run either when the manifest file is missing
* (could be manually deleted), or when the configuration settings get saved. This is to allow
* third-party plugins to manipulate the manifest file easily.
*
* @return bool
*
* @throws Exception
*/
public static function build()
{
// default Web App name
$web_app_name = JText::translate('COM_VIKBOOKING');
if ($web_app_name == 'COM_VIKBOOKING') {
$web_app_name = 'VikBooking';
}
// host name
$host_name = JURI::getInstance()->toString(['host']);
// manifest default payload
$data = [
'name' => $web_app_name,
'display' => 'standalone',
'short_name' => $host_name,
'description' => $web_app_name . ' - ' . $host_name,
'start_url' => VBOFactory::getPlatform()->getUri()->admin('index.php?option=com_vikbooking&webapp=1', $xhtml = false),
'icons' => [
[
'src' => VBO_ADMIN_URI . 'resources/channels/touch-icon-192.png',
'sizes' => '192x192',
'type' => 'image/png',
],
],
];
/**
* Trigger event to allow third party plugins to overwrite the Web App manifest payload.
* It is possible to throw an Exception in order to prevent the Web App manifest from being generated.
*/
VBOFactory::getPlatform()->getDispatcher()->trigger('onBeforeBuildWebAppManifestVikBooking', [&$data]);
if (!$data) {
throw new Exception('Invalid manifest payload', 500);
}
if (!JFile::write(self::getPath(), json_encode($data, JSON_PRETTY_PRINT))) {
throw new Exception('Could not write the Web App manifest file', 500);
}
return true;
}
/**
* Returns the path to the manifest file according to the platform.
*
* @return string
*/
private static function getPath()
{
static $path = null;
if ($path !== null) {
return $path;
}
if (VBOPlatformDetection::isWordPress()) {
$path = implode(DIRECTORY_SEPARATOR, [VBO_MEDIA_ASSETS_PATH, 'manifest.json']);
} else {
$path = implode(DIRECTORY_SEPARATOR, [VBO_ADMIN_PATH, 'resources', 'manifest.json']);
}
return $path;
}
/**
* Returns the URI to the manifest file according to the platform.
*
* @param bool $cached true to append the file modification timestamp to the URL for caching.
*
* @return string
*/
private static function getUri($cached = true)
{
$cache_id = '';
if ($cached) {
$cache_id = '?' . @filemtime(self::getPath());
}
if (VBOPlatformDetection::isWordPress()) {
return VBO_MEDIA_ASSETS_URI . 'manifest.json' . $cache_id;
}
return VBO_ADMIN_URI . 'resources/manifest.json' . $cache_id;
}
}