Stable release of v5.0.0-alpha2

Fix the plug-in installer script builder bug #1067. Fix Event triggers for Joomla 4 and 5 builds.
This commit is contained in:
2024-03-11 18:30:57 +02:00
parent 87cd4305bb
commit a920cb429b
90 changed files with 908 additions and 172 deletions

View File

@ -17,6 +17,7 @@ use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Utilities\GetHelper;
use VDM\Joomla\Utilities\JsonHelper;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\String\NamespaceHelper;
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix;
@ -117,6 +118,12 @@ final class Placeholder implements PlaceholderInterface
$bucket[Placefix::_('COMPONENT')] = $bucket[Placefix::_h('COMPONENT')];
$bucket[Placefix::_h('LANG_PREFIX')] = $config->lang_prefix;
$bucket[Placefix::_('LANG_PREFIX')] = $bucket[Placefix::_h('LANG_PREFIX')];
$bucket[Placefix::_h('ComponentNamespace')] = NamespaceHelper::safeSegment(StringHelper::safe($config->component_code_name, 'F'));
$bucket[Placefix::_('ComponentNamespace')] = $bucket[Placefix::_h('ComponentNamespace')];
$bucket[Placefix::_h('NamespacePrefix')] = $config->namespace_prefix;
$bucket[Placefix::_('NamespacePrefix')] = $config->namespace_prefix;
$bucket[Placefix::_h('NAMESPACEPREFIX')] = $config->namespace_prefix;
$bucket[Placefix::_('NAMESPACEPREFIX')] = $config->namespace_prefix;
// get the current components overrides
if (($_placeholders = GetHelper::var(

View File

@ -125,6 +125,9 @@ final class InstallScript implements GetScriptInterface
*/
public function get(object $extension): string
{
// purge the object
$this->rest();
// loop over methods and types
foreach ($this->methods as $method)
{
@ -160,6 +163,24 @@ final class InstallScript implements GetScriptInterface
return $this->build();
}
/**
* Reset all bucket at the start of each build
*
* @return void
* @since 3.2.0
*/
protected function rest(): void
{
$this->construct = [];
$this->install = [];
$this->update = [];
$this->uninstall = [];
$this->preflightActive = false;
$this->preflightBucket = ['install' => [], 'uninstall' => [], 'discover_install' => [], 'update' => []];
$this->postflightActive = false;
$this->postflightBucket = ['install' => [], 'uninstall' => [], 'discover_install' => [], 'update' => []];
}
/**
* build the install class
*

View File

@ -125,6 +125,9 @@ final class InstallScript implements GetScriptInterface
*/
public function get(object $extension): string
{
// purge the object
$this->rest();
// loop over methods and types
foreach ($this->methods as $method)
{
@ -160,6 +163,24 @@ final class InstallScript implements GetScriptInterface
return $this->build();
}
/**
* Reset all bucket at the start of each build
*
* @return void
* @since 3.2.0
*/
protected function rest(): void
{
$this->construct = [];
$this->install = [];
$this->update = [];
$this->uninstall = [];
$this->preflightActive = false;
$this->preflightBucket = ['install' => [], 'uninstall' => [], 'discover_install' => [], 'update' => []];
$this->postflightActive = false;
$this->postflightBucket = ['install' => [], 'uninstall' => [], 'discover_install' => [], 'update' => []];
}
/**
* build the install class
*

View File

@ -125,6 +125,9 @@ final class InstallScript implements GetScriptInterface
*/
public function get(object $extension): string
{
// purge the object
$this->rest();
// loop over methods and types
foreach ($this->methods as $method)
{
@ -160,6 +163,24 @@ final class InstallScript implements GetScriptInterface
return $this->build();
}
/**
* Reset all bucket at the start of each build
*
* @return void
* @since 3.2.0
*/
protected function rest(): void
{
$this->construct = [];
$this->install = [];
$this->update = [];
$this->uninstall = [];
$this->preflightActive = false;
$this->preflightBucket = ['install' => [], 'uninstall' => [], 'discover_install' => [], 'update' => []];
$this->postflightActive = false;
$this->postflightBucket = ['install' => [], 'uninstall' => [], 'discover_install' => [], 'update' => []];
}
/**
* build the install class
*

View File

@ -101,9 +101,9 @@ class Infusion extends Interpretation
CFactory::_('Placeholder')->get('component')
);
// ComponentNameSpace
CFactory::_('Compiler.Builder.Content.One')->set('ComponentNameSpace',
NamespaceHelper::safeSegment(CFactory::_('Placeholder')->get('Component'))
// ComponentNamespace
CFactory::_('Compiler.Builder.Content.One')->set('ComponentNamespace',
CFactory::_('Placeholder')->get('ComponentNamespace')
);
// COMPANYNAME
@ -197,7 +197,7 @@ class Infusion extends Interpretation
// set the namespace prefix
CFactory::_('Compiler.Builder.Content.One')->set('NAMESPACEPREFIX',
CFactory::_('Config')->namespace_prefix
CFactory::_('Placeholder')->get('NAMESPACEPREFIX')
);
// set the global version in case

View File

@ -2274,11 +2274,11 @@ class Interpretation extends Fields
{
$xml .= PHP_EOL . Indent::_(3)
. 'addruleprefix="' . CFactory::_('Config')->namespace_prefix
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\\'. $target_area . '\Rule"';
$xml .= PHP_EOL . Indent::_(3)
. 'addfieldprefix="' . CFactory::_('Config')->namespace_prefix
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\\'. $target_area . '\Field">';
}
@ -2331,11 +2331,11 @@ class Interpretation extends Fields
{
$xml .= PHP_EOL . Indent::_(3)
. 'addruleprefix="' . CFactory::_('Config')->namespace_prefix
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\\'. $target_area . '\Rule"';
$xml .= PHP_EOL . Indent::_(3)
. 'addfieldprefix="' . CFactory::_('Config')->namespace_prefix
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\\'. $target_area . '\Field">';
}
$xml .= implode(Indent::_(3), $params);
@ -8918,7 +8918,7 @@ class Interpretation extends Fields
// set the table
$array['table'] = '{"special": {"dbtable": "#__' . $component . '_'
. $view . '","key": "id","type": "' . $View . 'Table","prefix": "' . CFactory::_('Config')->namespace_prefix
. '\\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\\Administrator\\Table"}}';
// set rules field
@ -23182,11 +23182,11 @@ class Interpretation extends Fields
{
$xml .= PHP_EOL . Indent::_(3)
. 'addruleprefix="' . CFactory::_('Config')->namespace_prefix
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\Administrator\Rule"';
$xml .= PHP_EOL . Indent::_(3)
. 'addfieldprefix="' . CFactory::_('Config')->namespace_prefix
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\Administrator\Field">';
}
$xml .= PHP_EOL . Indent::_(1) . '>';
@ -23585,11 +23585,11 @@ class Interpretation extends Fields
{
$xml .= PHP_EOL . Indent::_(3)
. 'addruleprefix="' . CFactory::_('Config')->namespace_prefix
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\Administrator\Rule"';
$xml .= PHP_EOL . Indent::_(3)
. 'addfieldprefix="' . CFactory::_('Config')->namespace_prefix
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNameSpace')
. '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace')
. '\Administrator\Field">';
}
$xml .= PHP_EOL . Indent::_(1) . '>';

View File

@ -26,13 +26,20 @@ use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface;
class Event implements EventInterface
{
/**
* event plugin trigger switch
* event plug-in trigger switch
*
* @var boolean
* @since 3.2.0
*/
protected $activePlugins = false;
/**
* The application to trigger and event TODO
*
* @since 3.2.0
*/
protected $dispatcher;
/**
* Constructor
*
@ -60,6 +67,8 @@ class Event implements EventInterface
}
}
}
$this->dispatcher = Factory::getApplication();
}
/**
@ -77,22 +86,14 @@ class Event implements EventInterface
// only execute if plugins were loaded (active)
if ($this->activePlugins)
{
// Get the dispatcher.
$dispatcher = \JEventDispatcher::getInstance();
// Trigger this compiler event.
$results = $dispatcher->trigger($event, $data);
// Check for errors encountered while trigger the event
if (count((array) $results) && in_array(false, $results, true))
try
{
// Get the last error.
$error = $dispatcher->getError();
if (!($error instanceof \Exception))
{
throw new \Exception($error);
}
// Trigger this compiler event.
$results = $this->dispatcher->triggerEvent($event, $data ?? []);
}
catch (\Exception $e)
{
throw new \Exception("Error processing event '$event': " . $e->getMessage());
}
}
}

View File

@ -22,7 +22,6 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\Category;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AccessSwitchList;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Filter;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Tags;
use VDM\Joomla\Utilities\String\NamespaceHelper;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HeaderInterface;
@ -145,7 +144,7 @@ final class Header implements HeaderInterface
* @var string
* @since 3.2.0
*/
protected string $ComponentNameSpace;
protected string $ComponentNamespace;
/**
* Constructor.
@ -181,9 +180,9 @@ final class Header implements HeaderInterface
$this->tags = $tags;
// set some global values
$this->NamespacePrefix = $this->config->get('namespace_prefix');
$this->NamespacePrefix = $this->placeholder->get('NamespacePrefix');
$this->ComponentName = $this->placeholder->get('Component');
$this->ComponentNameSpace = NamespaceHelper::safeSegment($this->ComponentName);
$this->ComponentNamespace = $this->placeholder->get('ComponentNamespace');
}
/**
@ -209,7 +208,7 @@ final class Header implements HeaderInterface
$target = 'Site';
}
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\{$target}\\Helper\\{$this->ComponentName}Helper;";
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\{$target}\\Helper\\{$this->ComponentName}Helper;";
// we will add more as needed
switch ($context)
@ -218,7 +217,7 @@ final class Header implements HeaderInterface
case 'site.views.model':
case 'site.view.html':
case 'site.views.html':
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\Site\\Helper\\RouteHelper;";
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\Site\\Helper\\RouteHelper;";
break;
default:
@ -387,7 +386,7 @@ final class Header implements HeaderInterface
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\Site\\Helper\\HeaderCheck;";
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\Site\\Helper\\HeaderCheck;";
break;
case 'custom.admin.view.html':
@ -404,7 +403,7 @@ final class Header implements HeaderInterface
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\{$target}\\Helper\\HeaderCheck;";
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\{$target}\\Helper\\HeaderCheck;";
break;
case 'admin.view.model':

View File

@ -12,6 +12,7 @@
namespace VDM\Joomla\Componentbuilder\Compiler\JoomlaFour;
use Joomla\CMS\Factory;
use Joomla\Registry\Registry;
use Joomla\CMS\Plugin\PluginHelper;
use VDM\Joomla\Utilities\Component\Helper;
@ -26,13 +27,20 @@ use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface;
final class Event implements EventInterface
{
/**
* event plugin trigger switch
* event plug-in trigger switch
*
* @var boolean
* @since 3.2.0
*/
protected $activePlugins = false;
/**
* The application to trigger and event TODO
*
* @since 3.2.0
*/
protected $dispatcher;
/**
* Constructor
*
@ -60,6 +68,8 @@ final class Event implements EventInterface
}
}
}
$this->dispatcher = Factory::getApplication();
}
/**
@ -77,22 +87,14 @@ final class Event implements EventInterface
// only execute if plugins were loaded (active)
if ($this->activePlugins)
{
// Get the dispatcher.
$dispatcher = \JEventDispatcher::getInstance();
// Trigger this compiler event.
$results = $dispatcher->trigger($event, $data);
// Check for errors encountered while trigger the event
if (count((array) $results) && in_array(false, $results, true))
try
{
// Get the last error.
$error = $dispatcher->getError();
if (!($error instanceof \Exception))
{
throw new \Exception($error);
}
// Trigger this compiler event.
$results = $this->dispatcher->triggerEvent($event, $data ?? []);
}
catch (\Exception $e)
{
throw new \Exception("Error processing event '$event': " . $e->getMessage());
}
}
}

View File

@ -22,7 +22,6 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\Category;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AccessSwitchList;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Filter;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Tags;
use VDM\Joomla\Utilities\String\NamespaceHelper;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HeaderInterface;
@ -145,7 +144,7 @@ final class Header implements HeaderInterface
* @var string
* @since 3.2.0
*/
protected string $ComponentNameSpace;
protected string $ComponentNamespace;
/**
* Constructor.
@ -181,9 +180,9 @@ final class Header implements HeaderInterface
$this->tags = $tags;
// set some global values
$this->NamespacePrefix = $this->config->get('namespace_prefix');
$this->NamespacePrefix = $this->placeholder->get('NamespacePrefix');
$this->ComponentName = $this->placeholder->get('Component');
$this->ComponentNameSpace = NamespaceHelper::safeSegment($this->ComponentName);
$this->ComponentNamespace = $this->placeholder->get('ComponentNamespace');
}
/**
@ -209,7 +208,7 @@ final class Header implements HeaderInterface
$target = 'Site';
}
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\{$target}\\Helper\\{$this->ComponentName}Helper;";
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\{$target}\\Helper\\{$this->ComponentName}Helper;";
// we will add more as needed
switch ($context)
@ -218,7 +217,7 @@ final class Header implements HeaderInterface
case 'site.views.model':
case 'site.view.html':
case 'site.views.html':
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\Site\\Helper\\RouteHelper;";
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\Site\\Helper\\RouteHelper;";
break;
default:
@ -387,7 +386,7 @@ final class Header implements HeaderInterface
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\Site\\Helper\\HeaderCheck;";
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\Site\\Helper\\HeaderCheck;";
break;
case 'custom.admin.view.html':
@ -404,7 +403,7 @@ final class Header implements HeaderInterface
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\{$target}\\Helper\\HeaderCheck;";
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\{$target}\\Helper\\HeaderCheck;";
break;
case 'admin.view.model':