From 072276d4833eea54eb89c24da2ab898cf8df7199 Mon Sep 17 00:00:00 2001 From: andrepereiradasilva Date: Tue, 10 Jan 2017 18:13:12 +0000 Subject: [PATCH 1/7] Update helper.php --- libraries/joomla/form/helper.php | 33 +++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/libraries/joomla/form/helper.php b/libraries/joomla/form/helper.php index acc6f89660ac9..2dfc87cc84f56 100644 --- a/libraries/joomla/form/helper.php +++ b/libraries/joomla/form/helper.php @@ -320,35 +320,54 @@ protected static function addPath($entity, $new = null) /** * Parse the show on conditions * - * @param string $formControl Form name. - * @param string $showOn Show on conditions. + * @param JForm $form The form. + * @param JFormField $field The field with the showon condition. * * @return array Array with show on conditions. * * @since __DEPLOY_VERSION__ */ - public static function parseShowOnConditions($formControl, $showOn) + public static function parseShowOnConditions($form, $field) { // Process the showon data. - if (!$showOn) + if (!$form || !$field || !$field->showon) { return array(); } $showOnData = array(); - $showOnParts = preg_split('#\[AND\]|\[OR\]#', $showOn); + $showOnParts = preg_split('#(\[AND\]|\[OR\])#', $field->showon, -1, PREG_SPLIT_DELIM_CAPTURE); + $op = ''; foreach ($showOnParts as $showOnPart) { + if ($showOnPart === '[AND]' || $showOnPart === '[OR]') + { + $op = trim($showOnPart, '[]'); + continue; + } + $compareEqual = strpos($showOnPart, '!:') === false; $showOnPartBlocks = explode(($compareEqual ? ':' : '!:'), $showOnPart, 2); + // Check if a group is being checked. will default to curren field group, if exists. Ex: params.show_title + $conditionFieldParts = explode('.', $showOnPartBlocks[0]); + $conditionFieldName = isset($conditionFieldParts[1]) ? $conditionFieldParts[1] : $conditionFieldParts[0]; + $conditionFieldGroup = isset($conditionFieldParts[1]) ? $conditionFieldParts[0] : null; + $conditionFieldGroup = $conditionFieldGroup === null && $field->group ? $field->group : $conditionFieldGroup; + $conditionField = ($conditionField = $form->getField($conditionFieldName, $conditionFieldGroup)) ? $conditionField->name : $conditionFieldName; + $showOnData[] = array( - 'field' => $formControl ? $formControl . '[' . $showOnPartBlocks[0] . ']' : $showOnPartBlocks[0], + 'field' => str_replace('[]', '', $conditionField), 'values' => explode(',', $showOnPartBlocks[1]), 'sign' => $compareEqual === true ? '=' : '!=', - 'op' => preg_match('#^\[(AND|OR)\]#', $showOnPart, $matches) ? $matches[1] : '', + 'op' => $op, ); + + if ($op !== '') + { + $op = ''; + } } return $showOnData; From 4d5fa33144f1a5a8ba545d32a4871939c2b186a5 Mon Sep 17 00:00:00 2001 From: andrepereiradasilva Date: Tue, 10 Jan 2017 18:24:46 +0000 Subject: [PATCH 2/7] let's confirm the property exists --- libraries/joomla/form/helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/joomla/form/helper.php b/libraries/joomla/form/helper.php index 2dfc87cc84f56..e724095387fdf 100644 --- a/libraries/joomla/form/helper.php +++ b/libraries/joomla/form/helper.php @@ -354,7 +354,7 @@ public static function parseShowOnConditions($form, $field) $conditionFieldParts = explode('.', $showOnPartBlocks[0]); $conditionFieldName = isset($conditionFieldParts[1]) ? $conditionFieldParts[1] : $conditionFieldParts[0]; $conditionFieldGroup = isset($conditionFieldParts[1]) ? $conditionFieldParts[0] : null; - $conditionFieldGroup = $conditionFieldGroup === null && $field->group ? $field->group : $conditionFieldGroup; + $conditionFieldGroup = $conditionFieldGroup === null && property_exists($field, 'group') && $field->group ? $field->group : $conditionFieldGroup; $conditionField = ($conditionField = $form->getField($conditionFieldName, $conditionFieldGroup)) ? $conditionField->name : $conditionFieldName; $showOnData[] = array( From a38993cd0137a72934d2eab0d61387d22e25aada Mon Sep 17 00:00:00 2001 From: andrepereiradasilva Date: Tue, 10 Jan 2017 18:25:25 +0000 Subject: [PATCH 3/7] make the necesseray changes in method parameters --- libraries/joomla/form/field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/joomla/form/field.php b/libraries/joomla/form/field.php index 19342d63d3d96..7cda10f1a1ad1 100644 --- a/libraries/joomla/form/field.php +++ b/libraries/joomla/form/field.php @@ -952,7 +952,7 @@ public function renderField($options = array()) if ($this->showon) { - $options['rel'] = ' data-showon=\'' . json_encode(JFormHelper::parseShowOnConditions($this->formControl, $this->showon)) . '\''; + $options['rel'] = ' data-showon=\'' . json_encode(JFormHelper::parseShowOnConditions($this->form, $this)) . '\''; $options['showonEnabled'] = true; } From d1ee40a1d94c71fa57dfc36aea635c85eb8bc498 Mon Sep 17 00:00:00 2001 From: andrepereiradasilva Date: Tue, 10 Jan 2017 18:26:22 +0000 Subject: [PATCH 4/7] make the necessary change sin searchtools fields --- layouts/joomla/searchtools/default/filters.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/layouts/joomla/searchtools/default/filters.php b/layouts/joomla/searchtools/default/filters.php index 86b2992f235a0..52749cf10d69c 100644 --- a/layouts/joomla/searchtools/default/filters.php +++ b/layouts/joomla/searchtools/default/filters.php @@ -13,9 +13,6 @@ // Check for show on fields. $filters = $data['view']->filterForm->getGroup('filter'); - -// Load the form filters -$filters = $data['view']->filterForm->getGroup('filter'); ?> $field) : ?> @@ -24,7 +21,7 @@ showon) : ?> 'auto', 'relative' => true)); ?> - formControl, $field->showon)) . "'"; ?> + filterForm, $field)) . "'"; ?>
> input; ?> From 5f1f17d29856b899cb953ab7c8fb58fc284fe467 Mon Sep 17 00:00:00 2001 From: andrepereiradasilva Date: Tue, 10 Jan 2017 18:27:12 +0000 Subject: [PATCH 5/7] make the necessary changes in options default layout --- layouts/joomla/content/options_default.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/joomla/content/options_default.php b/layouts/joomla/content/options_default.php index 5414e283969aa..456f953058657 100644 --- a/layouts/joomla/content/options_default.php +++ b/layouts/joomla/content/options_default.php @@ -30,7 +30,7 @@ { JHtml::_('jquery.framework'); JHtml::_('script', 'jui/cms.js', array('version' => 'auto', 'relative' => true)); - $datashowon = ' data-showon=\'' . json_encode(JFormHelper::parseShowOnConditions($field->formControl, $field->showon)) . '\''; + $datashowon = ' data-showon=\'' . json_encode(JFormHelper::parseShowOnConditions($displayData->form, $field)) . '\''; } ?>
> From 17eab6d25c320acedcc646e54b23db88688f6e68 Mon Sep 17 00:00:00 2001 From: andrepereiradasilva Date: Tue, 10 Jan 2017 18:28:09 +0000 Subject: [PATCH 6/7] make the necessary changes in template layout --- .../components/com_config/view/component/tmpl/default.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/administrator/components/com_config/view/component/tmpl/default.php b/administrator/components/com_config/view/component/tmpl/default.php index b8b57e777d0a8..c60bbdee004e7 100644 --- a/administrator/components/com_config/view/component/tmpl/default.php +++ b/administrator/components/com_config/view/component/tmpl/default.php @@ -60,7 +60,7 @@ showon)) : ?> 'auto', 'relative' => true)); ?> - formControl, $fieldSet->showon)) . '\''; ?> + form, $fieldSet)) . '\''; ?> label) ? 'COM_CONFIG_' . $name . '_FIELDSET_LABEL' : $fieldSet->label; ?> > @@ -80,7 +80,7 @@ showon) : ?> 'auto', 'relative' => true)); ?> - formControl, $field->showon)) . '\''; ?> + form, $field)) . '\''; ?> hidden) : ?> input; ?> From ecb16d266ce8aebca7c963185a75d9e0bfbc684a Mon Sep 17 00:00:00 2001 From: andrepereiradasilva Date: Tue, 10 Jan 2017 21:21:37 +0000 Subject: [PATCH 7/7] Update filters.php --- layouts/joomla/searchtools/default/filters.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/layouts/joomla/searchtools/default/filters.php b/layouts/joomla/searchtools/default/filters.php index 52749cf10d69c..aa33d5bab2c81 100644 --- a/layouts/joomla/searchtools/default/filters.php +++ b/layouts/joomla/searchtools/default/filters.php @@ -13,6 +13,9 @@ // Check for show on fields. $filters = $data['view']->filterForm->getGroup('filter'); + +// Load the form filters +$filters = $data['view']->filterForm->getGroup('filter'); ?> $field) : ?>