Component Builder (v.2.7.5)
+ Component Builder (v.2.7.6)
The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.
diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml
index 004a44475..e6e3ef180 100644
--- a/componentbuilder_update_server.xml
+++ b/componentbuilder_update_server.xml
@@ -339,4 +339,21 @@
http://joomlacomponentbuilder.com
+
+ Component Builder
+ Builds Complex Joomla Components
+ com_componentbuilder
+ component
+ 2.7.6
+ http://joomlacomponentbuilder.com
+
+ https://github.com/vdm-io/Joomla-Component-Builder/releases/download/v2.7.6/JCB_v2.7.6.zip
+
+
+ stable
+
+ Llewellyn van der Merwe
+ http://joomlacomponentbuilder.com
+
+
\ No newline at end of file
diff --git a/script.php b/script.php
index e69da93da..b4b18579d 100644
--- a/script.php
+++ b/script.php
@@ -3428,9 +3428,9 @@ class com_componentbuilderInstallerScript
$field->type_title = 'Componentbuilder Field';
$field->type_alias = 'com_componentbuilder.field';
$field->table = '{"special": {"dbtable": "#__componentbuilder_field","key": "id","type": "Field","prefix": "componentbuilderTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}';
- $field->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","fieldtype":"fieldtype","datatype":"datatype","indexes":"indexes","null_switch":"null_switch","store":"store","javascript_view_footer":"javascript_view_footer","add_javascript_view_footer":"add_javascript_view_footer","css_views":"css_views","add_css_views":"add_css_views","css_view":"css_view","add_css_view":"add_css_view","datadefault_other":"datadefault_other","datadefault":"datadefault","datalenght_other":"datalenght_other","datalenght":"datalenght","add_javascript_views_footer":"add_javascript_views_footer","javascript_views_footer":"javascript_views_footer","not_required":"not_required","xml":"xml"}}';
+ $field->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","fieldtype":"fieldtype","datatype":"datatype","indexes":"indexes","null_switch":"null_switch","store":"store","css_views":"css_views","add_css_views":"add_css_views","css_view":"css_view","add_css_view":"add_css_view","datalenght":"datalenght","add_javascript_views_footer":"add_javascript_views_footer","datadefault_other":"datadefault_other","datadefault":"datadefault","datalenght_other":"datalenght_other","add_javascript_view_footer":"add_javascript_view_footer","javascript_view_footer":"javascript_view_footer","javascript_views_footer":"javascript_views_footer","not_required":"not_required","xml":"xml"}}';
$field->router = 'ComponentbuilderHelperRoute::getFieldRoute';
- $field->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/field.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","not_required","xml"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","fieldtype","store","catid","add_javascript_view_footer","add_css_views","add_css_view","add_javascript_views_footer"],"displayLookup": [{"sourceColumn": "catid","targetTable": "#__categories","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "fieldtype","targetTable": "#__componentbuilder_fieldtype","targetColumn": "id","displayColumn": "name"}]}';
+ $field->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/field.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","not_required","xml"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","fieldtype","store","catid","add_css_views","add_css_view","add_javascript_views_footer","add_javascript_view_footer"],"displayLookup": [{"sourceColumn": "catid","targetTable": "#__categories","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "fieldtype","targetTable": "#__componentbuilder_fieldtype","targetColumn": "id","displayColumn": "name"}]}';
// Set the object into the content types table.
$field_Inserted = $db->insertObject('#__content_types', $field);
@@ -3476,7 +3476,7 @@ class com_componentbuilderInstallerScript
$language_translation->type_title = 'Componentbuilder Language_translation';
$language_translation->type_alias = 'com_componentbuilder.language_translation';
$language_translation->table = '{"special": {"dbtable": "#__componentbuilder_language_translation","key": "id","type": "Language_translation","prefix": "componentbuilderTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}';
- $language_translation->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "entranslation","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"entranslation":"entranslation","components":"components"}}';
+ $language_translation->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "source","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"source":"source","components":"components"}}';
$language_translation->router = 'ComponentbuilderHelperRoute::getLanguage_translationRoute';
$language_translation->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/language_translation.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "components","targetTable": "#__componentbuilder_joomla_component","targetColumn": "id","displayColumn": "system_name"}]}';
@@ -3692,7 +3692,7 @@ class com_componentbuilderInstallerScript
$query = $db->getQuery(true);
// Field to update.
$fields = array(
- $db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"llewellyn@joomlacomponentbuilder.com","minify":"0","percentagelanguageadd":"50","compiler_field_builder_type":"2","set_browser_storage":"1","storage_time_to_live":"global","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","uikit_load":"1","uikit_min":"","uikit_style":""}'),
+ $db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"llewellyn@joomlacomponentbuilder.com","minify":"0","language":"en-GB","percentagelanguageadd":"50","compiler_field_builder_type":"2","set_browser_storage":"1","storage_time_to_live":"global","development_method":"1","expansion":"0","return_options_build":"2","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","uikit_load":"1","uikit_min":"","uikit_style":""}'),
);
// Condition.
$conditions = array(
@@ -4037,9 +4037,9 @@ class com_componentbuilderInstallerScript
$field->type_title = 'Componentbuilder Field';
$field->type_alias = 'com_componentbuilder.field';
$field->table = '{"special": {"dbtable": "#__componentbuilder_field","key": "id","type": "Field","prefix": "componentbuilderTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}';
- $field->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","fieldtype":"fieldtype","datatype":"datatype","indexes":"indexes","null_switch":"null_switch","store":"store","javascript_view_footer":"javascript_view_footer","add_javascript_view_footer":"add_javascript_view_footer","css_views":"css_views","add_css_views":"add_css_views","css_view":"css_view","add_css_view":"add_css_view","datadefault_other":"datadefault_other","datadefault":"datadefault","datalenght_other":"datalenght_other","datalenght":"datalenght","add_javascript_views_footer":"add_javascript_views_footer","javascript_views_footer":"javascript_views_footer","not_required":"not_required","xml":"xml"}}';
+ $field->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","fieldtype":"fieldtype","datatype":"datatype","indexes":"indexes","null_switch":"null_switch","store":"store","css_views":"css_views","add_css_views":"add_css_views","css_view":"css_view","add_css_view":"add_css_view","datalenght":"datalenght","add_javascript_views_footer":"add_javascript_views_footer","datadefault_other":"datadefault_other","datadefault":"datadefault","datalenght_other":"datalenght_other","add_javascript_view_footer":"add_javascript_view_footer","javascript_view_footer":"javascript_view_footer","javascript_views_footer":"javascript_views_footer","not_required":"not_required","xml":"xml"}}';
$field->router = 'ComponentbuilderHelperRoute::getFieldRoute';
- $field->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/field.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","not_required","xml"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","fieldtype","store","catid","add_javascript_view_footer","add_css_views","add_css_view","add_javascript_views_footer"],"displayLookup": [{"sourceColumn": "catid","targetTable": "#__categories","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "fieldtype","targetTable": "#__componentbuilder_fieldtype","targetColumn": "id","displayColumn": "name"}]}';
+ $field->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/field.xml","hideFields": ["asset_id","checked_out","checked_out_time","version","not_required","xml"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","fieldtype","store","catid","add_css_views","add_css_view","add_javascript_views_footer","add_javascript_view_footer"],"displayLookup": [{"sourceColumn": "catid","targetTable": "#__categories","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "fieldtype","targetTable": "#__componentbuilder_fieldtype","targetColumn": "id","displayColumn": "name"}]}';
// Check if field type is already in content_type DB.
$field_id = null;
@@ -4153,7 +4153,7 @@ class com_componentbuilderInstallerScript
$language_translation->type_title = 'Componentbuilder Language_translation';
$language_translation->type_alias = 'com_componentbuilder.language_translation';
$language_translation->table = '{"special": {"dbtable": "#__componentbuilder_language_translation","key": "id","type": "Language_translation","prefix": "componentbuilderTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}';
- $language_translation->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "entranslation","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"entranslation":"entranslation","components":"components"}}';
+ $language_translation->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "source","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"source":"source","components":"components"}}';
$language_translation->router = 'ComponentbuilderHelperRoute::getLanguage_translationRoute';
$language_translation->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/language_translation.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "components","targetTable": "#__componentbuilder_joomla_component","targetColumn": "id","displayColumn": "system_name"}]}';
@@ -4878,7 +4878,7 @@ class com_componentbuilderInstallerScript
echo '
-
Upgrade to Version 2.7.5 Was Successful! Let us know if anything is not working as expected.
';
+ Upgrade to Version 2.7.6 Was Successful! Let us know if anything is not working as expected.
';
}
}
diff --git a/site/componentbuilder.php b/site/componentbuilder.php
index d21ea2051..16c6e2b18 100644
--- a/site/componentbuilder.php
+++ b/site/componentbuilder.php
@@ -34,7 +34,10 @@ $document->addScript('components/com_componentbuilder/assets/js/site.js');
// Require helper files
JLoader::register('ComponentbuilderHelper', dirname(__FILE__) . '/helpers/componentbuilder.php');
JLoader::register('ComponentbuilderEmail', JPATH_COMPONENT_ADMINISTRATOR . '/helpers/componentbuilderemail.php');
-JLoader::register('ComponentbuilderHelperRoute', dirname(__FILE__) . '/helpers/route.php');
+JLoader::register('ComponentbuilderHelperRoute', dirname(__FILE__) . '/helpers/route.php');
+
+// Triger the Global Site Event
+ComponentbuilderHelper::globalEvent($document);
// import joomla controller library
jimport('joomla.application.component.controller');
diff --git a/site/controllers/api.php b/site/controllers/api.php
index b815a6de1..dd934c995 100644
--- a/site/controllers/api.php
+++ b/site/controllers/api.php
@@ -210,12 +210,170 @@ class ComponentbuilderControllerApi extends JControllerForm
return;
}
+ public function expand()
+ {
+ // get params first
+ if (!isset($this->params) || !ComponentbuilderHelper::checkObject($this->params))
+ {
+ $this->params = JComponentHelper::getParams('com_componentbuilder');
+ }
+ // check if expansion is enabled
+ $method = $this->params->get('development_method', 1);
+ // check what kind of return values show we give
+ $returnOptionsBuild = $this->params->get('return_options_build', 2);
+ if (2 == $method)
+ {
+ // get expansion components
+ $expansion = $this->params->get('expansion', null);
+ // check if they are set
+ if (ComponentbuilderHelper::checkObject($expansion))
+ {
+ // check if user has the right
+ $user = $this->getApiUser();
+ // the message package
+ $message = array();
+ if ($user->authorise('core.admin', 'com_componentbuilder'))
+ {
+ // make sure to not unlock
+ $unlock = false;
+ // get messages
+ $callback = function($messages) use (&$message, &$unlock) {
+ // unlock messages if needed
+ if ($unlock) {
+ $messages = ComponentbuilderHelper::unlock($messages);
+ }
+ // check if we have any messages
+ if (ComponentbuilderHelper::checkArray($messages)) {
+ $message[] = implode("
\n", $messages);
+ } else {
+ // var_dump($messages); // error debug message
+ }
+ };
+ // we have two options, doing them one at a time, use using curl to do tome somewhat asynchronously
+ if (count ( (array) $expansion) > 1 && function_exists('curl_version'))
+ {
+ // set workers
+ foreach ($expansion as $component)
+ {
+ ComponentbuilderHelper::setWorker($component, 'compileInstall');
+ }
+ // make sure to unlock
+ $unlock = true;
+ // run workers
+ ComponentbuilderHelper::runWorker('compileInstall', 1, $callback);
+ }
+ else
+ {
+ // get model
+ $model = $this->getModel('api');
+ // load the compiler
+ $this->_autoloader();
+ // set workers
+ foreach ($expansion as $component)
+ {
+ // compile and install
+ $model->compileInstall($component);
+ }
+ // check if we have any messages
+ $callback($model->messages);
+ }
+ // return messages if found
+ if (1== $returnOptionsBuild && ComponentbuilderHelper::checkArray($message))
+ {
+ echo implode("
\n", $message);
+ }
+ else
+ {
+ echo 1;
+ }
+ // clear session
+ JFactory::getApplication()->getSession()->destroy();
+ jexit();
+ }
+ // check if message is to be returned
+ if (1== $returnOptionsBuild)
+ {
+ // clear session
+ JFactory::getApplication()->getSession()->destroy();
+ jexit('Access Denied!');
+ }
+ }
+ }
+ // clear session
+ JFactory::getApplication()->getSession()->destroy();
+ // check if message is to be returned
+ if (1== $returnOptionsBuild)
+ {
+ jexit('Expansion Disabled!');
+ }
+ // return bool
+ echo 0;
+ jexit();
+ }
+
protected function getApiUser()
{
// return user object
return JFactory::getUser($this->params->get('api', 0, 'INT'));
}
+ public function worker()
+ {
+ // get input values
+ $input = JFactory::getApplication()->input;
+ // get DATA
+ $DATA = $input->post->get('VDM_DATA', null, 'STRING');
+ // get TASK
+ $TASK = $input->server->get('HTTP_VDM_TASK', null, 'STRING');
+ // get TYPE
+ $TYPE = $input->server->get('HTTP_VDM_VALUE_TYPE', null, 'STRING');
+ // check if correct value is given
+ if (ComponentbuilderHelper::checkString($DATA) && ComponentbuilderHelper::checkString($TASK) && ComponentbuilderHelper::checkString($TYPE))
+ {
+ // get the type of values we are working with ( 2 = array; 1 = string)
+ $type = ComponentbuilderHelper::unlock($TYPE);
+ // get data value
+ $dataValues = ComponentbuilderHelper::unlock($DATA);
+ // get the task
+ $task = ComponentbuilderHelper::unlock($TASK);
+ // check the for a string
+ if (1 == $type && ComponentbuilderHelper::checkObject($dataValues) && ComponentbuilderHelper::checkString($task))
+ {
+ // get params first
+ if (!isset($this->params) || !ComponentbuilderHelper::checkObject($this->params))
+ {
+ $this->params = JComponentHelper::getParams('com_componentbuilder');
+ }
+ // get model
+ $model = $this->getModel('api');
+ // open the compile Install function
+ if ('compileInstall' === $task)
+ {
+ // load the compiler
+ $this->_autoloader();
+ // compile and install
+ $model->compileInstall($dataValues);
+ // return locked values
+ echo ComponentbuilderHelper::lock($model->messages);
+ // clear session
+ JFactory::getApplication()->getSession()->destroy();
+ jexit();
+ }
+ }
+ }
+ // not success
+ echo 0;
+ // clear session
+ JFactory::getApplication()->getSession()->destroy();
+ jexit();
+ }
+
+ protected function _autoloader()
+ {
+ // include component compiler
+ require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/compiler.php';
+ }
+
/**
* Method to check if you can edit an existing record.
*
diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php
index 41f782d35..85534fe73 100644
--- a/site/helpers/componentbuilder.php
+++ b/site/helpers/componentbuilder.php
@@ -30,7 +30,16 @@ defined('_JEXEC') or die('Restricted access');
* Componentbuilder component helper
*/
abstract class ComponentbuilderHelper
-{
+{
+
+ /**
+ * The Global Site Event Method.
+ **/
+ public static function globalEvent($document)
+ {
+ // the Session keeps track of all data related to the current session of this user
+ self::loadSession();
+ }
/**
* Locked Libraries (we can not have these change)
@@ -42,6 +51,11 @@ abstract class ComponentbuilderHelper
**/
protected static $params = false;
+ /**
+ * The global updater
+ **/
+ protected static $globalUpdater = array();
+
/**
* The local company details
**/
@@ -198,6 +212,62 @@ abstract class ComponentbuilderHelper
'JPATH_THEMES' => JPATH_THEMES
);
+ /*
+ * Get the Array of Existing Validation Rule Names
+ *
+ * @return array
+ */
+ public static function getExistingValidationRuleNames($lowercase = false)
+ {
+ // get the items
+ $items = self::get('_existing_validation_rules_VDM', null);
+ if (!$items)
+ {
+ // load the file class
+ jimport('joomla.filesystem.file');
+ jimport('joomla.filesystem.folder');
+ // set the path to the form validation rules
+ $path = JPATH_LIBRARIES . '/src/Form/Rule';
+ // check if the path exist
+ if (!JFolder::exists($path))
+ {
+ return false;
+ }
+ // we must first store the current working directory
+ $joomla = getcwd();
+ // go to that folder
+ chdir($path);
+ // load all the files in this path
+ $items = JFolder::files('.', '\.php', true, true);
+ // change back to Joomla working directory
+ chdir($joomla);
+ // make sure we have an array
+ if (!self::checkArray($items))
+ {
+ return false;
+ }
+ // remove the Rule.php from the name
+ $items = array_map( function ($name) {
+ return str_replace(array('./','Rule.php'), '', $name);
+ }, $items);
+ // store the names for next run
+ self::set('_existing_validation_rules_VDM', json_encode($items));
+ }
+ // make sure it is no longer json
+ if (self::checkJson($items))
+ {
+ $items = json_decode($items, true);
+ }
+ // check if the names should be all lowercase
+ if ($lowercase)
+ {
+ $items = array_map( function($item) {
+ return strtolower($item);
+ }, $items);
+ }
+ return $items;
+ }
+
/**
* Get the snippet contributor details
*
@@ -612,6 +682,7 @@ abstract class ComponentbuilderHelper
$field = array(
'subform' => array(),
'nameListOptions' => array(),
+ 'php' => array(),
'values' => " '',
'short_description' => $result->short_description,
@@ -624,32 +695,62 @@ abstract class ComponentbuilderHelper
$field['values_description'] .= ''.JText::_('COM_COMPONENTBUILDER_PROPERTY').' | '.JText::_('COM_COMPONENTBUILDER_EXAMPLE').' | '.JText::_('COM_COMPONENTBUILDER_DESCRIPTION').' |
';
foreach ($properties as $property)
{
- $example = (isset($property['example']) && self::checkString($property['example'])) ? self::shorten($property['example'], 30) : '';
+ $example = (isset($property['example']) && self::checkString($property['example'])) ? $property['example'] : '';
$field['values_description'] .= ''.$property['name'].' | '.$example.' | '.$property['description'].' |
';
// check if we should load the value
$value = self::getValueFromXMLstring($xml, $property['name'], $confirmation);
+ // check if this is a php field
+ $addPHP = false;
+ if (strpos($property['name'], 'type_php') !== false)
+ {
+ $addPHP = true;
+ $phpKey = trim(preg_replace('/[0-9]+/', '', $property['name']), '_');
+ // start array if not already set
+ if (!isset($field['php'][$phpKey]))
+ {
+ $field['php'][$phpKey] = array();
+ $field['php'][$phpKey]['value'] = array();
+ $field['php'][$phpKey]['desc'] = $property['description'];
+ }
+ }
+ // was the settings for the property passed
if(self::checkArray($settings) && isset($settings[$property['name']]))
{
// add the xml values
- $field['values'] .= "\n\t".$property['name'].'="'.$settings[$property['name']].'" ';
+ $field['values'] .= PHP_EOL."\t".$property['name'].'="'.$settings[$property['name']].'" ';
// add the json values
- $field['subform']['properties'.$nr] = array('name' => $property['name'], 'value' => $settings[$property['name']]);
- // add the name List Options as set
- $field['nameListOptionsSet'][$property['name']] = $property['name'];
+ if ($addPHP)
+ {
+ $field['php'][$phpKey]['value'][] = $settings[$property['name']];
+ }
+ else
+ {
+ $field['subform']['properties'.$nr] = array('name' => $property['name'], 'value' => $settings[$property['name']], 'desc' => $property['description']);
+ }
}
elseif (!$xml || $confirmation !== $value)
{
// add the xml values
- $field['values'] .= "\n\t" . $property['name'] . '="'. ($confirmation !== $value) ? $value : $property['example'] .'" ';
+ $field['values'] .= PHP_EOL."\t" . $property['name'] . '="'. ($confirmation !== $value) ? $value : $example .'" ';
// add the json values
- $field['subform']['properties' . $nr] = array('name' => $property['name'], 'value' => ($confirmation !== $value) ? $value : $property['example'], 'desc' => $property['description']);
+ if ($addPHP)
+ {
+ $field['php'][$phpKey]['value'][] = ($confirmation !== $value) ? $value : $example;
+ }
+ else
+ {
+ $field['subform']['properties' . $nr] = array('name' => $property['name'], 'value' => ($confirmation !== $value) ? $value : $example, 'desc' => $property['description']);
+ }
}
// add the name List Options
- $field['nameListOptions'][$property['name']] = $property['name'];
+ if (!$addPHP)
+ {
+ $field['nameListOptions'][$property['name']] = $property['name'];
+ }
// increment the number
$nr++;
}
- $field['values'] .= "\n/>";
+ $field['values'] .= PHP_EOL."/>";
$field['values_description'] .= '
';
// return found field options
return $field;
@@ -750,6 +851,927 @@ abstract class ComponentbuilderHelper
return $klaar;
}
+
+ /*
+ * Convert repeatable field to subform
+ *
+ * @param array $item The array to convert
+ * @param string $name The main field name
+ *
+ * @return array
+ */
+ public static function convertRepeatable($item, $name)
+ {
+ // continue only if we have an array
+ if (self::checkArray($item))
+ {
+ $bucket = array();
+ foreach ($item as $key => $values)
+ {
+ foreach ($values as $nr => $value)
+ {
+ if (!isset($bucket[$name . $nr]) || !self::checkArray($bucket[$name . $nr]))
+ {
+ $bucket[$name . $nr] = array();
+ }
+ $bucket[$name . $nr][$key] = $value;
+ }
+ }
+ return $bucket;
+ }
+ return $item;
+ }
+
+ /*
+ * Convert repeatable field to subform
+ *
+ * @param object $item The item to update
+ * @param array $searcher The fields to check and update
+ * @param array $updater To update the local table
+ *
+ * @return void
+ */
+ public static function convertRepeatableFields($object, $searcher, $updater = array())
+ {
+ // update the repeatable fields
+ foreach ($searcher as $key => $sleutel)
+ {
+ if (isset($object->{$key}))
+ {
+ $isJson = false;
+ if (self::checkJson($object->{$key}))
+ {
+ $object->{$key} = json_decode($object->{$key}, true);
+ $isJson = true;
+ }
+ // check if this is old values for repeatable fields
+ if (self::checkArray($object->{$key}) && isset($object->{$key}[$sleutel]))
+ {
+ // load it back
+ $object->{$key} = self::convertRepeatable($object->{$key}, $key);
+ // add to global updater
+ if (
+ self::checkArray($object->{$key}) && self::checkArray($updater) &&
+ (
+ ( isset($updater['table']) && isset($updater['val']) && isset($updater['key']) ) ||
+ ( isset($updater['unique']) && isset($updater['unique'][$key]) && isset($updater['unique'][$key]['table']) && isset($updater['unique'][$key]['val']) && isset($updater['unique'][$key]['key']) )
+ )
+ )
+ {
+ $_key = null;
+ $_value = null;
+ $_table = null;
+ // check if we have unique id table for this repeatable/subform field
+ if ( isset($updater['unique']) && isset($updater['unique'][$key]) && isset($updater['unique'][$key]['table']) && isset($updater['unique'][$key]['val']) && isset($updater['unique'][$key]['key']) )
+ {
+ $_key = $updater['unique'][$key]['key'];
+ $_value = $updater['unique'][$key]['val'];
+ $_table = $updater['unique'][$key]['table'];
+ }
+ elseif ( isset($updater['table']) && isset($updater['val']) && isset($updater['key']) )
+ {
+ $_key = $updater['key'];
+ $_value = $updater['val'];
+ $_table = $updater['table'];
+ }
+ // continue only if values are valid
+ if (self::checkString($_table) && self::checkString($_key) && $_value > 0)
+ {
+ // set target table & item
+ $target = trim($_table) . '.' . trim($_key) . '.' . trim($_value);
+ if (!isset(self::$globalUpdater[$target]))
+ {
+ self::$globalUpdater[$target] = new stdClass;
+ self::$globalUpdater[$target]->{$_key} = (int) $_value;
+ }
+ // load the new subform values to global updater
+ self::$globalUpdater[$target]->{$key} = json_encode($object->{$key});
+ }
+ }
+ }
+ // no set back to json if came in as json
+ if ($isJson && self::checkArray($object->{$key}))
+ {
+ $object->{$key} = json_encode($object->{$key});
+ }
+ // remove if not json or array
+ elseif (!self::checkArray($object->{$key}) && !self::checkJson($object->{$key}))
+ {
+ unset($object->{$key});
+ }
+ }
+ }
+ return $object;
+ }
+
+ public static function getDynamicScripts($type, $fieldName = false)
+ {
+ // if field name is passed the convert to type
+ if ($fieldName)
+ {
+ $fieldNames = array(
+ 'php_import_display' => 'display',
+ 'php_import_setdata' => 'setdata',
+ 'php_import_save' => 'save',
+ 'html_import_view' => 'view',
+ 'php_import' => 'import',
+ 'php_import_ext' => 'ext',
+ 'php_import_headers' => 'headers'
+ );
+ // first check if the field name is found
+ if (isset($fieldNames[$type]))
+ {
+ $type = $fieldNames[$type];
+ }
+ else
+ {
+ return '';
+ }
+ }
+ $script = array();
+ if ('display' === $type)
+ {
+ // set the display script
+ $script['display'][] = "\tprotected \$headerList;";
+ $script['display'][] = "\tprotected \$hasPackage = false;";
+ $script['display'][] = "\tprotected \$headers;";
+ $script['display'][] = "\tprotected \$hasHeader = 0;";
+ $script['display'][] = "\tprotected \$dataType;";
+ $script['display'][] = "\n\tpublic function display(\$tpl = null)";
+ $script['display'][] = "\t{";
+ $script['display'][] = "\t\tif (\$this->getLayout() !== 'modal')";
+ $script['display'][] = "\t\t{";
+ $script['display'][] = "\t\t\t// Include helper submenu";
+ $script['display'][] = "\t\t\t[[[-#-#-Component]]]Helper::addSubmenu('import');";
+ $script['display'][] = "\t\t}";
+ $script['display'][] = "\n\t\t\$paths = new stdClass;";
+ $script['display'][] = "\t\t\$paths->first = '';";
+ $script['display'][] = "\t\t\$state = \$this->get('state');";
+ $script['display'][] = "\n\t\t\$this->paths = &\$paths;";
+ $script['display'][] = "\t\t\$this->state = &\$state;";
+ $script['display'][] = "\t\t// get global action permissions";
+ $script['display'][] = "\t\t\$this->canDo = [[[-#-#-Component]]]Helper::getActions('import');";
+ $script['display'][] = "\n\t\t// We don't need toolbar in the modal window.";
+ $script['display'][] = "\t\tif (\$this->getLayout() !== 'modal')";
+ $script['display'][] = "\t\t{";
+ $script['display'][] = "\t\t\t\$this->addToolbar();";
+ $script['display'][] = "\t\t\t\$this->sidebar = JHtmlSidebar::render();";
+ $script['display'][] = "\t\t}";
+ $script['display'][] = "\n\t\t// get the session object";
+ $script['display'][] = "\t\t\$session = JFactory::getSession();";
+ $script['display'][] = "\t\t// check if it has package";
+ $script['display'][] = "\t\t\$this->hasPackage \t= \$session->get('hasPackage', false);";
+ $script['display'][] = "\t\t\$this->dataType \t= \$session->get('dataType', false);";
+ $script['display'][] = "\t\tif(\$this->hasPackage && \$this->dataType)";
+ $script['display'][] = "\t\t{";
+ $script['display'][] = "\t\t\t\$this->headerList \t= json_decode(\$session->get(\$this->dataType.'_VDM_IMPORTHEADERS', false),true);";
+ $script['display'][] = "\t\t\t\$this->headers \t\t= [[[-#-#-Component]]]Helper::getFileHeaders(\$this->dataType);";
+ $script['display'][] = "\t\t\t// clear the data type";
+ $script['display'][] = "\t\t\t\$session->clear('dataType');";
+ $script['display'][] = "\t\t}";
+ $script['display'][] = "\n\t\t// Check for errors.";
+ $script['display'][] = "\t\tif (count(\$errors = \$this->get('Errors'))){";
+ $script['display'][] = "\t\t\tthrow new Exception(implode(".'"\n", $errors), 500);';
+ $script['display'][] = "\t\t}";
+ $script['display'][] = "\n\t\t// Display the template";
+ $script['display'][] = "\t\tparent::display(\$tpl);";
+ $script['display'][] = "\t}";
+ }
+ elseif ('setdata' === $type)
+ {
+ // set the setdata script
+ $script['setdata'] = array();
+ $script['setdata'][] = "\t/**";
+ $script['setdata'][] = "\t* Set the data from the spreadsheet to the database";
+ $script['setdata'][] = "\t*";
+ $script['setdata'][] = "\t* @param string \$package Paths to the uploaded package file";
+ $script['setdata'][] = "\t*";
+ $script['setdata'][] = "\t* @return boolean false on failure";
+ $script['setdata'][] = "\t*";
+ $script['setdata'][] = "\t**/";
+ $script['setdata'][] = "\tprotected function setData(\$package,\$table,\$target_headers)";
+ $script['setdata'][] = "\t{";
+ $script['setdata'][] = "\t\tif ([[[-#-#-Component]]]Helper::checkArray(\$target_headers))";
+ $script['setdata'][] = "\t\t{";
+ $script['setdata'][] = "\t\t\t// make sure the file is loaded\t\t";
+ $script['setdata'][] = "\t\t\tJLoader::import('PHPExcel', JPATH_COMPONENT_ADMINISTRATOR . '/helpers');";
+ $script['setdata'][] = "\t\t\t\$jinput = JFactory::getApplication()->input;";
+ $script['setdata'][] = "\t\t\tforeach(\$target_headers as \$header)";
+ $script['setdata'][] = "\t\t\t{";
+ $script['setdata'][] = "\t\t\t\t\$data['target_headers'][\$header] = \$jinput->getString(\$header, null);";
+ $script['setdata'][] = "\t\t\t}";
+ $script['setdata'][] = "\t\t\t// set the data";
+ $script['setdata'][] = "\t\t\tif(isset(\$package['dir']))";
+ $script['setdata'][] = "\t\t\t{";
+ $script['setdata'][] = "\t\t\t\t\$inputFileType = PHPExcel_IOFactory::identify(\$package['dir']);";
+ $script['setdata'][] = "\t\t\t\t\$excelReader = PHPExcel_IOFactory::createReader(\$inputFileType);";
+ $script['setdata'][] = "\t\t\t\t\$excelReader->setReadDataOnly(true);";
+ $script['setdata'][] = "\t\t\t\t\$excelObj = \$excelReader->load(\$package['dir']);";
+ $script['setdata'][] = "\t\t\t\t\$data['array'] = \$excelObj->getActiveSheet()->toArray(null, true,true,true);";
+ $script['setdata'][] = "\t\t\t\t\$excelObj->disconnectWorksheets();";
+ $script['setdata'][] = "\t\t\t\tunset(\$excelObj);";
+ $script['setdata'][] = "\t\t\t\treturn \$this->save(\$data,\$table);";
+ $script['setdata'][] = "\t\t\t}";
+ $script['setdata'][] = "\t\t}";
+ $script['setdata'][] = "\t\treturn false;";
+ $script['setdata'][] = "\t}";
+ }
+ elseif ('headers' === $type)
+ {
+ $script['headers'] = array();
+ $script['headers'][] = "\t/**";
+ $script['headers'][] = "\t* Method to get header.";
+ $script['headers'][] = "\t*";
+ $script['headers'][] = "\t* @return mixed An array of data items on success, false on failure.";
+ $script['headers'][] = "\t*/";
+ $script['headers'][] = "\tpublic function getExImPortHeaders()";
+ $script['headers'][] = "\t{";
+ $script['headers'][] = "\t\t// Get a db connection.";
+ $script['headers'][] = "\t\t\$db = JFactory::getDbo();";
+ $script['headers'][] = "\t\t// get the columns";
+ $script['headers'][] = "\t\t\$columns = \$db->getTableColumns(\"#__[[[-#-#-component]]]_[[[-#-#-view]]]\");";
+ $script['headers'][] = "\t\tif ([[[-#-#-Component]]]Helper::checkArray(\$columns))";
+ $script['headers'][] = "\t\t{";
+ $script['headers'][] = "\t\t\t// remove the headers you don't import/export.";
+ $script['headers'][] = "\t\t\tunset(\$columns['asset_id']);";
+ $script['headers'][] = "\t\t\tunset(\$columns['checked_out']);";
+ $script['headers'][] = "\t\t\tunset(\$columns['checked_out_time']);";
+ $script['headers'][] = "\t\t\t\$headers = new stdClass();";
+ $script['headers'][] = "\t\t\tforeach (\$columns as \$column => \$type)";
+ $script['headers'][] = "\t\t\t{";
+ $script['headers'][] = "\t\t\t\t\$headers->{\$column} = \$column;";
+ $script['headers'][] = "\t\t\t}";
+ $script['headers'][] = "\t\t\treturn \$headers;";
+ $script['headers'][] = "\t\t}";
+ $script['headers'][] = "\t\treturn false;";
+ $script['headers'][] = "\t}";
+ }
+ elseif ('save' === $type)
+ {
+ $script['save'] = array();
+ $script['save'][] = "\t/**";
+ $script['save'][] = "\t* Save the data from the file to the database";
+ $script['save'][] = "\t*";
+ $script['save'][] = "\t* @param string \$package Paths to the uploaded package file";
+ $script['save'][] = "\t*";
+ $script['save'][] = "\t* @return boolean false on failure";
+ $script['save'][] = "\t*";
+ $script['save'][] = "\t**/";
+ $script['save'][] = "\tprotected function save(\$data,\$table)";
+ $script['save'][] = "\t{";
+ $script['save'][] = "\t\t// import the data if there is any";
+ $script['save'][] = "\t\tif([[[-#-#-Component]]]Helper::checkArray(\$data['array']))";
+ $script['save'][] = "\t\t{";
+ $script['save'][] = "\t\t\t// get user object";
+ $script['save'][] = "\t\t\t\$user \t\t= JFactory::getUser();";
+ $script['save'][] = "\t\t\t// remove header if it has headers";
+ $script['save'][] = "\t\t\t\$id_key \t= \$data['target_headers']['id'];";
+ $script['save'][] = "\t\t\t\$published_key \t= \$data['target_headers']['published'];";
+ $script['save'][] = "\t\t\t\$ordering_key \t= \$data['target_headers']['ordering'];";
+ $script['save'][] = "\t\t\t// get the first array set";
+ $script['save'][] = "\t\t\t\$firstSet = reset(\$data['array']);";
+ $script['save'][] = "";
+ $script['save'][] = "\t\t\t// check if first array is a header array and remove if true";
+ $script['save'][] = "\t\t\tif(\$firstSet[\$id_key] == 'id' || \$firstSet[\$published_key] == 'published' || \$firstSet[\$ordering_key] == 'ordering')";
+ $script['save'][] = "\t\t\t{";
+ $script['save'][] = "\t\t\t\tarray_shift(\$data['array']);";
+ $script['save'][] = "\t\t\t}";
+ $script['save'][] = "\t\t\t";
+ $script['save'][] = "\t\t\t// make sure there is still values in array and that it was not only headers";
+ $script['save'][] = "\t\t\tif([[[-#-#-Component]]]Helper::checkArray(\$data['array']) && \$user->authorise(\$table.'.import', 'com_[[[-#-#-component]]]') && \$user->authorise('core.import', 'com_[[[-#-#-component]]]'))";
+ $script['save'][] = "\t\t\t{";
+ $script['save'][] = "\t\t\t\t// set target.";
+ $script['save'][] = "\t\t\t\t\$target\t= array_flip(\$data['target_headers']);";
+ $script['save'][] = "\t\t\t\t// Get a db connection.";
+ $script['save'][] = "\t\t\t\t\$db = JFactory::getDbo();";
+ $script['save'][] = "\t\t\t\t// set some defaults";
+ $script['save'][] = "\t\t\t\t\$todayDate\t\t= JFactory::getDate()->toSql();";
+ $script['save'][] = "\t\t\t\t// get global action permissions";
+ $script['save'][] = "\t\t\t\t\$canDo\t\t\t= [[[-#-#-Component]]]Helper::getActions(\$table);";
+ $script['save'][] = "\t\t\t\t\$canEdit\t\t= \$canDo->get('core.edit');";
+ $script['save'][] = "\t\t\t\t\$canState\t\t= \$canDo->get('core.edit.state');";
+ $script['save'][] = "\t\t\t\t\$canCreate\t\t= \$canDo->get('core.create');";
+ $script['save'][] = "\t\t\t\t\$hasAlias\t\t= \$this->getAliasesUsed(\$table);";
+ $script['save'][] = "\t\t\t\t// prosses the data";
+ $script['save'][] = "\t\t\t\tforeach(\$data['array'] as \$row)";
+ $script['save'][] = "\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\$found = false;";
+ $script['save'][] = "\t\t\t\t\tif (isset(\$row[\$id_key]) && is_numeric(\$row[\$id_key]) && \$row[\$id_key] > 0)";
+ $script['save'][] = "\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t// raw items import & update!";
+ $script['save'][] = "\t\t\t\t\t\t\$query = \$db->getQuery(true);";
+ $script['save'][] = "\t\t\t\t\t\t\$query";
+ $script['save'][] = "\t\t\t\t\t\t\t->select('version')";
+ $script['save'][] = "\t\t\t\t\t\t\t->from(\$db->quoteName('#__[[[-#-#-component]]]_'.\$table))";
+ $script['save'][] = "\t\t\t\t\t\t\t->where(\$db->quoteName('id') . ' = '. \$db->quote(\$row[\$id_key]));";
+ $script['save'][] = "\t\t\t\t\t\t// Reset the query using our newly populated query object.";
+ $script['save'][] = "\t\t\t\t\t\t\$db->setQuery(\$query);";
+ $script['save'][] = "\t\t\t\t\t\t\$db->execute();";
+ $script['save'][] = "\t\t\t\t\t\t\$found = \$db->getNumRows();";
+ $script['save'][] = "\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t";
+ $script['save'][] = "\t\t\t\t\tif(\$found && \$canEdit)";
+ $script['save'][] = "\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t// update item";
+ $script['save'][] = "\t\t\t\t\t\t\$id \t\t= \$row[\$id_key];";
+ $script['save'][] = "\t\t\t\t\t\t\$version\t= \$db->loadResult();";
+ $script['save'][] = "\t\t\t\t\t\t// reset all buckets";
+ $script['save'][] = "\t\t\t\t\t\t\$query \t\t= \$db->getQuery(true);";
+ $script['save'][] = "\t\t\t\t\t\t\$fields \t= array();";
+ $script['save'][] = "\t\t\t\t\t\t// Fields to update.";
+ $script['save'][] = "\t\t\t\t\t\tforeach(\$row as \$key => \$cell)";
+ $script['save'][] = "\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t// ignore column";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('IGNORE' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// update modified";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('modified_by' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// update modified";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('modified' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// update version";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('version' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$cell = (int) \$version + 1;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// verify publish authority";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('published' == \$target[\$key] && !\$canState)";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// set to update array";
+ $script['save'][] = "\t\t\t\t\t\t\tif(in_array(\$key, \$data['target_headers']) && is_numeric(\$cell))";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$fields[] = \$db->quoteName(\$target[\$key]) . ' = ' . \$cell;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\telseif(in_array(\$key, \$data['target_headers']) && is_string(\$cell))";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$fields[] = \$db->quoteName(\$target[\$key]) . ' = ' . \$db->quote(\$cell);";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\telseif(in_array(\$key, \$data['target_headers']) && is_null(\$cell))";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t// if import data is null then set empty";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$fields[] = \$db->quoteName(\$target[\$key]) . \" = ''\";";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t// load the defaults";
+ $script['save'][] = "\t\t\t\t\t\t\$fields[]\t= \$db->quoteName('modified_by') . ' = ' . \$db->quote(\$user->id);";
+ $script['save'][] = "\t\t\t\t\t\t\$fields[]\t= \$db->quoteName('modified') . ' = ' . \$db->quote(\$todayDate);";
+ $script['save'][] = "\t\t\t\t\t\t// Conditions for which records should be updated.";
+ $script['save'][] = "\t\t\t\t\t\t\$conditions = array(";
+ $script['save'][] = "\t\t\t\t\t\t\t\$db->quoteName('id') . ' = ' . \$id";
+ $script['save'][] = "\t\t\t\t\t\t);";
+ $script['save'][] = "\t\t\t\t\t\t";
+ $script['save'][] = "\t\t\t\t\t\t\$query->update(\$db->quoteName('#__[[[-#-#-component]]]_'.\$table))->set(\$fields)->where(\$conditions);";
+ $script['save'][] = "\t\t\t\t\t\t\$db->setQuery(\$query);";
+ $script['save'][] = "\t\t\t\t\t\t\$db->execute();";
+ $script['save'][] = "\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\telseif (\$canCreate)";
+ $script['save'][] = "\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t// insert item";
+ $script['save'][] = "\t\t\t\t\t\t\$query = \$db->getQuery(true);";
+ $script['save'][] = "\t\t\t\t\t\t// reset all buckets";
+ $script['save'][] = "\t\t\t\t\t\t\$columns \t= array();";
+ $script['save'][] = "\t\t\t\t\t\t\$values \t= array();";
+ $script['save'][] = "\t\t\t\t\t\t\$version\t= false;";
+ $script['save'][] = "\t\t\t\t\t\t// Insert columns. Insert values.";
+ $script['save'][] = "\t\t\t\t\t\tforeach(\$row as \$key => \$cell)";
+ $script['save'][] = "\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t// ignore column";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('IGNORE' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// remove id";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('id' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// update created";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('created_by' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// update created";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('created' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\tcontinue;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// Make sure the alias is incremented";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('alias' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$cell = \$this->getAlias(\$cell,\$table);";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// update version";
+ $script['save'][] = "\t\t\t\t\t\t\tif ('version' == \$target[\$key])";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$cell = 1;";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$version = true;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\t// set to insert array";
+ $script['save'][] = "\t\t\t\t\t\t\tif(in_array(\$key, \$data['target_headers']) && is_numeric(\$cell))";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$columns[] \t= \$target[\$key];";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$values[] \t= \$cell;";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\telseif(in_array(\$key, \$data['target_headers']) && is_string(\$cell))";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$columns[] \t= \$target[\$key];";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$values[] \t= \$db->quote(\$cell);";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t\telseif(in_array(\$key, \$data['target_headers']) && is_null(\$cell))";
+ $script['save'][] = "\t\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\t// if import data is null then set empty";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$columns[] \t= \$target[\$key];";
+ $script['save'][] = "\t\t\t\t\t\t\t\t\$values[] \t= \"''\";";
+ $script['save'][] = "\t\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t// load the defaults";
+ $script['save'][] = "\t\t\t\t\t\t\$columns[] \t= 'created_by';";
+ $script['save'][] = "\t\t\t\t\t\t\$values[] \t= \$db->quote(\$user->id);";
+ $script['save'][] = "\t\t\t\t\t\t\$columns[] \t= 'created';";
+ $script['save'][] = "\t\t\t\t\t\t\$values[] \t= \$db->quote(\$todayDate);";
+ $script['save'][] = "\t\t\t\t\t\tif (!\$version)";
+ $script['save'][] = "\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\$columns[] \t= 'version';";
+ $script['save'][] = "\t\t\t\t\t\t\t\$values[] \t= 1;";
+ $script['save'][] = "\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t\t// Prepare the insert query.";
+ $script['save'][] = "\t\t\t\t\t\t\$query";
+ $script['save'][] = "\t\t\t\t\t\t\t->insert(\$db->quoteName('#__[[[-#-#-component]]]_'.\$table))";
+ $script['save'][] = "\t\t\t\t\t\t\t->columns(\$db->quoteName(\$columns))";
+ $script['save'][] = "\t\t\t\t\t\t\t->values(implode(',', \$values));";
+ $script['save'][] = "\t\t\t\t\t\t// Set the query using our newly populated query object and execute it.";
+ $script['save'][] = "\t\t\t\t\t\t\$db->setQuery(\$query);";
+ $script['save'][] = "\t\t\t\t\t\t\$done = \$db->execute();";
+ $script['save'][] = "\t\t\t\t\t\tif (\$done)";
+ $script['save'][] = "\t\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\t\t\$aId = \$db->insertid();";
+ $script['save'][] = "\t\t\t\t\t\t\t// make sure the access of asset is set";
+ $script['save'][] = "\t\t\t\t\t\t\t[[[-#-#-Component]]]Helper::setAsset(\$aId,\$table);";
+ $script['save'][] = "\t\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t\telse";
+ $script['save'][] = "\t\t\t\t\t{";
+ $script['save'][] = "\t\t\t\t\t\treturn false;";
+ $script['save'][] = "\t\t\t\t\t}";
+ $script['save'][] = "\t\t\t\t}";
+ $script['save'][] = "\t\t\t\treturn true;";
+ $script['save'][] = "\t\t\t}";
+ $script['save'][] = "\t\t}";
+ $script['save'][] = "\t\treturn false;";
+ $script['save'][] = "\t}";
+ }
+ elseif ('view' === $type)
+ {
+ $script['view'] = array();
+ $script['view'][] = "";
+ $script['view'][] = "";
+ $script['view'][] = "\n";
+ $script['view'][] = "