Server : LiteSpeed System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : alsaif ( 1057) PHP Version : 7.4.33 Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/alsaif/public_html/administrator/components/com_sppagebuilder/builder/classes/ |
<?php
/**
* @package SP Page Builder
* @author JoomShaper http://www.joomshaper.com
* @copyright Copyright (c) 2010 - 2022 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
*/
/**
* SP Page Builder settings ajax loader
*
* @since version 2.0
*/
defined('_JEXEC') or die('Restricted access');
class SppbSettingsAjax
{
/**
* Ajax Request Settings type
* @since 2.0
* @access private
* @var strings
*/
private $type = '';
private $addon_raw;
/**
* Current Row Index
* @since 2.0
* @access private
* @var intiger
*/
private $row_index;
/**
* Current Column Index
* @since 2.0
* @access private
* @var intiger
*/
private $column_index;
/**
* Current Addon Index
* @since 2.0
* @access private
* @var intiger
*/
private $addon_index;
/**
* Current Addon Index
* @since 2.0
* @access private
* @var intiger
*/
private $addon_name;
/**
* Current Addon Index
* @since 2.0
* @access private
* @var array
*/
private $settings = array();
/**
* Current Addon Index
* @since 2.0
* @access private
* @var array
*/
private $options = array();
/**
* Current Addon Index
* @since 2.0
* @access private
* @var bool
*/
private $error = false;
/**
* Addons
*
* @var array
*/
private $addons = array();
/**
* Construct
*/
function __construct($post, $default)
{
$post = isset($post) ? $post : [];
if (isset($post['type']))
{
$this->type = $post['type'];
}
if (isset($post['settings']))
{
$this->settings = $post['settings'];
}
if (isset($post['rowIndex']))
{
$this->row_index = $post['rowIndex'];
}
if (isset($post['colIndex']))
{
$this->column_index = $post['colIndex'];
}
if (isset($post['addonIndex']))
{
$this->addon_index = $post['addonIndex'];
}
if (isset($post['addonName']))
{
$this->addon_name = $post['addonName'];
}
if ($this->type === 'row' || $this->type === 'inner_row')
{
$this->options = $default['attr'];
}
elseif ($this->type === 'column' || $this->type === 'inner_column')
{
$this->options = $default['attr'];
}
elseif ($this->type === 'addon' || $this->type === 'inner_addon')
{
$this->options = $default[$this->addon_name]['attr'];
$this->addon_raw = $default[$this->addon_name];
}
elseif ($this->type === 'list')
{
$this->addons = $default;
}
}
/**
* Ajax request call back
* @since 2.0
* @return JSON
*/
public function get_ajax_request()
{
$result = new stdClass;
if ($this->type === 'list')
{
$result->categories = $this->get_addon_categories($this->addons);
}
$result->type = $this->type;
$result->rowIndex = $this->row_index;
$result->columnIndex = $this->column_index;
$result->addonIndex = $this->addon_index;
$result->addonName = $this->addon_name;
$result->data = $this->get_settings_result();
$result->status = true;
return json_encode($result);
}
/**
* Get settings data
* @since 2.0
* @access private
* @return array|string
*/
private function get_addon_categories($addons)
{
$categories = array();
foreach ($addons as $addon)
{
if (isset($addon['category']))
{
$categories[] = $addon['category'];
}
}
$new_array = array_count_values($categories);
$result[0]['name'] = 'All';
$result[0]['count'] = count((array) $addons);
if (count((array) $new_array))
{
$i = 1;
foreach ($new_array as $key => $row)
{
$result[$i]['name'] = $key;
$result[$i]['count'] = $row;
$i = $i + 1;
}
}
return $result;
}
/**
* Get settings data
* @since 2.0
* @access private
* @return array|string
*/
private function get_settings_result()
{
switch ($this->type)
{
case 'list':
return $this->get_addons_array_list();
break;
case 'row':
case 'column':
case 'addon':
case 'inner_row':
case 'inner_column':
case 'inner_addon':
return $this->get_inputs_output_html();
break;
default:
return 'No related settings found';
break;
}
}
/**
* Array of addons list
* @since 2.0
* @access private
* @return array
*/
private function get_addons_array_list()
{
return array_values($this->addons);
}
/**
* HTML of row/column/addons settings inputs
* @since 2.0
* @access private
* @return string
*/
private function get_inputs_output_html()
{
$i = 0;
$j = 0;
$addon_title = $this->addon_raw['title'];
$fieldsets = array();
foreach ($this->options as $key => $option)
{
$fieldsets[$key] = $option;
}
$output = '';
if (count((array) $fieldsets))
{
$output .= '<div class="sp-pagebuilder-fieldset">';
$output .= '<ul class="sp-pagebuilder-nav sp-pagebuilder-nav-tabs">';
foreach ($fieldsets as $key => $value)
{
$output .= '<li class="' . (($i === 0)?"active":"") . '"><a href="#sp-pagebuilder-tab-' . $key . '" aria-controls="' . $key . '" data-toggle="tab">' . ucfirst($key) . '</a></li>';
$i++;
}
$output .= '</ul>';
$output .= '<div class="tab-content">';
foreach ($fieldsets as $key => $value)
{
$output .= '<div class="tab-pane ' . (($j === 0)? "active":"") . '" id="sp-pagebuilder-tab-' . $key . '">';
$output .= $this->get_input_fields($key, $addon_title);
$output .= '</div>';
$j++;
}
$output .= '</div>';
$output .= '</div>';
}
return $output;
}
/**
* Get input fileds
* @since 2.0
* @access private
* @return string
*/
private function get_input_fields($filedset = '', $title = '')
{
if (!$filedset)
{
return;
}
$options = $this->options;
$output = '';
foreach ($options[$filedset] as $key => $option)
{
if (isset($option['attr']) && is_array($option['attr']))
{
$output .= $this->get_grouped_input_fields($key, $option, $title);
}
else
{
if (isset($this->settings[ $key ]))
{
$option['std'] = $this->settings[ $key ];
}
$output .= '<div class="sp-pagebuilder-parent-input-field" data-addon_title="' . $title . '">';
$output .= $this->get_input_field_html($key, $option);
$output .= '</div>';
}
}
return $output;
}
/**
* Input filed based on type
* @since 2.0
* @access private
* @return string
*/
private function get_input_field_html($name, $options)
{
$class_name = 'SpType' . ucfirst($options['type']);
return $class_name::getInput($name, $options);
}
/**
* Grouped input filed generator
* @since 2.0
* @access private
* @return string
*/
private function get_grouped_input_fields($name, $options, $title = '')
{
$grouped = array();
if (isset($this->settings[$name]))
{
$grouped = $this->settings[$name];
}
elseif (isset($options['addon_name']) && $options['addon_name'])
{
$name = $options['addon_name'];
if (isset($this->settings[$name]))
{
$grouped = $this->settings[$name];
}
}
$count = count((array) $grouped);
if ($count <= 0)
{
$count = 1;
}
$output = '';
if (isset($options['title']) && $options['title'] != '')
{
$output .= '<div class="sp-pagebuilder-grouped-wrap sp-pagebuilder-parent-input-field sp-pagebuilder-has-group-title" data-addon_title="' . $title . '" data-field_name="' . $name . '">';
}
else
{
$output .= '<div class="sp-pagebuilder-grouped-wrap sp-pagebuilder-parent-input-field" data-addon_title="' . $title . '" data-field_name="' . $name . '">';
}
if (isset($options['title']) && $options['title'] != '')
{
$output .= '<h4 class="sp-pagebuilder-group-title">' . $options['title'] . '</h4>';
}
$output .= '<a href="#" class="sp-pagebuilder-add-grouped-item sp-pagebuilder-btn sp-pagebuilder-btn-warning sp-pagebuilder-btn-sm"><i class="fa fa-plus"></i> Add New</a>';
$output .= '<div class="sp-pagebuilder-grouped sp-pagebuilder-grouped-items grouped-' . $name . '" data-field_no="' . ($count - 1) . '">';
for ($i = 0; $i < $count; $i++)
{
$output .= '<div class="sp-pagebuilder-grouped-item">';
$output .= '<div class="sp-pagebuilder-repeatable-toggler">';
$output .= '<span class="sp-pagebuilder-move-repeatable"><i class="fa fa-ellipsis-v"></i></span>';
$output .= '<h4 class="sp-pagebuilder-repeatable-item-title">Item ' . ($i + 1) . '</h4>';
$output .= '<span class="sp-pagebuilder-remove-grouped-item"><a href="#"><i class="fa fa-times"></i></a></span>';
$output .= '<span class="sp-pagebuilder-clone-grouped-item"><a href="#"><i class="fa fa-clone"></i></a></span>';
$output .= '</div>';
$output .= '<div class="sp-pagebuilder-grouped-item-collapse" style="display:none;">';
foreach ($options['attr'] as $key => $option)
{
if (isset($grouped[$i][$key]))
{
$option['std'] = $grouped[$i][$key];
}
$key = $name . '[' . $i . '][' . $key . ']';
$output .= '<div class="sp-pagebuilder-repeatable-input-field">';
$output .= $this->get_input_field_html($key, $option);
$output .= '</div>';
}
$output .= '</div>';
$output .= '</div>';
}
$output .= '</div>';
$output .= '</div>';
return $output;
}
}