/** * Display the list of elements */ function display() { $app =& JFactory::getApplication(); $db =& JFactory::getDBO(); $context = 'com_fabrik.element.list.'; $filter_order = $app->getUserStateFromRequest($context . 'filter_order', 'filter_order', 'e.ordering', 'cmd'); $filter_order_Dir = $app->getUserStateFromRequest($context . 'filter_order_Dir', 'filter_order_Dir', '', 'word'); $limit = $app->getUserStateFromRequest($context . 'limit', 'limit', $app->getCfg('list_limit'), 'int'); $limitstart = $app->getUserStateFromRequest($context . 'limitstart', 'limitstart', 0, 'int'); $filter_elementTypeId = $app->getUserStateFromRequest($context . "filter_elementTypeId", 'filter_elementTypeId', ''); $filter_groupId = $app->getUserStateFromRequest($context . "filter_groupId", 'filter_groupId', 0, 'int'); $search = $app->getUserStateFromRequest($context . "filter_elementName", 'filter_elementName', ''); $filter_showInTable = $app->getUserStateFromRequest($context . "filter_showInTable", 'filter_showInTable', ''); $filter_published = $app->getUserStateFromRequest($context . "filter_published", 'filter_published', ''); $filter_formId = $app->getUserStateFromRequest($context . "filter_formId", 'filter_formId', ''); $lists = array(); $where = array(); // table ordering $lists['order_Dir'] = $filter_order_Dir; $lists['order'] = $filter_order; // used by filter if ($filter_elementTypeId != '') { $where[] = " e.plugin = '{$filter_elementTypeId}' "; } //used by filter if ($filter_groupId >= 1) { $where[] = " e.group_id = '{$filter_groupId}' "; } if ($filter_formId != '' && $filter_formId != -1) { $where[] = " fg.form_id = " . (int) $filter_formId; } // filter the element names if ($search != '') { $where[] = " (e.name LIKE '%{$search}%' OR e.label LIKE '%{$search}%')"; } // filter if its shown in table if ($filter_showInTable != '') { $where[] = " e.show_in_table_summary = '{$filter_showInTable}'"; } // filter if its published if ($filter_published != '') { $where[] = " e.state = '{$filter_published}'"; } $where = count($where) ? ' WHERE ' . implode(' AND ', $where) : ''; $orderby = ' ORDER BY ' . $filter_order . ' ' . $filter_order_Dir . ', g.id, e.ordering'; $join = "\n LEFT JOIN #__fabrik_groups AS g " . "\n ON e.group_id = g.id " . "\n LEFT JOIN #__fabrik_plugins " . "\n ON e.plugin = #__fabrik_plugins.name " . "\n LEFT JOIN #__fabrik_formgroup AS fg " . "\n ON fg.group_id = g.id " . "\n LEFT JOIN #__users AS u ON e.checked_out = u.id "; //$join .= "\n LEFT JOIN jos_fabrik_joins as j ON j.group_id = g.id "; $join .= "\n LEFT JOIN #__fabrik_tables as t on fg.form_id = t.form_id "; // get the total number of records $db->setQuery("SELECT COUNT(*) FROM #__fabrik_elements AS e {$join}" . $where); $total = $db->loadResult(); echo $db->getErrorMsg(); jimport('joomla.html.pagination'); $pageNav = new JPagination($total, $limitstart, $limit); // $this will only get the element full name for those elements in a joined group // $$$ hugh - altered this query as ... // WHERE (jj.table_id != 0 AND jj.element_id = 0) // ...instead of ... // WHERE jj.table_id != 0 //... otherwiose we pick up repeat elements, as they have both table and element set // and he query fails with "returns multiple values" for the fullname select $fullname = "\n\t\t(SELECT DISTINCT(\n\t\tIF( ISNULL(jj.table_join), CONCAT(tt.db_table_name, '___', ee.name), CONCAT(jj.table_join, '___', ee.name))\n\t\t)\n\t\tFROM #__fabrik_elements AS ee\n\t\tLEFT JOIN #__fabrik_joins AS jj ON jj.group_id = ee.group_id\n\t\tLEFT JOIN #__fabrik_formgroup as fg ON fg.group_id = ee.group_id\n\t\tLEFT JOIN #__fabrik_tables as tt ON tt.form_id = fg.form_id\n\t\tWHERE (jj.table_id != 0 AND jj.element_id = 0)\n\t\tAND jj.group_id != 0\n\t\tAND ee.id = e.id) AS tablename"; $sql = "SELECT {$fullname}, e.*, u.name AS editor, e.id AS id, " . "\n e.checked_out AS checked_out, #__fabrik_plugins.label AS pluginlabel,\t " . "\n e.checked_out_time AS checked_out_time, " . "\n e.state as state, g.name AS group_name, " . "\n fg.group_id, t.db_table_name, " . "\n e.name AS name, e.label AS label, e.ordering AS ordering " . "\n FROM #__fabrik_elements AS e " . $join . "\n {$where} {$orderby} "; $db->setQuery($sql, $pageNav->limitstart, $pageNav->limit); $rows = $db->loadObjectList(); if ($db->getErrorNum() != 0) { JError::raiseNotice(500, $db->getErrorMsg()); } //get the join elemnent name of those elements not in a joined group foreach ($rows as &$row) { if ($row->tablename == '') { $row->tablename = $row->db_table_name . '___' . $row->name; } } $groupModels = array(); //element types $pluginManager =& JModel::getInstance('Pluginmanager', 'FabrikModel'); $pluginManager->_group = 'element'; $lists['elementId'] = $pluginManager->getElementTypeDd($filter_elementTypeId, 'filter_elementTypeId', 'class="inputbox" onchange="document.adminForm.submit();"', '- ' . JText::_('ELEMENT TYPE') . ' -'); //groups into a drop down list $groupModel = JModel::getInstance('Group', 'FabrikModel'); $lists['groupId'] = $groupModel->makeDropDown($filter_groupId, '- ' . JText::_('GROUP') . ' -'); $yesNoList = FabrikHelperHTML::yesNoOptions('', '- ' . JText::_('SHOW IN TABLE') . ' -'); $lists['filter_showInTable'] = JHTML::_('select.genericlist', $yesNoList, 'filter_showInTable', 'class="inputbox" onchange="document.adminForm.submit();"', 'value', 'text', $filter_showInTable); //filter on published list $yesNoList = FabrikHelperHTML::yesNoOptions('', '- ' . JText::_('PUBLISHED') . ' -'); $lists['filter_published'] = JHTML::_('select.genericlist', $yesNoList, 'filter_published', 'class="inputbox" onchange="document.adminForm.submit();"', 'value', 'text', $filter_published); $lists['search'] = $search; $formModel =& JModel::getInstance('Form', 'FabrikModel'); $lists['filter_formId'] = $formModel->makeDropDown($filter_formId, "- " . JText::_('FORMS') . " -"); require_once JPATH_COMPONENT . DS . 'views' . DS . 'element.php'; FabrikViewElement::show($rows, $pageNav, $lists); }