Current File : /home/pacjaorg/.trash/administrator/components/com_sppagebuilder/builder/classes/addon.php |
<?php
/**
* @package SP Page Builder
* @author JoomShaper http://www.joomshaper.com
* @copyright Copyright (c) 2010 - 2016 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
*/
//no direct accees
defined ('_JEXEC') or die ('Restricted access');
require_once __DIR__ .'/base.php';
require_once __DIR__ .'/config.php';
$isSite = JFactory::getApplication()->isSite();
if ($isSite) {
if(!class_exists('SppagebuilderHelper')) {
require_once JPATH_ROOT . '/components/com_sppagebuilder/helpers/helper.php';
}
require_once JPATH_ROOT . '/components/com_sppagebuilder/parser/addon-parser.php';
}
class SpPageBuilderAddonHelper {
public static function __( $json = '[]', $frontend = false ) {
$datas = json_decode($json);
if (!count((array) $datas)) return $json;
$uniqueId = strtotime('now');
$first_row = $datas[0];
if (!isset($first_row->id)) {
foreach ($datas as &$row){
self::rowFallback($row, $uniqueId);
foreach ($row->columns as &$column){
self::columnFallback($column, $uniqueId);
foreach ($column->addons as &$addon){
// Inner Row data regenerate
if (isset($addon->type) && $addon->type == 'sp_row') {
self::rowFallback($addon, $uniqueId, true);
foreach ($addon->columns as &$column) {
self::columnFallback($column, $uniqueId);
foreach ($column->addons as &$addon) {
self::addonFallback($addon, $uniqueId);
}
}
} else {
self::addonFallback($addon, $uniqueId);
}
}
}
}
}
// Frontend editing
if($frontend) {
return self::getFontendEditingPage(json_encode($datas));
}
return json_encode($datas);
}
// Row data regenerate for version < 2.0
public static function rowFallback( &$row, &$id, $inner = false ) {
$row->id = $id;
$row->visibility = (isset($row->disable) && $row->disable)?'':1;
if ($row->layout != '12'){
$chars = str_split($row->layout);
$row->layout = join(',',$chars);
}
$row->columns = $row->attr;
if (!$inner) {
$row->collapse = '';
$row->title = 'Row';
unset($row->type);
unset($row->disable);
} else {
$row->type = 'inner_row';
}
$id = $id + 1;
unset($row->attr);
}
// Column data regenerate for version < 2.0
public static function columnFallback( &$column, &$id ) {
$column->id = $id;
$column->addons = $column->attr;
$column->visibility = 1;
$column->class_name = str_replace('column-parent ','', $column->class_name);
$id = $id + 1;
unset($column->settings->sortableitem);
unset($column->attr);
unset($column->type);
}
// Addon data regenerate for version < 2.0
public static function addonFallback( &$addon, &$id ) {
$addon->id = $id;
$addon->settings = $addon->atts;
$addon->visibility = 1;
if(count((array) $addon->scontent)) {
$settings = array();
foreach ( $addon->scontent as $ops ) {
$settings[] = $ops->atts;
}
if(isset($form_fields[$addon->name]['attr']['repetable_item']['addon_name'])) {
$addon->settings->{$form_fields[$addon->name]['attr']['repetable_item']['addon_name']} = $settings;
} else if(isset($addon->scontent[0]->name) && $addon->scontent[0]->name) {
$addon->settings->{$addon->scontent[0]->name} = $settings;
}
}
$id = $id + 1;
unset($addon->atts);
unset($addon->scontent);
}
public static function getFontendEditingPage($page = []) {
$datas = json_decode($page);
if ( !count((array) $datas) ) return $page;
foreach ( $datas as &$row ){
foreach ( $row->columns as &$column) {
foreach ( $column->addons as &$addon ) {
if (isset( $addon->type ) && ( $addon->type === 'sp_row' || $addon->type === 'inner_row' ) ) {
foreach ( $addon->columns as &$column ) {
foreach ( $column->addons as &$addon ) {
$addon_data = self::getAddonContent($addon);
if( !isset( $addon_data['jsTemplate'] ) ) {
$addon->htmlContent = $addon_data['html'];
$addon->assets = $addon_data['assets'];
}
}
}
} else {
$addon_data = self::getAddonContent($addon);
if( !isset( $addon_data['jsTemplate'])){
$addon->htmlContent = $addon_data['html'];
$addon->assets = $addon_data['assets'];
}
}
}
}
}
return json_encode( $datas );
}
public static function getAddonContent( $addon ) {
$addon_name = $addon->name;
$class_name = 'SppagebuilderAddon' . ucfirst( $addon_name );
$addon_path = AddonParser::getAddonPath( $addon_name );
$addonFullPath = $addon_path.'/site.php';
if(!file_exists($addonFullPath)){
return array(
'html' => '<div class="remove-addon-notice"><h4>Addon files have been removed or don’t exist in the current template or your site.</h4></div>',
'assets' => ''
);
}
require_once $addonFullPath;
if ( class_exists( $class_name ) ) {
if ( method_exists( $class_name, 'getTemplate' ) ) {
return array( 'jsTemplate' => true );
}
}
$addon_options = array();
if((!isset($addon->type) || $addon->type !== 'inner_row') && isset($addon_list[$addon->name]['attr']) && $addon_list[$addon->name]['attr']) {
$addon_groups = $addon_list[$addon->name]['attr'];
if (is_array($addon_groups)) {
foreach ($addon_groups as $addon_group) {
$addon_options += $addon_group;
}
}
}
foreach ($addon->settings as $key => $setting) {
if (isset($setting->md)) {
$md = isset($setting->md) ? $setting->md : "";
$sm = isset($setting->sm) ? $setting->sm : "";
$xs = isset($setting->xs) ? $setting->xs : "";
$setting = $md;
$addon->settings->{$key . '_sm'} = $sm;
$addon->settings->{$key . '_xs'} = $xs;
}
if(isset($addon_options[$key]['selector'])) {
$addon_selector = $addon_options[$key]['selector'];
if(isset($addon->settings->{$key}) && !empty($addon->settings->{$key})) {
$selector_value = $addon->settings->{$key};
$addon->settings->{$key . '_selector'} = str_replace('{{ VALUE }}', $selector_value, $addon_selector);
}
}
// Repeatable
if( (!isset($addon->type) || $addon->type !== 'inner_row') && (($key == 'sp_'. $addon->name .'_item') || ($key == $addon->name .'_item')) ) {
if(count((array) $setting)) {
foreach ($setting as $options) {
foreach ($options as $key2 => $opt) {
if (isset($opt->md)) {
$md = isset($opt->md) ? $opt->md : "";
$sm = isset($opt->sm) ? $opt->sm : "";
$xs = isset($opt->xs) ? $opt->xs : "";
$opt = $md;
$options->{$key2 . '_sm'} = $sm;
$options->{$key2 . '_xs'} = $xs;
}
if(isset($addon_options[$key]['attr'][$key2]['selector'])) {
$addon_selector = $addon_options[$key]['attr'][$key2]['selector'];
if(isset($options->{$key2}) && !empty($options->{$key2})) {
$selector_value = $options->{$key2};
$options->{$key2 . '_selector'} = str_replace('{{ VALUE }}', $selector_value, $addon_selector);
}
}
}
}
}
}
}
$output = '';
$output .= JLayoutHelper::render( 'addon.start', array( 'addon' => $addon ) ); // start addon
$assets = array();
$css = JLayoutHelper::render( 'addon.css', array( 'addon' => $addon ) );
if ( class_exists( $class_name ) ) {
$addon_obj = new $class_name($addon); // initialize addon class
$output .= $addon_obj->render();
if (method_exists($class_name, 'css')) {
$css .= $addon_obj->css();
}
if (method_exists($class_name, 'js')) {
$assets['js'] = $addon_obj->js();
}
} else {
$output .= AddonParser::spDoAddon( AddonParser::generateShortcode($addon, 0, 0));
}
$output .= JLayoutHelper::render('addon.end'); // end addon
if($css) {
$assets['css'] = $css;
}
return array('html'=>$output, 'assets'=>$assets);
}
}