From a041c0c96795db2db10b720440e9bbc068cdd69f Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Thu, 14 Oct 2021 16:30:31 +0200 Subject: [PATCH] first commit - v1.0.0 --- componentbuilderadminheaderstabs.php | 73 +++++++++ componentbuilderadminheaderstabs.xml | 31 ++++ fields/index.html | 1 + forms/admin_view.xml | 142 ++++++++++++++++++ forms/index.html | 1 + index.html | 1 + ...ntent_componentbuilderadminheaderstabs.ini | 22 +++ ...t_componentbuilderadminheaderstabs.sys.ini | 22 +++ language/en-GB/index.html | 1 + language/index.html | 1 + rules/code.php | 53 +++++++ rules/index.html | 1 + script.php | 79 ++++++++++ 13 files changed, 428 insertions(+) create mode 100644 componentbuilderadminheaderstabs.php create mode 100644 componentbuilderadminheaderstabs.xml create mode 100644 fields/index.html create mode 100644 forms/admin_view.xml create mode 100644 forms/index.html create mode 100644 index.html create mode 100644 language/en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.ini create mode 100644 language/en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.sys.ini create mode 100644 language/en-GB/index.html create mode 100644 language/index.html create mode 100644 rules/code.php create mode 100644 rules/index.html create mode 100644 script.php diff --git a/componentbuilderadminheaderstabs.php b/componentbuilderadminheaderstabs.php new file mode 100644 index 0000000..6ffe6fe --- /dev/null +++ b/componentbuilderadminheaderstabs.php @@ -0,0 +1,73 @@ + + * @github Joomla Component Builder + * @copyright Copyright (C) 2015 - 2020 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\CMS\Form\Form; +use Joomla\CMS\Plugin\CMSPlugin; + +JLoader::register('ComponentbuilderHelper', JPATH_ADMINISTRATOR . '/components/com_componentbuilder/helpers/componentbuilder.php'); + +/** + * Content - Componentbuilder Admin Headers Tabs plugin. + * + * @package ComponentbuilderAdminHeadersTabs + * @since 1.0.0 + */ +class PlgContentComponentbuilderAdminHeadersTabs extends CMSPlugin +{ + /** + * Affects constructor behavior. If true, language files will be loaded automatically. + * + * @var boolean + * @since 1.0 + */ + protected $autoloadLanguage = true; + + /** + * Runs on content preparation of form. + * + * @param JForm $form The form + * @param stdClass $data The data + * + * @return boolean + * + * @since 1.0 + */ + public function onContentPrepareForm(Form $form, $data) + { + $context = $form->getName(); + + // When this is componentbuilder admin view + if (strpos($context, 'com_componentbuilder.admin_view') === 0) + { + // Add the forms path + Form::addFormPath(__DIR__ . '/forms'); + // add the admin view params for privacy integration + $form->loadFile('admin_view'); + // update all editors to use this components global editor + $global_editor = JComponentHelper::getParams('com_componentbuilder')->get('editor', 'none'); + // set the field editor value (with none as fallback) + $editors = $form->getXml()->xpath('descendant::fields[@name="admin_view_headers"]//field[@type="editor"]'); + // check if we found any + if (ComponentbuilderHelper::checkArray($editors)) + { + foreach ($editors as $editor) + { + // set the editor to the global option + $editor['editor'] = $global_editor . '|none'; + } + } + } + return true; + } +} diff --git a/componentbuilderadminheaderstabs.xml b/componentbuilderadminheaderstabs.xml new file mode 100644 index 0000000..c67a955 --- /dev/null +++ b/componentbuilderadminheaderstabs.xml @@ -0,0 +1,31 @@ + + + PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS + 8th December, 2020 + Llewellyn van der Merwe + llewellyn@joomlacomponentbuilder.com + http://www.joomlacomponentbuilder.com + Copyright (C) 2015 - 2020 Vast Development Method. All rights reserved. + GNU General Public License version 2 or later; see LICENSE.txt + 1.0.0 + PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_XML_DESCRIPTION + + + script.php + + + + en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.ini + en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.sys.ini + + + + + componentbuilderadminheaderstabs.php + index.html + language + fields + forms + rules + + \ No newline at end of file diff --git a/fields/index.html b/fields/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/fields/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/forms/admin_view.xml b/forms/admin_view.xml new file mode 100644 index 0000000..b8159b3 --- /dev/null +++ b/forms/admin_view.xml @@ -0,0 +1,142 @@ + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/forms/index.html b/forms/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/forms/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/language/en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.ini b/language/en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.ini new file mode 100644 index 0000000..d9fd701 --- /dev/null +++ b/language/en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.ini @@ -0,0 +1,22 @@ +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS="Content - Componentbuilder Admin Headers Tabs" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_DESCRIPTION="This plugin is used to set admin class custom headers." +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_XML_DESCRIPTION="

Content - Componentbuilder Admin Headers Tabs (v.1.0.0)

This plugin is used to set admin class custom headers.

Created by Llewellyn van der Merwe
Development started 27th October, 2020

" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_CLASS_HEADERS="Class Headers" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADD_ADMIN_VIEW_CONTROLLER_LABEL="Target Admin View
Controller Header" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_YES="Yes" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_NO="No" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEW_CONTROLLER_LABEL="Class Header
+(admin.view.controller)" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEW_CONTROLLER_DESCRIPTION="The class header for admin view controller." +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADD_ADMIN_VIEW_MODEL_LABEL="Target Admin View
Model Header" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEW_MODEL_LABEL="Class Header
+(admin.view.model)" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEW_MODEL_DESCRIPTION="The class header for admin view model." +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADD_ADMIN_VIEWS_CONTROLLER_LABEL="Target Admin Views
Controller Header" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEWS_CONTROLLER_LABEL="Class Header
+(admin.views.controller)" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEWS_CONTROLLER_DESCRIPTION="The class header for admin views controller." +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADD_ADMIN_VIEWS_MODEL_LABEL="Target Admin Views
Model Header" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEWS_MODEL_LABEL="Class Header
+(admin.views.model)" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEWS_MODEL_DESCRIPTION="The class header for admin views model." \ No newline at end of file diff --git a/language/en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.sys.ini b/language/en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.sys.ini new file mode 100644 index 0000000..d9fd701 --- /dev/null +++ b/language/en-GB/en-GB.plg_content_componentbuilderadminheaderstabs.sys.ini @@ -0,0 +1,22 @@ +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS="Content - Componentbuilder Admin Headers Tabs" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_DESCRIPTION="This plugin is used to set admin class custom headers." +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_XML_DESCRIPTION="

Content - Componentbuilder Admin Headers Tabs (v.1.0.0)

This plugin is used to set admin class custom headers.

Created by Llewellyn van der Merwe
Development started 27th October, 2020

" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_CLASS_HEADERS="Class Headers" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADD_ADMIN_VIEW_CONTROLLER_LABEL="Target Admin View
Controller Header" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_YES="Yes" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_NO="No" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEW_CONTROLLER_LABEL="Class Header
+(admin.view.controller)" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEW_CONTROLLER_DESCRIPTION="The class header for admin view controller." +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADD_ADMIN_VIEW_MODEL_LABEL="Target Admin View
Model Header" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEW_MODEL_LABEL="Class Header
+(admin.view.model)" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEW_MODEL_DESCRIPTION="The class header for admin view model." +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADD_ADMIN_VIEWS_CONTROLLER_LABEL="Target Admin Views
Controller Header" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEWS_CONTROLLER_LABEL="Class Header
+(admin.views.controller)" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEWS_CONTROLLER_DESCRIPTION="The class header for admin views controller." +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADD_ADMIN_VIEWS_MODEL_LABEL="Target Admin Views
Model Header" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEWS_MODEL_LABEL="Class Header
+(admin.views.model)" +PLG_CONTENT_COMPONENTBUILDERADMINHEADERSTABS_ADMIN_VIEWS_MODEL_DESCRIPTION="The class header for admin views model." \ No newline at end of file diff --git a/language/en-GB/index.html b/language/en-GB/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/language/en-GB/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/language/index.html b/language/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/language/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rules/code.php b/rules/code.php new file mode 100644 index 0000000..0f97f97 --- /dev/null +++ b/rules/code.php @@ -0,0 +1,53 @@ + + * @github Joomla Component Builder + * @copyright Copyright (C) 2015 - 2020 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// No direct access to this file +defined('JPATH_PLATFORM') or die; + +use Joomla\CMS\Form\Form; +use Joomla\CMS\Form\FormRule; +use Joomla\Registry\Registry; + +/** + * Form Rule (Code) class for the Joomla Platform. + */ +class JFormRuleCode extends FormRule +{ + /** + * Method to test the value. + * + * @param \SimpleXMLElement $element The SimpleXMLElement object representing the `` tag for the form field object. + * @param mixed $value The form field value to validate. + * @param string $group The field name group control value. This acts as an array container for the field. + * For example if the field has name="foo" and the group value is set to "bar" then the + * full field name would end up being "bar[foo]". + * @param Registry $input An optional Registry object with the entire data set to validate against the entire form. + * @param Form $form The form object for which the field is being tested. + * + * @return boolean True if the value is valid, false otherwise. + */ + public function test(\SimpleXMLElement $element, $value, $group = null, Registry $input = null, Form $form = null) + { + // This removes all validation (is dangerous) but needed to submit code via JCB + return true; + + /** + * My idea is to add some kind of validation to improve JCB code (per/language) + * + * So at this time this code validation is used for JavaScript,CSS,HTML and PHP. + * We can see what language is being worked on with the syntax property in the $element. (in JCB) + * What complicates things is the placeholders, of both custom code, component, and view names. + * Ideally we could strip them and then validate the code to being syntactically correct. + * But since some of the placeholders form part of the class/function names and the more, it seems like we are pressed for a much more advance solution. + * If you have any ideas to how we can go about to do this, then please open an issue on github and lets begin. (this is a nice to have, so don't break a leg...) + */ + } +} diff --git a/rules/index.html b/rules/index.html new file mode 100644 index 0000000..fa6d84e --- /dev/null +++ b/rules/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/script.php b/script.php new file mode 100644 index 0000000..1bb285b --- /dev/null +++ b/script.php @@ -0,0 +1,79 @@ + + * @github Joomla Component Builder + * @copyright Copyright (C) 2015 - 2020 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +/** + * Content - Componentbuilder Admin Headers Tabs script file. + * + * @package PlgContentComponentbuilderAdminHeadersTabs + */ +class plgContentComponentbuilderAdminHeadersTabsInstallerScript +{ + + /** + * Called before any type of action + * + * @param string $route Which action is happening (install|uninstall|discover_install|update) + * @param JAdapterInstance $adapter The object responsible for running this script + * + * @return boolean True on success + */ + public function preflight($route, JAdapterInstance $adapter) + { + // get application + $app = JFactory::getApplication(); + + // the default for both install and update + $jversion = new JVersion(); + if (!$jversion->isCompatible('3.8.0')) + { + $app->enqueueMessage('Please upgrade to at least Joomla! 3.8.0 before continuing!', 'error'); + return false; + } + + if ('install' === $route) + { + // check that componentbuilder is installed + $pathToCore = JPATH_ADMINISTRATOR . '/components/com_componentbuilder/helpers/componentbuilder.php'; + if (!JFile::exists($pathToCore)) + { + $app->enqueueMessage('Joomla Component Builder must first be installed from Joomla Component Builder.', 'error'); + return false; + } + // load the helper class + JLoader::register('ComponentbuilderHelper', JPATH_ADMINISTRATOR . '/components/com_componentbuilder/helpers/componentbuilder.php'); + // block install + $blockInstall = true; + // check the version of JCB + $manifest = ComponentbuilderHelper::manifest(); + if (isset($manifest->version) && strpos($manifest->version, '.') !== false) + { + // get the version + $jcbVersion = explode('.', $manifest->version); + // check that we have JCB 2.11.7 or higher installed + if (count($jcbVersion) == 3 && $jcbVersion[0] >= 2 && $jcbVersion[1] >= 11 && (($jcbVersion[1] == 11 && $jcbVersion[2] >= 7) || ($jcbVersion[1] > 11))) + { + $blockInstall = false; + } + } + // allow install if all conditions are met + if ($blockInstall) + { + $app->enqueueMessage('Please upgrade to JCB 2.12.1 or higher before installing this plugin.', 'error'); + return false; + } + } + + return true; + } +}