From 5887026b4e87752faa9711b0813ccc3442ae8355 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Wed, 8 Dec 2021 22:41:29 +0200 Subject: [PATCH] first commit - v1.0.0 --- ...ntbuildercomponentdashboardheaderstabs.php | 73 ++++++ ...ntbuildercomponentdashboardheaderstabs.xml | 31 +++ fields/index.html | 1 + fields/powers.php | 184 ++++++++++++++ forms/component_dashboard.xml | 238 ++++++++++++++++++ forms/index.html | 1 + index.html | 1 + ...ntbuildercomponentdashboardheaderstabs.ini | 41 +++ ...ildercomponentdashboardheaderstabs.sys.ini | 41 +++ language/en-GB/index.html | 1 + language/index.html | 1 + rules/code.php | 53 ++++ rules/index.html | 1 + script.php | 80 ++++++ 14 files changed, 747 insertions(+) create mode 100644 componentbuildercomponentdashboardheaderstabs.php create mode 100644 componentbuildercomponentdashboardheaderstabs.xml create mode 100644 fields/index.html create mode 100644 fields/powers.php create mode 100644 forms/component_dashboard.xml create mode 100644 forms/index.html create mode 100644 index.html create mode 100644 language/en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.ini create mode 100644 language/en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.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/componentbuildercomponentdashboardheaderstabs.php b/componentbuildercomponentdashboardheaderstabs.php new file mode 100644 index 0000000..2b18748 --- /dev/null +++ b/componentbuildercomponentdashboardheaderstabs.php @@ -0,0 +1,73 @@ + + * @git 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 + */ + +// 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 Component Dashboard Headers Tabs plugin. + * + * @package ComponentbuilderComponentDashboardHeadersTabs + * @since 1.0.0 + */ +class PlgContentComponentbuilderComponentDashboardHeadersTabs 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.component_dashboard') === 0) + { + // Add the forms path + Form::addFormPath(__DIR__ . '/forms'); + // add the admin view params for privacy integration + $form->loadFile('component_dashboard'); + // 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="component_dashboard_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/componentbuildercomponentdashboardheaderstabs.xml b/componentbuildercomponentdashboardheaderstabs.xml new file mode 100644 index 0000000..c613070 --- /dev/null +++ b/componentbuildercomponentdashboardheaderstabs.xml @@ -0,0 +1,31 @@ + + + PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS + 8th December, 2021 + Llewellyn van der Merwe + joomla@vdm.io + https://dev.vdm.io + Copyright (C) 2015 Vast Development Method. All rights reserved. + GNU General Public License version 2 or later; see LICENSE.txt + 1.0.0 + PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_XML_DESCRIPTION + + + script.php + + + + en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.ini + en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.sys.ini + + + + + componentbuildercomponentdashboardheaderstabs.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/fields/powers.php b/fields/powers.php new file mode 100644 index 0000000..ebcbcd3 --- /dev/null +++ b/fields/powers.php @@ -0,0 +1,184 @@ + + * @git 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 + */ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Powers Form Field class for the Componentbuilder component + */ +class JFormFieldPowers extends JFormFieldList +{ + /** + * The powers field type. + * + * @var string + */ + public $type = 'powers'; + + /** + * Override to add new button + * + * @return string The field input markup. + * + * @since 3.2 + */ + protected function getInput() + { + // see if we should add buttons + $set_button = $this->getAttribute('button'); + // get html + $html = parent::getInput(); + // if true set button + if ($set_button === 'true') + { + $button = array(); + $script = array(); + $button_code_name = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referral if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + // get the return value. + $_uri = (string) JUri::getInstance(); + $_return = urlencode(base64_encode($_uri)); + // load return value. + $ref .= '&return=' . $_return; + $refJ .= '&return=' . $_return; + } + // get button label + $button_label = trim($button_code_name); + $button_label = preg_replace('/_+/', ' ', $button_label); + $button_label = preg_replace('/\s+/', ' ', $button_label); + $button_label = preg_replace("/[^A-Za-z ]/", '', $button_label); + $button_label = ucfirst(strtolower($button_label)); + // get user object + $user = JFactory::getUser(); + // only add if user allowed to create power + if ($user->authorise('power.create', 'com_componentbuilder') && $app->isAdmin()) // TODO for now only in admin area. + { + // build Create button + $button[] = ' + '; + } + // only add if user allowed to edit power + if ($user->authorise('power.edit', 'com_componentbuilder') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$button_code_name."',function (e) { + e.preventDefault(); + var ".$button_code_name."Value = jQuery('#jform_".$button_code_name."').val(); + ".$button_code_name."Button(".$button_code_name."Value); + }); + var ".$button_code_name."Value = jQuery('#jform_".$button_code_name."').val(); + ".$button_code_name."Button(".$button_code_name."Value); + }); + function ".$button_code_name."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$button_code_name."Create').hide(); + // show edit button + jQuery('#".$button_code_name."Edit').show(); + var url = 'index.php?option=com_componentbuilder&view=powers&task=power.edit&id='+value+'".$refJ."'; + jQuery('#".$button_code_name."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$button_code_name."Create').show(); + // hide edit button + jQuery('#".$button_code_name."Edit').hide(); + } + }"; + } + // check if button was created for power field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; + } + } + return $html; + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + protected function getOptions() + { + // Get the user object. + $user = JFactory::getUser(); + // Get the databse object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + $query->select($db->quoteName(array('a.id','a.system_name','a.name','a.type','a.power_version'),array('id','power_admin_component_system_name','name','type','version'))); + $query->from($db->quoteName('#__componentbuilder_power', 'a')); + $query->where($db->quoteName('a.published') . ' >= 1'); + $query->order('a.system_name ASC'); + $query->order('a.type ASC'); + // Implement View Level Access (if set in table) + if (!$user->authorise('core.options', 'com_componentbuilder')) + { + $columns = $db->getTableColumns('#__componentbuilder_power'); + if(isset($columns['access'])) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + } + $db->setQuery((string)$query); + $items = $db->loadObjectList(); + $options = array(); + // if none was found, we add this to set an alternative to set custom + if (!$items) + { + $options[] = JHtml::_('select.option', '', JText::_('PLG_CONTENT_COMPONENTBUILDERCOMPONENTHEADERSTABS_NONE_FOUND')); + } + if ($items) + { + if ($this->multiple === false) + { + $options[] = JHtml::_('select.option', '', JText::_('PLG_CONTENT_COMPONENTBUILDERCOMPONENTHEADERSTABS_SELECT_AN_OPTION')); + } + foreach($items as $item) + { + $options[] = JHtml::_('select.option', $item->id, $item->power_admin_component_system_name . ' [' . $item->type . ' ' . $item->name . '] (v' . $item->version . ')'); + } + } + return $options; + + } +} diff --git a/forms/component_dashboard.xml b/forms/component_dashboard.xml new file mode 100644 index 0000000..04a604d --- /dev/null +++ b/forms/component_dashboard.xml @@ -0,0 +1,238 @@ + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ 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_componentbuildercomponentdashboardheaderstabs.ini b/language/en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.ini new file mode 100644 index 0000000..0f852d8 --- /dev/null +++ b/language/en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.ini @@ -0,0 +1,41 @@ +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS="Content - Componentbuilder Component Dashboard Headers Tabs" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DESCRIPTION="This plugin is used to set component dashboard class custom headers." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_XML_DESCRIPTION="

Content - Componentbuilder Component Dashboard Headers Tabs (v.1.0.0)

This plugin is used to set component dashboard class custom headers.

Created by Llewellyn van der Merwe
Development started 6th December, 2021

" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_CLASS_HEADERS="Class Headers" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_DASHBOARD_VIEW_LABEL="Target Dashboard View
Default Template Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_YES="Yes" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_NO="No" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_VIEW_LABEL="View Header
+(dashboard.view)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_VIEW_DESCRIPTION="The file header for dashboard view." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_VIEW_LABEL="Power Header
+(dashboard.view)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_VIEW_DESCRIPTION="The power header for dashboard view." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_DASHBOARD_VIEW_HTML_LABEL="Target Dashboard View
Class Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_VIEW_HTML_LABEL="Class Header
+(dashboard.view.html)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_VIEW_HTML_DESCRIPTION="The class header for dashboard view." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_VIEW_HTML_LABEL="Power Header
+(dashboard.view.html)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_VIEW_HTML_DESCRIPTION="The power header for dashboard view class." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_DASHBOARD_MODEL_LABEL="Target Dashboard Model
Class Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_MODEL_LABEL="Class Header
+(dashboard.model)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_MODEL_DESCRIPTION="The class header for dashboard model." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_MODEL_LABEL="Power Header
+(dashboard.model)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_MODEL_DESCRIPTION="The power header for dashboard model class." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_DASHBOARD_CONTROLLER_LABEL="Target Dashboard Cotroller
Class Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_CONTROLLER_LABEL="Class Header
+(dashboard.controller)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_CONTROLLER_DESCRIPTION="The class header for dashboard controller." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_CONTROLLER_LABEL="Power Header
+(dashboard.controller)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_CONTROLLER_DESCRIPTION="The power header for dashboard controller class." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_AJAX_MODEL_LABEL="Target Ajax Model
Class Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_AJAX_MODEL_LABEL="Class Header
+(ajax.model)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_AJAX_MODEL_DESCRIPTION="The class header for Ajax model." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_AJAX_MODEL_LABEL="Power Header
+(ajax.model)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_AJAX_MODEL_DESCRIPTION="The power header for Ajax model." \ No newline at end of file diff --git a/language/en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.sys.ini b/language/en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.sys.ini new file mode 100644 index 0000000..0f852d8 --- /dev/null +++ b/language/en-GB/en-GB.plg_content_componentbuildercomponentdashboardheaderstabs.sys.ini @@ -0,0 +1,41 @@ +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS="Content - Componentbuilder Component Dashboard Headers Tabs" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DESCRIPTION="This plugin is used to set component dashboard class custom headers." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_XML_DESCRIPTION="

Content - Componentbuilder Component Dashboard Headers Tabs (v.1.0.0)

This plugin is used to set component dashboard class custom headers.

Created by Llewellyn van der Merwe
Development started 6th December, 2021

" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_CLASS_HEADERS="Class Headers" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_DASHBOARD_VIEW_LABEL="Target Dashboard View
Default Template Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_YES="Yes" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_NO="No" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_VIEW_LABEL="View Header
+(dashboard.view)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_VIEW_DESCRIPTION="The file header for dashboard view." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_VIEW_LABEL="Power Header
+(dashboard.view)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_VIEW_DESCRIPTION="The power header for dashboard view." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_DASHBOARD_VIEW_HTML_LABEL="Target Dashboard View
Class Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_VIEW_HTML_LABEL="Class Header
+(dashboard.view.html)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_VIEW_HTML_DESCRIPTION="The class header for dashboard view." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_VIEW_HTML_LABEL="Power Header
+(dashboard.view.html)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_VIEW_HTML_DESCRIPTION="The power header for dashboard view class." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_DASHBOARD_MODEL_LABEL="Target Dashboard Model
Class Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_MODEL_LABEL="Class Header
+(dashboard.model)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_MODEL_DESCRIPTION="The class header for dashboard model." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_MODEL_LABEL="Power Header
+(dashboard.model)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_MODEL_DESCRIPTION="The power header for dashboard model class." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_DASHBOARD_CONTROLLER_LABEL="Target Dashboard Cotroller
Class Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_CONTROLLER_LABEL="Class Header
+(dashboard.controller)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_DASHBOARD_CONTROLLER_DESCRIPTION="The class header for dashboard controller." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_CONTROLLER_LABEL="Power Header
+(dashboard.controller)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_DASHBOARD_CONTROLLER_DESCRIPTION="The power header for dashboard controller class." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_ADD_AJAX_MODEL_LABEL="Target Ajax Model
Class Header" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_AJAX_MODEL_LABEL="Class Header
+(ajax.model)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_AJAX_MODEL_DESCRIPTION="The class header for Ajax model." +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_AJAX_MODEL_LABEL="Power Header
+(ajax.model)" +PLG_CONTENT_COMPONENTBUILDERCOMPONENTDASHBOARDHEADERSTABS_POWER_AJAX_MODEL_DESCRIPTION="The power header for Ajax 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..8101f79 --- /dev/null +++ b/rules/code.php @@ -0,0 +1,53 @@ + + * @git 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 + */ + +// 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..bf6d87d --- /dev/null +++ b/script.php @@ -0,0 +1,80 @@ + + * @git 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 + */ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +/** + * Content - Componentbuilder Component Dashboard Headers Tabs script file. + * + * @package PlgContentComponentbuilderComponentDashboardHeadersTabs + */ +class plgContentComponentbuilderComponentDashboardHeadersTabsInstallerScript +{ + + /** + * 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('JCB 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 3 or higher installed + if (count($jcbVersion) == 3 && $jcbVersion[0] >= 3) + { + $blockInstall = false; + } + } + // allow install if all conditions are met + if ($blockInstall) + { + $app->enqueueMessage('Please upgrade to JCB-Pro v3.0.0 or higher before installing this plugin.', 'error'); + return false; + } + } + + return true; + } +}