Example #1
0
 /**
  * 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);
 }