File Manager V1.5
FILE_CONTENT: ComposerScripts.php
<?php
/**
* This file is part of the CodeIgniter 4 framework.
*
* (c) CodeIgniter Foundation <admin@codeigniter.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CodeIgniter;
use ReflectionClass;
use ReflectionException;
/**
* ComposerScripts
*
* These scripts are used by Composer during installs and updates
* to move files to locations within the system folder so that end-users
* do not need to use Composer to install a package, but can simply
* download
*
* @codeCoverageIgnore
*/
class ComposerScripts
{
/**
* Base path to use.
*
* @var string
*/
protected static $basePath = 'ThirdParty/';
/**
* After composer install/update, this is called to move
* the bare-minimum required files for our dependencies
* to appropriate locations.
*
* @throws ReflectionException
*/
public static function postUpdate()
{
static::moveEscaper();
static::moveKint();
}
//--------------------------------------------------------------------
/**
* Move a file.
*
* @param string $source
* @param string $destination
*
* @return boolean
*/
protected static function moveFile(string $source, string $destination): bool
{
$source = realpath($source);
if (empty($source))
{
// @codeCoverageIgnoreStart
die('Cannot move file. Source path invalid.');
// @codeCoverageIgnoreEnd
}
if (! is_file($source))
{
return false;
}
return copy($source, $destination);
}
//--------------------------------------------------------------------
/**
* Determine file path of a class.
*
* @param string $class
*
* @return string
* @throws ReflectionException
*/
protected static function getClassFilePath(string $class)
{
$reflector = new ReflectionClass($class);
return $reflector->getFileName();
}
//--------------------------------------------------------------------
/**
* A recursive remove directory method.
*
* @param string $dir
*/
protected static function removeDir($dir)
{
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object !== '.' && $object !== '..')
{
if (filetype($dir . '/' . $object) === 'dir')
{
static::removeDir($dir . '/' . $object);
}
else
{
unlink($dir . '/' . $object);
}
}
}
reset($objects);
rmdir($dir);
}
}
protected static function copyDir($source, $dest)
{
$dir = opendir($source);
@mkdir($dest);
while (false !== ($file = readdir($dir)))
{
if (($file !== '.') && ($file !== '..'))
{
if (is_dir($source . '/' . $file))
{
static::copyDir($source . '/' . $file, $dest . '/' . $file);
}
else
{
copy($source . '/' . $file, $dest . '/' . $file);
}
}
}
closedir($dir);
}
/**
* Moves the Laminas Escaper files into our base repo so that it's
* available for packaged releases where the users don't user Composer.
*
* @throws ReflectionException
*/
public static function moveEscaper()
{
if (class_exists('\\Laminas\\Escaper\\Escaper') && is_file(static::getClassFilePath('\\Laminas\\Escaper\\Escaper')))
{
$base = basename(__DIR__) . '/' . static::$basePath . 'Escaper';
foreach ([$base, $base . '/Exception'] as $path)
{
if (! is_dir($path))
{
mkdir($path, 0755);
}
}
$files = [
static::getClassFilePath('\\Laminas\\Escaper\\Exception\\ExceptionInterface') => $base . '/Exception/ExceptionInterface.php',
static::getClassFilePath('\\Laminas\\Escaper\\Exception\\InvalidArgumentException') => $base . '/Exception/InvalidArgumentException.php',
static::getClassFilePath('\\Laminas\\Escaper\\Exception\\RuntimeException') => $base . '/Exception/RuntimeException.php',
static::getClassFilePath('\\Laminas\\Escaper\\Escaper') => $base . '/Escaper.php',
];
foreach ($files as $source => $dest)
{
if (! static::moveFile($source, $dest))
{
// @codeCoverageIgnoreStart
die('Error moving: ' . $source);
// @codeCoverageIgnoreEnd
}
}
}
}
//--------------------------------------------------------------------
/**
* Moves the Kint file into our base repo so that it's
* available for packaged releases where the users don't user Composer.
*/
public static function moveKint()
{
$dir = 'vendor/kint-php/kint/src';
if (is_dir($dir))
{
$base = basename(__DIR__) . '/' . static::$basePath . 'Kint';
// Remove the contents of the previous Kint folder, if any.
if (is_dir($base))
{
static::removeDir($base);
}
// Create Kint if it doesn't exist already
if (! is_dir($base))
{
mkdir($base, 0755);
}
static::copyDir($dir, $base);
static::copyDir($dir . '/../resources', $base . '/resources');
copy($dir . '/../init.php', $base . '/init.php');
copy($dir . '/../init_helpers.php', $base . '/init_helpers.php');
}
}
}
[ KEMBALI ]