function getFaqsFromSearch($queryarray = array(), $andor = 'AND', $limit = 0, $offset = 0, $userid = 0) { global $xoopsUser; $ret = array(); $userIsAdmin = sf_userIsAdmin(); if ($userid != 0) { $criteriaUser = new CriteriaCompo(); $criteriaUser->add(new Criteria('faq.uid', $userid), 'OR'); $criteriaUser->add(new Criteria('answer.uid', $userid), 'OR'); } if ($queryarray) { $criteriaKeywords = new CriteriaCompo(); for ($i = 0; $i < count($queryarray); $i++) { $criteriaKeyword = new CriteriaCompo(); $criteriaKeyword->add(new Criteria('faq.question', '%' . $queryarray[$i] . '%', 'LIKE'), 'OR'); $criteriaKeyword->add(new Criteria('answer.answer', '%' . $queryarray[$i] . '%', 'LIKE'), 'OR'); $criteriaKeywords->add($criteriaKeyword, $andor); unset($criteriaKeyword); } } // Categories for which user has access if (!$userIsAdmin) { $smartPermHandler =& xoops_getmodulehandler('permission', 'smartfaq'); $categoriesGranted = $smartPermHandler->getPermissions('category'); $faqsGranted = $smartPermHandler->getPermissions('item'); if (!$categoriesGranted) { return $ret; } if (!$faqsGranted) { return $ret; } $grantedCategories = new Criteria('faq.categoryid', "(" . implode(',', $categoriesGranted) . ")", 'IN'); $grantedFaq = new CriteriaCompo(); $grantedFaq->add(new Criteria('faq.faqid', "(" . implode(',', $faqsGranted) . ")", 'IN'), 'OR'); // If user is anonymous, check if the FAQ allow partialview if (!is_object($xoopsUser)) { $grantedFaq->add(new Criteria('partialview', '1'), 'OR'); } } $criteriaPermissions = new CriteriaCompo(); if (!$userIsAdmin) { $criteriaPermissions->add($grantedCategories, 'AND'); $criteriaPermissions->add($grantedFaq, 'AND'); } $criteriaAnswersStatus = new CriteriaCompo(); $criteriaAnswersStatus->add(new Criteria('answer.status', _SF_AN_STATUS_APPROVED)); $criteriaFasStatus = new CriteriaCompo(); $criteriaFasStatus->add(new Criteria('faq.status', _SF_STATUS_OPENED), 'OR'); $criteriaFasStatus->add(new Criteria('faq.status', _SF_STATUS_PUBLISHED), 'OR'); $criteria = new CriteriaCompo(); if (!empty($criteriaUser)) { $criteria->add($criteriaUser, 'AND'); } if (!empty($criteriaKeywords)) { $criteria->add($criteriaKeywords, 'AND'); } if (!empty($criteriaPermissions) && !$userIsAdmin) { $criteria->add($criteriaPermissions); } if (!empty($criteriaAnswersStatus)) { $criteria->add($criteriaAnswersStatus, 'AND'); } if (!empty($criteriaFasStatus)) { $criteria->add($criteriaFasStatus, 'AND'); } $criteria->setLimit($limit); $criteria->setStart($offset); $criteria->setSort('faq.datesub'); $criteria->setOrder('DESC'); $sql = 'SELECT faq.faqid, faq.question, faq.datesub, faq.uid FROM ' . $this->db->prefix('smartfaq_faq') . ' as faq INNER JOIN ' . $this->db->prefix('smartfaq_answers') . ' as answer ON faq.faqid = answer.faqid'; if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) { $whereClause = $criteria->renderWhere(); if ($whereClause != 'WHERE ()') { $sql .= ' ' . $criteria->renderWhere(); if ($criteria->getSort() != '') { $sql .= ' ORDER BY ' . $criteria->getSort() . ' ' . $criteria->getOrder(); } $limit = $criteria->getLimit(); $start = $criteria->getStart(); } } //echo "<br />" . $sql . "<br />"; $result = $this->db->query($sql, $limit, $start); if (!$result) { trigger_error("Query did not work in smartfaq", E_USER_WARNING); return $ret; } if (count($result) == 0) { return $ret; } while ($myrow = $this->db->fetchArray($result)) { $faq = new sfFaq(); $faq->assignVars($myrow); $ret[] =& $faq; unset($faq); } return $ret; }