Update 2024-07-27 22:00:10

This commit is contained in:
Robot 2024-07-27 22:00:59 +02:00
parent b156152e5e
commit 8559278b19
Signed by: Robot
GPG Key ID: 14DECD44E7E1BB95
40 changed files with 2849 additions and 209 deletions

View File

@ -495,6 +495,7 @@ This repository contains an index (see below) of all the approved powers within
- **final class AllowAdd** | [Details](src/005fce79-1b62-4a93-8d5e-8c89fee1afc6) | [Code](src/005fce79-1b62-4a93-8d5e-8c89fee1afc6/code.php) | [Settings](src/005fce79-1b62-4a93-8d5e-8c89fee1afc6/settings.json) | SPK: `Super---005fce79_1b62_4a93_8d5e_8c89fee1afc6---Power` - **final class AllowAdd** | [Details](src/005fce79-1b62-4a93-8d5e-8c89fee1afc6) | [Code](src/005fce79-1b62-4a93-8d5e-8c89fee1afc6/code.php) | [Settings](src/005fce79-1b62-4a93-8d5e-8c89fee1afc6/settings.json) | SPK: `Super---005fce79_1b62_4a93_8d5e_8c89fee1afc6---Power`
- **final class AllowEdit** | [Details](src/e85175fd-e297-46df-a497-27f7a37190fd) | [Code](src/e85175fd-e297-46df-a497-27f7a37190fd/code.php) | [Settings](src/e85175fd-e297-46df-a497-27f7a37190fd/settings.json) | SPK: `Super---e85175fd_e297_46df_a497_27f7a37190fd---Power` - **final class AllowEdit** | [Details](src/e85175fd-e297-46df-a497-27f7a37190fd) | [Code](src/e85175fd-e297-46df-a497-27f7a37190fd/code.php) | [Settings](src/e85175fd-e297-46df-a497-27f7a37190fd/settings.json) | SPK: `Super---e85175fd_e297_46df_a497_27f7a37190fd---Power`
- **final class AllowEditViews** | [Details](src/7ecd7318-8bea-4321-8f13-626da1ab01c7) | [Code](src/7ecd7318-8bea-4321-8f13-626da1ab01c7/code.php) | [Settings](src/7ecd7318-8bea-4321-8f13-626da1ab01c7/settings.json) | SPK: `Super---7ecd7318_8bea_4321_8f13_626da1ab01c7---Power`
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Model](#vdm-joomla-componentbuilder-compiler-architecture-joomlafive-model) - **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Model](#vdm-joomla-componentbuilder-compiler-architecture-joomlafive-model)
- **final class CanDelete** | [Details](src/34df20ec-67db-4e7e-be61-fb94d360c408) | [Code](src/34df20ec-67db-4e7e-be61-fb94d360c408/code.php) | [Settings](src/34df20ec-67db-4e7e-be61-fb94d360c408/settings.json) | SPK: `Super---34df20ec_67db_4e7e_be61_fb94d360c408---Power` - **final class CanDelete** | [Details](src/34df20ec-67db-4e7e-be61-fb94d360c408) | [Code](src/34df20ec-67db-4e7e-be61-fb94d360c408/code.php) | [Settings](src/34df20ec-67db-4e7e-be61-fb94d360c408/settings.json) | SPK: `Super---34df20ec_67db_4e7e_be61_fb94d360c408---Power`
@ -503,6 +504,7 @@ This repository contains an index (see below) of all the approved powers within
- **final class AllowAdd** | [Details](src/425b1107-933d-4436-87ac-63540ec101c5) | [Code](src/425b1107-933d-4436-87ac-63540ec101c5/code.php) | [Settings](src/425b1107-933d-4436-87ac-63540ec101c5/settings.json) | SPK: `Super---425b1107_933d_4436_87ac_63540ec101c5---Power` - **final class AllowAdd** | [Details](src/425b1107-933d-4436-87ac-63540ec101c5) | [Code](src/425b1107-933d-4436-87ac-63540ec101c5/code.php) | [Settings](src/425b1107-933d-4436-87ac-63540ec101c5/settings.json) | SPK: `Super---425b1107_933d_4436_87ac_63540ec101c5---Power`
- **final class AllowEdit** | [Details](src/ddf31f4b-96ba-46e7-8100-f48e1cefe533) | [Code](src/ddf31f4b-96ba-46e7-8100-f48e1cefe533/code.php) | [Settings](src/ddf31f4b-96ba-46e7-8100-f48e1cefe533/settings.json) | SPK: `Super---ddf31f4b_96ba_46e7_8100_f48e1cefe533---Power` - **final class AllowEdit** | [Details](src/ddf31f4b-96ba-46e7-8100-f48e1cefe533) | [Code](src/ddf31f4b-96ba-46e7-8100-f48e1cefe533/code.php) | [Settings](src/ddf31f4b-96ba-46e7-8100-f48e1cefe533/settings.json) | SPK: `Super---ddf31f4b_96ba_46e7_8100_f48e1cefe533---Power`
- **final class AllowEditViews** | [Details](src/c2453304-c9ac-4d67-a045-fbda68876434) | [Code](src/c2453304-c9ac-4d67-a045-fbda68876434/code.php) | [Settings](src/c2453304-c9ac-4d67-a045-fbda68876434/settings.json) | SPK: `Super---c2453304_c9ac_4d67_a045_fbda68876434---Power`
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Model](#vdm-joomla-componentbuilder-compiler-architecture-joomlafour-model) - **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Model](#vdm-joomla-componentbuilder-compiler-architecture-joomlafour-model)
- **final class CanDelete** | [Details](src/2a69a8ab-cea0-4c75-92d5-9495cb740e0f) | [Code](src/2a69a8ab-cea0-4c75-92d5-9495cb740e0f/code.php) | [Settings](src/2a69a8ab-cea0-4c75-92d5-9495cb740e0f/settings.json) | SPK: `Super---2a69a8ab_cea0_4c75_92d5_9495cb740e0f---Power` - **final class CanDelete** | [Details](src/2a69a8ab-cea0-4c75-92d5-9495cb740e0f) | [Code](src/2a69a8ab-cea0-4c75-92d5-9495cb740e0f/code.php) | [Settings](src/2a69a8ab-cea0-4c75-92d5-9495cb740e0f/settings.json) | SPK: `Super---2a69a8ab_cea0_4c75_92d5_9495cb740e0f---Power`
@ -511,6 +513,7 @@ This repository contains an index (see below) of all the approved powers within
- **final class AllowAdd** | [Details](src/f21388dc-5ddc-4970-a3c2-55f075024762) | [Code](src/f21388dc-5ddc-4970-a3c2-55f075024762/code.php) | [Settings](src/f21388dc-5ddc-4970-a3c2-55f075024762/settings.json) | SPK: `Super---f21388dc_5ddc_4970_a3c2_55f075024762---Power` - **final class AllowAdd** | [Details](src/f21388dc-5ddc-4970-a3c2-55f075024762) | [Code](src/f21388dc-5ddc-4970-a3c2-55f075024762/code.php) | [Settings](src/f21388dc-5ddc-4970-a3c2-55f075024762/settings.json) | SPK: `Super---f21388dc_5ddc_4970_a3c2_55f075024762---Power`
- **final class AllowEdit** | [Details](src/8faaed82-522d-4f78-bd43-0ab3f7c72e5f) | [Code](src/8faaed82-522d-4f78-bd43-0ab3f7c72e5f/code.php) | [Settings](src/8faaed82-522d-4f78-bd43-0ab3f7c72e5f/settings.json) | SPK: `Super---8faaed82_522d_4f78_bd43_0ab3f7c72e5f---Power` - **final class AllowEdit** | [Details](src/8faaed82-522d-4f78-bd43-0ab3f7c72e5f) | [Code](src/8faaed82-522d-4f78-bd43-0ab3f7c72e5f/code.php) | [Settings](src/8faaed82-522d-4f78-bd43-0ab3f7c72e5f/settings.json) | SPK: `Super---8faaed82_522d_4f78_bd43_0ab3f7c72e5f---Power`
- **final class AllowEditViews** | [Details](src/bdb74844-7cba-4227-a01c-355eba5fd031) | [Code](src/bdb74844-7cba-4227-a01c-355eba5fd031/code.php) | [Settings](src/bdb74844-7cba-4227-a01c-355eba5fd031/settings.json) | SPK: `Super---bdb74844_7cba_4227_a01c_355eba5fd031---Power`
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Model](#vdm-joomla-componentbuilder-compiler-architecture-joomlathree-model) - **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Model](#vdm-joomla-componentbuilder-compiler-architecture-joomlathree-model)
- **final class CanDelete** | [Details](src/23766738-d0a4-4d0a-8555-7e4c97c0cddd) | [Code](src/23766738-d0a4-4d0a-8555-7e4c97c0cddd/code.php) | [Settings](src/23766738-d0a4-4d0a-8555-7e4c97c0cddd/settings.json) | SPK: `Super---23766738_d0a4_4d0a_8555_7e4c97c0cddd---Power` - **final class CanDelete** | [Details](src/23766738-d0a4-4d0a-8555-7e4c97c0cddd) | [Code](src/23766738-d0a4-4d0a-8555-7e4c97c0cddd/code.php) | [Settings](src/23766738-d0a4-4d0a-8555-7e4c97c0cddd/settings.json) | SPK: `Super---23766738_d0a4_4d0a_8555_7e4c97c0cddd---Power`
@ -519,6 +522,7 @@ This repository contains an index (see below) of all the approved powers within
- **interface AllowAddInterface** | [Details](src/c9700450-4f44-4455-bc86-6a7660daadee) | [Code](src/c9700450-4f44-4455-bc86-6a7660daadee/code.php) | [Settings](src/c9700450-4f44-4455-bc86-6a7660daadee/settings.json) | SPK: `Super---c9700450_4f44_4455_bc86_6a7660daadee---Power` - **interface AllowAddInterface** | [Details](src/c9700450-4f44-4455-bc86-6a7660daadee) | [Code](src/c9700450-4f44-4455-bc86-6a7660daadee/code.php) | [Settings](src/c9700450-4f44-4455-bc86-6a7660daadee/settings.json) | SPK: `Super---c9700450_4f44_4455_bc86_6a7660daadee---Power`
- **interface AllowEditInterface** | [Details](src/992a842f-1ba9-4a5c-b214-042459ffe038) | [Code](src/992a842f-1ba9-4a5c-b214-042459ffe038/code.php) | [Settings](src/992a842f-1ba9-4a5c-b214-042459ffe038/settings.json) | SPK: `Super---992a842f_1ba9_4a5c_b214_042459ffe038---Power` - **interface AllowEditInterface** | [Details](src/992a842f-1ba9-4a5c-b214-042459ffe038) | [Code](src/992a842f-1ba9-4a5c-b214-042459ffe038/code.php) | [Settings](src/992a842f-1ba9-4a5c-b214-042459ffe038/settings.json) | SPK: `Super---992a842f_1ba9_4a5c_b214_042459ffe038---Power`
- **interface AllowEditViewsInterface** | [Details](src/025d5903-cfdf-4624-aebb-10d02075e265) | [Code](src/025d5903-cfdf-4624-aebb-10d02075e265/code.php) | [Settings](src/025d5903-cfdf-4624-aebb-10d02075e265/settings.json) | SPK: `Super---025d5903_cfdf_4624_aebb_10d02075e265---Power`
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model](#vdm-joomla-componentbuilder-compiler-interfaces-architecture-model) - **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model](#vdm-joomla-componentbuilder-compiler-interfaces-architecture-model)
- **interface CanDeleteInterface** | [Details](src/e00a7d1d-6d80-41c5-bf13-32d41bc5bf91) | [Code](src/e00a7d1d-6d80-41c5-bf13-32d41bc5bf91/code.php) | [Settings](src/e00a7d1d-6d80-41c5-bf13-32d41bc5bf91/settings.json) | SPK: `Super---e00a7d1d_6d80_41c5_bf13_32d41bc5bf91---Power` - **interface CanDeleteInterface** | [Details](src/e00a7d1d-6d80-41c5-bf13-32d41bc5bf91) | [Code](src/e00a7d1d-6d80-41c5-bf13-32d41bc5bf91/code.php) | [Settings](src/e00a7d1d-6d80-41c5-bf13-32d41bc5bf91/settings.json) | SPK: `Super---e00a7d1d_6d80_41c5_bf13_32d41bc5bf91---Power`

View File

@ -0,0 +1,60 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# interface AllowEditViewsInterface (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Controller**
```uml
@startuml
interface AllowEditViewsInterface #Lavender {
+ getArray(array $views) : string
+ getFunctions(array $views) : string
}
note right of AllowEditViewsInterface::getArray
Get Array Code
since: 5.0.2
return: string
end note
note right of AllowEditViewsInterface::getFunctions
Get Custom Function Code
since: 5.0.2
return: string
end note
@enduml
```
The Power feature in JCB allows you to write PHP classes and their implementations, making it easy to include them in your Joomla project. JCB handles linking, autoloading, namespacing, and folder structure creation for you.
By using the SPK (Super Power Key) in your custom code (replacing the class name in your code with the SPK), JCB will automatically pull the power from the repository into your project. This makes it available in your JCB instance, allowing you to edit it and include the class in your generated Joomla component.
JCB uses placeholders like [[[`NamespacePrefix`]]] and [[[`ComponentNamespace`]]] in namespacing to prevent collisions and improve reusability across different JCB systems. You can also set the **JCB powers path** globally or per component under the **Dynamic Integration** tab, providing flexibility and easy maintainability.
To add this specific Power to your project in JCB:
> simply use this SPK
```
Super---025d5903_cfdf_4624_aebb_10d02075e265---Power
```
> remember to replace the `---` with `___` to activate this Power in your code
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,42 @@
<?php
/**
* @package Joomla.Component.Builder
*
* @created 4th September, 2022
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Controller;
/**
* Controller Allow Edit Views Interface
*
* @since 5.0.2
*/
interface AllowEditViewsInterface
{
/**
* Get Array Code
*
* @param array $views
*
* @since 5.0.2
* @return string The array of Code (string)
*/
public function getArray(array $views): string;
/**
* Get Custom Function Code
*
* @param array $views
*
* @since 5.0.2
* @return string The functions of Code (string)
*/
public function getFunctions(array $views): string;
}

View File

@ -0,0 +1,19 @@
/**
* Get Array Code
*
* @param array $views
*
* @since 5.0.2
* @return string The array of Code (string)
*/
public function getArray(array $views): string;
/**
* Get Custom Function Code
*
* @param array $views
*
* @since 5.0.2
* @return string The functions of Code (string)
*/
public function getFunctions(array $views): string;

View File

@ -0,0 +1,19 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "",
"guid": "025d5903-cfdf-4624-aebb-10d02075e265",
"implements": null,
"load_selection": null,
"name": "AllowEditViewsInterface",
"power_version": "1.0.0",
"system_name": "JCB.Interfaces.Architecture.Controller.AllowEditVi",
"type": "interface",
"use_selection": null,
"extendsinterfaces": null,
"namespace": "[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Compiler.Interfaces.Architecture.Controller.AllowEditViewsInterface",
"description": "Controller Allow Edit Views Interface\r\n\r\n@since 5.0.2",
"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",
"head": "",
"composer": ""
}

View File

@ -367,6 +367,7 @@ final class Header implements HeaderInterface
$headers[] = 'use Joomla\CMS\Form\FormHelper;'; $headers[] = 'use Joomla\CMS\Form\FormHelper;';
$headers[] = 'use Joomla\CMS\Session\Session;'; $headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;'; $headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;'; $headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;'; $headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;'; $headers[] = 'use Joomla\CMS\Layout\FileLayout;';
@ -402,6 +403,7 @@ final class Header implements HeaderInterface
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;'; $headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;'; $headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;'; $headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\CMS\Document\Document;'; $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; break;

View File

@ -331,6 +331,7 @@
$headers[] = 'use Joomla\CMS\Form\FormHelper;'; $headers[] = 'use Joomla\CMS\Form\FormHelper;';
$headers[] = 'use Joomla\CMS\Session\Session;'; $headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;'; $headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;'; $headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;'; $headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;'; $headers[] = 'use Joomla\CMS\Layout\FileLayout;';
@ -366,6 +367,7 @@
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;'; $headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;'; $headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;'; $headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\CMS\Document\Document;'; $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; break;

View File

@ -52,11 +52,11 @@
"use": "8ca30d59-e56a-4cdd-bd8c-d9aad28f5903", "use": "8ca30d59-e56a-4cdd-bd8c-d9aad28f5903",
"as": "default" "as": "default"
}, },
"use_selection11": { "use_selection10": {
"use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a", "use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a",
"as": "default" "as": "default"
}, },
"use_selection12": { "use_selection11": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef", "use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default" "as": "default"
} }

View File

@ -22,6 +22,10 @@ class ArchitectureController #Gold {
+ getJ5ControllerAllowEdit(Container $container) : J5ControllerAllowEdit + getJ5ControllerAllowEdit(Container $container) : J5ControllerAllowEdit
+ getJ4ControllerAllowEdit(Container $container) : J4ControllerAllowEdit + getJ4ControllerAllowEdit(Container $container) : J4ControllerAllowEdit
+ getJ3ControllerAllowEdit(Container $container) : J3ControllerAllowEdit + getJ3ControllerAllowEdit(Container $container) : J3ControllerAllowEdit
+ getAllowEditViews(Container $container) : AllowEditViewsInterface
+ getJ5ControllerAllowEditViews(Container $container) : J5ControllerAllowEditViews
+ getJ4ControllerAllowEditViews(Container $container) : J4ControllerAllowEditViews
+ getJ3ControllerAllowEditViews(Container $container) : J3ControllerAllowEditViews
} }
note right of ArchitectureController::register note right of ArchitectureController::register
@ -87,6 +91,34 @@ note right of ArchitectureController::getJ3ControllerAllowEdit
return: J3ControllerAllowEdit return: J3ControllerAllowEdit
end note end note
note left of ArchitectureController::getAllowEditViews
Get The AllowEditViewsInterface Class.
since: 5.0.2
return: AllowEditViewsInterface
end note
note right of ArchitectureController::getJ5ControllerAllowEditViews
Get The AllowEditViews Class.
since: 5.0.2
return: J5ControllerAllowEditViews
end note
note left of ArchitectureController::getJ4ControllerAllowEditViews
Get The AllowEditViews Class.
since: 5.0.2
return: J4ControllerAllowEditViews
end note
note right of ArchitectureController::getJ3ControllerAllowEditViews
Get The AllowEditViews Class.
since: 5.0.2
return: J3ControllerAllowEditViews
end note
@enduml @enduml
``` ```

View File

@ -22,6 +22,10 @@ use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Controller\Allo
use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Controller\AllowEdit as J5ControllerAllowEdit; use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Controller\AllowEdit as J5ControllerAllowEdit;
use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Controller\AllowEdit as J4ControllerAllowEdit; use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Controller\AllowEdit as J4ControllerAllowEdit;
use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Controller\AllowEdit as J3ControllerAllowEdit; use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Controller\AllowEdit as J3ControllerAllowEdit;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Controller\AllowEditViewsInterface;
use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Controller\AllowEditViews as J5ControllerAllowEditViews;
use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Controller\AllowEditViews as J4ControllerAllowEditViews;
use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Controller\AllowEditViews as J3ControllerAllowEditViews;
/** /**
@ -72,6 +76,18 @@ class ArchitectureController implements ServiceProviderInterface
$container->alias(J3ControllerAllowEdit::class, 'Architecture.Controller.J3.AllowEdit') $container->alias(J3ControllerAllowEdit::class, 'Architecture.Controller.J3.AllowEdit')
->share('Architecture.Controller.J3.AllowEdit', [$this, 'getJ3ControllerAllowEdit'], true); ->share('Architecture.Controller.J3.AllowEdit', [$this, 'getJ3ControllerAllowEdit'], true);
$container->alias(AllowEditViewsInterface::class, 'Architecture.Controller.AllowEditViews')
->share('Architecture.Controller.AllowEditViews', [$this, 'getAllowEditViews'], true);
$container->alias(J5ControllerAllowEditViews::class, 'Architecture.Controller.J5.AllowEditViews')
->share('Architecture.Controller.J5.AllowEditViews', [$this, 'getJ5ControllerAllowEditViews'], true);
$container->alias(J4ControllerAllowEditViews::class, 'Architecture.Controller.J4.AllowEditViews')
->share('Architecture.Controller.J4.AllowEditViews', [$this, 'getJ4ControllerAllowEditViews'], true);
$container->alias(J3ControllerAllowEditViews::class, 'Architecture.Controller.J3.AllowEditViews')
->share('Architecture.Controller.J3.AllowEditViews', [$this, 'getJ3ControllerAllowEditViews'], true);
} }
/** /**
@ -217,5 +233,77 @@ class ArchitectureController implements ServiceProviderInterface
$container->get('Compiler.Builder.Category.Other.Name') $container->get('Compiler.Builder.Category.Other.Name')
); );
} }
/**
* Get The AllowEditViewsInterface Class.
*
* @param Container $container The DI container.
*
* @return AllowEditViewsInterface
* @since 5.0.2
*/
public function getAllowEditViews(Container $container): AllowEditViewsInterface
{
if (empty($this->targetVersion))
{
$this->targetVersion = $container->get('Config')->joomla_version;
}
return $container->get('Architecture.Controller.J' . $this->targetVersion . '.AllowEditViews');
}
/**
* Get The AllowEditViews Class.
*
* @param Container $container The DI container.
*
* @return J5ControllerAllowEdit
* @since 5.0.2
*/
public function getJ5ControllerAllowEditViews(Container $container): J5ControllerAllowEditViews
{
return new J5ControllerAllowEditViews(
$container->get('Compiler.Creator.Permission'),
$container->get('Customcode.Dispenser'),
$container->get('Compiler.Builder.Category'),
$container->get('Compiler.Builder.Category.Other.Name')
);
}
/**
* Get The AllowEditViews Class.
*
* @param Container $container The DI container.
*
* @return J4ControllerAllowEditViews
* @since 5.0.2
*/
public function getJ4ControllerAllowEditViews(Container $container): J4ControllerAllowEditViews
{
return new J4ControllerAllowEditViews(
$container->get('Compiler.Creator.Permission'),
$container->get('Customcode.Dispenser'),
$container->get('Compiler.Builder.Category'),
$container->get('Compiler.Builder.Category.Other.Name')
);
}
/**
* Get The AllowEditViews Class.
*
* @param Container $container The DI container.
*
* @return J3ControllerAllowEditViews
* @since 5.0.2
*/
public function getJ3ControllerAllowEditViews(Container $container): J3ControllerAllowEditViews
{
return new J3ControllerAllowEditViews(
$container->get('Compiler.Creator.Permission'),
$container->get('Customcode.Dispenser'),
$container->get('Compiler.Builder.Category'),
$container->get('Compiler.Builder.Category.Other.Name')
);
}
} }

View File

@ -39,6 +39,18 @@
$container->alias(J3ControllerAllowEdit::class, 'Architecture.Controller.J3.AllowEdit') $container->alias(J3ControllerAllowEdit::class, 'Architecture.Controller.J3.AllowEdit')
->share('Architecture.Controller.J3.AllowEdit', [$this, 'getJ3ControllerAllowEdit'], true); ->share('Architecture.Controller.J3.AllowEdit', [$this, 'getJ3ControllerAllowEdit'], true);
$container->alias(AllowEditViewsInterface::class, 'Architecture.Controller.AllowEditViews')
->share('Architecture.Controller.AllowEditViews', [$this, 'getAllowEditViews'], true);
$container->alias(J5ControllerAllowEditViews::class, 'Architecture.Controller.J5.AllowEditViews')
->share('Architecture.Controller.J5.AllowEditViews', [$this, 'getJ5ControllerAllowEditViews'], true);
$container->alias(J4ControllerAllowEditViews::class, 'Architecture.Controller.J4.AllowEditViews')
->share('Architecture.Controller.J4.AllowEditViews', [$this, 'getJ4ControllerAllowEditViews'], true);
$container->alias(J3ControllerAllowEditViews::class, 'Architecture.Controller.J3.AllowEditViews')
->share('Architecture.Controller.J3.AllowEditViews', [$this, 'getJ3ControllerAllowEditViews'], true);
} }
/** /**
@ -184,3 +196,75 @@
$container->get('Compiler.Builder.Category.Other.Name') $container->get('Compiler.Builder.Category.Other.Name')
); );
} }
/**
* Get The AllowEditViewsInterface Class.
*
* @param Container $container The DI container.
*
* @return AllowEditViewsInterface
* @since 5.0.2
*/
public function getAllowEditViews(Container $container): AllowEditViewsInterface
{
if (empty($this->targetVersion))
{
$this->targetVersion = $container->get('Config')->joomla_version;
}
return $container->get('Architecture.Controller.J' . $this->targetVersion . '.AllowEditViews');
}
/**
* Get The AllowEditViews Class.
*
* @param Container $container The DI container.
*
* @return J5ControllerAllowEdit
* @since 5.0.2
*/
public function getJ5ControllerAllowEditViews(Container $container): J5ControllerAllowEditViews
{
return new J5ControllerAllowEditViews(
$container->get('Compiler.Creator.Permission'),
$container->get('Customcode.Dispenser'),
$container->get('Compiler.Builder.Category'),
$container->get('Compiler.Builder.Category.Other.Name')
);
}
/**
* Get The AllowEditViews Class.
*
* @param Container $container The DI container.
*
* @return J4ControllerAllowEditViews
* @since 5.0.2
*/
public function getJ4ControllerAllowEditViews(Container $container): J4ControllerAllowEditViews
{
return new J4ControllerAllowEditViews(
$container->get('Compiler.Creator.Permission'),
$container->get('Customcode.Dispenser'),
$container->get('Compiler.Builder.Category'),
$container->get('Compiler.Builder.Category.Other.Name')
);
}
/**
* Get The AllowEditViews Class.
*
* @param Container $container The DI container.
*
* @return J3ControllerAllowEditViews
* @since 5.0.2
*/
public function getJ3ControllerAllowEditViews(Container $container): J3ControllerAllowEditViews
{
return new J3ControllerAllowEditViews(
$container->get('Compiler.Creator.Permission'),
$container->get('Customcode.Dispenser'),
$container->get('Compiler.Builder.Category'),
$container->get('Compiler.Builder.Category.Other.Name')
);
}

View File

@ -16,33 +16,49 @@
"use": "c9700450-4f44-4455-bc86-6a7660daadee", "use": "c9700450-4f44-4455-bc86-6a7660daadee",
"as": "default" "as": "default"
}, },
"use_selection6": { "use_selection1": {
"use": "005fce79-1b62-4a93-8d5e-8c89fee1afc6", "use": "005fce79-1b62-4a93-8d5e-8c89fee1afc6",
"as": "J5ControllerAllowAdd" "as": "J5ControllerAllowAdd"
}, },
"use_selection1": { "use_selection2": {
"use": "425b1107-933d-4436-87ac-63540ec101c5", "use": "425b1107-933d-4436-87ac-63540ec101c5",
"as": "J4ControllerAllowAdd" "as": "J4ControllerAllowAdd"
}, },
"use_selection2": { "use_selection3": {
"use": "f21388dc-5ddc-4970-a3c2-55f075024762", "use": "f21388dc-5ddc-4970-a3c2-55f075024762",
"as": "J3ControllerAllowAdd" "as": "J3ControllerAllowAdd"
}, },
"use_selection3": { "use_selection4": {
"use": "992a842f-1ba9-4a5c-b214-042459ffe038", "use": "992a842f-1ba9-4a5c-b214-042459ffe038",
"as": "default" "as": "default"
}, },
"use_selection7": { "use_selection5": {
"use": "e85175fd-e297-46df-a497-27f7a37190fd", "use": "e85175fd-e297-46df-a497-27f7a37190fd",
"as": "J5ControllerAllowEdit" "as": "J5ControllerAllowEdit"
}, },
"use_selection4": { "use_selection6": {
"use": "ddf31f4b-96ba-46e7-8100-f48e1cefe533", "use": "ddf31f4b-96ba-46e7-8100-f48e1cefe533",
"as": "J4ControllerAllowEdit" "as": "J4ControllerAllowEdit"
}, },
"use_selection5": { "use_selection7": {
"use": "8faaed82-522d-4f78-bd43-0ab3f7c72e5f", "use": "8faaed82-522d-4f78-bd43-0ab3f7c72e5f",
"as": "J3ControllerAllowEdit" "as": "J3ControllerAllowEdit"
},
"use_selection8": {
"use": "025d5903-cfdf-4624-aebb-10d02075e265",
"as": "default"
},
"use_selection9": {
"use": "7ecd7318-8bea-4321-8f13-626da1ab01c7",
"as": "J5ControllerAllowEditViews"
},
"use_selection10": {
"use": "c2453304-c9ac-4d67-a045-fbda68876434",
"as": "J4ControllerAllowEditViews"
},
"use_selection11": {
"use": "bdb74844-7cba-4227-a01c-355eba5fd031",
"as": "J3ControllerAllowEditViews"
} }
}, },
"extendsinterfaces": null, "extendsinterfaces": null,

View File

@ -15,14 +15,19 @@ class Autoloader #Gold {
# Power $power # Power $power
# Config $config # Config $config
# Content $content # Content $content
# string $installerhelper
# string $helper # string $helper
+ __construct(Power $power, Config $config, ...) + __construct(Power $power, Config $config, ...)
+ setFiles() : void + setFiles() : void
+ set() : void + set() : void
- getHelperAutoloader() : string - getAutoloaderCode() : string
- getAutoloaderFile(int $tabSpace, string $area = 'JPATH_ADMINISTRATOR') : ?string - getAutoloaderFile(int $tabSpace, string $area = 'JPATH_ADMINISTRATOR') : ?string
- getAutoloader(int $tabSpace) : ?string - getAutoloader() : ?string
- getComposer(int $tabSpace) : ?string - getComposer() : ?string
- getAutoloaderInstallArray() : string
- getAutoloaderInstallerCode() : string
- getInstallerAutoloader() : ?string
- getInstallerComposer() : ?string
} }
note right of Autoloader::__construct note right of Autoloader::__construct
@ -36,7 +41,7 @@ note right of Autoloader::__construct
Content $content Content $content
end note end note
note right of Autoloader::setFiles note left of Autoloader::setFiles
Set the autoloader into the active content array Set the autoloader into the active content array
since: 3.2.0 since: 3.2.0
@ -50,8 +55,8 @@ note right of Autoloader::set
return: void return: void
end note end note
note right of Autoloader::getHelperAutoloader note left of Autoloader::getAutoloaderCode
Get helper autoloader code Get autoloader code
since: 3.2.0 since: 3.2.0
return: string return: string
@ -64,7 +69,7 @@ note right of Autoloader::getAutoloaderFile
return: ?string return: ?string
end note end note
note right of Autoloader::getAutoloader note left of Autoloader::getAutoloader
Get autoloader code Get autoloader code
since: 3.2.0 since: 3.2.0
@ -78,6 +83,34 @@ note right of Autoloader::getComposer
return: ?string return: ?string
end note end note
note left of Autoloader::getAutoloaderInstallArray
Get autoloaders for install file
since: 5.0.2
return: string
end note
note right of Autoloader::getAutoloaderInstallerCode
Get installer autoloader code
since: 5.0.2
return: string
end note
note left of Autoloader::getInstallerAutoloader
Get autoloader code
since: 3.2.0
return: ?string
end note
note right of Autoloader::getInstallerComposer
Get the composer autoloader routine (NOT READY)
since: 3.2.0
return: ?string
end note
@enduml @enduml
``` ```

View File

@ -51,6 +51,14 @@ class Autoloader
*/ */
protected Content $content; protected Content $content;
/**
* Installer Class Autoloader
*
* @var string
* @since 5.0.2
**/
protected string $installerhelper = '';
/** /**
* Helper Class Autoloader * Helper Class Autoloader
* *
@ -77,6 +85,7 @@ class Autoloader
// reset all autoloaders power placeholders // reset all autoloaders power placeholders
$this->content->set('ADMIN_POWER_HELPER', ''); $this->content->set('ADMIN_POWER_HELPER', '');
$this->content->set('SITE_POWER_HELPER', ''); $this->content->set('SITE_POWER_HELPER', '');
$this->content->set('INSTALLER_POWER_HELPER', '');
$this->content->set('PLUGIN_POWER_AUTOLOADER', ''); $this->content->set('PLUGIN_POWER_AUTOLOADER', '');
$this->content->set('SITE_PLUGIN_POWER_AUTOLOADER', ''); $this->content->set('SITE_PLUGIN_POWER_AUTOLOADER', '');
$this->content->set('POWER_AUTOLOADER', ''); $this->content->set('POWER_AUTOLOADER', '');
@ -89,6 +98,7 @@ class Autoloader
$this->content->set('SITE_TWO_POWER_AUTOLOADER', ''); $this->content->set('SITE_TWO_POWER_AUTOLOADER', '');
$this->content->set('SITE_THREE_POWER_AUTOLOADER', ''); $this->content->set('SITE_THREE_POWER_AUTOLOADER', '');
$this->content->set('SITE_FOUR_POWER_AUTOLOADER', ''); $this->content->set('SITE_FOUR_POWER_AUTOLOADER', '');
$this->content->set('INSTALLER_POWER_AUTOLOADER_ARRAY', '');
} }
/** /**
@ -118,6 +128,9 @@ class Autoloader
// to add to custom files // to add to custom files
$this->content->add('POWER_AUTOLOADER', $this->getAutoloaderFile(0)); $this->content->add('POWER_AUTOLOADER', $this->getAutoloaderFile(0));
$this->content->add('SITE_POWER_AUTOLOADER', $this->getAutoloaderFile(0, 'JPATH_SITE')); $this->content->add('SITE_POWER_AUTOLOADER', $this->getAutoloaderFile(0, 'JPATH_SITE'));
// to add to install file
$this->content->add('INSTALLER_POWER_AUTOLOADER_ARRAY', $this->getAutoloaderInstallArray());
} }
/** /**
@ -147,20 +160,23 @@ class Autoloader
uksort($this->power->namespace, fn($a, $b) => strlen((string) $b) - strlen((string) $a)); uksort($this->power->namespace, fn($a, $b) => strlen((string) $b) - strlen((string) $a));
// load to admin helper class // load to admin helper class
$this->content->add('ADMIN_POWER_HELPER', $this->getHelperAutoloader()); $this->content->add('ADMIN_POWER_HELPER', $this->getAutoloaderCode());
// load to site helper class if needed // load to site helper class if needed
$this->content->add('SITE_POWER_HELPER', $this->getHelperAutoloader()); $this->content->add('SITE_POWER_HELPER', $this->getAutoloaderCode());
// load to installer helper class if needed
$this->content->add('INSTALLER_POWER_HELPER', $this->getAutoloaderInstallerCode());
} }
} }
/** /**
* Get helper autoloader code * Get autoloader code
* *
* @return string * @return string
* @since 3.2.0 * @since 3.2.0
*/ */
private function getHelperAutoloader(): string private function getAutoloaderCode(): string
{ {
// check if it was already build // check if it was already build
if (!empty($this->helper)) if (!empty($this->helper))
@ -172,13 +188,13 @@ class Autoloader
$code = []; $code = [];
// add the composer stuff here // add the composer stuff here
if (($script = $this->getComposer(0)) !== null) if (($script = $this->getComposer()) !== null)
{ {
$code[] = $script; $code[] = $script;
} }
// get the helper autoloader // get the helper autoloader
if (($script = $this->getAutoloader(0)) !== null) if (($script = $this->getAutoloader()) !== null)
{ {
$code[] = $script; $code[] = $script;
} }
@ -203,7 +219,7 @@ class Autoloader
*/ */
private function getAutoloaderFile(int $tabSpace, string $area = 'JPATH_ADMINISTRATOR'): ?string private function getAutoloaderFile(int $tabSpace, string $area = 'JPATH_ADMINISTRATOR'): ?string
{ {
// we start building the autoloaded file loader // we start building the autoloader file loader
$autoload_file = []; $autoload_file = [];
$autoload_file[] = Indent::_($tabSpace) . '//' $autoload_file[] = Indent::_($tabSpace) . '//'
. Line::_(__Line__, __Class__) . " The power autoloader for this project ($area) area."; . Line::_(__Line__, __Class__) . " The power autoloader for this project ($area) area.";
@ -221,23 +237,21 @@ class Autoloader
/** /**
* Get autoloader code * Get autoloader code
* *
* @param int $tabSpace The dynamic tab spacer
*
* @return string|null * @return string|null
* @since 3.2.0 * @since 3.2.0
*/ */
private function getAutoloader(int $tabSpace): ?string private function getAutoloader(): ?string
{ {
if (($size = ArrayHelper::check($this->power->namespace)) > 0) if (($size = ArrayHelper::check($this->power->namespace)) > 0)
{ {
// we start building the spl_autoload_register function call // we start building the spl_autoload_register function call
$autoload_method = []; $autoload_method = [];
$autoload_method[] = Indent::_($tabSpace) . '//' $autoload_method[] = '//'
. Line::_(__Line__, __Class__) . ' register additional namespace'; . Line::_(__Line__, __Class__) . ' register additional namespace';
$autoload_method[] = Indent::_($tabSpace) . 'spl_autoload_register(function ($class) {'; $autoload_method[] = 'spl_autoload_register(function ($class) {';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' project-specific base directories and namespace prefix'; . Line::_(__Line__, __Class__) . ' project-specific base directories and namespace prefix';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$search = ['; $autoload_method[] = Indent::_(1) . '$search = [';
// counter to manage the comma in the actual array // counter to manage the comma in the actual array
$counter = 1; $counter = 1;
@ -246,63 +260,63 @@ class Autoloader
// don't add the ending comma on last value // don't add the ending comma on last value
if ($size == $counter) if ($size == $counter)
{ {
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "'"; $autoload_method[] = Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "'";
} }
else else
{ {
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "',"; $autoload_method[] = Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "',";
} }
$counter++; $counter++;
} }
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '];'; $autoload_method[] = Indent::_(1) . '];';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '// Start the search and load if found'; $autoload_method[] = Indent::_(1) . '// Start the search and load if found';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$found = false;'; $autoload_method[] = Indent::_(1) . '$found = false;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$found_base_dir = "";'; $autoload_method[] = Indent::_(1) . '$found_base_dir = "";';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$found_len = 0;'; $autoload_method[] = Indent::_(1) . '$found_len = 0;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . 'foreach ($search as $base_dir => $prefix)'; $autoload_method[] = Indent::_(1) . 'foreach ($search as $base_dir => $prefix)';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '{'; $autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '//' $autoload_method[] = Indent::_(2) . '//'
. Line::_(__Line__, __Class__) . ' does the class use the namespace prefix?'; . Line::_(__Line__, __Class__) . ' does the class use the namespace prefix?';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '$len = strlen($prefix);'; $autoload_method[] = Indent::_(2) . '$len = strlen($prefix);';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . 'if (strncmp($prefix, $class, $len) === 0)'; $autoload_method[] = Indent::_(2) . 'if (strncmp($prefix, $class, $len) === 0)';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '{'; $autoload_method[] = Indent::_(2) . '{';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '//' $autoload_method[] = Indent::_(3) . '//'
. Line::_(__Line__, __Class__) . ' we have a match so load the values'; . Line::_(__Line__, __Class__) . ' we have a match so load the values';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '$found = true;'; $autoload_method[] = Indent::_(3) . '$found = true;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '$found_base_dir = $base_dir;'; $autoload_method[] = Indent::_(3) . '$found_base_dir = $base_dir;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '$found_len = $len;'; $autoload_method[] = Indent::_(3) . '$found_len = $len;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '//' $autoload_method[] = Indent::_(3) . '//'
. Line::_(__Line__, __Class__) . ' done here'; . Line::_(__Line__, __Class__) . ' done here';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . 'break;'; $autoload_method[] = Indent::_(3) . 'break;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '}'; $autoload_method[] = Indent::_(2) . '}';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '}'; $autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' check if we found a match'; . Line::_(__Line__, __Class__) . ' check if we found a match';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . 'if (!$found)'; $autoload_method[] = Indent::_(1) . 'if (!$found)';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '{'; $autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '//' $autoload_method[] = Indent::_(2) . '//'
. Line::_(__Line__, __Class__) . ' not found so move to the next registered autoloader'; . Line::_(__Line__, __Class__) . ' not found so move to the next registered autoloader';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . 'return;'; $autoload_method[] = Indent::_(2) . 'return;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '}'; $autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' get the relative class name'; . Line::_(__Line__, __Class__) . ' get the relative class name';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$relative_class = substr($class, $found_len);'; $autoload_method[] = Indent::_(1) . '$relative_class = substr($class, $found_len);';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' replace the namespace prefix with the base directory, replace namespace'; . Line::_(__Line__, __Class__) . ' replace the namespace prefix with the base directory, replace namespace';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '// separators with directory separators in the relative class name, append'; $autoload_method[] = Indent::_(1) . '// separators with directory separators in the relative class name, append';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '// with .php'; $autoload_method[] = Indent::_(1) . '// with .php';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . "\$file = JPATH_ROOT . '/' . \$found_base_dir . '/src' . str_replace('\\\\', '/', \$relative_class) . '.php';"; $autoload_method[] = Indent::_(1) . "\$file = JPATH_ROOT . '/' . \$found_base_dir . '/src' . str_replace('\\\\', '/', \$relative_class) . '.php';";
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' if the file exists, require it'; . Line::_(__Line__, __Class__) . ' if the file exists, require it';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . 'if (file_exists($file))'; $autoload_method[] = Indent::_(1) . 'if (file_exists($file))';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '{'; $autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . 'require $file;'; $autoload_method[] = Indent::_(2) . 'require $file;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '}'; $autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_($tabSpace) . '});'; $autoload_method[] = '});';
return implode(PHP_EOL, $autoload_method); return implode(PHP_EOL, $autoload_method);
} }
@ -313,12 +327,10 @@ class Autoloader
/** /**
* Get the composer autoloader routine * Get the composer autoloader routine
* *
* @param int $tabSpace The dynamic tab spacer
*
* @return string|null * @return string|null
* @since 3.2.0 * @since 3.2.0
*/ */
private function getComposer(int $tabSpace): ?string private function getComposer(): ?string
{ {
if (ArrayHelper::check($this->power->composer)) if (ArrayHelper::check($this->power->composer))
{ {
@ -332,11 +344,11 @@ class Autoloader
// don't add the ending comma on last value // don't add the ending comma on last value
if (empty($add_once[$access_point])) if (empty($add_once[$access_point]))
{ {
$composer_routine[] = Indent::_($tabSpace) . "\$composer_autoloader = JPATH_LIBRARIES . '/$access_point';"; $composer_routine[] = "\$composer_autoloader = JPATH_LIBRARIES . '/$access_point';";
$composer_routine[] = Indent::_($tabSpace) . 'if (file_exists($composer_autoloader))'; $composer_routine[] = 'if (file_exists($composer_autoloader))';
$composer_routine[] = Indent::_($tabSpace) . "{"; $composer_routine[] = "{";
$composer_routine[] = Indent::_($tabSpace) . Indent::_(1) . 'require_once $composer_autoloader;'; $composer_routine[] = Indent::_(1) . 'require_once $composer_autoloader;';
$composer_routine[] = Indent::_($tabSpace) . "}"; $composer_routine[] = "}";
$add_once[$access_point] = true; $add_once[$access_point] = true;
} }
@ -345,12 +357,209 @@ class Autoloader
// this is just about the [autoloader or autoloaders] in the comment ;) // this is just about the [autoloader or autoloaders] in the comment ;)
if (count($add_once) == 1) if (count($add_once) == 1)
{ {
array_unshift($composer_routine, Indent::_($tabSpace) . '//' array_unshift($composer_routine, '//'
. Line::_(__Line__, __Class__) . ' add the autoloader for the composer classes'); . Line::_(__Line__, __Class__) . ' add the autoloader for the composer classes');
} }
else else
{ {
array_unshift($composer_routine, Indent::_($tabSpace) . '//' array_unshift($composer_routine, '//'
. Line::_(__Line__, __Class__) . ' add the autoloaders for the composer classes');
}
return implode(PHP_EOL, $composer_routine);
}
return null;
}
/**
* Get autoloaders for install file
*
* @return string
* @since 5.0.2
*/
private function getAutoloaderInstallArray(): string
{
// we start building the autoloader file loader
$autoload_file = [];
$autoload_file[] = PHP_EOL . Indent::_(3) . "__DIR__ . '/" .
$this->config->get('component_installer_autoloader_path', 'ERROR') . "',";
$autoload_file[] = Indent::_(3) . "JPATH_ADMINISTRATOR . '/components/com_"
. $this->config->get('component_code_name', 'ERROR') . '/'
. $this->config->get('component_autoloader_path', 'ERROR') . "'" . PHP_EOL . Indent::_(2);
return implode(PHP_EOL, $autoload_file);
}
/**
* Get installer autoloader code
*
* @return string
* @since 5.0.2
*/
private function getAutoloaderInstallerCode(): string
{
// check if it was already build
if (!empty($this->installerhelper))
{
return $this->installerhelper;
}
// load the code
$code = [];
// add the composer stuff here
// if (($script = $this->getInstallerComposer()) !== null)
// {
// $code[] = $script;
// }
// get the helper autoloader
if (($script = $this->getInstallerAutoloader()) !== null)
{
$code[] = $script;
}
// if we have any
if (!empty($code))
{
$this->installerhelper = PHP_EOL . PHP_EOL . implode(PHP_EOL . PHP_EOL, $code);
}
return $this->installerhelper;
}
/**
* Get autoloader code
*
*
* @return string|null
* @since 3.2.0
*/
private function getInstallerAutoloader(): ?string
{
if (($size = ArrayHelper::check($this->power->namespace)) > 0)
{
// we start building the spl_autoload_register function call
$autoload_method = [];
$autoload_method[] = '//'
. Line::_(__Line__, __Class__) . ' register additional namespace';
$autoload_method[] = 'spl_autoload_register(function ($class) {';
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' project-specific base directories and namespace prefix';
$autoload_method[] = Indent::_(1) . '$search = [';
// counter to manage the comma in the actual array
$counter = 1;
foreach ($this->power->namespace as $base_dir => $prefix)
{
// don't add the ending comma on last value
if ($size == $counter)
{
$autoload_method[] = Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "'";
}
else
{
$autoload_method[] = Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "',";
}
$counter++;
}
$autoload_method[] = Indent::_(1) . '];';
$autoload_method[] = Indent::_(1) . '// Start the search and load if found';
$autoload_method[] = Indent::_(1) . '$found = false;';
$autoload_method[] = Indent::_(1) . '$found_base_dir = "";';
$autoload_method[] = Indent::_(1) . '$found_len = 0;';
$autoload_method[] = Indent::_(1) . 'foreach ($search as $base_dir => $prefix)';
$autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_(2) . '//'
. Line::_(__Line__, __Class__) . ' does the class use the namespace prefix?';
$autoload_method[] = Indent::_(2) . '$len = strlen($prefix);';
$autoload_method[] = Indent::_(2) . 'if (strncmp($prefix, $class, $len) === 0)';
$autoload_method[] = Indent::_(2) . '{';
$autoload_method[] = Indent::_(3) . '//'
. Line::_(__Line__, __Class__) . ' we have a match so load the values';
$autoload_method[] = Indent::_(3) . '$found = true;';
$autoload_method[] = Indent::_(3) . '$found_base_dir = $base_dir;';
$autoload_method[] = Indent::_(3) . '$found_len = $len;';
$autoload_method[] = Indent::_(3) . '//'
. Line::_(__Line__, __Class__) . ' done here';
$autoload_method[] = Indent::_(3) . 'break;';
$autoload_method[] = Indent::_(2) . '}';
$autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' check if we found a match';
$autoload_method[] = Indent::_(1) . 'if (!$found)';
$autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_(2) . '//'
. Line::_(__Line__, __Class__) . ' not found so move to the next registered autoloader';
$autoload_method[] = Indent::_(2) . 'return;';
$autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' get the relative class name';
$autoload_method[] = Indent::_(1) . '$relative_class = substr($class, $found_len);';
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' replace the namespace prefix with the base directory, replace namespace';
$autoload_method[] = Indent::_(1) . '// separators with directory separators in the relative class name, append';
$autoload_method[] = Indent::_(1) . '// with .php';
$autoload_method[] = Indent::_(1) . "\$file = __DIR__ . '/' . \$found_base_dir . '/src' . str_replace('\\\\', '/', \$relative_class) . '.php';";
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' if the file exists, require it';
$autoload_method[] = Indent::_(1) . 'if (file_exists($file))';
$autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_(2) . 'require $file;';
$autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = '});';
return implode(PHP_EOL, $autoload_method);
}
return null;
}
/**
* Get the composer autoloader routine (NOT READY)
*
*
* @return string|null
* @since 3.2.0
*/
private function getInstallerComposer(): ?string
{
if (ArrayHelper::check($this->power->composer))
{
// load the composer routine
$composer_routine = [];
// counter to manage the comma in the actual array
$add_once = [];
foreach ($this->power->composer as $access_point)
{
// don't add the ending comma on last value
if (empty($add_once[$access_point]))
{
$composer_routine[] = "\$composer_autoloader = __DIR__ . '/libraries/$access_point';";
$composer_routine[] = 'if (file_exists($composer_autoloader))';
$composer_routine[] = "{";
$composer_routine[] = Indent::_(1) . 'require_once $composer_autoloader;';
$composer_routine[] = "}";
$add_once[$access_point] = true;
}
}
// this is just about the [autoloader or autoloaders] in the comment ;)
if (count($add_once) == 1)
{
array_unshift($composer_routine, '//'
. Line::_(__Line__, __Class__) . ' add the autoloader for the composer classes');
}
else
{
array_unshift($composer_routine, '//'
. Line::_(__Line__, __Class__) . ' add the autoloaders for the composer classes'); . Line::_(__Line__, __Class__) . ' add the autoloaders for the composer classes');
} }

View File

@ -22,6 +22,14 @@
*/ */
protected Content $content; protected Content $content;
/**
* Installer Class Autoloader
*
* @var string
* @since 5.0.2
**/
protected string $installerhelper = '';
/** /**
* Helper Class Autoloader * Helper Class Autoloader
* *
@ -48,6 +56,7 @@
// reset all autoloaders power placeholders // reset all autoloaders power placeholders
$this->content->set('ADMIN_POWER_HELPER', ''); $this->content->set('ADMIN_POWER_HELPER', '');
$this->content->set('SITE_POWER_HELPER', ''); $this->content->set('SITE_POWER_HELPER', '');
$this->content->set('INSTALLER_POWER_HELPER', '');
$this->content->set('PLUGIN_POWER_AUTOLOADER', ''); $this->content->set('PLUGIN_POWER_AUTOLOADER', '');
$this->content->set('SITE_PLUGIN_POWER_AUTOLOADER', ''); $this->content->set('SITE_PLUGIN_POWER_AUTOLOADER', '');
$this->content->set('POWER_AUTOLOADER', ''); $this->content->set('POWER_AUTOLOADER', '');
@ -60,6 +69,7 @@
$this->content->set('SITE_TWO_POWER_AUTOLOADER', ''); $this->content->set('SITE_TWO_POWER_AUTOLOADER', '');
$this->content->set('SITE_THREE_POWER_AUTOLOADER', ''); $this->content->set('SITE_THREE_POWER_AUTOLOADER', '');
$this->content->set('SITE_FOUR_POWER_AUTOLOADER', ''); $this->content->set('SITE_FOUR_POWER_AUTOLOADER', '');
$this->content->set('INSTALLER_POWER_AUTOLOADER_ARRAY', '');
} }
/** /**
@ -89,6 +99,9 @@
// to add to custom files // to add to custom files
$this->content->add('POWER_AUTOLOADER', $this->getAutoloaderFile(0)); $this->content->add('POWER_AUTOLOADER', $this->getAutoloaderFile(0));
$this->content->add('SITE_POWER_AUTOLOADER', $this->getAutoloaderFile(0, 'JPATH_SITE')); $this->content->add('SITE_POWER_AUTOLOADER', $this->getAutoloaderFile(0, 'JPATH_SITE'));
// to add to install file
$this->content->add('INSTALLER_POWER_AUTOLOADER_ARRAY', $this->getAutoloaderInstallArray());
} }
/** /**
@ -118,20 +131,23 @@
uksort($this->power->namespace, fn($a, $b) => strlen((string) $b) - strlen((string) $a)); uksort($this->power->namespace, fn($a, $b) => strlen((string) $b) - strlen((string) $a));
// load to admin helper class // load to admin helper class
$this->content->add('ADMIN_POWER_HELPER', $this->getHelperAutoloader()); $this->content->add('ADMIN_POWER_HELPER', $this->getAutoloaderCode());
// load to site helper class if needed // load to site helper class if needed
$this->content->add('SITE_POWER_HELPER', $this->getHelperAutoloader()); $this->content->add('SITE_POWER_HELPER', $this->getAutoloaderCode());
// load to installer helper class if needed
$this->content->add('INSTALLER_POWER_HELPER', $this->getAutoloaderInstallerCode());
} }
} }
/** /**
* Get helper autoloader code * Get autoloader code
* *
* @return string * @return string
* @since 3.2.0 * @since 3.2.0
*/ */
private function getHelperAutoloader(): string private function getAutoloaderCode(): string
{ {
// check if it was already build // check if it was already build
if (!empty($this->helper)) if (!empty($this->helper))
@ -143,13 +159,13 @@
$code = []; $code = [];
// add the composer stuff here // add the composer stuff here
if (($script = $this->getComposer(0)) !== null) if (($script = $this->getComposer()) !== null)
{ {
$code[] = $script; $code[] = $script;
} }
// get the helper autoloader // get the helper autoloader
if (($script = $this->getAutoloader(0)) !== null) if (($script = $this->getAutoloader()) !== null)
{ {
$code[] = $script; $code[] = $script;
} }
@ -174,7 +190,7 @@
*/ */
private function getAutoloaderFile(int $tabSpace, string $area = 'JPATH_ADMINISTRATOR'): ?string private function getAutoloaderFile(int $tabSpace, string $area = 'JPATH_ADMINISTRATOR'): ?string
{ {
// we start building the autoloaded file loader // we start building the autoloader file loader
$autoload_file = []; $autoload_file = [];
$autoload_file[] = Indent::_($tabSpace) . '//' $autoload_file[] = Indent::_($tabSpace) . '//'
. Line::_(__Line__, __Class__) . " The power autoloader for this project ($area) area."; . Line::_(__Line__, __Class__) . " The power autoloader for this project ($area) area.";
@ -192,23 +208,21 @@
/** /**
* Get autoloader code * Get autoloader code
* *
* @param int $tabSpace The dynamic tab spacer
*
* @return string|null * @return string|null
* @since 3.2.0 * @since 3.2.0
*/ */
private function getAutoloader(int $tabSpace): ?string private function getAutoloader(): ?string
{ {
if (($size = ArrayHelper::check($this->power->namespace)) > 0) if (($size = ArrayHelper::check($this->power->namespace)) > 0)
{ {
// we start building the spl_autoload_register function call // we start building the spl_autoload_register function call
$autoload_method = []; $autoload_method = [];
$autoload_method[] = Indent::_($tabSpace) . '//' $autoload_method[] = '//'
. Line::_(__Line__, __Class__) . ' register additional namespace'; . Line::_(__Line__, __Class__) . ' register additional namespace';
$autoload_method[] = Indent::_($tabSpace) . 'spl_autoload_register(function ($class) {'; $autoload_method[] = 'spl_autoload_register(function ($class) {';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' project-specific base directories and namespace prefix'; . Line::_(__Line__, __Class__) . ' project-specific base directories and namespace prefix';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$search = ['; $autoload_method[] = Indent::_(1) . '$search = [';
// counter to manage the comma in the actual array // counter to manage the comma in the actual array
$counter = 1; $counter = 1;
@ -217,63 +231,63 @@
// don't add the ending comma on last value // don't add the ending comma on last value
if ($size == $counter) if ($size == $counter)
{ {
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "'"; $autoload_method[] = Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "'";
} }
else else
{ {
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "',"; $autoload_method[] = Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "',";
} }
$counter++; $counter++;
} }
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '];'; $autoload_method[] = Indent::_(1) . '];';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '// Start the search and load if found'; $autoload_method[] = Indent::_(1) . '// Start the search and load if found';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$found = false;'; $autoload_method[] = Indent::_(1) . '$found = false;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$found_base_dir = "";'; $autoload_method[] = Indent::_(1) . '$found_base_dir = "";';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$found_len = 0;'; $autoload_method[] = Indent::_(1) . '$found_len = 0;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . 'foreach ($search as $base_dir => $prefix)'; $autoload_method[] = Indent::_(1) . 'foreach ($search as $base_dir => $prefix)';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '{'; $autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '//' $autoload_method[] = Indent::_(2) . '//'
. Line::_(__Line__, __Class__) . ' does the class use the namespace prefix?'; . Line::_(__Line__, __Class__) . ' does the class use the namespace prefix?';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '$len = strlen($prefix);'; $autoload_method[] = Indent::_(2) . '$len = strlen($prefix);';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . 'if (strncmp($prefix, $class, $len) === 0)'; $autoload_method[] = Indent::_(2) . 'if (strncmp($prefix, $class, $len) === 0)';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '{'; $autoload_method[] = Indent::_(2) . '{';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '//' $autoload_method[] = Indent::_(3) . '//'
. Line::_(__Line__, __Class__) . ' we have a match so load the values'; . Line::_(__Line__, __Class__) . ' we have a match so load the values';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '$found = true;'; $autoload_method[] = Indent::_(3) . '$found = true;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '$found_base_dir = $base_dir;'; $autoload_method[] = Indent::_(3) . '$found_base_dir = $base_dir;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '$found_len = $len;'; $autoload_method[] = Indent::_(3) . '$found_len = $len;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . '//' $autoload_method[] = Indent::_(3) . '//'
. Line::_(__Line__, __Class__) . ' done here'; . Line::_(__Line__, __Class__) . ' done here';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(3) . 'break;'; $autoload_method[] = Indent::_(3) . 'break;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '}'; $autoload_method[] = Indent::_(2) . '}';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '}'; $autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' check if we found a match'; . Line::_(__Line__, __Class__) . ' check if we found a match';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . 'if (!$found)'; $autoload_method[] = Indent::_(1) . 'if (!$found)';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '{'; $autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . '//' $autoload_method[] = Indent::_(2) . '//'
. Line::_(__Line__, __Class__) . ' not found so move to the next registered autoloader'; . Line::_(__Line__, __Class__) . ' not found so move to the next registered autoloader';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . 'return;'; $autoload_method[] = Indent::_(2) . 'return;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '}'; $autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' get the relative class name'; . Line::_(__Line__, __Class__) . ' get the relative class name';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '$relative_class = substr($class, $found_len);'; $autoload_method[] = Indent::_(1) . '$relative_class = substr($class, $found_len);';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' replace the namespace prefix with the base directory, replace namespace'; . Line::_(__Line__, __Class__) . ' replace the namespace prefix with the base directory, replace namespace';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '// separators with directory separators in the relative class name, append'; $autoload_method[] = Indent::_(1) . '// separators with directory separators in the relative class name, append';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '// with .php'; $autoload_method[] = Indent::_(1) . '// with .php';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . "\$file = JPATH_ROOT . '/' . \$found_base_dir . '/src' . str_replace('\\\\', '/', \$relative_class) . '.php';"; $autoload_method[] = Indent::_(1) . "\$file = JPATH_ROOT . '/' . \$found_base_dir . '/src' . str_replace('\\\\', '/', \$relative_class) . '.php';";
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '//' $autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' if the file exists, require it'; . Line::_(__Line__, __Class__) . ' if the file exists, require it';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . 'if (file_exists($file))'; $autoload_method[] = Indent::_(1) . 'if (file_exists($file))';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '{'; $autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(2) . 'require $file;'; $autoload_method[] = Indent::_(2) . 'require $file;';
$autoload_method[] = Indent::_($tabSpace) . Indent::_(1) . '}'; $autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_($tabSpace) . '});'; $autoload_method[] = '});';
return implode(PHP_EOL, $autoload_method); return implode(PHP_EOL, $autoload_method);
} }
@ -284,12 +298,10 @@
/** /**
* Get the composer autoloader routine * Get the composer autoloader routine
* *
* @param int $tabSpace The dynamic tab spacer
*
* @return string|null * @return string|null
* @since 3.2.0 * @since 3.2.0
*/ */
private function getComposer(int $tabSpace): ?string private function getComposer(): ?string
{ {
if (ArrayHelper::check($this->power->composer)) if (ArrayHelper::check($this->power->composer))
{ {
@ -303,11 +315,11 @@
// don't add the ending comma on last value // don't add the ending comma on last value
if (empty($add_once[$access_point])) if (empty($add_once[$access_point]))
{ {
$composer_routine[] = Indent::_($tabSpace) . "\$composer_autoloader = JPATH_LIBRARIES . '/$access_point';"; $composer_routine[] = "\$composer_autoloader = JPATH_LIBRARIES . '/$access_point';";
$composer_routine[] = Indent::_($tabSpace) . 'if (file_exists($composer_autoloader))'; $composer_routine[] = 'if (file_exists($composer_autoloader))';
$composer_routine[] = Indent::_($tabSpace) . "{"; $composer_routine[] = "{";
$composer_routine[] = Indent::_($tabSpace) . Indent::_(1) . 'require_once $composer_autoloader;'; $composer_routine[] = Indent::_(1) . 'require_once $composer_autoloader;';
$composer_routine[] = Indent::_($tabSpace) . "}"; $composer_routine[] = "}";
$add_once[$access_point] = true; $add_once[$access_point] = true;
} }
@ -316,12 +328,209 @@
// this is just about the [autoloader or autoloaders] in the comment ;) // this is just about the [autoloader or autoloaders] in the comment ;)
if (count($add_once) == 1) if (count($add_once) == 1)
{ {
array_unshift($composer_routine, Indent::_($tabSpace) . '//' array_unshift($composer_routine, '//'
. Line::_(__Line__, __Class__) . ' add the autoloader for the composer classes'); . Line::_(__Line__, __Class__) . ' add the autoloader for the composer classes');
} }
else else
{ {
array_unshift($composer_routine, Indent::_($tabSpace) . '//' array_unshift($composer_routine, '//'
. Line::_(__Line__, __Class__) . ' add the autoloaders for the composer classes');
}
return implode(PHP_EOL, $composer_routine);
}
return null;
}
/**
* Get autoloaders for install file
*
* @return string
* @since 5.0.2
*/
private function getAutoloaderInstallArray(): string
{
// we start building the autoloader file loader
$autoload_file = [];
$autoload_file[] = PHP_EOL . Indent::_(3) . "__DIR__ . '/" .
$this->config->get('component_installer_autoloader_path', 'ERROR') . "',";
$autoload_file[] = Indent::_(3) . "JPATH_ADMINISTRATOR . '/components/com_"
. $this->config->get('component_code_name', 'ERROR') . '/'
. $this->config->get('component_autoloader_path', 'ERROR') . "'" . PHP_EOL . Indent::_(2);
return implode(PHP_EOL, $autoload_file);
}
/**
* Get installer autoloader code
*
* @return string
* @since 5.0.2
*/
private function getAutoloaderInstallerCode(): string
{
// check if it was already build
if (!empty($this->installerhelper))
{
return $this->installerhelper;
}
// load the code
$code = [];
// add the composer stuff here
// if (($script = $this->getInstallerComposer()) !== null)
// {
// $code[] = $script;
// }
// get the helper autoloader
if (($script = $this->getInstallerAutoloader()) !== null)
{
$code[] = $script;
}
// if we have any
if (!empty($code))
{
$this->installerhelper = PHP_EOL . PHP_EOL . implode(PHP_EOL . PHP_EOL, $code);
}
return $this->installerhelper;
}
/**
* Get autoloader code
*
*
* @return string|null
* @since 3.2.0
*/
private function getInstallerAutoloader(): ?string
{
if (($size = ArrayHelper::check($this->power->namespace)) > 0)
{
// we start building the spl_autoload_register function call
$autoload_method = [];
$autoload_method[] = '//'
. Line::_(__Line__, __Class__) . ' register additional namespace';
$autoload_method[] = 'spl_autoload_register(function ($class) {';
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' project-specific base directories and namespace prefix';
$autoload_method[] = Indent::_(1) . '$search = [';
// counter to manage the comma in the actual array
$counter = 1;
foreach ($this->power->namespace as $base_dir => $prefix)
{
// don't add the ending comma on last value
if ($size == $counter)
{
$autoload_method[] = Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "'";
}
else
{
$autoload_method[] = Indent::_(2) . "'" . $this->config->get('jcb_powers_path', 'libraries/jcb_powers') . "/$base_dir' => '" . implode('\\\\', $prefix) . "',";
}
$counter++;
}
$autoload_method[] = Indent::_(1) . '];';
$autoload_method[] = Indent::_(1) . '// Start the search and load if found';
$autoload_method[] = Indent::_(1) . '$found = false;';
$autoload_method[] = Indent::_(1) . '$found_base_dir = "";';
$autoload_method[] = Indent::_(1) . '$found_len = 0;';
$autoload_method[] = Indent::_(1) . 'foreach ($search as $base_dir => $prefix)';
$autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_(2) . '//'
. Line::_(__Line__, __Class__) . ' does the class use the namespace prefix?';
$autoload_method[] = Indent::_(2) . '$len = strlen($prefix);';
$autoload_method[] = Indent::_(2) . 'if (strncmp($prefix, $class, $len) === 0)';
$autoload_method[] = Indent::_(2) . '{';
$autoload_method[] = Indent::_(3) . '//'
. Line::_(__Line__, __Class__) . ' we have a match so load the values';
$autoload_method[] = Indent::_(3) . '$found = true;';
$autoload_method[] = Indent::_(3) . '$found_base_dir = $base_dir;';
$autoload_method[] = Indent::_(3) . '$found_len = $len;';
$autoload_method[] = Indent::_(3) . '//'
. Line::_(__Line__, __Class__) . ' done here';
$autoload_method[] = Indent::_(3) . 'break;';
$autoload_method[] = Indent::_(2) . '}';
$autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' check if we found a match';
$autoload_method[] = Indent::_(1) . 'if (!$found)';
$autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_(2) . '//'
. Line::_(__Line__, __Class__) . ' not found so move to the next registered autoloader';
$autoload_method[] = Indent::_(2) . 'return;';
$autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' get the relative class name';
$autoload_method[] = Indent::_(1) . '$relative_class = substr($class, $found_len);';
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' replace the namespace prefix with the base directory, replace namespace';
$autoload_method[] = Indent::_(1) . '// separators with directory separators in the relative class name, append';
$autoload_method[] = Indent::_(1) . '// with .php';
$autoload_method[] = Indent::_(1) . "\$file = __DIR__ . '/' . \$found_base_dir . '/src' . str_replace('\\\\', '/', \$relative_class) . '.php';";
$autoload_method[] = Indent::_(1) . '//'
. Line::_(__Line__, __Class__) . ' if the file exists, require it';
$autoload_method[] = Indent::_(1) . 'if (file_exists($file))';
$autoload_method[] = Indent::_(1) . '{';
$autoload_method[] = Indent::_(2) . 'require $file;';
$autoload_method[] = Indent::_(1) . '}';
$autoload_method[] = '});';
return implode(PHP_EOL, $autoload_method);
}
return null;
}
/**
* Get the composer autoloader routine (NOT READY)
*
*
* @return string|null
* @since 3.2.0
*/
private function getInstallerComposer(): ?string
{
if (ArrayHelper::check($this->power->composer))
{
// load the composer routine
$composer_routine = [];
// counter to manage the comma in the actual array
$add_once = [];
foreach ($this->power->composer as $access_point)
{
// don't add the ending comma on last value
if (empty($add_once[$access_point]))
{
$composer_routine[] = "\$composer_autoloader = __DIR__ . '/libraries/$access_point';";
$composer_routine[] = 'if (file_exists($composer_autoloader))';
$composer_routine[] = "{";
$composer_routine[] = Indent::_(1) . 'require_once $composer_autoloader;';
$composer_routine[] = "}";
$add_once[$access_point] = true;
}
}
// this is just about the [autoloader or autoloaders] in the comment ;)
if (count($add_once) == 1)
{
array_unshift($composer_routine, '//'
. Line::_(__Line__, __Class__) . ' add the autoloader for the composer classes');
}
else
{
array_unshift($composer_routine, '//'
. Line::_(__Line__, __Class__) . ' add the autoloaders for the composer classes'); . Line::_(__Line__, __Class__) . ' add the autoloaders for the composer classes');
} }

View File

@ -0,0 +1,93 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class AllowEditViews (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Controller**
```uml
@startuml
class AllowEditViews << (F,LightGreen) >> #RoyalBlue {
# Permission $permission
# Dispenser $dispenser
# Category $category
# CategoryOtherName $categoryothername
+ __construct(Permission $permission, Dispenser $dispenser, ...)
+ getArray(array $views) : string
+ getFunctions(array $views) : string
# getViewArray(string $nameSingleCode, string $nameListCode) : string
# getViewFunction(string $nameSingleCode, string $nameListCode) : ?string
}
note right of AllowEditViews::__construct
Constructor.
since: 5.0.2
arguments:
Permission $permission
Dispenser $dispenser
Category $category
CategoryOtherName $categoryothername
end note
note right of AllowEditViews::getArray
Get Array Code
since: 5.0.2
return: string
end note
note right of AllowEditViews::getFunctions
Get Custom Function Code
since: 5.0.2
return: string
end note
note right of AllowEditViews::getViewArray
Get View Permissions Array Code
since: 3.2.0
return: string
end note
note right of AllowEditViews::getViewFunction
Get View Permissions Function Code
since: 3.2.0
return: ?string
end note
@enduml
```
The Power feature in JCB allows you to write PHP classes and their implementations, making it easy to include them in your Joomla project. JCB handles linking, autoloading, namespacing, and folder structure creation for you.
By using the SPK (Super Power Key) in your custom code (replacing the class name in your code with the SPK), JCB will automatically pull the power from the repository into your project. This makes it available in your JCB instance, allowing you to edit it and include the class in your generated Joomla component.
JCB uses placeholders like [[[`NamespacePrefix`]]] and [[[`ComponentNamespace`]]] in namespacing to prevent collisions and improve reusability across different JCB systems. You can also set the **JCB powers path** globally or per component under the **Dynamic Integration** tab, providing flexibility and easy maintainability.
To add this specific Power to your project in JCB:
> simply use this SPK
```
Super---7ecd7318_8bea_4321_8f13_626da1ab01c7---Power
```
> remember to replace the `---` with `___` to activate this Power in your code
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,243 @@
<?php
/**
* @package Joomla.Component.Builder
*
* @created 4th September, 2022
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Controller;
use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission;
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Category;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CategoryOtherName;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Controller\AllowEditViewsInterface;
/**
* Controller Allow Edit Views Class for Joomla 5
*
* @since 5.0.2
*/
final class AllowEditViews implements AllowEditViewsInterface
{
/**
* The Permission Class.
*
* @var Permission
* @since 5.0.2
*/
protected Permission $permission;
/**
* The Dispenser Class.
*
* @var Dispenser
* @since 5.0.2
*/
protected Dispenser $dispenser;
/**
* The Category Class.
*
* @var Category
* @since 5.0.2
*/
protected Category $category;
/**
* The CategoryOtherName Class.
*
* @var CategoryOtherName
* @since 5.0.2
*/
protected CategoryOtherName $categoryothername;
/**
* Constructor.
*
* @param Permission $permission The Permission Class.
* @param Dispenser $dispenser The Dispenser Class.
* @param Category $category The Category Class.
* @param CategoryOtherName $categoryothername The CategoryOtherName Class.
*
* @since 5.0.2
*/
public function __construct(Permission $permission,
Dispenser $dispenser, Category $category,
CategoryOtherName $categoryothername)
{
$this->permission = $permission;
$this->dispenser = $dispenser;
$this->category = $category;
$this->categoryothername = $categoryothername;
}
/**
* Get Array Code
*
* @param array $views
*
* @since 5.0.2
* @return string The array of Code (string)
*/
public function getArray(array $views): string
{
$allow = [];
foreach ($views as $nameSingleCode => $nameListCode)
{
$allow[] = $this->getViewArray($nameSingleCode, $nameListCode);
}
if ($allow === [])
{
return '';
}
return PHP_EOL . Indent::_(2) . implode("," . PHP_EOL . Indent::_(2), $allow);
}
/**
* Get Custom Function Code
*
* @param array $views
*
* @since 5.0.2
* @return string The functions of Code (string)
*/
public function getFunctions(array $views): string
{
$allow = [];
foreach ($views as $nameSingleCode => $nameListCode)
{
if (($function = $this->getViewFunction($nameSingleCode, $nameListCode)) !== null)
{
$allow[] = $function;
}
}
if ($allow === [])
{
return '';
}
return PHP_EOL . PHP_EOL . implode(PHP_EOL . PHP_EOL, $allow);
}
/**
* Get View Permissions Array Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string The allow edit method code
*/
protected function getViewArray(string $nameSingleCode, string $nameListCode): string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
$allow[] = Indent::_(3) . "'function' => 'allowEdit_{$nameSingleCode}'";
}
if ($this->category->exists("{$nameListCode}"))
{
// check if category has another name
$otherView = $this->categoryothername->
get($nameListCode . '.view', $nameSingleCode);
// check if the item has permissions.
if ($this->permission->globalExist($otherView, 'core.access'))
{
$access = $this->permission->getGlobal($otherView, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($otherView, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($otherView, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
else
{
// check if the item has permissions.
if ($this->permission->actionExist($nameSingleCode, 'core.access'))
{
$access = $this->permission->getAction($nameSingleCode, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($nameSingleCode, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($nameSingleCode, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
return "'{$nameSingleCode}' => [" . PHP_EOL . implode(',' . PHP_EOL, $allow) . PHP_EOL . Indent::_(2) . ']';
}
/**
* Get View Permissions Function Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string|null The allow edit method code
*/
protected function getViewFunction(string $nameSingleCode, string $nameListCode): ?string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
// setup the function
$allow[] = Indent::_(1) . '/**';
$allow[] = Indent::_(1) . " * Method to check if you can edit an existing {$nameSingleCode} record.";
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @param array $data An array of input data.';
$allow[] = Indent::_(1) . ' * @param string $key The name of the key for the primary key.';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @return boolean';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @since 5.0.2';
$allow[] = Indent::_(1) . ' */';
$allow[] = Indent::_(1) . "protected function allowEdit_{$nameSingleCode}(\$data = [], \$key = 'id')";
$allow[] = Indent::_(1) . '{';
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get user object.";
$allow[] = Indent::_(2) . "\$user = \$this->identity;";
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get record id.";
$allow[] = Indent::_(2)
. "\$recordId = (int) isset(\$data[\$key]) ? \$data[\$key] : 0;";
// load custom permission script
$allow[] = $customAllow;
$allow[] = Indent::_(1) . '}';
return implode(PHP_EOL, $allow);
}
return null;
}
}

View File

@ -0,0 +1,211 @@
/**
* The Permission Class.
*
* @var Permission
* @since 5.0.2
*/
protected Permission $permission;
/**
* The Dispenser Class.
*
* @var Dispenser
* @since 5.0.2
*/
protected Dispenser $dispenser;
/**
* The Category Class.
*
* @var Category
* @since 5.0.2
*/
protected Category $category;
/**
* The CategoryOtherName Class.
*
* @var CategoryOtherName
* @since 5.0.2
*/
protected CategoryOtherName $categoryothername;
/**
* Constructor.
*
* @param Permission $permission The Permission Class.
* @param Dispenser $dispenser The Dispenser Class.
* @param Category $category The Category Class.
* @param CategoryOtherName $categoryothername The CategoryOtherName Class.
*
* @since 5.0.2
*/
public function __construct(Permission $permission,
Dispenser $dispenser, Category $category,
CategoryOtherName $categoryothername)
{
$this->permission = $permission;
$this->dispenser = $dispenser;
$this->category = $category;
$this->categoryothername = $categoryothername;
}
/**
* Get Array Code
*
* @param array $views
*
* @since 5.0.2
* @return string The array of Code (string)
*/
public function getArray(array $views): string
{
$allow = [];
foreach ($views as $nameSingleCode => $nameListCode)
{
$allow[] = $this->getViewArray($nameSingleCode, $nameListCode);
}
if ($allow === [])
{
return '';
}
return PHP_EOL . Indent::_(2) . implode("," . PHP_EOL . Indent::_(2), $allow);
}
/**
* Get Custom Function Code
*
* @param array $views
*
* @since 5.0.2
* @return string The functions of Code (string)
*/
public function getFunctions(array $views): string
{
$allow = [];
foreach ($views as $nameSingleCode => $nameListCode)
{
if (($function = $this->getViewFunction($nameSingleCode, $nameListCode)) !== null)
{
$allow[] = $function;
}
}
if ($allow === [])
{
return '';
}
return PHP_EOL . PHP_EOL . implode(PHP_EOL . PHP_EOL, $allow);
}
/**
* Get View Permissions Array Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string The allow edit method code
*/
protected function getViewArray(string $nameSingleCode, string $nameListCode): string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
$allow[] = Indent::_(3) . "'function' => 'allowEdit_{$nameSingleCode}'";
}
if ($this->category->exists("{$nameListCode}"))
{
// check if category has another name
$otherView = $this->categoryothername->
get($nameListCode . '.view', $nameSingleCode);
// check if the item has permissions.
if ($this->permission->globalExist($otherView, 'core.access'))
{
$access = $this->permission->getGlobal($otherView, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($otherView, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($otherView, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
else
{
// check if the item has permissions.
if ($this->permission->actionExist($nameSingleCode, 'core.access'))
{
$access = $this->permission->getAction($nameSingleCode, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($nameSingleCode, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($nameSingleCode, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
return "'{$nameSingleCode}' => [" . PHP_EOL . implode(',' . PHP_EOL, $allow) . PHP_EOL . Indent::_(2) . ']';
}
/**
* Get View Permissions Function Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string|null The allow edit method code
*/
protected function getViewFunction(string $nameSingleCode, string $nameListCode): ?string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
// setup the function
$allow[] = Indent::_(1) . '/**';
$allow[] = Indent::_(1) . " * Method to check if you can edit an existing {$nameSingleCode} record.";
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @param array $data An array of input data.';
$allow[] = Indent::_(1) . ' * @param string $key The name of the key for the primary key.';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @return boolean';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @since 5.0.2';
$allow[] = Indent::_(1) . ' */';
$allow[] = Indent::_(1) . "protected function allowEdit_{$nameSingleCode}(\$data = [], \$key = 'id')";
$allow[] = Indent::_(1) . '{';
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get user object.";
$allow[] = Indent::_(2) . "\$user = \$this->identity;";
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get record id.";
$allow[] = Indent::_(2)
. "\$recordId = (int) isset(\$data[\$key]) ? \$data[\$key] : 0;";
// load custom permission script
$allow[] = $customAllow;
$allow[] = Indent::_(1) . '}';
return implode(PHP_EOL, $allow);
}
return null;
}

View File

@ -0,0 +1,46 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "",
"guid": "7ecd7318-8bea-4321-8f13-626da1ab01c7",
"implements": [
"025d5903-cfdf-4624-aebb-10d02075e265"
],
"load_selection": null,
"name": "AllowEditViews",
"power_version": "1.0.0",
"system_name": "JCB.Architecture.J5.Controller.AllowEditViews",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "7f01622a-74c9-4e67-b111-3eb488035206",
"as": "default"
},
"use_selection1": {
"use": "f1dc6430-fb54-452e-aa53-ce32ae93db88",
"as": "default"
},
"use_selection2": {
"use": "007177eb-d39d-4093-8840-07a38811c502",
"as": "default"
},
"use_selection3": {
"use": "a1e551a9-8369-48c9-a076-4e5beb65e0df",
"as": "default"
},
"use_selection4": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
},
"use_selection5": {
"use": "4e6ff11d-bebf-42f5-8fd7-b2f882857222",
"as": "default"
}
},
"extendsinterfaces": null,
"namespace": "[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Compiler.Architecture.JoomlaFive.Controller.AllowEditViews",
"description": "Controller Allow Edit Views Class for Joomla 5\r\n\r\n@since 5.0.2",
"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",
"head": "",
"composer": ""
}

View File

@ -106,7 +106,7 @@ final class AllowEdit implements AllowEditInterface
// prepare custom permission script // prepare custom permission script
$customAllow = $this->dispenser->get( $customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode, '', null, true 'php_allowedit', $nameSingleCode
); );
if ($this->category->exists("{$nameListCode}")) if ($this->category->exists("{$nameListCode}"))

View File

@ -75,7 +75,7 @@
// prepare custom permission script // prepare custom permission script
$customAllow = $this->dispenser->get( $customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode, '', null, true 'php_allowedit', $nameSingleCode
); );
if ($this->category->exists("{$nameListCode}")) if ($this->category->exists("{$nameListCode}"))

View File

@ -367,6 +367,7 @@ final class Header implements HeaderInterface
$headers[] = 'use Joomla\CMS\Form\FormHelper;'; $headers[] = 'use Joomla\CMS\Form\FormHelper;';
$headers[] = 'use Joomla\CMS\Session\Session;'; $headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;'; $headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;'; $headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;'; $headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;'; $headers[] = 'use Joomla\CMS\Layout\FileLayout;';
@ -402,6 +403,7 @@ final class Header implements HeaderInterface
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;'; $headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;'; $headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;'; $headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\CMS\Document\Document;'; $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; break;

View File

@ -331,6 +331,7 @@
$headers[] = 'use Joomla\CMS\Form\FormHelper;'; $headers[] = 'use Joomla\CMS\Form\FormHelper;';
$headers[] = 'use Joomla\CMS\Session\Session;'; $headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;'; $headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;'; $headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;'; $headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;'; $headers[] = 'use Joomla\CMS\Layout\FileLayout;';
@ -366,6 +367,7 @@
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;'; $headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;'; $headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;'; $headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\CMS\Document\Document;'; $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; break;

View File

@ -52,11 +52,11 @@
"use": "8ca30d59-e56a-4cdd-bd8c-d9aad28f5903", "use": "8ca30d59-e56a-4cdd-bd8c-d9aad28f5903",
"as": "default" "as": "default"
}, },
"use_selection11": { "use_selection10": {
"use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a", "use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a",
"as": "default" "as": "default"
}, },
"use_selection12": { "use_selection11": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef", "use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default" "as": "default"
} }

View File

@ -0,0 +1,93 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class AllowEditViews (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Controller**
```uml
@startuml
class AllowEditViews << (F,LightGreen) >> #RoyalBlue {
# Permission $permission
# Dispenser $dispenser
# Category $category
# CategoryOtherName $categoryothername
+ __construct(Permission $permission, Dispenser $dispenser, ...)
+ getArray(array $views) : string
+ getFunctions(array $views) : string
# getViewArray(string $nameSingleCode, string $nameListCode) : string
# getViewFunction(string $nameSingleCode, string $nameListCode) : ?string
}
note right of AllowEditViews::__construct
Constructor.
since: 5.0.2
arguments:
Permission $permission
Dispenser $dispenser
Category $category
CategoryOtherName $categoryothername
end note
note right of AllowEditViews::getArray
Get Array Code
since: 5.0.2
return: string
end note
note right of AllowEditViews::getFunctions
Get Custom Function Code
since: 5.0.2
return: string
end note
note right of AllowEditViews::getViewArray
Get View Permissions Array Code
since: 3.2.0
return: string
end note
note right of AllowEditViews::getViewFunction
Get View Permissions Function Code
since: 3.2.0
return: ?string
end note
@enduml
```
The Power feature in JCB allows you to write PHP classes and their implementations, making it easy to include them in your Joomla project. JCB handles linking, autoloading, namespacing, and folder structure creation for you.
By using the SPK (Super Power Key) in your custom code (replacing the class name in your code with the SPK), JCB will automatically pull the power from the repository into your project. This makes it available in your JCB instance, allowing you to edit it and include the class in your generated Joomla component.
JCB uses placeholders like [[[`NamespacePrefix`]]] and [[[`ComponentNamespace`]]] in namespacing to prevent collisions and improve reusability across different JCB systems. You can also set the **JCB powers path** globally or per component under the **Dynamic Integration** tab, providing flexibility and easy maintainability.
To add this specific Power to your project in JCB:
> simply use this SPK
```
Super---bdb74844_7cba_4227_a01c_355eba5fd031---Power
```
> remember to replace the `---` with `___` to activate this Power in your code
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,218 @@
<?php
/**
* @package Joomla.Component.Builder
*
* @created 4th September, 2022
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Controller;
use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission;
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Category;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CategoryOtherName;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Controller\AllowEditViewsInterface;
/**
* Controller Allow Edit Views Class for Joomla 3
*
* @since 5.0.2
*/
final class AllowEditViews implements AllowEditViewsInterface
{
/**
* The Permission Class.
*
* @var Permission
* @since 5.0.2
*/
protected Permission $permission;
/**
* The Dispenser Class.
*
* @var Dispenser
* @since 5.0.2
*/
protected Dispenser $dispenser;
/**
* The Category Class.
*
* @var Category
* @since 5.0.2
*/
protected Category $category;
/**
* The CategoryOtherName Class.
*
* @var CategoryOtherName
* @since 5.0.2
*/
protected CategoryOtherName $categoryothername;
/**
* Constructor.
*
* @param Permission $permission The Permission Class.
* @param Dispenser $dispenser The Dispenser Class.
* @param Category $category The Category Class.
* @param CategoryOtherName $categoryothername The CategoryOtherName Class.
*
* @since 5.0.2
*/
public function __construct(Permission $permission,
Dispenser $dispenser, Category $category,
CategoryOtherName $categoryothername)
{
$this->permission = $permission;
$this->dispenser = $dispenser;
$this->category = $category;
$this->categoryothername = $categoryothername;
}
/**
* Get Array Code
*
* @param array $views
*
* @since 5.0.2
* @return string The array of Code (string)
*/
public function getArray(array $views): string
{
return ''; // not used for now in Joomla 3
}
/**
* Get Custom Function Code
*
* @param array $views
*
* @since 5.0.2
* @return string The functions of Code (string)
*/
public function getFunctions(array $views): string
{
return ''; // not used for now in Joomla 3
}
/**
* Get View Permissions Array Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string The allow edit method code
*/
protected function getViewArray(string $nameSingleCode, string $nameListCode): string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
$allow[] = Indent::_(3) . "'function' => 'allowEdit_{$nameSingleCode}'";
}
if ($this->category->exists("{$nameListCode}"))
{
// check if category has another name
$otherView = $this->categoryothername->
get($nameListCode . '.view', $nameSingleCode);
// check if the item has permissions.
if ($this->permission->globalExist($otherView, 'core.access'))
{
$access = $this->permission->getGlobal($otherView, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($otherView, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($otherView, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
else
{
// check if the item has permissions.
if ($this->permission->actionExist($nameSingleCode, 'core.access'))
{
$access = $this->permission->getAction($nameSingleCode, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($nameSingleCode, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($nameSingleCode, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
return "'{$nameSingleCode}' => [" . PHP_EOL . implode(',' . PHP_EOL, $allow) . PHP_EOL . Indent::_(2) . ']';
}
/**
* Get View Permissions Function Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string|null The allow edit method code
*/
protected function getViewFunction(string $nameSingleCode, string $nameListCode): ?string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
// setup the function
$allow[] = Indent::_(1) . '/**';
$allow[] = Indent::_(1) . " * Method to check if you can edit an existing {$nameSingleCode} record.";
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @param array $data An array of input data.';
$allow[] = Indent::_(1) . ' * @param string $key The name of the key for the primary key.';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @return boolean';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @since 5.0.2';
$allow[] = Indent::_(1) . ' */';
$allow[] = Indent::_(1) . "protected function allowEdit_{$nameSingleCode}(\$data = [], \$key = 'id')";
$allow[] = Indent::_(1) . '{';
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get user object.";
$allow[] = Indent::_(2) . "\$user = \$this->identity;";
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get record id.";
$allow[] = Indent::_(2)
. "\$recordId = (int) isset(\$data[\$key]) ? \$data[\$key] : 0;";
// load custom permission script
$allow[] = $customAllow;
$allow[] = Indent::_(1) . '}';
return implode(PHP_EOL, $allow);
}
return null;
}
}

View File

@ -0,0 +1,186 @@
/**
* The Permission Class.
*
* @var Permission
* @since 5.0.2
*/
protected Permission $permission;
/**
* The Dispenser Class.
*
* @var Dispenser
* @since 5.0.2
*/
protected Dispenser $dispenser;
/**
* The Category Class.
*
* @var Category
* @since 5.0.2
*/
protected Category $category;
/**
* The CategoryOtherName Class.
*
* @var CategoryOtherName
* @since 5.0.2
*/
protected CategoryOtherName $categoryothername;
/**
* Constructor.
*
* @param Permission $permission The Permission Class.
* @param Dispenser $dispenser The Dispenser Class.
* @param Category $category The Category Class.
* @param CategoryOtherName $categoryothername The CategoryOtherName Class.
*
* @since 5.0.2
*/
public function __construct(Permission $permission,
Dispenser $dispenser, Category $category,
CategoryOtherName $categoryothername)
{
$this->permission = $permission;
$this->dispenser = $dispenser;
$this->category = $category;
$this->categoryothername = $categoryothername;
}
/**
* Get Array Code
*
* @param array $views
*
* @since 5.0.2
* @return string The array of Code (string)
*/
public function getArray(array $views): string
{
return ''; // not used for now in Joomla 3
}
/**
* Get Custom Function Code
*
* @param array $views
*
* @since 5.0.2
* @return string The functions of Code (string)
*/
public function getFunctions(array $views): string
{
return ''; // not used for now in Joomla 3
}
/**
* Get View Permissions Array Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string The allow edit method code
*/
protected function getViewArray(string $nameSingleCode, string $nameListCode): string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
$allow[] = Indent::_(3) . "'function' => 'allowEdit_{$nameSingleCode}'";
}
if ($this->category->exists("{$nameListCode}"))
{
// check if category has another name
$otherView = $this->categoryothername->
get($nameListCode . '.view', $nameSingleCode);
// check if the item has permissions.
if ($this->permission->globalExist($otherView, 'core.access'))
{
$access = $this->permission->getGlobal($otherView, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($otherView, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($otherView, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
else
{
// check if the item has permissions.
if ($this->permission->actionExist($nameSingleCode, 'core.access'))
{
$access = $this->permission->getAction($nameSingleCode, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($nameSingleCode, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($nameSingleCode, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
return "'{$nameSingleCode}' => [" . PHP_EOL . implode(',' . PHP_EOL, $allow) . PHP_EOL . Indent::_(2) . ']';
}
/**
* Get View Permissions Function Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string|null The allow edit method code
*/
protected function getViewFunction(string $nameSingleCode, string $nameListCode): ?string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
// setup the function
$allow[] = Indent::_(1) . '/**';
$allow[] = Indent::_(1) . " * Method to check if you can edit an existing {$nameSingleCode} record.";
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @param array $data An array of input data.';
$allow[] = Indent::_(1) . ' * @param string $key The name of the key for the primary key.';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @return boolean';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @since 5.0.2';
$allow[] = Indent::_(1) . ' */';
$allow[] = Indent::_(1) . "protected function allowEdit_{$nameSingleCode}(\$data = [], \$key = 'id')";
$allow[] = Indent::_(1) . '{';
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get user object.";
$allow[] = Indent::_(2) . "\$user = \$this->identity;";
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get record id.";
$allow[] = Indent::_(2)
. "\$recordId = (int) isset(\$data[\$key]) ? \$data[\$key] : 0;";
// load custom permission script
$allow[] = $customAllow;
$allow[] = Indent::_(1) . '}';
return implode(PHP_EOL, $allow);
}
return null;
}

View File

@ -0,0 +1,46 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "",
"guid": "bdb74844-7cba-4227-a01c-355eba5fd031",
"implements": [
"025d5903-cfdf-4624-aebb-10d02075e265"
],
"load_selection": null,
"name": "AllowEditViews",
"power_version": "1.0.0",
"system_name": "JCB.Architecture.J3.Controller.AllowEditViews",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "7f01622a-74c9-4e67-b111-3eb488035206",
"as": "default"
},
"use_selection1": {
"use": "f1dc6430-fb54-452e-aa53-ce32ae93db88",
"as": "default"
},
"use_selection2": {
"use": "007177eb-d39d-4093-8840-07a38811c502",
"as": "default"
},
"use_selection3": {
"use": "a1e551a9-8369-48c9-a076-4e5beb65e0df",
"as": "default"
},
"use_selection4": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
},
"use_selection5": {
"use": "4e6ff11d-bebf-42f5-8fd7-b2f882857222",
"as": "default"
}
},
"extendsinterfaces": null,
"namespace": "[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Compiler.Architecture.JoomlaThree.Controller.AllowEditViews",
"description": "Controller Allow Edit Views Class for Joomla 3\r\n\r\n@since 5.0.2",
"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",
"head": "",
"composer": ""
}

View File

@ -0,0 +1,93 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class AllowEditViews (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Controller**
```uml
@startuml
class AllowEditViews << (F,LightGreen) >> #RoyalBlue {
# Permission $permission
# Dispenser $dispenser
# Category $category
# CategoryOtherName $categoryothername
+ __construct(Permission $permission, Dispenser $dispenser, ...)
+ getArray(array $views) : string
+ getFunctions(array $views) : string
# getViewArray(string $nameSingleCode, string $nameListCode) : string
# getViewFunction(string $nameSingleCode, string $nameListCode) : ?string
}
note right of AllowEditViews::__construct
Constructor.
since: 5.0.2
arguments:
Permission $permission
Dispenser $dispenser
Category $category
CategoryOtherName $categoryothername
end note
note right of AllowEditViews::getArray
Get Array Code
since: 5.0.2
return: string
end note
note right of AllowEditViews::getFunctions
Get Custom Function Code
since: 5.0.2
return: string
end note
note right of AllowEditViews::getViewArray
Get View Permissions Array Code
since: 3.2.0
return: string
end note
note right of AllowEditViews::getViewFunction
Get View Permissions Function Code
since: 3.2.0
return: ?string
end note
@enduml
```
The Power feature in JCB allows you to write PHP classes and their implementations, making it easy to include them in your Joomla project. JCB handles linking, autoloading, namespacing, and folder structure creation for you.
By using the SPK (Super Power Key) in your custom code (replacing the class name in your code with the SPK), JCB will automatically pull the power from the repository into your project. This makes it available in your JCB instance, allowing you to edit it and include the class in your generated Joomla component.
JCB uses placeholders like [[[`NamespacePrefix`]]] and [[[`ComponentNamespace`]]] in namespacing to prevent collisions and improve reusability across different JCB systems. You can also set the **JCB powers path** globally or per component under the **Dynamic Integration** tab, providing flexibility and easy maintainability.
To add this specific Power to your project in JCB:
> simply use this SPK
```
Super---c2453304_c9ac_4d67_a045_fbda68876434---Power
```
> remember to replace the `---` with `___` to activate this Power in your code
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,243 @@
<?php
/**
* @package Joomla.Component.Builder
*
* @created 4th September, 2022
* @author Llewellyn van der Merwe <https://dev.vdm.io>
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Controller;
use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission;
use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Category;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CategoryOtherName;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Controller\AllowEditViewsInterface;
/**
* Controller Allow Edit Views Class for Joomla 4
*
* @since 5.0.2
*/
final class AllowEditViews implements AllowEditViewsInterface
{
/**
* The Permission Class.
*
* @var Permission
* @since 5.0.2
*/
protected Permission $permission;
/**
* The Dispenser Class.
*
* @var Dispenser
* @since 5.0.2
*/
protected Dispenser $dispenser;
/**
* The Category Class.
*
* @var Category
* @since 5.0.2
*/
protected Category $category;
/**
* The CategoryOtherName Class.
*
* @var CategoryOtherName
* @since 5.0.2
*/
protected CategoryOtherName $categoryothername;
/**
* Constructor.
*
* @param Permission $permission The Permission Class.
* @param Dispenser $dispenser The Dispenser Class.
* @param Category $category The Category Class.
* @param CategoryOtherName $categoryothername The CategoryOtherName Class.
*
* @since 5.0.2
*/
public function __construct(Permission $permission,
Dispenser $dispenser, Category $category,
CategoryOtherName $categoryothername)
{
$this->permission = $permission;
$this->dispenser = $dispenser;
$this->category = $category;
$this->categoryothername = $categoryothername;
}
/**
* Get Array Code
*
* @param array $views
*
* @since 5.0.2
* @return string The array of Code (string)
*/
public function getArray(array $views): string
{
$allow = [];
foreach ($views as $nameSingleCode => $nameListCode)
{
$allow[] = $this->getViewArray($nameSingleCode, $nameListCode);
}
if ($allow === [])
{
return '';
}
return PHP_EOL . Indent::_(2) . implode("," . PHP_EOL . Indent::_(2), $allow);
}
/**
* Get Custom Function Code
*
* @param array $views
*
* @since 5.0.2
* @return string The functions of Code (string)
*/
public function getFunctions(array $views): string
{
$allow = [];
foreach ($views as $nameSingleCode => $nameListCode)
{
if (($function = $this->getViewFunction($nameSingleCode, $nameListCode)) !== null)
{
$allow[] = $function;
}
}
if ($allow === [])
{
return '';
}
return PHP_EOL . PHP_EOL . implode(PHP_EOL . PHP_EOL, $allow);
}
/**
* Get View Permissions Array Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string The allow edit method code
*/
protected function getViewArray(string $nameSingleCode, string $nameListCode): string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
$allow[] = Indent::_(3) . "'function' => 'allowEdit_{$nameSingleCode}'";
}
if ($this->category->exists("{$nameListCode}"))
{
// check if category has another name
$otherView = $this->categoryothername->
get($nameListCode . '.view', $nameSingleCode);
// check if the item has permissions.
if ($this->permission->globalExist($otherView, 'core.access'))
{
$access = $this->permission->getGlobal($otherView, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($otherView, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($otherView, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
else
{
// check if the item has permissions.
if ($this->permission->actionExist($nameSingleCode, 'core.access'))
{
$access = $this->permission->getAction($nameSingleCode, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($nameSingleCode, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($nameSingleCode, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
return "'{$nameSingleCode}' => [" . PHP_EOL . implode(',' . PHP_EOL, $allow) . PHP_EOL . Indent::_(2) . ']';
}
/**
* Get View Permissions Function Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string|null The allow edit method code
*/
protected function getViewFunction(string $nameSingleCode, string $nameListCode): ?string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
// setup the function
$allow[] = Indent::_(1) . '/**';
$allow[] = Indent::_(1) . " * Method to check if you can edit an existing {$nameSingleCode} record.";
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @param array $data An array of input data.';
$allow[] = Indent::_(1) . ' * @param string $key The name of the key for the primary key.';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @return boolean';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @since 5.0.2';
$allow[] = Indent::_(1) . ' */';
$allow[] = Indent::_(1) . "protected function allowEdit_{$nameSingleCode}(\$data = [], \$key = 'id')";
$allow[] = Indent::_(1) . '{';
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get user object.";
$allow[] = Indent::_(2) . "\$user = \$this->identity;";
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get record id.";
$allow[] = Indent::_(2)
. "\$recordId = (int) isset(\$data[\$key]) ? \$data[\$key] : 0;";
// load custom permission script
$allow[] = $customAllow;
$allow[] = Indent::_(1) . '}';
return implode(PHP_EOL, $allow);
}
return null;
}
}

View File

@ -0,0 +1,211 @@
/**
* The Permission Class.
*
* @var Permission
* @since 5.0.2
*/
protected Permission $permission;
/**
* The Dispenser Class.
*
* @var Dispenser
* @since 5.0.2
*/
protected Dispenser $dispenser;
/**
* The Category Class.
*
* @var Category
* @since 5.0.2
*/
protected Category $category;
/**
* The CategoryOtherName Class.
*
* @var CategoryOtherName
* @since 5.0.2
*/
protected CategoryOtherName $categoryothername;
/**
* Constructor.
*
* @param Permission $permission The Permission Class.
* @param Dispenser $dispenser The Dispenser Class.
* @param Category $category The Category Class.
* @param CategoryOtherName $categoryothername The CategoryOtherName Class.
*
* @since 5.0.2
*/
public function __construct(Permission $permission,
Dispenser $dispenser, Category $category,
CategoryOtherName $categoryothername)
{
$this->permission = $permission;
$this->dispenser = $dispenser;
$this->category = $category;
$this->categoryothername = $categoryothername;
}
/**
* Get Array Code
*
* @param array $views
*
* @since 5.0.2
* @return string The array of Code (string)
*/
public function getArray(array $views): string
{
$allow = [];
foreach ($views as $nameSingleCode => $nameListCode)
{
$allow[] = $this->getViewArray($nameSingleCode, $nameListCode);
}
if ($allow === [])
{
return '';
}
return PHP_EOL . Indent::_(2) . implode("," . PHP_EOL . Indent::_(2), $allow);
}
/**
* Get Custom Function Code
*
* @param array $views
*
* @since 5.0.2
* @return string The functions of Code (string)
*/
public function getFunctions(array $views): string
{
$allow = [];
foreach ($views as $nameSingleCode => $nameListCode)
{
if (($function = $this->getViewFunction($nameSingleCode, $nameListCode)) !== null)
{
$allow[] = $function;
}
}
if ($allow === [])
{
return '';
}
return PHP_EOL . PHP_EOL . implode(PHP_EOL . PHP_EOL, $allow);
}
/**
* Get View Permissions Array Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string The allow edit method code
*/
protected function getViewArray(string $nameSingleCode, string $nameListCode): string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
$allow[] = Indent::_(3) . "'function' => 'allowEdit_{$nameSingleCode}'";
}
if ($this->category->exists("{$nameListCode}"))
{
// check if category has another name
$otherView = $this->categoryothername->
get($nameListCode . '.view', $nameSingleCode);
// check if the item has permissions.
if ($this->permission->globalExist($otherView, 'core.access'))
{
$access = $this->permission->getGlobal($otherView, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($otherView, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($otherView, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
else
{
// check if the item has permissions.
if ($this->permission->actionExist($nameSingleCode, 'core.access'))
{
$access = $this->permission->getAction($nameSingleCode, 'core.access');
$allow[] = Indent::_(3) . "'access' => '{$access}'";
}
$edit = $this->permission->getAction($nameSingleCode, 'core.edit');
$allow[] = Indent::_(3) . "'edit' => '{$edit}'";
$edit_own = $this->permission->getAction($nameSingleCode, 'core.edit.own');
$allow[] = Indent::_(3) . "'edit.own' => '{$edit_own}'";
}
return "'{$nameSingleCode}' => [" . PHP_EOL . implode(',' . PHP_EOL, $allow) . PHP_EOL . Indent::_(2) . ']';
}
/**
* Get View Permissions Function Code
*
* @param string $nameSingleCode The single code name of the view.
* @param string $nameListCode The list code name of the view.
*
* @since 3.2.0
* @return string|null The allow edit method code
*/
protected function getViewFunction(string $nameSingleCode, string $nameListCode): ?string
{
$allow = [];
// prepare custom permission script
$customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode
);
if ($customAllow !== '')
{
// setup the function
$allow[] = Indent::_(1) . '/**';
$allow[] = Indent::_(1) . " * Method to check if you can edit an existing {$nameSingleCode} record.";
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @param array $data An array of input data.';
$allow[] = Indent::_(1) . ' * @param string $key The name of the key for the primary key.';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @return boolean';
$allow[] = Indent::_(1) . ' *';
$allow[] = Indent::_(1) . ' * @since 5.0.2';
$allow[] = Indent::_(1) . ' */';
$allow[] = Indent::_(1) . "protected function allowEdit_{$nameSingleCode}(\$data = [], \$key = 'id')";
$allow[] = Indent::_(1) . '{';
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get user object.";
$allow[] = Indent::_(2) . "\$user = \$this->identity;";
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get record id.";
$allow[] = Indent::_(2)
. "\$recordId = (int) isset(\$data[\$key]) ? \$data[\$key] : 0;";
// load custom permission script
$allow[] = $customAllow;
$allow[] = Indent::_(1) . '}';
return implode(PHP_EOL, $allow);
}
return null;
}

View File

@ -0,0 +1,46 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "",
"guid": "c2453304-c9ac-4d67-a045-fbda68876434",
"implements": [
"025d5903-cfdf-4624-aebb-10d02075e265"
],
"load_selection": null,
"name": "AllowEditViews",
"power_version": "1.0.0",
"system_name": "JCB.Architecture.J4.Controller.AllowEditViews",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "7f01622a-74c9-4e67-b111-3eb488035206",
"as": "default"
},
"use_selection1": {
"use": "f1dc6430-fb54-452e-aa53-ce32ae93db88",
"as": "default"
},
"use_selection2": {
"use": "007177eb-d39d-4093-8840-07a38811c502",
"as": "default"
},
"use_selection3": {
"use": "a1e551a9-8369-48c9-a076-4e5beb65e0df",
"as": "default"
},
"use_selection4": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
},
"use_selection5": {
"use": "4e6ff11d-bebf-42f5-8fd7-b2f882857222",
"as": "default"
}
},
"extendsinterfaces": null,
"namespace": "[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Compiler.Architecture.JoomlaFour.Controller.AllowEditViews",
"description": "Controller Allow Edit Views Class for Joomla 4\r\n\r\n@since 5.0.2",
"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",
"head": "",
"composer": ""
}

View File

@ -106,7 +106,7 @@ final class AllowEdit implements AllowEditInterface
// prepare custom permission script // prepare custom permission script
$customAllow = $this->dispenser->get( $customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode, '', null, true 'php_allowedit', $nameSingleCode
); );
if ($this->category->exists("{$nameListCode}")) if ($this->category->exists("{$nameListCode}"))

View File

@ -75,7 +75,7 @@
// prepare custom permission script // prepare custom permission script
$customAllow = $this->dispenser->get( $customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode, '', null, true 'php_allowedit', $nameSingleCode
); );
if ($this->category->exists("{$nameListCode}")) if ($this->category->exists("{$nameListCode}"))

View File

@ -106,7 +106,7 @@ final class AllowEdit implements AllowEditInterface
// prepare custom permission script // prepare custom permission script
$customAllow = $this->dispenser->get( $customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode, '', null, true 'php_allowedit', $nameSingleCode
); );
if ($this->category->exists("{$nameListCode}")) if ($this->category->exists("{$nameListCode}"))

View File

@ -75,7 +75,7 @@
// prepare custom permission script // prepare custom permission script
$customAllow = $this->dispenser->get( $customAllow = $this->dispenser->get(
'php_allowedit', $nameSingleCode, '', null, true 'php_allowedit', $nameSingleCode
); );
if ($this->category->exists("{$nameListCode}")) if ($this->category->exists("{$nameListCode}"))

View File

@ -30,6 +30,7 @@ class Config #Gold {
# getComponentcontext() : string # getComponentcontext() : string
# getComponentcodenamelength() : int # getComponentcodenamelength() : int
# getComponentautoloaderpath() : string # getComponentautoloaderpath() : string
# getComponentinstallerautoloaderpath() : string
# getAddnamespaceprefix() : bool # getAddnamespaceprefix() : bool
# getNamespaceprefix() : string # getNamespaceprefix() : string
# getJoomlaversion() : int # getJoomlaversion() : int
@ -207,413 +208,420 @@ note left of Config::getComponentautoloaderpath
return: string return: string
end note end note
note right of Config::getAddnamespaceprefix note right of Config::getComponentinstallerautoloaderpath
get component installer autoloader path
since: 5.0.2
return: string
end note
note left of Config::getAddnamespaceprefix
get add namespace prefix get add namespace prefix
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getNamespaceprefix note right of Config::getNamespaceprefix
get namespace prefix get namespace prefix
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note right of Config::getJoomlaversion note left of Config::getJoomlaversion
get posted Joomla version get posted Joomla version
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getJoomlaversions note right of Config::getJoomlaversions
get Joomla versions get Joomla versions
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note right of Config::getJoomlaversionname note left of Config::getJoomlaversionname
get posted Joomla version name get posted Joomla version name
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getSetjoomlafields note right of Config::getSetjoomlafields
set joomla fields set joomla fields
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getShowadvancedoptions note left of Config::getShowadvancedoptions
get show advanced options switch get show advanced options switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getIndentationvalue note right of Config::getIndentationvalue
get indentation value get indentation value
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note right of Config::getAddbuilddate note left of Config::getAddbuilddate
get add build date switch get add build date switch
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getBuilddate note right of Config::getBuilddate
get build date get build date
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note right of Config::getBackup note left of Config::getBackup
get posted backup switch get posted backup switch
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getRepository note right of Config::getRepository
get posted repository switch get posted repository switch
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note right of Config::getDebuglinenr note left of Config::getDebuglinenr
get posted debuglinenr switch get posted debuglinenr switch
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getMinify note right of Config::getMinify
get posted minify switch get posted minify switch
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note right of Config::getRemovelinebreaks note left of Config::getRemovelinebreaks
get posted remove line breaks switch get posted remove line breaks switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getTidy note right of Config::getTidy
get system tidy state get system tidy state
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getSettidywarning note left of Config::getSettidywarning
add tidy warning add tidy warning
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getSettaghistory note right of Config::getSettaghistory
get history tag switch get history tag switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getPercentagelanguageadd note left of Config::getPercentagelanguageadd
get percentage when a language should be added get percentage when a language should be added
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getLangtag note right of Config::getLangtag
get language tag get language tag
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note right of Config::getLangprefix note left of Config::getLangprefix
get language prefix get language prefix
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getLangtarget note right of Config::getLangtarget
get language target get language target
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note right of Config::getLangstringtargets note left of Config::getLangstringtargets
get language string targets get language string targets
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note left of Config::getLangstringkeytargets note right of Config::getLangstringkeytargets
get language string targets (by key name) get language string targets (by key name)
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note right of Config::getFieldbuildertype note left of Config::getFieldbuildertype
get field builder type get field builder type
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getDefaultfields note right of Config::getDefaultfields
get default fields get default fields
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note right of Config::getTmppath note left of Config::getTmppath
get temporary path get temporary path
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getCompilerpath note right of Config::getCompilerpath
get compiler path get compiler path
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note right of Config::getJcbpowerspath note left of Config::getJcbpowerspath
get jcb powers path get jcb powers path
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getPowerlibraryfolder note right of Config::getPowerlibraryfolder
get jcb powers path get jcb powers path
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note right of Config::getLocalpowersrepositorypath note left of Config::getLocalpowersrepositorypath
Get local super powers repository path Get local super powers repository path
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getApprovedpaths note right of Config::getApprovedpaths
Get super power approved paths Get super power approved paths
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note right of Config::getJoomlapowerscoreorganisation note left of Config::getJoomlapowerscoreorganisation
Get super power core organisation Get super power core organisation
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getJoomlapowersinitrepos note right of Config::getJoomlapowersinitrepos
Get Joomla power init repos Get Joomla power init repos
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note right of Config::getLocaljoomlapowersrepositorypath note left of Config::getLocaljoomlapowersrepositorypath
Get local joomla super powers repository path Get local joomla super powers repository path
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getApprovedjoomlapaths note right of Config::getApprovedjoomlapaths
Get joomla power approved paths Get joomla power approved paths
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note right of Config::getBompath note left of Config::getBompath
get bom path get bom path
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getCustomfolderpath note right of Config::getCustomfolderpath
get custom folder path get custom folder path
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note right of Config::getAddassetstablefix note left of Config::getAddassetstablefix
get switch to add assets table fix get switch to add assets table fix
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getAddassetstablenamefix note right of Config::getAddassetstablenamefix
get switch to add assets table name fix get switch to add assets table name fix
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getAccessworsecase note left of Config::getAccessworsecase
get access worse case size get access worse case size
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getMysqltablekeys note right of Config::getMysqltablekeys
get mysql table keys get mysql table keys
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note right of Config::getAddplaceholders note left of Config::getAddplaceholders
get switch add placeholders get switch add placeholders
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getAddpower note right of Config::getAddpower
get switch add power get switch add power
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getAddsuperpowers note left of Config::getAddsuperpowers
Get switch to add super powers Get switch to add super powers
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getAddownpowers note right of Config::getAddownpowers
Get switch to add own super powers Get switch to add own super powers
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getBuildtarget note left of Config::getBuildtarget
get switch build target switch get switch build target switch
since: 3.2.0 since: 3.2.0
return: string return: string
end note end note
note left of Config::getCryptiontypes note right of Config::getCryptiontypes
get encryption types get encryption types
since: 3.2.0 since: 3.2.0
return: array return: array
end note end note
note right of Config::getBasicencryption note left of Config::getBasicencryption
get basic encryption switch get basic encryption switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getMediumencryption note right of Config::getMediumencryption
get medium encryption switch get medium encryption switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getWhmcsencryption note left of Config::getWhmcsencryption
get whmcs encryption switch get whmcs encryption switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getRemovesitefolder note right of Config::getRemovesitefolder
Should we remove the site folder Should we remove the site folder
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getRemovesiteeditfolder note left of Config::getRemovesiteeditfolder
Should we remove the site edit folder Should we remove the site edit folder
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getUikit note right of Config::getUikit
The Uikit switch The Uikit switch
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note right of Config::getGooglechart note left of Config::getGooglechart
The google chart switch The google chart switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note left of Config::getFootable note right of Config::getFootable
The footable switch The footable switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getFootableversion note left of Config::getFootableversion
The footable version The footable version
since: 3.2.0 since: 3.2.0
return: int return: int
end note end note
note left of Config::getPermissionstrictperfield note right of Config::getPermissionstrictperfield
The Permission Strict Per Field Switch The Permission Strict Per Field Switch
since: 3.2.0 since: 3.2.0
return: bool return: bool
end note end note
note right of Config::getExporttextonly note left of Config::getExporttextonly
The Export Text Only Switch The Export Text Only Switch
since: 3.2.0 since: 3.2.0

View File

@ -303,6 +303,24 @@ class Config extends BaseConfig
} }
} }
/**
* get component installer autoloader path
*
* @return string The component installer autoloader path
* @since 5.0.2
*/
protected function getComponentinstallerautoloaderpath(): string
{
if ($this->joomla_version == 3)
{
return 'script_powerloader.php';
}
else
{
return ucfirst($this->component_codename) . 'InstallerPowerloader.php';
}
}
/** /**
* get add namespace prefix * get add namespace prefix
* *

View File

@ -267,6 +267,24 @@
} }
} }
/**
* get component installer autoloader path
*
* @return string The component installer autoloader path
* @since 5.0.2
*/
protected function getComponentinstallerautoloaderpath(): string
{
if ($this->joomla_version == 3)
{
return 'script_powerloader.php';
}
else
{
return ucfirst($this->component_codename) . 'InstallerPowerloader.php';
}
}
/** /**
* get add namespace prefix * get add namespace prefix
* *

View File

@ -32,6 +32,17 @@
"spk": "Super---01411bb1_fdd6_4cca_84d7_1b62d93c70c1---Power", "spk": "Super---01411bb1_fdd6_4cca_84d7_1b62d93c70c1---Power",
"guid": "01411bb1-fdd6-4cca-84d7-1b62d93c70c1" "guid": "01411bb1-fdd6-4cca-84d7-1b62d93c70c1"
}, },
"025d5903-cfdf-4624-aebb-10d02075e265": {
"name": "AllowEditViewsInterface",
"type": "interface",
"namespace": "VDM\\Joomla\\Componentbuilder\\Compiler\\Interfaces\\Architecture\\Controller",
"code": "src\/025d5903-cfdf-4624-aebb-10d02075e265\/code.php",
"power": "src\/025d5903-cfdf-4624-aebb-10d02075e265\/code.power",
"settings": "src\/025d5903-cfdf-4624-aebb-10d02075e265\/settings.json",
"path": "src\/025d5903-cfdf-4624-aebb-10d02075e265",
"spk": "Super---025d5903_cfdf_4624_aebb_10d02075e265---Power",
"guid": "025d5903-cfdf-4624-aebb-10d02075e265"
},
"02bc072b-1e89-46c1-9732-4da77b1a9ac9": { "02bc072b-1e89-46c1-9732-4da77b1a9ac9": {
"name": "Power", "name": "Power",
"type": "class", "type": "class",
@ -1935,6 +1946,17 @@
"spk": "Super---7c07c9d6_34cd_4491_934a_ef0a83f414c0---Power", "spk": "Super---7c07c9d6_34cd_4491_934a_ef0a83f414c0---Power",
"guid": "7c07c9d6-34cd-4491-934a-ef0a83f414c0" "guid": "7c07c9d6-34cd-4491-934a-ef0a83f414c0"
}, },
"7ecd7318-8bea-4321-8f13-626da1ab01c7": {
"name": "AllowEditViews",
"type": "final class",
"namespace": "VDM\\Joomla\\Componentbuilder\\Compiler\\Architecture\\JoomlaFive\\Controller",
"code": "src\/7ecd7318-8bea-4321-8f13-626da1ab01c7\/code.php",
"power": "src\/7ecd7318-8bea-4321-8f13-626da1ab01c7\/code.power",
"settings": "src\/7ecd7318-8bea-4321-8f13-626da1ab01c7\/settings.json",
"path": "src\/7ecd7318-8bea-4321-8f13-626da1ab01c7",
"spk": "Super---7ecd7318_8bea_4321_8f13_626da1ab01c7---Power",
"guid": "7ecd7318-8bea-4321-8f13-626da1ab01c7"
},
"7f01622a-74c9-4e67-b111-3eb488035206": { "7f01622a-74c9-4e67-b111-3eb488035206": {
"name": "Permission", "name": "Permission",
"type": "final class", "type": "final class",
@ -2969,6 +2991,17 @@
"spk": "Super---bcf1e767_1566_440d_9f67_5c1bada934fa---Power", "spk": "Super---bcf1e767_1566_440d_9f67_5c1bada934fa---Power",
"guid": "bcf1e767-1566-440d-9f67-5c1bada934fa" "guid": "bcf1e767-1566-440d-9f67-5c1bada934fa"
}, },
"bdb74844-7cba-4227-a01c-355eba5fd031": {
"name": "AllowEditViews",
"type": "final class",
"namespace": "VDM\\Joomla\\Componentbuilder\\Compiler\\Architecture\\JoomlaThree\\Controller",
"code": "src\/bdb74844-7cba-4227-a01c-355eba5fd031\/code.php",
"power": "src\/bdb74844-7cba-4227-a01c-355eba5fd031\/code.power",
"settings": "src\/bdb74844-7cba-4227-a01c-355eba5fd031\/settings.json",
"path": "src\/bdb74844-7cba-4227-a01c-355eba5fd031",
"spk": "Super---bdb74844_7cba_4227_a01c_355eba5fd031---Power",
"guid": "bdb74844-7cba-4227-a01c-355eba5fd031"
},
"be4ccfae-65a9-401e-bdbe-637d8c226954": { "be4ccfae-65a9-401e-bdbe-637d8c226954": {
"name": "Config", "name": "Config",
"type": "class", "type": "class",
@ -3035,6 +3068,17 @@
"spk": "Super---c20a63e0_0eeb_4424_9d08_b1bf0f049dfe---Power", "spk": "Super---c20a63e0_0eeb_4424_9d08_b1bf0f049dfe---Power",
"guid": "c20a63e0-0eeb-4424-9d08-b1bf0f049dfe" "guid": "c20a63e0-0eeb-4424-9d08-b1bf0f049dfe"
}, },
"c2453304-c9ac-4d67-a045-fbda68876434": {
"name": "AllowEditViews",
"type": "final class",
"namespace": "VDM\\Joomla\\Componentbuilder\\Compiler\\Architecture\\JoomlaFour\\Controller",
"code": "src\/c2453304-c9ac-4d67-a045-fbda68876434\/code.php",
"power": "src\/c2453304-c9ac-4d67-a045-fbda68876434\/code.power",
"settings": "src\/c2453304-c9ac-4d67-a045-fbda68876434\/settings.json",
"path": "src\/c2453304-c9ac-4d67-a045-fbda68876434",
"spk": "Super---c2453304_c9ac_4d67_a045_fbda68876434---Power",
"guid": "c2453304-c9ac-4d67-a045-fbda68876434"
},
"c600f58c-3fe2-4d2d-b711-2660eab6effe": { "c600f58c-3fe2-4d2d-b711-2660eab6effe": {
"name": "InputButtonInterface", "name": "InputButtonInterface",
"type": "interface", "type": "interface",