From f4d9e2030bcccf6145a2e4d0a5ea103ded41e750 Mon Sep 17 00:00:00 2001 From: Prav Date: Thu, 9 Jan 2020 11:04:16 +0530 Subject: [PATCH] Task#338 chore: Ability to select the Cluster before importing UCM Data --- .../administrator/models/forms/type.xml | 6 +- .../administrator/views/type/tmpl/edit.php | 16 ++++- .../administrator/en-GB/en-GB.com_tjucm.ini | 2 + .../languages/site/en-GB/en-GB.com_tjucm.ini | 2 + .../com_tjucm/site/controllers/items.php | 45 +++++++++++- .../com_tjucm/site/helpers/tjucm.php | 2 + .../site/views/items/tmpl/importitems.php | 70 ++++++++++++++++++- 7 files changed, 134 insertions(+), 9 deletions(-) diff --git a/src/components/com_tjucm/administrator/models/forms/type.xml b/src/components/com_tjucm/administrator/models/forms/type.xml index fcdc00e9..9e35f4c4 100644 --- a/src/components/com_tjucm/administrator/models/forms/type.xml +++ b/src/components/com_tjucm/administrator/models/forms/type.xml @@ -42,10 +42,14 @@ - + + + + +
diff --git a/src/components/com_tjucm/administrator/views/type/tmpl/edit.php b/src/components/com_tjucm/administrator/views/type/tmpl/edit.php index c861509a..e22aaead 100644 --- a/src/components/com_tjucm/administrator/views/type/tmpl/edit.php +++ b/src/components/com_tjucm/administrator/views/type/tmpl/edit.php @@ -8,6 +8,7 @@ */ // No direct access defined('_JEXEC') or die; +use Joomla\CMS\Component\ComponentHelper; JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('behavior.tooltip'); @@ -51,9 +52,18 @@ form->renderField('state'); ?> form->renderField('type_description'); ?> - form->getGroup('params') as $field) : ?> - renderField(); ?> - + form->getGroup('params') as $field) : + + if (strpos($field->name, 'import_items') == false) + { + echo $field->renderField(); + } + elseif (ComponentHelper::getComponent('com_cluster', true)->enabled) + { + echo $field->renderField(); + } + + endforeach; ?> diff --git a/src/components/com_tjucm/languages/administrator/en-GB/en-GB.com_tjucm.ini b/src/components/com_tjucm/languages/administrator/en-GB/en-GB.com_tjucm.ini index 27d64d21..68f7ec0d 100644 --- a/src/components/com_tjucm/languages/administrator/en-GB/en-GB.com_tjucm.ini +++ b/src/components/com_tjucm/languages/administrator/en-GB/en-GB.com_tjucm.ini @@ -193,3 +193,5 @@ COM_TJUCM_FORM_LBL_TYPE_ALLOW_BITRATE_ON="Enable timely autosave?" COM_TJUCM_FORM_DESC_LBL_TYPE_ALLOW_BITRATE_ON="Set to 'YES' if you want to allow submission of item after specified interval of time. Note:If you have used editor field in your UCM type then you should enable this configuration" COM_TJUCM_FORM_LBL_TYPE_BITRATE_SECONDS="Autosave Interval (seconds)" COM_TJUCM_FORM_DESC_LBL_TYPE_BITRATE_SECONDS="Enter time in seconds to save data repeatedly for this ucm type" +COM_TJUCM_FORM_LBL_TYPE_IMPORT="Import Using Cluster" +COM_TJUCM_FORM_LBL_TYPE_IMPORT_DESC="Import items by using cluster" diff --git a/src/components/com_tjucm/languages/site/en-GB/en-GB.com_tjucm.ini b/src/components/com_tjucm/languages/site/en-GB/en-GB.com_tjucm.ini index c5177092..9f60aba7 100644 --- a/src/components/com_tjucm/languages/site/en-GB/en-GB.com_tjucm.ini +++ b/src/components/com_tjucm/languages/site/en-GB/en-GB.com_tjucm.ini @@ -203,3 +203,5 @@ COM_TJUCM_ITEMS_IMPORTED_SCUUESSFULLY="%d record(s) imported successfully" COM_TJUCM_ITEMS_IMPORT_REJECTED_RECORDS="%d invalid record(s) were not imported" COM_TJUCM_ITEMS_NO_RECORDS_TO_IMPORT="No records found to import" COM_TJUCM_ITEMS_IMPORTING_MSG="Please wait, Records are being imported..." +COM_TJUCM_ITEMS_CLUSTER="Select Cluster" +COM_TJUCM_ITEMS_CLUSTER_ERROR="Please select cluster to import a file" diff --git a/src/components/com_tjucm/site/controllers/items.php b/src/components/com_tjucm/site/controllers/items.php index f752b089..97894be1 100644 --- a/src/components/com_tjucm/site/controllers/items.php +++ b/src/components/com_tjucm/site/controllers/items.php @@ -11,6 +11,7 @@ // No direct access. defined('_JEXEC') or die; +use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\MVC\Model\BaseDatabaseModel; use Joomla\CMS\Session\Session; use Joomla\CMS\Filesystem\File; @@ -104,8 +105,23 @@ public function importCsv() $fieldsLabel = array_column($fields, 'label'); $fieldHeaders = array_combine($fieldsName, $fieldsLabel); + // Get UCM Type data + JLoader::import('components.com_tjucm.tables.type', JPATH_ADMINISTRATOR); + $ucmTypeTable = Table::getInstance('Type', 'TjucmTable'); + $ucmTypeTable->load(array("unique_identifier" => $client)); + + // Get decoded data object + $typeParams = new Registry($ucmTypeTable->params); + foreach ($fields as $field) { + // Check com_cluster component is installed and configuration set Yes in UCM type form + if (ComponentHelper::getComponent('com_cluster', true)->enabled && $field->type == 'cluster' && $typeParams->get('import_items')) + { + $requiredFieldsName[$field->name] = $field->name; + continue; + } + // Get the required fields for the UCM type if ($field->required == 1) { @@ -209,6 +225,14 @@ public function importCsv() } } + // Check com_cluster component is installed and configuration set Yes in UCM type form + if (ComponentHelper::getComponent('com_cluster', true)->enabled && $typeParams->get('import_items')) + { + $clusterId = $app->input->getInt("cluster", 0); + $clusterFieldName = str_replace('.', '_', $client) . '_clusterclusterid'; + $itemData[$clusterFieldName] = $clusterId; + } + // Check if all the required values are present in the row $isValid = (count(array_intersect_key($itemData, $requiredFieldsName)) == count($requiredFieldsName)); @@ -304,6 +328,9 @@ public function getCsvImportFormat() $ucmTypeTable = Table::getInstance('Type', 'TjucmTable'); $ucmTypeTable->load(array("unique_identifier" => $client)); + // Get decoded data object + $typeParams = new Registry($ucmTypeTable->params); + // Get fields in the given UCM type JLoader::import('components.com_tjfields.models.fields', JPATH_ADMINISTRATOR); $tjFieldsFieldsModel = BaseDatabaseModel::getInstance('Fields', 'TjfieldsModel', array('ignore_request' => true)); @@ -312,10 +339,24 @@ public function getCsvImportFormat() $tjFieldsFieldsModel->setState('list.ordering', 'a.ordering'); $tjFieldsFieldsModel->setState('list.direction', 'asc'); $fields = $tjFieldsFieldsModel->getItems(); - $fieldsLabel = array_column($fields, 'label'); + $fieldsLabel = array_column($fields, 'label', 'id'); + + // Check if com_cluster component is installed + if (ComponentHelper::getComponent('com_cluster', true)->enabled && $typeParams->get('import_items')) + { + $fieldsType = array_column($fields, 'id', 'type'); + + foreach ($fieldsType as $key => $value) + { + if ($key == 'cluster') + { + unset($fieldsLabel[$value]); + } + } + } // Generate schema CSV file with CSV headers as label of the fields for given UCM type and save it in temp folder - $fileName = preg_replace('/[^A-Za-z0-9\-]/', '', $ucmTypeTable->title) . '.csv'; + $fileName = preg_replace('/[^A-Za-z0-9\-]/', '', $ucmTypeTable->title) . '_' . round(microtime(true)) . '.csv'; $csvFileTmpPath = Factory::getConfig()->get('tmp_path') . '/' . $fileName; $output = fopen($csvFileTmpPath, 'w'); fputcsv($output, $fieldsLabel); diff --git a/src/components/com_tjucm/site/helpers/tjucm.php b/src/components/com_tjucm/site/helpers/tjucm.php index 51be6798..aa0bd052 100644 --- a/src/components/com_tjucm/site/helpers/tjucm.php +++ b/src/components/com_tjucm/site/helpers/tjucm.php @@ -77,6 +77,8 @@ public static function getLanguageConstantForJs() Text::script('COM_TJUCM_FIELDS_VALIDATION_ERROR_NUMBER', true); Text::script('COM_TJUCM_MSG_ON_SAVED_FORM', true); Text::script('COM_TJUCM_ITEMS_INVALID_CSV_FILE', true); + Text::script('COM_TJUCM_ITEMS_CLUSTER_ERROR', true); + Text::script('COM_TJUCM_ITEMS_UPLOAD_CSV_FILE', true); } /** diff --git a/src/components/com_tjucm/site/views/items/tmpl/importitems.php b/src/components/com_tjucm/site/views/items/tmpl/importitems.php index f420b43e..894f9deb 100644 --- a/src/components/com_tjucm/site/views/items/tmpl/importitems.php +++ b/src/components/com_tjucm/site/views/items/tmpl/importitems.php @@ -16,15 +16,45 @@ use Joomla\CMS\Uri\Uri; use Joomla\CMS\Language\Text; use Joomla\CMS\Session\Session; +use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Form\FormHelper; +use Joomla\CMS\Table\Table; +use Joomla\Registry\Registry; +HTMLHelper::_('formbehavior.chosen', 'select'); HTMLHelper::_('bootstrap.tooltip'); +JLoader::import('components.com_tjfields.tables.type', JPATH_ADMINISTRATOR); +$ucmTypeTable = Table::getInstance('Type', 'TjucmTable', array('dbo', Factory::getDbo())); +$ucmTypeTable->load(array('unique_identifier' => $this->client)); + +// Get decoded data object +$typeParams = new Registry($ucmTypeTable->params); + Factory::getDocument()->addScriptDeclaration(' jQuery(document).ready(function(){ jQuery("#uploadForm #upload-submit").click(function() { + + // Check cluster exist in upload/ import form + if (jQuery("#uploadForm #cluster").hasClass("import-cluster")) + { + var clusterId = jQuery("#uploadForm #cluster").val(); + + if (jQuery.trim(clusterId) =="" || clusterId == undefined) + { + jQuery("#uploadForm #cluster").next(".chzn-container").css("border-color", "red"); + jQuery("#system-message-container").html(); + Joomla.renderMessages({"error":[Joomla.JText._("COM_TJUCM_ITEMS_CLUSTER_ERROR")]}); + + return false; + } + } + if (jQuery("#uploadForm #csv-file-upload").val() == "") { jQuery("#uploadForm #csv-file-upload").css("border-color", "red"); + jQuery("#system-message-container").html(); + Joomla.renderMessages({"error":[Joomla.JText._("COM_TJUCM_ITEMS_UPLOAD_CSV_FILE")]}); return false; } @@ -55,17 +85,51 @@ }); '); ?> -
+


+ + enabled && $typeParams->get('import_items')) + { + JLoader::import('components.com_tjfields.tables.field', JPATH_ADMINISTRATOR); + $fieldTable = Table::getInstance('Field', 'TjfieldsTable', array('dbo', $db)); + $fieldTable->load(array('client' => $this->client, 'type' => 'cluster')); + + if ($fieldTable->id) + { + FormHelper::addFieldPath(JPATH_ADMINISTRATOR . '/components/com_tjfields/models/fields/'); + $cluster = FormHelper::loadFieldType('cluster', false); + $this->clusterList = $cluster->getOptionsExternally(); + ?> +
+ +
+ clusterList, "cluster", ' id="cluster" class="import-cluster" required size="1"', + "value", "text"); + ?> +
+
+
- +
-
+