1<?php 2 3/** 4 * The Ajax driven response page. 5 * 6 * This Source Code Form is subject to the terms of the Mozilla Public License, 7 * v. 2.0. If a copy of the MPL was not distributed with this file, You can 8 * obtain one at http://mozilla.org/MPL/2.0/. 9 * 10 * @package phpMyFAQ 11 * @author Thorsten Rinne <thorsten@phpmyfaq.de> 12 * @copyright 2007-2020 phpMyFAQ Team 13 * @license http://www.mozilla.org/MPL/2.0/ Mozilla Public License Version 2.0 14 * @link https://www.phpmyfaq.de 15 * @since 2007-03-27 16 */ 17 18use phpMyFAQ\Category; 19use phpMyFAQ\Faq; 20use phpMyFAQ\Filter; 21use phpMyFAQ\Helper\HttpHelper; 22use phpMyFAQ\Helper\SearchHelper; 23use phpMyFAQ\Language; 24use phpMyFAQ\Language\Plurals; 25use phpMyFAQ\Permission\MediumPermission; 26use phpMyFAQ\Search; 27use phpMyFAQ\Search\SearchResultSet; 28use phpMyFAQ\Strings; 29use phpMyFAQ\User\CurrentUser; 30 31define('IS_VALID_PHPMYFAQ', null); 32 33// 34// Prepend and start the PHP session 35// 36require 'src/Bootstrap.php'; 37 38$searchString = Filter::filterInput(INPUT_GET, 'search', FILTER_SANITIZE_STRIPPED); 39$ajaxLanguage = Filter::filterInput(INPUT_POST, 'ajaxlanguage', FILTER_SANITIZE_STRING, 'en'); 40$categoryId = Filter::filterInput(INPUT_GET, 'searchcategory', FILTER_VALIDATE_INT, '%'); 41 42$language = new Language($faqConfig); 43$languageCode = $language->setLanguage( 44 $faqConfig->get('main.languageDetection'), 45 $faqConfig->get('main.language') 46); 47$faqConfig->setLanguage($language); 48 49require_once 'lang/language_en.php'; 50 51if (Language::isASupportedLanguage($ajaxLanguage)) { 52 $languageCode = trim($ajaxLanguage); 53 require_once 'lang/language_' . $languageCode . '.php'; 54} else { 55 $languageCode = 'en'; 56 require_once 'lang/language_en.php'; 57} 58 59//Load plurals support for selected language 60$plr = new Plurals($PMF_LANG); 61 62// 63// Initializing static string wrapper 64// 65Strings::init($languageCode); 66 67// 68// Get current user and group id - default: -1 69// 70$user = CurrentUser::getFromCookie($faqConfig); 71if (!$user instanceof CurrentUser) { 72 $user = CurrentUser::getFromSession($faqConfig); 73} 74if (isset($user) && is_object($user)) { 75 $currentUser = $user->getUserId(); 76 if ($user->perm instanceof MediumPermission) { 77 $currentGroups = $user->perm->getUserGroups($currentUser); 78 } else { 79 $currentGroups = [-1]; 80 } 81 if (0 == count($currentGroups)) { 82 $currentGroups = [-1]; 83 } 84} else { 85 $user = new CurrentUser($faqConfig); 86 $currentUser = -1; 87 $currentGroups = [-1]; 88} 89 90$category = new Category($faqConfig, $currentGroups); 91$category->setUser($currentUser); 92$category->setGroups($currentGroups); 93$category->transform(0); 94$category->buildTree(); 95 96$faq = new Faq($faqConfig); 97$faqSearch = new Search($faqConfig); 98$faqSearchResult = new SearchResultSet($user, $faq, $faqConfig); 99 100// 101// Send headers 102// 103$http = new HttpHelper(); 104$http->setContentType('application/json'); 105$http->addHeader(); 106 107// 108// Handle the search requests 109// 110if (!is_null($searchString)) { 111 $faqSearch->setCategory($category); 112 113 $searchResult = $faqSearch->autoComplete($searchString); 114 $faqSearchResult->reviewResultSet($searchResult); 115 116 $faqSearchHelper = new SearchHelper($faqConfig); 117 $faqSearchHelper->setSearchTerm($searchString); 118 $faqSearchHelper->setCategory($category); 119 $faqSearchHelper->setPlurals($plr); 120 121 $http->sendWithHeaders($faqSearchHelper->renderInstantResponseResult($faqSearchResult)); 122} 123