示例#1
0
文件: search.php 项目: atlcurling/tkt
    $allLanguages = false;
    $languages = '';
}
// HACK: (re)evaluate the Category object w/o passing the user language
//       so the result set of a Search will have the Category Path
//       for any of the multilanguage faq records and the Category list
//       on the left pane will not be affected
if ($allLanguages) {
    $category = new PMF_Category();
    $category->transform(0);
}
if (is_null($user)) {
    $user = new PMF_User_CurrentUser();
}
$faqSearch = new PMF_Search($db, $Language);
$faqSearchResult = new PMF_Search_Resultset($user, $faq);
$tagSearch = false;
//
// Handle the Tagging ID
//
if (!is_null($inputTag)) {
    $tagSearch = true;
    $tagging = new PMF_Tags($db, $Language);
    $recordIds = $tagging->getRecordsByTagId($inputTag);
    $searchResult = $faq->showAllRecordsByIds($recordIds);
} else {
    $searchResult = '';
}
//
// Handle the full text search stuff
//
示例#2
0
    if ($user->perm instanceof PMF_Perm_PermMedium) {
        $current_groups = $user->perm->getUserGroups($current_user);
    } else {
        $current_groups = array(-1);
    }
    if (0 == count($current_groups)) {
        $current_groups = array(-1);
    }
} else {
    $user = new PMF_User_CurrentUser();
    $current_user = -1;
    $current_groups = array(-1);
}
$faq = new PMF_Faq();
$faqSearch = new PMF_Search($db, $language);
$faqSearchResult = new PMF_Search_Resultset($user, $faq);
$categoryData = new PMF_Category_Tree_DataProvider_SingleQuery($LANGCODE);
$categoryLayout = new PMF_Category_Layout(new PMF_Category_Tree_Helper(new PMF_Category_Tree($categoryData)));
//
// Handle the search requests
//
if (!is_null($searchString)) {
    $faqSearch->setCategory($categoryId);
    $searchResult = $faqSearch->search($searchString, false);
    $faqSearchResult->reviewResultset($searchResult);
    $faqSearchHelper = PMF_Helper_Search::getInstance();
    $faqSearchHelper->setSearchterm($searchString);
    $faqSearchHelper->setCategoryLayout($categoryLayout);
    $faqSearchHelper->setPlurals($plr);
    print $faqSearchHelper->renderInstantResponseResult($faqSearchResult);
}
示例#3
0
 $save = PMF_Filter::filterInput(INPUT_POST, 'save', FILTER_VALIDATE_INT, 0);
 // If e-mail address is set to optional
 if (!PMF_Configuration::getInstance()->get('main.optionalMailAddress') && is_null($email)) {
     $email = PMF_Configuration::getInstance()->get('main.administrationMail');
 }
 if (!is_null($name) && !empty($name) && !is_null($email) && !empty($email) && !is_null($question) && !empty($question) && checkBannedWord(PMF_String::htmlspecialchars($question))) {
     if (PMF_Configuration::getInstance()->get('records.enableVisibilityQuestions')) {
         $visibility = 'N';
     } else {
         $visibility = 'Y';
     }
     if (1 != $save) {
         $cleanQuestion = PMF_Stopwords::getInstance()->clean($question);
         $user = new PMF_User_CurrentUser();
         $faqSearch = new PMF_Search($db, $Language);
         $faqSearchResult = new PMF_Search_Resultset($user, $faq);
         $searchResult = array();
         $mergedResult = array();
         foreach ($cleanQuestion as $word) {
             $searchResult[] = $faqSearch->search($word);
         }
         foreach ($searchResult as $resultSet) {
             foreach ($resultSet as $result) {
                 $mergedResult[] = $result;
             }
         }
         $faqSearchResult->reviewResultset($mergedResult);
         if (0 < $faqSearchResult->getNumberOfResults()) {
             $response = sprintf('<p>%s</p>', $plr->GetMsg('plmsgSearchAmount', $faqSearchResult->getNumberOfResults()));
             $response .= '<ul>';
             foreach ($faqSearchResult->getResultset() as $result) {
    $allLanguages = false;
    $languages = '';
}
// HACK: (re)evaluate the Category object w/o passing the user language
//       so the result set of a Search will have the Category Path
//       for any of the multilanguage faq records and the Category list
//       on the left pane will not be affected
if ($allLanguages) {
    $category = new PMF_Category($faqConfig);
    $category->transform(0);
}
if (is_null($user)) {
    $user = new PMF_User_CurrentUser($faqConfig);
}
$faqSearch = new PMF_Search($faqConfig);
$faqSearchResult = new PMF_Search_Resultset($user, $faq, $faqConfig);
$tagSearch = false;
//
// Handle the Tagging ID
//
if (!is_null($inputTag)) {
    $tagSearch = true;
    $tagging = new PMF_Tags($faqConfig);
    $recordIds = $tagging->getRecordsByTagId($inputTag);
    $searchResult = $faq->showAllRecordsByIds($recordIds);
} else {
    $searchResult = '';
}
//
// Handle the full text search stuff
//
 /**
  * @param PMF_Search_Resultset $resultSet
  * @param integer              $recordId
  *
  * @return string
  */
 public function renderRelatedFaqs(PMF_Search_Resultset $resultSet, $recordId)
 {
     $html = '';
     $numOfResults = $resultSet->getNumberOfResults();
     if ($numOfResults > 0) {
         $html .= '<ul>';
         $counter = 0;
         foreach ($resultSet->getResultset() as $result) {
             if ($counter >= 5) {
                 continue;
             }
             if ($recordId == $result->id) {
                 continue;
             }
             $counter++;
             $url = sprintf('%s?action=artikel&amp;cat=%d&amp;id=%d&amp;artlang=%s', PMF_Link::getSystemRelativeUri(), $result->category_id, $result->id, $result->lang);
             $oLink = new PMF_Link($url, $this->_config);
             $oLink->itemTitle = $result->question;
             $oLink->text = $result->question;
             $oLink->tooltip = $result->question;
             $html .= '<li>' . $oLink->toHtmlAnchor() . '</li>';
         }
         $html .= '</ul>';
     }
     return $html;
 }
示例#6
0
 */
if (!defined('IS_VALID_PHPMYFAQ')) {
    header('Location: http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']));
    exit;
}
$captcha = new PMF_Captcha($db, $Language);
$oGlossary = new PMF_Glossary();
$oLnk = new PMF_Linkverifier();
$faqTagging = new PMF_Tags($db, $Language);
$faqRelation = new PMF_Relation($db, $Language);
$faqRating = new PMF_Rating();
$faqComment = new PMF_Comment();
if (is_null($user)) {
    $user = new PMF_User_CurrentUser();
}
$faqSearchResult = new PMF_Search_Resultset($user, $faq);
$captcha->setSessionId($sids);
if (!is_null($showCaptcha)) {
    $captcha->showCaptchaImg();
    exit;
}
$currentCategory = $cat;
$recordId = PMF_Filter::filterInput(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$solutionId = PMF_Filter::filterInput(INPUT_GET, 'solution_id', FILTER_VALIDATE_INT);
$highlight = PMF_Filter::filterInput(INPUT_GET, 'highlight', FILTER_SANITIZE_STRIPPED);
// Set the FAQ language
$faq->setLanguage($lang);
// Get all data from the FAQ record
if (0 == $solutionId) {
    $faq->getRecord($recordId);
} else {
示例#7
0
    } else {
        $current_groups = array(-1);
    }
    if (0 == count($current_groups)) {
        $current_groups = array(-1);
    }
} else {
    $user = new PMF_User_CurrentUser($faqConfig);
    $current_user = -1;
    $current_groups = array(-1);
}
$category = new PMF_Category($faqConfig);
$category->setUser($current_user);
$category->transform(0);
$category->buildTree();
$faq = new PMF_Faq($faqConfig);
$faqSearch = new PMF_Search($faqConfig);
$faqSearchResult = new PMF_Search_Resultset($user, $faq, $faqConfig);
//
// Handle the search requests
//
if (!is_null($searchString)) {
    $faqSearch->setCategory($categoryId);
    $searchResult = $faqSearch->search($searchString, false);
    $faqSearchResult->reviewResultset($searchResult);
    $faqSearchHelper = new PMF_Helper_Search($faqConfig);
    $faqSearchHelper->setSearchterm($searchString);
    $faqSearchHelper->setCategory($category);
    $faqSearchHelper->setPlurals($plr);
    Response::create($faqSearchHelper->renderInstantResponseResult($faqSearchResult))->send();
}
                 if (is_array($item) && count($item) == 3 && PMF_Language::isASupportedLanguage($item[1])) {
                     echo $faq->updateRecordFlag((int) $item[0], addslashes($item[1]), $item[2], 'sticky');
                 }
             }
         }
     } else {
         echo $PMF_LANG['err_NotAuth'];
     }
     break;
     // search FAQs for suggestions
 // search FAQs for suggestions
 case 'search_records':
     if ($permission['editbt']) {
         $faq = new PMF_Faq($faqConfig);
         $faqSearch = new PMF_Search($faqConfig);
         $faqSearchResult = new PMF_Search_Resultset($user, $faq, $faqConfig);
         $searchResult = '';
         $searchString = PMF_Filter::filterInput(INPUT_POST, 'search', FILTER_SANITIZE_STRIPPED);
         if (!is_null($searchString)) {
             $searchResult = $faqSearch->search($searchString, false);
             $faqSearchResult->reviewResultset($searchResult);
             $searchHelper = new PMF_Helper_Search($faqConfig);
             $searchHelper->setSearchterm($searchString);
             echo $searchHelper->renderAdminSuggestionResult($faqSearchResult);
         }
     } else {
         echo $PMF_LANG['err_NotAuth'];
     }
     break;
     // delete FAQs
 // delete FAQs
示例#9
0
 /**
  * Renders the result page for the main search page
  * 
  * @param PMF_Search_Resultset $resultSet   PMF_Search_Resultset object
  * @param integer              $currentPage Current page number
  * 
  * @return string
  */
 public function renderSearchResult(PMF_Search_Resultset $resultSet, $currentPage)
 {
     $html = '';
     $confPerPage = PMF_Configuration::getInstance()->get('main.numberOfRecordsPerPage');
     $numOfResults = $resultSet->getNumberOfResults();
     $totalPages = ceil($numOfResults / $confPerPage);
     $lastPage = $currentPage * $confPerPage;
     $firstPage = $lastPage - $confPerPage;
     if ($lastPage > $numOfResults) {
         $lastPage = $numOfResults;
     }
     if (0 < $numOfResults) {
         $html .= sprintf("<p>%s</p>\n", $this->plurals->GetMsg('plmsgSearchAmount', $numOfResults));
         if (1 < $totalPages) {
             $html .= sprintf("<p><strong>%s%d %s %s</strong></p>\n", $this->translation['msgPage'], $currentPage, $this->translation['msgVoteFrom'], $this->plurals->GetMsg('plmsgPagesTotal', $totalPages));
         }
         $html .= "<ul class=\"phpmyfaq_ul\">\n";
         foreach ($resultSet->getResultset() as $result) {
             $categoryName = $this->categoryLayout->renderBreadcrumb(array($result->category_id));
             $question = PMF_Utils::chopString($result->question, 15);
             $answerPreview = PMF_Utils::chopString(strip_tags($result->answer), 25);
             $searchterm = str_replace(array('^', '.', '?', '*', '+', '{', '}', '(', ')', '[', ']', '"'), '', $this->searchterm);
             $searchterm = preg_quote($searchterm, '/');
             $searchItems = explode(' ', $searchterm);
             if (PMF_String::strlen($searchItems[0]) > 1) {
                 foreach ($searchItems as $item) {
                     if (PMF_String::strlen($item) > 2) {
                         $question = PMF_Utils::setHighlightedString($question, $item);
                         $answerPreview = PMF_Utils::setHighlightedString($answerPreview, $item);
                     }
                 }
             }
             // Build the link to the faq record
             $currentUrl = sprintf('%s?%saction=artikel&amp;cat=%d&amp;id=%d&amp;artlang=%s&amp;highlight=%s', PMF_Link::getSystemRelativeUri(), $this->sessionId, $result->category_id, $result->id, $result->lang, urlencode($searchterm));
             $oLink = new PMF_Link($currentUrl);
             $oLink->text = $oLink->itemTitle = $oLink->tooltip = $result->question;
             $html .= sprintf("<li><strong>%s</strong>: %s<br /><div class=\"searchpreview\"><strong>%s</strong> %s...</div><br /></li>\n", $categoryName, $oLink->toHtmlAnchor(), $this->translation['msgSearchContent'], $answerPreview);
         }
         $html .= "</ul>\n";
         if (1 > $totalPages) {
             $html .= $this->pagination->render();
         }
     } else {
         $html = $this->translation['err_noArticles'];
     }
     return $html;
 }
示例#10
0
switch ($action) {
    case 'getVersion':
        $result = array('version' => $faqConfig->get('main.currentVersion'));
        break;
    case 'getApiVersion':
        $result = array('apiVersion' => (int) $faqConfig->get('main.currentApiVersion'));
        break;
    case 'getCount':
        $faq = new PMF_Faq($faqConfig);
        $result = array('faqCount' => $faq->getNumberOfRecords($language));
        break;
    case 'search':
        $faq = new PMF_Faq($faqConfig);
        $user = new PMF_User($faqConfig);
        $search = new PMF_Search($faqConfig);
        $faqSearchResult = new PMF_Search_Resultset($user, $faq, $faqConfig);
        $searchString = PMF_Filter::filterInput(INPUT_GET, 'q', FILTER_SANITIZE_STRIPPED);
        $searchResults = $search->search($searchString, false);
        $url = $faqConfig->get('main.referenceURL') . '/index.php?action=artikel&cat=%d&id=%d&artlang=%s';
        $faqSearchResult->reviewResultset($searchResults);
        $result = array();
        foreach ($faqSearchResult->getResultset() as $data) {
            $data->answer = html_entity_decode(strip_tags($data->answer), ENT_COMPAT, 'utf-8');
            $data->answer = PMF_Utils::makeShorterText($data->answer, 12);
            $data->link = sprintf($url, $data->category_id, $data->id, $data->lang);
            $result[] = $data;
        }
        break;
    case 'getCategories':
        $category = new PMF_Category($faqConfig, $currentGroups, true);
        $category->setUser($currentUser);
示例#11
0
        $protocol = 'https';
    }
    header('Location: ' . $protocol . '://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']));
    exit;
}
$captcha = new PMF_Captcha($faqConfig);
$oGlossary = new PMF_Glossary($faqConfig);
$oLnk = new PMF_Linkverifier($faqConfig);
$faqTagging = new PMF_Tags($faqConfig);
$faqRelation = new PMF_Relation($faqConfig);
$faqRating = new PMF_Rating($faqConfig);
$faqComment = new PMF_Comment($faqConfig);
if (is_null($user)) {
    $user = new PMF_User_CurrentUser($faqConfig);
}
$faqSearchResult = new PMF_Search_Resultset($user, $faq, $faqConfig);
$captcha->setSessionId($sids);
if (!is_null($showCaptcha)) {
    $captcha->showCaptchaImg();
    exit;
}
$currentCategory = $cat;
$recordId = PMF_Filter::filterInput(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$solutionId = PMF_Filter::filterInput(INPUT_GET, 'solution_id', FILTER_VALIDATE_INT);
// Get all data from the FAQ record
if (0 == $solutionId) {
    $faq->getRecord($recordId);
} else {
    $faq->getRecordBySolutionId($solutionId);
}
$recordId = $faq->faqRecord['id'];
示例#12
0
                     $output .= $faq->updateRecordFlag((int) $item[0], addslashes($item[1]), $item[2], 'sticky');
                 }
             }
             $response->setContent($output);
         }
     } else {
         $response->setContent($PMF_LANG['err_NotAuth']);
     }
     break;
     // search FAQs for suggestions
 // search FAQs for suggestions
 case 'search_records':
     if ($user->perm->checkRight($user->getUserId(), 'editbt')) {
         $faq = new PMF_Faq($faqConfig);
         $faqSearch = new PMF_Search($faqConfig);
         $faqSearchResult = new PMF_Search_Resultset($user, $faq, $faqConfig);
         $searchResult = '';
         $searchString = PMF_Filter::filterInput(INPUT_POST, 'search', FILTER_SANITIZE_STRIPPED);
         if (!is_null($searchString)) {
             $searchResult = $faqSearch->search($searchString, false);
             $faqSearchResult->reviewResultset($searchResult);
             $searchHelper = new PMF_Helper_Search($faqConfig);
             $searchHelper->setSearchterm($searchString);
             $response->setContent($searchHelper->renderAdminSuggestionResult($faqSearchResult));
         }
     } else {
         $response->setContent($PMF_LANG['err_NotAuth']);
     }
     break;
     // delete FAQs
 // delete FAQs