@my wife Roline van der Merwe
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
Builds Complex Joomla Components
/-----------------------------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import the Joomla librarys
jimport('joomla.application.component.modellist');
jimport('joomla.application');
/**
* Get class as the main compilers class
*/
class Get
{
/*
* The Params
*
* @var object
*/
public $params;
/*
* The Compiler Path
*
* @var object
*/
public $compilerPath;
/*
* The Component data
*
* @var object
*/
public $componentData;
/*
* The Language prefix
*
* @var string
*/
public $langPrefix = 'COM_';
/*
* The Language content
*
* @var array
*/
public $langContent = array();
/*
* The Component Code Name
*
* @var string
*/
public $componentCodeName;
/*
* The Component version
*
* @var string
*/
public $component_version;
/*
* The UIKIT Switch
*
* @var boolean
*/
public $uikit = false;
/*
* The UIKIT component checker
*
* @var array
*/
public $uikitComp = array();
/*
* The FOOTABLE Switch
*
* @var boolean
*/
public $footable = false;
/*
* The Google Chart Switch per view
*
* @var array
*/
public $googleChart = array();
/*
* The Google Chart Switch
*
* @var boolean
*/
public $googlechart = false;
/*
* The Import & Export Switch
*
* @var boolean
*/
public $addEximport = false;
/*
* The Tag & History Switch
*
* @var boolean
*/
public $setTagHistory = false;
/*
* The site edit views
*
* @var array
*/
public $siteEditView = array();
/*
* The Language target
*
* @var string
*/
public $lang = 'admin';
/*
* The Build target Switch
*
* @var string
*/
public $target;
/*
* The unique codes
*
* @var array
*/
public $uniquecodes = array();
/*
* The unique keys
*
* @var array
*/
public $uniquekeys = array();
/*
* The Ad contributors Switch
*
* @var boolean
*/
public $addContributors = false;
/*
* The Custom Script Builder
*
* @var array
*/
public $customScriptBuilder = array();
/*
* The Footable Script Builder
*
* @var array
*/
public $footableScripts = array();
/*
* The pathe to the bom file to be used
*
* @var string
*/
public $bomPath;
/*
* The SQL Tweak of admin views
*
* @var array
*/
public $sqlTweak = array();
/*
* The admin views data array
*
* @var array
*/
private $_adminViewData = array();
/*
* The field data array
*
* @var array
*/
private $_fieldData = array();
/*
* The linked admin view tabs
*
* @var array
*/
public $linkedAdminViews = array();
/*
* The Add Ajax Switch
*
* @var boolean
*/
public $addAjax = false;
/*
* The Add Site Ajax Switch
*
* @var boolean
*/
public $addSiteAjax = false;
/*
* The get Module Script Switch
*
* @var array
*/
public $getModule = array();
/*
* The template data
*
* @var array
*/
public $templateData = array();
/*
* The layout data
*
* @var array
*/
public $layoutData = array();
/*
* The Advanced Encryption Switch
*
* @var boolean
*/
public $advancedEncryption = false;
/*
* The Basic Encryption Switch
*
* @var boolean
*/
public $basicEncryption = false;
/*
* The Custom field Switch per view
*
* @var array
*/
public $customFieldScript = array();
/*
* The site main get
*
* @var array
*/
public $siteMainGet = array();
/*
* The site dynamic get
*
* @var array
*/
public $siteDynamicGet = array();
/*
* The get AS lookup
*
* @var array
*/
public $getAsLookup = array();
/*
* The site fields
*
* @var array
*/
public $siteFields = array();
/**
* Constructor
*/
public function __construct($config = array ())
{
if (isset($config) && count($config))
{
// Set the params
$this->params = JComponentHelper::getParams('com_componentbuilder');
// load the compiler path
$this->compilerPath = $this->params->get('compiler_folder_path', JPATH_COMPONENT_ADMINISTRATOR.'/compiler');
// get the component data
$this->componentData = $this->getComponentData($config['componentId']);
return true;
}
return false;
}
/*
* get all Component Data
*
* @param int $id The component ID
*
* @return oject The component data
*
*/
public function getComponentData($id)
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query->select('a.*');
$query->from('#__componentbuilder_component AS a');
$query->where($db->quoteName('a.id') . ' = '. $db->quote($id));
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects
$component = $db->loadObject();
// set lang prefix
$this->langPrefix .= ComponentbuilderHelper::safeString($component->name_code,'U');
// set component code name
$this->componentCodeName = ComponentbuilderHelper::safeString($component->name_code);
// set component sales name
$component->sales_name = ComponentbuilderHelper::safeString($component->system_name);
// ensure version naming is correct
$this->component_version = preg_replace('/[^0-9.]+/', '', $component->component_version);
// ser the addfolders data
$addfolders = json_decode($component->addfolders,true);
if (ComponentbuilderHelper::checkArray($addfolders))
{
foreach ($addfolders as $option => $values)
{
foreach ($values as $nr => $value)
{
$component->folders[$nr][$option] = $value;
}
}
unset($component->addfolders);
}
// ser the addfiles data
$addfiles = json_decode($component->addfiles,true);
if (ComponentbuilderHelper::checkArray($addfiles))
{
foreach ($addfiles as $option => $values)
{
foreach ($values as $nr => $value)
{
$component->files[$nr][$option] = $value;
}
}
unset($component->addfiles);
}
// set the uikit switch
if ($component->adduikit)
{
$this->uikit = true;
}
// set the footable switch
if ($component->addfootable)
{
$this->footable = true;
}
// ser the addcustommenu data
$addcustommenus = json_decode($component->addcustommenus,true);
if (ComponentbuilderHelper::checkArray($addcustommenus))
{
foreach ($addcustommenus as $option => $values)
{
foreach ($values as $nr => $value)
{
$component->custommenus[$nr][$option] = $value;
}
}
unset($component->addcustommenus);
}
// tweak the mysql dump settings if needed
$sql_tweak = json_decode($component->sql_tweak,true);
if (ComponentbuilderHelper::checkArray($sql_tweak))
{
$component->sql_tweak = array();
foreach ($sql_tweak as $option => $values)
{
foreach ($values as $nr => $value)
{
if ((string)(int)$value == $value)
{
$component->sql_tweak[$nr][$option] = (int) $value;
}
else
{
$component->sql_tweak[$nr][$option] = $value;
}
}
}
// build the tweak settings
$this->setSqlTweaking($component->sql_tweak);
unset($component->sql_tweak);
}
// set the admin_view data
$admin_views = json_decode($component->addadmin_views,true);
if (ComponentbuilderHelper::checkArray($admin_views))
{
foreach ($admin_views as $option => $values)
{
foreach ($values as $nr => $value)
{
if ((string)(int)$value == $value)
{
$component->admin_views[$nr][$option] = (int) $value;
}
else
{
$component->admin_views[$nr][$option] = $value;
}
}
}
unset($component->addadmin_views);
// sort the views acording to order
usort($component->admin_views, function($a, $b)
{
if ($a['order'] != 0 && $b['order'] != 0)
{
return $a['order'] - $b['order'];
}
elseif ($b['order'] != 0 && $a['order'] == 0)
{
return 1;
}
elseif ($a['order'] != 0 && $b['order'] == 0)
{
return 0;
}
return 1;
});
// load the view and field data
foreach ($component->admin_views as $key => &$view)
{
if ($view['port'] && !$this->addEximport)
{
$this->addEximport = true;
}
if ($view['history'] && !$this->setTagHistory)
{
$this->setTagHistory = true;
}
if ($view['edit_create_site_view'])
{
$this->siteEditView[$view['adminview']] = true;
}
// TODO this is a temp fix until front view is added
$view['view'] = $view['adminview'];
$view['settings'] = $this->getAdminViewData($view['view']);
}
unset($component->addadmin_view);
}
// set the site_view data
$site_views = json_decode($component->addsite_views,true);
if (ComponentbuilderHelper::checkArray($site_views))
{
foreach ($site_views as $option => $values)
{
foreach ($values as $nr => $value)
{
if ((string)(int)$value == $value)
{
$component->site_views[$nr][$option] = (int) $value;
}
else
{
$component->site_views[$nr][$option] = $value;
}
}
}
unset($component->addsite_views);
$this->lang = 'site';
$this->target = 'site';
// load the view and field data
foreach ($component->site_views as $key => &$view)
{
// TODO this is a temp fix until front view is added
$view['view'] = $view['siteview'];
$view['settings'] = $this->getCustomViewData($view['view']);
}
}
// set the custom_admin_views data
$custom_admin_views = json_decode($component->addcustom_admin_views,true);
if (ComponentbuilderHelper::checkArray($custom_admin_views))
{
foreach ($custom_admin_views as $option => $values)
{
foreach ($values as $nr => $value)
{
if ((string)(int)$value == $value)
{
$component->custom_admin_views[$nr][$option] = (int) $value;
}
else
{
$component->custom_admin_views[$nr][$option] = $value;
}
}
}
unset($component->addcustom_admin_views);
$this->lang = 'admin';
$this->target = 'custom_admin';
// load the view and field data
foreach ($component->custom_admin_views as $key => &$view)
{
// TODO this is a temp fix until front view is added
$view['view'] = $view['customadminview'];
$view['settings'] = $this->getCustomViewData($view['view'], 'custom_admin_view');
}
}
// ser the config data
$addconfig = json_decode($component->addconfig,true);
if (ComponentbuilderHelper::checkArray($addconfig))
{
foreach ($addconfig as $option => $values)
{
foreach ($values as $nr => $value)
{
$component->config[$nr]['alias'] = 0;
$component->config[$nr]['title'] = 0;
if ($option == 'field')
{
// load the field data
$component->config[$nr]['settings'] = $this->getFieldData($value);
}
else
{
$component->config[$nr][$option] = $value;
}
}
}
unset($component->addconfig);
}
// check if any contributors is to be added
$contributors = json_decode($component->addcontributors,true);
if (ComponentbuilderHelper::checkArray($contributors))
{
$this->addContributors = true;
foreach ($contributors as $option => $values)
{
foreach ($values as $nr => $value)
{
$component->contributors[$nr][$option] = $value;
}
}
unset($component->addcontributors);
}
// check if version updating is set
$version_update = json_decode($component->version_update,true);
if (ComponentbuilderHelper::checkArray($version_update))
{
$component->version_update = array();
foreach ($version_update as $option => $values)
{
foreach ($values as $nr => $value)
{
$component->version_update[$nr][$option] = $value;
}
}
}
// add_css
if ($component->add_css == 1)
{
$this->customScriptBuilder['component_css'] = base64_decode($component->css);
unset($component->css);
}
else
{
$this->customScriptBuilder['component_css'] = '';
}
// add_php_helper
if ($component->add_php_helper_admin == 1)
{
$this->lang = 'admin';
$this->customScriptBuilder['component_php_helper_admin'] = "\n\n".$this->setCustomContentLang(base64_decode($component->php_helper_admin));
unset($component->php_helper);
}
else
{
$this->customScriptBuilder['component_php_helper_admin'] = '';
}
// add_admin_event
if ($component->add_admin_event == 1)
{
$this->lang = 'admin';
$this->customScriptBuilder['component_php_admin_event'] = $this->setCustomContentLang(base64_decode($component->php_admin_event));
unset($component->php_admin_event);
}
else
{
$this->customScriptBuilder['component_php_admin_event'] = '';
}
// add_php_helper_site
if ($component->add_php_helper_site == 1)
{
$this->lang = 'site';
$this->customScriptBuilder['component_php_helper_site'] = "\n\n".$this->setCustomContentLang(base64_decode($component->php_helper_site));
unset($component->php_helper);
}
else
{
$this->customScriptBuilder['component_php_helper_site'] = '';
}
// add_site_event
if ($component->add_site_event == 1)
{
$this->lang = 'site';
$this->customScriptBuilder['component_php_site_event'] = $this->setCustomContentLang(base64_decode($component->php_site_event));
unset($component->php_site_event);
}
else
{
$this->customScriptBuilder['component_php_site_event'] = '';
}
// add_sql
if ($component->add_sql == 1)
{
$this->customScriptBuilder['sql']['component_sql'] = base64_decode($component->sql);
unset($component->sql);
}
// bom
if (ComponentbuilderHelper::checkString($component->bom))
{
$this->bomPath = $this->compilerPath.'/'.$component->bom;
unset($component->bom);
}
else
{
$this->bomPath = $this->compilerPath.'/default.txt';
}
// README
if ($component->addreadme)
{
$component->readme = base64_decode($component->readme);
}
else
{
$component->readme = '';
}
// dashboard methods
if ($component->add_php_dashboard_methods)
{
// load the php for the dashboard model
$component->php_dashboard_methods = base64_decode($component->php_dashboard_methods);
// check if dashboard_tab is set
$dashboard_tab = json_decode($component->dashboard_tab,true);
if (ComponentbuilderHelper::checkArray($dashboard_tab))
{
$component->dashboard_tab = array();
$nowLang = $this->lang;
$this->lang = 'admin';
foreach ($dashboard_tab as $option => $values)
{
foreach ($values as $nr => $value)
{
if ('html' == $option)
{
$value = $this->setCustomContentLang($value);
}
$component->dashboard_tab[$nr][$option] = $value;
}
}
$this->lang = $nowLang;
}
else
{
$component->dashboard_tab = '';
}
}
else
{
$component->php_dashboard_methods = '';
$component->dashboard_tab = '';
}
// return the found component data
return $component;
}
/*
* To limit the SQL Demo date build in the views
*
* @param array $settings Teaking array.
*
* @return void
*
*/
public function setSqlTweaking($settings)
{
if (ComponentbuilderHelper::checkArray($settings))
{
foreach($settings as $setting)
{
// should sql dump be added
if (1 == $setting['add_sql'])
{
// add sql (by option)
if (2 == $setting['add_sql_options'])
{
// rest always
$id_array = array();
// by id (first remove backups)
$ids = $setting['ids'];
// now get the ids
if (strpos($ids, ',') !== false)
{
$id_array = (array) array_map('trim',explode(',', $ids));
}
else
{
$id_array[] = trim($ids);
}
$id_array_new = array();
// check for ranges
foreach ($id_array as $key => $id)
{
if (strpos($id, '=>') !== false)
{
$id_range = (array) array_map('trim', explode('=>', $id));
unset($id_array[$key]);
// build range
if (count($id_range) == 2)
{
$range = range($id_range[0],$id_range[1]);
$id_array_new = array_merge($id_array_new,$range);
}
}
}
if (ComponentbuilderHelper::checkArray($id_array_new))
{
$id_array = array_merge($id_array_new, $id_array);
}
// final fixing to array
if (ComponentbuilderHelper::checkArray($id_array))
{
// uniqe
$id_array = array_unique($id_array, SORT_NUMERIC);
// sort
sort($id_array, SORT_NUMERIC);
// now set it to global
$this->sqlTweak[ (int) $setting['adminview']]['where'] = implode(',', $id_array);
}
}
}
else
{
// remove all sql dump options
$this->sqlTweak[ (int) $setting['adminview']]['remove'] = true;
}
}
}
}
/*
* Get all Admin View Data
*
* @param int $id The view ID
*
* @return oject The view data
*
*/
public function getAdminViewData($id)
{
if (!isset($this->_adminViewData[$id]))
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query->select('a.*');
$query->from('#__componentbuilder_admin_view AS a');
$query->where($db->quoteName('a.id') . ' = '. (int) $id);
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$view = $db->loadObject();
// reset fields
$view->fields = array();
// setup view name to use in storing the data
$name_single = ComponentbuilderHelper::safeString($view->name_single);
$name_list = ComponentbuilderHelper::safeString($view->name_list);
// setup token check
$this->customScriptBuilder['token'][$name_single] = false;
$this->customScriptBuilder['token'][$name_list] = false;
// load the values form params
$permissions = json_decode($view->addpermissions,true);
unset($view->addpermissions);
$tabs = json_decode($view->addtabs,true);
unset($view->addtabs);
$fields = json_decode($view->addfields,true);
unset($view->addfields);
$conditions = json_decode($view->addconditions,true);
unset($view->addconditions);
$linked_views = json_decode($view->addlinked_views,true);
unset($view->addlinked_views);
$tables = json_decode($view->addtables,true);
unset($view->addtables);
// sort the values
if (ComponentbuilderHelper::checkArray($tables))
{
foreach ($tables as $option => $values)
{
foreach ($values as $nr => $value)
{
$view->tables[$nr][$option] = $value;
}
}
}
if (ComponentbuilderHelper::checkArray($tabs))
{
foreach ($tabs as $option => $values)
{
foreach ($values as $nr => $value)
{
$fix = $nr+1;
$view->tabs[$fix] = $value;
}
}
}
if (ComponentbuilderHelper::checkArray($permissions))
{
foreach ($permissions as $option => $values)
{
foreach ($values as $nr => $value)
{
$view->permissions[$nr][$option] = $value;
}
}
}
if (ComponentbuilderHelper::checkArray($fields))
{
foreach ($fields as $option => $values)
{
foreach ($values as $nr => $value)
{
$view->fields[$nr][$option] = (int) $value;
}
}
// sort the fields acording to order
usort($view->fields, function($a, $b)
{
if ($a['order_list'] != 0 && $b['order_list'] != 0)
{
return $a['order_list'] - $b['order_list'];
}
elseif ($b['order_list'] != 0 && $a['order_list'] == 0)
{
return 1;
}
elseif ($a['order_list'] != 0 && $b['order_list'] == 0)
{
return 0;
}
return 1;
});
// load the field data
foreach ($view->fields as $key => &$field)
{
$field['settings'] = $this->getFieldData($field['field'],$name_single,$name_list);
}
}
if (ComponentbuilderHelper::checkArray($conditions))
{
foreach ($conditions as $condition => $conditionValues)
{
foreach ($conditionValues as $nr => $conditionValue)
{
if ($condition == 'target_field')
{
if (ComponentbuilderHelper::checkArray($conditionValue) && ComponentbuilderHelper::checkArray($view->fields))
{
foreach ($conditionValue as $fieldKey => $fieldId)
{
foreach ($view->fields as $fieldValues)
{
if ((int) $fieldValues['field'] == (int) $fieldId)
{
// load the field details
$required = ComponentbuilderHelper::getBetween($fieldValues['settings']->xml,'required="','"');
$required = ($required == true) ? 'yes' : 'no';
$filter = ComponentbuilderHelper::getBetween($fieldValues['settings']->xml,'filter="','"');
$filter = ComponentbuilderHelper::checkString($filter) ? $filter : 'none';
// get name
$name = ComponentbuilderHelper::getBetween($fieldValues['settings']->xml,'name="','"');
$name = ComponentbuilderHelper::checkString($name) ? $name : $fieldValues['settings']->name;
// get type
$type = ComponentbuilderHelper::getBetween($fieldValues['settings']->xml,'type="','"');
$type = ComponentbuilderHelper::checkString($type) ? $type : $fieldValues['settings']->type_name;
// set the field name
$conditionValue[$fieldKey] = array(
'name' => ComponentbuilderHelper::safeString($name),
'type' => ComponentbuilderHelper::safeString($type),
'required' => $required,
'filter' => $filter
);
break;
}
}
}
}
}
if ($condition == 'match_field')
{
foreach ($view->fields as $fieldValue)
{
if ((int) $fieldValue['field'] == (int) $conditionValue)
{
// get name
$name = ComponentbuilderHelper::getBetween($fieldValue['settings']->xml,'name="','"');
$name = ComponentbuilderHelper::checkString($name) ? $name : $fieldValue['settings']->name;
// get type
$type = ComponentbuilderHelper::getBetween($fieldValue['settings']->xml,'type="','"');
$type = ComponentbuilderHelper::checkString($type) ? $type : $fieldValue['settings']->type_name;
// set the field details
$view->conditions[$nr]['match_name'] = ComponentbuilderHelper::safeString($name);
$view->conditions[$nr]['match_type'] = ComponentbuilderHelper::safeString($type);
$view->conditions[$nr]['match_xml'] = $fieldValue['settings']->xml;
break;
}
}
}
// set condition values
$view->conditions[$nr][$condition] = $conditionValue;
}
}
}
// set linked views
$linked_views_sorted = null;
if (ComponentbuilderHelper::checkArray($linked_views))
{
$linked_views_sorted = array();
foreach ($linked_views as $option => $values)
{
foreach ($values as $nr => $value)
{
$linked_views_sorted[$nr][$option] = $value;
}
}
}
unset($linked_views);
// setup linked views to global data sets
$this->linkedAdminViews[$name_single] = $linked_views_sorted;
unset($linked_views_sorted);
// add_javascript_view_file
if ($view->add_javascript_view_file == 1)
{
$view->javascript_view_file = base64_decode($view->javascript_view_file);
$this->customScriptBuilder['view_file'][$name_single] = $view->javascript_view_file;
if (strpos($view->javascript_view_file,"token") !== false && strpos($view->javascript_view_file,"task=ajax") !== false)
{
if (!$this->customScriptBuilder['token'][$name_single])
{
$this->customScriptBuilder['token'][$name_single] = true;
}
}
unset($view->javascript_view_file);
}
// add_javascript_view_footer
if ($view->add_javascript_view_footer == 1)
{
$view->javascript_view_footer = base64_decode($view->javascript_view_footer);
if (!isset($this->customScriptBuilder['view_footer'][$name_single]))
{
$this->customScriptBuilder['view_footer'][$name_single] = '';
}
$this->customScriptBuilder['view_footer'][$name_single] .= $view->javascript_view_footer;
if (strpos($view->javascript_view_footer,"token") !== false && strpos($view->javascript_view_footer,"task=ajax") !== false)
{
if (!$this->customScriptBuilder['token'][$name_single])
{
$this->customScriptBuilder['token'][$name_single] = true;
}
}
unset($view->javascript_view_footer);
}
// add_javascript_view_file
if ($view->add_javascript_views_file == 1)
{
$view->javascript_views_file = base64_decode($view->javascript_views_file);
$this->customScriptBuilder['views_file'][$name_list] = $view->javascript_views_file;
if (strpos($view->javascript_views_file,"token") !== false && strpos($view->javascript_views_file,"task=ajax") !== false)
{
if (!$this->customScriptBuilder['token'][$name_list])
{
$this->customScriptBuilder['token'][$name_list] = true;
}
}
unset($view->javascript_views_file);
}
// add_javascript_views_footer
if ($view->add_javascript_views_footer == 1)
{
$view->javascript_views_footer = base64_decode($view->javascript_views_footer);
$this->customScriptBuilder['views_footer'][$name_list] .= $view->javascript_views_footer;
if (strpos($view->javascript_views_footer,"token") !== false && strpos($view->javascript_views_footer,"task=ajax") !== false)
{
if (!$this->customScriptBuilder['token'][$name_list])
{
$this->customScriptBuilder['token'][$name_list] = true;
}
}
unset($view->javascript_views_footer);
}
// add_css_view
if ($view->add_css_view == 1)
{
$this->customScriptBuilder['css_view'][$name_single] .= base64_decode($view->css_view);
unset($view->css_view);
}
// add_css_views
if ($view->add_css_views == 1)
{
$this->customScriptBuilder['css_views'][$name_list] .= base64_decode($view->css_views);
unset($view->css_views);
}
$this->lang = 'admin';
$addArray = array('php_getitem','php_save','php_postsavehook','php_getitems','php_getlistquery','php_allowedit','php_before_delete','php_after_delete','php_batchcopy','php_batchmove');
foreach ($addArray as $scripter)
{
if (isset($view->{'add_'.$scripter}) && $view->{'add_'.$scripter} == 1)
{
$this->customScriptBuilder[$scripter][$name_single] = $this->setCustomContentLang(base64_decode($view->$scripter));
unset($view->$scripter);
}
}
// add_Ajax for this view
if ($view->add_php_ajax == 1)
{
$addAjaxSite = false;
if (isset($this->siteEditView[$id]) && $this->siteEditView[$id])
{
// we should add this site ajax to fron ajax
$addAjaxSite = true;
if (!isset($this->addSiteAjax) || !$this->addSiteAjax)
{
$this->addSiteAjax = true;
}
}
// check if controller input as been set
$ajax_input = json_decode($view->ajax_input,true);
if (ComponentbuilderHelper::checkArray($ajax_input))
{
foreach ($ajax_input as $option => $values)
{
foreach ($values as $nr => $value)
{
if ($addAjaxSite)
{
$this->customScriptBuilder['site']['ajax_controller'][$name_single][$nr][$option] = $value;
}
$this->customScriptBuilder['admin']['ajax_controller'][$name_single][$nr][$option] = $value;
}
}
if ($addAjaxSite)
{
$this->customScriptBuilder['site']['ajax_model'][$name_single] = $this->setCustomContentLang(base64_decode($view->php_ajaxmethod));
}
$this->customScriptBuilder['admin']['ajax_model'][$name_single] = $this->setCustomContentLang(base64_decode($view->php_ajaxmethod));
$this->addAjax = true;
unset($view->ajax_input);
}
// unset anyway
unset($view->php_ajaxmethod);
}
// add_sql
if ($view->add_sql == 1)
{
if ($view->source == 1)
{
// build and add the SQL dump
$this->customScriptBuilder['sql'][$name_single] = $this->buildSqlDump($view->tables,$name_single, $id);
unset($view->tables);
}
elseif ($view->source == 2)
{
// add the SQL dump string
$this->customScriptBuilder['sql'][$name_single] = base64_decode($view->sql);
unset($view->sql);
}
}
$this->_adminViewData[$id] = $view;
}
// return the found view data
return $this->_adminViewData[$id];
}
/*
* Get all Custom View Data
*
* @param int $id The view ID
* @param string $table The view table
*
* @return oject The view data
*
*/
public function getCustomViewData($id, $table = 'site_view')
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query->select('a.*');
$query->from('#__componentbuilder_'.$table.' AS a');
$query->where($db->quoteName('a.id') . ' = '. (int) $id);
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$view = $db->loadObject();
if ($table == 'site_view')
{
$this->lang = 'site';
}
else
{
$this->lang = 'admin';
}
// set the default data
$view->default = base64_decode($view->default);
$view->default = $this->setCustomContentLang($view->default);
// fix alias to use in code
$view->code = $this->uniqueCode(ComponentbuilderHelper::safeString($view->alias));
$view->Code = ComponentbuilderHelper::safeString($view->code, 'F');
$view->CODE = ComponentbuilderHelper::safeString($view->code, 'U');
// insure the uikit components are loaded
if (!isset($this->uikitComp[$view->code]))
{
$this->uikitComp[$view->code] = array();
}
$this->uikitComp[$view->code] = ComponentbuilderHelper::getUikitComp($view->default,$this->uikitComp[$view->code]);
// check for footable
if (!isset($this->footableScripts[$this->target][$view->code]) || !$this->footableScripts[$this->target][$view->code])
{
$foundFoo = $this->getFootableScripts($view->default);
if ($foundFoo)
{
$this->footableScripts[$this->target][$view->code] = true;
}
if ($foundFoo && !$this->footableScripts)
{
$this->footable = true;
}
}
// check for get module
if (!isset($this->getModule[$this->target][$view->code]) || !$this->getModule[$this->target][$view->code])
{
$found = $this->getGetModule($view->default);
if ($found)
{
$this->getModule[$this->target][$view->code] = true;
}
}
// setup template array
$this->templateData[$this->target][$view->code] = array();
// setup template and layout data
$this->setTemplateAndLayoutData($view->default,$view->code);
// set the main get data
$main_get = $this->setGetData(array($view->main_get),$view->code);
$view->main_get = $main_get[0];
// set the custom_get data
$view->custom_get = $this->setGetData(json_decode($view->custom_get,true),$view->code);
// set array adding array of scripts
$addArray = array('php_view','php_jview','php_jview_display','php_document','js_document','css_document','css');
foreach ($addArray as $scripter)
{
if (isset($view->{'add_'.$scripter}) && $view->{'add_'.$scripter} == 1)
{
$view->$scripter = base64_decode($view->$scripter);
$view->$scripter = $this->setCustomContentLang($view->$scripter);
// set uikit to views
$this->uikitComp[$view->code] = ComponentbuilderHelper::getUikitComp($view->$scripter,$this->uikitComp[$view->code]);
$this->setTemplateAndLayoutData($view->$scripter,$view->code);
// check for footable
if (!isset($this->footableScripts[$this->target][$view->code]) || !$this->footableScripts[$this->target][$view->code])
{
$foundFoo = $this->getFootableScripts($view->$scripter);
if ($foundFoo)
{
$this->footableScripts[$this->target][$view->code] = true;
}
if ($foundFoo && !$this->footable)
{
$this->footable = true;
}
}
// check for google chart
if (!isset($this->googleChart[$this->target][$view->code]) || !$this->googleChart[$this->target][$view->code])
{
$found = $this->getGoogleChart($view->$scripter);
if ($found)
{
$this->googleChart[$this->target][$view->code] = true;
}
if ($found && !$this->googlechart)
{
$this->googlechart = true;
}
}
// check for get module
if (!isset($this->getModule[$this->target][$view->code]) || !$this->getModule[$this->target][$view->code])
{
$found = $this->getGetModule($view->$scripter);
if ($found)
{
$this->getModule[$this->target][$view->code] = true;
}
}
}
}
// add_Ajax for this view
if (isset($view->add_php_ajax) && $view->add_php_ajax == 1)
{
// check if controller input as been set
$ajax_input = json_decode($view->ajax_input,true);
if (ComponentbuilderHelper::checkArray($ajax_input))
{
foreach ($ajax_input as $option => $values)
{
foreach ($values as $nr => $value)
{
$this->customScriptBuilder[$this->target]['ajax_controller'][$view->code][$nr][$option] = $value;
}
}
$this->customScriptBuilder[$this->target]['ajax_model'][$view->code] = $this->setCustomContentLang(base64_decode($view->php_ajaxmethod));
$this->addSiteAjax = true;
unset($view->ajax_input);
}
// unset anyway
unset($view->php_ajaxmethod);
}
// add the custom buttons
if (isset($view->add_custom_button) && $view->add_custom_button == 1)
{
if (ComponentbuilderHelper::checkString($view->php_model))
{
$view->php_model = base64_decode($view->php_model);
$view->php_model = $this->setCustomContentLang($view->php_model);
}
$view->php_controller = base64_decode($view->php_controller);
$view->php_controller = $this->setCustomContentLang($view->php_controller);
// set the button array
$buttons = json_decode($view->custom_button,true);
unset($view->custom_button);
// sort the values
if (ComponentbuilderHelper::checkArray($buttons))
{
foreach ($buttons as $option => $values)
{
foreach ($values as $nr => $value)
{
$view->custom_buttons[$nr][$option] = $value;
}
}
}
}
// return the found view data
return $view;
}
/*
* Get all Field Data
*
* @param int $id The field ID
* @param string $name_single The view edit or single name
* @param string $name_list The view list name
*
* @return oject The field data
*
*/
public function getFieldData($id,$name_single = null,$name_list = null)
{
if (!isset($this->_fieldData[$id]))
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Order it by the ordering field.
$query->select('a.*');
$query->select($db->quoteName(array('c.name', 'c.properties'),array('type_name','type_properties')));
$query->from('#__componentbuilder_field AS a');
$query->join('LEFT', $db->quoteName('#__componentbuilder_fieldtype', 'c') . ' ON (' . $db->quoteName('a.type') . ' = ' . $db->quoteName('c.id') . ')');
$query->where($db->quoteName('a.id') . ' = '. $db->quote($id));
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$field = $db->loadObject();
// load the values form params
$field->xml = json_decode($field->xml);
// load the type values form type params
$properties = json_decode($field->type_properties,true);
unset($field->type_properties);
if (ComponentbuilderHelper::checkArray($properties))
{
foreach ($properties as $option => $values)
{
foreach ($values as $nr => $value)
{
$field->properties[$nr][$option] = $value;
}
}
}
// check if we have advanced encryption
if (4 == $field->store && (!isset($this->advancedEncryption) || !$this->advancedEncryption))
{
$this->advancedEncryption = true;
}
// check if we have basic encryption
elseif (3 == $field->store && (!isset($this->basicEncryption) || !$this->basicEncryption))
{
$this->basicEncryption = true;
}
// check if we should load scripts for single view
if (ComponentbuilderHelper::checkString($name_single) && !isset($this->customFieldScript[$name_single][$id]))
{
// add_javascript_view_footer
if ($field->add_javascript_view_footer == 1)
{
if(!isset($this->customScriptBuilder['view_footer']))
{
$this->customScriptBuilder['view_footer'] = array();
}
if (!isset($this->customScriptBuilder['view_footer'][$name_single]))
{
$this->customScriptBuilder['view_footer'][$name_single] = '';
}
$this->customScriptBuilder['view_footer'][$name_single] .= "\n".base64_decode($field->javascript_view_footer);
if (strpos($field->javascript_view_footer,"token") !== false && strpos($field->javascript_view_footer,"task=ajax") !== false)
{
if (!isset($this->customScriptBuilder['token'][$name_single]) || !$this->customScriptBuilder['token'][$name_single])
{
if(!isset($this->customScriptBuilder['token']))
{
$this->customScriptBuilder['token'] = array();
}
$this->customScriptBuilder['token'][$name_single] = true;
}
}
unset($field->javascript_view_footer);
}
// add_css_view
if ($field->add_css_view == 1)
{
if (!isset($this->customScriptBuilder['css_view'][$name_single]))
{
$this->customScriptBuilder['css_view'][$name_single] = '';
}
$this->customScriptBuilder['css_view'][$name_single] .= "\n".base64_decode($field->css_view);
unset($field->css_view);
}
// add this only once to view.
$this->customFieldScript[$name_single][$id] = true;
}
else
{
// unset if not needed
unset($field->javascript_view_footer);
unset($field->css_view);
}
// check if we should load scripts for list views
if (ComponentbuilderHelper::checkString($name_list))
{
// add_javascript_views_footer
if ($field->add_javascript_views_footer == 1)
{
$field->javascript_views_footer = base64_decode($field->javascript_views_footer);
$this->customScriptBuilder['views_footer'][$name_list] .= $field->javascript_views_footer;
if (strpos($field->javascript_views_footer,"token") !== false && strpos($field->javascript_views_footer,"task=ajax") !== false)
{
if (!$this->customScriptBuilder['token'][$name_list])
{
$this->customScriptBuilder['token'][$name_list] = true;
}
}
unset($field->javascript_views_footer);
}
// add_css_views
if ($field->add_css_views == 1)
{
if (!isset($this->customScriptBuilder['css_views'][$name_list]))
{
$this->customScriptBuilder['css_views'][$name_list] = '';
}
$this->customScriptBuilder['css_views'][$name_list] .= base64_decode($field->css_views);
unset($field->css_views);
}
}
else
{
// unset if not needed
unset($field->javascript_views_footer);
unset($field->css_views);
}
$this->_fieldData[$id] = $field;
}
// return the found field data
return $this->_fieldData[$id];
}
/*
* Set get Data
*
* @param array $ids The ids of the dynamic get
* @param string $view_code The view code name
*
* @return oject the get dynamicGet data
*
*/
public function setGetData($ids,$view_code)
{
if (ComponentbuilderHelper::checkArray($ids))
{
$ids = implode(',', $ids);
if (ComponentbuilderHelper::checkString($ids))
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query->select('a.*');
$query->from('#__componentbuilder_dynamic_get AS a');
$query->where('a.id IN (' . $ids . ')');
$db->setQuery($query);
$db->execute();
if ($db->getNumRows())
{
$results = $db->loadObjectList();
$typeArray = array(1 => 'LEFT', 2 => 'LEFT OUTER', 3 => 'INNER', 4 => 'RIGHT', 5 => 'RIGHT OUTER');
$operatorArray = array(1 => '=', 2 => '!=', 3 => '<>', 4 => '>', 5 => '<', 6 => '>=', 7 => '<=', 8 => '!<', 9 => '!>', 10 => 'IN', 11 => 'NOT IN');
foreach ($results as $nr => &$result)
{
// add calculations if set
if($result->addcalculation == 1)
{
$result->php_calculation = base64_decode($result->php_calculation);
}
// add php custom scripting (php_before_getitem)
if($result->add_php_before_getitem == 1)
{
if (!isset($this->customScriptBuilder[$this->target.'_php_before_getitem'][$view_code]))
{
$this->customScriptBuilder[$this->target.'_php_before_getitem'][$view_code] = '';
}
$this->customScriptBuilder[$this->target.'_php_before_getitem'][$view_code] .= "\n\n".base64_decode($result->php_before_getitem);
unset($result->php_before_getitem);
}
// add php custom scripting (php_after_getitem)
if($result->add_php_after_getitem == 1)
{
if (!isset($this->customScriptBuilder[$this->target.'_php_after_getitem'][$view_code]))
{
$this->customScriptBuilder[$this->target.'_php_after_getitem'][$view_code] = '';
}
$this->customScriptBuilder[$this->target.'_php_after_getitem'][$view_code] .= "\n\n".base64_decode($result->php_after_getitem);
unset($result->php_after_getitem);
}
// add php custom scripting (php_before_getitems)
if($result->add_php_before_getitems == 1)
{
if (!isset($this->customScriptBuilder[$this->target.'_php_before_getitems'][$view_code]))
{
$this->customScriptBuilder[$this->target.'_php_before_getitems'][$view_code] = '';
}
$this->customScriptBuilder[$this->target.'_php_before_getitems'][$view_code] .= "\n\n".base64_decode($result->php_before_getitems);
unset($result->php_before_getitems);
}
// add php custom scripting (php_after_getitems)
if($result->add_php_after_getitems == 1)
{
if (!isset($this->customScriptBuilder[$this->target.'_php_after_getitems'][$view_code]))
{
$this->customScriptBuilder[$this->target.'_php_after_getitems'][$view_code] = '';
}
$this->customScriptBuilder[$this->target.'_php_after_getitems'][$view_code] .= "\n\n".base64_decode($result->php_after_getitems);
unset($result->php_after_getitems);
}
// add php custom scripting (php_getlistquery)
if($result->add_php_getlistquery == 1)
{
if (!isset($this->customScriptBuilder[$this->target.'_php_getlistquery'][$view_code]))
{
$this->customScriptBuilder[$this->target.'_php_getlistquery'][$view_code] = '';
}
$this->customScriptBuilder[$this->target.'_php_getlistquery'][$view_code] .= "\n\n".base64_decode($result->php_getlistquery);
unset($result->php_getlistquery);
}
// set the getmethod code name
$result->key = ComponentbuilderHelper::safeString($view_code. ' ' .$result->name . ' ' .$result->id);
// reset buckets
$result->main_get = array();
$result->custom_get = array();
// set source data
switch ($result->main_source)
{
case 1:
// set the view data
$result->main_get[0]['selection'] = $this->setDataSelection($result->key,$view_code,$result->view_selection,$result->view_table_main,'a','','view');
$result->main_get[0]['as'] = 'a';
$result->main_get[0]['key'] = $result->key;
unset($result->view_selection);
break;
case 2:
// set the database data
$result->main_get[0]['selection'] = $this->setDataSelection($result->key,$view_code,$result->db_selection,$result->db_table_main,'a','','db');
$result->main_get[0]['as'] = 'a';
$result->main_get[0]['key'] = $result->key;
unset($result->db_selection);
break;
case 3:
// set custom script
$result->main_get[0]['selection'] = array(
'select' => base64_decode($result->php_custom_get),
'from' => '', 'table' => '', 'type' => '');
break;
}
// set join_view_table details
$join_view_table = json_decode($result->join_view_table,true);
unset($result->join_view_table);
$result->join_view_table = array();
if (ComponentbuilderHelper::checkArray($join_view_table))
{
foreach ($join_view_table as $option => $values)
{
foreach ($values as $nr => $value)
{
if (ComponentbuilderHelper::checkString($value))
{
if ($option == 'selection')
{
$on_field_as = '';
$on_field = '';
list($on_field_as,$on_field) = array_map('trim', explode('.',$result->join_view_table[$nr]['on_field']));
$join_field_as = '';
$join_field = '';
list($join_field_as,$join_field) = array_map('trim', explode('.',$result->join_view_table[$nr]['join_field']));
$result->join_view_table[$nr][$option] =
$this->setDataSelection($result->key,$view_code,$value,$result->join_view_table[$nr]['view_table'],$result->join_view_table[$nr]['as'],$result->join_view_table[$nr]['row_type'],'view');
$result->join_view_table[$nr]['key'] = $result->key;
if ($result->join_view_table[$nr]['row_type'] == 1)
{
$result->main_get[] = $result->join_view_table[$nr];
if ($on_field_as == 'a')
{
$this->siteMainGet[$this->target][$view_code][$result->join_view_table[$nr]['as']] = $result->join_view_table[$nr]['as'];
}
else
{
$this->siteDynamicGet[$this->target][$view_code][$result->join_view_table[$nr]['as']][$join_field] = $on_field_as;
}
}
elseif ($result->join_view_table[$nr]['row_type'] == 2)
{
$result->custom_get[] = $result->join_view_table[$nr];
if ($on_field_as != 'a')
{
$this->siteDynamicGet[$this->target][$view_code][$result->join_view_table[$nr]['as']][$join_field] = $on_field_as;
}
}
unset($result->join_view_table[$nr]);
}
else
{
if ($option == 'type')
{
$value = $typeArray[$value];
}
if ($option == 'operator')
{
$value = $operatorArray[$value];
}
$result->join_view_table[$nr][$option] = $value;
}
}
}
}
}
unset($result->join_view_table);
// set join_db_table details
$join_db_table = json_decode($result->join_db_table,true);
unset($result->join_db_table);
$result->join_db_table = array();
if (ComponentbuilderHelper::checkArray($join_db_table))
{
foreach ($join_db_table as $option => $values)
{
foreach ($values as $nr => $value)
{
if (ComponentbuilderHelper::checkString($value))
{
if ($option == 'selection')
{
$on_field_as = '';
$on_field = '';
list($on_field_as,$on_field) = array_map('trim', explode('.',$result->join_db_table[$nr]['on_field']));
$join_field_as = '';
$join_field = '';
list($join_field_as,$join_field) = array_map('trim', explode('.',$result->join_db_table[$nr]['join_field']));
$result->join_db_table[$nr][$option] =
$this->setDataSelection($result->key,$view_code,$value,$result->join_db_table[$nr]['db_table'],$result->join_db_table[$nr]['as'],$result->join_db_table[$nr]['row_type'],'db');
$result->join_db_table[$nr]['key'] = $result->key;
if ($result->join_db_table[$nr]['row_type'] == 1)
{
$result->main_get[] = $result->join_db_table[$nr];
if ($on_field_as == 'a')
{
$this->siteMainGet[$this->target][$view_code][$result->join_db_table[$nr]['as']] = $result->join_db_table[$nr]['as'];
}
else
{
$this->siteDynamicGet[$this->target][$view_code][$result->join_db_table[$nr]['as']][$join_field] = $on_field_as;
}
}
elseif ($result->join_db_table[$nr]['row_type'] == 2)
{
$result->custom_get[] = $result->join_db_table[$nr];
if ($on_field_as != 'a')
{
$this->siteDynamicGet[$this->target][$view_code][$result->join_db_table[$nr]['as']][$join_field] = $on_field_as;
}
}
unset($result->join_db_table[$nr]);
}
else
{
if ($option == 'type')
{
$value = $typeArray[$value];
}
if ($option == 'operator')
{
$value = $operatorArray[$value];
}
$result->join_db_table[$nr][$option] = $value;
}
}
}
}
}
unset($result->join_db_table);
// set filter details
$filter = json_decode($result->filter,true);
unset($result->filter);
$result->filter = array();
if (ComponentbuilderHelper::checkArray($filter))
{
foreach ($filter as $option => $values)
{
foreach ($values as $nr => $value)
{
if (ComponentbuilderHelper::checkString($value))
{
if ($option == 'operator')
{
$value = $operatorArray[$value];
$result->filter[$nr]['key'] = $result->key;
}
$result->filter[$nr][$option] = $value;
}
}
}
}
// set global details
$global = json_decode($result->global,true);
unset($result->global);
$result->global = array();
if (ComponentbuilderHelper::checkArray($global))
{
foreach ($global as $option => $values)
{
foreach ($values as $nr => $value)
{
if (ComponentbuilderHelper::checkString($value))
{
$result->global[$nr][$option] = $value;
}
}
}
}
// set order details
$order = json_decode($result->order,true);
unset($result->order);
$result->order = array();
if (ComponentbuilderHelper::checkArray($order))
{
foreach ($order as $option => $values)
{
foreach ($values as $nr => $value)
{
if (ComponentbuilderHelper::checkString($value))
{
$result->order[$nr][$option] = $value;
}
}
}
}
// set where details
$where = json_decode($result->where,true);
unset($result->where);
$result->where = array();
if (ComponentbuilderHelper::checkArray($where))
{
foreach ($where as $option => $values)
{
foreach ($values as $nr => $value)
{
if (ComponentbuilderHelper::checkString($value))
{
if ($option == 'operator')
{
$value = $operatorArray[$value];
}
$result->where[$nr][$option] = $value;
}
}
}
}
}
return $results;
}
}
}
return false;
}
/*
* Set Template and Layout Data
*
* @param string $default The content to check
* @param string $view The view code name
*
* @return void
*
*/
public function setTemplateAndLayoutData($default,$view)
{
// set the Tempale date
$temp1 = ComponentbuilderHelper::getAllBetween($default, "\$this->loadTemplate('","')");
$temp2 = ComponentbuilderHelper::getAllBetween($default, '$this->loadTemplate("','")');
$templates = array();
$again = array();
if (ComponentbuilderHelper::checkArray($temp1) && ComponentbuilderHelper::checkArray($temp2))
{
$templates = array_merge($temp1,$temp2);
}
else
{
if (ComponentbuilderHelper::checkArray($temp1))
{
$templates = $temp1;
}
elseif (ComponentbuilderHelper::checkArray($temp2))
{
$templates = $temp2;
}
}
if (ComponentbuilderHelper::checkArray($templates))
{
foreach ($templates as $template)
{
if (!isset($this->templateData[$this->target][$view]) || !array_key_exists($template,$this->templateData[$this->target][$view]))
{
$data = $this->getDataWithAlias($template,'template',$view);
if (ComponentbuilderHelper::checkArray($data))
{
$this->templateData[$this->target][$view][$template] = $data;
// call self to get child data
$again[] = array($data['html'],$view);
$again[] = array($data['php_view'],$view);
}
}
}
}
// set the layout data
$lay1 = ComponentbuilderHelper::getAllBetween($default, "JLayoutHelper::render('","',");
$lay2 = ComponentbuilderHelper::getAllBetween($default, 'JLayoutHelper::render("','",');;
if (ComponentbuilderHelper::checkArray($lay1) && ComponentbuilderHelper::checkArray($lay2))
{
$layouts = array_merge($lay1,$lay2);
}
else
{
if (ComponentbuilderHelper::checkArray($lay1))
{
$layouts = $lay1;
}
elseif (ComponentbuilderHelper::checkArray($lay2))
{
$layouts = $lay2;
}
}
if (isset($layouts) && ComponentbuilderHelper::checkArray($layouts))
{
foreach ($layouts as $layout)
{
if (!isset($this->layoutData[$this->target]) || !ComponentbuilderHelper::checkArray($this->layoutData[$this->target]) || !array_key_exists($layout,$this->layoutData[$this->target]))
{
$data = $this->getDataWithAlias($layout,'layout',$view);
if (ComponentbuilderHelper::checkArray($data))
{
$this->layoutData[$this->target][$layout] = $data;
// call self to get child data
$again[] = array($data['html'],$view);
$again[] = array($data['php_view'],$view);
}
}
}
}
if (ComponentbuilderHelper::checkArray($again))
{
foreach ($again as $go)
{
$this->setTemplateAndLayoutData($go[0],$go[1]);
}
}
}
/*
* Get Data With Alias
*
* @param string $n_ame The alias name
* @param string $table The table where to find the alias
* @param string $view The view code name
*
* @return array The data found with the alias
*
*/
public function getDataWithAlias($n_ame,$table,$view)
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query->select('a.*');
$query->from('#__componentbuilder_'.$table.' AS a');
$db->setQuery($query);
$rows = $db->loadObjectList();
foreach ($rows as $row)
{
$k_ey = ComponentbuilderHelper::safeString($row->alias);
$key = preg_replace("/[^A-Za-z]/", '', $k_ey);
$name = preg_replace("/[^A-Za-z]/", '', $n_ame);
if ($k_ey == $n_ame || $key == $name)
{
$php_view = '';
if ($row->add_php_view == 1)
{
$php_view = base64_decode($row->php_view);
$php_view = $this->setCustomContentLang($php_view);
}
$contnent = base64_decode($row->{$table});
$contnent = $this->setCustomContentLang($contnent);
// set uikit to views
$this->uikitComp[$view] = ComponentbuilderHelper::getUikitComp($contnent,$this->uikitComp[$view]);
// set footable to views and turn it on
if (!isset($this->footableScripts[$this->target][$view]) || !$this->footableScripts[$this->target][$view])
{
$foundFoo = $this->getFootableScripts($contnent);
if ($foundFoo)
{
$this->footableScripts[$this->target][$view] = true;
}
if ($foundFoo && !$this->footable)
{
$this->footable = true;
}
}
// set google charts to views and turn it on
if (!isset($this->googleChart[$this->target][$view]) || !$this->googleChart[$this->target][$view])
{
$foundA = $this->getGoogleChart($php_view);
$foundB = $this->getGoogleChart($contnent);
if ($foundA || $foundB)
{
$this->googleChart[$this->target][$view] = true;
}
if ($foundA || $foundB && !$this->googlechart)
{
$this->googlechart = true;
}
}
// check for get module
if (!isset($this->getModule[$this->target][$view]) || !$this->getModule[$this->target][$view])
{
$foundA = $this->getGetModule($php_view);
$foundB = $this->getGetModule($contnent);
if ($foundA || $foundB)
{
$this->getModule[$this->target][$view] = true;
}
}
return array('id' => $row->id, 'html' => $contnent, 'php_view' => $php_view);
}
}
return false;
}
/*
* Set Custom Content Language Place Holders
*
* @param string $content The content
*
* @return string The content with the updated Language place holder
*
*/
public function setCustomContentLang($content)
{
// set language data
$langCheck[] = ComponentbuilderHelper::getAllBetween($content, "JText::_('","')");
$langCheck[] = ComponentbuilderHelper::getAllBetween($content, 'JText::_("','")');
$langCheck[] = ComponentbuilderHelper::getAllBetween($content, "JText::sprintf('","'");
$langCheck[] = ComponentbuilderHelper::getAllBetween($content, 'JText::sprintf("','"');
$langHolders = array();
$lang = array();
foreach ($langCheck as $langChecked)
{
if (ComponentbuilderHelper::checkArray($langChecked))
{
$lang = array_merge($lang,$langChecked);
}
}
if (ComponentbuilderHelper::checkArray($lang))
{
foreach ($lang as $string)
{
if (ComponentbuilderHelper::safeString($string,'U') == $string)
{
continue;
}
// only load if string is not already set
$keyLang = $this->langPrefix.'_'.ComponentbuilderHelper::safeString($string,'U');
$this->langContent[$this->lang][$keyLang] = trim($string);
$langHolders["JText::_('".$string."')"] = "JText::_('".$keyLang."')";
$langHolders['JText::_("'.$string.'")'] = 'JText::_("'.$keyLang.'")';
$langHolders["JText::sprintf('".$string."',"] = "JText::sprintf('".$keyLang."',";
$langHolders['JText::sprintf("'.$string.'",'] = 'JText::sprintf("'.$keyLang.'",';
}
$content = str_replace(array_keys($langHolders),array_values($langHolders),$content);
}
return $content;
}
/*
* Set Data Selection of the dynamic get
*
* @param string $method_key The method unique key
* @param string $view_code The code name of the view
* @param string $string The data string
* @param string || INT $asset The asset in question
* @param string $as The as string
* @param int $row_type The row type
* @param string $type The target type (db||view)
*
* @return array the select query
*
*/
public function setDataSelection($method_key,$view_code,$string,$asset,$as,$row_type,$type)
{
if (ComponentbuilderHelper::checkString($string))
{
$lines = explode(PHP_EOL,$string);
if (ComponentbuilderHelper::checkArray($lines))
{
$db = JFactory::getDbo();
if ('db' == $type)
{
$table = '#__'.$asset;
$queryName = $asset;
$view = '';
}
elseif ('view' == $type)
{
$view = $this->getViewTableName($asset);
$table = '#__'.$this->componentCodeName.'_'.$view;
$queryName = $view;
}
$gets = array();
$keys = array();
foreach ($lines as $line)
{
if (strpos($line,'AS') !== false)
{
list($get,$key) = explode("AS",$line);
}
elseif (strpos($line,'as') !== false)
{
list($get,$key) = explode("as",$line);
}
else
{
$get = $line;
$key = null;
}
$get = trim($get);
$key = trim($key);
// only add the view
if ('a' != $as && 1 == $row_type && 'view' == $type && strpos('#'.$key,'#'.$view.'_') === false)
{
$key = $view.'_'.trim($key);
}
if (ComponentbuilderHelper::checkString($get))
{
$gets[] = $db->quote($get);
if (ComponentbuilderHelper::checkString($key))
{
$this->getAsLookup[$method_key][$get] = $key;
$keys[] = $db->quote($key);
}
else
{
$key = str_replace($as.'.','',$get);
$this->getAsLookup[$method_key][$get] = $key;
$keys[] = $db->quote($key);
}
if (ComponentbuilderHelper::checkString($view))
{
$field = str_replace($as.'.','',$get);
$this->siteFields[$view][$field][$method_key] = array('site' => $view_code, 'get' => $get, 'as' => $as, 'key' => $key);
}
}
}
if (ComponentbuilderHelper::checkArray($gets) && ComponentbuilderHelper::checkArray($keys))
{
$querySelect = '$query->select($db->quoteName('."\n\t\t\t".'array('.implode(',',$gets).'),'."\n\t\t\t".'array('.implode(',',$keys).')));';
$queryFrom = '$db->quoteName('.$db->quote($table).', '.$db->quote($as).')';
// return the select query
return array('select' => $querySelect, 'from' => $queryFrom, 'name' => $queryName, 'table' => $table, 'type' => $type, 'select_gets' => $gets, 'select_keys' => $keys);
}
}
}
return false;
}
/*
* Get the View Table Name
*
* @param int $id The admin view in
*
* @return string view code name
*
*/
public function getViewTableName($id)
{
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query->select($db->quoteName(array('a.name_single')));
$query->from($db->quoteName('#__componentbuilder_admin_view','a'));
$query->where($db->quoteName('a.id') . ' = '. (int) $id);
$db->setQuery($query);
return ComponentbuilderHelper::safeString($db->loadResult());
}
/*
* Build the SQL dump String for a view
*
* @param string $tables The tables to use in build
* @param string $view The target view/table to dump in
* @param int $view_id The id of the target view
*
* @return string on success with the Dump SQL
*
*/
public function buildSqlDump($tables,$view,$view_id)
{
// first build a query statment to get all the data (insure it must be added - check the tweaking)
if (ComponentbuilderHelper::checkArray($tables) && (!isset($this->sqlTweak[$view_id]['remove']) || !$this->sqlTweak[$view_id]['remove']))
{
$counter = 'a';
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
foreach ($tables as $table)
{
if ($counter == 'a')
{
// the main table fields
if (strpos($table['sourcemap'],PHP_EOL) !== false)
{
$fields = explode(PHP_EOL,$table['sourcemap']);
if (ComponentbuilderHelper::checkArray($fields))
{
// reset array buckets
$sourceArray = array();
$targetArray = array();
foreach ($fields as $field)
{
if (strpos($field,"=>") !== false)
{
list($source,$target) = explode("=>",$field);
$sourceArray[] = $counter.'.'.trim($source);
$targetArray[] = trim($target);
}
}
if (ComponentbuilderHelper::checkArray($sourceArray) && ComponentbuilderHelper::checkArray($targetArray))
{
// add to query
$query->select($db->quoteName($sourceArray,$targetArray));
$query->from('#__'.$table['table'].' AS a');
}
// we may need to filter the selection
if (isset($this->sqlTweak[$view_id]['where']))
{
// add to query the where filter
$query->where('a.id IN (' . $this->sqlTweak[$view_id]['where'] . ')');
}
}
}
}
else
{
// the other tables
if (strpos($table['sourcemap'],PHP_EOL) !== false)
{
$fields = explode(PHP_EOL,$table['sourcemap']);
if (ComponentbuilderHelper::checkArray($fields))
{
// reset array buckets
$sourceArray = array();
$targetArray = array();
foreach ($fields as $field)
{
if (strpos($field,"=>") !== false)
{
list($source,$target) = explode("=>",$field);
$sourceArray[] = $counter.'.'.trim($source);
$targetArray[] = trim($target);
}
if (strpos($field,"==") !== false)
{
list($aKey,$bKey) = explode("==",$field);
// add to query
$query->join('LEFT', $db->quoteName('#__'.$table['table'], $counter) . ' ON (' . $db->quoteName('a.'.trim($aKey)) . ' = ' . $db->quoteName($counter.'.'.trim($bKey)) . ')');
}
}
if (ComponentbuilderHelper::checkArray($sourceArray) && ComponentbuilderHelper::checkArray($targetArray))
{
// add to query
$query->select($db->quoteName($sourceArray,$targetArray));
}
}
}
}
$counter++;
}
// now get the data
$db->setQuery($query);
$db->execute();
if ($db->getNumRows())
{
// get the data
$data = $db->loadObjectList();
// echo'
';var_dump($data);exit;
// start building the MySql dump
$dump = "--";
$dump .= "\n-- Dumping data for table `#__[[[component]]]_".$view."`";
$dump .= "\n--";
$dump .= "\n\nINSERT INTO `#__[[[component]]]_".$view."` (";
foreach ($data as $line)
{
$comaSet = 0;
foreach($line as $fieldName => $fieldValue)
{
if ($comaSet == 0)
{
$dump .= $db->quoteName($fieldName);
}
else
{
$dump .= ", ".$db->quoteName($fieldName);
}
$comaSet++;
}
break;
}
$dump .= ") VALUES";
$coma = 0;
foreach ($data as $line)
{
if ($coma == 0)
{
$dump .= "\n(";
}
else
{
$dump .= ",\n(";
}
$comaSet = 0;
foreach($line as $fieldName => $fieldValue)
{
if ($comaSet == 0)
{
$dump .= $this->mysql_escape($fieldValue);
}
else
{
$dump .= ", ". $this->mysql_escape($fieldValue);
}
$comaSet++;
}
$dump .= ")";
$coma++;
}
$dump .= ";";
// return build dump query
return $dump;
}
}
return false;
}
/*
* Escape the values for a SQL dump
*
* @param string $value the value to escape
*
* @return string on success with escaped string
*
*/
public function mysql_escape($value)
{
// if array then return maped
if(ComponentbuilderHelper::checkArray($value))
{
return array_map(__METHOD__, $value);
}
// if string make sure it is correctly escaped
if(ComponentbuilderHelper::checkString($value) && !is_numeric($value))
{
// Get a db connection.
$db = JFactory::getDbo();
return $db->quote($value);
}
// if empty value return place holder
if(empty($value))
{
return "''";
}
// if not array or string then return number
return $value;
}
/*
* Creating an uniqueCode
*
* @param string $code The planed code
*
* @return string The unique code
*
*/
public function uniqueCode($code)
{
if (!isset($this->uniquecodes[$this->target]) || !in_array($code,$this->uniquecodes[$this->target]))
{
$this->uniquecodes[$this->target][] = $code;
return $code;
}
// make sure it is unique
return $this->uniqueCode($code.$this->uniquekey(1));
}
/*
* Creating an unique local key
*
* @param int $size The key size
*
* @return string The unique localkey
*
*/
public function uniquekey($size, $random = false)
{
if ($random)
{
$bag = "abcefghijknopqrstuwxyzABCDDEFGHIJKLLMMNOPQRSTUVVWXYZabcddefghijkllmmnopqrstuvvwxyzABCEFGHIJKNOPQRSTUWXYZ";
}
else
{
$bag = "vvvvvvvvvvvvvvvvvvv";
}
$key = array();
$bagsize = strlen($bag) - 1;
for ($i = 0; $i < $size; $i++)
{
$get = rand(0, $bagsize);
$key[] = $bag[$get];
}
$key = implode($key);
while (in_array($key, $this->uniquekeys))
{
$key++;
}
$this->uniquekeys[] = $key;
return $key;
}
/*
* Check for footable scripts
*
* @param string $content The content to check
*
* @return boolean True if found
*
*/
public function getFootableScripts($content)
{
if (strpos($content,'footable') !== false)
{
return true;
}
return false;
}
/*
* Check for getModules script
*
* @param string $content The content to check
*
* @return boolean True if found
*
*/
public function getGetModule($content)
{
if (strpos($content,'this->getModules(') !== false)
{
return true;
}
return false;
}
/*
* Check for getModules script
*
* @param string $content The content to check
*
* @return boolean True if found
*
*/
public function getGoogleChart($content)
{
if (strpos($content,'Chartbuilder(') !== false)
{
return true;
}
return false;
}
}