update 2024-01-27

This commit is contained in:
Robot 2024-01-27 09:09:33 +02:00
parent 3e3cd1e212
commit c7492eb08e
Signed by: Robot
GPG Key ID: 14DECD44E7E1BB95
401 changed files with 35844 additions and 6076 deletions

View File

@ -64,12 +64,16 @@ This repository contains an index (see below) of all the approved powers within
- **final class AccessSwitchList** | [Details](src/81212121-ad5c-43c5-b046-f2650864f690) | [Code](src/81212121-ad5c-43c5-b046-f2650864f690/code.php) | [Settings](src/81212121-ad5c-43c5-b046-f2650864f690/settings.json) | Super__81212121_ad5c_43c5_b046_f2650864f690__Power
- **final class AdminFilterType** | [Details](src/9481caa2-6d04-4598-8320-543a93927243) | [Code](src/9481caa2-6d04-4598-8320-543a93927243/code.php) | [Settings](src/9481caa2-6d04-4598-8320-543a93927243/settings.json) | Super__9481caa2_6d04_4598_8320_543a93927243__Power
- **final class Alias** | [Details](src/fe87df7f-b65f-4778-8875-6122ab6b025f) | [Code](src/fe87df7f-b65f-4778-8875-6122ab6b025f/code.php) | [Settings](src/fe87df7f-b65f-4778-8875-6122ab6b025f/settings.json) | Super__fe87df7f_b65f_4778_8875_6122ab6b025f__Power
- **final class AssetsRules** | [Details](src/9b5872d6-c1d8-4602-b443-5844d2c950ee) | [Code](src/9b5872d6-c1d8-4602-b443-5844d2c950ee/code.php) | [Settings](src/9b5872d6-c1d8-4602-b443-5844d2c950ee/settings.json) | Super__9b5872d6_c1d8_4602_b443_5844d2c950ee__Power
- **final class BaseSixFour** | [Details](src/b8b474d4-30e3-4b5a-9988-3adb3450998c) | [Code](src/b8b474d4-30e3-4b5a-9988-3adb3450998c/code.php) | [Settings](src/b8b474d4-30e3-4b5a-9988-3adb3450998c/settings.json) | Super__b8b474d4_30e3_4b5a_9988_3adb3450998c__Power
- **final class Category** | [Details](src/007177eb-d39d-4093-8840-07a38811c502) | [Code](src/007177eb-d39d-4093-8840-07a38811c502/code.php) | [Settings](src/007177eb-d39d-4093-8840-07a38811c502/settings.json) | Super__007177eb_d39d_4093_8840_07a38811c502__Power
- **final class CategoryCode** | [Details](src/b24f5184-7e7c-448d-9475-ff3f998f70c3) | [Code](src/b24f5184-7e7c-448d-9475-ff3f998f70c3/code.php) | [Settings](src/b24f5184-7e7c-448d-9475-ff3f998f70c3/settings.json) | Super__b24f5184_7e7c_448d_9475_ff3f998f70c3__Power
- **final class CategoryOtherName** | [Details](src/a1e551a9-8369-48c9-a076-4e5beb65e0df) | [Code](src/a1e551a9-8369-48c9-a076-4e5beb65e0df/code.php) | [Settings](src/a1e551a9-8369-48c9-a076-4e5beb65e0df/settings.json) | Super__a1e551a9_8369_48c9_a076_4e5beb65e0df__Power
- **final class CheckBox** | [Details](src/8561f1f6-96c7-4e54-8869-0132116d57ce) | [Code](src/8561f1f6-96c7-4e54-8869-0132116d57ce/code.php) | [Settings](src/8561f1f6-96c7-4e54-8869-0132116d57ce/settings.json) | Super__8561f1f6_96c7_4e54_8869_0132116d57ce__Power
- **final class ComponentFields** | [Details](src/3230dd65-6590-4043-9bb8-bebd6d8224b2) | [Code](src/3230dd65-6590-4043-9bb8-bebd6d8224b2/code.php) | [Settings](src/3230dd65-6590-4043-9bb8-bebd6d8224b2/settings.json) | Super__3230dd65_6590_4043_9bb8_bebd6d8224b2__Power
- **final class ConfigFieldsets** | [Details](src/0a524af3-f647-4f62-a422-d7d36ebe749b) | [Code](src/0a524af3-f647-4f62-a422-d7d36ebe749b/code.php) | [Settings](src/0a524af3-f647-4f62-a422-d7d36ebe749b/settings.json) | Super__0a524af3_f647_4f62_a422_d7d36ebe749b__Power
- **final class ConfigFieldsetsCustomfield** | [Details](src/ed314bd8-c995-4282-bcaa-5e0a68ac401b) | [Code](src/ed314bd8-c995-4282-bcaa-5e0a68ac401b/code.php) | [Settings](src/ed314bd8-c995-4282-bcaa-5e0a68ac401b/settings.json) | Super__ed314bd8_c995_4282_bcaa_5e0a68ac401b__Power
- **final class Contributors** | [Details](src/274a78d1-24c2-4486-b560-b86e9ae72872) | [Code](src/274a78d1-24c2-4486-b560-b86e9ae72872/code.php) | [Settings](src/274a78d1-24c2-4486-b560-b86e9ae72872/settings.json) | Super__274a78d1_24c2_4486_b560_b86e9ae72872__Power
- **final class CustomAlias** | [Details](src/9d74d613-5ef7-4cf1-9f12-64f0a8e19806) | [Code](src/9d74d613-5ef7-4cf1-9f12-64f0a8e19806/code.php) | [Settings](src/9d74d613-5ef7-4cf1-9f12-64f0a8e19806/settings.json) | Super__9d74d613_5ef7_4cf1_9f12_64f0a8e19806__Power
- **final class CustomField** | [Details](src/87d1da23-08d6-4fbf-bd0d-b746da240b8a) | [Code](src/87d1da23-08d6-4fbf-bd0d-b746da240b8a/code.php) | [Settings](src/87d1da23-08d6-4fbf-bd0d-b746da240b8a/settings.json) | Super__87d1da23_08d6_4fbf_bd0d_b746da240b8a__Power
- **final class CustomFieldLinks** | [Details](src/a4857c60-680c-4e0c-ae8f-9250a7b5e317) | [Code](src/a4857c60-680c-4e0c-ae8f-9250a7b5e317/code.php) | [Settings](src/a4857c60-680c-4e0c-ae8f-9250a7b5e317/settings.json) | Super__a4857c60_680c_4e0c_ae8f_9250a7b5e317__Power
@ -82,14 +86,17 @@ This repository contains an index (see below) of all the approved powers within
- **final class DoNotEscape** | [Details](src/0d9d3294-0bed-4c44-b1a1-e172f62cafb2) | [Code](src/0d9d3294-0bed-4c44-b1a1-e172f62cafb2/code.php) | [Settings](src/0d9d3294-0bed-4c44-b1a1-e172f62cafb2/settings.json) | Super__0d9d3294_0bed_4c44_b1a1_e172f62cafb2__Power
- **final class DynamicFields** | [Details](src/1ae9a8e8-59f7-4844-a08d-9a4dce4be076) | [Code](src/1ae9a8e8-59f7-4844-a08d-9a4dce4be076/code.php) | [Settings](src/1ae9a8e8-59f7-4844-a08d-9a4dce4be076/settings.json) | Super__1ae9a8e8_59f7_4844_a08d_9a4dce4be076__Power
- **final class ExtensionCustomFields** | [Details](src/e9b6b06b-f600-4f9d-984d-79c70ae7ae92) | [Code](src/e9b6b06b-f600-4f9d-984d-79c70ae7ae92/code.php) | [Settings](src/e9b6b06b-f600-4f9d-984d-79c70ae7ae92/settings.json) | Super__e9b6b06b_f600_4f9d_984d_79c70ae7ae92__Power
- **final class ExtensionsParams** | [Details](src/bcf1e767-1566-440d-9f67-5c1bada934fa) | [Code](src/bcf1e767-1566-440d-9f67-5c1bada934fa/code.php) | [Settings](src/bcf1e767-1566-440d-9f67-5c1bada934fa/settings.json) | Super__bcf1e767_1566_440d_9f67_5c1bada934fa__Power
- **final class FieldGroupControl** | [Details](src/d5530adf-c809-45a9-87fc-7cecd3d972d8) | [Code](src/d5530adf-c809-45a9-87fc-7cecd3d972d8/code.php) | [Settings](src/d5530adf-c809-45a9-87fc-7cecd3d972d8/settings.json) | Super__d5530adf_c809_45a9_87fc_7cecd3d972d8__Power
- **final class FieldNames** | [Details](src/961a2a2e-9f95-4b5f-b1c0-62ee783f9c66) | [Code](src/961a2a2e-9f95-4b5f-b1c0-62ee783f9c66/code.php) | [Settings](src/961a2a2e-9f95-4b5f-b1c0-62ee783f9c66/settings.json) | Super__961a2a2e_9f95_4b5f_b1c0_62ee783f9c66__Power
- **final class FieldRelations** | [Details](src/a090a472-eb3d-4086-a6d5-4215e1b1851f) | [Code](src/a090a472-eb3d-4086-a6d5-4215e1b1851f/code.php) | [Settings](src/a090a472-eb3d-4086-a6d5-4215e1b1851f/settings.json) | Super__a090a472_eb3d_4086_a6d5_4215e1b1851f__Power
- **final class Filter** | [Details](src/e4e65c5b-00ec-439c-96bf-3153c3a73398) | [Code](src/e4e65c5b-00ec-439c-96bf-3153c3a73398/code.php) | [Settings](src/e4e65c5b-00ec-439c-96bf-3153c3a73398/settings.json) | Super__e4e65c5b_00ec_439c_96bf_3153c3a73398__Power
- **final class FootableScripts** | [Details](src/dba0776e-e582-4f73-af3e-e7ed17bc34b3) | [Code](src/dba0776e-e582-4f73-af3e-e7ed17bc34b3/code.php) | [Settings](src/dba0776e-e582-4f73-af3e-e7ed17bc34b3/settings.json) | Super__dba0776e_e582_4f73_af3e_e7ed17bc34b3__Power
- **final class FrontendParams** | [Details](src/207b5ef3-b3bb-45bf-af14-4572e296d761) | [Code](src/207b5ef3-b3bb-45bf-af14-4572e296d761/code.php) | [Settings](src/207b5ef3-b3bb-45bf-af14-4572e296d761/settings.json) | Super__207b5ef3_b3bb_45bf_af14_4572e296d761__Power
- **final class GetAsLookup** | [Details](src/8f46f85d-7921-44e9-a40e-dc4f01c5d43a) | [Code](src/8f46f85d-7921-44e9-a40e-dc4f01c5d43a/code.php) | [Settings](src/8f46f85d-7921-44e9-a40e-dc4f01c5d43a/settings.json) | Super__8f46f85d_7921_44e9_a40e_dc4f01c5d43a__Power
- **final class GetModule** | [Details](src/c7b6f0d5-ec47-4166-915c-e78d49b4fb63) | [Code](src/c7b6f0d5-ec47-4166-915c-e78d49b4fb63/code.php) | [Settings](src/c7b6f0d5-ec47-4166-915c-e78d49b4fb63/settings.json) | Super__c7b6f0d5_ec47_4166_915c_e78d49b4fb63__Power
- **final class GoogleChart** | [Details](src/507ab90f-7d64-4697-9815-d96f5d1d1185) | [Code](src/507ab90f-7d64-4697-9815-d96f5d1d1185/code.php) | [Settings](src/507ab90f-7d64-4697-9815-d96f5d1d1185/settings.json) | Super__507ab90f_7d64_4697_9815_d96f5d1d1185__Power
- **final class HasMenuGlobal** | [Details](src/6992384f-4f29-489f-a52e-286e03f4593b) | [Code](src/6992384f-4f29-489f-a52e-286e03f4593b/code.php) | [Settings](src/6992384f-4f29-489f-a52e-286e03f4593b/settings.json) | Super__6992384f_4f29_489f_a52e_286e03f4593b__Power
- **final class HasPermissions** | [Details](src/e54965e7-34fd-481e-b40c-4da089afec5a) | [Code](src/e54965e7-34fd-481e-b40c-4da089afec5a/code.php) | [Settings](src/e54965e7-34fd-481e-b40c-4da089afec5a/settings.json) | Super__e54965e7_34fd_481e_b40c_4da089afec5a__Power
- **final class HiddenFields** | [Details](src/0b45357f-b077-4337-92f3-65c1e19d36cd) | [Code](src/0b45357f-b077-4337-92f3-65c1e19d36cd/code.php) | [Settings](src/0b45357f-b077-4337-92f3-65c1e19d36cd/settings.json) | Super__0b45357f_b077_4337_92f3_65c1e19d36cd__Power
- **final class History** | [Details](src/2cb33994-052e-42dd-adbc-3ea9f932816f) | [Code](src/2cb33994-052e-42dd-adbc-3ea9f932816f/code.php) | [Settings](src/2cb33994-052e-42dd-adbc-3ea9f932816f/settings.json) | Super__2cb33994_052e_42dd_adbc_3ea9f932816f__Power
@ -99,6 +106,7 @@ This repository contains an index (see below) of all the approved powers within
- **final class JsonItem** | [Details](src/45652787-9085-4c67-914f-0da25ae62646) | [Code](src/45652787-9085-4c67-914f-0da25ae62646/code.php) | [Settings](src/45652787-9085-4c67-914f-0da25ae62646/settings.json) | Super__45652787_9085_4c67_914f_0da25ae62646__Power
- **final class JsonItemArray** | [Details](src/6b386f2e-3eb1-4f60-81af-a90c8da1ffeb) | [Code](src/6b386f2e-3eb1-4f60-81af-a90c8da1ffeb/code.php) | [Settings](src/6b386f2e-3eb1-4f60-81af-a90c8da1ffeb/settings.json) | Super__6b386f2e_3eb1_4f60_81af_a90c8da1ffeb__Power
- **final class JsonString** | [Details](src/bb26cf63-69a5-4c43-b2df-43284c9d907d) | [Code](src/bb26cf63-69a5-4c43-b2df-43284c9d907d/code.php) | [Settings](src/bb26cf63-69a5-4c43-b2df-43284c9d907d/settings.json) | Super__bb26cf63_69a5_4c43_b2df_43284c9d907d__Power
- **final class LanguageMessages** | [Details](src/44efa649-736d-4656-a0ec-e4f1653a6742) | [Code](src/44efa649-736d-4656-a0ec-e4f1653a6742/code.php) | [Settings](src/44efa649-736d-4656-a0ec-e4f1653a6742/settings.json) | Super__44efa649_736d_4656_a0ec_e4f1653a6742__Power
- **final class Layout** | [Details](src/a90a2495-9c26-446c-867e-9ee8f42fb6af) | [Code](src/a90a2495-9c26-446c-867e-9ee8f42fb6af/code.php) | [Settings](src/a90a2495-9c26-446c-867e-9ee8f42fb6af/settings.json) | Super__a90a2495_9c26_446c_867e_9ee8f42fb6af__Power
- **final class LayoutData** | [Details](src/7415fdb4-5719-40b7-b01f-05588e968b47) | [Code](src/7415fdb4-5719-40b7-b01f-05588e968b47/code.php) | [Settings](src/7415fdb4-5719-40b7-b01f-05588e968b47/settings.json) | Super__7415fdb4_5719_40b7_b01f_05588e968b47__Power
- **final class LibraryManager** | [Details](src/e696927b-e8f4-4cfc-9d25-215db4e3c7a8) | [Code](src/e696927b-e8f4-4cfc-9d25-215db4e3c7a8/code.php) | [Settings](src/e696927b-e8f4-4cfc-9d25-215db4e3c7a8/settings.json) | Super__e696927b_e8f4_4cfc_9d25_215db4e3c7a8__Power
@ -127,8 +135,10 @@ This repository contains an index (see below) of all the approved powers within
- **final class PermissionComponent** | [Details](src/94f4939f-82cc-4196-802b-1346ce5c7f99) | [Code](src/94f4939f-82cc-4196-802b-1346ce5c7f99/code.php) | [Settings](src/94f4939f-82cc-4196-802b-1346ce5c7f99/settings.json) | Super__94f4939f_82cc_4196_802b_1346ce5c7f99__Power
- **final class PermissionCore** | [Details](src/5e3d856d-8174-4131-b4e9-9328066438e1) | [Code](src/5e3d856d-8174-4131-b4e9-9328066438e1/code.php) | [Settings](src/5e3d856d-8174-4131-b4e9-9328066438e1/settings.json) | Super__5e3d856d_8174_4131_b4e9_9328066438e1__Power
- **final class PermissionDashboard** | [Details](src/e046b530-47fe-406f-b45a-b5eec8cbb238) | [Code](src/e046b530-47fe-406f-b45a-b5eec8cbb238/code.php) | [Settings](src/e046b530-47fe-406f-b45a-b5eec8cbb238/settings.json) | Super__e046b530_47fe_406f_b45a_b5eec8cbb238__Power
- **final class PermissionFields** | [Details](src/5133a033-1351-43ec-9692-2907d7b9aacd) | [Code](src/5133a033-1351-43ec-9692-2907d7b9aacd/code.php) | [Settings](src/5133a033-1351-43ec-9692-2907d7b9aacd/settings.json) | Super__5133a033_1351_43ec_9692_2907d7b9aacd__Power
- **final class PermissionGlobalAction** | [Details](src/a601888d-12b6-427f-94ae-95004206e24e) | [Code](src/a601888d-12b6-427f-94ae-95004206e24e/code.php) | [Settings](src/a601888d-12b6-427f-94ae-95004206e24e/settings.json) | Super__a601888d_12b6_427f_94ae_95004206e24e__Power
- **final class PermissionViews** | [Details](src/480d11b9-783b-45d5-bce1-b0c2fcaad08a) | [Code](src/480d11b9-783b-45d5-bce1-b0c2fcaad08a/code.php) | [Settings](src/480d11b9-783b-45d5-bce1-b0c2fcaad08a/settings.json) | Super__480d11b9_783b_45d5_bce1_b0c2fcaad08a__Power
- **final class Request** | [Details](src/98419ff3-6628-4539-8365-37f88378bced) | [Code](src/98419ff3-6628-4539-8365-37f88378bced/code.php) | [Settings](src/98419ff3-6628-4539-8365-37f88378bced/settings.json) | Super__98419ff3_6628_4539_8365_37f88378bced__Power
- **final class ScriptMediaSwitch** | [Details](src/17bf80af-3609-4f36-a520-be1a339c278b) | [Code](src/17bf80af-3609-4f36-a520-be1a339c278b/code.php) | [Settings](src/17bf80af-3609-4f36-a520-be1a339c278b/settings.json) | Super__17bf80af_3609_4f36_a520_be1a339c278b__Power
- **final class ScriptUserSwitch** | [Details](src/9042fac6-5ca5-4ebe-94fe-cf9b0718ed36) | [Code](src/9042fac6-5ca5-4ebe-94fe-cf9b0718ed36/code.php) | [Settings](src/9042fac6-5ca5-4ebe-94fe-cf9b0718ed36/settings.json) | Super__9042fac6_5ca5_4ebe_94fe_cf9b0718ed36__Power
- **final class Search** | [Details](src/2e764839-8ec6-4726-af50-b5678e0714a4) | [Code](src/2e764839-8ec6-4726-af50-b5678e0714a4/code.php) | [Settings](src/2e764839-8ec6-4726-af50-b5678e0714a4/settings.json) | Super__2e764839_8ec6_4726_af50_b5678e0714a4__Power
@ -146,6 +156,7 @@ This repository contains an index (see below) of all the approved powers within
- **final class TemplateData** | [Details](src/8591f6db-dd3c-4a63-9b3f-574c0ec74ade) | [Code](src/8591f6db-dd3c-4a63-9b3f-574c0ec74ade/code.php) | [Settings](src/8591f6db-dd3c-4a63-9b3f-574c0ec74ade/settings.json) | Super__8591f6db_dd3c_4a63_9b3f_574c0ec74ade__Power
- **final class Title** | [Details](src/6a1dddb3-a955-425e-b713-8ef81f256035) | [Code](src/6a1dddb3-a955-425e-b713-8ef81f256035/code.php) | [Settings](src/6a1dddb3-a955-425e-b713-8ef81f256035/settings.json) | Super__6a1dddb3_a955_425e_b713_8ef81f256035__Power
- **final class UikitComp** | [Details](src/54ec57f6-2fc3-42e5-975e-1fabeacb845d) | [Code](src/54ec57f6-2fc3-42e5-975e-1fabeacb845d/code.php) | [Settings](src/54ec57f6-2fc3-42e5-975e-1fabeacb845d/settings.json) | Super__54ec57f6_2fc3_42e5_975e_1fabeacb845d__Power
- **final class ViewsDefaultOrdering** | [Details](src/f34442df-c84c-44c3-9991-bbf72bffa635) | [Code](src/f34442df-c84c-44c3-9991-bbf72bffa635/code.php) | [Settings](src/f34442df-c84c-44c3-9991-bbf72bffa635/settings.json) | Super__f34442df_c84c_44c3_9991_bbf72bffa635__Power
- **class ContentMulti** | [Details](src/5f57ff1a-c196-45b1-a2ac-33766b44fb95) | [Code](src/5f57ff1a-c196-45b1-a2ac-33766b44fb95/code.php) | [Settings](src/5f57ff1a-c196-45b1-a2ac-33766b44fb95/settings.json) | Super__5f57ff1a_c196_45b1_a2ac_33766b44fb95__Power
- **class ContentOne** | [Details](src/adfbe68a-6d22-43e5-aee8-2787e8c47e75) | [Code](src/adfbe68a-6d22-43e5-aee8-2787e8c47e75/code.php) | [Settings](src/adfbe68a-6d22-43e5-aee8-2787e8c47e75/settings.json) | Super__adfbe68a_6d22_43e5_aee8_2787e8c47e75__Power
- **class UpdateMysql** | [Details](src/2b5c9989-1d4e-4f59-8b95-5cd2f72f82d9) | [Code](src/2b5c9989-1d4e-4f59-8b95-5cd2f72f82d9/code.php) | [Settings](src/2b5c9989-1d4e-4f59-8b95-5cd2f72f82d9/settings.json) | Super__2b5c9989_1d4e_4f59_8b95_5cd2f72f82d9__Power
@ -154,13 +165,25 @@ This repository contains an index (see below) of all the approved powers within
- **final class Dashboard** | [Details](src/cfe62a32-8818-4bfb-8751-2f1e109b5336) | [Code](src/cfe62a32-8818-4bfb-8751-2f1e109b5336/code.php) | [Settings](src/cfe62a32-8818-4bfb-8751-2f1e109b5336/settings.json) | Super__cfe62a32_8818_4bfb_8751_2f1e109b5336__Power
- **final class Data** | [Details](src/ef9578e5-4c9d-46bf-866f-3a94bdc7b753) | [Code](src/ef9578e5-4c9d-46bf-866f-3a94bdc7b753/code.php) | [Settings](src/ef9578e5-4c9d-46bf-866f-3a94bdc7b753/settings.json) | Super__ef9578e5_4c9d_46bf_866f_3a94bdc7b753__Power
- **final class Placeholder** | [Details](src/aecc17ba-0b0f-4e5c-ae43-71be063a3dcb) | [Code](src/aecc17ba-0b0f-4e5c-ae43-71be063a3dcb/code.php) | [Settings](src/aecc17ba-0b0f-4e5c-ae43-71be063a3dcb/settings.json) | Super__aecc17ba_0b0f_4e5c_ae43_71be063a3dcb__Power
- **final class Settings** | [Details](src/63dabe82-0f4a-4ade-9851-8518ade23de2) | [Code](src/63dabe82-0f4a-4ade-9851-8518ade23de2/code.php) | [Settings](src/63dabe82-0f4a-4ade-9851-8518ade23de2/settings.json) | Super__63dabe82_0f4a_4ade_9851_8518ade23de2__Power
- **final class Structure** | [Details](src/6c89c663-78f5-4078-9fac-7047f2eaaf96) | [Code](src/6c89c663-78f5-4078-9fac-7047f2eaaf96/code.php) | [Settings](src/6c89c663-78f5-4078-9fac-7047f2eaaf96/settings.json) | Super__6c89c663_78f5_4078_9fac_7047f2eaaf96__Power
- **final class Structuremultiple** | [Details](src/b69a23db-0a62-4840-a9c5-b2d8d63ecc6c) | [Code](src/b69a23db-0a62-4840-a9c5-b2d8d63ecc6c/code.php) | [Settings](src/b69a23db-0a62-4840-a9c5-b2d8d63ecc6c/settings.json) | Super__b69a23db_0a62_4840_a9c5_b2d8d63ecc6c__Power
- **final class Structuresingle** | [Details](src/673954d3-78d3-445a-b99f-4b40d617c882) | [Code](src/673954d3-78d3-445a-b99f-4b40d617c882/code.php) | [Settings](src/673954d3-78d3-445a-b99f-4b40d617c882/settings.json) | Super__673954d3_78d3_445a_b99f_4b40d617c882__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Creator](#vdm-joomla-componentbuilder-compiler-creator)
- **final class AccessSections** | [Details](src/15615db0-02b9-454f-a82e-1ab39ae5e6a9) | [Code](src/15615db0-02b9-454f-a82e-1ab39ae5e6a9/code.php) | [Settings](src/15615db0-02b9-454f-a82e-1ab39ae5e6a9/settings.json) | Super__15615db0_02b9_454f_a82e_1ab39ae5e6a9__Power
- **final class AccessSectionsCategory** | [Details](src/6d179307-b6e5-4f50-962b-5b6360d0759e) | [Code](src/6d179307-b6e5-4f50-962b-5b6360d0759e/code.php) | [Settings](src/6d179307-b6e5-4f50-962b-5b6360d0759e/settings.json) | Super__6d179307_b6e5_4f50_962b_5b6360d0759e__Power
- **final class AccessSectionsJoomlaFields** | [Details](src/396f9883-4e50-4b65-a1d5-05bd6c23df30) | [Code](src/396f9883-4e50-4b65-a1d5-05bd6c23df30/code.php) | [Settings](src/396f9883-4e50-4b65-a1d5-05bd6c23df30/settings.json) | Super__396f9883_4e50_4b65_a1d5_05bd6c23df30__Power
- **final class Builders** | [Details](src/55278140-80d5-4168-8241-d64515c4b35e) | [Code](src/55278140-80d5-4168-8241-d64515c4b35e/code.php) | [Settings](src/55278140-80d5-4168-8241-d64515c4b35e/settings.json) | Super__55278140_80d5_4168_8241_d64515c4b35e__Power
- **final class ConfigFieldsets** | [Details](src/20cf1825-29d0-4c6c-8fe9-a1e13a4dac53) | [Code](src/20cf1825-29d0-4c6c-8fe9-a1e13a4dac53/code.php) | [Settings](src/20cf1825-29d0-4c6c-8fe9-a1e13a4dac53/settings.json) | Super__20cf1825_29d0_4c6c_8fe9_a1e13a4dac53__Power
- **final class ConfigFieldsetsCustomfield** | [Details](src/208bc37c-0055-44df-9a34-63d6bfa10765) | [Code](src/208bc37c-0055-44df-9a34-63d6bfa10765/code.php) | [Settings](src/208bc37c-0055-44df-9a34-63d6bfa10765/settings.json) | Super__208bc37c_0055_44df_9a34_63d6bfa10765__Power
- **final class ConfigFieldsetsEmailHelper** | [Details](src/d80e58b8-8462-47c4-9dcd-380445f1c64a) | [Code](src/d80e58b8-8462-47c4-9dcd-380445f1c64a/code.php) | [Settings](src/d80e58b8-8462-47c4-9dcd-380445f1c64a/settings.json) | Super__d80e58b8_8462_47c4_9dcd_380445f1c64a__Power
- **final class ConfigFieldsetsEncryption** | [Details](src/5e3fc314-646b-4834-8b1a-1a79f3d4d2ab) | [Code](src/5e3fc314-646b-4834-8b1a-1a79f3d4d2ab/code.php) | [Settings](src/5e3fc314-646b-4834-8b1a-1a79f3d4d2ab/settings.json) | Super__5e3fc314_646b_4834_8b1a_1a79f3d4d2ab__Power
- **final class ConfigFieldsetsGlobal** | [Details](src/0fe3133d-1ff3-4444-9229-4218d8fb338e) | [Code](src/0fe3133d-1ff3-4444-9229-4218d8fb338e/code.php) | [Settings](src/0fe3133d-1ff3-4444-9229-4218d8fb338e/settings.json) | Super__0fe3133d_1ff3_4444_9229_4218d8fb338e__Power
- **final class ConfigFieldsetsGooglechart** | [Details](src/31c8127c-0d42-4e09-be81-7cf243c5b30f) | [Code](src/31c8127c-0d42-4e09-be81-7cf243c5b30f/code.php) | [Settings](src/31c8127c-0d42-4e09-be81-7cf243c5b30f/settings.json) | Super__31c8127c_0d42_4e09_be81_7cf243c5b30f__Power
- **final class ConfigFieldsetsGroupControl** | [Details](src/a8d9583a-6ddb-4aac-b0d1-4c2d2d1c8c74) | [Code](src/a8d9583a-6ddb-4aac-b0d1-4c2d2d1c8c74/code.php) | [Settings](src/a8d9583a-6ddb-4aac-b0d1-4c2d2d1c8c74/settings.json) | Super__a8d9583a_6ddb_4aac_b0d1_4c2d2d1c8c74__Power
- **final class ConfigFieldsetsSiteControl** | [Details](src/aac8502a-dbdf-42b6-a9ba-2c2e941f8b11) | [Code](src/aac8502a-dbdf-42b6-a9ba-2c2e941f8b11/code.php) | [Settings](src/aac8502a-dbdf-42b6-a9ba-2c2e941f8b11/settings.json) | Super__aac8502a_dbdf_42b6_a9ba_2c2e941f8b11__Power
- **final class ConfigFieldsetsUikit** | [Details](src/84c11075-570a-4907-9be0-9305e0fabe3c) | [Code](src/84c11075-570a-4907-9be0-9305e0fabe3c/code.php) | [Settings](src/84c11075-570a-4907-9be0-9305e0fabe3c/settings.json) | Super__84c11075_570a_4907_9be0_9305e0fabe3c__Power
- **final class CustomButtonPermissions** | [Details](src/8bf026e7-9ae0-423c-b74b-5bc16c54acf7) | [Code](src/8bf026e7-9ae0-423c-b74b-5bc16c54acf7/code.php) | [Settings](src/8bf026e7-9ae0-423c-b74b-5bc16c54acf7/settings.json) | Super__8bf026e7_9ae0_423c_b74b_5bc16c54acf7__Power
- **final class CustomFieldTypeFile** | [Details](src/6dced3d9-7d10-4ea1-bcf6-a5e6af4b9c96) | [Code](src/6dced3d9-7d10-4ea1-bcf6-a5e6af4b9c96/code.php) | [Settings](src/6dced3d9-7d10-4ea1-bcf6-a5e6af4b9c96/settings.json) | Super__6dced3d9_7d10_4ea1_bcf6_a5e6af4b9c96__Power
- **final class FieldAsString** | [Details](src/f48764e0-16c6-459c-8576-af7616f3b720) | [Code](src/f48764e0-16c6-459c-8576-af7616f3b720/code.php) | [Settings](src/f48764e0-16c6-459c-8576-af7616f3b720/settings.json) | Super__f48764e0_16c6_459c_8576_af7616f3b720__Power
- **final class FieldDynamic** | [Details](src/4801f8b0-4a4a-4eda-8f0e-cf77f042c35e) | [Code](src/4801f8b0-4a4a-4eda-8f0e-cf77f042c35e/code.php) | [Settings](src/4801f8b0-4a4a-4eda-8f0e-cf77f042c35e/settings.json) | Super__4801f8b0_4a4a_4eda_8f0e_cf77f042c35e__Power
@ -171,6 +194,7 @@ This repository contains an index (see below) of all the approved powers within
- **final class FieldsetXML** | [Details](src/79739667-72c6-4576-9830-7b1eb92e4791) | [Code](src/79739667-72c6-4576-9830-7b1eb92e4791/code.php) | [Settings](src/79739667-72c6-4576-9830-7b1eb92e4791/settings.json) | Super__79739667_72c6_4576_9830_7b1eb92e4791__Power
- **final class Layout** | [Details](src/a0f032db-2242-41df-8e4a-5e9e6f88201d) | [Code](src/a0f032db-2242-41df-8e4a-5e9e6f88201d/code.php) | [Settings](src/a0f032db-2242-41df-8e4a-5e9e6f88201d/settings.json) | Super__a0f032db_2242_41df_8e4a_5e9e6f88201d__Power
- **final class Permission** | [Details](src/7f01622a-74c9-4e67-b111-3eb488035206) | [Code](src/7f01622a-74c9-4e67-b111-3eb488035206/code.php) | [Settings](src/7f01622a-74c9-4e67-b111-3eb488035206/settings.json) | Super__7f01622a_74c9_4e67_b111_3eb488035206__Power
- **final class Request** | [Details](src/cfdf0968-f394-4459-933c-ad1674fb1041) | [Code](src/cfdf0968-f394-4459-933c-ad1674fb1041/code.php) | [Settings](src/cfdf0968-f394-4459-933c-ad1674fb1041/settings.json) | Super__cfdf0968_f394_4459_933c_ad1674fb1041__Power
- **final class SiteFieldData** | [Details](src/15b4addf-bf6b-4691-9c92-858c7de9c2c1) | [Code](src/15b4addf-bf6b-4691-9c92-858c7de9c2c1/code.php) | [Settings](src/15b4addf-bf6b-4691-9c92-858c7de9c2c1/settings.json) | Super__15b4addf_bf6b_4691_9c92_858c7de9c2c1__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Customcode](#vdm-joomla-componentbuilder-compiler-customcode)
@ -191,25 +215,31 @@ This repository contains an index (see below) of all the approved powers within
- **final class Attributes** | [Details](src/7f515c18-d019-4d2d-9852-b2dc970985b3) | [Code](src/7f515c18-d019-4d2d-9852-b2dc970985b3/code.php) | [Settings](src/7f515c18-d019-4d2d-9852-b2dc970985b3/settings.json) | Super__7f515c18_d019_4d2d_9852_b2dc970985b3__Power
- **final class Groups** | [Details](src/12df35ad-2d44-4c4c-a7d5-a3350932a520) | [Code](src/12df35ad-2d44-4c4c-a7d5-a3350932a520/code.php) | [Settings](src/12df35ad-2d44-4c4c-a7d5-a3350932a520/settings.json) | Super__12df35ad_2d44_4c4c_a7d5_a3350932a520__Power
- **final class InputButton** | [Details](src/c600f58c-3fe2-4d2d-b711-2660eab6effe) | [Code](src/c600f58c-3fe2-4d2d-b711-2660eab6effe/code.php) | [Settings](src/c600f58c-3fe2-4d2d-b711-2660eab6effe/settings.json) | Super__c600f58c_3fe2_4d2d_b711_2660eab6effe__Power
- **class Customcode** | [Details](src/a356d103-74f3-49ca-8e4f-3bd37746f089) | [Code](src/a356d103-74f3-49ca-8e4f-3bd37746f089/code.php) | [Settings](src/a356d103-74f3-49ca-8e4f-3bd37746f089/settings.json) | Super__a356d103_74f3_49ca_8e4f_3bd37746f089__Power
- **class Data** | [Details](src/ce826b66-0f2d-43da-8005-41b8e4cb21ee) | [Code](src/ce826b66-0f2d-43da-8005-41b8e4cb21ee/code.php) | [Settings](src/ce826b66-0f2d-43da-8005-41b8e4cb21ee/settings.json) | Super__ce826b66_0f2d_43da_8005_41b8e4cb21ee__Power
- **class DatabaseName** | [Details](src/99368a6f-2f64-4d4e-ad3a-544d4020ecc6) | [Code](src/99368a6f-2f64-4d4e-ad3a-544d4020ecc6/code.php) | [Settings](src/99368a6f-2f64-4d4e-ad3a-544d4020ecc6/settings.json) | Super__99368a6f_2f64_4d4e_ad3a_544d4020ecc6__Power
- **class Name** | [Details](src/9387215f-a965-4421-acf3-5e8f9d11382f) | [Code](src/9387215f-a965-4421-acf3-5e8f9d11382f/code.php) | [Settings](src/9387215f-a965-4421-acf3-5e8f9d11382f/settings.json) | Super__9387215f_a965_4421_acf3_5e8f9d11382f__Power
- **class Rule** | [Details](src/c871fb4a-4c33-4302-bb79-a9cd7ef4a557) | [Code](src/c871fb4a-4c33-4302-bb79-a9cd7ef4a557/code.php) | [Settings](src/c871fb4a-4c33-4302-bb79-a9cd7ef4a557/settings.json) | Super__c871fb4a_4c33_4302_bb79_a9cd7ef4a557__Power
- **class TypeName** | [Details](src/eb33420d-359d-44a5-852e-613aef1feaae) | [Code](src/eb33420d-359d-44a5-852e-613aef1feaae/code.php) | [Settings](src/eb33420d-359d-44a5-852e-613aef1feaae/settings.json) | Super__eb33420d_359d_44a5_852e_613aef1feaae__Power
- **class UniqueName** | [Details](src/8c018533-e967-4bf2-9bd9-9e92966fcb5e) | [Code](src/8c018533-e967-4bf2-9bd9-9e92966fcb5e/code.php) | [Settings](src/8c018533-e967-4bf2-9bd9-9e92966fcb5e/settings.json) | Super__8c018533_e967_4bf2_9bd9_9e92966fcb5e__Power
- **class Validation** | [Details](src/c871fb4a-4c33-4302-bb79-a9cd7ef4a557) | [Code](src/c871fb4a-4c33-4302-bb79-a9cd7ef4a557/code.php) | [Settings](src/c871fb4a-4c33-4302-bb79-a9cd7ef4a557/settings.json) | Super__c871fb4a_4c33_4302_bb79_a9cd7ef4a557__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Interfaces](#vdm-joomla-componentbuilder-compiler-interfaces)
- **interface CustomcodeInterface** | [Details](src/33bdc535-0ff1-40c8-bb22-b5d44f1731c4) | [Code](src/33bdc535-0ff1-40c8-bb22-b5d44f1731c4/code.php) | [Settings](src/33bdc535-0ff1-40c8-bb22-b5d44f1731c4/settings.json) | Super__33bdc535_0ff1_40c8_bb22_b5d44f1731c4__Power
- **interface EventInterface** | [Details](src/20ed72b0-fcac-4344-aee1-8a65e3bf221d) | [Code](src/20ed72b0-fcac-4344-aee1-8a65e3bf221d/code.php) | [Settings](src/20ed72b0-fcac-4344-aee1-8a65e3bf221d/settings.json) | Super__20ed72b0_fcac_4344_aee1_8a65e3bf221d__Power
- **interface GetScriptInterface** | [Details](src/2e6731ba-3a03-4836-b2c2-4e50e38cb890) | [Code](src/2e6731ba-3a03-4836-b2c2-4e50e38cb890/code.php) | [Settings](src/2e6731ba-3a03-4836-b2c2-4e50e38cb890/settings.json) | Super__2e6731ba_3a03_4836_b2c2_4e50e38cb890__Power
- **interface HeaderInterface** | [Details](src/3a777d70-52ad-49ec-9016-6f7438608613) | [Code](src/3a777d70-52ad-49ec-9016-6f7438608613/code.php) | [Settings](src/3a777d70-52ad-49ec-9016-6f7438608613/settings.json) | Super__3a777d70_52ad_49ec_9016_6f7438608613__Power
- **interface HistoryInterface** | [Details](src/4325745f-da1f-4d4d-a591-3189fe8c06e5) | [Code](src/4325745f-da1f-4d4d-a591-3189fe8c06e5/code.php) | [Settings](src/4325745f-da1f-4d4d-a591-3189fe8c06e5/settings.json) | Super__4325745f_da1f_4d4d_a591_3189fe8c06e5__Power
- **interface LanguageInterface** | [Details](src/d6592c9b-93a6-41b3-83c7-c43a0a80cb83) | [Code](src/d6592c9b-93a6-41b3-83c7-c43a0a80cb83/code.php) | [Settings](src/d6592c9b-93a6-41b3-83c7-c43a0a80cb83/settings.json) | Super__d6592c9b_93a6_41b3_83c7_c43a0a80cb83__Power
- **interface PlaceholderInterface** | [Details](src/a6cdd935-c038-4a54-8446-54bed87f003c) | [Code](src/a6cdd935-c038-4a54-8446-54bed87f003c/code.php) | [Settings](src/a6cdd935-c038-4a54-8446-54bed87f003c/settings.json) | Super__a6cdd935_c038_4a54_8446_54bed87f003c__Power
- **interface PowerInterface** | [Details](src/1133c2d7-ba7e-4c95-8cde-01f084d04682) | [Code](src/1133c2d7-ba7e-4c95-8cde-01f084d04682/code.php) | [Settings](src/1133c2d7-ba7e-4c95-8cde-01f084d04682/settings.json) | Super__1133c2d7_ba7e_4c95_8cde_01f084d04682__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\JoomlaFour](#vdm-joomla-componentbuilder-compiler-joomlafour)
- **final class Header** | [Details](src/1ee227b9-da0f-4e7b-ae66-99a9d53f6f49) | [Code](src/1ee227b9-da0f-4e7b-ae66-99a9d53f6f49/code.php) | [Settings](src/1ee227b9-da0f-4e7b-ae66-99a9d53f6f49/settings.json) | Super__1ee227b9_da0f_4e7b_ae66_99a9d53f6f49__Power
- **class Event** | [Details](src/4729c2b0-f12b-4397-8d77-055d38bca98b) | [Code](src/4729c2b0-f12b-4397-8d77-055d38bca98b/code.php) | [Settings](src/4729c2b0-f12b-4397-8d77-055d38bca98b/settings.json) | Super__4729c2b0_f12b_4397_8d77_055d38bca98b__Power
- **class History** | [Details](src/25c7ca86-6088-4f5f-b9fe-13504779c6ba) | [Code](src/25c7ca86-6088-4f5f-b9fe-13504779c6ba/code.php) | [Settings](src/25c7ca86-6088-4f5f-b9fe-13504779c6ba/settings.json) | Super__25c7ca86_6088_4f5f_b9fe_13504779c6ba__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\JoomlaThree](#vdm-joomla-componentbuilder-compiler-joomlathree)
- **final class Header** | [Details](src/7b56a097-9979-477b-b18a-c9dfc2f1e13b) | [Code](src/7b56a097-9979-477b-b18a-c9dfc2f1e13b/code.php) | [Settings](src/7b56a097-9979-477b-b18a-c9dfc2f1e13b/settings.json) | Super__7b56a097_9979_477b_b18a_c9dfc2f1e13b__Power
- **class Event** | [Details](src/4b86f62e-ce41-4325-a11a-08148807d0df) | [Code](src/4b86f62e-ce41-4325-a11a-08148807d0df/code.php) | [Settings](src/4b86f62e-ce41-4325-a11a-08148807d0df/settings.json) | Super__4b86f62e_ce41_4325_a11a_08148807d0df__Power
- **class History** | [Details](src/87db51b9-1126-4c21-858b-53dbd3a68b61) | [Code](src/87db51b9-1126-4c21-858b-53dbd3a68b61/code.php) | [Settings](src/87db51b9-1126-4c21-858b-53dbd3a68b61/settings.json) | Super__87db51b9_1126_4c21_858b_53dbd3a68b61__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Joomlamodule](#vdm-joomla-componentbuilder-compiler-joomlamodule)
@ -283,6 +313,8 @@ This repository contains an index (see below) of all the approved powers within
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Service](#vdm-joomla-componentbuilder-compiler-service)
- **class Adminview** | [Details](src/2dd1289a-4000-43cc-8c62-77ff32de56bf) | [Code](src/2dd1289a-4000-43cc-8c62-77ff32de56bf/code.php) | [Settings](src/2dd1289a-4000-43cc-8c62-77ff32de56bf/settings.json) | Super__2dd1289a_4000_43cc_8c62_77ff32de56bf__Power
- **class ArchitectureController** | [Details](src/56ba30f5-a5c4-4c4c-be6f-a56f7f9cbc60) | [Code](src/56ba30f5-a5c4-4c4c-be6f-a56f7f9cbc60/code.php) | [Settings](src/56ba30f5-a5c4-4c4c-be6f-a56f7f9cbc60/settings.json) | Super__56ba30f5_a5c4_4c4c_be6f_a56f7f9cbc60__Power
- **class ArchitectureModel** | [Details](src/bbd36fbf-d905-47e8-8e67-9ea6ec734712) | [Code](src/bbd36fbf-d905-47e8-8e67-9ea6ec734712/code.php) | [Settings](src/bbd36fbf-d905-47e8-8e67-9ea6ec734712/settings.json) | Super__bbd36fbf_d905_47e8_8e67_9ea6ec734712__Power
- **class Builder** | [Details](src/2c76c06e-a371-4b73-9fbe-b4d9b4df55d7) | [Code](src/2c76c06e-a371-4b73-9fbe-b4d9b4df55d7/code.php) | [Settings](src/2c76c06e-a371-4b73-9fbe-b4d9b4df55d7/settings.json) | Super__2c76c06e_a371_4b73_9fbe_b4d9b4df55d7__Power
- **class Compiler** | [Details](src/ea5ed06e-72ae-4906-9167-1cc0fa32fe69) | [Code](src/ea5ed06e-72ae-4906-9167-1cc0fa32fe69/code.php) | [Settings](src/ea5ed06e-72ae-4906-9167-1cc0fa32fe69/settings.json) | Super__ea5ed06e_72ae_4906_9167_1cc0fa32fe69__Power
- **class Component** | [Details](src/8a63e87b-b39b-4a15-8044-9b2a2f4fb61c) | [Code](src/8a63e87b-b39b-4a15-8044-9b2a2f4fb61c/code.php) | [Settings](src/8a63e87b-b39b-4a15-8044-9b2a2f4fb61c/settings.json) | Super__8a63e87b_b39b_4a15_8044_9b2a2f4fb61c__Power
@ -292,6 +324,7 @@ This repository contains an index (see below) of all the approved powers within
- **class Event** | [Details](src/b94aaedb-6774-4739-a63f-8f87141a85db) | [Code](src/b94aaedb-6774-4739-a63f-8f87141a85db/code.php) | [Settings](src/b94aaedb-6774-4739-a63f-8f87141a85db/settings.json) | Super__b94aaedb_6774_4739_a63f_8f87141a85db__Power
- **class Extension** | [Details](src/ed9591cb-0a03-400a-bf47-eaf78ab19b9d) | [Code](src/ed9591cb-0a03-400a-bf47-eaf78ab19b9d/code.php) | [Settings](src/ed9591cb-0a03-400a-bf47-eaf78ab19b9d/settings.json) | Super__ed9591cb_0a03_400a_bf47_eaf78ab19b9d__Power
- **class Field** | [Details](src/c6c30d66-3106-44eb-9272-b2cf7ec74613) | [Code](src/c6c30d66-3106-44eb-9272-b2cf7ec74613/code.php) | [Settings](src/c6c30d66-3106-44eb-9272-b2cf7ec74613/settings.json) | Super__c6c30d66_3106_44eb_9272_b2cf7ec74613__Power
- **class Header** | [Details](src/36d49d4a-8d0e-435f-ab4c-8f247d96fd4d) | [Code](src/36d49d4a-8d0e-435f-ab4c-8f247d96fd4d/code.php) | [Settings](src/36d49d4a-8d0e-435f-ab4c-8f247d96fd4d/settings.json) | Super__36d49d4a_8d0e_435f_ab4c_8f247d96fd4d__Power
- **class History** | [Details](src/63782f74-7b03-4745-aa40-0adf8ed4e704) | [Code](src/63782f74-7b03-4745-aa40-0adf8ed4e704/code.php) | [Settings](src/63782f74-7b03-4745-aa40-0adf8ed4e704/settings.json) | Super__63782f74_7b03_4745_aa40_0adf8ed4e704__Power
- **class Joomlamodule** | [Details](src/295186de-5954-4a65-a4c1-2f79ef305743) | [Code](src/295186de-5954-4a65-a4c1-2f79ef305743/code.php) | [Settings](src/295186de-5954-4a65-a4c1-2f79ef305743/settings.json) | Super__295186de_5954_4a65_a4c1_2f79ef305743__Power
- **class Joomlaplugin** | [Details](src/9eba241c-af90-42dd-ae05-92ff4d8391d3) | [Code](src/9eba241c-af90-42dd-ae05-92ff4d8391d3/code.php) | [Settings](src/9eba241c-af90-42dd-ae05-92ff4d8391d3/settings.json) | Super__9eba241c_af90_42dd_ae05_92ff4d8391d3__Power
@ -312,6 +345,7 @@ This repository contains an index (see below) of all the approved powers within
- **abstract class Line** | [Details](src/4e6ff11d-bebf-42f5-8fd7-b2f882857222) | [Code](src/4e6ff11d-bebf-42f5-8fd7-b2f882857222/code.php) | [Settings](src/4e6ff11d-bebf-42f5-8fd7-b2f882857222/settings.json) | Super__4e6ff11d_bebf_42f5_8fd7_b2f882857222__Power
- **abstract class Placefix** | [Details](src/500f3a7f-c16d-4dd4-81b2-2df6776b5388) | [Code](src/500f3a7f-c16d-4dd4-81b2-2df6776b5388/code.php) | [Settings](src/500f3a7f-c16d-4dd4-81b2-2df6776b5388/settings.json) | Super__500f3a7f_c16d_4dd4_81b2_2df6776b5388__Power
- **abstract class Unique** | [Details](src/f02fb1df-f4b6-4be1-9595-2e72084a5e6e) | [Code](src/f02fb1df-f4b6-4be1-9595-2e72084a5e6e/code.php) | [Settings](src/f02fb1df-f4b6-4be1-9595-2e72084a5e6e/settings.json) | Super__f02fb1df_f4b6_4be1_9595_2e72084a5e6e__Power
- **final class FileInjector** | [Details](src/23f2ca33-440a-4941-8e9a-4bc67522c0cb) | [Code](src/23f2ca33-440a-4941-8e9a-4bc67522c0cb/code.php) | [Settings](src/23f2ca33-440a-4941-8e9a-4bc67522c0cb/settings.json) | Super__23f2ca33_440a_4941_8e9a_4bc67522c0cb__Power
- **final class Xml** | [Details](src/f6ba34a2-0cd7-4dc1-ab67-75e962a5045b) | [Code](src/f6ba34a2-0cd7-4dc1-ab67-75e962a5045b/code.php) | [Settings](src/f6ba34a2-0cd7-4dc1-ab67-75e962a5045b/settings.json) | Super__f6ba34a2_0cd7_4dc1_ab67_75e962a5045b__Power
- **class Counter** | [Details](src/e6d871a6-bbe7-497d-af01-68f6bb9a87f4) | [Code](src/e6d871a6-bbe7-497d-af01-68f6bb9a87f4/code.php) | [Settings](src/e6d871a6-bbe7-497d-af01-68f6bb9a87f4/settings.json) | Super__e6d871a6_bbe7_497d_af01_68f6bb9a87f4__Power
- **class Dynamicpath** | [Details](src/268b85ef-49f3-4c39-8187-bb12e38d19ee) | [Code](src/268b85ef-49f3-4c39-8187-bb12e38d19ee/code.php) | [Settings](src/268b85ef-49f3-4c39-8187-bb12e38d19ee/settings.json) | Super__268b85ef_49f3_4c39_8187_bb12e38d19ee__Power
@ -344,18 +378,35 @@ This repository contains an index (see below) of all the approved powers within
- **class Generator** | [Details](src/a7101bbc-3c81-4b52-a4aa-522291f7594b) | [Code](src/a7101bbc-3c81-4b52-a4aa-522291f7594b/code.php) | [Settings](src/a7101bbc-3c81-4b52-a4aa-522291f7594b/settings.json) | Super__a7101bbc_3c81_4b52_a4aa_522291f7594b__Power
- **class Gitea** | [Details](src/510dc0f6-da3f-4a78-b43d-3a03e2cb5fae) | [Code](src/510dc0f6-da3f-4a78-b43d-3a03e2cb5fae/code.php) | [Settings](src/510dc0f6-da3f-4a78-b43d-3a03e2cb5fae/settings.json) | Super__510dc0f6_da3f_4a78_b43d_3a03e2cb5fae__Power
- **class Power** | [Details](src/02bc072b-1e89-46c1-9732-4da77b1a9ac9) | [Code](src/02bc072b-1e89-46c1-9732-4da77b1a9ac9/code.php) | [Settings](src/02bc072b-1e89-46c1-9732-4da77b1a9ac9/settings.json) | Super__02bc072b_1e89_46c1_9732_4da77b1a9ac9__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Component\JoomlaFour](#vdm-joomla-componentbuilder-compiler-component-joomlafour)
- **final class Settings** | [Details](src/e7fff971-b031-42bf-8009-ef554e30854d) | [Code](src/e7fff971-b031-42bf-8009-ef554e30854d/code.php) | [Settings](src/e7fff971-b031-42bf-8009-ef554e30854d/settings.json) | Super__e7fff971_b031_42bf_8009_ef554e30854d__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Component\JoomlaThree](#vdm-joomla-componentbuilder-compiler-component-joomlathree)
- **final class Settings** | [Details](src/63dabe82-0f4a-4ade-9851-8518ade23de2) | [Code](src/63dabe82-0f4a-4ade-9851-8518ade23de2/code.php) | [Settings](src/63dabe82-0f4a-4ade-9851-8518ade23de2/settings.json) | Super__63dabe82_0f4a_4ade_9851_8518ade23de2__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Customcode\Extractor](#vdm-joomla-componentbuilder-compiler-customcode-extractor)
- **class Paths** | [Details](src/053803e6-1251-4aed-aefe-46a8e84198d2) | [Code](src/053803e6-1251-4aed-aefe-46a8e84198d2/code.php) | [Settings](src/053803e6-1251-4aed-aefe-46a8e84198d2/settings.json) | Super__053803e6_1251_4aed_aefe_46a8e84198d2__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Extension\JoomlaFour](#vdm-joomla-componentbuilder-compiler-extension-joomlafour)
- **class InstallScript** | [Details](src/d42e1fac-3c05-4a22-8878-2abd43019811) | [Code](src/d42e1fac-3c05-4a22-8878-2abd43019811/code.php) | [Settings](src/d42e1fac-3c05-4a22-8878-2abd43019811/settings.json) | Super__d42e1fac_3c05_4a22_8878_2abd43019811__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Extension\JoomlaThree](#vdm-joomla-componentbuilder-compiler-extension-joomlathree)
- **class InstallScript** | [Details](src/1d929017-a5de-4e0f-9b5a-838934857e26) | [Code](src/1d929017-a5de-4e0f-9b5a-838934857e26/code.php) | [Settings](src/1d929017-a5de-4e0f-9b5a-838934857e26/settings.json) | Super__1d929017_a5de_4e0f_9b5a_838934857e26__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Field\JoomlaFour](#vdm-joomla-componentbuilder-compiler-field-joomlafour)
- **final class InputButton** | [Details](src/1b8a40e9-7847-4341-8a8e-dfdc2d531bbe) | [Code](src/1b8a40e9-7847-4341-8a8e-dfdc2d531bbe/code.php) | [Settings](src/1b8a40e9-7847-4341-8a8e-dfdc2d531bbe/settings.json) | Super__1b8a40e9_7847_4341_8a8e_dfdc2d531bbe__Power
- **class CoreField** | [Details](src/c6818275-cdf7-4fce-a365-90d95a77a71c) | [Code](src/c6818275-cdf7-4fce-a365-90d95a77a71c/code.php) | [Settings](src/c6818275-cdf7-4fce-a365-90d95a77a71c/settings.json) | Super__c6818275_cdf7_4fce_a365_90d95a77a71c__Power
- **class CoreRule** | [Details](src/43f46bb2-ab6d-47c7-9fd9-f1745a3576fb) | [Code](src/43f46bb2-ab6d-47c7-9fd9-f1745a3576fb/code.php) | [Settings](src/43f46bb2-ab6d-47c7-9fd9-f1745a3576fb/settings.json) | Super__43f46bb2_ab6d_47c7_9fd9_f1745a3576fb__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Field\JoomlaThree](#vdm-joomla-componentbuilder-compiler-field-joomlathree)
- **class CoreValidation** | [Details](src/24da9672-e47f-4bb1-b6c0-0ebfc17f0957) | [Code](src/24da9672-e47f-4bb1-b6c0-0ebfc17f0957/code.php) | [Settings](src/24da9672-e47f-4bb1-b6c0-0ebfc17f0957/settings.json) | Super__24da9672_e47f_4bb1_b6c0_0ebfc17f0957__Power
- **final class InputButton** | [Details](src/2bc33733-e900-4a9c-8cb3-c537aa9db785) | [Code](src/2bc33733-e900-4a9c-8cb3-c537aa9db785/code.php) | [Settings](src/2bc33733-e900-4a9c-8cb3-c537aa9db785/settings.json) | Super__2bc33733_e900_4a9c_8cb3_c537aa9db785__Power
- **class CoreField** | [Details](src/e6683873-b74e-4b54-8466-69f8a9282033) | [Code](src/e6683873-b74e-4b54-8466-69f8a9282033/code.php) | [Settings](src/e6683873-b74e-4b54-8466-69f8a9282033/settings.json) | Super__e6683873_b74e_4b54_8466_69f8a9282033__Power
- **class CoreRule** | [Details](src/24da9672-e47f-4bb1-b6c0-0ebfc17f0957) | [Code](src/24da9672-e47f-4bb1-b6c0-0ebfc17f0957/code.php) | [Settings](src/24da9672-e47f-4bb1-b6c0-0ebfc17f0957/settings.json) | Super__24da9672_e47f_4bb1_b6c0_0ebfc17f0957__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Interfaces\Component](#vdm-joomla-componentbuilder-compiler-interfaces-component)
- **interface PlaceholderInterface** | [Details](src/97698747-c2ce-4e09-a470-acf6d8e86281) | [Code](src/97698747-c2ce-4e09-a470-acf6d8e86281/code.php) | [Settings](src/97698747-c2ce-4e09-a470-acf6d8e86281/settings.json) | Super__97698747_c2ce_4e09_a470_acf6d8e86281__Power
- **interface SettingsInterface** | [Details](src/5f44e66a-31d0-45ff-92b3-b7372dc57ae9) | [Code](src/5f44e66a-31d0-45ff-92b3-b7372dc57ae9/code.php) | [Settings](src/5f44e66a-31d0-45ff-92b3-b7372dc57ae9/settings.json) | Super__5f44e66a_31d0_45ff_92b3_b7372dc57ae9__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Interfaces\Creator](#vdm-joomla-componentbuilder-compiler-interfaces-creator)
- **interface Fielddynamicinterface** | [Details](src/c902743e-8c6e-4a50-a4a3-8c955ef2960f) | [Code](src/c902743e-8c6e-4a50-a4a3-8c955ef2960f/code.php) | [Settings](src/c902743e-8c6e-4a50-a4a3-8c955ef2960f/settings.json) | Super__c902743e_8c6e_4a50_a4a3_8c955ef2960f__Power
@ -373,13 +424,39 @@ This repository contains an index (see below) of all the approved powers within
- **interface InstallInterface** | [Details](src/1aefb8f5-486f-4f00-adf9-696340b3254e) | [Code](src/1aefb8f5-486f-4f00-adf9-696340b3254e/code.php) | [Settings](src/1aefb8f5-486f-4f00-adf9-696340b3254e/settings.json) | Super__1aefb8f5_486f_4f00_adf9_696340b3254e__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Interfaces\Field](#vdm-joomla-componentbuilder-compiler-interfaces-field)
- **interface CoreValidationInterface** | [Details](src/b9f05dc4-d23a-499a-a826-9749b81818ed) | [Code](src/b9f05dc4-d23a-499a-a826-9749b81818ed/code.php) | [Settings](src/b9f05dc4-d23a-499a-a826-9749b81818ed/settings.json) | Super__b9f05dc4_d23a_499a_a826_9749b81818ed__Power
- **interface CoreFieldInterface** | [Details](src/e2f5fddf-cbc8-44ee-836c-7f3fb08d8900) | [Code](src/e2f5fddf-cbc8-44ee-836c-7f3fb08d8900/code.php) | [Settings](src/e2f5fddf-cbc8-44ee-836c-7f3fb08d8900/settings.json) | Super__e2f5fddf_cbc8_44ee_836c_7f3fb08d8900__Power
- **interface CoreRuleInterface** | [Details](src/b9f05dc4-d23a-499a-a826-9749b81818ed) | [Code](src/b9f05dc4-d23a-499a-a826-9749b81818ed/code.php) | [Settings](src/b9f05dc4-d23a-499a-a826-9749b81818ed/settings.json) | Super__b9f05dc4_d23a_499a_a826_9749b81818ed__Power
- **interface InputButtonInterface** | [Details](src/c600f58c-3fe2-4d2d-b711-2660eab6effe) | [Code](src/c600f58c-3fe2-4d2d-b711-2660eab6effe/code.php) | [Settings](src/c600f58c-3fe2-4d2d-b711-2660eab6effe/settings.json) | Super__c600f58c_3fe2_4d2d_b711_2660eab6effe__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Power\Repo](#vdm-joomla-componentbuilder-compiler-power-repo)
- **class Readme** | [Details](src/efb1d0f8-2d14-4d2c-8b5f-4fcdd9df45a5) | [Code](src/efb1d0f8-2d14-4d2c-8b5f-4fcdd9df45a5/code.php) | [Settings](src/efb1d0f8-2d14-4d2c-8b5f-4fcdd9df45a5/settings.json) | Super__efb1d0f8_2d14_4d2c_8b5f_4fcdd9df45a5__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Power\Repos](#vdm-joomla-componentbuilder-compiler-power-repos)
- **class Readme** | [Details](src/0d08c583-04d5-454e-b756-48ca05e1651a) | [Code](src/0d08c583-04d5-454e-b756-48ca05e1651a/code.php) | [Settings](src/0d08c583-04d5-454e-b756-48ca05e1651a/settings.json) | Super__0d08c583_04d5_454e_b756_48ca05e1651a__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Controller](#vdm-joomla-componentbuilder-compiler-architecture-joomlafour-controller)
- **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) | 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) | Super__ddf31f4b_96ba_46e7_8100_f48e1cefe533__Power
- **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) | Super__2a69a8ab_cea0_4c75_92d5_9495cb740e0f__Power
- **final class CanEditState** | [Details](src/cb2a82a5-aa49-4d46-b765-9b3feb118208) | [Code](src/cb2a82a5-aa49-4d46-b765-9b3feb118208/code.php) | [Settings](src/cb2a82a5-aa49-4d46-b765-9b3feb118208/settings.json) | Super__cb2a82a5_aa49_4d46_b765_9b3feb118208__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Controller](#vdm-joomla-componentbuilder-compiler-architecture-joomlathree-controller)
- **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) | 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) | Super__8faaed82_522d_4f78_bd43_0ab3f7c72e5f__Power
- **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) | Super__23766738_d0a4_4d0a_8555_7e4c97c0cddd__Power
- **final class CanEditState** | [Details](src/bce9ac2b-9f46-413f-b046-9e8af3f7dfbe) | [Code](src/bce9ac2b-9f46-413f-b046-9e8af3f7dfbe/code.php) | [Settings](src/bce9ac2b-9f46-413f-b046-9e8af3f7dfbe/settings.json) | Super__bce9ac2b_9f46_413f_b046_9e8af3f7dfbe__Power
- **Namespace**: [VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Controller](#vdm-joomla-componentbuilder-compiler-interfaces-architecture-controller)
- **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) | 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) | Super__992a842f_1ba9_4a5c_b214_042459ffe038__Power
- **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) | Super__e00a7d1d_6d80_41c5_bf13_32d41bc5bf91__Power
- **interface CanEditStateInterface** | [Details](src/600515b1-493f-4448-96fe-018e54e087c8) | [Code](src/600515b1-493f-4448-96fe-018e54e087c8/code.php) | [Settings](src/600515b1-493f-4448-96fe-018e54e087c8/settings.json) | Super__600515b1_493f_4448_96fe_018e54e087c8__Power
---
```

View File

@ -11,6 +11,7 @@
```uml
@startuml
class Extractor #Gold {
# int $currentVersion
# array $existing
# array $new
# array $done
@ -24,9 +25,9 @@ class Extractor #Gold {
# Reverse $reverse
# Placeholder $componentPlaceholder
# Pathfix $pathfix
# User $user
# \JDatabaseDriver $db
# CMSApplication $app
# $user
# $db
# $app
+ __construct(?Config $config = null, ?Gui $gui = null, ...)
+ run() : void
# searchFileContent(string $file, $target) : array
@ -49,9 +50,6 @@ note right of Extractor::__construct
?Reverse $reverse = null
?Placeholder $placeholder = null
?Pathfix $pathfix = null
?User $user = null
?\JDatabaseDriver $db = null
?CMSApplication $app = null
end note
note left of Extractor::run

View File

@ -17,6 +17,7 @@ use Joomla\CMS\User\User;
use Joomla\CMS\Filesystem\Folder;
use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Version;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
@ -83,6 +84,14 @@ class Extractor implements ExtractorInterface
4 => 'INSERTED<>$$$$]'
];
/**
* Current Joomla Version We are IN
*
* @var int
* @since 3.2.0
**/
protected int $currentVersion;
/**
* The custom code in local files that already exist in system
*
@ -190,26 +199,23 @@ class Extractor implements ExtractorInterface
/**
* Current User Object
*
* @var User
* @since 3.2.0
**/
protected User $user;
protected $user;
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* Database object to query local DB
*
* @var CMSApplication
* @since 3.2.0
**/
protected CMSApplication $app;
protected $app;
/**
* Constructor.
@ -220,16 +226,12 @@ class Extractor implements ExtractorInterface
* @param Reverse|null $reverse The compiler placeholder reverse object.
* @param Placeholder|null $placeholder The compiler component placeholder object.
* @param Pathfix|null $pathfix The compiler path fixing object.
* @param User|null $user The current User object.
* @param \JDatabaseDriver|null $db The Database Driver object.
* @param CMSApplication|null $app The CMS Application object.
*
* @throws \Exception
* @since 3.2.0
*/
public function __construct(?Config $config = null, ?Gui $gui = null, ?Paths $paths = null,
?Reverse $reverse = null, ?Placeholder $placeholder = null, ?Pathfix $pathfix = null,
?User $user = null, ?\JDatabaseDriver $db = null, ?CMSApplication $app = null)
?Reverse $reverse = null, ?Placeholder $placeholder = null, ?Pathfix $pathfix = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
@ -237,9 +239,9 @@ class Extractor implements ExtractorInterface
$this->reverse = $reverse ?: Compiler::_('Placeholder.Reverse');
$this->componentPlaceholder = $placeholder ?: Compiler::_('Component.Placeholder');
$this->pathfix = $pathfix ?: Compiler::_('Utilities.Pathfix');
$this->user = $user ?: Factory::getUser();
$this->db = $db ?: Factory::getDbo();
$this->app = $app ?: Factory::getApplication();
$this->user = Factory::getUser();
$this->db = Factory::getDbo();
$this->app = Factory::getApplication();
// set today's date
$this->today = Factory::getDate()->toSql();
@ -261,6 +263,9 @@ class Extractor implements ExtractorInterface
// set the local placeholders
$this->placeholders = array_reverse($placeholders, true);
// set the current version
$this->currentVersion = (int) Version::MAJOR_VERSION;
}
/**
@ -613,6 +618,11 @@ class Extractor implements ExtractorInterface
1
); // 'target'
$this->new[$pointer[$targetKey]][]
= $this->db->quote(
$this->currentVersion
); // 'joomla_version'
$this->new[$pointer[$targetKey]][]
= $this->db->quote(
$commentType
@ -766,7 +776,7 @@ class Extractor implements ExtractorInterface
$query = $this->db->getQuery(true);
$continue = false;
// Insert columns.
$columns = array('path', 'type', 'target', 'comment_type',
$columns = array('path', 'type', 'target', 'joomla_version', 'comment_type',
'component', 'published', 'created', 'created_by',
'version', 'access', 'hashtarget', 'from_line',
'to_line', 'code', 'hashendtarget');

View File

@ -12,6 +12,14 @@
4 => 'INSERTED<>$$$$]'
];
/**
* Current Joomla Version We are IN
*
* @var int
* @since 3.2.0
**/
protected int $currentVersion;
/**
* The custom code in local files that already exist in system
*
@ -119,26 +127,23 @@
/**
* Current User Object
*
* @var User
* @since 3.2.0
**/
protected User $user;
protected $user;
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* Database object to query local DB
*
* @var CMSApplication
* @since 3.2.0
**/
protected CMSApplication $app;
protected $app;
/**
* Constructor.
@ -149,16 +154,12 @@
* @param Reverse|null $reverse The compiler placeholder reverse object.
* @param Placeholder|null $placeholder The compiler component placeholder object.
* @param Pathfix|null $pathfix The compiler path fixing object.
* @param User|null $user The current User object.
* @param \JDatabaseDriver|null $db The Database Driver object.
* @param CMSApplication|null $app The CMS Application object.
*
* @throws \Exception
* @since 3.2.0
*/
public function __construct(?Config $config = null, ?Gui $gui = null, ?Paths $paths = null,
?Reverse $reverse = null, ?Placeholder $placeholder = null, ?Pathfix $pathfix = null,
?User $user = null, ?\JDatabaseDriver $db = null, ?CMSApplication $app = null)
?Reverse $reverse = null, ?Placeholder $placeholder = null, ?Pathfix $pathfix = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
@ -166,9 +167,9 @@
$this->reverse = $reverse ?: Compiler::_('Placeholder.Reverse');
$this->componentPlaceholder = $placeholder ?: Compiler::_('Component.Placeholder');
$this->pathfix = $pathfix ?: Compiler::_('Utilities.Pathfix');
$this->user = $user ?: Factory::getUser();
$this->db = $db ?: Factory::getDbo();
$this->app = $app ?: Factory::getApplication();
$this->user = Factory::getUser();
$this->db = Factory::getDbo();
$this->app = Factory::getApplication();
// set today's date
$this->today = Factory::getDate()->toSql();
@ -190,6 +191,9 @@
// set the local placeholders
$this->placeholders = array_reverse($placeholders, true);
// set the current version
$this->currentVersion = (int) Version::MAJOR_VERSION;
}
/**
@ -542,6 +546,11 @@
1
); // 'target'
$this->new[$pointer[$targetKey]][]
= $this->db->quote(
$this->currentVersion
); // 'joomla_version'
$this->new[$pointer[$targetKey]][]
= $this->db->quote(
$commentType
@ -695,7 +704,7 @@
$query = $this->db->getQuery(true);
$continue = false;
// Insert columns.
$columns = array('path', 'type', 'target', 'comment_type',
$columns = array('path', 'type', 'target', 'joomla_version', 'comment_type',
'component', 'published', 'created', 'created_by',
'version', 'access', 'hashtarget', 'from_line',
'to_line', 'code', 'hashendtarget');

View File

@ -56,6 +56,6 @@
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Customcode.Extractor",
"description": "Compiler Custom Code Extractor\r\n\r\nThe custom script placeholders - we use the (xxx) to avoid detection it should be (***)\r\n##################################---> PHP\/JS ---####################################\r\n\r\nNew Insert Code = \/xxx[INSERT>$$$$]xxx\/ \/xxx[\/INSERT>$$$$]xxx\/\r\nNew Replace Code = \/xxx[REPLACE>$$$$]xxx\/ \/xxx[\/REPLACE>$$$$]xxx\/\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ when JCB adds it back \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nJCB Add Inserted Code = \/xxx[INSERTED$$$$]xxx\/\/xx23xx\/ \/xxx[\/INSERTED$$$$]xxx\/\r\nJCB Add Replaced Code = \/xxx[REPLACED$$$$]xxx\/\/xx25xx\/ \/xxx[\/REPLACED$$$$]xxx\/\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ changeing existing custom code \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nUpdate Inserted Code = \/xxx[INSERTED>$$$$]xxx\/\/xx23xx\/ \/xxx[\/INSERTED>$$$$]xxx\/\r\nUpdate Replaced Code = \/xxx[REPLACED>$$$$]xxx\/\/xx25xx\/ \/xxx[\/REPLACED>$$$$]xxx\/\r\n\r\nThe custom script placeholders - we use the (==) to avoid detection it should be (--)\r\n###################################---> HTML ---#####################################\r\n\r\nNew Insert Code = !==[INSERT>$$$$]==> !==[\/INSERT>$$$$]==>\r\nNew Replace Code = !==[REPLACE>$$$$]==> !==[\/REPLACE>$$$$]==>\r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ when JCB adds it back \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nJCB Add Inserted Code = \r\nJCB Add Replaced Code = \r\n\r\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ changeing existing custom code \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nUpdate Inserted Code = !==[INSERTED>$$$$]==> !==[\/INSERTED>$$$$]==>\r\nUpdate Replaced Code = !==[REPLACED>$$$$]==> !==[\/REPLACED>$$$$]==>\r\n\r\n\/\/\/\/\/\/\/\/23 is the ID of the code in the system don't change it!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n\r\nMore info read: https:\/\/git.vdm.dev\/joomla\/Component-Builder\/wiki\/TIPS:-Custom-Code\r\n\r\n@since 3.2.0",
"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": "use Joomla\\CMS\\Factory;\r\nuse Joomla\\CMS\\User\\User;\r\nuse Joomla\\CMS\\Filesystem\\Folder;\r\nuse Joomla\\CMS\\Application\\CMSApplication;\r\nuse Joomla\\CMS\\Language\\Text;",
"head": "use Joomla\\CMS\\Factory;\r\nuse Joomla\\CMS\\User\\User;\r\nuse Joomla\\CMS\\Filesystem\\Folder;\r\nuse Joomla\\CMS\\Application\\CMSApplication;\r\nuse Joomla\\CMS\\Language\\Text;\r\nuse Joomla\\CMS\\Version;",
"composer": ""
}

View File

@ -230,17 +230,13 @@ class Infusion
// infuse super powers details if set
if ($this->config->add_super_powers && ArrayHelper::check($this->power->superpowers))
{
// TODO we need to update the event signatures
$context = $this->config->component_context;
foreach ($this->power->superpowers as $path => $powers)
{
$key = StringHelper::safe($path);
// Trigger Event: jcb_ce_onBeforeInfuseSuperPowerDetails
$this->event->trigger(
'jcb_ce_onBeforeInfuseSuperPowerDetails',
array(&$context, &$path, &$key, &$powers)
'jcb_ce_onBeforeInfuseSuperPowerDetails', [&$path, &$key, &$powers]
);
// we add and all missing powers
@ -260,8 +256,7 @@ class Infusion
// Trigger Event: jcb_ce_onAfterInfuseSuperPowerDetails
$this->event->trigger(
'jcb_ce_onAfterInfuseSuperPowerDetails',
array(&$context, &$path, &$key, &$powers)
'jcb_ce_onAfterInfuseSuperPowerDetails', [&$path, &$key, &$powers]
);
}
}
@ -306,17 +301,13 @@ class Infusion
// infuse powers data if set
if (ArrayHelper::check($this->power->active))
{
// TODO we need to update the event signatures
$context = $this->config->component_context;
foreach ($this->power->active as $power)
{
if (ObjectHelper::check($power))
{
// Trigger Event: jcb_ce_onBeforeInfusePowerData
$this->event->trigger(
'jcb_ce_onBeforeInfusePowerData',
array(&$context, &$power)
'jcb_ce_onBeforeInfusePowerData', [&$power]
);
// POWERCODE
@ -333,8 +324,7 @@ class Infusion
// Trigger Event: jcb_ce_onAfterInfusePowerData
$this->event->trigger(
'jcb_ce_onAfterInfusePowerData',
array(&$context, &$power)
'jcb_ce_onAfterInfusePowerData', [&$power]
);
}
}

View File

@ -195,17 +195,13 @@
// infuse super powers details if set
if ($this->config->add_super_powers && ArrayHelper::check($this->power->superpowers))
{
// TODO we need to update the event signatures
$context = $this->config->component_context;
foreach ($this->power->superpowers as $path => $powers)
{
$key = StringHelper::safe($path);
// Trigger Event: jcb_ce_onBeforeInfuseSuperPowerDetails
$this->event->trigger(
'jcb_ce_onBeforeInfuseSuperPowerDetails',
array(&$context, &$path, &$key, &$powers)
'jcb_ce_onBeforeInfuseSuperPowerDetails', [&$path, &$key, &$powers]
);
// we add and all missing powers
@ -225,8 +221,7 @@
// Trigger Event: jcb_ce_onAfterInfuseSuperPowerDetails
$this->event->trigger(
'jcb_ce_onAfterInfuseSuperPowerDetails',
array(&$context, &$path, &$key, &$powers)
'jcb_ce_onAfterInfuseSuperPowerDetails', [&$path, &$key, &$powers]
);
}
}
@ -271,17 +266,13 @@
// infuse powers data if set
if (ArrayHelper::check($this->power->active))
{
// TODO we need to update the event signatures
$context = $this->config->component_context;
foreach ($this->power->active as $power)
{
if (ObjectHelper::check($power))
{
// Trigger Event: jcb_ce_onBeforeInfusePowerData
$this->event->trigger(
'jcb_ce_onBeforeInfusePowerData',
array(&$context, &$power)
'jcb_ce_onBeforeInfusePowerData', [&$power]
);
// POWERCODE
@ -298,8 +289,7 @@
// Trigger Event: jcb_ce_onAfterInfusePowerData
$this->event->trigger(
'jcb_ce_onAfterInfusePowerData',
array(&$context, &$power)
'jcb_ce_onAfterInfusePowerData', [&$power]
);
}
}

View File

@ -17,7 +17,7 @@ class Paths #Gold {
# Placeholder $placeholder
# Customcode $customcode
# Extractor $extractor
# \JDatabaseDriver $db
# $db
+ __construct(?Config $config = null, ?Placeholder $placeholder = null, ...)
# load() : void
# getModuleIDs() : mixed
@ -37,7 +37,6 @@ note right of Paths::__construct
?ComponentPlaceholder $componentPlaceholder = null
?Customcode $customcode = null
?Extractor $extractor = null
?\JDatabaseDriver $db = null
end note
note right of Paths::load

View File

@ -84,10 +84,9 @@ class Paths
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* Constructor.
@ -97,14 +96,13 @@ class Paths
* @param ComponentPlaceholder|null $componentPlaceholder The compiler component placeholder object.
* @param Customcode|null $customcode The compiler customcode object.
* @param Extractor|null $extractor The compiler language extractor object.
* @param \JDatabaseDriver|null $db The Database Driver object.
*
* @throws \Exception
* @since 3.2.0
*/
public function __construct(?Config $config = null, ?Placeholder $placeholder = null,
?ComponentPlaceholder $componentPlaceholder = null, ?Customcode $customcode = null,
?Extractor $extractor = null, ?\JDatabaseDriver $db = null)
?Extractor $extractor = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
@ -112,7 +110,7 @@ class Paths
$componentPlaceholder = $componentPlaceholder ?: Compiler::_('Component.Placeholder');
$this->customcode = $customcode ?: Compiler::_('Customcode');
$this->extractor = $extractor ?: Compiler::_('Language.Extractor');
$this->db = $db ?: Factory::getDbo();
$this->db = Factory::getDbo();
// load the placeholders to local array
$this->componentPlaceholder = $componentPlaceholder->get();

View File

@ -49,10 +49,9 @@
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* Constructor.
@ -62,14 +61,13 @@
* @param ComponentPlaceholder|null $componentPlaceholder The compiler component placeholder object.
* @param Customcode|null $customcode The compiler customcode object.
* @param Extractor|null $extractor The compiler language extractor object.
* @param \JDatabaseDriver|null $db The Database Driver object.
*
* @throws \Exception
* @since 3.2.0
*/
public function __construct(?Config $config = null, ?Placeholder $placeholder = null,
?ComponentPlaceholder $componentPlaceholder = null, ?Customcode $customcode = null,
?Extractor $extractor = null, ?\JDatabaseDriver $db = null)
?Extractor $extractor = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
@ -77,7 +75,7 @@
$componentPlaceholder = $componentPlaceholder ?: Compiler::_('Component.Placeholder');
$this->customcode = $customcode ?: Compiler::_('Customcode');
$this->extractor = $extractor ?: Compiler::_('Language.Extractor');
$this->db = $db ?: Factory::getDbo();
$this->db = Factory::getDbo();
// load the placeholders to local array
$this->componentPlaceholder = $componentPlaceholder->get();

View File

@ -231,18 +231,16 @@ final class FieldsetString implements Fieldsetinterface
$dynamic_fields = '';
// set the custom table key
$dbkey = 'g';
// for plugin event TODO change event api signatures
$placeholders = $this->placeholder->active;
$component_context = $this->config->component_context;
// Trigger Event: jcb_ce_onBeforeBuildFields
$this->event->trigger(
'jcb_ce_onBeforeBuildFields',
array(&$component_context, &$dynamic_fields, &$read_only,
[&$dynamic_fields, &$read_only,
&$dbkey, &$view, &$component, &$nameSingleCode,
&$nameListCode, &$placeholders, &$lang_view,
&$lang_views)
&$nameListCode, &$lang_view,
&$lang_views]
);
unset($placeholders);
// TODO we should add the global and local view switch if field for front end
foreach ($view['settings']->fields as $field)
{
@ -252,17 +250,16 @@ final class FieldsetString implements Fieldsetinterface
true
);
}
// for plugin event TODO change event api signatures
$placeholders = $this->placeholder->active;
// Trigger Event: jcb_ce_onAfterBuildFields
$this->event->trigger(
'jcb_ce_onAfterBuildFields',
array(&$component_context, &$dynamic_fields, &$read_only,
[&$dynamic_fields, &$read_only,
&$dbkey, &$view, &$component, &$nameSingleCode,
&$nameListCode, &$placeholders, &$lang_view,
&$lang_views)
&$nameListCode, &$lang_view,
&$lang_views]
);
unset($placeholders);
// set the default fields
$field_set = array();
$field_set[] = '<fieldset name="details">';

View File

@ -192,18 +192,16 @@
$dynamic_fields = '';
// set the custom table key
$dbkey = 'g';
// for plugin event TODO change event api signatures
$placeholders = $this->placeholder->active;
$component_context = $this->config->component_context;
// Trigger Event: jcb_ce_onBeforeBuildFields
$this->event->trigger(
'jcb_ce_onBeforeBuildFields',
array(&$component_context, &$dynamic_fields, &$read_only,
[&$dynamic_fields, &$read_only,
&$dbkey, &$view, &$component, &$nameSingleCode,
&$nameListCode, &$placeholders, &$lang_view,
&$lang_views)
&$nameListCode, &$lang_view,
&$lang_views]
);
unset($placeholders);
// TODO we should add the global and local view switch if field for front end
foreach ($view['settings']->fields as $field)
{
@ -213,17 +211,16 @@
true
);
}
// for plugin event TODO change event api signatures
$placeholders = $this->placeholder->active;
// Trigger Event: jcb_ce_onAfterBuildFields
$this->event->trigger(
'jcb_ce_onAfterBuildFields',
array(&$component_context, &$dynamic_fields, &$read_only,
[&$dynamic_fields, &$read_only,
&$dbkey, &$view, &$component, &$nameSingleCode,
&$nameListCode, &$placeholders, &$lang_view,
&$lang_views)
&$nameListCode, &$lang_view,
&$lang_views]
);
unset($placeholders);
// set the default fields
$field_set = array();
$field_set[] = '<fieldset name="details">';

View File

@ -19,7 +19,7 @@ class Data #Gold {
# Dispenser $dispenser
# Gui $gui
# Dynamicget $dynamic
# \JDatabaseDriver $db
# $db
+ __construct(?Config $config = null, ?Registry $registry = null, ...)
+ get(array $ids, string $view_code, ...) : ?array
}
@ -37,7 +37,6 @@ note right of Data::__construct
?Dispenser $dispenser = null
?Gui $gui = null
?Dynamicget $dynamic = null
?\JDatabaseDriver $db = null
end note
note right of Data::get

View File

@ -104,10 +104,9 @@ class Data
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* Constructor
@ -119,14 +118,13 @@ class Data
* @param Dispenser|null $dispenser The compiler customcode dispenser object.
* @param Gui|null $gui The compiler customcode gui.
* @param Dynamicget|null $dynamic The compiler dynamicget modeller object.
* @param \JDatabaseDriver|null $db The database object.
*
* @since 3.2.0
*/
public function __construct(?Config $config = null, ?Registry $registry = null,
?EventInterface $event = null, ?Customcode $customcode = null,
?Dispenser $dispenser = null, ?Gui $gui = null,
?Dynamicget $dynamic = null, ?\JDatabaseDriver $db = null)
?Dynamicget $dynamic = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->registry = $registry ?: Compiler::_('Registry');
@ -135,7 +133,7 @@ class Data
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
$this->dynamic = $dynamic ?: Compiler::_('Model.Dynamicget');
$this->db = $db ?: Factory::getDbo();
$this->db = Factory::getDbo();
}
/**
@ -157,9 +155,6 @@ class Data
$ids = implode(',', $ids);
// for plugin event TODO change event api signatures
$component_context = $this->config->component_context;
// Create a new query object.
$query = $this->db->getQuery(true);
$query->select('a.*');
@ -176,8 +171,7 @@ class Data
{
// Trigger Event: jcb_ce_onBeforeModelDynamicGetData
$this->event->trigger(
'jcb_ce_onBeforeModelDynamicGetData',
array(&$component_context, &$result, &$result->id, &$view_code, &$context)
'jcb_ce_onBeforeModelDynamicGetData', [&$result, &$result->id, &$view_code, &$context]
);
// set GUI mapper id
@ -310,8 +304,7 @@ class Data
// Trigger Event: jcb_ce_onAfterModelDynamicGetData
$this->event->trigger(
'jcb_ce_onAfterModelDynamicGetData',
array(&$component_context, &$result, &$result->id, &$view_code, &$context)
'jcb_ce_onAfterModelDynamicGetData', [&$result, &$result->id, &$view_code, &$context]
);
}

View File

@ -70,10 +70,9 @@
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* Constructor
@ -85,14 +84,13 @@
* @param Dispenser|null $dispenser The compiler customcode dispenser object.
* @param Gui|null $gui The compiler customcode gui.
* @param Dynamicget|null $dynamic The compiler dynamicget modeller object.
* @param \JDatabaseDriver|null $db The database object.
*
* @since 3.2.0
*/
public function __construct(?Config $config = null, ?Registry $registry = null,
?EventInterface $event = null, ?Customcode $customcode = null,
?Dispenser $dispenser = null, ?Gui $gui = null,
?Dynamicget $dynamic = null, ?\JDatabaseDriver $db = null)
?Dynamicget $dynamic = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->registry = $registry ?: Compiler::_('Registry');
@ -101,7 +99,7 @@
$this->dispenser = $dispenser ?: Compiler::_('Customcode.Dispenser');
$this->gui = $gui ?: Compiler::_('Customcode.Gui');
$this->dynamic = $dynamic ?: Compiler::_('Model.Dynamicget');
$this->db = $db ?: Factory::getDbo();
$this->db = Factory::getDbo();
}
/**
@ -123,9 +121,6 @@
$ids = implode(',', $ids);
// for plugin event TODO change event api signatures
$component_context = $this->config->component_context;
// Create a new query object.
$query = $this->db->getQuery(true);
$query->select('a.*');
@ -142,8 +137,7 @@
{
// Trigger Event: jcb_ce_onBeforeModelDynamicGetData
$this->event->trigger(
'jcb_ce_onBeforeModelDynamicGetData',
array(&$component_context, &$result, &$result->id, &$view_code, &$context)
'jcb_ce_onBeforeModelDynamicGetData', [&$result, &$result->id, &$view_code, &$context]
);
// set GUI mapper id
@ -276,8 +270,7 @@
// Trigger Event: jcb_ce_onAfterModelDynamicGetData
$this->event->trigger(
'jcb_ce_onAfterModelDynamicGetData',
array(&$component_context, &$result, &$result->id, &$view_code, &$context)
'jcb_ce_onAfterModelDynamicGetData', [&$result, &$result->id, &$view_code, &$context]
);
}

View File

@ -716,8 +716,8 @@ class Structure
$bucket[] = Indent::_(2) . "//"
. Line::_(__Line__, __Class__) . " Custom CSS";
$bucket[] = Indent::_(2)
. "\$document->addStyleSheet('" . $targetPath
. "/modules/" . $module->folder_name
. "Html::_('stylesheet', "
. "modules/" . $module->folder_name
. "/css/mod_admin.css', ['version' => 'auto', 'relative' => true]);";
}
}
@ -771,7 +771,7 @@ class Structure
$bucket[] = Indent::_(2) . "//"
. Line::_(__Line__, __Class__) . " Custom JS";
$bucket[] = Indent::_(2)
. "\$document->addScript('" . $targetPath
. "Html::_('script', "
. "/modules/" . $module->folder_name
. "/js/mod_admin.js', ['version' => 'auto', 'relative' => true]);";
}
@ -839,6 +839,9 @@ class Structure
if ($add_component_path)
{
$xml .= PHP_EOL . '<form';
if ($this->config->get('joomla_version', 3) == 3)
{
$xml .= PHP_EOL . Indent::_(1)
. 'addrulepath="/administrator/components/com_'
. $this->config->component_code_name
@ -847,6 +850,19 @@ class Structure
. 'addfieldpath="/administrator/components/com_'
. $this->config->component_code_name
. '/models/fields"';
}
else
{
$xml .= PHP_EOL . Indent::_(1)
. 'addruleprefix="' . $this->config->namespace_prefix
. '\Component\\' . StringHelper::safe($this->config->component_code_name, 'F')
. '\Administrator\Rule"';
$xml .= PHP_EOL . Indent::_(1)
.'addfieldprefix="' . $this->config->namespace_prefix
. '\Component\\' . StringHelper::safe($this->config->component_code_name, 'F')
. '\Administrator\Field"';
}
$xml .= PHP_EOL . '>';
}
else

View File

@ -675,8 +675,8 @@
$bucket[] = Indent::_(2) . "//"
. Line::_(__Line__, __Class__) . " Custom CSS";
$bucket[] = Indent::_(2)
. "\$document->addStyleSheet('" . $targetPath
. "/modules/" . $module->folder_name
. "Html::_('stylesheet', "
. "modules/" . $module->folder_name
. "/css/mod_admin.css', ['version' => 'auto', 'relative' => true]);";
}
}
@ -730,7 +730,7 @@
$bucket[] = Indent::_(2) . "//"
. Line::_(__Line__, __Class__) . " Custom JS";
$bucket[] = Indent::_(2)
. "\$document->addScript('" . $targetPath
. "Html::_('script', "
. "/modules/" . $module->folder_name
. "/js/mod_admin.js', ['version' => 'auto', 'relative' => true]);";
}
@ -798,6 +798,9 @@
if ($add_component_path)
{
$xml .= PHP_EOL . '<form';
if ($this->config->get('joomla_version', 3) == 3)
{
$xml .= PHP_EOL . Indent::_(1)
. 'addrulepath="/administrator/components/com_'
. $this->config->component_code_name
@ -806,6 +809,19 @@
. 'addfieldpath="/administrator/components/com_'
. $this->config->component_code_name
. '/models/fields"';
}
else
{
$xml .= PHP_EOL . Indent::_(1)
. 'addruleprefix="' . $this->config->namespace_prefix
. '\Component\\' . StringHelper::safe($this->config->component_code_name, 'F')
. '\Administrator\Rule"';
$xml .= PHP_EOL . Indent::_(1)
.'addfieldprefix="' . $this->config->namespace_prefix
. '\Component\\' . StringHelper::safe($this->config->component_code_name, 'F')
. '\Administrator\Field"';
}
$xml .= PHP_EOL . '>';
}
else

View File

@ -0,0 +1,31 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class ConfigFieldsets (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Builder**
> extends: **Registry**
```uml
@startuml
class ConfigFieldsets << (F,LightGreen) >> #RoyalBlue {
# bool $addAsArray
}
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,34 @@
<?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\Builder;
use VDM\Joomla\Interfaces\Registryinterface;
use VDM\Joomla\Abstraction\Registry;
/**
* Config Field Sets Builder Class
*
* @since 3.2.0
*/
final class ConfigFieldsets extends Registry implements Registryinterface
{
/**
* Base switch to add values as string or array
*
* @var boolean
* @since 3.2.0
**/
protected bool $addAsArray = true;
}

View File

@ -0,0 +1,7 @@
/**
* Base switch to add values as string or array
*
* @var boolean
* @since 3.2.0
**/
protected bool $addAsArray = true;

View File

@ -0,0 +1,20 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "7e822c03-1b20-41d1-9427-f5b8d5836af7",
"guid": "0a524af3-f647-4f62-a422-d7d36ebe749b",
"implements": [
"64e291c2-11f1-423d-a44d-837cc12cc017"
],
"load_selection": null,
"name": "ConfigFieldsets",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Builder.ConfigFieldsets",
"type": "final class",
"use_selection": null,
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Builder.ConfigFieldsets",
"description": "Config Field Sets Builder Class\r\n\r\n@since 3.2.0",
"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,65 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class ConfigFieldsetsGlobal (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Creator**
```uml
@startuml
class ConfigFieldsetsGlobal << (F,LightGreen) >> #RoyalBlue {
# Config $config
# Language $language
# Component $component
# Contributors $contributors
# ConfigFieldsets $configfieldsets
# ExtensionsParams $extensionsparams
# Customfield $customfield
+ __construct(Config $config, Language $language, ...)
+ set(string $lang, string $authorName, ...) : void
}
note right of ConfigFieldsetsGlobal::__construct
Constructor.
since: 3.2.0
arguments:
Config $config
Language $language
Component $component
Contributors $contributors
ConfigFieldsets $configfieldsets
ExtensionsParams $extensionsparams
Customfield $customfield
end note
note right of ConfigFieldsetsGlobal::set
Set Global Config Fieldsets
since: 3.2.0
return: void
arguments:
string $lang
string $authorName
string $authorEmail
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,634 @@
<?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\Creator;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Language;
use VDM\Joomla\Componentbuilder\Compiler\Component;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Contributors;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ConfigFieldsets;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ExtensionsParams;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ConfigFieldsetsCustomfield as Customfield;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
/**
* Config Fieldsets Global Creator Class
*
* @since 3.2.0
*/
final class ConfigFieldsetsGlobal
{
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Language Class.
*
* @var Language
* @since 3.2.0
*/
protected Language $language;
/**
* The Component Class.
*
* @var Component
* @since 3.2.0
*/
protected Component $component;
/**
* The Contributors Class.
*
* @var Contributors
* @since 3.2.0
*/
protected Contributors $contributors;
/**
* The ConfigFieldsets Class.
*
* @var ConfigFieldsets
* @since 3.2.0
*/
protected ConfigFieldsets $configfieldsets;
/**
* The ExtensionsParams Class.
*
* @var ExtensionsParams
* @since 3.2.0
*/
protected ExtensionsParams $extensionsparams;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var Customfield
* @since 3.2.0
*/
protected Customfield $customfield;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Language $language The Language Class.
* @param Component $component The Component Class.
* @param Contributors $contributors The Contributors Class.
* @param ConfigFieldsets $configfieldsets The ConfigFieldsets Class.
* @param ExtensionsParams $extensionsparams The ExtensionsParams Class.
* @param Customfield $customfield The ConfigFieldsetsCustomfield Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Language $language, Component $component,
Contributors $contributors,
ConfigFieldsets $configfieldsets,
ExtensionsParams $extensionsparams,
Customfield $customfield)
{
$this->config = $config;
$this->language = $language;
$this->component = $component;
$this->contributors = $contributors;
$this->configfieldsets = $configfieldsets;
$this->extensionsparams = $extensionsparams;
$this->customfield = $customfield;
}
/**
* Set Global Config Fieldsets
*
* @param string $lang
* @param string $authorName
* @param string $authorEmail
*
* @since 3.2.0
*/
public function set(string $lang, string $authorName, string $authorEmail): void
{
// start building field set for config
$this->configfieldsets->add('component', '<fieldset');
if ($this->config->get('joomla_version', 3) == 3)
{
$this->configfieldsets->add('component', Indent::_(2)
. 'addrulepath="/administrator/components/com_' . $this->config->component_code_name
. '/models/rules"');
$this->configfieldsets->add('component', Indent::_(2)
. 'addfieldpath="/administrator/components/com_' . $this->config->component_code_name
. '/models/fields"');
}
else
{
$this->configfieldsets->add('component', Indent::_(2)
. 'addruleprefix="' . $this->config->namespace_prefix
. '\Component\\' . StringHelper::safe($this->config->component_code_name, 'F')
. '\Administrator\Rule"');
$this->configfieldsets->add('component', Indent::_(2)
. 'addfieldprefix="' . $this->config->namespace_prefix
. '\Component\\' . StringHelper::safe($this->config->component_code_name, 'F')
. '\Administrator\Field"');
}
$this->configfieldsets->add('component', Indent::_(2) . 'name="global_config"');
$this->configfieldsets->add('component', Indent::_(2) . 'label="' . $lang
. '_GLOBAL_LABEL"');
$this->configfieldsets->add('component', Indent::_(2) . 'description="' . $lang
. '_GLOBAL_DESC">');
// setup lang
$this->language->set($this->config->lang_target, $lang . '_GLOBAL_LABEL', "Global");
$this->language->set(
$this->config->lang_target, $lang . '_GLOBAL_DESC', "The Global Parameters"
);
// add auto checkin if required
if ($this->config->get('add_checkin', false))
{
$this->configfieldsets->add('component', Indent::_(2) . "<field");
$this->configfieldsets->add('component', Indent::_(3) . 'name="check_in"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="0"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $lang
. '_CHECK_TIMER_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="' . $lang
. '_CHECK_TIMER_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-5 hours">'
. $lang . '_CHECK_TIMER_OPTION_ONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-12 hours">'
. $lang . '_CHECK_TIMER_OPTION_TWO</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-1 day">' . $lang
. '_CHECK_TIMER_OPTION_THREE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-2 day">' . $lang
. '_CHECK_TIMER_OPTION_FOUR</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-1 week">' . $lang
. '_CHECK_TIMER_OPTION_FIVE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="0">' . $lang
. '_CHECK_TIMER_OPTION_SIX</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field type="spacer" name="spacerAuthor" hr="true" />');
// setup lang
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_LABEL', "Check in timer"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_DESC',
"Set the intervals for the auto checkin fuction of tables that checks out the items to an user."
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_ONE',
"Every five hours"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_TWO',
"Every twelve hours"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_THREE', "Once a day"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_FOUR',
"Every second day"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_FIVE', "Once a week"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_SIX', "Never"
);
// load the Global checkin defautls
$this->extensionsparams->add('component', '"check_in":"-1 day"');
}
// set history control
if ($this->config->get('set_tag_history', false))
{
$this->configfieldsets->add('component', Indent::_(2) . "<field");
$this->configfieldsets->add('component', Indent::_(3) . 'name="save_history"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="radio"');
$this->configfieldsets->add('component', Indent::_(3)
. 'class="btn-group btn-group-yesno"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="1"');
$this->configfieldsets->add('component', Indent::_(3)
. 'label="JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL"');
$this->configfieldsets->add('component', Indent::_(3)
. 'description="JGLOBAL_SAVE_HISTORY_OPTIONS_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . ">");
$this->configfieldsets->add('component', Indent::_(3)
. '<option value="1">JYES</option>');
$this->configfieldsets->add('component', Indent::_(3)
. '<option value="0">JNO</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
$this->configfieldsets->add('component', Indent::_(2) . "<field");
$this->configfieldsets->add('component', Indent::_(3) . 'name="history_limit"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'filter="integer"');
$this->configfieldsets->add('component', Indent::_(3)
. 'label="JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL"');
$this->configfieldsets->add('component', Indent::_(3)
. 'description="JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="10"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field type="spacer" name="spacerHistory" hr="true" />');
// load the Global checkin defautls
$this->extensionsparams->add('component', '"save_history":"1","history_limit":"10"');
}
// add custom global fields
if ($this->customfield->isArray('Global'))
{
$this->configfieldsets->add('component', implode(
"", $this->customfield->get('Global')
));
$this->customfield->remove('Global');
}
// set the author details
$this->configfieldsets->add('component', Indent::_(2) . '<field name="autorTitle"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="spacer"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $lang
. '_AUTHOR"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2) . '<field name="autorName"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $lang
. '_AUTHOR_NAME_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="' . $lang
. '_AUTHOR_NAME_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $authorName . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'readonly="true"');
$this->configfieldsets->add('component', Indent::_(3) . 'class="readonly"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2) . '<field name="autorEmail"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="email"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $lang
. '_AUTHOR_EMAIL_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="' . $lang
. '_AUTHOR_EMAIL_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $authorEmail . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'readonly="true"');
$this->configfieldsets->add('component', Indent::_(3) . 'class="readonly"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
// setup lang
$this->language->set($this->config->lang_target, $lang . '_AUTHOR', "Author Info");
$this->language->set(
$this->config->lang_target, $lang . '_AUTHOR_NAME_LABEL', "Author Name"
);
$this->language->set(
$this->config->lang_target, $lang . '_AUTHOR_NAME_DESC',
"The name of the author of this component."
);
$this->language->set(
$this->config->lang_target, $lang . '_AUTHOR_EMAIL_LABEL', "Author Email"
);
$this->language->set(
$this->config->lang_target, $lang . '_AUTHOR_EMAIL_DESC',
"The email address of the author of this component."
);
// set if contributors were added
$langCont = $lang . '_CONTRIBUTOR';
if ($this->config->get('add_contributors', false)
&& $this->component->isArray('contributors'))
{
foreach (
$this->component->get('contributors') as $counter => $contributor
)
{
// make sure we dont use 0
$counter++;
// get the word for this number
$COUNTER = StringHelper::safe($counter, 'U');
// set the dynamic values
$cbTitle = htmlspecialchars(
(string) $contributor['title'], ENT_XML1, 'UTF-8'
);
$cbName = htmlspecialchars(
(string) $contributor['name'], ENT_XML1, 'UTF-8'
);
$cbEmail = htmlspecialchars(
(string) $contributor['email'], ENT_XML1, 'UTF-8'
);
$cbWebsite = htmlspecialchars(
(string) $contributor['website'], ENT_XML1, 'UTF-8'
); // StringHelper::html($contributor['website']);
// load to the $fieldsets
$this->configfieldsets->add('component', Indent::_(2)
. '<field type="spacer" name="spacerContributor' . $counter
. '" hr="true" />');
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="contributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="spacer"');
$this->configfieldsets->add('component', Indent::_(3) . 'class="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_' . $COUNTER . '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="titleContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_TITLE_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_TITLE_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $cbTitle
. '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="nameContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_NAME_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_NAME_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $cbName
. '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="emailContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="email"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_EMAIL_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_EMAIL_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $cbEmail
. '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="linkContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="url"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_LINK_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_LINK_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="'
. $cbWebsite . '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="useContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="'
. (int) $contributor['use'] . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_USE_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_USE_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="0">'
. $langCont . '_USE_NONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="1">'
. $langCont . '_USE_EMAIL</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="2">'
. $langCont . '_USE_WWW</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="showContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="'
. (int) $contributor['show'] . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_SHOW_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_SHOW_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="0">'
. $langCont . '_SHOW_NONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="1">'
. $langCont . '_SHOW_BACK</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="2">'
. $langCont . '_SHOW_FRONT</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="3">'
. $langCont . '_SHOW_ALL</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
// add the contributor
$this->contributors->add('bom', PHP_EOL . Indent::_(1) . "@"
. strtolower((string) $contributor['title']) . Indent::_(2)
. $contributor['name'] . ' <' . $contributor['website']
. '>');
// setup lang
$Counter = StringHelper::safe($counter, 'Ww');
$this->language->set(
$this->config->lang_target, $langCont . '_' . $COUNTER,
"Contributor " . $Counter
);
// load the Global checkin defautls
$this->extensionsparams->add('component', '"titleContributor' . $counter
. '":"' . $cbTitle . '"');
$this->extensionsparams->add('component', '"nameContributor' . $counter
. '":"' . $cbName . '"');
$this->extensionsparams->add('component', '"emailContributor' . $counter
. '":"' . $cbEmail . '"');
$this->extensionsparams->add('component', '"linkContributor' . $counter
. '":"' . $cbWebsite . '"');
$this->extensionsparams->add('component', '"useContributor' . $counter . '":"'
. (int) $contributor['use'] . '"');
$this->extensionsparams->add('component', '"showContributor' . $counter
. '":"' . (int) $contributor['show'] . '"');
}
}
// add more contributors if required
if (1 == $this->component->get('emptycontributors', 0))
{
if (isset($counter))
{
$min = $counter + 1;
unset($counter);
}
else
{
$min = 1;
}
$max = $min + $this->component->get('number') - 1;
$moreContributerFields = range($min, $max, 1);
foreach ($moreContributerFields as $counter)
{
$COUNTER = StringHelper::safe($counter, 'U');
$this->configfieldsets->add('component', Indent::_(2)
. '<field type="spacer" name="spacerContributor' . $counter
. '" hr="true" />');
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="contributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="spacer"');
$this->configfieldsets->add('component', Indent::_(3) . 'class="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_' . $COUNTER . '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="titleContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_TITLE_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_TITLE_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default=""');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="nameContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_NAME_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_NAME_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default=""');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="emailContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="email"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_EMAIL_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_EMAIL_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default=""');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="linkContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="url"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_LINK_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_LINK_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default=""');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="useContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="0"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_USE_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_USE_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="0">'
. $langCont . '_USE_NONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="1">'
. $langCont . '_USE_EMAIL</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="2">'
. $langCont . '_USE_WWW</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="showContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="0"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_SHOW_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_SHOW_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="0">'
. $langCont . '_SHOW_NONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="1">'
. $langCont . '_SHOW_BACK</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="2">'
. $langCont . '_SHOW_FRONT</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="3">'
. $langCont . '_SHOW_ALL</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
// setup lang
$Counter = StringHelper::safe($counter, 'Ww');
$this->language->set(
$this->config->lang_target, $langCont . '_' . $COUNTER,
"Contributor " . $Counter
);
}
}
if ($this->config->get('add_contributors', false)
|| $this->component->get('emptycontributors', 0) == 1)
{
// setup lang
$this->language->set(
$this->config->lang_target, $langCont . '_TITLE_LABEL', "Contributor Job Title"
);
$this->language->set(
$this->config->lang_target, $langCont . '_TITLE_DESC',
"The job title that best describes the contributor's relationship to this component."
);
$this->language->set(
$this->config->lang_target, $langCont . '_NAME_LABEL', "Contributor Name"
);
$this->language->set(
$this->config->lang_target, $langCont . '_NAME_DESC',
"The name of this contributor."
);
$this->language->set(
$this->config->lang_target, $langCont . '_EMAIL_LABEL', "Contributor Email"
);
$this->language->set(
$this->config->lang_target, $langCont . '_EMAIL_DESC',
"The email of this contributor."
);
$this->language->set(
$this->config->lang_target, $langCont . '_LINK_LABEL', "Contributor Website"
);
$this->language->set(
$this->config->lang_target, $langCont . '_LINK_DESC',
"The link to this contributor's website."
);
$this->language->set($this->config->lang_target, $langCont . '_USE_LABEL', "Use");
$this->language->set(
$this->config->lang_target, $langCont . '_USE_DESC',
"How should we link to this contributor."
);
$this->language->set($this->config->lang_target, $langCont . '_USE_NONE', "None");
$this->language->set(
$this->config->lang_target, $langCont . '_USE_EMAIL', "Email"
);
$this->language->set(
$this->config->lang_target, $langCont . '_USE_WWW', "Website"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_LABEL', "Show"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_DESC',
"Select where you want this contributor's details to show in the component."
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_NONE', "Hide"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_BACK', "Back-end"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_FRONT', "Front-end"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_ALL', "Both Front & Back-end"
);
}
// close that fieldset
$this->configfieldsets->add('component', Indent::_(1) . "</fieldset>");
}
}

View File

@ -0,0 +1,600 @@
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Language Class.
*
* @var Language
* @since 3.2.0
*/
protected Language $language;
/**
* The Component Class.
*
* @var Component
* @since 3.2.0
*/
protected Component $component;
/**
* The Contributors Class.
*
* @var Contributors
* @since 3.2.0
*/
protected Contributors $contributors;
/**
* The ConfigFieldsets Class.
*
* @var ConfigFieldsets
* @since 3.2.0
*/
protected ConfigFieldsets $configfieldsets;
/**
* The ExtensionsParams Class.
*
* @var ExtensionsParams
* @since 3.2.0
*/
protected ExtensionsParams $extensionsparams;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var Customfield
* @since 3.2.0
*/
protected Customfield $customfield;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Language $language The Language Class.
* @param Component $component The Component Class.
* @param Contributors $contributors The Contributors Class.
* @param ConfigFieldsets $configfieldsets The ConfigFieldsets Class.
* @param ExtensionsParams $extensionsparams The ExtensionsParams Class.
* @param Customfield $customfield The ConfigFieldsetsCustomfield Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Language $language, Component $component,
Contributors $contributors,
ConfigFieldsets $configfieldsets,
ExtensionsParams $extensionsparams,
Customfield $customfield)
{
$this->config = $config;
$this->language = $language;
$this->component = $component;
$this->contributors = $contributors;
$this->configfieldsets = $configfieldsets;
$this->extensionsparams = $extensionsparams;
$this->customfield = $customfield;
}
/**
* Set Global Config Fieldsets
*
* @param string $lang
* @param string $authorName
* @param string $authorEmail
*
* @since 3.2.0
*/
public function set(string $lang, string $authorName, string $authorEmail): void
{
// start building field set for config
$this->configfieldsets->add('component', '<fieldset');
if ($this->config->get('joomla_version', 3) == 3)
{
$this->configfieldsets->add('component', Indent::_(2)
. 'addrulepath="/administrator/components/com_' . $this->config->component_code_name
. '/models/rules"');
$this->configfieldsets->add('component', Indent::_(2)
. 'addfieldpath="/administrator/components/com_' . $this->config->component_code_name
. '/models/fields"');
}
else
{
$this->configfieldsets->add('component', Indent::_(2)
. 'addruleprefix="' . $this->config->namespace_prefix
. '\Component\\' . StringHelper::safe($this->config->component_code_name, 'F')
. '\Administrator\Rule"');
$this->configfieldsets->add('component', Indent::_(2)
. 'addfieldprefix="' . $this->config->namespace_prefix
. '\Component\\' . StringHelper::safe($this->config->component_code_name, 'F')
. '\Administrator\Field"');
}
$this->configfieldsets->add('component', Indent::_(2) . 'name="global_config"');
$this->configfieldsets->add('component', Indent::_(2) . 'label="' . $lang
. '_GLOBAL_LABEL"');
$this->configfieldsets->add('component', Indent::_(2) . 'description="' . $lang
. '_GLOBAL_DESC">');
// setup lang
$this->language->set($this->config->lang_target, $lang . '_GLOBAL_LABEL', "Global");
$this->language->set(
$this->config->lang_target, $lang . '_GLOBAL_DESC', "The Global Parameters"
);
// add auto checkin if required
if ($this->config->get('add_checkin', false))
{
$this->configfieldsets->add('component', Indent::_(2) . "<field");
$this->configfieldsets->add('component', Indent::_(3) . 'name="check_in"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="0"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $lang
. '_CHECK_TIMER_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="' . $lang
. '_CHECK_TIMER_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-5 hours">'
. $lang . '_CHECK_TIMER_OPTION_ONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-12 hours">'
. $lang . '_CHECK_TIMER_OPTION_TWO</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-1 day">' . $lang
. '_CHECK_TIMER_OPTION_THREE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-2 day">' . $lang
. '_CHECK_TIMER_OPTION_FOUR</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="-1 week">' . $lang
. '_CHECK_TIMER_OPTION_FIVE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option');
$this->configfieldsets->add('component', Indent::_(4) . 'value="0">' . $lang
. '_CHECK_TIMER_OPTION_SIX</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field type="spacer" name="spacerAuthor" hr="true" />');
// setup lang
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_LABEL', "Check in timer"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_DESC',
"Set the intervals for the auto checkin fuction of tables that checks out the items to an user."
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_ONE',
"Every five hours"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_TWO',
"Every twelve hours"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_THREE', "Once a day"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_FOUR',
"Every second day"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_FIVE', "Once a week"
);
$this->language->set(
$this->config->lang_target, $lang . '_CHECK_TIMER_OPTION_SIX', "Never"
);
// load the Global checkin defautls
$this->extensionsparams->add('component', '"check_in":"-1 day"');
}
// set history control
if ($this->config->get('set_tag_history', false))
{
$this->configfieldsets->add('component', Indent::_(2) . "<field");
$this->configfieldsets->add('component', Indent::_(3) . 'name="save_history"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="radio"');
$this->configfieldsets->add('component', Indent::_(3)
. 'class="btn-group btn-group-yesno"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="1"');
$this->configfieldsets->add('component', Indent::_(3)
. 'label="JGLOBAL_SAVE_HISTORY_OPTIONS_LABEL"');
$this->configfieldsets->add('component', Indent::_(3)
. 'description="JGLOBAL_SAVE_HISTORY_OPTIONS_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . ">");
$this->configfieldsets->add('component', Indent::_(3)
. '<option value="1">JYES</option>');
$this->configfieldsets->add('component', Indent::_(3)
. '<option value="0">JNO</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
$this->configfieldsets->add('component', Indent::_(2) . "<field");
$this->configfieldsets->add('component', Indent::_(3) . 'name="history_limit"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'filter="integer"');
$this->configfieldsets->add('component', Indent::_(3)
. 'label="JGLOBAL_HISTORY_LIMIT_OPTIONS_LABEL"');
$this->configfieldsets->add('component', Indent::_(3)
. 'description="JGLOBAL_HISTORY_LIMIT_OPTIONS_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="10"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field type="spacer" name="spacerHistory" hr="true" />');
// load the Global checkin defautls
$this->extensionsparams->add('component', '"save_history":"1","history_limit":"10"');
}
// add custom global fields
if ($this->customfield->isArray('Global'))
{
$this->configfieldsets->add('component', implode(
"", $this->customfield->get('Global')
));
$this->customfield->remove('Global');
}
// set the author details
$this->configfieldsets->add('component', Indent::_(2) . '<field name="autorTitle"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="spacer"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $lang
. '_AUTHOR"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2) . '<field name="autorName"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $lang
. '_AUTHOR_NAME_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="' . $lang
. '_AUTHOR_NAME_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $authorName . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'readonly="true"');
$this->configfieldsets->add('component', Indent::_(3) . 'class="readonly"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2) . '<field name="autorEmail"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="email"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $lang
. '_AUTHOR_EMAIL_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="' . $lang
. '_AUTHOR_EMAIL_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $authorEmail . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'readonly="true"');
$this->configfieldsets->add('component', Indent::_(3) . 'class="readonly"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
// setup lang
$this->language->set($this->config->lang_target, $lang . '_AUTHOR', "Author Info");
$this->language->set(
$this->config->lang_target, $lang . '_AUTHOR_NAME_LABEL', "Author Name"
);
$this->language->set(
$this->config->lang_target, $lang . '_AUTHOR_NAME_DESC',
"The name of the author of this component."
);
$this->language->set(
$this->config->lang_target, $lang . '_AUTHOR_EMAIL_LABEL', "Author Email"
);
$this->language->set(
$this->config->lang_target, $lang . '_AUTHOR_EMAIL_DESC',
"The email address of the author of this component."
);
// set if contributors were added
$langCont = $lang . '_CONTRIBUTOR';
if ($this->config->get('add_contributors', false)
&& $this->component->isArray('contributors'))
{
foreach (
$this->component->get('contributors') as $counter => $contributor
)
{
// make sure we dont use 0
$counter++;
// get the word for this number
$COUNTER = StringHelper::safe($counter, 'U');
// set the dynamic values
$cbTitle = htmlspecialchars(
(string) $contributor['title'], ENT_XML1, 'UTF-8'
);
$cbName = htmlspecialchars(
(string) $contributor['name'], ENT_XML1, 'UTF-8'
);
$cbEmail = htmlspecialchars(
(string) $contributor['email'], ENT_XML1, 'UTF-8'
);
$cbWebsite = htmlspecialchars(
(string) $contributor['website'], ENT_XML1, 'UTF-8'
); // StringHelper::html($contributor['website']);
// load to the $fieldsets
$this->configfieldsets->add('component', Indent::_(2)
. '<field type="spacer" name="spacerContributor' . $counter
. '" hr="true" />');
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="contributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="spacer"');
$this->configfieldsets->add('component', Indent::_(3) . 'class="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_' . $COUNTER . '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="titleContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_TITLE_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_TITLE_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $cbTitle
. '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="nameContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_NAME_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_NAME_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $cbName
. '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="emailContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="email"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_EMAIL_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_EMAIL_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="' . $cbEmail
. '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="linkContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="url"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_LINK_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_LINK_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="'
. $cbWebsite . '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="useContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="'
. (int) $contributor['use'] . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_USE_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_USE_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="0">'
. $langCont . '_USE_NONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="1">'
. $langCont . '_USE_EMAIL</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="2">'
. $langCont . '_USE_WWW</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="showContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="'
. (int) $contributor['show'] . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_SHOW_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_SHOW_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="0">'
. $langCont . '_SHOW_NONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="1">'
. $langCont . '_SHOW_BACK</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="2">'
. $langCont . '_SHOW_FRONT</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="3">'
. $langCont . '_SHOW_ALL</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
// add the contributor
$this->contributors->add('bom', PHP_EOL . Indent::_(1) . "@"
. strtolower((string) $contributor['title']) . Indent::_(2)
. $contributor['name'] . ' <' . $contributor['website']
. '>');
// setup lang
$Counter = StringHelper::safe($counter, 'Ww');
$this->language->set(
$this->config->lang_target, $langCont . '_' . $COUNTER,
"Contributor " . $Counter
);
// load the Global checkin defautls
$this->extensionsparams->add('component', '"titleContributor' . $counter
. '":"' . $cbTitle . '"');
$this->extensionsparams->add('component', '"nameContributor' . $counter
. '":"' . $cbName . '"');
$this->extensionsparams->add('component', '"emailContributor' . $counter
. '":"' . $cbEmail . '"');
$this->extensionsparams->add('component', '"linkContributor' . $counter
. '":"' . $cbWebsite . '"');
$this->extensionsparams->add('component', '"useContributor' . $counter . '":"'
. (int) $contributor['use'] . '"');
$this->extensionsparams->add('component', '"showContributor' . $counter
. '":"' . (int) $contributor['show'] . '"');
}
}
// add more contributors if required
if (1 == $this->component->get('emptycontributors', 0))
{
if (isset($counter))
{
$min = $counter + 1;
unset($counter);
}
else
{
$min = 1;
}
$max = $min + $this->component->get('number') - 1;
$moreContributerFields = range($min, $max, 1);
foreach ($moreContributerFields as $counter)
{
$COUNTER = StringHelper::safe($counter, 'U');
$this->configfieldsets->add('component', Indent::_(2)
. '<field type="spacer" name="spacerContributor' . $counter
. '" hr="true" />');
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="contributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="spacer"');
$this->configfieldsets->add('component', Indent::_(3) . 'class="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_' . $COUNTER . '"');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="titleContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_TITLE_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_TITLE_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default=""');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="nameContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="text"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_NAME_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_NAME_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default=""');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="emailContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="email"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_EMAIL_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_EMAIL_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default=""');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="linkContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="url"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_LINK_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_LINK_DESC"');
$this->configfieldsets->add('component', Indent::_(3) . 'size="60"');
$this->configfieldsets->add('component', Indent::_(3) . 'default=""');
$this->configfieldsets->add('component', Indent::_(2) . "/>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="useContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="0"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_USE_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_USE_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="0">'
. $langCont . '_USE_NONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="1">'
. $langCont . '_USE_EMAIL</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="2">'
. $langCont . '_USE_WWW</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
$this->configfieldsets->add('component', Indent::_(2)
. '<field name="showContributor' . $counter . '"');
$this->configfieldsets->add('component', Indent::_(3) . 'type="list"');
$this->configfieldsets->add('component', Indent::_(3) . 'default="0"');
$this->configfieldsets->add('component', Indent::_(3) . 'label="' . $langCont
. '_SHOW_LABEL"');
$this->configfieldsets->add('component', Indent::_(3) . 'description="'
. $langCont . '_SHOW_DESC">');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="0">'
. $langCont . '_SHOW_NONE</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="1">'
. $langCont . '_SHOW_BACK</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="2">'
. $langCont . '_SHOW_FRONT</option>');
$this->configfieldsets->add('component', Indent::_(3) . '<option value="3">'
. $langCont . '_SHOW_ALL</option>');
$this->configfieldsets->add('component', Indent::_(2) . "</field>");
// setup lang
$Counter = StringHelper::safe($counter, 'Ww');
$this->language->set(
$this->config->lang_target, $langCont . '_' . $COUNTER,
"Contributor " . $Counter
);
}
}
if ($this->config->get('add_contributors', false)
|| $this->component->get('emptycontributors', 0) == 1)
{
// setup lang
$this->language->set(
$this->config->lang_target, $langCont . '_TITLE_LABEL', "Contributor Job Title"
);
$this->language->set(
$this->config->lang_target, $langCont . '_TITLE_DESC',
"The job title that best describes the contributor's relationship to this component."
);
$this->language->set(
$this->config->lang_target, $langCont . '_NAME_LABEL', "Contributor Name"
);
$this->language->set(
$this->config->lang_target, $langCont . '_NAME_DESC',
"The name of this contributor."
);
$this->language->set(
$this->config->lang_target, $langCont . '_EMAIL_LABEL', "Contributor Email"
);
$this->language->set(
$this->config->lang_target, $langCont . '_EMAIL_DESC',
"The email of this contributor."
);
$this->language->set(
$this->config->lang_target, $langCont . '_LINK_LABEL', "Contributor Website"
);
$this->language->set(
$this->config->lang_target, $langCont . '_LINK_DESC',
"The link to this contributor's website."
);
$this->language->set($this->config->lang_target, $langCont . '_USE_LABEL', "Use");
$this->language->set(
$this->config->lang_target, $langCont . '_USE_DESC',
"How should we link to this contributor."
);
$this->language->set($this->config->lang_target, $langCont . '_USE_NONE', "None");
$this->language->set(
$this->config->lang_target, $langCont . '_USE_EMAIL', "Email"
);
$this->language->set(
$this->config->lang_target, $langCont . '_USE_WWW', "Website"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_LABEL', "Show"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_DESC',
"Select where you want this contributor's details to show in the component."
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_NONE', "Hide"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_BACK', "Back-end"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_FRONT', "Front-end"
);
$this->language->set(
$this->config->lang_target, $langCont . '_SHOW_ALL', "Both Front & Back-end"
);
}
// close that fieldset
$this->configfieldsets->add('component', Indent::_(1) . "</fieldset>");
}

View File

@ -0,0 +1,55 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "0fe3133d-1ff3-4444-9229-4218d8fb338e",
"implements": null,
"load_selection": null,
"name": "ConfigFieldsetsGlobal",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Creator.ConfigFieldsetsGlobal",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "8eee7df5-2775-41a9-9372-c46c5939a252",
"as": "default"
},
"use_selection2": {
"use": "e2472b22-a329-44d8-b4a2-ae3ba99e17a0",
"as": "default"
},
"use_selection3": {
"use": "274a78d1-24c2-4486-b560-b86e9ae72872",
"as": "default"
},
"use_selection4": {
"use": "0a524af3-f647-4f62-a422-d7d36ebe749b",
"as": "default"
},
"use_selection5": {
"use": "bcf1e767-1566-440d-9f67-5c1bada934fa",
"as": "default"
},
"use_selection6": {
"use": "ed314bd8-c995-4282-bcaa-5e0a68ac401b",
"as": "Customfield"
},
"use_selection7": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default"
},
"use_selection8": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Creator.ConfigFieldsetsGlobal",
"description": "Config Fieldsets Global Creator Class\r\n\r\n@since 3.2.0",
"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

@ -11,8 +11,8 @@
```uml
@startuml
class Groups << (F,LightGreen) >> #RoyalBlue {
# \JDatabaseDriver $db
+ __construct(?\JDatabaseDriver $db = null)
# $db
+ __construct()
+ check(string $type, string $option = 'default') : bool
+ types(array $groups = []) : ?array
+ typesIds(array $groups = []) : ?array

View File

@ -71,21 +71,18 @@ final class Groups
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
*/
protected \JDatabaseDriver $db;
protected $db;
/**
* Constructor
*
* @param \JDatabaseDriver|null $db The Database Driver object.
*
* @since 3.2.0
*/
public function __construct(?\JDatabaseDriver $db = null)
public function __construct()
{
$this->db = $db ?: Factory::getDbo();
$this->db = Factory::getDbo();
}
/**

View File

@ -45,21 +45,18 @@
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
*/
protected \JDatabaseDriver $db;
protected $db;
/**
* Constructor
*
* @param \JDatabaseDriver|null $db The Database Driver object.
*
* @since 3.2.0
*/
public function __construct(?\JDatabaseDriver $db = null)
public function __construct()
{
$this->db = $db ?: Factory::getDbo();
$this->db = Factory::getDbo();
}
/**

View File

@ -0,0 +1,74 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class AccessSections (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Creator**
```uml
@startuml
class AccessSections << (F,LightGreen) >> #RoyalBlue {
# Config $config
# Event $event
# Language $language
# Component $component
# FieldName $fieldname
# TypeName $typename
# Counter $counter
# Permission $permission
# AssetsRules $assetsrules
# CustomTabs $customtabs
# PermissionViews $permissionviews
# PermissionFields $permissionfields
# PermissionComponent $permissioncomponent
# CustomButtonPermissions $custombuttonpermissions
+ __construct(Config $config, Event $event, ...)
+ get() : string
}
note right of AccessSections::__construct
Constructor.
since: 3.2.0
arguments:
Config $config
Event $event
Language $language
Component $component
FieldName $fieldname
TypeName $typename
Counter $counter
Permission $permission
AssetsRules $assetsrules
CustomTabs $customtabs
PermissionViews $permissionviews
PermissionFields $permissionfields
PermissionComponent $permissioncomponent
CustomButtonPermissions $custombuttonpermissions
end note
note right of AccessSections::get
Get Access Sections
since: 3.2.0
return: string
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,709 @@
<?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\Creator;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event;
use VDM\Joomla\Componentbuilder\Compiler\Language;
use VDM\Joomla\Componentbuilder\Compiler\Component;
use VDM\Joomla\Componentbuilder\Compiler\Field\Name as FieldName;
use VDM\Joomla\Componentbuilder\Compiler\Field\TypeName;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Counter;
use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AssetsRules;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CustomTabs;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionViews;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionFields;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionComponent;
use VDM\Joomla\Componentbuilder\Compiler\Creator\CustomButtonPermissions;
use VDM\Joomla\Utilities\MathHelper;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\StringHelper;
/**
* Access Sections Creator Class
*
* @since 3.2.0
*/
final class AccessSections
{
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The EventInterface Class.
*
* @var Event
* @since 3.2.0
*/
protected Event $event;
/**
* The Language Class.
*
* @var Language
* @since 3.2.0
*/
protected Language $language;
/**
* The Component Class.
*
* @var Component
* @since 3.2.0
*/
protected Component $component;
/**
* The Name Class.
*
* @var FieldName
* @since 3.2.0
*/
protected FieldName $fieldname;
/**
* The TypeName Class.
*
* @var TypeName
* @since 3.2.0
*/
protected TypeName $typename;
/**
* The Counter Class.
*
* @var Counter
* @since 3.2.0
*/
protected Counter $counter;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* The AssetsRules Class.
*
* @var AssetsRules
* @since 3.2.0
*/
protected AssetsRules $assetsrules;
/**
* The CustomTabs Class.
*
* @var CustomTabs
* @since 3.2.0
*/
protected CustomTabs $customtabs;
/**
* The PermissionViews Class.
*
* @var PermissionViews
* @since 3.2.0
*/
protected PermissionViews $permissionviews;
/**
* The PermissionFields Class.
*
* @var PermissionFields
* @since 3.2.0
*/
protected PermissionFields $permissionfields;
/**
* The PermissionComponent Class.
*
* @var PermissionComponent
* @since 3.2.0
*/
protected PermissionComponent $permissioncomponent;
/**
* The CustomButtonPermissions Class.
*
* @var CustomButtonPermissions
* @since 3.2.0
*/
protected CustomButtonPermissions $custombuttonpermissions;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Event $event The EventInterface Class.
* @param Language $language The Language Class.
* @param Component $component The Component Class.
* @param FieldName $fieldname The Name Class.
* @param TypeName $typename The TypeName Class.
* @param Counter $counter The Counter Class.
* @param Permission $permission The Permission Class.
* @param AssetsRules $assetsrules The AssetsRules Class.
* @param CustomTabs $customtabs The CustomTabs Class.
* @param PermissionViews $permissionviews The PermissionViews Class.
* @param PermissionFields $permissionfields The PermissionFields Class.
* @param PermissionComponent $permissioncomponent The PermissionComponent Class.
* @param CustomButtonPermissions $custombuttonpermissions The CustomButtonPermissions Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Event $event, Language $language,
Component $component, FieldName $fieldname,
TypeName $typename, Counter $counter,
Permission $permission, AssetsRules $assetsrules,
CustomTabs $customtabs, PermissionViews $permissionviews,
PermissionFields $permissionfields,
PermissionComponent $permissioncomponent,
CustomButtonPermissions $custombuttonpermissions)
{
$this->config = $config;
$this->event = $event;
$this->language = $language;
$this->component = $component;
$this->fieldname = $fieldname;
$this->typename = $typename;
$this->counter = $counter;
$this->permission = $permission;
$this->assetsrules = $assetsrules;
$this->customtabs = $customtabs;
$this->permissionviews = $permissionviews;
$this->permissionfields = $permissionfields;
$this->permissioncomponent = $permissioncomponent;
$this->custombuttonpermissions = $custombuttonpermissions;
}
/**
* Get Access Sections
*
* @return string
* @since 3.2.0
*/
public function get(): string
{
// access size counter
$this->counter->accessSize = 12; // ;)
// Trigger Event: jcb_ce_onBeforeBuildAccessSections
$this->event->trigger(
'jcb_ce_onBeforeBuildAccessSections'
);
// Get the default fields
$default_fields = $this->config->default_fields;
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.admin',
'title' => 'JACTION_ADMIN',
'description' => 'JACTION_ADMIN_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.options',
'title' => 'JACTION_OPTIONS',
'description' => 'JACTION_OPTIONS_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.manage',
'title' => 'JACTION_MANAGE',
'description' => 'JACTION_MANAGE_COMPONENT_DESC'
], true);
if ($this->config->get('add_eximport', false))
{
$exportTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Export Data', 'U');
$exportDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Export Data', 'U')
. '_DESC';
$this->language->set('bothadmin', $exportTitle, 'Export Data');
$this->language->set(
'bothadmin', $exportDesc,
' Allows users in this group to export data.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.export',
'title' => $exportTitle,
'description' => $exportDesc
], true);
// the size needs increase
$this->counter->accessSize++;
$importTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Import Data', 'U');
$importDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Import Data', 'U')
. '_DESC';
$this->language->set('bothadmin', $importTitle, 'Import Data');
$this->language->set(
'bothadmin', $importDesc,
' Allows users in this group to import data.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.import',
'title' => $importTitle,
'description' => $importDesc
], true);
// the size needs increase
$this->counter->accessSize++;
}
// version permission
$batchTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Use Batch', 'U');
$batchDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Use Batch', 'U') . '_DESC';
$this->language->set('bothadmin', $batchTitle, 'Use Batch');
$this->language->set(
'bothadmin', $batchDesc,
' Allows users in this group to use batch copy/update method.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.batch',
'title' => $batchTitle,
'description' => $batchDesc
], true);
// version permission
$importTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Versions', 'U');
$importDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Versions', 'U')
. '_DESC';
$this->language->set('bothadmin', $importTitle, 'Edit Version');
$this->language->set(
'bothadmin', $importDesc,
' Allows users in this group to edit versions.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.version',
'title' => $importTitle,
'description' => $importDesc
], true);
// set the defaults
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.create',
'title' => 'JACTION_CREATE',
'description' => 'JACTION_CREATE_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.delete',
'title' => 'JACTION_DELETE',
'description' => 'JACTION_DELETE_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit',
'title' => 'JACTION_EDIT',
'description' => 'JACTION_EDIT_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.state',
'title' => 'JACTION_EDITSTATE',
'description' => 'JACTION_ACCESS_EDITSTATE_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.own',
'title' => 'JACTION_EDITOWN',
'description' => 'JACTION_EDITOWN_COMPONENT_DESC'
], true);
// set the Joomla fields
if ($this->config->get('set_joomla_fields', false))
{
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.value',
'title' => 'JACTION_EDITVALUE',
'description' => 'JACTION_EDITVALUE_COMPONENT_DESC'
], true);
// the size needs increase
$this->counter->accessSize++;
}
// new custom created by permissions
$created_byTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Created By', 'U');
$created_byDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Created By', 'U')
. '_DESC';
$this->language->set('bothadmin', $created_byTitle, 'Edit Created By');
$this->language->set(
'bothadmin', $created_byDesc,
' Allows users in this group to edit created by.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.created_by',
'title' => $created_byTitle,
'description' => $created_byDesc
], true);
// new custom created date permissions
$createdTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Created Date', 'U');
$createdDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Created Date', 'U')
. '_DESC';
$this->language->set('bothadmin', $createdTitle, 'Edit Created Date');
$this->language->set(
'bothadmin', $createdDesc,
' Allows users in this group to edit created date.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.created',
'title' => $createdTitle,
'description' => $createdDesc
], true);
// set the menu controller lookup
$menuControllers = ['access', 'submenu', 'dashboard_list', 'dashboard_add'];
// set the custom admin views permissions
if ($this->component->isArray('custom_admin_views'))
{
foreach ($this->component->get('custom_admin_views') as $custom_admin_view)
{
// new custom permissions to access this view
$customAdminName = $custom_admin_view['settings']->name;
$customAdminCode = $custom_admin_view['settings']->code;
$customAdminTitle = $this->config->lang_prefix . '_'
. StringHelper::safe(
$customAdminName . ' Access', 'U'
);
$customAdminDesc = $this->config->lang_prefix . '_'
. StringHelper::safe(
$customAdminName . ' Access', 'U'
) . '_DESC';
$sortKey = StringHelper::safe(
$customAdminName . ' Access'
);
$this->language->set(
'bothadmin', $customAdminTitle, $customAdminName . ' Access'
);
$this->language->set(
'bothadmin', $customAdminDesc,
' Allows the users in this group to access '
. StringHelper::safe($customAdminName, 'w')
. '.'
);
$this->permissioncomponent->set($sortKey, [
'name' => "$customAdminCode.access",
'title' => $customAdminTitle,
'description' => $customAdminDesc
]);
// the size needs increase
$this->counter->accessSize++;
// add the custom permissions to use the buttons of this view
$this->custombuttonpermissions->add(
$custom_admin_view['settings'], $customAdminName,
$customAdminCode
);
// add menu controll view that has menus options
foreach ($menuControllers as $menuController)
{
// add menu controll view that has menus options
if (isset($custom_admin_view[$menuController])
&& $custom_admin_view[$menuController])
{
$targetView_ = 'views.';
if ($menuController === 'dashboard_add')
{
$targetView_ = 'view.';
}
// menucontroller
$menucontrollerView['action'] = $targetView_
. $menuController;
$menucontrollerView['implementation'] = '2';
if (isset($custom_admin_view['settings']->permissions)
&& ArrayHelper::check(
$custom_admin_view['settings']->permissions
))
{
array_push(
$custom_admin_view['settings']->permissions,
$menucontrollerView
);
}
else
{
$custom_admin_view['settings']->permissions
= [];
$custom_admin_view['settings']->permissions[]
= $menucontrollerView;
}
unset($menucontrollerView);
}
}
$this->permission ->set(
$custom_admin_view, $customAdminCode, $customAdminCode,
$menuControllers, 'customAdmin'
);
}
}
// set the site views permissions
if ($this->component->isArray('site_views'))
{
foreach ($this->component->get('site_views') as $site_view)
{
// new custom permissions to access this view
$siteName = $site_view['settings']->name;
$siteCode = $site_view['settings']->code;
$siteTitle = $this->config->lang_prefix . '_'
. StringHelper::safe(
$siteName . ' Access Site', 'U'
);
$siteDesc = $this->config->lang_prefix . '_'
. StringHelper::safe(
$siteName . ' Access Site', 'U'
) . '_DESC';
$sortKey = StringHelper::safe(
$siteName . ' Access Site'
);
if (isset($site_view['access']) && $site_view['access'] == 1)
{
$this->language->set(
'bothadmin', $siteTitle, $siteName . ' (Site) Access'
);
$this->language->set(
'bothadmin', $siteDesc,
' Allows the users in this group to access site '
. StringHelper::safe($siteName, 'w')
. '.'
);
$this->permissioncomponent->set($sortKey, [
'name' => "site.$siteCode.access",
'title' => $siteTitle,
'description' => $siteDesc
]);
// the size needs increase
$this->counter->accessSize++;
// check if this site view requires access rule to default to public
if (isset($site_view['public_access'])
&& $site_view['public_access'] == 1)
{
// we use one as public group (TODO we see if we run into any issues)
$this->assetsrules->add('site', '"site.' . $siteCode
. '.access":{"1":1}');
}
}
// add the custom permissions to use the buttons of this view
$this->custombuttonpermissions->add(
$site_view['settings'], $siteName, $siteCode
);
}
}
if ($this->component->isArray('admin_views'))
{
foreach ($this->component->get('admin_views') as $view)
{
// set view name
$nameView = StringHelper::safe(
$view['settings']->name_single
);
$nameViews = StringHelper::safe(
$view['settings']->name_list
);
// add custom tab permissions if found
if (($tabs_ = $this->customtabs->get($nameView)) !== null
&& ArrayHelper::check($tabs_))
{
foreach ($tabs_ as $_customTab)
{
if (isset($_customTab['permission'])
&& $_customTab['permission'] == 1)
{
$this->permissioncomponent->set($_customTab['sortKey'], [
'name' => $_customTab['view'] . '.' . $_customTab['code'] . '.viewtab',
'title' => $_customTab['lang_permission'],
'description' => $_customTab['lang_permission_desc']
]);
// the size needs increase
$this->counter->accessSize++;
}
}
}
// add the custom permissions to use the buttons of this view
$this->custombuttonpermissions->add(
$view['settings'], $view['settings']->name_single, $nameView
);
if ($nameView != 'component')
{
// add menu controll view that has menus options
foreach ($menuControllers as $menuController)
{
// add menu controll view that has menus options
if (isset($view[$menuController])
&& $view[$menuController])
{
$targetView_ = 'views.';
if ($menuController === 'dashboard_add')
{
$targetView_ = 'view.';
}
// menucontroller
$menucontrollerView['action'] = $targetView_ . $menuController;
$menucontrollerView['implementation'] = '2';
if (isset($view['settings']->permissions)
&& ArrayHelper::check(
$view['settings']->permissions
))
{
array_push(
$view['settings']->permissions,
$menucontrollerView
);
}
else
{
$view['settings']->permissions = [];
$view['settings']->permissions[] = $menucontrollerView;
}
unset($menucontrollerView);
}
}
// check if there are fields
if (ArrayHelper::check($view['settings']->fields))
{
// field permission options
$permission_options = [1 => 'edit', 2 => 'access', 3 => 'view'];
// check the fields for their permission settings
foreach ($view['settings']->fields as $field)
{
// see if field require permissions to be set
if (isset($field['permission'])
&& ArrayHelper::check(
$field['permission']
))
{
if (ArrayHelper::check(
$field['settings']->properties
))
{
$fieldType = $this->typename->get($field);
$fieldName = $this->fieldname->get(
$field, $nameViews
);
// loop the permission options
foreach ($field['permission'] as $permission_id)
{
// set the permission key word
$permission_option = $permission_options[(int) $permission_id];
// reset the bucket
$fieldView = [];
// set the permission for this field
$fieldView['action'] = 'view.' . $permission_option . '.' . $fieldName;
$fieldView['implementation'] = '3';
// check if persmissions was already set
if (isset($view['settings']->permissions)
&& ArrayHelper::check(
$view['settings']->permissions
))
{
array_push($view['settings']->permissions, $fieldView);
}
else
{
$view['settings']->permissions = [];
$view['settings']->permissions[] = $fieldView;
}
// ensure that no default field get loaded
if (!in_array($fieldName, $default_fields))
{
// load to global field permission set
$this->permissionfields->
set("$nameView.$fieldName.$permission_option", $fieldType);
}
}
}
}
}
}
$this->permission ->set(
$view, $nameView, $nameViews, $menuControllers
);
}
}
// Trigger Event: jcb_ce_onAfterBuildAccessSections
$this->event->trigger(
'jcb_ce_onAfterBuildAccessSections'
);
/// now build the section
$component = $this->permissioncomponent->build();
// add views to the component section
$component .= $this->permissionviews->build();
// remove the fix, is not needed
if ($this->counter->accessSize < 30)
{
// since we have less than 30 actions
// we do not need the fix for this component
$this->config->set('add_assets_table_fix', 0);
}
else
{
// get the worst case column size required (can be worse I know)
// access/action size x 20 characters x 8 groups
$character_length = (int) MathHelper::bc(
'mul', $this->counter->accessSize, 20, 0
);
// set worse case
$this->config->set('access_worse_case', (int) MathHelper::bc(
'mul', $character_length, 8, 0
));
}
// return the build
return $component;
}
return false;
}
}

View File

@ -0,0 +1,667 @@
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The EventInterface Class.
*
* @var Event
* @since 3.2.0
*/
protected Event $event;
/**
* The Language Class.
*
* @var Language
* @since 3.2.0
*/
protected Language $language;
/**
* The Component Class.
*
* @var Component
* @since 3.2.0
*/
protected Component $component;
/**
* The Name Class.
*
* @var FieldName
* @since 3.2.0
*/
protected FieldName $fieldname;
/**
* The TypeName Class.
*
* @var TypeName
* @since 3.2.0
*/
protected TypeName $typename;
/**
* The Counter Class.
*
* @var Counter
* @since 3.2.0
*/
protected Counter $counter;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* The AssetsRules Class.
*
* @var AssetsRules
* @since 3.2.0
*/
protected AssetsRules $assetsrules;
/**
* The CustomTabs Class.
*
* @var CustomTabs
* @since 3.2.0
*/
protected CustomTabs $customtabs;
/**
* The PermissionViews Class.
*
* @var PermissionViews
* @since 3.2.0
*/
protected PermissionViews $permissionviews;
/**
* The PermissionFields Class.
*
* @var PermissionFields
* @since 3.2.0
*/
protected PermissionFields $permissionfields;
/**
* The PermissionComponent Class.
*
* @var PermissionComponent
* @since 3.2.0
*/
protected PermissionComponent $permissioncomponent;
/**
* The CustomButtonPermissions Class.
*
* @var CustomButtonPermissions
* @since 3.2.0
*/
protected CustomButtonPermissions $custombuttonpermissions;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Event $event The EventInterface Class.
* @param Language $language The Language Class.
* @param Component $component The Component Class.
* @param FieldName $fieldname The Name Class.
* @param TypeName $typename The TypeName Class.
* @param Counter $counter The Counter Class.
* @param Permission $permission The Permission Class.
* @param AssetsRules $assetsrules The AssetsRules Class.
* @param CustomTabs $customtabs The CustomTabs Class.
* @param PermissionViews $permissionviews The PermissionViews Class.
* @param PermissionFields $permissionfields The PermissionFields Class.
* @param PermissionComponent $permissioncomponent The PermissionComponent Class.
* @param CustomButtonPermissions $custombuttonpermissions The CustomButtonPermissions Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Event $event, Language $language,
Component $component, FieldName $fieldname,
TypeName $typename, Counter $counter,
Permission $permission, AssetsRules $assetsrules,
CustomTabs $customtabs, PermissionViews $permissionviews,
PermissionFields $permissionfields,
PermissionComponent $permissioncomponent,
CustomButtonPermissions $custombuttonpermissions)
{
$this->config = $config;
$this->event = $event;
$this->language = $language;
$this->component = $component;
$this->fieldname = $fieldname;
$this->typename = $typename;
$this->counter = $counter;
$this->permission = $permission;
$this->assetsrules = $assetsrules;
$this->customtabs = $customtabs;
$this->permissionviews = $permissionviews;
$this->permissionfields = $permissionfields;
$this->permissioncomponent = $permissioncomponent;
$this->custombuttonpermissions = $custombuttonpermissions;
}
/**
* Get Access Sections
*
* @return string
* @since 3.2.0
*/
public function get(): string
{
// access size counter
$this->counter->accessSize = 12; // ;)
// Trigger Event: jcb_ce_onBeforeBuildAccessSections
$this->event->trigger(
'jcb_ce_onBeforeBuildAccessSections'
);
// Get the default fields
$default_fields = $this->config->default_fields;
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.admin',
'title' => 'JACTION_ADMIN',
'description' => 'JACTION_ADMIN_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.options',
'title' => 'JACTION_OPTIONS',
'description' => 'JACTION_OPTIONS_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.manage',
'title' => 'JACTION_MANAGE',
'description' => 'JACTION_MANAGE_COMPONENT_DESC'
], true);
if ($this->config->get('add_eximport', false))
{
$exportTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Export Data', 'U');
$exportDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Export Data', 'U')
. '_DESC';
$this->language->set('bothadmin', $exportTitle, 'Export Data');
$this->language->set(
'bothadmin', $exportDesc,
' Allows users in this group to export data.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.export',
'title' => $exportTitle,
'description' => $exportDesc
], true);
// the size needs increase
$this->counter->accessSize++;
$importTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Import Data', 'U');
$importDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Import Data', 'U')
. '_DESC';
$this->language->set('bothadmin', $importTitle, 'Import Data');
$this->language->set(
'bothadmin', $importDesc,
' Allows users in this group to import data.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.import',
'title' => $importTitle,
'description' => $importDesc
], true);
// the size needs increase
$this->counter->accessSize++;
}
// version permission
$batchTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Use Batch', 'U');
$batchDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Use Batch', 'U') . '_DESC';
$this->language->set('bothadmin', $batchTitle, 'Use Batch');
$this->language->set(
'bothadmin', $batchDesc,
' Allows users in this group to use batch copy/update method.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.batch',
'title' => $batchTitle,
'description' => $batchDesc
], true);
// version permission
$importTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Versions', 'U');
$importDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Versions', 'U')
. '_DESC';
$this->language->set('bothadmin', $importTitle, 'Edit Version');
$this->language->set(
'bothadmin', $importDesc,
' Allows users in this group to edit versions.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.version',
'title' => $importTitle,
'description' => $importDesc
], true);
// set the defaults
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.create',
'title' => 'JACTION_CREATE',
'description' => 'JACTION_CREATE_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.delete',
'title' => 'JACTION_DELETE',
'description' => 'JACTION_DELETE_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit',
'title' => 'JACTION_EDIT',
'description' => 'JACTION_EDIT_COMPONENT_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.state',
'title' => 'JACTION_EDITSTATE',
'description' => 'JACTION_ACCESS_EDITSTATE_DESC'
], true);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.own',
'title' => 'JACTION_EDITOWN',
'description' => 'JACTION_EDITOWN_COMPONENT_DESC'
], true);
// set the Joomla fields
if ($this->config->get('set_joomla_fields', false))
{
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.value',
'title' => 'JACTION_EDITVALUE',
'description' => 'JACTION_EDITVALUE_COMPONENT_DESC'
], true);
// the size needs increase
$this->counter->accessSize++;
}
// new custom created by permissions
$created_byTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Created By', 'U');
$created_byDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Created By', 'U')
. '_DESC';
$this->language->set('bothadmin', $created_byTitle, 'Edit Created By');
$this->language->set(
'bothadmin', $created_byDesc,
' Allows users in this group to edit created by.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.created_by',
'title' => $created_byTitle,
'description' => $created_byDesc
], true);
// new custom created date permissions
$createdTitle = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Created Date', 'U');
$createdDesc = $this->config->lang_prefix . '_'
. StringHelper::safe('Edit Created Date', 'U')
. '_DESC';
$this->language->set('bothadmin', $createdTitle, 'Edit Created Date');
$this->language->set(
'bothadmin', $createdDesc,
' Allows users in this group to edit created date.'
);
$this->permissioncomponent->add('->HEAD<-', [
'name' => 'core.edit.created',
'title' => $createdTitle,
'description' => $createdDesc
], true);
// set the menu controller lookup
$menuControllers = ['access', 'submenu', 'dashboard_list', 'dashboard_add'];
// set the custom admin views permissions
if ($this->component->isArray('custom_admin_views'))
{
foreach ($this->component->get('custom_admin_views') as $custom_admin_view)
{
// new custom permissions to access this view
$customAdminName = $custom_admin_view['settings']->name;
$customAdminCode = $custom_admin_view['settings']->code;
$customAdminTitle = $this->config->lang_prefix . '_'
. StringHelper::safe(
$customAdminName . ' Access', 'U'
);
$customAdminDesc = $this->config->lang_prefix . '_'
. StringHelper::safe(
$customAdminName . ' Access', 'U'
) . '_DESC';
$sortKey = StringHelper::safe(
$customAdminName . ' Access'
);
$this->language->set(
'bothadmin', $customAdminTitle, $customAdminName . ' Access'
);
$this->language->set(
'bothadmin', $customAdminDesc,
' Allows the users in this group to access '
. StringHelper::safe($customAdminName, 'w')
. '.'
);
$this->permissioncomponent->set($sortKey, [
'name' => "$customAdminCode.access",
'title' => $customAdminTitle,
'description' => $customAdminDesc
]);
// the size needs increase
$this->counter->accessSize++;
// add the custom permissions to use the buttons of this view
$this->custombuttonpermissions->add(
$custom_admin_view['settings'], $customAdminName,
$customAdminCode
);
// add menu controll view that has menus options
foreach ($menuControllers as $menuController)
{
// add menu controll view that has menus options
if (isset($custom_admin_view[$menuController])
&& $custom_admin_view[$menuController])
{
$targetView_ = 'views.';
if ($menuController === 'dashboard_add')
{
$targetView_ = 'view.';
}
// menucontroller
$menucontrollerView['action'] = $targetView_
. $menuController;
$menucontrollerView['implementation'] = '2';
if (isset($custom_admin_view['settings']->permissions)
&& ArrayHelper::check(
$custom_admin_view['settings']->permissions
))
{
array_push(
$custom_admin_view['settings']->permissions,
$menucontrollerView
);
}
else
{
$custom_admin_view['settings']->permissions
= [];
$custom_admin_view['settings']->permissions[]
= $menucontrollerView;
}
unset($menucontrollerView);
}
}
$this->permission ->set(
$custom_admin_view, $customAdminCode, $customAdminCode,
$menuControllers, 'customAdmin'
);
}
}
// set the site views permissions
if ($this->component->isArray('site_views'))
{
foreach ($this->component->get('site_views') as $site_view)
{
// new custom permissions to access this view
$siteName = $site_view['settings']->name;
$siteCode = $site_view['settings']->code;
$siteTitle = $this->config->lang_prefix . '_'
. StringHelper::safe(
$siteName . ' Access Site', 'U'
);
$siteDesc = $this->config->lang_prefix . '_'
. StringHelper::safe(
$siteName . ' Access Site', 'U'
) . '_DESC';
$sortKey = StringHelper::safe(
$siteName . ' Access Site'
);
if (isset($site_view['access']) && $site_view['access'] == 1)
{
$this->language->set(
'bothadmin', $siteTitle, $siteName . ' (Site) Access'
);
$this->language->set(
'bothadmin', $siteDesc,
' Allows the users in this group to access site '
. StringHelper::safe($siteName, 'w')
. '.'
);
$this->permissioncomponent->set($sortKey, [
'name' => "site.$siteCode.access",
'title' => $siteTitle,
'description' => $siteDesc
]);
// the size needs increase
$this->counter->accessSize++;
// check if this site view requires access rule to default to public
if (isset($site_view['public_access'])
&& $site_view['public_access'] == 1)
{
// we use one as public group (TODO we see if we run into any issues)
$this->assetsrules->add('site', '"site.' . $siteCode
. '.access":{"1":1}');
}
}
// add the custom permissions to use the buttons of this view
$this->custombuttonpermissions->add(
$site_view['settings'], $siteName, $siteCode
);
}
}
if ($this->component->isArray('admin_views'))
{
foreach ($this->component->get('admin_views') as $view)
{
// set view name
$nameView = StringHelper::safe(
$view['settings']->name_single
);
$nameViews = StringHelper::safe(
$view['settings']->name_list
);
// add custom tab permissions if found
if (($tabs_ = $this->customtabs->get($nameView)) !== null
&& ArrayHelper::check($tabs_))
{
foreach ($tabs_ as $_customTab)
{
if (isset($_customTab['permission'])
&& $_customTab['permission'] == 1)
{
$this->permissioncomponent->set($_customTab['sortKey'], [
'name' => $_customTab['view'] . '.' . $_customTab['code'] . '.viewtab',
'title' => $_customTab['lang_permission'],
'description' => $_customTab['lang_permission_desc']
]);
// the size needs increase
$this->counter->accessSize++;
}
}
}
// add the custom permissions to use the buttons of this view
$this->custombuttonpermissions->add(
$view['settings'], $view['settings']->name_single, $nameView
);
if ($nameView != 'component')
{
// add menu controll view that has menus options
foreach ($menuControllers as $menuController)
{
// add menu controll view that has menus options
if (isset($view[$menuController])
&& $view[$menuController])
{
$targetView_ = 'views.';
if ($menuController === 'dashboard_add')
{
$targetView_ = 'view.';
}
// menucontroller
$menucontrollerView['action'] = $targetView_ . $menuController;
$menucontrollerView['implementation'] = '2';
if (isset($view['settings']->permissions)
&& ArrayHelper::check(
$view['settings']->permissions
))
{
array_push(
$view['settings']->permissions,
$menucontrollerView
);
}
else
{
$view['settings']->permissions = [];
$view['settings']->permissions[] = $menucontrollerView;
}
unset($menucontrollerView);
}
}
// check if there are fields
if (ArrayHelper::check($view['settings']->fields))
{
// field permission options
$permission_options = [1 => 'edit', 2 => 'access', 3 => 'view'];
// check the fields for their permission settings
foreach ($view['settings']->fields as $field)
{
// see if field require permissions to be set
if (isset($field['permission'])
&& ArrayHelper::check(
$field['permission']
))
{
if (ArrayHelper::check(
$field['settings']->properties
))
{
$fieldType = $this->typename->get($field);
$fieldName = $this->fieldname->get(
$field, $nameViews
);
// loop the permission options
foreach ($field['permission'] as $permission_id)
{
// set the permission key word
$permission_option = $permission_options[(int) $permission_id];
// reset the bucket
$fieldView = [];
// set the permission for this field
$fieldView['action'] = 'view.' . $permission_option . '.' . $fieldName;
$fieldView['implementation'] = '3';
// check if persmissions was already set
if (isset($view['settings']->permissions)
&& ArrayHelper::check(
$view['settings']->permissions
))
{
array_push($view['settings']->permissions, $fieldView);
}
else
{
$view['settings']->permissions = [];
$view['settings']->permissions[] = $fieldView;
}
// ensure that no default field get loaded
if (!in_array($fieldName, $default_fields))
{
// load to global field permission set
$this->permissionfields->
set("$nameView.$fieldName.$permission_option", $fieldType);
}
}
}
}
}
}
$this->permission ->set(
$view, $nameView, $nameViews, $menuControllers
);
}
}
// Trigger Event: jcb_ce_onAfterBuildAccessSections
$this->event->trigger(
'jcb_ce_onAfterBuildAccessSections'
);
/// now build the section
$component = $this->permissioncomponent->build();
// add views to the component section
$component .= $this->permissionviews->build();
// remove the fix, is not needed
if ($this->counter->accessSize < 30)
{
// since we have less than 30 actions
// we do not need the fix for this component
$this->config->set('add_assets_table_fix', 0);
}
else
{
// get the worst case column size required (can be worse I know)
// access/action size x 20 characters x 8 groups
$character_length = (int) MathHelper::bc(
'mul', $this->counter->accessSize, 20, 0
);
// set worse case
$this->config->set('access_worse_case', (int) MathHelper::bc(
'mul', $character_length, 8, 0
));
}
// return the build
return $component;
}
return false;
}

View File

@ -0,0 +1,87 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "15615db0-02b9-454f-a82e-1ab39ae5e6a9",
"implements": null,
"load_selection": null,
"name": "AccessSections",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Creator.AccessSections",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "20ed72b0-fcac-4344-aee1-8a65e3bf221d",
"as": "Event"
},
"use_selection2": {
"use": "8eee7df5-2775-41a9-9372-c46c5939a252",
"as": "default"
},
"use_selection3": {
"use": "e2472b22-a329-44d8-b4a2-ae3ba99e17a0",
"as": "default"
},
"use_selection4": {
"use": "9387215f-a965-4421-acf3-5e8f9d11382f",
"as": "FieldName"
},
"use_selection5": {
"use": "eb33420d-359d-44a5-852e-613aef1feaae",
"as": "default"
},
"use_selection6": {
"use": "e6d871a6-bbe7-497d-af01-68f6bb9a87f4",
"as": "default"
},
"use_selection7": {
"use": "7f01622a-74c9-4e67-b111-3eb488035206",
"as": "default"
},
"use_selection8": {
"use": "9b5872d6-c1d8-4602-b443-5844d2c950ee",
"as": "default"
},
"use_selection9": {
"use": "9551b683-67b6-4367-bb14-4b016def37e3",
"as": "default"
},
"use_selection10": {
"use": "480d11b9-783b-45d5-bce1-b0c2fcaad08a",
"as": "default"
},
"use_selection11": {
"use": "5133a033-1351-43ec-9692-2907d7b9aacd",
"as": "default"
},
"use_selection12": {
"use": "94f4939f-82cc-4196-802b-1346ce5c7f99",
"as": "default"
},
"use_selection13": {
"use": "8bf026e7-9ae0-423c-b74b-5bc16c54acf7",
"as": "default"
},
"use_selection14": {
"use": "152c8793-8b75-4715-996a-257b9f65451c",
"as": "default"
},
"use_selection15": {
"use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a",
"as": "default"
},
"use_selection16": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Creator.AccessSections",
"description": "Access Sections Creator Class\r\n\r\n@since 3.2.0",
"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

@ -95,10 +95,14 @@ class Historycomponent
* @since 3.2.0
*/
private function setAdminView(object $item)
{
$old_admin_views = null;
if (isset($item->addadmin_views_id))
{
$old_admin_views = $this->history->get(
'component_admin_views', $item->addadmin_views_id
);
}
// add new views if found
if ($old_admin_views && ObjectHelper::check($old_admin_views))
@ -125,10 +129,14 @@ class Historycomponent
* @since 3.2.0
*/
private function setComponent(object &$item)
{
$old_component = null;
if (isset($this->config->component_id))
{
$old_component = $this->history->get(
'joomla_component', $this->config->component_id
);
}
// check if a new version was manually set
if ($old_component && ObjectHelper::check($old_component))

View File

@ -65,10 +65,14 @@
* @since 3.2.0
*/
private function setAdminView(object $item)
{
$old_admin_views = null;
if (isset($item->addadmin_views_id))
{
$old_admin_views = $this->history->get(
'component_admin_views', $item->addadmin_views_id
);
}
// add new views if found
if ($old_admin_views && ObjectHelper::check($old_admin_views))
@ -95,10 +99,14 @@
* @since 3.2.0
*/
private function setComponent(object &$item)
{
$old_component = null;
if (isset($this->config->component_id))
{
$old_component = $this->history->get(
'joomla_component', $this->config->component_id
);
}
// check if a new version was manually set
if ($old_component && ObjectHelper::check($old_component))

View File

@ -0,0 +1,52 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class InputButton (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Field\JoomlaFour**
```uml
@startuml
class InputButton << (F,LightGreen) >> #RoyalBlue {
# Config $config
# Placeholder $placeholder
# Permission $permission
+ __construct(Config $config, Placeholder $placeholder, ...)
+ get(array $fieldData) : string
}
note right of InputButton::__construct
Constructor.
since: 3.2.0
arguments:
Config $config
Placeholder $placeholder
Permission $permission
end note
note right of InputButton::get
get Add Button To List Field Input (getInput tweak)
since: 3.2.0
return: string
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,345 @@
<?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\Field\JoomlaFour;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Field\InputButtonInterface;
/**
* Compiler Field Input Button
*
* @since 3.2.0
*/
final class InputButton implements InputButtonInterface
{
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param Permission $permission The Permission Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Placeholder $placeholder,
Permission $permission)
{
$this->config = $config;
$this->placeholder = $placeholder;
$this->permission = $permission;
}
/**
* get Add Button To List Field Input (getInput tweak)
*
* @param array $fieldData The field custom data
*
* @return string of getInput class on success empty string otherwise
* @since 3.2.0
*/
public function get(array $fieldData): string
{
// make sure hte view values are set
if (isset($fieldData['add_button'])
&& ($fieldData['add_button'] === 'true'
|| 1 == $fieldData['add_button'])
&& isset($fieldData['view'])
&& isset($fieldData['views'])
&& StringHelper::check($fieldData['view'])
&& StringHelper::check($fieldData['views']))
{
// set local component
$local_component = "com_" . $this->config->component_code_name;
// check that the component value is set
if (!isset($fieldData['component'])
|| !StringHelper::check(
$fieldData['component']
))
{
$fieldData['component'] = $local_component;
}
// check that the component has the com_ value in it
if (strpos((string) $fieldData['component'], 'com_') === false
|| strpos((string) $fieldData['component'], '=') !== false)
{
$fieldData['component'] = "com_" . $fieldData['component'];
}
// make sure the component is update if # # # or [ [ [ component placeholder is used
if (strpos((string) $fieldData['component'], (string) Placefix::h()) !== false
|| strpos((string) $fieldData['component'], (string) Placefix::b()) !== false) // should not be needed... but
{
$fieldData['component'] = $this->placeholder->update_(
$fieldData['component']
);
}
// get core permissions
$coreLoad = false;
// add ref tags
$refLoad = true;
// fall back on the field component
$component = $fieldData['component'];
// check if we should add ref tags (since it only works well on local views)
if ($local_component !== $component)
{
// do not add ref tags
$refLoad = false;
}
// start building the add buttons/s
$addButton = array();
$addButton[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
$addButton[] = Indent::_(1) . " * Override to add new button";
$addButton[] = Indent::_(1) . " *";
$addButton[] = Indent::_(1)
. " * @return string The field input markup.";
$addButton[] = Indent::_(1) . " *";
$addButton[] = Indent::_(1) . " * @since 3.2";
$addButton[] = Indent::_(1) . " */";
$addButton[] = Indent::_(1) . "protected function getInput()";
$addButton[] = Indent::_(1) . "{";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " see if we should add buttons";
$addButton[] = Indent::_(2)
. "\$set_button = \$this->getAttribute('button');";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get html";
$addButton[] = Indent::_(2) . "\$html = parent::getInput();";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " if true set button";
$addButton[] = Indent::_(2) . "if (\$set_button === 'true')";
$addButton[] = Indent::_(2) . "{";
$addButton[] = Indent::_(3) . "\$button = array();";
$addButton[] = Indent::_(3) . "\$script = array();";
$addButton[] = Indent::_(3)
. "\$button_code_name = \$this->getAttribute('name');";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get the input from url";
$addButton[] = Indent::_(3) . "\$app = Factory::getApplication();";
$addButton[] = Indent::_(3) . "\$jinput = \$app->input;";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get the view name & id";
$addButton[] = Indent::_(3)
. "\$values = \$jinput->getArray(array(";
$addButton[] = Indent::_(4) . "'id' => 'int',";
$addButton[] = Indent::_(4) . "'view' => 'word'";
$addButton[] = Indent::_(3) . "));";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " check if new item";
$addButton[] = Indent::_(3) . "\$ref = '';";
$addButton[] = Indent::_(3) . "\$refJ = '';";
if ($refLoad)
{
$addButton[] = Indent::_(3)
. "if (!is_null(\$values['id']) && strlen(\$values['view']))";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " only load referral if not new item.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;ref=' . \$values['view'] . '&amp;refid=' . \$values['id'];";
$addButton[] = Indent::_(4)
. "\$refJ = '&ref=' . \$values['view'] . '&refid=' . \$values['id'];";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " get the return value.";
$addButton[] = Indent::_(4)
. "\$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();";
$addButton[] = Indent::_(4)
. "\$_return = urlencode(base64_encode(\$_uri));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " load return value.";
$addButton[] = Indent::_(4)
. "\$ref .= '&amp;return=' . \$_return;";
$addButton[] = Indent::_(4)
. "\$refJ .= '&return=' . \$_return;";
$addButton[] = Indent::_(3) . "}";
}
else
{
$addButton[] = Indent::_(3)
. "if (!is_null(\$values['id']) && strlen(\$values['view']))";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " only load field details if not new item.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;field=' . \$values['view'] . '&amp;field_id=' . \$values['id'];";
$addButton[] = Indent::_(4)
. "\$refJ = '&field=' . \$values['view'] . '&field_id=' . \$values['id'];";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " get the return value.";
$addButton[] = Indent::_(4)
. "\$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();";
$addButton[] = Indent::_(4)
. "\$_return = urlencode(base64_encode(\$_uri));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " load return value.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;return=' . \$_return;";
$addButton[] = Indent::_(4)
. "\$refJ = '&return=' . \$_return;";
$addButton[] = Indent::_(3) . "}";
}
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get button label";
$addButton[] = Indent::_(3)
. "\$button_label = trim(\$button_code_name);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace('/_+/', ' ', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace('/\s+/', ' ', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace(\"/[^A-Za-z ]/\", '', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = ucfirst(strtolower(\$button_label));";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get user object";
$addButton[] = Indent::_(3) . "\$user = Factory::getApplication()->getIdentity();";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " only add if user allowed to create " . $fieldData['view'];
// check if the item has permissions.
$addButton[] = Indent::_(3) . "if (\$user->authorise('"
. $this->permission->getGlobal($fieldData['view'], 'core.create')
. "', '" . $component . "') && \$app->isClient('administrator')) // TODO for now only in admin area.";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build Create button";
$addButton[] = Indent::_(4)
. "\$button[] = '<a id=\"'.\$button_code_name.'Create\" class=\"btn btn-small btn-success hasTooltip\" title=\"'.Text:"
. ":sprintf('" . $this->config->lang_prefix
. "_CREATE_NEW_S', \$button_label).'\" style=\"border-radius: 0px 4px 4px 0px;\"";
$addButton[] = Indent::_(5) . "href=\"index.php?option="
. $fieldData['component'] . "&amp;view=" . $fieldData['view']
. "&amp;layout=edit'.\$ref.'\" >";
$addButton[] = Indent::_(5)
. "<span class=\"icon-new icon-white\"></span></a>';";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " only add if user allowed to edit " . $fieldData['view'];
// check if the item has permissions.
$addButton[] = Indent::_(3) . "if (\$user->authorise('"
. $this->permission->getGlobal($fieldData['view'], 'core.edit')
. "', '" . $component . "') && \$app->isClient('administrator')) // TODO for now only in admin area.";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build edit button";
$addButton[] = Indent::_(4)
. "\$button[] = '<a id=\"'.\$button_code_name.'Edit\" class=\"btn btn-small hasTooltip\" title=\"'.Text:"
. ":sprintf('" . $this->config->lang_prefix
. "_EDIT_S', \$button_label).'\" style=\"display: none; border-radius: 0px 4px 4px 0px;\" href=\"#\" >";
$addButton[] = Indent::_(5)
. "<span class=\"icon-edit\"></span></a>';";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build script";
$addButton[] = Indent::_(4) . "\$script[] = \"";
$addButton[] = Indent::_(5) . "document.addEventListener('DOMContentLoaded', function() {";
$addButton[] = Indent::_(6)
. "document.getElementById('jform_\".\$button_code_name.\"').addEventListener('change', function(e) {";
$addButton[] = Indent::_(7) . "e.preventDefault();";
$addButton[] = Indent::_(7)
. "let \".\$button_code_name.\"Value = this.value;";
$addButton[] = Indent::_(7)
. "\".\$button_code_name.\"Button(\".\$button_code_name.\"Value);";
$addButton[] = Indent::_(6) . "});";
$addButton[] = Indent::_(6)
. "let \".\$button_code_name.\"Value = document.getElementById('jform_\".\$button_code_name.\"').value;";
$addButton[] = Indent::_(6)
. "\".\$button_code_name.\"Button(\".\$button_code_name.\"Value);";
$addButton[] = Indent::_(5) . "});";
$addButton[] = Indent::_(5)
. "function \".\$button_code_name.\"Button(value) {";
$addButton[] = Indent::_(6)
. "var createButton = document.getElementById('\".\$button_code_name.\"Create');";
$addButton[] = Indent::_(6)
. "var editButton = document.getElementById('\".\$button_code_name.\"Edit');";
$addButton[] = Indent::_(6)
. "if (value > 0) {"; // TODO not ideal since value may not be an (int)
$addButton[] = Indent::_(7) . "// hide the create button";
$addButton[] = Indent::_(7)
. "createButton.style.display = 'none';";
$addButton[] = Indent::_(7) . "// show edit button";
$addButton[] = Indent::_(7)
. "editButton.style.display = 'block';";
$addButton[] = Indent::_(7) . "let url = 'index.php?option="
. $fieldData['component'] . "&view=" . $fieldData['views']
. "&task=" . $fieldData['view']
. ".edit&id='+value+'\".\$refJ.\"';"; // TODO this value may not be the ID
$addButton[] = Indent::_(7)
. "editButton.setAttribute('href', url);";
$addButton[] = Indent::_(6) . "} else {";
$addButton[] = Indent::_(7) . "// show the create button";
$addButton[] = Indent::_(7)
. "createButton.style.display = 'block';";
$addButton[] = Indent::_(7) . "// hide edit button";
$addButton[] = Indent::_(7)
. "editButton.style.display = 'none';";
$addButton[] = Indent::_(6) . "}";
$addButton[] = Indent::_(5) . "}\";";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " check if button was created for " . $fieldData['view']
. " field.";
$addButton[] = Indent::_(3)
. "if (is_array(\$button) && count(\$button) > 0)";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " Load the needed script.";
$addButton[] = Indent::_(4)
. "\$document = Factory::getApplication()->getDocument();";
$addButton[] = Indent::_(4)
. "\$document->addScriptDeclaration(implode(' ',\$script));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " return the button attached to input field.";
$addButton[] = Indent::_(4)
. "return '<div class=\"input-group\">' .\$html . implode('',\$button).'</div>';";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(2) . "}";
$addButton[] = Indent::_(2) . "return \$html;";
$addButton[] = Indent::_(1) . "}";
return implode(PHP_EOL, $addButton);
}
return '';
}
}

View File

@ -0,0 +1,312 @@
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param Permission $permission The Permission Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Placeholder $placeholder,
Permission $permission)
{
$this->config = $config;
$this->placeholder = $placeholder;
$this->permission = $permission;
}
/**
* get Add Button To List Field Input (getInput tweak)
*
* @param array $fieldData The field custom data
*
* @return string of getInput class on success empty string otherwise
* @since 3.2.0
*/
public function get(array $fieldData): string
{
// make sure hte view values are set
if (isset($fieldData['add_button'])
&& ($fieldData['add_button'] === 'true'
|| 1 == $fieldData['add_button'])
&& isset($fieldData['view'])
&& isset($fieldData['views'])
&& StringHelper::check($fieldData['view'])
&& StringHelper::check($fieldData['views']))
{
// set local component
$local_component = "com_" . $this->config->component_code_name;
// check that the component value is set
if (!isset($fieldData['component'])
|| !StringHelper::check(
$fieldData['component']
))
{
$fieldData['component'] = $local_component;
}
// check that the component has the com_ value in it
if (strpos((string) $fieldData['component'], 'com_') === false
|| strpos((string) $fieldData['component'], '=') !== false)
{
$fieldData['component'] = "com_" . $fieldData['component'];
}
// make sure the component is update if # # # or [ [ [ component placeholder is used
if (strpos((string) $fieldData['component'], (string) Placefix::h()) !== false
|| strpos((string) $fieldData['component'], (string) Placefix::b()) !== false) // should not be needed... but
{
$fieldData['component'] = $this->placeholder->update_(
$fieldData['component']
);
}
// get core permissions
$coreLoad = false;
// add ref tags
$refLoad = true;
// fall back on the field component
$component = $fieldData['component'];
// check if we should add ref tags (since it only works well on local views)
if ($local_component !== $component)
{
// do not add ref tags
$refLoad = false;
}
// start building the add buttons/s
$addButton = array();
$addButton[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
$addButton[] = Indent::_(1) . " * Override to add new button";
$addButton[] = Indent::_(1) . " *";
$addButton[] = Indent::_(1)
. " * @return string The field input markup.";
$addButton[] = Indent::_(1) . " *";
$addButton[] = Indent::_(1) . " * @since 3.2";
$addButton[] = Indent::_(1) . " */";
$addButton[] = Indent::_(1) . "protected function getInput()";
$addButton[] = Indent::_(1) . "{";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " see if we should add buttons";
$addButton[] = Indent::_(2)
. "\$set_button = \$this->getAttribute('button');";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get html";
$addButton[] = Indent::_(2) . "\$html = parent::getInput();";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " if true set button";
$addButton[] = Indent::_(2) . "if (\$set_button === 'true')";
$addButton[] = Indent::_(2) . "{";
$addButton[] = Indent::_(3) . "\$button = array();";
$addButton[] = Indent::_(3) . "\$script = array();";
$addButton[] = Indent::_(3)
. "\$button_code_name = \$this->getAttribute('name');";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get the input from url";
$addButton[] = Indent::_(3) . "\$app = Factory::getApplication();";
$addButton[] = Indent::_(3) . "\$jinput = \$app->input;";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get the view name & id";
$addButton[] = Indent::_(3)
. "\$values = \$jinput->getArray(array(";
$addButton[] = Indent::_(4) . "'id' => 'int',";
$addButton[] = Indent::_(4) . "'view' => 'word'";
$addButton[] = Indent::_(3) . "));";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " check if new item";
$addButton[] = Indent::_(3) . "\$ref = '';";
$addButton[] = Indent::_(3) . "\$refJ = '';";
if ($refLoad)
{
$addButton[] = Indent::_(3)
. "if (!is_null(\$values['id']) && strlen(\$values['view']))";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " only load referral if not new item.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;ref=' . \$values['view'] . '&amp;refid=' . \$values['id'];";
$addButton[] = Indent::_(4)
. "\$refJ = '&ref=' . \$values['view'] . '&refid=' . \$values['id'];";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " get the return value.";
$addButton[] = Indent::_(4)
. "\$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();";
$addButton[] = Indent::_(4)
. "\$_return = urlencode(base64_encode(\$_uri));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " load return value.";
$addButton[] = Indent::_(4)
. "\$ref .= '&amp;return=' . \$_return;";
$addButton[] = Indent::_(4)
. "\$refJ .= '&return=' . \$_return;";
$addButton[] = Indent::_(3) . "}";
}
else
{
$addButton[] = Indent::_(3)
. "if (!is_null(\$values['id']) && strlen(\$values['view']))";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " only load field details if not new item.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;field=' . \$values['view'] . '&amp;field_id=' . \$values['id'];";
$addButton[] = Indent::_(4)
. "\$refJ = '&field=' . \$values['view'] . '&field_id=' . \$values['id'];";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " get the return value.";
$addButton[] = Indent::_(4)
. "\$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();";
$addButton[] = Indent::_(4)
. "\$_return = urlencode(base64_encode(\$_uri));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " load return value.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;return=' . \$_return;";
$addButton[] = Indent::_(4)
. "\$refJ = '&return=' . \$_return;";
$addButton[] = Indent::_(3) . "}";
}
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get button label";
$addButton[] = Indent::_(3)
. "\$button_label = trim(\$button_code_name);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace('/_+/', ' ', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace('/\s+/', ' ', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace(\"/[^A-Za-z ]/\", '', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = ucfirst(strtolower(\$button_label));";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get user object";
$addButton[] = Indent::_(3) . "\$user = Factory::getApplication()->getIdentity();";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " only add if user allowed to create " . $fieldData['view'];
// check if the item has permissions.
$addButton[] = Indent::_(3) . "if (\$user->authorise('"
. $this->permission->getGlobal($fieldData['view'], 'core.create')
. "', '" . $component . "') && \$app->isClient('administrator')) // TODO for now only in admin area.";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build Create button";
$addButton[] = Indent::_(4)
. "\$button[] = '<a id=\"'.\$button_code_name.'Create\" class=\"btn btn-small btn-success hasTooltip\" title=\"'.Text:"
. ":sprintf('" . $this->config->lang_prefix
. "_CREATE_NEW_S', \$button_label).'\" style=\"border-radius: 0px 4px 4px 0px;\"";
$addButton[] = Indent::_(5) . "href=\"index.php?option="
. $fieldData['component'] . "&amp;view=" . $fieldData['view']
. "&amp;layout=edit'.\$ref.'\" >";
$addButton[] = Indent::_(5)
. "<span class=\"icon-new icon-white\"></span></a>';";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " only add if user allowed to edit " . $fieldData['view'];
// check if the item has permissions.
$addButton[] = Indent::_(3) . "if (\$user->authorise('"
. $this->permission->getGlobal($fieldData['view'], 'core.edit')
. "', '" . $component . "') && \$app->isClient('administrator')) // TODO for now only in admin area.";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build edit button";
$addButton[] = Indent::_(4)
. "\$button[] = '<a id=\"'.\$button_code_name.'Edit\" class=\"btn btn-small hasTooltip\" title=\"'.Text:"
. ":sprintf('" . $this->config->lang_prefix
. "_EDIT_S', \$button_label).'\" style=\"display: none; border-radius: 0px 4px 4px 0px;\" href=\"#\" >";
$addButton[] = Indent::_(5)
. "<span class=\"icon-edit\"></span></a>';";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build script";
$addButton[] = Indent::_(4) . "\$script[] = \"";
$addButton[] = Indent::_(5) . "document.addEventListener('DOMContentLoaded', function() {";
$addButton[] = Indent::_(6)
. "document.getElementById('jform_\".\$button_code_name.\"').addEventListener('change', function(e) {";
$addButton[] = Indent::_(7) . "e.preventDefault();";
$addButton[] = Indent::_(7)
. "let \".\$button_code_name.\"Value = this.value;";
$addButton[] = Indent::_(7)
. "\".\$button_code_name.\"Button(\".\$button_code_name.\"Value);";
$addButton[] = Indent::_(6) . "});";
$addButton[] = Indent::_(6)
. "let \".\$button_code_name.\"Value = document.getElementById('jform_\".\$button_code_name.\"').value;";
$addButton[] = Indent::_(6)
. "\".\$button_code_name.\"Button(\".\$button_code_name.\"Value);";
$addButton[] = Indent::_(5) . "});";
$addButton[] = Indent::_(5)
. "function \".\$button_code_name.\"Button(value) {";
$addButton[] = Indent::_(6)
. "var createButton = document.getElementById('\".\$button_code_name.\"Create');";
$addButton[] = Indent::_(6)
. "var editButton = document.getElementById('\".\$button_code_name.\"Edit');";
$addButton[] = Indent::_(6)
. "if (value > 0) {"; // TODO not ideal since value may not be an (int)
$addButton[] = Indent::_(7) . "// hide the create button";
$addButton[] = Indent::_(7)
. "createButton.style.display = 'none';";
$addButton[] = Indent::_(7) . "// show edit button";
$addButton[] = Indent::_(7)
. "editButton.style.display = 'block';";
$addButton[] = Indent::_(7) . "let url = 'index.php?option="
. $fieldData['component'] . "&view=" . $fieldData['views']
. "&task=" . $fieldData['view']
. ".edit&id='+value+'\".\$refJ.\"';"; // TODO this value may not be the ID
$addButton[] = Indent::_(7)
. "editButton.setAttribute('href', url);";
$addButton[] = Indent::_(6) . "} else {";
$addButton[] = Indent::_(7) . "// show the create button";
$addButton[] = Indent::_(7)
. "createButton.style.display = 'block';";
$addButton[] = Indent::_(7) . "// hide edit button";
$addButton[] = Indent::_(7)
. "editButton.style.display = 'none';";
$addButton[] = Indent::_(6) . "}";
$addButton[] = Indent::_(5) . "}\";";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " check if button was created for " . $fieldData['view']
. " field.";
$addButton[] = Indent::_(3)
. "if (is_array(\$button) && count(\$button) > 0)";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " Load the needed script.";
$addButton[] = Indent::_(4)
. "\$document = Factory::getApplication()->getDocument();";
$addButton[] = Indent::_(4)
. "\$document->addScriptDeclaration(implode(' ',\$script));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " return the button attached to input field.";
$addButton[] = Indent::_(4)
. "return '<div class=\"input-group\">' .\$html . implode('',\$button).'</div>';";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(2) . "}";
$addButton[] = Indent::_(2) . "return \$html;";
$addButton[] = Indent::_(1) . "}";
return implode(PHP_EOL, $addButton);
}
return '';
}

View File

@ -0,0 +1,49 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "1b8a40e9-7847-4341-8a8e-dfdc2d531bbe",
"implements": [
"c600f58c-3fe2-4d2d-b711-2660eab6effe"
],
"load_selection": null,
"name": "InputButton",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Field.J4.InputButton",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "06453ada-e370-49f0-b262-e3f5a8ed0c2c",
"as": "default"
},
"use_selection2": {
"use": "7f01622a-74c9-4e67-b111-3eb488035206",
"as": "default"
},
"use_selection3": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default"
},
"use_selection4": {
"use": "500f3a7f-c16d-4dd4-81b2-2df6776b5388",
"as": "default"
},
"use_selection5": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
},
"use_selection6": {
"use": "4e6ff11d-bebf-42f5-8fd7-b2f882857222",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Field.JoomlaFour.InputButton",
"description": "Compiler Field Input Button\r\n\r\n@since 3.2.0",
"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

@ -14,8 +14,8 @@ class Gui #Gold {
# Config $config
# Reverse $reverse
# Parser $parser
# \JDatabaseDriver $db
# CMSApplication $app
# $db
# $app
+ __construct(?Config $config = null, ?Reverse $reverse = null, ...)
+ set(string $string, array $config) : string
+ search(string $file, array $placeholders, ...) : void
@ -31,8 +31,6 @@ note right of Gui::__construct
?Config $config = null
?Reverse $reverse = null
?Parser $parser = null
?\JDatabaseDriver $db = null
?CMSApplication $app = null
end note
note right of Gui::set

View File

@ -61,18 +61,16 @@ class Gui implements GuiInterface
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* Database object to query local DB
*
* @var CMSApplication
* @since 3.2.0
**/
protected CMSApplication $app;
protected $app;
/**
* Constructor.
@ -80,20 +78,17 @@ class Gui implements GuiInterface
* @param Config|null $config The compiler config object.
* @param Reverse|null $reverse The compiler placeholder reverse object.
* @param Parser|null $parser The powers parser object.
* @param \JDatabaseDriver|null $db The Database Driver object.
* @param CMSApplication|null $app The CMS Application object.
*
* @throws \Exception
* @since 3.2.0
*/
public function __construct(?Config $config = null, ?Reverse $reverse = null, ?Parser $parser = null,
?\JDatabaseDriver $db = null, ?CMSApplication $app = null)
public function __construct(?Config $config = null, ?Reverse $reverse = null, ?Parser $parser = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->reverse = $reverse ?: Compiler::_('Placeholder.Reverse');
$this->parser = $parser ?: Compiler::_('Power.Parser');
$this->db = $db ?: Factory::getDbo();
$this->app = $app ?: Factory::getApplication();
$this->db = Factory::getDbo();
$this->app = Factory::getApplication();
}
/**

View File

@ -25,18 +25,16 @@
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* Database object to query local DB
*
* @var CMSApplication
* @since 3.2.0
**/
protected CMSApplication $app;
protected $app;
/**
* Constructor.
@ -44,20 +42,17 @@
* @param Config|null $config The compiler config object.
* @param Reverse|null $reverse The compiler placeholder reverse object.
* @param Parser|null $parser The powers parser object.
* @param \JDatabaseDriver|null $db The Database Driver object.
* @param CMSApplication|null $app The CMS Application object.
*
* @throws \Exception
* @since 3.2.0
*/
public function __construct(?Config $config = null, ?Reverse $reverse = null, ?Parser $parser = null,
?\JDatabaseDriver $db = null, ?CMSApplication $app = null)
public function __construct(?Config $config = null, ?Reverse $reverse = null, ?Parser $parser = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->reverse = $reverse ?: Compiler::_('Placeholder.Reverse');
$this->parser = $parser ?: Compiler::_('Power.Parser');
$this->db = $db ?: Factory::getDbo();
$this->app = $app ?: Factory::getApplication();
$this->db = Factory::getDbo();
$this->app = Factory::getApplication();
}
/**

View File

@ -14,10 +14,10 @@ class External #Gold {
# array $code
# array $cutter
# Placeholder $placeholder
# \JDatabaseDriver $db
# User $user
# CMSApplication $app
+ __construct(?Placeholder $placeholder = null, ?\JDatabaseDriver $db = null, ...)
# $db
# $user
# $app
+ __construct(?Placeholder $placeholder = null)
+ set(string $string, int $debug) : string
# getCode(string $target, array $bucket) : void
# cut(string $string, string $sequence, ...) : string
@ -27,12 +27,6 @@ note right of External::__construct
Constructor.
since: 3.2.0
arguments:
?Placeholder $placeholder = null
?\JDatabaseDriver $db = null
?User $user = null
?CMSApplication $app = null
end note
note right of External::set

View File

@ -60,45 +60,38 @@ class External implements ExternalInterface
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* User object
*
* @var User
* @since 3.2.0
**/
protected User $user;
protected $user;
/**
* Database object to query local DB
*
* @var CMSApplication
* @since 3.2.0
**/
protected CMSApplication $app;
protected $app;
/**
* Constructor.
*
* @param Placeholder|null $placeholder The compiler placeholder object.
* @param \JDatabaseDriver|null $db The Database Driver object.
* @param User|null $user The User object.
* @param CMSApplication|null $app The CMS Application object.
*
* @throws \Exception
* @since 3.2.0
*/
public function __construct(?Placeholder $placeholder = null,
?\JDatabaseDriver $db = null, ?User $user = null, ?CMSApplication $app = null)
public function __construct(?Placeholder $placeholder = null)
{
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
$this->db = $db ?: Factory::getDbo();
$this->user = $user ?: Factory::getUser();
$this->app = $app ?: Factory::getApplication();
$this->db = Factory::getDbo();
$this->user = Factory::getUser();
$this->app = Factory::getApplication();
}
/**

View File

@ -25,45 +25,38 @@
/**
* Database object to query local DB
*
* @var \JDatabaseDriver
* @since 3.2.0
**/
protected \JDatabaseDriver $db;
protected $db;
/**
* User object
*
* @var User
* @since 3.2.0
**/
protected User $user;
protected $user;
/**
* Database object to query local DB
*
* @var CMSApplication
* @since 3.2.0
**/
protected CMSApplication $app;
protected $app;
/**
* Constructor.
*
* @param Placeholder|null $placeholder The compiler placeholder object.
* @param \JDatabaseDriver|null $db The Database Driver object.
* @param User|null $user The User object.
* @param CMSApplication|null $app The CMS Application object.
*
* @throws \Exception
* @since 3.2.0
*/
public function __construct(?Placeholder $placeholder = null,
?\JDatabaseDriver $db = null, ?User $user = null, ?CMSApplication $app = null)
public function __construct(?Placeholder $placeholder = null)
{
$this->placeholder = $placeholder ?: Compiler::_('Placeholder');
$this->db = $db ?: Factory::getDbo();
$this->user = $user ?: Factory::getUser();
$this->app = $app ?: Factory::getApplication();
$this->db = Factory::getDbo();
$this->user = Factory::getUser();
$this->app = Factory::getApplication();
}
/**

View File

@ -207,7 +207,11 @@ class InstallScript implements GetScriptInterface
$extension = $this->extension;
// start build
$script = PHP_EOL . '/**';
$script = PHP_EOL . 'use Joomla\CMS\Factory;';
$script .= PHP_EOL . 'use Joomla\CMS\Language\Text;';
$script .= PHP_EOL . 'use Joomla\CMS\Filesystem\File;';
$script .= PHP_EOL . 'use Joomla\CMS\Filesystem\Folder;' . PHP_EOL;
$script .= PHP_EOL . '/**';
$script .= PHP_EOL . ' * ' . $extension->official_name
. ' script file.';
$script .= PHP_EOL . ' *';
@ -325,7 +329,7 @@ class InstallScript implements GetScriptInterface
$script .= PHP_EOL . Indent::_(2) . '//' . Line::_(__Line__, __Class__)
. ' get application';
$script .= PHP_EOL . Indent::_(2)
. '$app = JFactory::getApplication();' . PHP_EOL;
. '$app = Factory::getApplication();' . PHP_EOL;
// add the default version check (TODO) must make this dynamic
if ('preflight' === $name)

View File

@ -178,7 +178,11 @@
$extension = $this->extension;
// start build
$script = PHP_EOL . '/**';
$script = PHP_EOL . 'use Joomla\CMS\Factory;';
$script .= PHP_EOL . 'use Joomla\CMS\Language\Text;';
$script .= PHP_EOL . 'use Joomla\CMS\Filesystem\File;';
$script .= PHP_EOL . 'use Joomla\CMS\Filesystem\Folder;' . PHP_EOL;
$script .= PHP_EOL . '/**';
$script .= PHP_EOL . ' * ' . $extension->official_name
. ' script file.';
$script .= PHP_EOL . ' *';
@ -296,7 +300,7 @@
$script .= PHP_EOL . Indent::_(2) . '//' . Line::_(__Line__, __Class__)
. ' get application';
$script .= PHP_EOL . Indent::_(2)
. '$app = JFactory::getApplication();' . PHP_EOL;
. '$app = Factory::getApplication();' . PHP_EOL;
// add the default version check (TODO) must make this dynamic
if ('preflight' === $name)

View File

@ -0,0 +1,94 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class Header (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\JoomlaFour**
```uml
@startuml
class Header << (F,LightGreen) >> #RoyalBlue {
# Config $config
# Event $event
# Placeholder $placeholder
# Language $language
# UikitComp $uikitcomp
# AdminFilterType $adminfiltertype
# Category $category
# AccessSwitchList $accessswitchlist
# Filter $filter
# Tags $tags
# array $headers
# string $NamespacePrefix
# string $ComponentName
# string $ComponentNameSpace
+ __construct(Config $config, Event $event, ...)
+ get(string $context, string $codeName) : string
# getHeaders(string $context) : array
# setHelperClassHeader(array $headers, string $target_client) : void
# setChosenMultiSelectionHeaders(array $headers, string $nameListCode) : void
}
note right of Header::__construct
Constructor.
since: 3.2.0
arguments:
Config $config
Event $event
Placeholder $placeholder
Language $language
UikitComp $uikitcomp
AdminFilterType $adminfiltertype
Category $category
AccessSwitchList $accessswitchlist
Filter $filter
Tags $tags
end note
note right of Header::get
Get the headers for a file
since: 3.2.0
return: string
end note
note right of Header::getHeaders
Get the headers for a file
since: 3.2.0
return: array
end note
note right of Header::setHelperClassHeader
set Helper Dynamic Headers
since: 3.2.0
return: void
end note
note right of Header::setChosenMultiSelectionHeaders
Build chosen multi selection headers for the view
since: 3.2.0
return: void
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,643 @@
<?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\JoomlaFour;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event;
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
use VDM\Joomla\Componentbuilder\Compiler\Language;
use VDM\Joomla\Componentbuilder\Compiler\Builder\UikitComp;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AdminFilterType;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Category;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AccessSwitchList;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Filter;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Tags;
use VDM\Joomla\Utilities\String\NamespaceHelper;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HeaderInterface;
/**
* Build headers for all Joomla 4 files
*
* @since 3.2.0
*/
final class Header implements HeaderInterface
{
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The EventInterface Class.
*
* @var Event
* @since 3.2.0
*/
protected Event $event;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Language Class.
*
* @var Language
* @since 3.2.0
*/
protected Language $language;
/**
* The UikitComp Class.
*
* @var UikitComp
* @since 3.2.0
*/
protected UikitComp $uikitcomp;
/**
* The AdminFilterType Class.
*
* @var AdminFilterType
* @since 3.2.0
*/
protected AdminFilterType $adminfiltertype;
/**
* The Category Class.
*
* @var Category
* @since 3.2.0
*/
protected Category $category;
/**
* The AccessSwitchList Class.
*
* @var AccessSwitchList
* @since 3.2.0
*/
protected AccessSwitchList $accessswitchlist;
/**
* The Filter Class.
*
* @var Filter
* @since 3.2.0
*/
protected Filter $filter;
/**
* The Tags Class.
*
* @var Tags
* @since 3.2.0
*/
protected Tags $tags;
/**
* The Header Context array
*
* @var array
* @since 3.2.0
*/
protected array $headers = [];
/**
* The Namespace Prefix
*
* @var string
* @since 3.2.0
*/
protected string $NamespacePrefix;
/**
* The Component Name (in code)
*
* @var string
* @since 3.2.0
*/
protected string $ComponentName;
/**
* The Component Namespace (in code)
*
* @var string
* @since 3.2.0
*/
protected string $ComponentNameSpace;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Event $event The EventInterface Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param Language $language The Language Class.
* @param UikitComp $uikitcomp The UikitComp Class.
* @param AdminFilterType $adminfiltertype The AdminFilterType Class.
* @param Category $category The Category Class.
* @param AccessSwitchList $accessswitchlist The AccessSwitchList Class.
* @param Filter $filter The Filter Class.
* @param Tags $tags The Tags Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Event $event, Placeholder $placeholder,
Language $language, UikitComp $uikitcomp,
AdminFilterType $adminfiltertype, Category $category,
AccessSwitchList $accessswitchlist, Filter $filter,
Tags $tags)
{
$this->config = $config;
$this->event = $event;
$this->placeholder = $placeholder;
$this->language = $language;
$this->uikitcomp = $uikitcomp;
$this->adminfiltertype = $adminfiltertype;
$this->category = $category;
$this->accessswitchlist = $accessswitchlist;
$this->filter = $filter;
$this->tags = $tags;
// set some global values
$this->NamespacePrefix = $this->config->get('namespace_prefix');
$this->ComponentName = $this->placeholder->get('Component');
$this->ComponentNameSpace = NamespaceHelper::safeSegment($this->ComponentName);
}
/**
* Get the headers for a file
*
* @param string $context The name of the context
* @param string $codeName The view, views, or layout code name
*
* @return string The header string to place in the header of the file
* @since 3.2.0
*/
public function get(string $context, string $codeName): string
{
// get static headers
$headers = $this->getHeaders($context);
// get dynamic headers
switch ($context)
{
case 'admin.helper':
case 'site.helper':
$this->setHelperClassHeader($headers, $codeName);
break;
case 'admin.view.html':
case 'admin.views.html':
case 'custom.admin.view.html':
case 'custom.admin.views.html':
case 'site.admin.view.html':
case 'site.view.html':
case 'site.views.html':
if ((2 == $this->config->uikit || 1 == $this->config->uikit)
&& $this->uikitcomp->exists($codeName))
{
$headers[] = 'use Joomla\CMS\Filesystem\File;';
}
break;
case 'admin.views':
$this->setChosenMultiSelectionHeaders($headers, $codeName);
break;
case 'admin.view.model':
case 'site.admin.view.model':
case 'custom.admin.view.model':
case 'site.view.model':
case 'admin.views.model':
case 'site.views.model':
$headers[] = 'use Joomla\CMS\Helper\TagsHelper;';
break;
default:
break;
}
// add to all except the helper classes
if ('admin.helper' !== $context && 'site.helper' !== $context)
{
$target = 'Administrator';
if ($this->config->get('build_target', 'admin') === 'site')
{
$target = 'Site';
}
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\{$target}\\Helper\\{$this->ComponentName}Helper;";
}
// Trigger Event: jcb_ce_setClassHeader
$this->event->trigger(
'jcb_ce_setClassHeader', [&$context, &$codeName, &$headers]
);
// return the headers
return $this->placeholder->update_(implode(PHP_EOL, $headers));
}
/**
* Get the headers for a file
*
* @param string $context The name of the context
*
* @return array The header string to place in the header of the file
* @since 3.2.0
*/
protected function getHeaders(string $context): array
{
if (isset($this->headers[$context]))
{
return $this->headers[$context];
}
// set the defaults
$headers = [];
$headers[] = 'use Joomla\CMS\Factory;';
$headers[] = 'use Joomla\CMS\Language\Text;';
switch ($context)
{
case 'admin.component':
$headers[] = 'use Joomla\CMS\Access\Exception\NotAllowed;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\MVC\Controller\BaseController;';
break;
case 'admin.helper':
case 'site.helper':
$headers[] = 'use Joomla\CMS\Access\Access;';
$headers[] = 'use Joomla\CMS\Access\Rules as AccessRules;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\Filesystem\File;';
$headers[] = 'use Joomla\CMS\Language\Language;';
$headers[] = 'use Joomla\CMS\MVC\Model\BaseDatabaseModel;';
$headers[] = 'use Joomla\CMS\Object\CMSObject;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Table\Table;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\Version;';
$headers[] = 'use Joomla\Database\DatabaseInterface;';
$headers[] = 'use Joomla\Registry\Registry;';
$headers[] = 'use Joomla\String\StringHelper;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
break;
case 'admin.layout':
case 'site.layout':
case 'custom.admin.layout':
case 'override.layout':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\LayoutHelper;';
break;
case 'admin.view':
case 'custom.admin.view':
case 'custom.admin.views':
case 'site.admin.view':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\LayoutHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = '';
$headers[] = '/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */';
$headers[] = '$wa = $this->getDocument()->getWebAssetManager();';
$headers[] = '$wa->useScript(\'keepalive\')->useScript(\'form.validate\');';
$headers[] = 'Html::_(\'bootstrap.tooltip\');';
break;
case 'admin.view.controller':
$headers[] = 'use Joomla\CMS\Form\FormFactoryInterface;';
$headers[] = 'use Joomla\CMS\Application\CMSApplication;';
$headers[] = 'use Joomla\CMS\MVC\Factory\MVCFactoryInterface;';
$headers[] = 'use Joomla\Input\Input;';
case 'site.admin.view.controller':
$headers[] = 'use Joomla\CMS\Versioning\VersionableControllerTrait;';
case 'site.view.controller':
$headers[] = 'use Joomla\CMS\MVC\Controller\FormController;';
$headers[] = 'use Joomla\CMS\MVC\Model\BaseDatabaseModel;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
break;
case 'admin.view.html':
case 'admin.views.html':
case 'site.admin.view.html':
$headers[] = 'use Joomla\CMS\Toolbar\Toolbar;';
$headers[] = 'use Joomla\CMS\Form\FormHelper;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;';
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
break;
case 'site.view.html':
case 'site.views.html':
$headers[] = 'use Joomla\CMS\Toolbar\Toolbar;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;';
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\Site\\Helper\\HeaderCheck;";
break;
case 'custom.admin.view.html':
case 'custom.admin.views.html':
$target = 'Administrator';
if ($this->config->get('build_target', 'admin') === 'site')
{
$target = 'Site';
}
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;';
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\{$target}\\Helper\\HeaderCheck;";
break;
case 'admin.view.model':
case 'site.admin.view.model':
$headers[] = 'use Joomla\CMS\Application\CMSApplicationInterface;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\Form\Form;';
$headers[] = 'use Joomla\CMS\Filter\InputFilter;';
$headers[] = 'use Joomla\CMS\Filter\OutputFilter;';
$headers[] = 'use Joomla\CMS\MVC\Model\AdminModel;';
$headers[] = 'use Joomla\CMS\MVC\Factory\MVCFactoryInterface;';
$headers[] = 'use Joomla\CMS\Table\Table;';
$headers[] = 'use Joomla\CMS\UCM\UCMType;';
$headers[] = 'use Joomla\CMS\Versioning\VersionableModelTrait;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\Registry\Registry;';
$headers[] = 'use Joomla\String\StringHelper;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use Joomla\Input\Input;';
break;
case 'admin.views':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\LayoutHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
break;
case 'admin.views.controller':
case 'custom.admin.views.controller':
case 'dashboard.controller':
$headers[] = 'use Joomla\CMS\MVC\Controller\AdminController;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = 'use Joomla\CMS\Session\Session;';
break;
case 'dashboard.model':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
case 'admin.views.model':
case 'ajax.admin.model':
case 'ajax.site.model':
case 'custom.admin.views.model':
case 'site.views.model':
$headers[] = 'use Joomla\CMS\Application\CMSApplicationInterface;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\MVC\Model\ListModel;';
$headers[] = 'use Joomla\CMS\MVC\Factory\MVCFactoryInterface;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use Joomla\Input\Input;';
break;
case 'custom.admin.view.controller':
case 'import.controller':
case 'import.custom.controller':
$headers[] = 'use Joomla\CMS\MVC\Controller\BaseController;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
break;
case 'custom.admin.view.model':
case 'site.view.model':
$headers[] = 'use Joomla\CMS\Application\CMSApplicationInterface;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\MVC\Model\ItemModel;';
$headers[] = 'use Joomla\CMS\MVC\Factory\MVCFactoryInterface;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\Input\Input;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
break;
case 'import.custom.model':
case 'import.model':
$headers[] = 'use Joomla\CMS\Filesystem\File;';
$headers[] = 'use Joomla\CMS\Filesystem\Folder;';
$headers[] = 'use Joomla\CMS\Filesystem\Path;';
$headers[] = 'use Joomla\CMS\Filter\OutputFilter;';
$headers[] = 'use Joomla\CMS\Installer\InstallerHelper;';
$headers[] = 'use Joomla\CMS\MVC\Model\BaseDatabaseModel;';
$headers[] = 'use Joomla\String\StringHelper;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use PhpOffice\PhpSpreadsheet\IOFactory;';
break;
case 'dashboard.view':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
break;
case 'dashboard.view.html':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
break;
case 'site.component':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\MVC\Controller\BaseController;';
break;
case 'site.view':
case 'site.views':
$headers[] = 'use Joomla\CMS\Router\Route;';
break;
case 'form.custom.field':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\Form\Field\###FORM_EXTENDS###;';
break;
default:
break;
}
$this->headers[$context] = $headers;
return $headers;
}
/**
* set Helper Dynamic Headers
*
* @param array $headers The headers array
* @param string $target_client
*
* @return void
* @since 3.2.0
*/
protected function setHelperClassHeader(&$headers, $target_client)
{
// add only to admin client
if ('admin' === $target_client && $this->config->get('add_eximport', false))
{
$headers[] = 'use PhpOffice\PhpSpreadsheet\IOFactory;';
$headers[] = 'use PhpOffice\PhpSpreadsheet\Spreadsheet;';
$headers[] = 'use PhpOffice\PhpSpreadsheet\Writer\Xlsx;';
}
}
/**
* Build chosen multi selection headers for the view
*
* @param array $headers The headers array
* @param string $nameListCode The list view name
*
* @return void
* @since 3.2.0
*/
protected function setChosenMultiSelectionHeaders(&$headers, $nameListCode)
{
// check that the filter type is the new filter option (2 = topbar)
if ($this->adminfiltertype->get($nameListCode, 1) == 2)
{
// add category switch
$add_category = false;
if ($this->category->exists("{$nameListCode}.extension")
&& $this->category->get("{$nameListCode}.filter", 0) >= 1)
{
// is found so add it
$add_category = true;
}
// add accessLevels switch
$add_access_levels = false;
if ($this->accessswitchlist->exists($nameListCode))
{
// is found so add it
$add_access_levels = true;
}
// check if this view have filters
if ($this->filter->exists($nameListCode))
{
foreach ($this->filter->get($nameListCode) as $filter)
{
// we need this only for filters that are multi
if (isset($filter['multi']) && $filter['multi'] == 2)
{
// if this is a category we should make sure it must be added
if (!$add_category && $filter['type'] === 'category')
{
continue;
}
elseif ($add_category && $filter['type'] === 'category')
{
// already added here so no need to add again
$add_category = false;
}
// check if this was an access field
elseif ($filter['type'] === 'accesslevel')
{
// already added here so no need to add again
$add_access_levels = false;
}
// add the header
$headers[]
= 'Html::_(\'formbehavior.chosen\', \'.multiple'
. $filter['class']
. '\', null, [\'placeholder_text_multiple\' => \'- \' . Text::_(\''
. $filter['lang_select'] . '\') . \' -\']);';
}
elseif ($add_category && $filter['type'] === 'category')
{
// add the header
$headers[]
= 'Html::_(\'formbehavior.chosen\', \'.multipleCategories'
. '\', null, [\'placeholder_text_multiple\' => \'- \' . Text::_(\''
. $filter['lang_select'] . '\') . \' -\']);';
// already added here so no need to add again
$add_category = false;
}
}
}
// add category if not already added
if ($add_category)
{
// add the header
$headers[]
= 'Html::_(\'formbehavior.chosen\', \'.multipleCategories'
. '\', null, [\'placeholder_text_multiple\' => \'- \' . Text::_(\''
. $this->category->exists("{$nameListCode}.name", 'error')
. '\') . \' -\']);';
}
// add accessLevels if not already added
if ($add_access_levels)
{
// set the language strings for selection
$filter_name_select = 'Select Access';
$filter_name_select_lang = $this->config->lang_prefix . '_FILTER_'
. StringHelper::safe(
$filter_name_select, 'U'
);
// and to translation
$this->language->set(
$this->config->lang_target, $filter_name_select_lang, $filter_name_select
);
// add the header
$headers[]
= 'Html::_(\'formbehavior.chosen\', \'.multipleAccessLevels'
. '\', null, [\'placeholder_text_multiple\' => \'- \' . Text::_(\''
. $filter_name_select_lang . '\') . \' -\']);';
}
}
}
}

View File

@ -0,0 +1,604 @@
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The EventInterface Class.
*
* @var Event
* @since 3.2.0
*/
protected Event $event;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Language Class.
*
* @var Language
* @since 3.2.0
*/
protected Language $language;
/**
* The UikitComp Class.
*
* @var UikitComp
* @since 3.2.0
*/
protected UikitComp $uikitcomp;
/**
* The AdminFilterType Class.
*
* @var AdminFilterType
* @since 3.2.0
*/
protected AdminFilterType $adminfiltertype;
/**
* The Category Class.
*
* @var Category
* @since 3.2.0
*/
protected Category $category;
/**
* The AccessSwitchList Class.
*
* @var AccessSwitchList
* @since 3.2.0
*/
protected AccessSwitchList $accessswitchlist;
/**
* The Filter Class.
*
* @var Filter
* @since 3.2.0
*/
protected Filter $filter;
/**
* The Tags Class.
*
* @var Tags
* @since 3.2.0
*/
protected Tags $tags;
/**
* The Header Context array
*
* @var array
* @since 3.2.0
*/
protected array $headers = [];
/**
* The Namespace Prefix
*
* @var string
* @since 3.2.0
*/
protected string $NamespacePrefix;
/**
* The Component Name (in code)
*
* @var string
* @since 3.2.0
*/
protected string $ComponentName;
/**
* The Component Namespace (in code)
*
* @var string
* @since 3.2.0
*/
protected string $ComponentNameSpace;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Event $event The EventInterface Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param Language $language The Language Class.
* @param UikitComp $uikitcomp The UikitComp Class.
* @param AdminFilterType $adminfiltertype The AdminFilterType Class.
* @param Category $category The Category Class.
* @param AccessSwitchList $accessswitchlist The AccessSwitchList Class.
* @param Filter $filter The Filter Class.
* @param Tags $tags The Tags Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Event $event, Placeholder $placeholder,
Language $language, UikitComp $uikitcomp,
AdminFilterType $adminfiltertype, Category $category,
AccessSwitchList $accessswitchlist, Filter $filter,
Tags $tags)
{
$this->config = $config;
$this->event = $event;
$this->placeholder = $placeholder;
$this->language = $language;
$this->uikitcomp = $uikitcomp;
$this->adminfiltertype = $adminfiltertype;
$this->category = $category;
$this->accessswitchlist = $accessswitchlist;
$this->filter = $filter;
$this->tags = $tags;
// set some global values
$this->NamespacePrefix = $this->config->get('namespace_prefix');
$this->ComponentName = $this->placeholder->get('Component');
$this->ComponentNameSpace = NamespaceHelper::safeSegment($this->ComponentName);
}
/**
* Get the headers for a file
*
* @param string $context The name of the context
* @param string $codeName The view, views, or layout code name
*
* @return string The header string to place in the header of the file
* @since 3.2.0
*/
public function get(string $context, string $codeName): string
{
// get static headers
$headers = $this->getHeaders($context);
// get dynamic headers
switch ($context)
{
case 'admin.helper':
case 'site.helper':
$this->setHelperClassHeader($headers, $codeName);
break;
case 'admin.view.html':
case 'admin.views.html':
case 'custom.admin.view.html':
case 'custom.admin.views.html':
case 'site.admin.view.html':
case 'site.view.html':
case 'site.views.html':
if ((2 == $this->config->uikit || 1 == $this->config->uikit)
&& $this->uikitcomp->exists($codeName))
{
$headers[] = 'use Joomla\CMS\Filesystem\File;';
}
break;
case 'admin.views':
$this->setChosenMultiSelectionHeaders($headers, $codeName);
break;
case 'admin.view.model':
case 'site.admin.view.model':
case 'custom.admin.view.model':
case 'site.view.model':
case 'admin.views.model':
case 'site.views.model':
$headers[] = 'use Joomla\CMS\Helper\TagsHelper;';
break;
default:
break;
}
// add to all except the helper classes
if ('admin.helper' !== $context && 'site.helper' !== $context)
{
$target = 'Administrator';
if ($this->config->get('build_target', 'admin') === 'site')
{
$target = 'Site';
}
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\{$target}\\Helper\\{$this->ComponentName}Helper;";
}
// Trigger Event: jcb_ce_setClassHeader
$this->event->trigger(
'jcb_ce_setClassHeader', [&$context, &$codeName, &$headers]
);
// return the headers
return $this->placeholder->update_(implode(PHP_EOL, $headers));
}
/**
* Get the headers for a file
*
* @param string $context The name of the context
*
* @return array The header string to place in the header of the file
* @since 3.2.0
*/
protected function getHeaders(string $context): array
{
if (isset($this->headers[$context]))
{
return $this->headers[$context];
}
// set the defaults
$headers = [];
$headers[] = 'use Joomla\CMS\Factory;';
$headers[] = 'use Joomla\CMS\Language\Text;';
switch ($context)
{
case 'admin.component':
$headers[] = 'use Joomla\CMS\Access\Exception\NotAllowed;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\MVC\Controller\BaseController;';
break;
case 'admin.helper':
case 'site.helper':
$headers[] = 'use Joomla\CMS\Access\Access;';
$headers[] = 'use Joomla\CMS\Access\Rules as AccessRules;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\Filesystem\File;';
$headers[] = 'use Joomla\CMS\Language\Language;';
$headers[] = 'use Joomla\CMS\MVC\Model\BaseDatabaseModel;';
$headers[] = 'use Joomla\CMS\Object\CMSObject;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Table\Table;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\Version;';
$headers[] = 'use Joomla\Database\DatabaseInterface;';
$headers[] = 'use Joomla\Registry\Registry;';
$headers[] = 'use Joomla\String\StringHelper;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
break;
case 'admin.layout':
case 'site.layout':
case 'custom.admin.layout':
case 'override.layout':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\LayoutHelper;';
break;
case 'admin.view':
case 'custom.admin.view':
case 'custom.admin.views':
case 'site.admin.view':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\LayoutHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = '';
$headers[] = '/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */';
$headers[] = '$wa = $this->getDocument()->getWebAssetManager();';
$headers[] = '$wa->useScript(\'keepalive\')->useScript(\'form.validate\');';
$headers[] = 'Html::_(\'bootstrap.tooltip\');';
break;
case 'admin.view.controller':
$headers[] = 'use Joomla\CMS\Form\FormFactoryInterface;';
$headers[] = 'use Joomla\CMS\Application\CMSApplication;';
$headers[] = 'use Joomla\CMS\MVC\Factory\MVCFactoryInterface;';
$headers[] = 'use Joomla\Input\Input;';
case 'site.admin.view.controller':
$headers[] = 'use Joomla\CMS\Versioning\VersionableControllerTrait;';
case 'site.view.controller':
$headers[] = 'use Joomla\CMS\MVC\Controller\FormController;';
$headers[] = 'use Joomla\CMS\MVC\Model\BaseDatabaseModel;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
break;
case 'admin.view.html':
case 'admin.views.html':
case 'site.admin.view.html':
$headers[] = 'use Joomla\CMS\Toolbar\Toolbar;';
$headers[] = 'use Joomla\CMS\Form\FormHelper;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;';
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
break;
case 'site.view.html':
case 'site.views.html':
$headers[] = 'use Joomla\CMS\Toolbar\Toolbar;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;';
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\Site\\Helper\\HeaderCheck;";
break;
case 'custom.admin.view.html':
case 'custom.admin.views.html':
$target = 'Administrator';
if ($this->config->get('build_target', 'admin') === 'site')
{
$target = 'Site';
}
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\FileLayout;';
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
$headers[] = "use {$this->NamespacePrefix}\\Component\\{$this->ComponentNameSpace}\\{$target}\\Helper\\HeaderCheck;";
break;
case 'admin.view.model':
case 'site.admin.view.model':
$headers[] = 'use Joomla\CMS\Application\CMSApplicationInterface;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\Form\Form;';
$headers[] = 'use Joomla\CMS\Filter\InputFilter;';
$headers[] = 'use Joomla\CMS\Filter\OutputFilter;';
$headers[] = 'use Joomla\CMS\MVC\Model\AdminModel;';
$headers[] = 'use Joomla\CMS\MVC\Factory\MVCFactoryInterface;';
$headers[] = 'use Joomla\CMS\Table\Table;';
$headers[] = 'use Joomla\CMS\UCM\UCMType;';
$headers[] = 'use Joomla\CMS\Versioning\VersionableModelTrait;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\Registry\Registry;';
$headers[] = 'use Joomla\String\StringHelper;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use Joomla\Input\Input;';
break;
case 'admin.views':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Layout\LayoutHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
break;
case 'admin.views.controller':
case 'custom.admin.views.controller':
case 'dashboard.controller':
$headers[] = 'use Joomla\CMS\MVC\Controller\AdminController;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = 'use Joomla\CMS\Session\Session;';
break;
case 'dashboard.model':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
case 'admin.views.model':
case 'ajax.admin.model':
case 'ajax.site.model':
case 'custom.admin.views.model':
case 'site.views.model':
$headers[] = 'use Joomla\CMS\Application\CMSApplicationInterface;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\MVC\Model\ListModel;';
$headers[] = 'use Joomla\CMS\MVC\Factory\MVCFactoryInterface;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use Joomla\Input\Input;';
break;
case 'custom.admin.view.controller':
case 'import.controller':
case 'import.custom.controller':
$headers[] = 'use Joomla\CMS\MVC\Controller\BaseController;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = 'use Joomla\CMS\Session\Session;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
break;
case 'custom.admin.view.model':
case 'site.view.model':
$headers[] = 'use Joomla\CMS\Application\CMSApplicationInterface;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\MVC\Model\ItemModel;';
$headers[] = 'use Joomla\CMS\MVC\Factory\MVCFactoryInterface;';
$headers[] = 'use Joomla\CMS\Plugin\PluginHelper;';
$headers[] = 'use Joomla\CMS\Router\Route;';
$headers[] = 'use Joomla\CMS\Uri\Uri;';
$headers[] = 'use Joomla\CMS\User\User;';
$headers[] = 'use Joomla\Input\Input;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
break;
case 'import.custom.model':
case 'import.model':
$headers[] = 'use Joomla\CMS\Filesystem\File;';
$headers[] = 'use Joomla\CMS\Filesystem\Folder;';
$headers[] = 'use Joomla\CMS\Filesystem\Path;';
$headers[] = 'use Joomla\CMS\Filter\OutputFilter;';
$headers[] = 'use Joomla\CMS\Installer\InstallerHelper;';
$headers[] = 'use Joomla\CMS\MVC\Model\BaseDatabaseModel;';
$headers[] = 'use Joomla\String\StringHelper;';
$headers[] = 'use Joomla\Utilities\ArrayHelper;';
$headers[] = 'use PhpOffice\PhpSpreadsheet\IOFactory;';
break;
case 'dashboard.view':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
break;
case 'dashboard.view.html':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;';
$headers[] = 'use Joomla\CMS\Toolbar\ToolbarHelper;';
$headers[] = 'use Joomla\CMS\Document\Document;';
break;
case 'site.component':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\MVC\Controller\BaseController;';
break;
case 'site.view':
case 'site.views':
$headers[] = 'use Joomla\CMS\Router\Route;';
break;
case 'form.custom.field':
$headers[] = 'use Joomla\CMS\HTML\HTMLHelper as Html;';
$headers[] = 'use Joomla\CMS\Component\ComponentHelper;';
$headers[] = 'use Joomla\CMS\Form\Field\###FORM_EXTENDS###;';
break;
default:
break;
}
$this->headers[$context] = $headers;
return $headers;
}
/**
* set Helper Dynamic Headers
*
* @param array $headers The headers array
* @param string $target_client
*
* @return void
* @since 3.2.0
*/
protected function setHelperClassHeader(&$headers, $target_client)
{
// add only to admin client
if ('admin' === $target_client && $this->config->get('add_eximport', false))
{
$headers[] = 'use PhpOffice\PhpSpreadsheet\IOFactory;';
$headers[] = 'use PhpOffice\PhpSpreadsheet\Spreadsheet;';
$headers[] = 'use PhpOffice\PhpSpreadsheet\Writer\Xlsx;';
}
}
/**
* Build chosen multi selection headers for the view
*
* @param array $headers The headers array
* @param string $nameListCode The list view name
*
* @return void
* @since 3.2.0
*/
protected function setChosenMultiSelectionHeaders(&$headers, $nameListCode)
{
// check that the filter type is the new filter option (2 = topbar)
if ($this->adminfiltertype->get($nameListCode, 1) == 2)
{
// add category switch
$add_category = false;
if ($this->category->exists("{$nameListCode}.extension")
&& $this->category->get("{$nameListCode}.filter", 0) >= 1)
{
// is found so add it
$add_category = true;
}
// add accessLevels switch
$add_access_levels = false;
if ($this->accessswitchlist->exists($nameListCode))
{
// is found so add it
$add_access_levels = true;
}
// check if this view have filters
if ($this->filter->exists($nameListCode))
{
foreach ($this->filter->get($nameListCode) as $filter)
{
// we need this only for filters that are multi
if (isset($filter['multi']) && $filter['multi'] == 2)
{
// if this is a category we should make sure it must be added
if (!$add_category && $filter['type'] === 'category')
{
continue;
}
elseif ($add_category && $filter['type'] === 'category')
{
// already added here so no need to add again
$add_category = false;
}
// check if this was an access field
elseif ($filter['type'] === 'accesslevel')
{
// already added here so no need to add again
$add_access_levels = false;
}
// add the header
$headers[]
= 'Html::_(\'formbehavior.chosen\', \'.multiple'
. $filter['class']
. '\', null, [\'placeholder_text_multiple\' => \'- \' . Text::_(\''
. $filter['lang_select'] . '\') . \' -\']);';
}
elseif ($add_category && $filter['type'] === 'category')
{
// add the header
$headers[]
= 'Html::_(\'formbehavior.chosen\', \'.multipleCategories'
. '\', null, [\'placeholder_text_multiple\' => \'- \' . Text::_(\''
. $filter['lang_select'] . '\') . \' -\']);';
// already added here so no need to add again
$add_category = false;
}
}
}
// add category if not already added
if ($add_category)
{
// add the header
$headers[]
= 'Html::_(\'formbehavior.chosen\', \'.multipleCategories'
. '\', null, [\'placeholder_text_multiple\' => \'- \' . Text::_(\''
. $this->category->exists("{$nameListCode}.name", 'error')
. '\') . \' -\']);';
}
// add accessLevels if not already added
if ($add_access_levels)
{
// set the language strings for selection
$filter_name_select = 'Select Access';
$filter_name_select_lang = $this->config->lang_prefix . '_FILTER_'
. StringHelper::safe(
$filter_name_select, 'U'
);
// and to translation
$this->language->set(
$this->config->lang_target, $filter_name_select_lang, $filter_name_select
);
// add the header
$headers[]
= 'Html::_(\'formbehavior.chosen\', \'.multipleAccessLevels'
. '\', null, [\'placeholder_text_multiple\' => \'- \' . Text::_(\''
. $filter_name_select_lang . '\') . \' -\']);';
}
}
}

View File

@ -0,0 +1,73 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "1ee227b9-da0f-4e7b-ae66-99a9d53f6f49",
"implements": [
"3a777d70-52ad-49ec-9016-6f7438608613"
],
"load_selection": null,
"name": "Header",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.JoomlaFour.Header",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "20ed72b0-fcac-4344-aee1-8a65e3bf221d",
"as": "Event"
},
"use_selection2": {
"use": "06453ada-e370-49f0-b262-e3f5a8ed0c2c",
"as": "default"
},
"use_selection3": {
"use": "8eee7df5-2775-41a9-9372-c46c5939a252",
"as": "default"
},
"use_selection4": {
"use": "54ec57f6-2fc3-42e5-975e-1fabeacb845d",
"as": "default"
},
"use_selection5": {
"use": "9481caa2-6d04-4598-8320-543a93927243",
"as": "default"
},
"use_selection6": {
"use": "007177eb-d39d-4093-8840-07a38811c502",
"as": "default"
},
"use_selection7": {
"use": "81212121-ad5c-43c5-b046-f2650864f690",
"as": "default"
},
"use_selection8": {
"use": "e4e65c5b-00ec-439c-96bf-3153c3a73398",
"as": "default"
},
"use_selection9": {
"use": "8ca30d59-e56a-4cdd-bd8c-d9aad28f5903",
"as": "default"
},
"use_selection10": {
"use": "ce8cf834-6bac-44fb-941c-861f7e046cc0",
"as": "default"
},
"use_selection11": {
"use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a",
"as": "default"
},
"use_selection12": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.JoomlaFour.Header",
"description": "Build headers for all Joomla 4 files\r\n\r\n@since 3.2.0",
"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

@ -11,13 +11,14 @@
```uml
@startuml
class Structure #Gold {
# Placeholder $placeholder
# Settings $settings
# Paths $paths
# Counter $counter
# File $file
# Files $files
# CMSApplication $app
+ __construct(?Settings $settings = null, ?Paths $paths = null, ...)
+ __construct(Placeholder $placeholder, Settings $settings, ...)
+ build(array $target, string $type, ...) : bool
- getFileDetails(object $details, string $item, ...) : ?array
- getPath(object $details, string $zipPath, ...) : ?string
@ -30,11 +31,12 @@ note right of Structure::__construct
since: 3.2.0
arguments:
?Settings $settings = null
?Paths $paths = null
?Counter $counter = null
?File $file = null
?Files $files = null
Placeholder $placeholder
Settings $settings
Paths $paths
Counter $counter
File $file
Files $files
?CMSApplication $app = null
end note

View File

@ -17,8 +17,8 @@ use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Filesystem\File as JoomlaFile;
use Joomla\CMS\Filesystem\Folder;
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
use VDM\Joomla\Componentbuilder\Compiler\Component\Settings;
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Component\SettingsInterface as Settings;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Paths;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Counter;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\File;
@ -35,7 +35,15 @@ use VDM\Joomla\Utilities\StringHelper;
class Structure
{
/**
* Compiler Component Joomla Version Settings
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The SettingsInterface Class.
*
* @var Settings
* @since 3.2.0
@ -43,7 +51,7 @@ class Structure
protected Settings $settings;
/**
* Compiler Utilities Paths
* The Paths Class.
*
* @var Paths
* @since 3.2.0
@ -51,7 +59,7 @@ class Structure
protected Paths $paths;
/**
* Compiler Counter
* The Counter Class.
*
* @var Counter
* @since 3.2.0
@ -59,7 +67,7 @@ class Structure
protected Counter $counter;
/**
* Compiler Utilities File
* The File Class.
*
* @var File
* @since 3.2.0
@ -67,7 +75,7 @@ class Structure
protected File $file;
/**
* Compiler Utilities Files
* The Files Class.
*
* @var Files
* @since 3.2.0
@ -85,25 +93,25 @@ class Structure
/**
* Constructor.
*
* @param Settings|null $settings The compiler component joomla version settings object.
* @param Paths|null $paths The compiler paths object.
* @param Counter|null $counter The compiler counter object.
* @param File|null $file The compiler file object.
* @param Files|null $files The compiler files object.
* @param Placeholder $placeholder The Placeholder Class.
* @param Settings $settings The SettingsInterface Class.
* @param Paths $paths The Paths Class.
* @param Counter $counter The Counter Class.
* @param File $file The File Class.
* @param Files $files The Files Class.
* @param CMSApplication|null $app The CMS Application object.
*
* @since 3.2.0
* @throws \Exception
*/
public function __construct(?Settings $settings = null, ?Paths $paths = null,
?Counter $counter = null, ?File $file = null, ?Files $files = null,
?CMSApplication $app = null)
public function __construct(Placeholder $placeholder, Settings $settings, Paths $paths,
Counter $counter, File $file, Files $files, ?CMSApplication $app = null)
{
$this->settings = $settings ?: Compiler::_('Component.Settings');
$this->paths = $paths ?: Compiler::_('Utilities.Paths');
$this->counter = $counter ?: Compiler::_('Utilities.Counter');
$this->file = $file ?: Compiler::_('Utilities.File');
$this->files = $files ?: Compiler::_('Utilities.Files');
$this->placeholder = $placeholder;
$this->settings = $settings;
$this->paths = $paths;
$this->counter = $counter;
$this->file = $file;
$this->files = $files;
$this->app = $app ?: Factory::getApplication();
}
@ -130,6 +138,15 @@ class Structure
// search the target
foreach ($target as $main => $name)
{
// get the key name (either file name or name)
$key = $fileName ?? $name;
// add to placeholders as Name and name
$this->placeholder->set('Name', StringHelper::safe($name, 'F'));
$this->placeholder->set('name', StringHelper::safe($name));
$this->placeholder->set('Key', StringHelper::safe($key, 'F'));
$this->placeholder->set('key', StringHelper::safe($key));
// make sure it is lower case
$name = StringHelper::safe($name);
@ -157,6 +174,12 @@ class Structure
}
}
}
// remove the name from placeholders
$this->placeholder->remove('Name');
$this->placeholder->remove('name');
$this->placeholder->remove('Key');
$this->placeholder->remove('key');
}
}
@ -252,6 +275,8 @@ class Structure
$path = $details->path;
}
$path = $this->placeholder->update_($path);
// make sure we have component to replace
if (strpos((string) $path, 'c0mp0n3nt') !== false)
{
@ -291,23 +316,27 @@ class Structure
if (!empty($fileName))
{
$name = $name . '_' . $fileName;
}
return str_replace(
if ($details->rename === 'new')
{
$item = $details->newName;
}
elseif (!empty($fileName))
{
$item = str_replace(
$details->rename, $fileName, $item
);
}
elseif ($details->rename === 'new')
else
{
return $details->newName;
}
return str_replace(
$item = str_replace(
$details->rename, $name, $item
);
}
return $item;
}
return $this->placeholder->update_($item);
}
}

View File

@ -1,5 +1,13 @@
/**
* Compiler Component Joomla Version Settings
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The SettingsInterface Class.
*
* @var Settings
* @since 3.2.0
@ -7,7 +15,7 @@
protected Settings $settings;
/**
* Compiler Utilities Paths
* The Paths Class.
*
* @var Paths
* @since 3.2.0
@ -15,7 +23,7 @@
protected Paths $paths;
/**
* Compiler Counter
* The Counter Class.
*
* @var Counter
* @since 3.2.0
@ -23,7 +31,7 @@
protected Counter $counter;
/**
* Compiler Utilities File
* The File Class.
*
* @var File
* @since 3.2.0
@ -31,7 +39,7 @@
protected File $file;
/**
* Compiler Utilities Files
* The Files Class.
*
* @var Files
* @since 3.2.0
@ -49,25 +57,25 @@
/**
* Constructor.
*
* @param Settings|null $settings The compiler component joomla version settings object.
* @param Paths|null $paths The compiler paths object.
* @param Counter|null $counter The compiler counter object.
* @param File|null $file The compiler file object.
* @param Files|null $files The compiler files object.
* @param Placeholder $placeholder The Placeholder Class.
* @param Settings $settings The SettingsInterface Class.
* @param Paths $paths The Paths Class.
* @param Counter $counter The Counter Class.
* @param File $file The File Class.
* @param Files $files The Files Class.
* @param CMSApplication|null $app The CMS Application object.
*
* @since 3.2.0
* @throws \Exception
*/
public function __construct(?Settings $settings = null, ?Paths $paths = null,
?Counter $counter = null, ?File $file = null, ?Files $files = null,
?CMSApplication $app = null)
public function __construct(Placeholder $placeholder, Settings $settings, Paths $paths,
Counter $counter, File $file, Files $files, ?CMSApplication $app = null)
{
$this->settings = $settings ?: Compiler::_('Component.Settings');
$this->paths = $paths ?: Compiler::_('Utilities.Paths');
$this->counter = $counter ?: Compiler::_('Utilities.Counter');
$this->file = $file ?: Compiler::_('Utilities.File');
$this->files = $files ?: Compiler::_('Utilities.Files');
$this->placeholder = $placeholder;
$this->settings = $settings;
$this->paths = $paths;
$this->counter = $counter;
$this->file = $file;
$this->files = $files;
$this->app = $app ?: Factory::getApplication();
}
@ -94,6 +102,15 @@
// search the target
foreach ($target as $main => $name)
{
// get the key name (either file name or name)
$key = $fileName ?? $name;
// add to placeholders as Name and name
$this->placeholder->set('Name', StringHelper::safe($name, 'F'));
$this->placeholder->set('name', StringHelper::safe($name));
$this->placeholder->set('Key', StringHelper::safe($key, 'F'));
$this->placeholder->set('key', StringHelper::safe($key));
// make sure it is lower case
$name = StringHelper::safe($name);
@ -121,6 +138,12 @@
}
}
}
// remove the name from placeholders
$this->placeholder->remove('Name');
$this->placeholder->remove('name');
$this->placeholder->remove('Key');
$this->placeholder->remove('key');
}
}
@ -216,6 +239,8 @@
$path = $details->path;
}
$path = $this->placeholder->update_($path);
// make sure we have component to replace
if (strpos((string) $path, 'c0mp0n3nt') !== false)
{
@ -255,20 +280,25 @@
if (!empty($fileName))
{
$name = $name . '_' . $fileName;
}
return str_replace(
if ($details->rename === 'new')
{
$item = $details->newName;
}
elseif (!empty($fileName))
{
$item = str_replace(
$details->rename, $fileName, $item
);
}
elseif ($details->rename === 'new')
else
{
return $details->newName;
}
return str_replace(
$item = str_replace(
$details->rename, $name, $item
);
}
return $item;
}
return $this->placeholder->update_($item);
}

View File

@ -11,12 +11,12 @@
"type": "class",
"use_selection": {
"use_selection0": {
"use": "d910d8b8-4c23-4f3e-8cda-438f2d2bd7ac",
"as": "Compiler"
"use": "06453ada-e370-49f0-b262-e3f5a8ed0c2c",
"as": "default"
},
"use_selection1": {
"use": "63dabe82-0f4a-4ade-9851-8518ade23de2",
"as": "default"
"use": "5f44e66a-31d0-45ff-92b3-b7372dc57ae9",
"as": "Settings"
},
"use_selection2": {
"use": "6f20369a-8536-4870-a1a3-cda254c939c8",

View File

@ -0,0 +1,30 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class FrontendParams (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Builder**
> extends: **Registry**
```uml
@startuml
class FrontendParams << (F,LightGreen) >> #RoyalBlue {
}
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,27 @@
<?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\Builder;
use VDM\Joomla\Interfaces\Registryinterface;
use VDM\Joomla\Abstraction\Registry;
/**
* Front-end Params Builder Class
*
* @since 3.2.0
*/
final class FrontendParams extends Registry implements Registryinterface
{
}

View File

@ -0,0 +1 @@
###CODEPOWER###

View File

@ -0,0 +1,20 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "7e822c03-1b20-41d1-9427-f5b8d5836af7",
"guid": "207b5ef3-b3bb-45bf-af14-4572e296d761",
"implements": [
"64e291c2-11f1-423d-a44d-837cc12cc017"
],
"load_selection": null,
"name": "FrontendParams",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Builder.FrontendParams",
"type": "final class",
"use_selection": null,
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Builder.FrontendParams",
"description": "Front-end Params Builder Class\r\n\r\n@since 3.2.0",
"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,53 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class ConfigFieldsetsCustomfield (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Creator**
```uml
@startuml
class ConfigFieldsetsCustomfield << (F,LightGreen) >> #RoyalBlue {
# Config $config
# Language $language
# Customfield $customfield
# ConfigFieldsets $configfieldsets
+ __construct(Config $config, Language $language, ...)
+ set(string $lang) : void
}
note right of ConfigFieldsetsCustomfield::__construct
Constructor.
since: 3.2.0
arguments:
Config $config
Language $language
Customfield $customfield
ConfigFieldsets $configfieldsets
end note
note right of ConfigFieldsetsCustomfield::set
Set Custom Control Config Fieldsets
return: void
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,142 @@
<?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\Creator;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Language;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ConfigFieldsetsCustomfield as Customfield;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ConfigFieldsets;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Utilities\GetHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
/**
* Config Fieldsets Customfield Creator Class
*
* @since 3.2.0
*/
final class ConfigFieldsetsCustomfield
{
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Language Class.
*
* @var Language
* @since 3.2.0
*/
protected Language $language;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var Customfield
* @since 3.2.0
*/
protected Customfield $customfield;
/**
* The ConfigFieldsets Class.
*
* @var ConfigFieldsets
* @since 3.2.0
*/
protected ConfigFieldsets $configfieldsets;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Language $language The Language Class.
* @param Customfield $customfield The ConfigFieldsetsCustomfield Class.
* @param ConfigFieldsets $configfieldsets The ConfigFieldsets Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Language $language,
Customfield $customfield,
ConfigFieldsets $configfieldsets)
{
$this->config = $config;
$this->language = $language;
$this->customfield = $customfield;
$this->configfieldsets = $configfieldsets;
}
/**
* Set Custom Control Config Fieldsets
*
* @param string $lang
*
* @since 1.0
*/
public function set(string $lang): void
{
// add custom new global fields set
if ($this->customfield->isActive())
{
foreach ($this->customfield->allActive() as $tab => $tabFields)
{
$tabCode = StringHelper::safe($tab)
. '_custom_config';
$tabUpper = StringHelper::safe($tab, 'U');
$tabLower = StringHelper::safe($tab);
// remove display targeted fields
$bucket = [];
foreach ($tabFields as $tabField)
{
$display = GetHelper::between(
$tabField, 'display="', '"'
);
if (!StringHelper::check($display)
|| $display === 'config')
{
// remove this display since it is not used in Joomla
$bucket[] = str_replace(
'display="config"', '', (string) $tabField
);
}
}
// only add the tab if it has values
if (ArrayHelper::check($bucket))
{
// setup lang
$this->language->set(
$this->config->lang_target, $lang . '_' . $tabUpper, $tab
);
// start field set
$this->configfieldsets->add('component', Indent::_(1) . "<fieldset");
$this->configfieldsets->add('component', Indent::_(2) . 'name="'
. $tabCode . '"');
$this->configfieldsets->add('component', Indent::_(2) . 'label="' . $lang
. '_' . $tabUpper . '">');
// set the fields
$this->configfieldsets->add('component', implode("", $bucket));
// close field set
$this->configfieldsets->add('component', Indent::_(1) . "</fieldset>");
}
// remove after loading
$this->customfield->remove($tab);
}
}
}
}

View File

@ -0,0 +1,109 @@
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Language Class.
*
* @var Language
* @since 3.2.0
*/
protected Language $language;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var Customfield
* @since 3.2.0
*/
protected Customfield $customfield;
/**
* The ConfigFieldsets Class.
*
* @var ConfigFieldsets
* @since 3.2.0
*/
protected ConfigFieldsets $configfieldsets;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Language $language The Language Class.
* @param Customfield $customfield The ConfigFieldsetsCustomfield Class.
* @param ConfigFieldsets $configfieldsets The ConfigFieldsets Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Language $language,
Customfield $customfield,
ConfigFieldsets $configfieldsets)
{
$this->config = $config;
$this->language = $language;
$this->customfield = $customfield;
$this->configfieldsets = $configfieldsets;
}
/**
* Set Custom Control Config Fieldsets
*
* @param string $lang
*
* @since 1.0
*/
public function set(string $lang): void
{
// add custom new global fields set
if ($this->customfield->isActive())
{
foreach ($this->customfield->allActive() as $tab => $tabFields)
{
$tabCode = StringHelper::safe($tab)
. '_custom_config';
$tabUpper = StringHelper::safe($tab, 'U');
$tabLower = StringHelper::safe($tab);
// remove display targeted fields
$bucket = [];
foreach ($tabFields as $tabField)
{
$display = GetHelper::between(
$tabField, 'display="', '"'
);
if (!StringHelper::check($display)
|| $display === 'config')
{
// remove this display since it is not used in Joomla
$bucket[] = str_replace(
'display="config"', '', (string) $tabField
);
}
}
// only add the tab if it has values
if (ArrayHelper::check($bucket))
{
// setup lang
$this->language->set(
$this->config->lang_target, $lang . '_' . $tabUpper, $tab
);
// start field set
$this->configfieldsets->add('component', Indent::_(1) . "<fieldset");
$this->configfieldsets->add('component', Indent::_(2) . 'name="'
. $tabCode . '"');
$this->configfieldsets->add('component', Indent::_(2) . 'label="' . $lang
. '_' . $tabUpper . '">');
// set the fields
$this->configfieldsets->add('component', implode("", $bucket));
// close field set
$this->configfieldsets->add('component', Indent::_(1) . "</fieldset>");
}
// remove after loading
$this->customfield->remove($tab);
}
}
}

View File

@ -0,0 +1,51 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "208bc37c-0055-44df-9a34-63d6bfa10765",
"implements": null,
"load_selection": null,
"name": "ConfigFieldsetsCustomfield",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Creator.ConfigFieldsetsCustomfield",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "8eee7df5-2775-41a9-9372-c46c5939a252",
"as": "default"
},
"use_selection2": {
"use": "ed314bd8-c995-4282-bcaa-5e0a68ac401b",
"as": "Customfield"
},
"use_selection3": {
"use": "0a524af3-f647-4f62-a422-d7d36ebe749b",
"as": "default"
},
"use_selection4": {
"use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a",
"as": "default"
},
"use_selection5": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default"
},
"use_selection6": {
"use": "db87c339-5bb6-4291-a7ef-2c48ea1b06bc",
"as": "default"
},
"use_selection7": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Creator.ConfigFieldsetsCustomfield",
"description": "Config Fieldsets Customfield Creator Class\r\n\r\n@since 3.2.0",
"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,77 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class ConfigFieldsets (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Creator**
```uml
@startuml
class ConfigFieldsets << (F,LightGreen) >> #RoyalBlue {
# Config $config
# Component $component
# Event $event
# Placeholder $placeholder
# CPlaceholder $cplaceholder
# ExtensionsParams $extensionsparams
# Customfield $customfield
# FieldAsString $fieldasstring
# ConfigFieldsetsGlobal $configfieldsetsglobal
# ConfigFieldsetsSiteControl $configfieldsetssitecontrol
# ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol
# ConfigFieldsetsUikit $configfieldsetsuikit
# ConfigFieldsetsGooglechart $configfieldsetsgooglechart
# ConfigFieldsetsEmailHelper $configfieldsetsemailhelper
# ConfigFieldsetsEncryption $configfieldsetsencryption
# ConfigFieldsetsCustomfield $configfieldsetscustomfield
+ __construct(Config $config, Component $component, ...)
+ set(int $timer) : void
}
note right of ConfigFieldsets::__construct
Constructor.
since: 3.2.0
arguments:
Config $config
Component $component
Event $event
Placeholder $placeholder
CPlaceholder $cplaceholder
ExtensionsParams $extensionsparams
Customfield $customfield
FieldAsString $fieldasstring
ConfigFieldsetsGlobal $configfieldsetsglobal
ConfigFieldsetsSiteControl $configfieldsetssitecontrol
ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol
ConfigFieldsetsUikit $configfieldsetsuikit
ConfigFieldsetsGooglechart $configfieldsetsgooglechart
ConfigFieldsetsEmailHelper $configfieldsetsemailhelper
ConfigFieldsetsEncryption $configfieldsetsencryption
ConfigFieldsetsCustomfield $configfieldsetscustomfield
end note
note right of ConfigFieldsets::set
Set Config Fieldsets
return: void
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,388 @@
<?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\Creator;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Component;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event;
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
use VDM\Joomla\Componentbuilder\Compiler\Component\Placeholder as CPlaceholder;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ExtensionsParams;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ConfigFieldsetsCustomfield as Customfield;
use VDM\Joomla\Componentbuilder\Compiler\Creator\FieldAsString;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsGlobal;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsSiteControl;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsGroupControl;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsUikit;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsGooglechart;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsEmailHelper;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsEncryption;
use VDM\Joomla\Componentbuilder\Compiler\Creator\ConfigFieldsetsCustomfield;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix;
use VDM\Joomla\Utilities\GetHelper;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Utilities\MathHelper;
/**
* Config Fieldsets Creator Class
*
* @since 3.2.0
*/
final class ConfigFieldsets
{
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Component Class.
*
* @var Component
* @since 3.2.0
*/
protected Component $component;
/**
* The EventInterface Class.
*
* @var Event
* @since 3.2.0
*/
protected Event $event;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Placeholder Class.
*
* @var CPlaceholder
* @since 3.2.0
*/
protected CPlaceholder $cplaceholder;
/**
* The ExtensionsParams Class.
*
* @var ExtensionsParams
* @since 3.2.0
*/
protected ExtensionsParams $extensionsparams;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var Customfield
* @since 3.2.0
*/
protected Customfield $customfield;
/**
* The FieldAsString Class.
*
* @var FieldAsString
* @since 3.2.0
*/
protected FieldAsString $fieldasstring;
/**
* The ConfigFieldsetsGlobal Class.
*
* @var ConfigFieldsetsGlobal
* @since 3.2.0
*/
protected ConfigFieldsetsGlobal $configfieldsetsglobal;
/**
* The ConfigFieldsetsSiteControl Class.
*
* @var ConfigFieldsetsSiteControl
* @since 3.2.0
*/
protected ConfigFieldsetsSiteControl $configfieldsetssitecontrol;
/**
* The ConfigFieldsetsGroupControl Class.
*
* @var ConfigFieldsetsGroupControl
* @since 3.2.0
*/
protected ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol;
/**
* The ConfigFieldsetsUikit Class.
*
* @var ConfigFieldsetsUikit
* @since 3.2.0
*/
protected ConfigFieldsetsUikit $configfieldsetsuikit;
/**
* The ConfigFieldsetsGooglechart Class.
*
* @var ConfigFieldsetsGooglechart
* @since 3.2.0
*/
protected ConfigFieldsetsGooglechart $configfieldsetsgooglechart;
/**
* The ConfigFieldsetsEmailHelper Class.
*
* @var ConfigFieldsetsEmailHelper
* @since 3.2.0
*/
protected ConfigFieldsetsEmailHelper $configfieldsetsemailhelper;
/**
* The ConfigFieldsetsEncryption Class.
*
* @var ConfigFieldsetsEncryption
* @since 3.2.0
*/
protected ConfigFieldsetsEncryption $configfieldsetsencryption;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var ConfigFieldsetsCustomfield
* @since 3.2.0
*/
protected ConfigFieldsetsCustomfield $configfieldsetscustomfield;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Component $component The Component Class.
* @param Event $event The EventInterface Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param CPlaceholder $cplaceholder The Placeholder Class.
* @param ExtensionsParams $extensionsparams The ExtensionsParams Class.
* @param Customfield $customfield The ConfigFieldsetsCustomfield Class.
* @param FieldAsString $fieldasstring The FieldAsString Class.
* @param ConfigFieldsetsGlobal $configfieldsetsglobal The ConfigFieldsetsGlobal Class.
* @param ConfigFieldsetsSiteControl $configfieldsetssitecontrol The ConfigFieldsetsSiteControl Class.
* @param ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol The ConfigFieldsetsGroupControl Class.
* @param ConfigFieldsetsUikit $configfieldsetsuikit The ConfigFieldsetsUikit Class.
* @param ConfigFieldsetsGooglechart $configfieldsetsgooglechart The ConfigFieldsetsGooglechart Class.
* @param ConfigFieldsetsEmailHelper $configfieldsetsemailhelper The ConfigFieldsetsEmailHelper Class.
* @param ConfigFieldsetsEncryption $configfieldsetsencryption The ConfigFieldsetsEncryption Class.
* @param ConfigFieldsetsCustomfield $configfieldsetscustomfield The ConfigFieldsetsCustomfield Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Component $component, Event $event,
Placeholder $placeholder, CPlaceholder $cplaceholder,
ExtensionsParams $extensionsparams,
Customfield $customfield, FieldAsString $fieldasstring,
ConfigFieldsetsGlobal $configfieldsetsglobal,
ConfigFieldsetsSiteControl $configfieldsetssitecontrol,
ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol,
ConfigFieldsetsUikit $configfieldsetsuikit,
ConfigFieldsetsGooglechart $configfieldsetsgooglechart,
ConfigFieldsetsEmailHelper $configfieldsetsemailhelper,
ConfigFieldsetsEncryption $configfieldsetsencryption,
ConfigFieldsetsCustomfield $configfieldsetscustomfield)
{
$this->config = $config;
$this->component = $component;
$this->event = $event;
$this->placeholder = $placeholder;
$this->cplaceholder = $cplaceholder;
$this->extensionsparams = $extensionsparams;
$this->customfield = $customfield;
$this->fieldasstring = $fieldasstring;
$this->configfieldsetsglobal = $configfieldsetsglobal;
$this->configfieldsetssitecontrol = $configfieldsetssitecontrol;
$this->configfieldsetsgroupcontrol = $configfieldsetsgroupcontrol;
$this->configfieldsetsuikit = $configfieldsetsuikit;
$this->configfieldsetsgooglechart = $configfieldsetsgooglechart;
$this->configfieldsetsemailhelper = $configfieldsetsemailhelper;
$this->configfieldsetsencryption = $configfieldsetsencryption;
$this->configfieldsetscustomfield = $configfieldsetscustomfield;
}
/**
* Set Config Fieldsets
*
* @param int $timer
*
* @since 1.0
*/
public function set(int $timer = 0): void
{
// main lang prefix
$lang = $this->config->lang_prefix . '_CONFIG';
if (1 == $timer) // this is before the admin views are build
{
// start loading Global params
$autorName = StringHelper::html(
$this->component->get('author')
);
$autorEmail = StringHelper::html(
$this->component->get('email')
);
$this->extensionsparams->add('component', '"autorName":"' . $autorName
. '","autorEmail":"' . $autorEmail . '"');
// set the custom fields
if ($this->component->isArray('config'))
{
// set component code name
$component = $this->config->component_code_name;
$nameSingleCode = 'config';
$nameListCode = 'configs';
// set place holders
$placeholders = [];
$placeholders[Placefix::_h('component')]
= $this->config->component_code_name;
$placeholders[Placefix::_h('Component')]
= StringHelper::safe(
$this->component->get('name_code'), 'F'
);
$placeholders[Placefix::_h('COMPONENT')]
= StringHelper::safe(
$this->component->get('name_code'), 'U'
);
$placeholders[Placefix::_h('view')]
= $nameSingleCode;
$placeholders[Placefix::_h('views')]
= $nameListCode;
$placeholders[Placefix::_('component')]
= $this->config->component_code_name;
$placeholders[Placefix::_('Component')]
= $placeholders[Placefix::_h('Component')];
$placeholders[Placefix::_('COMPONENT')]
= $placeholders[Placefix::_h('COMPONENT')];
$placeholders[Placefix::_('view')]
= $nameSingleCode;
$placeholders[Placefix::_('views')]
= $nameListCode;
// load the global placeholders
foreach ($this->cplaceholder->get() as $globalPlaceholder => $gloabalValue)
{
$placeholders[$globalPlaceholder] = $gloabalValue;
}
$view = [];
$viewType = 0;
// set the custom table key
$dbkey = 'g';
// Trigger Event: jcb_ce_onBeforeSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onBeforeSetConfigFieldsets', [&$timer]
);
// build the config fields
foreach ($this->component->get('config') as $field)
{
// get the xml string
$xmlField = $this->fieldasstring->get(
$field, $view, $viewType, $lang, $nameSingleCode,
$nameListCode, $placeholders, $dbkey, false
);
// make sure the xml is set and a string
if (isset($xmlField) && StringHelper::check($xmlField))
{
$this->customfield->add($field['tabname'], $xmlField, true);
// set global params to db on install
$fieldName = StringHelper::safe(
$this->placeholder->update(
GetHelper::between(
$xmlField, 'name="', '"'
), $placeholders
)
);
$fieldDefault = $this->placeholder->update(
GetHelper::between(
$xmlField, 'default="', '"'
), $placeholders
);
if (isset($field['custom_value'])
&& StringHelper::check(
$field['custom_value']
))
{
// add array if found
if ((strpos((string) $field['custom_value'], '["') !== false)
&& (strpos((string) $field['custom_value'], '"]')
!== false))
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName
. '":' . $field['custom_value']);
}
else
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName
. '":"' . $field['custom_value'] . '"');
}
}
elseif (StringHelper::check($fieldDefault))
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName . '":"'
. $fieldDefault . '"');
}
}
}
}
// first run we must set the global
$this->configfieldsetsglobal->set($lang, $autorName, $autorEmail);
$this->configfieldsetssitecontrol->set($lang);
}
elseif (2 == $timer) // this is after the admin views are build
{
// Trigger Event: jcb_ce_onBeforeSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onBeforeSetConfigFieldsets', [&$timer]
);
// these field sets can only be added after admin view is build
$this->configfieldsetsgroupcontrol->set($lang);
// these can be added anytime really (but looks best after groups
$this->configfieldsetsuikit->set($lang);
$this->configfieldsetsgooglechart->set($lang);
$this->configfieldsetsemailhelper->set($lang);
$this->configfieldsetsencryption->set($lang);
// these are the custom settings
$this->configfieldsetscustomfield->set($lang);
}
// Trigger Event: jcb_ce_onAfterSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onAfterSetConfigFieldsets', [&$timer]
);
}
}

View File

@ -0,0 +1,340 @@
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Component Class.
*
* @var Component
* @since 3.2.0
*/
protected Component $component;
/**
* The EventInterface Class.
*
* @var Event
* @since 3.2.0
*/
protected Event $event;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Placeholder Class.
*
* @var CPlaceholder
* @since 3.2.0
*/
protected CPlaceholder $cplaceholder;
/**
* The ExtensionsParams Class.
*
* @var ExtensionsParams
* @since 3.2.0
*/
protected ExtensionsParams $extensionsparams;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var Customfield
* @since 3.2.0
*/
protected Customfield $customfield;
/**
* The FieldAsString Class.
*
* @var FieldAsString
* @since 3.2.0
*/
protected FieldAsString $fieldasstring;
/**
* The ConfigFieldsetsGlobal Class.
*
* @var ConfigFieldsetsGlobal
* @since 3.2.0
*/
protected ConfigFieldsetsGlobal $configfieldsetsglobal;
/**
* The ConfigFieldsetsSiteControl Class.
*
* @var ConfigFieldsetsSiteControl
* @since 3.2.0
*/
protected ConfigFieldsetsSiteControl $configfieldsetssitecontrol;
/**
* The ConfigFieldsetsGroupControl Class.
*
* @var ConfigFieldsetsGroupControl
* @since 3.2.0
*/
protected ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol;
/**
* The ConfigFieldsetsUikit Class.
*
* @var ConfigFieldsetsUikit
* @since 3.2.0
*/
protected ConfigFieldsetsUikit $configfieldsetsuikit;
/**
* The ConfigFieldsetsGooglechart Class.
*
* @var ConfigFieldsetsGooglechart
* @since 3.2.0
*/
protected ConfigFieldsetsGooglechart $configfieldsetsgooglechart;
/**
* The ConfigFieldsetsEmailHelper Class.
*
* @var ConfigFieldsetsEmailHelper
* @since 3.2.0
*/
protected ConfigFieldsetsEmailHelper $configfieldsetsemailhelper;
/**
* The ConfigFieldsetsEncryption Class.
*
* @var ConfigFieldsetsEncryption
* @since 3.2.0
*/
protected ConfigFieldsetsEncryption $configfieldsetsencryption;
/**
* The ConfigFieldsetsCustomfield Class.
*
* @var ConfigFieldsetsCustomfield
* @since 3.2.0
*/
protected ConfigFieldsetsCustomfield $configfieldsetscustomfield;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Component $component The Component Class.
* @param Event $event The EventInterface Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param CPlaceholder $cplaceholder The Placeholder Class.
* @param ExtensionsParams $extensionsparams The ExtensionsParams Class.
* @param Customfield $customfield The ConfigFieldsetsCustomfield Class.
* @param FieldAsString $fieldasstring The FieldAsString Class.
* @param ConfigFieldsetsGlobal $configfieldsetsglobal The ConfigFieldsetsGlobal Class.
* @param ConfigFieldsetsSiteControl $configfieldsetssitecontrol The ConfigFieldsetsSiteControl Class.
* @param ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol The ConfigFieldsetsGroupControl Class.
* @param ConfigFieldsetsUikit $configfieldsetsuikit The ConfigFieldsetsUikit Class.
* @param ConfigFieldsetsGooglechart $configfieldsetsgooglechart The ConfigFieldsetsGooglechart Class.
* @param ConfigFieldsetsEmailHelper $configfieldsetsemailhelper The ConfigFieldsetsEmailHelper Class.
* @param ConfigFieldsetsEncryption $configfieldsetsencryption The ConfigFieldsetsEncryption Class.
* @param ConfigFieldsetsCustomfield $configfieldsetscustomfield The ConfigFieldsetsCustomfield Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Component $component, Event $event,
Placeholder $placeholder, CPlaceholder $cplaceholder,
ExtensionsParams $extensionsparams,
Customfield $customfield, FieldAsString $fieldasstring,
ConfigFieldsetsGlobal $configfieldsetsglobal,
ConfigFieldsetsSiteControl $configfieldsetssitecontrol,
ConfigFieldsetsGroupControl $configfieldsetsgroupcontrol,
ConfigFieldsetsUikit $configfieldsetsuikit,
ConfigFieldsetsGooglechart $configfieldsetsgooglechart,
ConfigFieldsetsEmailHelper $configfieldsetsemailhelper,
ConfigFieldsetsEncryption $configfieldsetsencryption,
ConfigFieldsetsCustomfield $configfieldsetscustomfield)
{
$this->config = $config;
$this->component = $component;
$this->event = $event;
$this->placeholder = $placeholder;
$this->cplaceholder = $cplaceholder;
$this->extensionsparams = $extensionsparams;
$this->customfield = $customfield;
$this->fieldasstring = $fieldasstring;
$this->configfieldsetsglobal = $configfieldsetsglobal;
$this->configfieldsetssitecontrol = $configfieldsetssitecontrol;
$this->configfieldsetsgroupcontrol = $configfieldsetsgroupcontrol;
$this->configfieldsetsuikit = $configfieldsetsuikit;
$this->configfieldsetsgooglechart = $configfieldsetsgooglechart;
$this->configfieldsetsemailhelper = $configfieldsetsemailhelper;
$this->configfieldsetsencryption = $configfieldsetsencryption;
$this->configfieldsetscustomfield = $configfieldsetscustomfield;
}
/**
* Set Config Fieldsets
*
* @param int $timer
*
* @since 1.0
*/
public function set(int $timer = 0): void
{
// main lang prefix
$lang = $this->config->lang_prefix . '_CONFIG';
if (1 == $timer) // this is before the admin views are build
{
// start loading Global params
$autorName = StringHelper::html(
$this->component->get('author')
);
$autorEmail = StringHelper::html(
$this->component->get('email')
);
$this->extensionsparams->add('component', '"autorName":"' . $autorName
. '","autorEmail":"' . $autorEmail . '"');
// set the custom fields
if ($this->component->isArray('config'))
{
// set component code name
$component = $this->config->component_code_name;
$nameSingleCode = 'config';
$nameListCode = 'configs';
// set place holders
$placeholders = [];
$placeholders[Placefix::_h('component')]
= $this->config->component_code_name;
$placeholders[Placefix::_h('Component')]
= StringHelper::safe(
$this->component->get('name_code'), 'F'
);
$placeholders[Placefix::_h('COMPONENT')]
= StringHelper::safe(
$this->component->get('name_code'), 'U'
);
$placeholders[Placefix::_h('view')]
= $nameSingleCode;
$placeholders[Placefix::_h('views')]
= $nameListCode;
$placeholders[Placefix::_('component')]
= $this->config->component_code_name;
$placeholders[Placefix::_('Component')]
= $placeholders[Placefix::_h('Component')];
$placeholders[Placefix::_('COMPONENT')]
= $placeholders[Placefix::_h('COMPONENT')];
$placeholders[Placefix::_('view')]
= $nameSingleCode;
$placeholders[Placefix::_('views')]
= $nameListCode;
// load the global placeholders
foreach ($this->cplaceholder->get() as $globalPlaceholder => $gloabalValue)
{
$placeholders[$globalPlaceholder] = $gloabalValue;
}
$view = [];
$viewType = 0;
// set the custom table key
$dbkey = 'g';
// Trigger Event: jcb_ce_onBeforeSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onBeforeSetConfigFieldsets', [&$timer]
);
// build the config fields
foreach ($this->component->get('config') as $field)
{
// get the xml string
$xmlField = $this->fieldasstring->get(
$field, $view, $viewType, $lang, $nameSingleCode,
$nameListCode, $placeholders, $dbkey, false
);
// make sure the xml is set and a string
if (isset($xmlField) && StringHelper::check($xmlField))
{
$this->customfield->add($field['tabname'], $xmlField, true);
// set global params to db on install
$fieldName = StringHelper::safe(
$this->placeholder->update(
GetHelper::between(
$xmlField, 'name="', '"'
), $placeholders
)
);
$fieldDefault = $this->placeholder->update(
GetHelper::between(
$xmlField, 'default="', '"'
), $placeholders
);
if (isset($field['custom_value'])
&& StringHelper::check(
$field['custom_value']
))
{
// add array if found
if ((strpos((string) $field['custom_value'], '["') !== false)
&& (strpos((string) $field['custom_value'], '"]')
!== false))
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName
. '":' . $field['custom_value']);
}
else
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName
. '":"' . $field['custom_value'] . '"');
}
}
elseif (StringHelper::check($fieldDefault))
{
// load the Global checkin defautls
$this->extensionsparams->add('component', '"' . $fieldName . '":"'
. $fieldDefault . '"');
}
}
}
}
// first run we must set the global
$this->configfieldsetsglobal->set($lang, $autorName, $autorEmail);
$this->configfieldsetssitecontrol->set($lang);
}
elseif (2 == $timer) // this is after the admin views are build
{
// Trigger Event: jcb_ce_onBeforeSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onBeforeSetConfigFieldsets', [&$timer]
);
// these field sets can only be added after admin view is build
$this->configfieldsetsgroupcontrol->set($lang);
// these can be added anytime really (but looks best after groups
$this->configfieldsetsuikit->set($lang);
$this->configfieldsetsgooglechart->set($lang);
$this->configfieldsetsemailhelper->set($lang);
$this->configfieldsetsencryption->set($lang);
// these are the custom settings
$this->configfieldsetscustomfield->set($lang);
}
// Trigger Event: jcb_ce_onAfterSetConfigFieldsets
$this->event->trigger(
'jcb_ce_onAfterSetConfigFieldsets', [&$timer]
);
}

View File

@ -0,0 +1,111 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "20cf1825-29d0-4c6c-8fe9-a1e13a4dac53",
"implements": null,
"load_selection": null,
"name": "ConfigFieldsets",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Creator.ConfigFieldsets",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "e2472b22-a329-44d8-b4a2-ae3ba99e17a0",
"as": "default"
},
"use_selection2": {
"use": "20ed72b0-fcac-4344-aee1-8a65e3bf221d",
"as": "Event"
},
"use_selection3": {
"use": "06453ada-e370-49f0-b262-e3f5a8ed0c2c",
"as": "default"
},
"use_selection4": {
"use": "aecc17ba-0b0f-4e5c-ae43-71be063a3dcb",
"as": "CPlaceholder"
},
"use_selection5": {
"use": "bcf1e767-1566-440d-9f67-5c1bada934fa",
"as": "default"
},
"use_selection6": {
"use": "ed314bd8-c995-4282-bcaa-5e0a68ac401b",
"as": "Customfield"
},
"use_selection7": {
"use": "f48764e0-16c6-459c-8576-af7616f3b720",
"as": "default"
},
"use_selection8": {
"use": "0fe3133d-1ff3-4444-9229-4218d8fb338e",
"as": "default"
},
"use_selection9": {
"use": "aac8502a-dbdf-42b6-a9ba-2c2e941f8b11",
"as": "default"
},
"use_selection10": {
"use": "a8d9583a-6ddb-4aac-b0d1-4c2d2d1c8c74",
"as": "default"
},
"use_selection11": {
"use": "84c11075-570a-4907-9be0-9305e0fabe3c",
"as": "default"
},
"use_selection12": {
"use": "31c8127c-0d42-4e09-be81-7cf243c5b30f",
"as": "default"
},
"use_selection13": {
"use": "d80e58b8-8462-47c4-9dcd-380445f1c64a",
"as": "default"
},
"use_selection14": {
"use": "5e3fc314-646b-4834-8b1a-1a79f3d4d2ab",
"as": "default"
},
"use_selection15": {
"use": "208bc37c-0055-44df-9a34-63d6bfa10765",
"as": "default"
},
"use_selection16": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default"
},
"use_selection17": {
"use": "500f3a7f-c16d-4dd4-81b2-2df6776b5388",
"as": "default"
},
"use_selection18": {
"use": "db87c339-5bb6-4291-a7ef-2c48ea1b06bc",
"as": "default"
},
"use_selection19": {
"use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a",
"as": "default"
},
"use_selection20": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
},
"use_selection21": {
"use": "4e6ff11d-bebf-42f5-8fd7-b2f882857222",
"as": "default"
},
"use_selection22": {
"use": "152c8793-8b75-4715-996a-257b9f65451c",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Creator.ConfigFieldsets",
"description": "Config Fieldsets Creator Class\r\n\r\n@since 3.2.0",
"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

@ -11,7 +11,7 @@
```uml
@startuml
interface EventInterface #Lavender {
+ trigger(string $event, mixed $data) : void
+ trigger(string $event, mixed $data = null) : void
}
note right of EventInterface::trigger

View File

@ -28,6 +28,6 @@ interface EventInterface
* @return void
* @since 3.2.0
*/
public function trigger(string $event, $data);
public function trigger(string $event, $data = null);
}

View File

@ -7,4 +7,4 @@
* @return void
* @since 3.2.0
*/
public function trigger(string $event, $data);
public function trigger(string $event, $data = null);

View File

@ -0,0 +1,46 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class CanDelete (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Model**
```uml
@startuml
class CanDelete << (F,LightGreen) >> #RoyalBlue {
# String $component
# Permission $permission
+ __construct(Config $config, Permission $permission)
+ get(string $nameSingleCode) : string
}
note right of CanDelete::__construct
Constructor.
since: 3.2.0
end note
note right of CanDelete::get
Get Model Can Delete Function Code
since: 3.2.0
return: string
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,91 @@
<?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\Model;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model\CanDeleteInterface;
/**
* Model Can Delete Class for Joomla 3
*
* @since 3.2.0
*/
final class CanDelete implements CanDeleteInterface
{
/**
* The Component code name.
*
* @var String
* @since 3.2.0
*/
protected String $component;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Permission $permission The Permission Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Permission $permission)
{
$this->component = $config->component_code_name;
$this->permission = $permission;
}
/**
* Get Model Can Delete Function Code
*
* @param string $nameSingleCode The single code name of the view.
*
* @since 3.2.0
* @return string The can delete method code
*/
public function get(string $nameSingleCode): string
{
$allow = [];
// setup the default script
$allow[] = PHP_EOL . Indent::_(2) . "if (!empty(\$record->id))";
$allow[] = Indent::_(2) . "{";
$allow[] = Indent::_(3) . "if (\$record->published != -2)";
$allow[] = Indent::_(3) . "{";
$allow[] = Indent::_(4) . "return;";
$allow[] = Indent::_(3) . "}";
// check if the item has permissions.
$allow[] = PHP_EOL . Indent::_(3)
. "\$user = Factory::getUser();";
$allow[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " The record has been set. Check the record permissions.";
$allow[] = Indent::_(3) . "return \$user->authorise('"
. $this->permission->getAction($nameSingleCode, 'core.delete') . "', 'com_" . $this->component . "."
. $nameSingleCode . ".' . (int) \$record->id);";
$allow[] = Indent::_(2) . "}";
$allow[] = Indent::_(2) . "return false;";
return implode(PHP_EOL, $allow);
}
}

View File

@ -0,0 +1,61 @@
/**
* The Component code name.
*
* @var String
* @since 3.2.0
*/
protected String $component;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Permission $permission The Permission Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Permission $permission)
{
$this->component = $config->component_code_name;
$this->permission = $permission;
}
/**
* Get Model Can Delete Function Code
*
* @param string $nameSingleCode The single code name of the view.
*
* @since 3.2.0
* @return string The can delete method code
*/
public function get(string $nameSingleCode): string
{
$allow = [];
// setup the default script
$allow[] = PHP_EOL . Indent::_(2) . "if (!empty(\$record->id))";
$allow[] = Indent::_(2) . "{";
$allow[] = Indent::_(3) . "if (\$record->published != -2)";
$allow[] = Indent::_(3) . "{";
$allow[] = Indent::_(4) . "return;";
$allow[] = Indent::_(3) . "}";
// check if the item has permissions.
$allow[] = PHP_EOL . Indent::_(3)
. "\$user = Factory::getUser();";
$allow[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " The record has been set. Check the record permissions.";
$allow[] = Indent::_(3) . "return \$user->authorise('"
. $this->permission->getAction($nameSingleCode, 'core.delete') . "', 'com_" . $this->component . "."
. $nameSingleCode . ".' . (int) \$record->id);";
$allow[] = Indent::_(2) . "}";
$allow[] = Indent::_(2) . "return false;";
return implode(PHP_EOL, $allow);
}

View File

@ -0,0 +1,37 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "23766738-d0a4-4d0a-8555-7e4c97c0cddd",
"implements": [
"e00a7d1d-6d80-41c5-bf13-32d41bc5bf91"
],
"load_selection": null,
"name": "CanDelete",
"power_version": "1.0.0",
"system_name": "JCB.Architecture.J3.Model.CanDelete",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "7f01622a-74c9-4e67-b111-3eb488035206",
"as": "default"
},
"use_selection2": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
},
"use_selection3": {
"use": "4e6ff11d-bebf-42f5-8fd7-b2f882857222",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Architecture.JoomlaThree.Model.CanDelete",
"description": "Model Can Delete Class for Joomla 3\r\n\r\n@since 3.2.0",
"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,109 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class FileInjector (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Utilities**
```uml
@startuml
class FileInjector << (F,LightGreen) >> #RoyalBlue {
# Power $power
+ __construct(Power $power)
+ add(string $file, string $data, ...) : void
- openFileWithLock(string $file) : resource
- processFile(resource $actual_file, resource $temp_file, ...) : void
- truncateIfNeeded(resource $actual_file, string $data, ...) : void
- copyRemainingData(resource $actual_file, resource $temp_file, ...) : void
- injectSuperPowers(resource $actual_file) : void
}
note right of FileInjector::__construct
Constructor.
since: 3.2.0
end note
note right of FileInjector::add
Inserts or replaces data in a file at a specific position.
since: 3.2.0
return: void
arguments:
string $file
string $data
int $position
?int $replace = null
end note
note right of FileInjector::openFileWithLock
Opens a file and acquires an exclusive lock on it.
since: 3.2.0
return: resource
end note
note right of FileInjector::processFile
Processes the file for data insertion and copying the remaining data.
since: 3.2.0
return: void
arguments:
resource $actual_file
resource $temp_file
string $data
int $position
?int $replace
end note
note right of FileInjector::truncateIfNeeded
Truncates the file after data insertion if necessary.
since: 3.2.0
return: void
arguments:
resource $actual_file
string $data
int $position
end note
note right of FileInjector::copyRemainingData
Copies the remaining data from the temporary stream to the actual file.
since: 3.2.0
return: void
arguments:
resource $actual_file
resource $temp_file
int $position
?int $replace
end note
note right of FileInjector::injectSuperPowers
Injects super powers into the file content, if found, and updates the file.
since: 3.2.0
return: void
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,213 @@
<?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\Utilities;
use VDM\Joomla\Componentbuilder\Compiler\Power\Injector as Power;
use VDM\Joomla\Utilities\MathHelper;
/**
* File Injector
* Thanks to http://stackoverflow.com/a/16813550/1429677
*
* @since 3.2.0
*/
final class FileInjector
{
/**
* The Injector Class.
*
* @var Power
* @since 3.2.0
*/
protected Power $power;
/**
* The pattern to get the powers
*
* @var string
* @since 3.2.0
**/
protected string $pattern = '/Super_'.'_'.'_[a-zA-Z0-9_]+_'.'_'.'_Power/';
/**
* Constructor.
*
* @param Power $power The Injector Class.
*
* @since 3.2.0
*/
public function __construct(Power $power)
{
$this->power = $power;
}
/**
* Inserts or replaces data in a file at a specific position.
*
* @param string $file The path of the file to modify.
* @param string $data The data to insert or replace.
* @param int $position The position in the file where the data should be inserted or replaced.
* @param int|null $replace The number of bytes to replace; if null, data will be inserted.
*
* @return void
* @throws \RuntimeException If unable to open or modify the file.
* @throws \InvalidArgumentException If the position is negative.
* @since 3.2.0
*/
public function add(string $file, string $data, int $position, ?int $replace = null): void
{
if ($position < 0)
{
throw new \InvalidArgumentException('Position cannot be negative.');
}
$found_super_powers = preg_match($this->pattern, $data);
$actual_file = $this->openFileWithLock($file);
try
{
$temp_file = fopen('php://temp', "rw+");
if ($temp_file === false)
{
throw new \RuntimeException("Unable to open temporary file.");
}
$this->processFile($actual_file, $temp_file, $data, $position, $replace);
if ($found_super_powers)
{
$this->injectSuperPowers($actual_file);
}
}
finally
{
flock($actual_file, LOCK_UN);
fclose($actual_file);
if (isset($temp_file))
{
fclose($temp_file);
}
}
}
/**
* Opens a file and acquires an exclusive lock on it.
*
* @param string $file The file path to open.
*
* @return resource The file handle.
* @throws \RuntimeException If the file cannot be opened or locked.
* @since 3.2.0
*/
private function openFileWithLock(string $file)
{
$actual_file = fopen($file, "rw+");
if ($actual_file === false || !flock($actual_file, LOCK_EX))
{
throw new \RuntimeException("Unable to open and lock the file: {$file}");
}
return $actual_file;
}
/**
* Processes the file for data insertion and copying the remaining data.
*
* @param resource $actual_file The file handle of the actual file.
* @param resource $temp_file The file handle of the temporary file.
* @param string $data The data to be inserted.
* @param int $position The position in the file for the data insertion.
* @param int|null $replace The number of bytes to replace; if null, data will be inserted.
*
* @return void
* @since 3.2.0
*/
private function processFile($actual_file, $temp_file, string $data, int $position, ?int $replace): void
{
// Make a copy of the file in the temporary stream
stream_copy_to_stream($actual_file, $temp_file);
// Move to the position where the data should be added
fseek($actual_file, $position);
// Add the data
fwrite($actual_file, $data);
$this->truncateIfNeeded($actual_file, $data, $position);
$this->copyRemainingData($actual_file, $temp_file, $position, $replace);
}
/**
* Truncates the file after data insertion if necessary.
*
* @param resource $actual_file The file handle.
* @param string $data The data that was inserted.
* @param int $position The position where data was inserted.
*
* @return void
* @since 3.2.0
*/
private function truncateIfNeeded($actual_file, string $data, int $position): void
{
// Truncate the file at the end of the added data if replacing
$data_length = mb_strlen($data, '8bit');
$remove = MathHelper::bc('add', $position, $data_length);
ftruncate($actual_file, $remove);
}
/**
* Copies the remaining data from the temporary stream to the actual file.
*
* @param resource $actual_file The file handle of the actual file.
* @param resource $temp_file The file handle of the temporary file.
* @param int $position The position in the file where data insertion finished.
* @param int|null $replace The number of bytes that were replaced; if null, data was inserted.
*
* @return void
* @since 3.2.0
*/
private function copyRemainingData($actual_file, $temp_file, int $position, ?int $replace): void
{
// check if this was a replacement of data
$position = MathHelper::bc('add', $position, $replace ?: 0);
// Move to the position of the remaining data in the temporary stream
fseek($temp_file, $position);
// Copy the remaining data from the temporary stream to the file
stream_copy_to_stream($temp_file, $actual_file);
}
/**
* Injects super powers into the file content, if found, and updates the file.
*
* @param resource $actual_file The file handle of the actual file.
*
* @return void
* @since 3.2.0
*/
private function injectSuperPowers($actual_file): void
{
rewind($actual_file);
$power_data = $this->power->power(
stream_get_contents($actual_file)
);
ftruncate($actual_file, 0);
rewind($actual_file);
fwrite($actual_file, $power_data);
}
}

View File

@ -0,0 +1,185 @@
/**
* The Injector Class.
*
* @var Power
* @since 3.2.0
*/
protected Power $power;
/**
* The pattern to get the powers
*
* @var string
* @since 3.2.0
**/
protected string $pattern = '/Super_'.'_'.'_[a-zA-Z0-9_]+_'.'_'.'_Power/';
/**
* Constructor.
*
* @param Power $power The Injector Class.
*
* @since 3.2.0
*/
public function __construct(Power $power)
{
$this->power = $power;
}
/**
* Inserts or replaces data in a file at a specific position.
*
* @param string $file The path of the file to modify.
* @param string $data The data to insert or replace.
* @param int $position The position in the file where the data should be inserted or replaced.
* @param int|null $replace The number of bytes to replace; if null, data will be inserted.
*
* @return void
* @throws \RuntimeException If unable to open or modify the file.
* @throws \InvalidArgumentException If the position is negative.
* @since 3.2.0
*/
public function add(string $file, string $data, int $position, ?int $replace = null): void
{
if ($position < 0)
{
throw new \InvalidArgumentException('Position cannot be negative.');
}
$found_super_powers = preg_match($this->pattern, $data);
$actual_file = $this->openFileWithLock($file);
try
{
$temp_file = fopen('php://temp', "rw+");
if ($temp_file === false)
{
throw new \RuntimeException("Unable to open temporary file.");
}
$this->processFile($actual_file, $temp_file, $data, $position, $replace);
if ($found_super_powers)
{
$this->injectSuperPowers($actual_file);
}
}
finally
{
flock($actual_file, LOCK_UN);
fclose($actual_file);
if (isset($temp_file))
{
fclose($temp_file);
}
}
}
/**
* Opens a file and acquires an exclusive lock on it.
*
* @param string $file The file path to open.
*
* @return resource The file handle.
* @throws \RuntimeException If the file cannot be opened or locked.
* @since 3.2.0
*/
private function openFileWithLock(string $file)
{
$actual_file = fopen($file, "rw+");
if ($actual_file === false || !flock($actual_file, LOCK_EX))
{
throw new \RuntimeException("Unable to open and lock the file: {$file}");
}
return $actual_file;
}
/**
* Processes the file for data insertion and copying the remaining data.
*
* @param resource $actual_file The file handle of the actual file.
* @param resource $temp_file The file handle of the temporary file.
* @param string $data The data to be inserted.
* @param int $position The position in the file for the data insertion.
* @param int|null $replace The number of bytes to replace; if null, data will be inserted.
*
* @return void
* @since 3.2.0
*/
private function processFile($actual_file, $temp_file, string $data, int $position, ?int $replace): void
{
// Make a copy of the file in the temporary stream
stream_copy_to_stream($actual_file, $temp_file);
// Move to the position where the data should be added
fseek($actual_file, $position);
// Add the data
fwrite($actual_file, $data);
$this->truncateIfNeeded($actual_file, $data, $position);
$this->copyRemainingData($actual_file, $temp_file, $position, $replace);
}
/**
* Truncates the file after data insertion if necessary.
*
* @param resource $actual_file The file handle.
* @param string $data The data that was inserted.
* @param int $position The position where data was inserted.
*
* @return void
* @since 3.2.0
*/
private function truncateIfNeeded($actual_file, string $data, int $position): void
{
// Truncate the file at the end of the added data if replacing
$data_length = mb_strlen($data, '8bit');
$remove = MathHelper::bc('add', $position, $data_length);
ftruncate($actual_file, $remove);
}
/**
* Copies the remaining data from the temporary stream to the actual file.
*
* @param resource $actual_file The file handle of the actual file.
* @param resource $temp_file The file handle of the temporary file.
* @param int $position The position in the file where data insertion finished.
* @param int|null $replace The number of bytes that were replaced; if null, data was inserted.
*
* @return void
* @since 3.2.0
*/
private function copyRemainingData($actual_file, $temp_file, int $position, ?int $replace): void
{
// check if this was a replacement of data
$position = MathHelper::bc('add', $position, $replace ?: 0);
// Move to the position of the remaining data in the temporary stream
fseek($temp_file, $position);
// Copy the remaining data from the temporary stream to the file
stream_copy_to_stream($temp_file, $actual_file);
}
/**
* Injects super powers into the file content, if found, and updates the file.
*
* @param resource $actual_file The file handle of the actual file.
*
* @return void
* @since 3.2.0
*/
private function injectSuperPowers($actual_file): void
{
rewind($actual_file);
$power_data = $this->power->power(
stream_get_contents($actual_file)
);
ftruncate($actual_file, 0);
rewind($actual_file);
fwrite($actual_file, $power_data);
}

View File

@ -0,0 +1,27 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "23f2ca33-440a-4941-8e9a-4bc67522c0cb",
"implements": null,
"load_selection": null,
"name": "FileInjector",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Utilities.FileInjector",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "763d137c-42bc-4282-98d8-cc5c0654985f",
"as": "Power"
},
"use_selection1": {
"use": "152c8793-8b75-4715-996a-257b9f65451c",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Utilities.FileInjector",
"description": "File Injector\r\n Thanks to http:\/\/stackoverflow.com\/a\/16813550\/1429677\r\n\r\n@since 3.2.0",
"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

@ -6,30 +6,38 @@
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# class CoreValidation (Details)
# class CoreRule (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Field\JoomlaThree**
```uml
@startuml
class CoreValidation #Gold {
# ?array $rules
class CoreRule #Gold {
# array $rules
# string $path
+ __construct()
+ get(bool $lowercase = false) : array
- set(string $path) : void
}
note right of CoreValidation::__construct
note right of CoreRule::__construct
Constructor
since: 3.2.0
end note
note right of CoreValidation::get
note right of CoreRule::get
Get the Array of Existing Validation Rule Names
since: 3.2.0
return: array
end note
note right of CoreRule::set
Set the rules found in a path
since: 3.2.0
return: void
end note
@enduml
```

View File

@ -14,23 +14,23 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Field\JoomlaThree;
use Joomla\CMS\Filesystem\Folder;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Field\CoreValidationInterface;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Field\CoreRuleInterface;
/**
* Core Joomla Field Validation Rules
* Core Joomla Field Rules
*
* @since 3.2.0
*/
class CoreValidation implements CoreValidationInterface
class CoreRule implements CoreRuleInterface
{
/**
* Local Core Joomla Rules
*
* @var array|null
* @var array
* @since 3.2.0
**/
protected ?array $rules = null;
protected array $rules = [];
/**
* Local Core Joomla Rules Path
@ -61,41 +61,13 @@ class CoreValidation implements CoreValidationInterface
*/
public function get(bool $lowercase = false): array
{
if (!$this->rules)
if ($this->rules === [])
{
// check if the path exist
if (!Folder::exists($this->path))
{
return [];
}
// we must first store the current working directory
$joomla = getcwd();
// go to that folder
chdir($this->path);
// load all the files in this path
$rules = Folder::files('.', '\.php', true, true);
// change back to Joomla working directory
chdir($joomla);
// make sure we have an array
if (!ArrayHelper::check($rules))
{
return false;
}
// remove the Rule.php from the name
$this->rules = array_map(
fn($name): string => str_replace(array('./','Rule.php'), '', (string) $name),
$rules
);
$this->set($this->path);
}
// return rules if found
if (is_array($this->rules))
if ($this->rules !== [])
{
// check if the names should be all lowercase
if ($lowercase)
@ -105,6 +77,7 @@ class CoreValidation implements CoreValidationInterface
$this->rules
);
}
return $this->rules;
}
@ -112,5 +85,41 @@ class CoreValidation implements CoreValidationInterface
return [];
}
/**
* Set the rules found in a path
*
* @param string $path The path to load rules from
* @return void
* @since 3.2.0
*/
private function set(string $path): void
{
// Check if the path exists
if (!Folder::exists($path))
{
return;
}
// Load all PHP files in this path
$rules = Folder::files($path, '\.php$', true, true);
// Process the files to extract rule names
$processedRules = array_map(function ($name) {
$fileName = basename($name);
// Remove 'Rule.php' if it exists or just '.php' otherwise
if (substr($fileName, -8) === 'Rule.php')
{
return str_replace('Rule.php', '', $fileName);
}
else
{
return str_replace('.php', '', $fileName);
}
}, $rules);
// Merge with existing rules and remove duplicates
$this->rules = array_unique(array_merge($processedRules, $this->rules));
}
}

View File

@ -1,10 +1,10 @@
/**
* Local Core Joomla Rules
*
* @var array|null
* @var array
* @since 3.2.0
**/
protected ?array $rules = null;
protected array $rules = [];
/**
* Local Core Joomla Rules Path
@ -35,41 +35,13 @@
*/
public function get(bool $lowercase = false): array
{
if (!$this->rules)
if ($this->rules === [])
{
// check if the path exist
if (!Folder::exists($this->path))
{
return [];
}
// we must first store the current working directory
$joomla = getcwd();
// go to that folder
chdir($this->path);
// load all the files in this path
$rules = Folder::files('.', '\.php', true, true);
// change back to Joomla working directory
chdir($joomla);
// make sure we have an array
if (!ArrayHelper::check($rules))
{
return false;
}
// remove the Rule.php from the name
$this->rules = array_map(
fn($name): string => str_replace(array('./','Rule.php'), '', (string) $name),
$rules
);
$this->set($this->path);
}
// return rules if found
if (is_array($this->rules))
if ($this->rules !== [])
{
// check if the names should be all lowercase
if ($lowercase)
@ -79,9 +51,47 @@
$this->rules
);
}
return $this->rules;
}
// return empty array
return [];
}
/**
* Set the rules found in a path
*
* @param string $path The path to load rules from
* @return void
* @since 3.2.0
*/
private function set(string $path): void
{
// Check if the path exists
if (!Folder::exists($path))
{
return;
}
// Load all PHP files in this path
$rules = Folder::files($path, '\.php$', true, true);
// Process the files to extract rule names
$processedRules = array_map(function ($name) {
$fileName = basename($name);
// Remove 'Rule.php' if it exists or just '.php' otherwise
if (substr($fileName, -8) === 'Rule.php')
{
return str_replace('Rule.php', '', $fileName);
}
else
{
return str_replace('.php', '', $fileName);
}
}, $rules);
// Merge with existing rules and remove duplicates
$this->rules = array_unique(array_merge($processedRules, $this->rules));
}

View File

@ -7,9 +7,9 @@
"b9f05dc4-d23a-499a-a826-9749b81818ed"
],
"load_selection": null,
"name": "CoreValidation",
"name": "CoreRule",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Field.JoomlaThree.CoreValidation",
"system_name": "JCB.Compiler.Field.J3.CoreRule",
"type": "class",
"use_selection": {
"use_selection0": {
@ -17,8 +17,8 @@
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Field.JoomlaThree.CoreValidation",
"description": "Core Joomla Field Validation Rules\r\n\r\n@since 3.2.0",
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Field.JoomlaThree.CoreRule",
"description": "Core Joomla Field Rules\r\n\r\n@since 3.2.0",
"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": "use Joomla\\CMS\\Filesystem\\Folder;",
"composer": ""

View File

@ -0,0 +1,57 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# class History (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\JoomlaFour**
```uml
@startuml
class History #Gold {
# ?object $tmp
# Config $config
# $db
+ __construct(?Config $config = null)
+ get(string $type, int $id) : ?object
# set(object $object, int $action) : bool
}
note right of History::__construct
Constructor
since: 3.2.0
end note
note right of History::get
Get Item History object
since: 3.2.0
return: ?object
end note
note right of History::set
Set Item History Watch
0 = remove watch
1 = add watch
since: 3.2.0
return: bool
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,230 @@
<?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\JoomlaFour;
use Joomla\CMS\Factory;
use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler;
use VDM\Joomla\Utilities\JsonHelper;
use VDM\Joomla\Utilities\ArrayHelper;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HistoryInterface;
/**
* Compiler History
*
* @since 3.2.0
*/
class History implements HistoryInterface
{
/**
* History Item Object
*
* @var object|null
* @since 3.2.0
*/
protected ?object $tmp;
/**
* Compiler Config
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* Database object to query local DB
*
* @since 3.2.0
*/
protected $db;
/**
* Constructor
*
* @param Config|null $config The compiler config object.
*
* @since 3.2.0
*/
public function __construct(?Config $config = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->db = Factory::getDbo();
}
/**
* Get Item History object
*
* @param string $type The type of item
* @param int $id The item ID
*
* @return ?object The history
* @since 3.2.0
*/
public function get(string $type, int $id): ?object
{
// quick class object to store old history object
$this->tmp = null;
// Create a new query object.
$query = $this->db->getQuery(true);
$query->select('h.*');
$query->from('#__ucm_history AS h');
$query->where(
$this->db->quoteName('h.ucm_item_id') . ' = ' . (int) $id
);
// Join over the content type for the type id
$query->join(
'LEFT', '#__content_types AS ct ON ct.type_id = h.ucm_type_id'
);
$query->where(
'ct.type_alias = ' . $this->db->quote(
'com_componentbuilder.' . $type
)
);
$query->order('h.save_date DESC');
$this->db->setQuery($query, 0, 1);
$this->db->execute();
if ($this->db->getNumRows())
{
// new version of this item found
// so we need to mark it as the last compiled version
$newActive = $this->db->loadObject();
// set the new version watch
$this->set($newActive, 1);
}
// Get last compiled verion
$query = $this->db->getQuery(true);
$query->select('h.*');
$query->from('#__ucm_history AS h');
$query->where(
$this->db->quoteName('h.ucm_item_id') . ' = ' . (int) $id
);
$query->where('h.keep_forever = 1');
$query->where('h.version_note LIKE ' . $this->db->quote('%component%'));
// make sure it does not return the active version
if (isset($newActive) && isset($newActive->version_id))
{
$query->where('h.version_id != ' . (int) $newActive->version_id);
}
// Join over the content type for the type id
$query->join(
'LEFT', '#__content_types AS ct ON ct.type_id = h.ucm_type_id'
);
$query->where(
'ct.type_alias = ' . $this->db->quote(
'com_componentbuilder.' . $type
)
);
$query->order('h.save_date DESC');
$this->db->setQuery($query);
$this->db->execute();
if ($this->db->getNumRows())
{
// the old active version was found
// so we may need to do an SQL update
// and unmark the old compiled version
$oldActives = $this->db->loadObjectList();
foreach ($oldActives as $oldActive)
{
// remove old version watch
$this->set($oldActive, 0);
}
}
// return the last used history record or null.
return $this->tmp;
}
/**
* Set Item History Watch
*
* @param Object $object The history object
* @param int $action The action to take
* 0 = remove watch
* 1 = add watch
*
* @return bool
* @since 3.2.0
*/
protected function set(object $object, int $action): bool
{
// check the note
if (JsonHelper::check($object->version_note))
{
$version_note = json_decode((string) $object->version_note, true);
}
else
{
$version_note = array('component' => []);
}
// set watch
switch ($action)
{
case 0:
// remove watch
if (isset($version_note['component'])
&& ($key = array_search(
$this->config->component_id, $version_note['component']
)) !== false)
{
// last version that was used to build/compile
$this->tmp = json_decode((string) $object->version_data);
// remove it from this component
unset($version_note['component'][$key]);
}
else
{
// since it was not found, no need to update anything
return true;
}
break;
case 1:
// add watch
if (!in_array($this->config->component_id, $version_note['component']))
{
$version_note['component'][] = $this->config->component_id;
}
else
{
// since it is there already, no need to update anything
return true;
}
break;
}
// check if we need to still keep this locked
if (isset($version_note['component'])
&& ArrayHelper::check($version_note['component']))
{
// insure component ids are only added once per item
$version_note['component'] = array_unique(
$version_note['component']
);
// we may change this, little risky (but since JCB does not have history notes it should be okay for now)
$object->version_note = json_encode($version_note);
$object->keep_forever = '1';
}
else
{
$object->version_note = '';
$object->keep_forever = '0';
}
// run the update
return $this->db->updateObject('#__ucm_history', $object, 'version_id');
}
}

View File

@ -0,0 +1,198 @@
/**
* History Item Object
*
* @var object|null
* @since 3.2.0
*/
protected ?object $tmp;
/**
* Compiler Config
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* Database object to query local DB
*
* @since 3.2.0
*/
protected $db;
/**
* Constructor
*
* @param Config|null $config The compiler config object.
*
* @since 3.2.0
*/
public function __construct(?Config $config = null)
{
$this->config = $config ?: Compiler::_('Config');
$this->db = Factory::getDbo();
}
/**
* Get Item History object
*
* @param string $type The type of item
* @param int $id The item ID
*
* @return ?object The history
* @since 3.2.0
*/
public function get(string $type, int $id): ?object
{
// quick class object to store old history object
$this->tmp = null;
// Create a new query object.
$query = $this->db->getQuery(true);
$query->select('h.*');
$query->from('#__ucm_history AS h');
$query->where(
$this->db->quoteName('h.ucm_item_id') . ' = ' . (int) $id
);
// Join over the content type for the type id
$query->join(
'LEFT', '#__content_types AS ct ON ct.type_id = h.ucm_type_id'
);
$query->where(
'ct.type_alias = ' . $this->db->quote(
'com_componentbuilder.' . $type
)
);
$query->order('h.save_date DESC');
$this->db->setQuery($query, 0, 1);
$this->db->execute();
if ($this->db->getNumRows())
{
// new version of this item found
// so we need to mark it as the last compiled version
$newActive = $this->db->loadObject();
// set the new version watch
$this->set($newActive, 1);
}
// Get last compiled verion
$query = $this->db->getQuery(true);
$query->select('h.*');
$query->from('#__ucm_history AS h');
$query->where(
$this->db->quoteName('h.ucm_item_id') . ' = ' . (int) $id
);
$query->where('h.keep_forever = 1');
$query->where('h.version_note LIKE ' . $this->db->quote('%component%'));
// make sure it does not return the active version
if (isset($newActive) && isset($newActive->version_id))
{
$query->where('h.version_id != ' . (int) $newActive->version_id);
}
// Join over the content type for the type id
$query->join(
'LEFT', '#__content_types AS ct ON ct.type_id = h.ucm_type_id'
);
$query->where(
'ct.type_alias = ' . $this->db->quote(
'com_componentbuilder.' . $type
)
);
$query->order('h.save_date DESC');
$this->db->setQuery($query);
$this->db->execute();
if ($this->db->getNumRows())
{
// the old active version was found
// so we may need to do an SQL update
// and unmark the old compiled version
$oldActives = $this->db->loadObjectList();
foreach ($oldActives as $oldActive)
{
// remove old version watch
$this->set($oldActive, 0);
}
}
// return the last used history record or null.
return $this->tmp;
}
/**
* Set Item History Watch
*
* @param Object $object The history object
* @param int $action The action to take
* 0 = remove watch
* 1 = add watch
*
* @return bool
* @since 3.2.0
*/
protected function set(object $object, int $action): bool
{
// check the note
if (JsonHelper::check($object->version_note))
{
$version_note = json_decode((string) $object->version_note, true);
}
else
{
$version_note = array('component' => []);
}
// set watch
switch ($action)
{
case 0:
// remove watch
if (isset($version_note['component'])
&& ($key = array_search(
$this->config->component_id, $version_note['component']
)) !== false)
{
// last version that was used to build/compile
$this->tmp = json_decode((string) $object->version_data);
// remove it from this component
unset($version_note['component'][$key]);
}
else
{
// since it was not found, no need to update anything
return true;
}
break;
case 1:
// add watch
if (!in_array($this->config->component_id, $version_note['component']))
{
$version_note['component'][] = $this->config->component_id;
}
else
{
// since it is there already, no need to update anything
return true;
}
break;
}
// check if we need to still keep this locked
if (isset($version_note['component'])
&& ArrayHelper::check($version_note['component']))
{
// insure component ids are only added once per item
$version_note['component'] = array_unique(
$version_note['component']
);
// we may change this, little risky (but since JCB does not have history notes it should be okay for now)
$object->version_note = json_encode($version_note);
$object->keep_forever = '1';
}
else
{
$object->version_note = '';
$object->keep_forever = '0';
}
// run the update
return $this->db->updateObject('#__ucm_history', $object, 'version_id');
}

View File

@ -0,0 +1,37 @@
{
"add_head": "1",
"add_licensing_template": "2",
"extends": "0",
"guid": "25c7ca86-6088-4f5f-b9fe-13504779c6ba",
"implements": [
"4325745f-da1f-4d4d-a591-3189fe8c06e5"
],
"load_selection": null,
"name": "History",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.JoomlaFour.History",
"type": "class",
"use_selection": {
"use_selection0": {
"use": "d910d8b8-4c23-4f3e-8cda-438f2d2bd7ac",
"as": "Compiler"
},
"use_selection1": {
"use": "4b225c51-d293-48e4-b3f6-5136cf5c3f18",
"as": "default"
},
"use_selection2": {
"use": "0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a",
"as": "default"
},
"use_selection3": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.JoomlaFour.History",
"description": "Compiler History\r\n\r\n@since 3.2.0",
"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": "use Joomla\\CMS\\Factory;",
"composer": ""
}

View File

@ -0,0 +1,30 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class Contributors (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Builder**
> extends: **Registry**
```uml
@startuml
class Contributors << (F,LightGreen) >> #RoyalBlue {
}
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,27 @@
<?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\Builder;
use VDM\Joomla\Interfaces\Registryinterface;
use VDM\Joomla\Abstraction\Registry;
/**
* Contributors Builder Class
*
* @since 3.2.0
*/
final class Contributors extends Registry implements Registryinterface
{
}

View File

@ -0,0 +1 @@
###CODEPOWER###

View File

@ -0,0 +1,20 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "7e822c03-1b20-41d1-9427-f5b8d5836af7",
"guid": "274a78d1-24c2-4486-b560-b86e9ae72872",
"implements": [
"64e291c2-11f1-423d-a44d-837cc12cc017"
],
"load_selection": null,
"name": "Contributors",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Builder.Contributors",
"type": "final class",
"use_selection": null,
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Builder.Contributors",
"description": "Contributors Builder Class\r\n\r\n@since 3.2.0",
"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,46 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class CanDelete (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Model**
```uml
@startuml
class CanDelete << (F,LightGreen) >> #RoyalBlue {
# String $component
# Permission $permission
+ __construct(Config $config, Permission $permission)
+ get(string $nameSingleCode) : string
}
note right of CanDelete::__construct
Constructor.
since: 3.2.0
end note
note right of CanDelete::get
Get Can Delete Function Code
since: 3.2.0
return: string
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,87 @@
<?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\Model;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model\CanDeleteInterface;
/**
* Model Can Delete Class for Joomla 4
*
* @since 3.2.0
*/
final class CanDelete implements CanDeleteInterface
{
/**
* The Component code name.
*
* @var String
* @since 3.2.0
*/
protected String $component;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Permission $permission The Permission Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Permission $permission)
{
$this->component = $config->component_code_name;
$this->permission = $permission;
}
/**
* Get Can Delete Function Code
*
* @param string $nameSingleCode The single code name of the view.
*
* @since 3.2.0
* @return string The can delete method code
*/
public function get(string $nameSingleCode): string
{
$allow = [];
// setup the default script
$allow[] = PHP_EOL . Indent::_(2) . "if (empty(\$record->id) || (\$record->state != -2))";
$allow[] = Indent::_(2) . "{";
$allow[] = Indent::_(3) . "return false;";
$allow[] = Indent::_(2) . "}" . PHP_EOL;
// check if the item has permissions.
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " The record has been set. Check the record permissions.";
$allow[] = Indent::_(2) . "return \$this->getCurrentUser()->authorise('"
. $this->permission->getAction($nameSingleCode, 'core.delete') . "', 'com_" . $this->component . "."
. $nameSingleCode . ".' . (int) \$record->id);";
return implode(PHP_EOL, $allow);
}
}

View File

@ -0,0 +1,57 @@
/**
* The Component code name.
*
* @var String
* @since 3.2.0
*/
protected String $component;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Permission $permission The Permission Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Permission $permission)
{
$this->component = $config->component_code_name;
$this->permission = $permission;
}
/**
* Get Can Delete Function Code
*
* @param string $nameSingleCode The single code name of the view.
*
* @since 3.2.0
* @return string The can delete method code
*/
public function get(string $nameSingleCode): string
{
$allow = [];
// setup the default script
$allow[] = PHP_EOL . Indent::_(2) . "if (empty(\$record->id) || (\$record->state != -2))";
$allow[] = Indent::_(2) . "{";
$allow[] = Indent::_(3) . "return false;";
$allow[] = Indent::_(2) . "}" . PHP_EOL;
// check if the item has permissions.
$allow[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " The record has been set. Check the record permissions.";
$allow[] = Indent::_(2) . "return \$this->getCurrentUser()->authorise('"
. $this->permission->getAction($nameSingleCode, 'core.delete') . "', 'com_" . $this->component . "."
. $nameSingleCode . ".' . (int) \$record->id);";
return implode(PHP_EOL, $allow);
}

View File

@ -0,0 +1,37 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "2a69a8ab-cea0-4c75-92d5-9495cb740e0f",
"implements": [
"e00a7d1d-6d80-41c5-bf13-32d41bc5bf91"
],
"load_selection": null,
"name": "CanDelete",
"power_version": "1.0.0",
"system_name": "JCB.Architecture.J4.Model.CanDelete",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "7f01622a-74c9-4e67-b111-3eb488035206",
"as": "default"
},
"use_selection2": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
},
"use_selection3": {
"use": "4e6ff11d-bebf-42f5-8fd7-b2f882857222",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Architecture.JoomlaFour.Model.CanDelete",
"description": "Model Can Delete Class for Joomla 4\r\n\r\n@since 3.2.0",
"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,52 @@
```
██████╗ ██████╗ ██╗ ██╗███████╗██████╗
██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔══██╗
██████╔╝██║ ██║██║ █╗ ██║█████╗ ██████╔╝
██╔═══╝ ██║ ██║██║███╗██║██╔══╝ ██╔══██╗
██║ ╚██████╔╝╚███╔███╔╝███████╗██║ ██║
╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚═╝ ╚═╝
```
# final class InputButton (Details)
> namespace: **VDM\Joomla\Componentbuilder\Compiler\Field\JoomlaThree**
```uml
@startuml
class InputButton << (F,LightGreen) >> #RoyalBlue {
# Config $config
# Placeholder $placeholder
# Permission $permission
+ __construct(Config $config, Placeholder $placeholder, ...)
+ get(array $fieldData) : string
}
note right of InputButton::__construct
Constructor.
since: 3.2.0
arguments:
Config $config
Placeholder $placeholder
Permission $permission
end note
note right of InputButton::get
get Add Button To List Field Input (getInput tweak)
since: 3.2.0
return: string
end note
@enduml
```
---
```
██╗ ██████╗██████╗
██║██╔════╝██╔══██╗
██║██║ ██████╔╝
██ ██║██║ ██╔══██╗
╚█████╔╝╚██████╗██████╔╝
╚════╝ ╚═════╝╚═════╝
```
> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)

View File

@ -0,0 +1,339 @@
<?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\Field\JoomlaThree;
use VDM\Joomla\Componentbuilder\Compiler\Config;
use VDM\Joomla\Componentbuilder\Compiler\Placeholder;
use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission;
use VDM\Joomla\Utilities\StringHelper;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent;
use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line;
use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Field\InputButtonInterface;
/**
* Compiler Field Input Button
*
* @since 3.2.0
*/
final class InputButton implements InputButtonInterface
{
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param Permission $permission The Permission Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Placeholder $placeholder,
Permission $permission)
{
$this->config = $config;
$this->placeholder = $placeholder;
$this->permission = $permission;
}
/**
* get Add Button To List Field Input (getInput tweak)
*
* @param array $fieldData The field custom data
*
* @return string of getInput class on success empty string otherwise
* @since 3.2.0
*/
public function get(array $fieldData): string
{
// make sure hte view values are set
if (isset($fieldData['add_button'])
&& ($fieldData['add_button'] === 'true'
|| 1 == $fieldData['add_button'])
&& isset($fieldData['view'])
&& isset($fieldData['views'])
&& StringHelper::check($fieldData['view'])
&& StringHelper::check($fieldData['views']))
{
// set local component
$local_component = "com_" . $this->config->component_code_name;
// check that the component value is set
if (!isset($fieldData['component'])
|| !StringHelper::check(
$fieldData['component']
))
{
$fieldData['component'] = $local_component;
}
// check that the component has the com_ value in it
if (strpos((string) $fieldData['component'], 'com_') === false
|| strpos((string) $fieldData['component'], '=') !== false)
{
$fieldData['component'] = "com_" . $fieldData['component'];
}
// make sure the component is update if # # # or [ [ [ component placeholder is used
if (strpos((string) $fieldData['component'], (string) Placefix::h()) !== false
|| strpos((string) $fieldData['component'], (string) Placefix::b()) !== false) // should not be needed... but
{
$fieldData['component'] = $this->placeholder->update_(
$fieldData['component']
);
}
// get core permissions
$coreLoad = false;
// add ref tags
$refLoad = true;
// fall back on the field component
$component = $fieldData['component'];
// check if we should add ref tags (since it only works well on local views)
if ($local_component !== $component)
{
// do not add ref tags
$refLoad = false;
}
// start building the add buttons/s
$addButton = array();
$addButton[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
$addButton[] = Indent::_(1) . " * Override to add new button";
$addButton[] = Indent::_(1) . " *";
$addButton[] = Indent::_(1)
. " * @return string The field input markup.";
$addButton[] = Indent::_(1) . " *";
$addButton[] = Indent::_(1) . " * @since 3.2";
$addButton[] = Indent::_(1) . " */";
$addButton[] = Indent::_(1) . "protected function getInput()";
$addButton[] = Indent::_(1) . "{";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " see if we should add buttons";
$addButton[] = Indent::_(2)
. "\$set_button = \$this->getAttribute('button');";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get html";
$addButton[] = Indent::_(2) . "\$html = parent::getInput();";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " if true set button";
$addButton[] = Indent::_(2) . "if (\$set_button === 'true')";
$addButton[] = Indent::_(2) . "{";
$addButton[] = Indent::_(3) . "\$button = array();";
$addButton[] = Indent::_(3) . "\$script = array();";
$addButton[] = Indent::_(3)
. "\$button_code_name = \$this->getAttribute('name');";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get the input from url";
$addButton[] = Indent::_(3) . "\$app = Factory::getApplication();";
$addButton[] = Indent::_(3) . "\$jinput = \$app->input;";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get the view name & id";
$addButton[] = Indent::_(3)
. "\$values = \$jinput->getArray(array(";
$addButton[] = Indent::_(4) . "'id' => 'int',";
$addButton[] = Indent::_(4) . "'view' => 'word'";
$addButton[] = Indent::_(3) . "));";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " check if new item";
$addButton[] = Indent::_(3) . "\$ref = '';";
$addButton[] = Indent::_(3) . "\$refJ = '';";
if ($refLoad)
{
$addButton[] = Indent::_(3)
. "if (!is_null(\$values['id']) && strlen(\$values['view']))";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " only load referral if not new item.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;ref=' . \$values['view'] . '&amp;refid=' . \$values['id'];";
$addButton[] = Indent::_(4)
. "\$refJ = '&ref=' . \$values['view'] . '&refid=' . \$values['id'];";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " get the return value.";
$addButton[] = Indent::_(4)
. "\$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();";
$addButton[] = Indent::_(4)
. "\$_return = urlencode(base64_encode(\$_uri));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " load return value.";
$addButton[] = Indent::_(4)
. "\$ref .= '&amp;return=' . \$_return;";
$addButton[] = Indent::_(4)
. "\$refJ .= '&return=' . \$_return;";
$addButton[] = Indent::_(3) . "}";
}
else
{
$addButton[] = Indent::_(3)
. "if (!is_null(\$values['id']) && strlen(\$values['view']))";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " only load field details if not new item.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;field=' . \$values['view'] . '&amp;field_id=' . \$values['id'];";
$addButton[] = Indent::_(4)
. "\$refJ = '&field=' . \$values['view'] . '&field_id=' . \$values['id'];";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " get the return value.";
$addButton[] = Indent::_(4)
. "\$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();";
$addButton[] = Indent::_(4)
. "\$_return = urlencode(base64_encode(\$_uri));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " load return value.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;return=' . \$_return;";
$addButton[] = Indent::_(4)
. "\$refJ = '&return=' . \$_return;";
$addButton[] = Indent::_(3) . "}";
}
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get button label";
$addButton[] = Indent::_(3)
. "\$button_label = trim(\$button_code_name);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace('/_+/', ' ', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace('/\s+/', ' ', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace(\"/[^A-Za-z ]/\", '', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = ucfirst(strtolower(\$button_label));";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get user object";
$addButton[] = Indent::_(3) . "\$user = Factory::getUser();";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " only add if user allowed to create " . $fieldData['view'];
// check if the item has permissions.
$addButton[] = Indent::_(3) . "if (\$user->authorise('"
. $this->permission->getGlobal($fieldData['view'], 'core.create')
. "', '" . $component . "') && \$app->isClient('administrator')) // TODO for now only in admin area.";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build Create button";
$addButton[] = Indent::_(4)
. "\$button[] = '<a id=\"'.\$button_code_name.'Create\" class=\"btn btn-small btn-success hasTooltip\" title=\"'.Text:"
. ":sprintf('" . $this->config->lang_prefix
. "_CREATE_NEW_S', \$button_label).'\" style=\"border-radius: 0px 4px 4px 0px; padding: 4px 4px 4px 7px;\"";
$addButton[] = Indent::_(5) . "href=\"index.php?option="
. $fieldData['component'] . "&amp;view=" . $fieldData['view']
. "&amp;layout=edit'.\$ref.'\" >";
$addButton[] = Indent::_(5)
. "<span class=\"icon-new icon-white\"></span></a>';";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " only add if user allowed to edit " . $fieldData['view'];
// check if the item has permissions.
$addButton[] = Indent::_(3) . "if (\$user->authorise('"
. $this->permission->getGlobal($fieldData['view'], 'core.edit')
. "', '" . $component . "') && \$app->isClient('administrator')) // TODO for now only in admin area.";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build edit button";
$addButton[] = Indent::_(4)
. "\$button[] = '<a id=\"'.\$button_code_name.'Edit\" class=\"btn btn-small hasTooltip\" title=\"'.Text:"
. ":sprintf('" . $this->config->lang_prefix
. "_EDIT_S', \$button_label).'\" style=\"display: none; padding: 4px 4px 4px 7px;\" href=\"#\" >";
$addButton[] = Indent::_(5)
. "<span class=\"icon-edit\"></span></a>';";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build script";
$addButton[] = Indent::_(4) . "\$script[] = \"";
$addButton[] = Indent::_(5) . "jQuery(document).ready(function() {";
$addButton[] = Indent::_(6)
. "jQuery('#adminForm').on('change', '#jform_\".\$button_code_name.\"',function (e) {";
$addButton[] = Indent::_(7) . "e.preventDefault();";
$addButton[] = Indent::_(7)
. "var \".\$button_code_name.\"Value = jQuery('#jform_\".\$button_code_name.\"').val();";
$addButton[] = Indent::_(7)
. "\".\$button_code_name.\"Button(\".\$button_code_name.\"Value);";
$addButton[] = Indent::_(6) . "});";
$addButton[] = Indent::_(6)
. "var \".\$button_code_name.\"Value = jQuery('#jform_\".\$button_code_name.\"').val();";
$addButton[] = Indent::_(6)
. "\".\$button_code_name.\"Button(\".\$button_code_name.\"Value);";
$addButton[] = Indent::_(5) . "});";
$addButton[] = Indent::_(5)
. "function \".\$button_code_name.\"Button(value) {";
$addButton[] = Indent::_(6)
. "if (value > 0) {"; // TODO not ideal since value may not be an (int)
$addButton[] = Indent::_(7) . "// hide the create button";
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Create').hide();";
$addButton[] = Indent::_(7) . "// show edit button";
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Edit').show();";
$addButton[] = Indent::_(7) . "var url = 'index.php?option="
. $fieldData['component'] . "&view=" . $fieldData['views']
. "&task=" . $fieldData['view']
. ".edit&id='+value+'\".\$refJ.\"';"; // TODO this value may not be the ID
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Edit').attr('href', url);";
$addButton[] = Indent::_(6) . "} else {";
$addButton[] = Indent::_(7) . "// show the create button";
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Create').show();";
$addButton[] = Indent::_(7) . "// hide edit button";
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Edit').hide();";
$addButton[] = Indent::_(6) . "}";
$addButton[] = Indent::_(5) . "}\";";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " check if button was created for " . $fieldData['view']
. " field.";
$addButton[] = Indent::_(3)
. "if (is_array(\$button) && count(\$button) > 0)";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " Load the needed script.";
$addButton[] = Indent::_(4)
. "\$document = Factory::getDocument();";
$addButton[] = Indent::_(4)
. "\$document->addScriptDeclaration(implode(' ',\$script));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " return the button attached to input field.";
$addButton[] = Indent::_(4)
. "return '<div class=\"input-append\">' .\$html . implode('',\$button).'</div>';";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(2) . "}";
$addButton[] = Indent::_(2) . "return \$html;";
$addButton[] = Indent::_(1) . "}";
return implode(PHP_EOL, $addButton);
}
return '';
}
}

View File

@ -0,0 +1,306 @@
/**
* The Config Class.
*
* @var Config
* @since 3.2.0
*/
protected Config $config;
/**
* The Placeholder Class.
*
* @var Placeholder
* @since 3.2.0
*/
protected Placeholder $placeholder;
/**
* The Permission Class.
*
* @var Permission
* @since 3.2.0
*/
protected Permission $permission;
/**
* Constructor.
*
* @param Config $config The Config Class.
* @param Placeholder $placeholder The Placeholder Class.
* @param Permission $permission The Permission Class.
*
* @since 3.2.0
*/
public function __construct(Config $config, Placeholder $placeholder,
Permission $permission)
{
$this->config = $config;
$this->placeholder = $placeholder;
$this->permission = $permission;
}
/**
* get Add Button To List Field Input (getInput tweak)
*
* @param array $fieldData The field custom data
*
* @return string of getInput class on success empty string otherwise
* @since 3.2.0
*/
public function get(array $fieldData): string
{
// make sure hte view values are set
if (isset($fieldData['add_button'])
&& ($fieldData['add_button'] === 'true'
|| 1 == $fieldData['add_button'])
&& isset($fieldData['view'])
&& isset($fieldData['views'])
&& StringHelper::check($fieldData['view'])
&& StringHelper::check($fieldData['views']))
{
// set local component
$local_component = "com_" . $this->config->component_code_name;
// check that the component value is set
if (!isset($fieldData['component'])
|| !StringHelper::check(
$fieldData['component']
))
{
$fieldData['component'] = $local_component;
}
// check that the component has the com_ value in it
if (strpos((string) $fieldData['component'], 'com_') === false
|| strpos((string) $fieldData['component'], '=') !== false)
{
$fieldData['component'] = "com_" . $fieldData['component'];
}
// make sure the component is update if # # # or [ [ [ component placeholder is used
if (strpos((string) $fieldData['component'], (string) Placefix::h()) !== false
|| strpos((string) $fieldData['component'], (string) Placefix::b()) !== false) // should not be needed... but
{
$fieldData['component'] = $this->placeholder->update_(
$fieldData['component']
);
}
// get core permissions
$coreLoad = false;
// add ref tags
$refLoad = true;
// fall back on the field component
$component = $fieldData['component'];
// check if we should add ref tags (since it only works well on local views)
if ($local_component !== $component)
{
// do not add ref tags
$refLoad = false;
}
// start building the add buttons/s
$addButton = array();
$addButton[] = PHP_EOL . PHP_EOL . Indent::_(1) . "/**";
$addButton[] = Indent::_(1) . " * Override to add new button";
$addButton[] = Indent::_(1) . " *";
$addButton[] = Indent::_(1)
. " * @return string The field input markup.";
$addButton[] = Indent::_(1) . " *";
$addButton[] = Indent::_(1) . " * @since 3.2";
$addButton[] = Indent::_(1) . " */";
$addButton[] = Indent::_(1) . "protected function getInput()";
$addButton[] = Indent::_(1) . "{";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " see if we should add buttons";
$addButton[] = Indent::_(2)
. "\$set_button = \$this->getAttribute('button');";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " get html";
$addButton[] = Indent::_(2) . "\$html = parent::getInput();";
$addButton[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__)
. " if true set button";
$addButton[] = Indent::_(2) . "if (\$set_button === 'true')";
$addButton[] = Indent::_(2) . "{";
$addButton[] = Indent::_(3) . "\$button = array();";
$addButton[] = Indent::_(3) . "\$script = array();";
$addButton[] = Indent::_(3)
. "\$button_code_name = \$this->getAttribute('name');";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get the input from url";
$addButton[] = Indent::_(3) . "\$app = Factory::getApplication();";
$addButton[] = Indent::_(3) . "\$jinput = \$app->input;";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get the view name & id";
$addButton[] = Indent::_(3)
. "\$values = \$jinput->getArray(array(";
$addButton[] = Indent::_(4) . "'id' => 'int',";
$addButton[] = Indent::_(4) . "'view' => 'word'";
$addButton[] = Indent::_(3) . "));";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " check if new item";
$addButton[] = Indent::_(3) . "\$ref = '';";
$addButton[] = Indent::_(3) . "\$refJ = '';";
if ($refLoad)
{
$addButton[] = Indent::_(3)
. "if (!is_null(\$values['id']) && strlen(\$values['view']))";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " only load referral if not new item.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;ref=' . \$values['view'] . '&amp;refid=' . \$values['id'];";
$addButton[] = Indent::_(4)
. "\$refJ = '&ref=' . \$values['view'] . '&refid=' . \$values['id'];";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " get the return value.";
$addButton[] = Indent::_(4)
. "\$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();";
$addButton[] = Indent::_(4)
. "\$_return = urlencode(base64_encode(\$_uri));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " load return value.";
$addButton[] = Indent::_(4)
. "\$ref .= '&amp;return=' . \$_return;";
$addButton[] = Indent::_(4)
. "\$refJ .= '&return=' . \$_return;";
$addButton[] = Indent::_(3) . "}";
}
else
{
$addButton[] = Indent::_(3)
. "if (!is_null(\$values['id']) && strlen(\$values['view']))";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " only load field details if not new item.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;field=' . \$values['view'] . '&amp;field_id=' . \$values['id'];";
$addButton[] = Indent::_(4)
. "\$refJ = '&field=' . \$values['view'] . '&field_id=' . \$values['id'];";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " get the return value.";
$addButton[] = Indent::_(4)
. "\$_uri = (string) \Joomla\CMS\Uri\Uri::getInstance();";
$addButton[] = Indent::_(4)
. "\$_return = urlencode(base64_encode(\$_uri));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " load return value.";
$addButton[] = Indent::_(4)
. "\$ref = '&amp;return=' . \$_return;";
$addButton[] = Indent::_(4)
. "\$refJ = '&return=' . \$_return;";
$addButton[] = Indent::_(3) . "}";
}
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get button label";
$addButton[] = Indent::_(3)
. "\$button_label = trim(\$button_code_name);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace('/_+/', ' ', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace('/\s+/', ' ', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = preg_replace(\"/[^A-Za-z ]/\", '', \$button_label);";
$addButton[] = Indent::_(3)
. "\$button_label = ucfirst(strtolower(\$button_label));";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " get user object";
$addButton[] = Indent::_(3) . "\$user = Factory::getUser();";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " only add if user allowed to create " . $fieldData['view'];
// check if the item has permissions.
$addButton[] = Indent::_(3) . "if (\$user->authorise('"
. $this->permission->getGlobal($fieldData['view'], 'core.create')
. "', '" . $component . "') && \$app->isClient('administrator')) // TODO for now only in admin area.";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build Create button";
$addButton[] = Indent::_(4)
. "\$button[] = '<a id=\"'.\$button_code_name.'Create\" class=\"btn btn-small btn-success hasTooltip\" title=\"'.Text:"
. ":sprintf('" . $this->config->lang_prefix
. "_CREATE_NEW_S', \$button_label).'\" style=\"border-radius: 0px 4px 4px 0px; padding: 4px 4px 4px 7px;\"";
$addButton[] = Indent::_(5) . "href=\"index.php?option="
. $fieldData['component'] . "&amp;view=" . $fieldData['view']
. "&amp;layout=edit'.\$ref.'\" >";
$addButton[] = Indent::_(5)
. "<span class=\"icon-new icon-white\"></span></a>';";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " only add if user allowed to edit " . $fieldData['view'];
// check if the item has permissions.
$addButton[] = Indent::_(3) . "if (\$user->authorise('"
. $this->permission->getGlobal($fieldData['view'], 'core.edit')
. "', '" . $component . "') && \$app->isClient('administrator')) // TODO for now only in admin area.";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build edit button";
$addButton[] = Indent::_(4)
. "\$button[] = '<a id=\"'.\$button_code_name.'Edit\" class=\"btn btn-small hasTooltip\" title=\"'.Text:"
. ":sprintf('" . $this->config->lang_prefix
. "_EDIT_S', \$button_label).'\" style=\"display: none; padding: 4px 4px 4px 7px;\" href=\"#\" >";
$addButton[] = Indent::_(5)
. "<span class=\"icon-edit\"></span></a>';";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " build script";
$addButton[] = Indent::_(4) . "\$script[] = \"";
$addButton[] = Indent::_(5) . "jQuery(document).ready(function() {";
$addButton[] = Indent::_(6)
. "jQuery('#adminForm').on('change', '#jform_\".\$button_code_name.\"',function (e) {";
$addButton[] = Indent::_(7) . "e.preventDefault();";
$addButton[] = Indent::_(7)
. "var \".\$button_code_name.\"Value = jQuery('#jform_\".\$button_code_name.\"').val();";
$addButton[] = Indent::_(7)
. "\".\$button_code_name.\"Button(\".\$button_code_name.\"Value);";
$addButton[] = Indent::_(6) . "});";
$addButton[] = Indent::_(6)
. "var \".\$button_code_name.\"Value = jQuery('#jform_\".\$button_code_name.\"').val();";
$addButton[] = Indent::_(6)
. "\".\$button_code_name.\"Button(\".\$button_code_name.\"Value);";
$addButton[] = Indent::_(5) . "});";
$addButton[] = Indent::_(5)
. "function \".\$button_code_name.\"Button(value) {";
$addButton[] = Indent::_(6)
. "if (value > 0) {"; // TODO not ideal since value may not be an (int)
$addButton[] = Indent::_(7) . "// hide the create button";
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Create').hide();";
$addButton[] = Indent::_(7) . "// show edit button";
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Edit').show();";
$addButton[] = Indent::_(7) . "var url = 'index.php?option="
. $fieldData['component'] . "&view=" . $fieldData['views']
. "&task=" . $fieldData['view']
. ".edit&id='+value+'\".\$refJ.\"';"; // TODO this value may not be the ID
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Edit').attr('href', url);";
$addButton[] = Indent::_(6) . "} else {";
$addButton[] = Indent::_(7) . "// show the create button";
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Create').show();";
$addButton[] = Indent::_(7) . "// hide edit button";
$addButton[] = Indent::_(7)
. "jQuery('#\".\$button_code_name.\"Edit').hide();";
$addButton[] = Indent::_(6) . "}";
$addButton[] = Indent::_(5) . "}\";";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(3) . "//" . Line::_(__Line__, __Class__)
. " check if button was created for " . $fieldData['view']
. " field.";
$addButton[] = Indent::_(3)
. "if (is_array(\$button) && count(\$button) > 0)";
$addButton[] = Indent::_(3) . "{";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " Load the needed script.";
$addButton[] = Indent::_(4)
. "\$document = Factory::getDocument();";
$addButton[] = Indent::_(4)
. "\$document->addScriptDeclaration(implode(' ',\$script));";
$addButton[] = Indent::_(4) . "//" . Line::_(__Line__, __Class__)
. " return the button attached to input field.";
$addButton[] = Indent::_(4)
. "return '<div class=\"input-append\">' .\$html . implode('',\$button).'</div>';";
$addButton[] = Indent::_(3) . "}";
$addButton[] = Indent::_(2) . "}";
$addButton[] = Indent::_(2) . "return \$html;";
$addButton[] = Indent::_(1) . "}";
return implode(PHP_EOL, $addButton);
}
return '';
}

View File

@ -0,0 +1,49 @@
{
"add_head": "0",
"add_licensing_template": "2",
"extends": "0",
"guid": "2bc33733-e900-4a9c-8cb3-c537aa9db785",
"implements": [
"c600f58c-3fe2-4d2d-b711-2660eab6effe"
],
"load_selection": null,
"name": "InputButton",
"power_version": "1.0.0",
"system_name": "JCB.Compiler.Field.J3.InputButton",
"type": "final class",
"use_selection": {
"use_selection0": {
"use": "fa4bf18e-301e-42e3-91fb-6e0096c07adc",
"as": "default"
},
"use_selection1": {
"use": "06453ada-e370-49f0-b262-e3f5a8ed0c2c",
"as": "default"
},
"use_selection2": {
"use": "7f01622a-74c9-4e67-b111-3eb488035206",
"as": "default"
},
"use_selection3": {
"use": "1f28cb53-60d9-4db1-b517-3c7dc6b429ef",
"as": "default"
},
"use_selection4": {
"use": "500f3a7f-c16d-4dd4-81b2-2df6776b5388",
"as": "default"
},
"use_selection5": {
"use": "a68c010b-e92e-47d5-8a44-d23cfddeb6c6",
"as": "default"
},
"use_selection6": {
"use": "4e6ff11d-bebf-42f5-8fd7-b2f882857222",
"as": "default"
}
},
"namespace": "VDM\\Joomla\\Componentbuilder.Compiler.Field.JoomlaThree.InputButton",
"description": "Compiler Field Input Button\r\n\r\n@since 3.2.0",
"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

@ -14,6 +14,7 @@ class Builder #Gold {
+ register(Container $container) : void
+ getAccessSwitch(Container $container) : AccessSwitch
+ getAccessSwitchList(Container $container) : AccessSwitchList
+ getAssetsRules(Container $container) : AssetsRules
+ getAdminFilterType(Container $container) : AdminFilterType
+ getAlias(Container $container) : Alias
+ getBaseSixFour(Container $container) : BaseSixFour
@ -22,8 +23,11 @@ class Builder #Gold {
+ getCategoryOtherName(Container $container) : CategoryOtherName
+ getCheckBox(Container $container) : CheckBox
+ getComponentFields(Container $container) : ComponentFields
+ getConfigFieldsets(Container $container) : ConfigFieldsets
+ getConfigFieldsetsCustomfield(Container $container) : ConfigFieldsetsCustomfield
+ getContentMulti(Container $container) : ContentMulti
+ getContentOne(Container $container) : ContentOne
+ getContributors(Container $container) : Contributors
+ getCustomAlias(Container $container) : CustomAlias
+ getCustomField(Container $container) : CustomField
+ getCustomFieldLinks(Container $container) : CustomFieldLinks
@ -36,14 +40,17 @@ class Builder #Gold {
+ getDoNotEscape(Container $container) : DoNotEscape
+ getDynamicFields(Container $container) : DynamicFields
+ getExtensionCustomFields(Container $container) : ExtensionCustomFields
+ getExtensionsParams(Container $container) : ExtensionsParams
+ getFieldGroupControl(Container $container) : FieldGroupControl
+ getFieldNames(Container $container) : FieldNames
+ getFieldRelations(Container $container) : FieldRelations
+ getFilter(Container $container) : Filter
+ getFootableScripts(Container $container) : FootableScripts
+ getFrontendParams(Container $container) : FrontendParams
+ getGetAsLookup(Container $container) : GetAsLookup
+ getGetModule(Container $container) : GetModule
+ getGoogleChart(Container $container) : GoogleChart
+ getHasMenuGlobal(Container $container) : HasMenuGlobal
+ getHasPermissions(Container $container) : HasPermissions
+ getHiddenFields(Container $container) : HiddenFields
+ getHistory(Container $container) : History
@ -53,6 +60,7 @@ class Builder #Gold {
+ getJsonItem(Container $container) : JsonItem
+ getJsonItemArray(Container $container) : JsonItemArray
+ getJsonString(Container $container) : JsonString
+ getLanguageMessages(Container $container) : LanguageMessages
+ getLayout(Container $container) : Layout
+ getLayoutData(Container $container) : LayoutData
+ getLibraryManager(Container $container) : LibraryManager
@ -81,8 +89,10 @@ class Builder #Gold {
+ getPermissionComponent(Container $container) : PermissionComponent
+ getPermissionCore(Container $container) : PermissionCore
+ getPermissionDashboard(Container $container) : PermissionDashboard
+ getPermissionFields(Container $container) : PermissionFields
+ getPermissionGlobalAction(Container $container) : PermissionGlobalAction
+ getPermissionViews(Container $container) : PermissionViews
+ getRequest(Container $container) : Request
+ getScriptMediaSwitch(Container $container) : ScriptMediaSwitch
+ getScriptUserSwitch(Container $container) : ScriptUserSwitch
+ getSearch(Container $container) : Search
@ -101,6 +111,7 @@ class Builder #Gold {
+ getTitle(Container $container) : Title
+ getUikitComp(Container $container) : UikitComp
+ getUpdateMysql(Container $container) : UpdateMysql
+ getViewsDefaultOrdering(Container $container) : ViewsDefaultOrdering
}
note right of Builder::register
@ -124,76 +135,104 @@ note right of Builder::getAccessSwitchList
return: AccessSwitchList
end note
note left of Builder::getAdminFilterType
note left of Builder::getAssetsRules
Get The AssetsRules Class.
since: 3.2.0
return: AssetsRules
end note
note right of Builder::getAdminFilterType
Get The AdminFilterType Class.
since: 3.2.0
return: AdminFilterType
end note
note right of Builder::getAlias
note left of Builder::getAlias
Get The Alias Class.
since: 3.2.0
return: Alias
end note
note left of Builder::getBaseSixFour
note right of Builder::getBaseSixFour
Get The BaseSixFour Class.
since: 3.2.0
return: BaseSixFour
end note
note right of Builder::getCategory
note left of Builder::getCategory
Get The Category Class.
since: 3.2.0
return: Category
end note
note left of Builder::getCategoryCode
note right of Builder::getCategoryCode
Get The CategoryCode Class.
since: 3.2.0
return: CategoryCode
end note
note right of Builder::getCategoryOtherName
note left of Builder::getCategoryOtherName
Get The CategoryOtherName Class.
since: 3.2.0
return: CategoryOtherName
end note
note left of Builder::getCheckBox
note right of Builder::getCheckBox
Get The CheckBox Class.
since: 3.2.0
return: CheckBox
end note
note right of Builder::getComponentFields
note left of Builder::getComponentFields
Get The ComponentFields Class.
since: 3.2.0
return: ComponentFields
end note
note left of Builder::getContentMulti
note right of Builder::getConfigFieldsets
Get The ConfigFieldsets Class.
since: 3.2.0
return: ConfigFieldsets
end note
note left of Builder::getConfigFieldsetsCustomfield
Get The ConfigFieldsetsCustomfield Class.
since: 3.2.0
return: ConfigFieldsetsCustomfield
end note
note right of Builder::getContentMulti
Get The ContentMulti Class.
since: 3.2.0
return: ContentMulti
end note
note right of Builder::getContentOne
note left of Builder::getContentOne
Get The ContentOne Class.
since: 3.2.0
return: ContentOne
end note
note right of Builder::getContributors
Get The Contributors Class.
since: 3.2.0
return: Contributors
end note
note left of Builder::getCustomAlias
Get The CustomAlias Class.
@ -278,41 +317,55 @@ note right of Builder::getExtensionCustomFields
return: ExtensionCustomFields
end note
note left of Builder::getFieldGroupControl
note left of Builder::getExtensionsParams
Get The ExtensionsParams Class.
since: 3.2.0
return: ExtensionsParams
end note
note right of Builder::getFieldGroupControl
Get The FieldGroupControl Class.
since: 3.2.0
return: FieldGroupControl
end note
note right of Builder::getFieldNames
note left of Builder::getFieldNames
Get The FieldNames Class.
since: 3.2.0
return: FieldNames
end note
note left of Builder::getFieldRelations
note right of Builder::getFieldRelations
Get The FieldRelations Class.
since: 3.2.0
return: FieldRelations
end note
note right of Builder::getFilter
note left of Builder::getFilter
Get The Filter Class.
since: 3.2.0
return: Filter
end note
note left of Builder::getFootableScripts
note right of Builder::getFootableScripts
Get The FootableScripts Class.
since: 3.2.0
return: FootableScripts
end note
note left of Builder::getFrontendParams
Get The FrontendParams Class.
since: 3.2.0
return: FrontendParams
end note
note right of Builder::getGetAsLookup
Get The GetAsLookup Class.
@ -334,69 +387,83 @@ note right of Builder::getGoogleChart
return: GoogleChart
end note
note left of Builder::getHasPermissions
note left of Builder::getHasMenuGlobal
Get The HasMenuGlobal Class.
since: 3.2.0
return: HasMenuGlobal
end note
note right of Builder::getHasPermissions
Get The HasPermissions Class.
since: 3.2.0
return: HasPermissions
end note
note right of Builder::getHiddenFields
note left of Builder::getHiddenFields
Get The HiddenFields Class.
since: 3.2.0
return: HiddenFields
end note
note left of Builder::getHistory
note right of Builder::getHistory
Get The History Class.
since: 3.2.0
return: History
end note
note right of Builder::getIntegerFields
note left of Builder::getIntegerFields
Get The IntegerFields Class.
since: 3.2.0
return: IntegerFields
end note
note left of Builder::getItemsMethodEximportString
note right of Builder::getItemsMethodEximportString
Get The ItemsMethodEximportString Class.
since: 3.2.0
return: ItemsMethodEximportString
end note
note right of Builder::getItemsMethodListString
note left of Builder::getItemsMethodListString
Get The ItemsMethodListString Class.
since: 3.2.0
return: ItemsMethodListString
end note
note left of Builder::getJsonItem
note right of Builder::getJsonItem
Get The JsonItem Class.
since: 3.2.0
return: JsonItem
end note
note right of Builder::getJsonItemArray
note left of Builder::getJsonItemArray
Get The JsonItemArray Class.
since: 3.2.0
return: JsonItemArray
end note
note left of Builder::getJsonString
note right of Builder::getJsonString
Get The JsonString Class.
since: 3.2.0
return: JsonString
end note
note left of Builder::getLanguageMessages
Get The LanguageMessages Class.
since: 3.2.0
return: LanguageMessages
end note
note right of Builder::getLayout
Get The Layout Class.
@ -593,20 +660,34 @@ note left of Builder::getPermissionDashboard
return: PermissionDashboard
end note
note right of Builder::getPermissionGlobalAction
note right of Builder::getPermissionFields
Get The PermissionFields Class.
since: 3.2.0
return: PermissionFields
end note
note left of Builder::getPermissionGlobalAction
Get The PermissionGlobalAction Class.
since: 3.2.0
return: PermissionGlobalAction
end note
note left of Builder::getPermissionViews
note right of Builder::getPermissionViews
Get The PermissionViews Class.
since: 3.2.0
return: PermissionViews
end note
note left of Builder::getRequest
Get The Request Class.
since: 3.2.0
return: Request
end note
note right of Builder::getScriptMediaSwitch
Get The ScriptMediaSwitch Class.
@ -733,6 +814,13 @@ note left of Builder::getUpdateMysql
return: UpdateMysql
end note
note right of Builder::getViewsDefaultOrdering
Get The ViewsDefaultOrdering Class.
since: 3.2.0
return: ViewsDefaultOrdering
end note
@enduml
```

View File

@ -16,6 +16,7 @@ use Joomla\DI\Container;
use Joomla\DI\ServiceProviderInterface;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AccessSwitch;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AccessSwitchList;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AssetsRules;
use VDM\Joomla\Componentbuilder\Compiler\Builder\AdminFilterType;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Alias;
use VDM\Joomla\Componentbuilder\Compiler\Builder\BaseSixFour;
@ -24,8 +25,11 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\CategoryCode;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CategoryOtherName;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CheckBox;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ComponentFields;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ConfigFieldsets;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ConfigFieldsetsCustomfield;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Contributors;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CustomAlias;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CustomField;
use VDM\Joomla\Componentbuilder\Compiler\Builder\CustomFieldLinks;
@ -38,14 +42,17 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\DatabaseUniqueKeys;
use VDM\Joomla\Componentbuilder\Compiler\Builder\DoNotEscape;
use VDM\Joomla\Componentbuilder\Compiler\Builder\DynamicFields;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ExtensionCustomFields;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ExtensionsParams;
use VDM\Joomla\Componentbuilder\Compiler\Builder\FieldGroupControl;
use VDM\Joomla\Componentbuilder\Compiler\Builder\FieldNames;
use VDM\Joomla\Componentbuilder\Compiler\Builder\FieldRelations;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Filter;
use VDM\Joomla\Componentbuilder\Compiler\Builder\FootableScripts;
use VDM\Joomla\Componentbuilder\Compiler\Builder\FrontendParams;
use VDM\Joomla\Componentbuilder\Compiler\Builder\GetAsLookup;
use VDM\Joomla\Componentbuilder\Compiler\Builder\GetModule;
use VDM\Joomla\Componentbuilder\Compiler\Builder\GoogleChart;
use VDM\Joomla\Componentbuilder\Compiler\Builder\HasMenuGlobal;
use VDM\Joomla\Componentbuilder\Compiler\Builder\HasPermissions;
use VDM\Joomla\Componentbuilder\Compiler\Builder\HiddenFields;
use VDM\Joomla\Componentbuilder\Compiler\Builder\History;
@ -55,6 +62,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\ItemsMethodListString;
use VDM\Joomla\Componentbuilder\Compiler\Builder\JsonItem;
use VDM\Joomla\Componentbuilder\Compiler\Builder\JsonItemArray;
use VDM\Joomla\Componentbuilder\Compiler\Builder\JsonString;
use VDM\Joomla\Componentbuilder\Compiler\Builder\LanguageMessages;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Layout;
use VDM\Joomla\Componentbuilder\Compiler\Builder\LayoutData;
use VDM\Joomla\Componentbuilder\Compiler\Builder\LibraryManager;
@ -83,8 +91,10 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionAction;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionComponent;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionCore;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionDashboard;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionFields;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionGlobalAction;
use VDM\Joomla\Componentbuilder\Compiler\Builder\PermissionViews;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Request;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ScriptMediaSwitch;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ScriptUserSwitch;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Search;
@ -103,6 +113,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\TemplateData;
use VDM\Joomla\Componentbuilder\Compiler\Builder\Title;
use VDM\Joomla\Componentbuilder\Compiler\Builder\UikitComp;
use VDM\Joomla\Componentbuilder\Compiler\Builder\UpdateMysql;
use VDM\Joomla\Componentbuilder\Compiler\Builder\ViewsDefaultOrdering;
/**
@ -128,6 +139,9 @@ class Builder implements ServiceProviderInterface
$container->alias(AccessSwitchList::class, 'Compiler.Builder.Access.Switch.List')
->share('Compiler.Builder.Access.Switch.List', [$this, 'getAccessSwitchList'], true);
$container->alias(AssetsRules::class, 'Compiler.Builder.Assets.Rules')
->share('Compiler.Builder.Assets.Rules', [$this, 'getAssetsRules'], true);
$container->alias(AdminFilterType::class, 'Compiler.Builder.Admin.Filter.Type')
->share('Compiler.Builder.Admin.Filter.Type', [$this, 'getAdminFilterType'], true);
@ -152,12 +166,21 @@ class Builder implements ServiceProviderInterface
$container->alias(ComponentFields::class, 'Compiler.Builder.Component.Fields')
->share('Compiler.Builder.Component.Fields', [$this, 'getComponentFields'], true);
$container->alias(ConfigFieldsets::class, 'Compiler.Builder.Config.Fieldsets')
->share('Compiler.Builder.Config.Fieldsets', [$this, 'getConfigFieldsets'], true);
$container->alias(ConfigFieldsetsCustomfield::class, 'Compiler.Builder.Config.Fieldsets.Customfield')
->share('Compiler.Builder.Config.Fieldsets.Customfield', [$this, 'getConfigFieldsetsCustomfield'], true);
$container->alias(ContentMulti::class, 'Compiler.Builder.Content.Multi')
->share('Compiler.Builder.Content.Multi', [$this, 'getContentMulti'], true);
$container->alias(ContentOne::class, 'Compiler.Builder.Content.One')
->share('Compiler.Builder.Content.One', [$this, 'getContentOne'], true);
$container->alias(Contributors::class, 'Compiler.Builder.Contributors')
->share('Compiler.Builder.Contributors', [$this, 'getContributors'], true);
$container->alias(CustomAlias::class, 'Compiler.Builder.Custom.Alias')
->share('Compiler.Builder.Custom.Alias', [$this, 'getCustomAlias'], true);
@ -194,6 +217,9 @@ class Builder implements ServiceProviderInterface
$container->alias(ExtensionCustomFields::class, 'Compiler.Builder.Extension.Custom.Fields')
->share('Compiler.Builder.Extension.Custom.Fields', [$this, 'getExtensionCustomFields'], true);
$container->alias(ExtensionsParams::class, 'Compiler.Builder.Extensions.Params')
->share('Compiler.Builder.Extensions.Params', [$this, 'getExtensionsParams'], true);
$container->alias(FieldGroupControl::class, 'Compiler.Builder.Field.Group.Control')
->share('Compiler.Builder.Field.Group.Control', [$this, 'getFieldGroupControl'], true);
@ -209,6 +235,9 @@ class Builder implements ServiceProviderInterface
$container->alias(FootableScripts::class, 'Compiler.Builder.Footable.Scripts')
->share('Compiler.Builder.Footable.Scripts', [$this, 'getFootableScripts'], true);
$container->alias(FrontendParams::class, 'Compiler.Builder.Frontend.Params')
->share('Compiler.Builder.Frontend.Params', [$this, 'getFrontendParams'], true);
$container->alias(GetAsLookup::class, 'Compiler.Builder.Get.As.Lookup')
->share('Compiler.Builder.Get.As.Lookup', [$this, 'getGetAsLookup'], true);
@ -218,6 +247,9 @@ class Builder implements ServiceProviderInterface
$container->alias(GoogleChart::class, 'Compiler.Builder.Google.Chart')
->share('Compiler.Builder.Google.Chart', [$this, 'getGoogleChart'], true);
$container->alias(HasMenuGlobal::class, 'Compiler.Builder.Has.Menu.Global')
->share('Compiler.Builder.Has.Menu.Global', [$this, 'getHasMenuGlobal'], true);
$container->alias(HasPermissions::class, 'Compiler.Builder.Has.Permissions')
->share('Compiler.Builder.Has.Permissions', [$this, 'getHasPermissions'], true);
@ -245,6 +277,9 @@ class Builder implements ServiceProviderInterface
$container->alias(JsonString::class, 'Compiler.Builder.Json.String')
->share('Compiler.Builder.Json.String', [$this, 'getJsonString'], true);
$container->alias(LanguageMessages::class, 'Compiler.Builder.Language.Messages')
->share('Compiler.Builder.Language.Messages', [$this, 'getLanguageMessages'], true);
$container->alias(Layout::class, 'Compiler.Builder.Layout')
->share('Compiler.Builder.Layout', [$this, 'getLayout'], true);
@ -329,12 +364,18 @@ class Builder implements ServiceProviderInterface
$container->alias(PermissionDashboard::class, 'Compiler.Builder.Permission.Dashboard')
->share('Compiler.Builder.Permission.Dashboard', [$this, 'getPermissionDashboard'], true);
$container->alias(PermissionFields::class, 'Compiler.Builder.Permission.Fields')
->share('Compiler.Builder.Permission.Fields', [$this, 'getPermissionFields'], true);
$container->alias(PermissionGlobalAction::class, 'Compiler.Builder.Permission.Global.Action')
->share('Compiler.Builder.Permission.Global.Action', [$this, 'getPermissionGlobalAction'], true);
$container->alias(PermissionViews::class, 'Compiler.Builder.Permission.Views')
->share('Compiler.Builder.Permission.Views', [$this, 'getPermissionViews'], true);
$container->alias(Request::class, 'Compiler.Builder.Request')
->share('Compiler.Builder.Request', [$this, 'getRequest'], true);
$container->alias(ScriptMediaSwitch::class, 'Compiler.Builder.Script.Media.Switch')
->share('Compiler.Builder.Script.Media.Switch', [$this, 'getScriptMediaSwitch'], true);
@ -388,6 +429,9 @@ class Builder implements ServiceProviderInterface
$container->alias(UpdateMysql::class, 'Compiler.Builder.Update.Mysql')
->share('Compiler.Builder.Update.Mysql', [$this, 'getUpdateMysql'], true);
$container->alias(ViewsDefaultOrdering::class, 'Compiler.Builder.Views.Default.Ordering')
->share('Compiler.Builder.Views.Default.Ordering', [$this, 'getViewsDefaultOrdering'], true);
}
/**
@ -416,6 +460,19 @@ class Builder implements ServiceProviderInterface
return new AccessSwitchList();
}
/**
* Get The AssetsRules Class.
*
* @param Container $container The DI container.
*
* @return AssetsRules
* @since 3.2.0
*/
public function getAssetsRules(Container $container): AssetsRules
{
return new AssetsRules();
}
/**
* Get The AdminFilterType Class.
*
@ -520,6 +577,32 @@ class Builder implements ServiceProviderInterface
return new ComponentFields();
}
/**
* Get The ConfigFieldsets Class.
*
* @param Container $container The DI container.
*
* @return ConfigFieldsets
* @since 3.2.0
*/
public function getConfigFieldsets(Container $container): ConfigFieldsets
{
return new ConfigFieldsets();
}
/**
* Get The ConfigFieldsetsCustomfield Class.
*
* @param Container $container The DI container.
*
* @return ConfigFieldsetsCustomfield
* @since 3.2.0
*/
public function getConfigFieldsetsCustomfield(Container $container): ConfigFieldsetsCustomfield
{
return new ConfigFieldsetsCustomfield();
}
/**
* Get The ContentMulti Class.
*
@ -546,6 +629,19 @@ class Builder implements ServiceProviderInterface
return new ContentOne();
}
/**
* Get The Contributors Class.
*
* @param Container $container The DI container.
*
* @return Contributors
* @since 3.2.0
*/
public function getContributors(Container $container): Contributors
{
return new Contributors();
}
/**
* Get The CustomAlias Class.
*
@ -702,6 +798,19 @@ class Builder implements ServiceProviderInterface
return new ExtensionCustomFields();
}
/**
* Get The ExtensionsParams Class.
*
* @param Container $container The DI container.
*
* @return ExtensionsParams
* @since 3.2.0
*/
public function getExtensionsParams(Container $container): ExtensionsParams
{
return new ExtensionsParams();
}
/**
* Get The FieldGroupControl Class.
*
@ -767,6 +876,19 @@ class Builder implements ServiceProviderInterface
return new FootableScripts();
}
/**
* Get The FrontendParams Class.
*
* @param Container $container The DI container.
*
* @return FrontendParams
* @since 3.2.0
*/
public function getFrontendParams(Container $container): FrontendParams
{
return new FrontendParams();
}
/**
* Get The GetAsLookup Class.
*
@ -806,6 +928,19 @@ class Builder implements ServiceProviderInterface
return new GoogleChart();
}
/**
* Get The HasMenuGlobal Class.
*
* @param Container $container The DI container.
*
* @return HasMenuGlobal
* @since 3.2.0
*/
public function getHasMenuGlobal(Container $container): HasMenuGlobal
{
return new HasMenuGlobal();
}
/**
* Get The HasPermissions Class.
*
@ -923,6 +1058,19 @@ class Builder implements ServiceProviderInterface
return new JsonString();
}
/**
* Get The LanguageMessages Class.
*
* @param Container $container The DI container.
*
* @return LanguageMessages
* @since 3.2.0
*/
public function getLanguageMessages(Container $container): LanguageMessages
{
return new LanguageMessages();
}
/**
* Get The Layout Class.
*
@ -1287,6 +1435,19 @@ class Builder implements ServiceProviderInterface
return new PermissionDashboard();
}
/**
* Get The PermissionFields Class.
*
* @param Container $container The DI container.
*
* @return PermissionFields
* @since 3.2.0
*/
public function getPermissionFields(Container $container): PermissionFields
{
return new PermissionFields();
}
/**
* Get The PermissionGlobalAction Class.
*
@ -1313,6 +1474,19 @@ class Builder implements ServiceProviderInterface
return new PermissionViews();
}
/**
* Get The Request Class.
*
* @param Container $container The DI container.
*
* @return Request
* @since 3.2.0
*/
public function getRequest(Container $container): Request
{
return new Request();
}
/**
* Get The ScriptMediaSwitch Class.
*
@ -1546,5 +1720,18 @@ class Builder implements ServiceProviderInterface
{
return new UpdateMysql();
}
/**
* Get The ViewsDefaultOrdering Class.
*
* @param Container $container The DI container.
*
* @return ViewsDefaultOrdering
* @since 3.2.0
*/
public function getViewsDefaultOrdering(Container $container): ViewsDefaultOrdering
{
return new ViewsDefaultOrdering();
}
}

View File

@ -14,6 +14,9 @@
$container->alias(AccessSwitchList::class, 'Compiler.Builder.Access.Switch.List')
->share('Compiler.Builder.Access.Switch.List', [$this, 'getAccessSwitchList'], true);
$container->alias(AssetsRules::class, 'Compiler.Builder.Assets.Rules')
->share('Compiler.Builder.Assets.Rules', [$this, 'getAssetsRules'], true);
$container->alias(AdminFilterType::class, 'Compiler.Builder.Admin.Filter.Type')
->share('Compiler.Builder.Admin.Filter.Type', [$this, 'getAdminFilterType'], true);
@ -38,12 +41,21 @@
$container->alias(ComponentFields::class, 'Compiler.Builder.Component.Fields')
->share('Compiler.Builder.Component.Fields', [$this, 'getComponentFields'], true);
$container->alias(ConfigFieldsets::class, 'Compiler.Builder.Config.Fieldsets')
->share('Compiler.Builder.Config.Fieldsets', [$this, 'getConfigFieldsets'], true);
$container->alias(ConfigFieldsetsCustomfield::class, 'Compiler.Builder.Config.Fieldsets.Customfield')
->share('Compiler.Builder.Config.Fieldsets.Customfield', [$this, 'getConfigFieldsetsCustomfield'], true);
$container->alias(ContentMulti::class, 'Compiler.Builder.Content.Multi')
->share('Compiler.Builder.Content.Multi', [$this, 'getContentMulti'], true);
$container->alias(ContentOne::class, 'Compiler.Builder.Content.One')
->share('Compiler.Builder.Content.One', [$this, 'getContentOne'], true);
$container->alias(Contributors::class, 'Compiler.Builder.Contributors')
->share('Compiler.Builder.Contributors', [$this, 'getContributors'], true);
$container->alias(CustomAlias::class, 'Compiler.Builder.Custom.Alias')
->share('Compiler.Builder.Custom.Alias', [$this, 'getCustomAlias'], true);
@ -80,6 +92,9 @@
$container->alias(ExtensionCustomFields::class, 'Compiler.Builder.Extension.Custom.Fields')
->share('Compiler.Builder.Extension.Custom.Fields', [$this, 'getExtensionCustomFields'], true);
$container->alias(ExtensionsParams::class, 'Compiler.Builder.Extensions.Params')
->share('Compiler.Builder.Extensions.Params', [$this, 'getExtensionsParams'], true);
$container->alias(FieldGroupControl::class, 'Compiler.Builder.Field.Group.Control')
->share('Compiler.Builder.Field.Group.Control', [$this, 'getFieldGroupControl'], true);
@ -95,6 +110,9 @@
$container->alias(FootableScripts::class, 'Compiler.Builder.Footable.Scripts')
->share('Compiler.Builder.Footable.Scripts', [$this, 'getFootableScripts'], true);
$container->alias(FrontendParams::class, 'Compiler.Builder.Frontend.Params')
->share('Compiler.Builder.Frontend.Params', [$this, 'getFrontendParams'], true);
$container->alias(GetAsLookup::class, 'Compiler.Builder.Get.As.Lookup')
->share('Compiler.Builder.Get.As.Lookup', [$this, 'getGetAsLookup'], true);
@ -104,6 +122,9 @@
$container->alias(GoogleChart::class, 'Compiler.Builder.Google.Chart')
->share('Compiler.Builder.Google.Chart', [$this, 'getGoogleChart'], true);
$container->alias(HasMenuGlobal::class, 'Compiler.Builder.Has.Menu.Global')
->share('Compiler.Builder.Has.Menu.Global', [$this, 'getHasMenuGlobal'], true);
$container->alias(HasPermissions::class, 'Compiler.Builder.Has.Permissions')
->share('Compiler.Builder.Has.Permissions', [$this, 'getHasPermissions'], true);
@ -131,6 +152,9 @@
$container->alias(JsonString::class, 'Compiler.Builder.Json.String')
->share('Compiler.Builder.Json.String', [$this, 'getJsonString'], true);
$container->alias(LanguageMessages::class, 'Compiler.Builder.Language.Messages')
->share('Compiler.Builder.Language.Messages', [$this, 'getLanguageMessages'], true);
$container->alias(Layout::class, 'Compiler.Builder.Layout')
->share('Compiler.Builder.Layout', [$this, 'getLayout'], true);
@ -215,12 +239,18 @@
$container->alias(PermissionDashboard::class, 'Compiler.Builder.Permission.Dashboard')
->share('Compiler.Builder.Permission.Dashboard', [$this, 'getPermissionDashboard'], true);
$container->alias(PermissionFields::class, 'Compiler.Builder.Permission.Fields')
->share('Compiler.Builder.Permission.Fields', [$this, 'getPermissionFields'], true);
$container->alias(PermissionGlobalAction::class, 'Compiler.Builder.Permission.Global.Action')
->share('Compiler.Builder.Permission.Global.Action', [$this, 'getPermissionGlobalAction'], true);
$container->alias(PermissionViews::class, 'Compiler.Builder.Permission.Views')
->share('Compiler.Builder.Permission.Views', [$this, 'getPermissionViews'], true);
$container->alias(Request::class, 'Compiler.Builder.Request')
->share('Compiler.Builder.Request', [$this, 'getRequest'], true);
$container->alias(ScriptMediaSwitch::class, 'Compiler.Builder.Script.Media.Switch')
->share('Compiler.Builder.Script.Media.Switch', [$this, 'getScriptMediaSwitch'], true);
@ -274,6 +304,9 @@
$container->alias(UpdateMysql::class, 'Compiler.Builder.Update.Mysql')
->share('Compiler.Builder.Update.Mysql', [$this, 'getUpdateMysql'], true);
$container->alias(ViewsDefaultOrdering::class, 'Compiler.Builder.Views.Default.Ordering')
->share('Compiler.Builder.Views.Default.Ordering', [$this, 'getViewsDefaultOrdering'], true);
}
/**
@ -302,6 +335,19 @@
return new AccessSwitchList();
}
/**
* Get The AssetsRules Class.
*
* @param Container $container The DI container.
*
* @return AssetsRules
* @since 3.2.0
*/
public function getAssetsRules(Container $container): AssetsRules
{
return new AssetsRules();
}
/**
* Get The AdminFilterType Class.
*
@ -406,6 +452,32 @@
return new ComponentFields();
}
/**
* Get The ConfigFieldsets Class.
*
* @param Container $container The DI container.
*
* @return ConfigFieldsets
* @since 3.2.0
*/
public function getConfigFieldsets(Container $container): ConfigFieldsets
{
return new ConfigFieldsets();
}
/**
* Get The ConfigFieldsetsCustomfield Class.
*
* @param Container $container The DI container.
*
* @return ConfigFieldsetsCustomfield
* @since 3.2.0
*/
public function getConfigFieldsetsCustomfield(Container $container): ConfigFieldsetsCustomfield
{
return new ConfigFieldsetsCustomfield();
}
/**
* Get The ContentMulti Class.
*
@ -432,6 +504,19 @@
return new ContentOne();
}
/**
* Get The Contributors Class.
*
* @param Container $container The DI container.
*
* @return Contributors
* @since 3.2.0
*/
public function getContributors(Container $container): Contributors
{
return new Contributors();
}
/**
* Get The CustomAlias Class.
*
@ -588,6 +673,19 @@
return new ExtensionCustomFields();
}
/**
* Get The ExtensionsParams Class.
*
* @param Container $container The DI container.
*
* @return ExtensionsParams
* @since 3.2.0
*/
public function getExtensionsParams(Container $container): ExtensionsParams
{
return new ExtensionsParams();
}
/**
* Get The FieldGroupControl Class.
*
@ -653,6 +751,19 @@
return new FootableScripts();
}
/**
* Get The FrontendParams Class.
*
* @param Container $container The DI container.
*
* @return FrontendParams
* @since 3.2.0
*/
public function getFrontendParams(Container $container): FrontendParams
{
return new FrontendParams();
}
/**
* Get The GetAsLookup Class.
*
@ -692,6 +803,19 @@
return new GoogleChart();
}
/**
* Get The HasMenuGlobal Class.
*
* @param Container $container The DI container.
*
* @return HasMenuGlobal
* @since 3.2.0
*/
public function getHasMenuGlobal(Container $container): HasMenuGlobal
{
return new HasMenuGlobal();
}
/**
* Get The HasPermissions Class.
*
@ -809,6 +933,19 @@
return new JsonString();
}
/**
* Get The LanguageMessages Class.
*
* @param Container $container The DI container.
*
* @return LanguageMessages
* @since 3.2.0
*/
public function getLanguageMessages(Container $container): LanguageMessages
{
return new LanguageMessages();
}
/**
* Get The Layout Class.
*
@ -1173,6 +1310,19 @@
return new PermissionDashboard();
}
/**
* Get The PermissionFields Class.
*
* @param Container $container The DI container.
*
* @return PermissionFields
* @since 3.2.0
*/
public function getPermissionFields(Container $container): PermissionFields
{
return new PermissionFields();
}
/**
* Get The PermissionGlobalAction Class.
*
@ -1199,6 +1349,19 @@
return new PermissionViews();
}
/**
* Get The Request Class.
*
* @param Container $container The DI container.
*
* @return Request
* @since 3.2.0
*/
public function getRequest(Container $container): Request
{
return new Request();
}
/**
* Get The ScriptMediaSwitch Class.
*
@ -1432,3 +1595,16 @@
{
return new UpdateMysql();
}
/**
* Get The ViewsDefaultOrdering Class.
*
* @param Container $container The DI container.
*
* @return ViewsDefaultOrdering
* @since 3.2.0
*/
public function getViewsDefaultOrdering(Container $container): ViewsDefaultOrdering
{
return new ViewsDefaultOrdering();
}

Some files were not shown because too many files have changed in this diff Show More