/** * logic to get the categories * * @return void */ public function getCategories() { $user = JFactory::getUser(); $jemsettings = JEMHelper::config(); $userid = (int) $user->get('id'); $superuser = JEMUser::superuser(); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select(array('c.*')); $query->from($db->quoteName('#__jem_categories') . ' AS c'); $query->where(array('c.published = 1 ')); $query->order(array('c.parent_id', 'c.ordering')); $db->setQuery($query); $mitems = $db->loadObjectList(); # Check for a database error. if ($db->getErrorNum()) { JError::raiseNotice(500, $db->getErrorMsg()); } if (!$mitems) { $mitems = array(); $children = array(); $parentid = $mitems; } else { $mitems_temp = $mitems; $children = array(); # First pass - collect children foreach ($mitems as $v) { $pt = $v->parent_id; $list = @$children[$pt] ? $children[$pt] : array(); array_push($list, $v); $children[$pt] = $list; } $parentid = intval($mitems[0]->parent_id); } # get list of the items $list = JemCategories::treerecurse($parentid, '', array(), $children, 9999, 0, 0); return $list; }
/** * Method to get categories item data * * @access public * @return array */ function getData() { $app = JFactory::getApplication(); $db = JFactory::getDBO(); $jinput = $app->input; $itemid = $jinput->getInt('id', 0) . ':' . $jinput->getInt('Itemid', 0); static $items; if (isset($items)) { return $items; } $filter_order = $app->getUserStateFromRequest('com_jem.categoryelement.filter_order', 'filter_order', 'c.lft', 'cmd'); $filter_order_Dir = $app->getUserStateFromRequest('com_jem.categoryelement.filter_order_Dir', 'filter_order_Dir', '', 'word'); $filter_state = $app->getUserStateFromRequest('com_jem.categoryelement.' . $itemid . '.filter_state', 'filter_state', '', 'string'); $search = $app->getUserStateFromRequest('com_jem.categoryelement.' . $itemid . '.filter_search', 'filter_search', '', 'string'); $search = $db->escape(trim(JString::strtolower($search))); $filter_order = JFilterInput::getinstance()->clean($filter_order, 'cmd'); $filter_order_Dir = JFilterInput::getinstance()->clean($filter_order_Dir, 'word'); $state = array(1); $query = $db->getQuery(true); $query->select(array('c.*', 'u.name AS editor', 'g.title AS groupname', 'gr.name AS catgroup')); $query->from('#__jem_categories AS c'); $query->join('LEFT', '#__viewlevels AS g ON g.id = c.access'); $query->join('LEFT', '#__users AS u ON u.id = c.checked_out'); $query->join('LEFT', '#__jem_groups AS gr ON gr.id = c.groupid'); if (is_numeric($filter_state)) { $query->where('c.published = ' . (int) $filter_state); } else { $query->where('c.published IN (' . implode(',', $state) . ')'); } $query->order($filter_order . ' ' . $filter_order_Dir); $db->setQuery($query); $mitems = $db->loadObjectList(); // Check for a database error. if ($db->getErrorNum()) { JError::raiseNotice(500, $db->getErrorMsg()); } if (!$mitems) { $mitems = array(); $children = array(); $parentid = $mitems; } else { $mitems_temp = $mitems; $children = array(); // First pass - collect children foreach ($mitems as $v) { $pt = $v->parent_id; $list = @$children[$pt] ? $children[$pt] : array(); array_push($list, $v); $children[$pt] = $list; } $parentid = intval($mitems[0]->parent_id); } // get list of the items $list = JemCategories::treerecurse($parentid, '', array(), $children, 9999, 0, 0); // note, since this is a tree we have to do the limits code-side if ($search) { $query = $db->getQuery(true); $query->select('c.id'); $query->from('#__jem_categories AS c'); $query->where(array('LOWER(c.catname) LIKE ' . $db->Quote('%' . $this->_db->escape($search, true) . '%', false), 'c.published IN (' . implode(',', $state) . ')')); $db->setQuery($query); $search_rows = $db->loadColumn(); } // eventually only pick out the searched items. if ($search) { $list1 = array(); foreach ($search_rows as $sid) { foreach ($list as $item) { if ($item->id == $sid) { $list1[] = $item; } } } // replace full list with found items $list = $list1; } $total = count($list); jimport('joomla.html.pagination'); $this->_pagination = new JPagination($total, $this->getState('limitstart'), $this->getState('limit')); // slice out elements based on limits $list = array_slice($list, $this->_pagination->limitstart, $this->_pagination->limit); return $list; }