diff --git a/src/components/com_tjucm/site/layouts/list/list.php b/src/components/com_tjucm/site/layouts/list/list.php
index 56fd4708..47cdd2c3 100644
--- a/src/components/com_tjucm/site/layouts/list/list.php
+++ b/src/components/com_tjucm/site/layouts/list/list.php
@@ -141,112 +141,116 @@
field_values))
+ if (!empty($item))
{
- foreach ($item->field_values as $key => $fieldValue)
+ foreach ($item as $key => $fieldValue)
{
- $tjFieldsFieldTable = $fieldsData[$key];
-
- $canView = false;
-
- if ($user->authorise('core.field.viewfieldvalue', 'com_tjfields.group.' . $tjFieldsFieldTable->group_id))
+ if (array_key_exists($key, $displayData['listcolumn']))
{
- $canView = $user->authorise('core.field.viewfieldvalue', 'com_tjfields.field.' . $tjFieldsFieldTable->id);
- }
+ $tjFieldsFieldTable = $fieldsData[$key];
- $fieldXml = $formObject->getFieldXml($tjFieldsFieldTable->name);
- ?>
-
- created_by == $user->id))
- {
- $field = $formObject->getField($tjFieldsFieldTable->name);
- $field->setValue($fieldValue);
+ $canView = false;
- if ($field->type == 'Ucmsubform' && $fieldValue)
+ if ($user->authorise('core.field.viewfieldvalue', 'com_tjfields.group.' . $tjFieldsFieldTable->group_id))
+ {
+ $canView = $user->authorise('core.field.viewfieldvalue', 'com_tjfields.field.' . $tjFieldsFieldTable->id);
+ }
+
+ $fieldXml = $formObject->getFieldXml($tjFieldsFieldTable->name);
+ ?>
+ |
+ created_by == $user->id))
{
- $ucmSubFormData = json_decode($tjucmItemFormModel->getUcmSubFormFieldDataJson($item->id, $field));
- $field->setValue($ucmSubFormData);
- ?>
-
- label; ?>:
-
- getFieldData($field->getAttribute('name'));
-
- $ucmSubFormFieldParams = json_decode($fieldData->params);
- $ucmSubFormFormSource = explode('/', $ucmSubFormFieldParams->formsource);
- $ucmSubFormClient = $ucmSubFormFormSource[1] . '.' . str_replace('form_extra.xml', '', $ucmSubFormFormSource[4]);
- $view = explode('.', $ucmSubFormClient);
- $ucmSubFormData = (array) $ucmSubFormData;
-
- if (!empty($ucmSubFormData))
- {
+ $field = $formObject->getField($tjFieldsFieldTable->name);
+ $field->setValue($fieldValue);
+
+ if ($field->type == 'Ucmsubform' && $fieldValue)
+ {
+ $ucmSubFormData = json_decode($tjucmItemFormModel->getUcmSubFormFieldDataJson($item->id, $field));
+ $field->setValue($ucmSubFormData);
+ ?>
+
+ label; ?>:
+
+ getFormExtra(
- array(
- "clientComponent" => 'com_tjucm',
- "client" => $ucmSubFormClient,
- "view" => $view[1],
- "layout" => 'default',
- "content_id" => $subFormData->$contentIdFieldname)
- );
+ // Get Subform field data
+ $fieldData = $TjfieldsHelper->getFieldData($field->getAttribute('name'));
- $ucmSubFormFormXml = simplexml_load_file($field->formsource);
+ $ucmSubFormFieldParams = json_decode($fieldData->params);
+ $ucmSubFormFormSource = explode('/', $ucmSubFormFieldParams->formsource);
+ $ucmSubFormClient = $ucmSubFormFormSource[1] . '.' . str_replace('form_extra.xml', '', $ucmSubFormFormSource[4]);
+ $view = explode('.', $ucmSubFormClient);
+ $ucmSubFormData = (array) $ucmSubFormData;
- $ucmSubFormCount = 0;
-
- foreach ($ucmSubFormFormXml as $ucmSubFormXmlFieldSet)
- {
- $ucmSubFormXmlFieldSets[$ucmSubFormCount] = $ucmSubFormXmlFieldSet;
- $ucmSubFormCount++;
- }
-
- $ucmSubFormRecordData = $tjucmItemModel->getData($subFormData->$contentIdFieldname);
-
- // Call the JLayout recursively to render fields of ucmsubform
- $layout = new JLayoutFile('fields', JPATH_ROOT . '/components/com_tjucm/layouts/detail');
- echo $layout->render(array('xmlFormObject' => $ucmSubFormXmlFieldSets, 'formObject' => $ucmSubformFormObject, 'itemData' => $ucmSubFormRecordData, 'isSubForm' => 1));
+ if (!empty($ucmSubFormData))
+ {
+ $count = 0;
- if (count($ucmSubFormData) > $count)
+ foreach ($ucmSubFormData as $subFormData)
{
- echo " ";
+ $count++;
+ $contentIdFieldname = str_replace('.', '_', $ucmSubFormClient) . '_contentid';
+
+ $ucmSubformFormObject = $tjucmItemModel->getFormExtra(
+ array(
+ "clientComponent" => 'com_tjucm',
+ "client" => $ucmSubFormClient,
+ "view" => $view[1],
+ "layout" => 'default',
+ "content_id" => $subFormData->$contentIdFieldname)
+ );
+
+ $ucmSubFormFormXml = simplexml_load_file($field->formsource);
+
+ $ucmSubFormCount = 0;
+
+ foreach ($ucmSubFormFormXml as $ucmSubFormXmlFieldSet)
+ {
+ $ucmSubFormXmlFieldSets[$ucmSubFormCount] = $ucmSubFormXmlFieldSet;
+ $ucmSubFormCount++;
+ }
+
+ $ucmSubFormRecordData = $tjucmItemModel->getData($subFormData->$contentIdFieldname);
+
+ // Call the JLayout recursively to render fields of ucmsubform
+ $layout = new JLayoutFile('fields', JPATH_ROOT . '/components/com_tjucm/layouts/detail');
+ echo $layout->render(array('xmlFormObject' => $ucmSubFormXmlFieldSets, 'formObject' => $ucmSubformFormObject, 'itemData' => $ucmSubFormRecordData, 'isSubForm' => 1));
+
+ if (count($ucmSubFormData) > $count)
+ {
+ echo " ";
+ }
}
}
- }
- ?>
+ ?>
+
-
- type), $fieldLayout
+ )
+ ) ? $fieldLayout[ucfirst($tjFieldsFieldTable->type)] : 'field';
+ $layout = new JLayoutFile($layoutToUse, JPATH_ROOT . '/components/com_tjfields/layouts/fields');
+ $output = $layout->render(array('fieldXml' => $fieldXml, 'field' => $field));
+ echo $output;
+ }
}
- else
- {
- $layoutToUse = (
- array_key_exists(
- ucfirst($tjFieldsFieldTable->type), $fieldLayout
- )
- ) ? $fieldLayout[ucfirst($tjFieldsFieldTable->type)] : 'field';
- $layout = new JLayoutFile($layoutToUse, JPATH_ROOT . '/components/com_tjfields/layouts/fields');
- $output = $layout->render(array('fieldXml' => $fieldXml, 'field' => $field));
- echo $output;
- }
- }
- ?>
- |
+
+
diff --git a/src/components/com_tjucm/site/models/items.php b/src/components/com_tjucm/site/models/items.php
index 03b24d34..3e3f2f15 100644
--- a/src/components/com_tjucm/site/models/items.php
+++ b/src/components/com_tjucm/site/models/items.php
@@ -197,22 +197,17 @@ protected function getListQuery()
$query = $db->getQuery(true);
// Select the required fields from the table.
- $query->select(
- $this->getState(
- 'list.select', 'DISTINCT ' . $db->quoteName('a.id') . ', '
- . $db->quoteName('a.state') . ', '
- . $db->quoteName('a.cluster_id') . ', '
- . $db->quoteName('a.draft') . ', '
- . $db->quoteName('a.created_date') . ', '
- . $db->quoteName('a.created_by')
- )
- );
+ $query->select('a.*');
+
+ foreach ($this->fields as $fieldId => $field)
+ {
+ $query->select('MAX(CASE WHEN fv.field_id=' . $fieldId . ' THEN value END) `' . $fieldId . '`');
+ }
$query->from($db->quoteName('#__tj_ucm_data', 'a'));
// Join over the users for the checked out user
- $query->select($db->quoteName('uc.name', 'uEditor'));
- $query->join("LEFT", $db->quoteName('#__users', 'uc') . ' ON (' . $db->quoteName('uc.id') . ' = ' . $db->quoteName('a.checked_out') . ')');
+ $query->join("LEFT", $db->quoteName('#__tjfields_fields_value', 'fv') . ' ON (' . $db->quoteName('fv.content_id') . ' = ' . $db->quoteName('a.id') . ')');
$client = $this->getState('ucm.client');
@@ -325,21 +320,7 @@ protected function getListQuery()
}
// Search on fields data
- $filteredItemIds = $this->filterContent($client);
-
- if ($filteredItemIds)
- {
- if (!empty($filteredItemIds) && is_array($filteredItemIds))
- {
- $filteredItemIds = implode(',', $filteredItemIds);
- $query->where($db->quoteName('a.id') . ' IN (' . $filteredItemIds . ')');
- }
- else
- {
- // If no search results found then do not return any record
- $query->where($db->quoteName('a.id') . '=0');
- }
- }
+ $this->filterContent($client, $query);
// Filter by cluster
$clusterId = (int) $this->getState($client . '.filter.cluster_id');
@@ -353,9 +334,11 @@ protected function getListQuery()
$orderCol = $this->state->get('list.ordering');
$orderDirn = $this->state->get('list.direction');
+ $query->group($db->quoteName('a.id'));
+
if ($orderCol && $orderDirn)
{
- $query->order($db->escape($orderCol . ' ' . $orderDirn));
+ $query->order($db->escape($db->qn($orderCol) . ' ' . $orderDirn));
}
return $query;
@@ -365,31 +348,26 @@ protected function getListQuery()
* Function to filter content as per field values
*
* @param string $client Client
+ *
+ * @param OBJECT &$query query object
*
* @return Array Content Ids
*
* @since 1.2.1
*/
- private function filterContent($client)
+ private function filterContent($client, &$query)
{
+ $db = $this->getDbo();
+ $subQuery = $db->getQuery(true);
+ $subQuery->select(1);
+ $subQuery->from($db->quoteName('#__tjfields_fields_value', 'v'));
+
// Flag to mark if field specific search is done from the search box
$filterFieldFound = 0;
- // Flag to mark if any filter is applied or not
- $filterApplied = 0;
-
// Variable to store count of the self joins on the fields_value table
$filterFieldsCount = 0;
- // Apply search filter
- $db = JFactory::getDbo();
- $query = $db->getQuery(true);
- $query->select('fv1.content_id');
- $query->from($db->quoteName('#__tjfields_fields_value', 'fv1'));
- $query->join('INNER', $db->qn('#__tjfields_fields', 'f') . ' ON (' . $db->qn('fv1.field_id') . ' = ' . $db->qn('f.id') . ')');
- $query->where($db->quoteName('f.state') . ' =1');
- $query->where($db->quoteName('f.client') . ' = ' . $db->quote($client));
-
// Filter by field value
$search = $this->getState($client . '.filter.search');
@@ -402,17 +380,13 @@ private function filterContent($client)
{
$filterFieldsCount++;
- if ($filterFieldsCount > 1)
- {
- $query->join('LEFT', $db->qn('#__tjfields_fields_value', 'fv' . $filterFieldsCount) . ' ON (' . $db->qn('fv' .
- ($filterFieldsCount - 1) . '.content_id') . ' = ' . $db->qn('fv' . $filterFieldsCount . '.content_id') . ')');
- }
+ $subQuery->join('LEFT', $db->qn('#__tjfields_fields_value', 'v' . $filterFieldsCount) . ' ON (' . $db->qn('v' .
+ '.content_id') . ' = ' . $db->qn('v' . $filterFieldsCount . '.content_id') . ')');
$search = trim(str_replace($field . ':', '', $search));
- $query->where($db->qn('fv' . $filterFieldsCount . '.field_id') . ' = ' . $fieldId);
- $query->where($db->qn('fv' . $filterFieldsCount . '.value') . ' LIKE ' . $db->q('%' . $search . '%'));
+ $subQuery->where($db->qn('v' . $filterFieldsCount . '.field_id') . ' = ' . $fieldId);
+ $subQuery->where($db->qn('v' . $filterFieldsCount . '.value') . ' LIKE ' . $db->q('%' . $search . '%'));
$filterFieldFound = 1;
- $filterApplied = 1;
break;
}
@@ -424,14 +398,9 @@ private function filterContent($client)
{
$filterFieldsCount++;
- if ($filterFieldsCount > 1)
- {
- $query->join('LEFT', $db->qn('#__tjfields_fields_value', 'fv' . $filterFieldsCount) . ' ON (' . $db->qn('fv' .
- ($filterFieldsCount - 1) . '.content_id') . ' = ' . $db->qn('fv' . $filterFieldsCount . '.content_id') . ')');
- }
-
- $query->where($db->quoteName('fv' . $filterFieldsCount . '.value') . ' LIKE ' . $db->q('%' . $search . '%'));
- $filterApplied = 1;
+ $subQuery->join('LEFT', $db->qn('#__tjfields_fields_value', 'v' . $filterFieldsCount) . ' ON (' . $db->qn('v' .
+ '.content_id') . ' = ' . $db->qn('v' . $filterFieldsCount . '.content_id') . ')');
+ $subQuery->where($db->quoteName('v' . $filterFieldsCount . '.value') . ' LIKE ' . $db->q('%' . $search . '%'));
}
// For filterable fields
@@ -450,51 +419,34 @@ private function filterContent($client)
{
$filterFieldsCount++;
- if ($filterFieldsCount > 1)
- {
- $query->join('LEFT', $db->qn('#__tjfields_fields_value', 'fv' . $filterFieldsCount) . ' ON (' . $db->qn('fv' .
- ($filterFieldsCount - 1) . '.content_id') . ' = ' . $db->qn('fv' . $filterFieldsCount . '.content_id') . ')');
- }
-
- $query->where($db->qn('fv' . $filterFieldsCount . '.field_id') . ' = ' . $field->id);
+ $subQuery->join('LEFT', $db->qn('#__tjfields_fields_value', 'v' . $filterFieldsCount) . ' ON (' . $db->qn('v' .
+ '.content_id') . ' = ' . $db->qn('v' . $filterFieldsCount . '.content_id') . ')');
+ $subQuery->where($db->qn('v' . $filterFieldsCount . '.field_id') . ' = ' . $field->id);
if ($filteroptionId)
{
// Check option id blank or null
if ($filteroptionId == 'other')
{
- $query->where('(' . $db->qn('fv' . $filterFieldsCount . '.option_id') .
- ' is null OR ' . $db->qn('fv' . $filterFieldsCount . '.option_id') . ' = 0 )');
+ $subQuery->where('(' . $db->qn('v' . $filterFieldsCount . '.option_id') .
+ ' is null OR ' . $db->qn('v' . $filterFieldsCount . '.option_id') . ' = 0 )');
}
else
{
- $query->where($db->qn('fv' . $filterFieldsCount . '.option_id') . ' = ' . $db->q($filteroptionId));
+ $subQuery->where($db->qn('v' . $filterFieldsCount . '.option_id') . ' = ' . $db->q($filteroptionId));
}
}
else
{
- $query->where($db->qn('fv' . $filterFieldsCount . '.value') . ' = ' . $db->q($filterValue));
+ $subQuery->where($db->qn('v' . $filterFieldsCount . '.value') . ' = ' . $db->q($filterValue));
}
-
- $filterApplied = 1;
}
}
- $query->order('fv1.content_id DESC');
- $query->group('fv1.content_id');
-
- // If there is any filter applied then only execute the query
- if ($filterApplied)
- {
- $db->setQuery($query);
-
- $filteredRecord = $db->loadColumn();
-
- return empty($filteredRecord)? true : $filteredRecord;
- }
- else
+ if ($filterFieldsCount > 0)
{
- return false;
+ $subQuery->where($db->qn('v.content_id') . '=' . $db->qn('a.id'));
+ $query->where("EXISTS (" . $subQuery . ")");
}
}
@@ -531,69 +483,6 @@ public function getFields()
return $data;
}
- /**
- * Get an array of data items
- *
- * @return mixed Array of data items on success, false on failure.
- */
- public function getItems()
- {
- $items = parent::getItems();
- $itemsArray = (array) $items;
- $contentIds = array_column($itemsArray, 'id');
- $fieldValues = $this->getFieldsData($contentIds);
-
- foreach ($items as &$item)
- {
- $item->field_values = array();
-
- foreach ($fieldValues as $key => &$fieldValue)
- {
- if ($item->id == $fieldValue->content_id)
- {
- if (isset($item->field_values[$fieldValue->field_id]))
- {
- if (is_array($item->field_values[$fieldValue->field_id]))
- {
- $item->field_values[$fieldValue->field_id] = array_merge($item->field_values[$fieldValue->field_id], array($fieldValue->value));
- }
- else
- {
- $item->field_values[$fieldValue->field_id] = array_merge(array($item->field_values[$fieldValue->field_id]), array($fieldValue->value));
- }
- }
- else
- {
- $item->field_values[$fieldValue->field_id] = $fieldValue->value;
- }
-
- unset($fieldValues[$key]);
- }
- }
- }
-
- foreach ($items as &$item)
- {
- $fieldValues = array();
-
- foreach ($this->fields as $fieldId => $fieldValue)
- {
- if (!array_key_exists($fieldId, $item->field_values))
- {
- $fieldValues[$fieldId] = "";
- }
- else
- {
- $fieldValues[$fieldId] = $item->field_values[$fieldId];
- }
- }
-
- $item->field_values = $fieldValues;
- }
-
- return $items;
- }
-
/**
* Method to fields data for given content Ids
*
diff --git a/src/components/com_tjucm/site/views/items/tmpl/default.php b/src/components/com_tjucm/site/views/items/tmpl/default.php
index e9b5df0a..f4d9cd24 100644
--- a/src/components/com_tjucm/site/views/items/tmpl/default.php
+++ b/src/components/com_tjucm/site/views/items/tmpl/default.php
@@ -192,7 +192,7 @@ function copyItem()
?>
-
+
|