| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/www/cj79373/libraries/fof40/Utils/ |
Upload File : |
<?php
/**
* @package FOF
* @copyright Copyright (c)2010-2022 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU General Public License version 3, or later
*/
namespace FOF40\Utils;
use FOF40\Container\Container;
use Joomla\CMS\Filesystem\File;
use Joomla\Filesystem\Folder;
class ViewManifestMigration
{
/**
* Migrates Joomla 4 view XML manifests into their Joomla 3 locations
*
* @param Container $container The FOF 4 container of the component we'll be migrating.
*
* @return void
*/
public static function migrateJoomla4MenuXMLFiles(Container $container): void
{
self::migrateJoomla4MenuXMLFiles_real($container->frontEndPath, $container->backEndPath);
}
/**
* Migrates Joomla 4 view XML manifests into their Joomla 3 locations
*
* @param string $frontendPath Component's frontend path
* @param string $backendPath Component's backend path
*
* @return void
* @noinspection PhpUnused
*/
public static function migrateJoomla4MenuXMLFiles_real($frontendPath, $backendPath): void
{
// This only applies to Joomla 3
if (version_compare(JVERSION, '3.999.999', 'gt'))
{
return;
}
// Map modern to legacy locations
$maps = [
$frontendPath . '/tmpl' => $frontendPath . '/views',
$frontendPath . '/ViewTemplates' => $frontendPath . '/views',
$backendPath . '/tmpl' => $backendPath . '/views',
$backendPath . '/ViewTemplates' => $backendPath . '/views',
];
foreach ($maps as $source => $dest)
{
try
{
self::migrateViewXMLManifests($source, $dest);
}
catch (\UnexpectedValueException $e)
{
// This means the source folder doesn't exist. No problem!
}
}
}
/**
* Removes the legacy `views` paths from the front- and backend of the component on Joomla 4 and later versions.
*
* @param Container $container
*
* @return void
*/
public static function removeJoomla3LegacyViews(Container $container): void
{
self::removeJoomla3LegacyViews_real($container->frontEndPath, $container->backEndPath);
}
/**
* Removes the legacy `views` paths from the front- and backend of the component on Joomla 4 and later versions.
*
* @param string $frontendPath Component's frontend path
* @param string $backendPath Component's backend path
*
* @return void
* @noinspection PhpUnused
*/
public static function removeJoomla3LegacyViews_real($frontendPath, $backendPath): void
{
// This only applies to Joomla 4
if (version_compare(JVERSION, '3.999.999', 'le'))
{
return;
}
$legacyLocations = [
$frontendPath . '/views',
$backendPath . '/views',
];
foreach ($legacyLocations as $path)
{
if (!is_dir($path))
{
continue;
}
Folder::delete($path);
}
}
/**
* Migrates view manifest XML files from the source to the dest folder.
*
* @param string $source Source folder to scan, i.e. the `tmpl` or `ViewTemplates` folder.
* @param string $dest Target folder to copy the files to, i.e. the legacy `views` folder.
*/
private static function migrateViewXMLManifests(string $source, string $dest): void
{
$di = new \DirectoryIterator($source);
/** @var \DirectoryIterator $folderItem */
foreach ($di as $folderItem)
{
if ($folderItem->isDot() || !$folderItem->isDir())
{
continue;
}
// Delete the metadata.xml and tmpl/*.xml files in the corresponding `views` subfolder
$killLegacyFile = $dest . '/' . $folderItem->getFilename() . '/metadata.xml';
$killLegacyFolder = $dest . '/' . $folderItem->getFilename() . '/tmpl';
if (!@is_file($killLegacyFile))
{
File::delete($killLegacyFile);
}
if (@file_exists($killLegacyFolder) && @is_dir($killLegacyFolder))
{
$files = Folder::files($killLegacyFolder, '\.xml$', false, true);
if (!empty($files))
{
File::delete($files);
}
}
$filesIterator = new \DirectoryIterator($folderItem->getPathname());
/** @var \DirectoryIterator $fileItem */
foreach ($filesIterator as $fileItem)
{
if ($fileItem->isDir())
{
continue;
}
if ($fileItem->getExtension() != 'xml')
{
continue;
}
$destPath = $dest . '/' . $folderItem->getFilename() . (($fileItem->getFilename() == 'metadata.xml') ? '' : '/tmpl');
$destPathName = $destPath . '/' . $fileItem->getFilename();
Folder::create($destPath);
File::copy($fileItem->getPathname(), $destPathName);
}
}
}
}