update 2024-04-29 11:28:11

This commit is contained in:
Robot 2024-04-29 11:28:11 +02:00
parent 37ad7da5ad
commit 42310f5d44
Signed by: Robot
GPG Key ID: 14DECD44E7E1BB95
8 changed files with 136 additions and 20 deletions

View File

@ -12,22 +12,24 @@
@startuml
class FileInjector << (F,LightGreen) >> #RoyalBlue {
# Power $power
+ __construct(Power $power)
# JoomlaPower $joomla
+ __construct(Power $power, JoomlaPower $joomla)
+ add(string $file, string $data, ...) : void
- openFileWithLock(string $file) : resource
- processFile(resource $actual_file, resource $temp_file, ...) : void
- truncateIfNeeded(resource $actual_file, string $data, ...) : void
- copyRemainingData(resource $actual_file, resource $temp_file, ...) : void
- injectSuperPowers(resource $actual_file) : void
- injectJoomlaPowers(resource $actual_file) : void
}
note right of FileInjector::__construct
Constructor.
since: 3.2.0
since: 3.2.1
end note
note right of FileInjector::add
note left of FileInjector::add
Inserts or replaces data in a file at a specific position.
since: 3.2.0
@ -47,7 +49,7 @@ note right of FileInjector::openFileWithLock
return: resource
end note
note right of FileInjector::processFile
note left of FileInjector::processFile
Processes the file for data insertion and copying the remaining data.
since: 3.2.0
@ -73,7 +75,7 @@ note right of FileInjector::truncateIfNeeded
int $position
end note
note right of FileInjector::copyRemainingData
note left of FileInjector::copyRemainingData
Copies the remaining data from the temporary stream to the actual file.
since: 3.2.0
@ -92,6 +94,13 @@ note right of FileInjector::injectSuperPowers
since: 3.2.0
return: void
end note
note left of FileInjector::injectJoomlaPowers
Injects Joomla powers into the file content, if found, and updates the file.
since: 3.2.1
return: void
end note
@enduml
```

View File

@ -13,6 +13,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Utilities;
use VDM\Joomla\Componentbuilder\Compiler\Power\Injector as Power;
use VDM\Joomla\Componentbuilder\Compiler\JoomlaPower\Injector as JoomlaPower;
use VDM\Joomla\Utilities\MathHelper;
@ -33,23 +34,41 @@ final class FileInjector
protected Power $power;
/**
* The pattern to get the powers
* The Joomla Injector Class.
*
* @var JoomlaPower
* @since 3.2.1
*/
protected JoomlaPower $joomla;
/**
* The power pattern to get the powers
*
* @var string
* @since 3.2.0
**/
protected string $pattern = '/Super_'.'_'.'_[a-zA-Z0-9_]+_'.'_'.'_Power/';
protected string $powerPattern = '/Super_'.'_'.'_[a-zA-Z0-9_]+_'.'_'.'_Power/';
/**
* The Joomla power pattern to get the powers
*
* @var string
* @since 3.2.1
**/
protected string $joomlaPattern = '/Joomla_'.'_'.'_[a-zA-Z0-9_]+_'.'_'.'_Power/';
/**
* Constructor.
*
* @param Power $power The Injector Class.
* @param Power $power The Injector Class.
* @param JoomlaPower $joomla The Joomla Injector Class.
*
* @since 3.2.0
* @since 3.2.1
*/
public function __construct(Power $power)
public function __construct(Power $power, JoomlaPower $joomla)
{
$this->power = $power;
$this->joomla = $joomla;
}
/**
@ -72,7 +91,9 @@ final class FileInjector
throw new \InvalidArgumentException('Position cannot be negative.');
}
$found_super_powers = preg_match($this->pattern, $data);
$found_joomla_powers = preg_match($this->joomlaPattern, $data);
$found_super_powers = preg_match($this->powerPattern, $data);
$actual_file = $this->openFileWithLock($file);
try
@ -85,6 +106,11 @@ final class FileInjector
$this->processFile($actual_file, $temp_file, $data, $position, $replace);
if ($found_joomla_powers)
{
$this->injectJoomlaPowers($actual_file);
}
if ($found_super_powers)
{
$this->injectSuperPowers($actual_file);
@ -207,6 +233,28 @@ final class FileInjector
ftruncate($actual_file, 0);
rewind($actual_file);
fwrite($actual_file, $power_data);
}
/**
* Injects Joomla powers into the file content, if found, and updates the file.
*
* @param resource $actual_file The file handle of the actual file.
*
* @return void
* @since 3.2.1
*/
private function injectJoomlaPowers($actual_file): void
{
rewind($actual_file);
$power_data = $this->joomla->power(
stream_get_contents($actual_file)
);
ftruncate($actual_file, 0);
rewind($actual_file);
fwrite($actual_file, $power_data);
}
}

View File

@ -7,23 +7,41 @@
protected Power $power;
/**
* The pattern to get the powers
* The Joomla Injector Class.
*
* @var JoomlaPower
* @since 3.2.1
*/
protected JoomlaPower $joomla;
/**
* The power pattern to get the powers
*
* @var string
* @since 3.2.0
**/
protected string $pattern = '/Super_'.'_'.'_[a-zA-Z0-9_]+_'.'_'.'_Power/';
protected string $powerPattern = '/Super_'.'_'.'_[a-zA-Z0-9_]+_'.'_'.'_Power/';
/**
* The Joomla power pattern to get the powers
*
* @var string
* @since 3.2.1
**/
protected string $joomlaPattern = '/Joomla_'.'_'.'_[a-zA-Z0-9_]+_'.'_'.'_Power/';
/**
* Constructor.
*
* @param Power $power The Injector Class.
* @param Power $power The Injector Class.
* @param JoomlaPower $joomla The Joomla Injector Class.
*
* @since 3.2.0
* @since 3.2.1
*/
public function __construct(Power $power)
public function __construct(Power $power, JoomlaPower $joomla)
{
$this->power = $power;
$this->joomla = $joomla;
}
/**
@ -46,7 +64,9 @@
throw new \InvalidArgumentException('Position cannot be negative.');
}
$found_super_powers = preg_match($this->pattern, $data);
$found_joomla_powers = preg_match($this->joomlaPattern, $data);
$found_super_powers = preg_match($this->powerPattern, $data);
$actual_file = $this->openFileWithLock($file);
try
@ -59,6 +79,11 @@
$this->processFile($actual_file, $temp_file, $data, $position, $replace);
if ($found_joomla_powers)
{
$this->injectJoomlaPowers($actual_file);
}
if ($found_super_powers)
{
$this->injectSuperPowers($actual_file);
@ -181,5 +206,27 @@
ftruncate($actual_file, 0);
rewind($actual_file);
fwrite($actual_file, $power_data);
}
/**
* Injects Joomla powers into the file content, if found, and updates the file.
*
* @param resource $actual_file The file handle of the actual file.
*
* @return void
* @since 3.2.1
*/
private function injectJoomlaPowers($actual_file): void
{
rewind($actual_file);
$power_data = $this->joomla->power(
stream_get_contents($actual_file)
);
ftruncate($actual_file, 0);
rewind($actual_file);
fwrite($actual_file, $power_data);
}

View File

@ -15,6 +15,10 @@
"as": "Power"
},
"use_selection1": {
"use": "a6052fe9-0d2b-4b36-b3e7-03b47c483542",
"as": "JoomlaPower"
},
"use_selection2": {
"use": "152c8793-8b75-4715-996a-257b9f65451c",
"as": "default"
}

View File

@ -121,7 +121,8 @@ class Utilities implements ServiceProviderInterface
public function getFileInjector(Container $container): FileInjector
{
return new FileInjector(
$container->get('Power.Injector')
$container->get('Power.Injector'),
$container->get('Joomla.Power.Injector')
);
}

View File

@ -84,7 +84,8 @@
public function getFileInjector(Container $container): FileInjector
{
return new FileInjector(
$container->get('Power.Injector')
$container->get('Power.Injector'),
$container->get('Joomla.Power.Injector')
);
}

View File

@ -12,6 +12,7 @@
namespace VDM\Joomla\Componentbuilder\Compiler\JoomlaPower;
use VDM\Joomla\Utilities\JsonHelper;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Power\ExtractorInterface;
use VDM\Joomla\Componentbuilder\Compiler\Power\Extractor as ExtendingExtractor;

View File

@ -11,7 +11,12 @@
"power_version": "1.0.0",
"system_name": "JCB.Compiler.JoomlaPower.Extractor",
"type": "final class",
"use_selection": null,
"use_selection": {
"use_selection0": {
"use": "4b225c51-d293-48e4-b3f6-5136cf5c3f18",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.JoomlaPower.Extractor",
"description": "Compiler Joomla Power Extractor\r\n@since 3.2.1",
"licensing_template": "\/**\r\n * @package Joomla.Component.Builder\r\n *\r\n * @created 4th September, 2022\r\n * @author Llewellyn van der Merwe <https:\/\/dev.vdm.io>\r\n * @git Joomla Component Builder <https:\/\/git.vdm.dev\/joomla\/Component-Builder>\r\n * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.\r\n * @license GNU General Public License version 2 or later; see LICENSE.txt\r\n *\/\r\n",