Beispiel #1
0
 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;
 }