. */ declare(strict_types=1); namespace FireflyIII\Http\Controllers; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Search\SearchInterface; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Response; use View; /** * Class SearchController. */ class SearchController extends Controller { /** * SearchController constructor. */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { app('view')->share('mainTitleIcon', 'fa-search'); app('view')->share('title', trans('firefly.search')); return $next($request); } ); } /** * @param Request $request * @param SearchInterface $searcher * * @return View */ public function index(Request $request, SearchInterface $searcher) { $fullQuery = strval($request->get('q')); // parse search terms: $searcher->parseQuery($fullQuery); $query = $searcher->getWordsAsString(); $subTitle = trans('breadcrumbs.search_result', ['query' => $query]); return view('search.index', compact('query', 'fullQuery', 'subTitle')); } /** * @param Request $request * @param SearchInterface $searcher * * @return \Illuminate\Http\JsonResponse * * @throws \Throwable */ public function search(Request $request, SearchInterface $searcher) { $fullQuery = strval($request->get('query')); $transactions = new Collection; // cache $cache = new CacheProperties; $cache->addProperty('search'); $cache->addProperty($fullQuery); if ($cache->has()) { $transactions = $cache->get(); // @codeCoverageIgnore } if (!$cache->has()) { // parse search terms: $searcher->parseQuery($fullQuery); $searcher->setLimit(intval(env('SEARCH_RESULT_LIMIT', 50))); $transactions = $searcher->searchTransactions(); $cache->store($transactions); } $html = view('search.search', compact('transactions'))->render(); return Response::json(['count' => $transactions->count(), 'html' => $html]); } }