acf
This commit is contained in:
		
							
								
								
									
										123
									
								
								plugins/system/nrframework/fields/nrconditions.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								plugins/system/nrframework/fields/nrconditions.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,123 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @author          Tassos Marinos <info@tassos.gr> | ||||
|  * @link            https://www.tassos.gr | ||||
|  * @copyright       Copyright © 2024 Tassos All Rights Reserved | ||||
|  * @license         GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later | ||||
|  */ | ||||
|  | ||||
| defined('_JEXEC') or die('Restricted access'); | ||||
|  | ||||
| use Joomla\CMS\Form\Field\GroupedlistField; | ||||
| use Joomla\CMS\HTML\HTMLHelper; | ||||
| use Joomla\CMS\Language\Text; | ||||
| use NRFramework\Extension; | ||||
|  | ||||
| class JFormFieldNRConditions extends GroupedlistField | ||||
| { | ||||
| 	/** | ||||
| 	 * Method to get the field option groups. | ||||
| 	 * | ||||
| 	 * @return  array  The field option objects as a nested array in groups. | ||||
| 	 */ | ||||
| 	protected function getGroups() | ||||
| 	{ | ||||
| 		$include_rules = empty($this->element['include_rules']) ? [] : explode(',', $this->element['include_rules']); | ||||
| 		$exclude_rules = empty($this->element['exclude_rules']) ? [] : explode(',', $this->element['exclude_rules']); | ||||
| 		$exclude_rules_pro = empty($this->element['exclude_rules_pro']) ? false : $this->element['exclude_rules_pro']; | ||||
|  | ||||
| 		$groups[''][] = HTMLHelper::_('select.option', null, Text::_('NR_CB_SELECT_CONDITION')); | ||||
|  | ||||
| 		$conditionsList = \NRFramework\Conditions\ConditionsHelper::getConditionsList(); | ||||
| 		 | ||||
| 		foreach ($conditionsList as $conditions) | ||||
| 		{ | ||||
| 			foreach ($conditions['conditions'] as $conditionName => $condition) | ||||
| 			{ | ||||
| 				$skip_condition = false; | ||||
|  | ||||
| 				/** | ||||
| 				 * Checks conditions that have multiple components as dependency. | ||||
| 				 * Check for multiple given components for a particular condition, i.e. acymailing can be loaded via com_acymailing or com_acym | ||||
| 				 */ | ||||
| 				$multiple_components = explode('|', $conditionName); | ||||
| 				if (count($multiple_components) >= 2) | ||||
| 				{ | ||||
| 					foreach ($multiple_components as $component) | ||||
| 					{ | ||||
| 						$skip_condition = false; | ||||
|  | ||||
| 						if (!$conditionName = $this->getConditionName($component)) | ||||
| 						{ | ||||
| 							$skip_condition = true; | ||||
| 							continue; | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 				 | ||||
| 				// If the condition must be skipped, skip it | ||||
| 				if ($skip_condition) | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
|  | ||||
| 				// Checks for a single condition whether its component exists and can be used. | ||||
| 				if (!$conditionName = $this->getConditionName($conditionName)) | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
|  | ||||
| 				// If its excluded, skip it | ||||
| 				if (!$exclude_rules_pro && !empty($exclude_rules) && in_array($conditionName, $exclude_rules)) | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
|  | ||||
| 				// If its not included, skip it | ||||
| 				if (!$exclude_rules_pro && !empty($include_rules) && !in_array($conditionName, $include_rules)) | ||||
| 				{ | ||||
| 					continue; | ||||
| 				} | ||||
|  | ||||
| 				$is_excluded_and_pro = ((count($exclude_rules) && in_array($conditionName, $exclude_rules)) || (count($include_rules) && !in_array($conditionName, $include_rules))) && $exclude_rules_pro; | ||||
|  | ||||
| 				$value = $conditionName; | ||||
| 				$disabled = false; | ||||
|  | ||||
| 				if ($is_excluded_and_pro) | ||||
| 				{ | ||||
| 					$disabled = true; | ||||
| 					$value = '__'; | ||||
| 				} | ||||
|  | ||||
| 				// Add condition to the group | ||||
| 				$groups[$conditions['title']][] = HTMLHelper::_('select.option', $value, $condition['title'], 'value', 'text', $disabled); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// Merge any additional groups in the XML definition. | ||||
| 		return array_merge(parent::getGroups(), $groups); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Returns the parsed condition name. | ||||
| 	 *  | ||||
| 	 * i.e. $condition: com_k2#Component\K2Item | ||||
| 	 * will return: Component\K2Item | ||||
| 	 *  | ||||
| 	 * @param   string  $condition | ||||
| 	 *  | ||||
| 	 * @return  mixed | ||||
| 	 */ | ||||
| 	private function getConditionName($condition) | ||||
| 	{ | ||||
| 		$conditionNameParts = explode('#', $condition); | ||||
|  | ||||
| 		if (count($conditionNameParts) >= 2 && !Extension::isEnabled($conditionNameParts[0])) | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
| 		 | ||||
| 		return isset($conditionNameParts[1]) ? $conditionNameParts[1] : $conditionNameParts[0]; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user