setupFromQuery() is called too early

Kirby

Well-known member
Affected version
2.3.7
XF\Repository\SearchRepository
PHP:
public function runSearch(KeywordQuery $query, array $constraints = [], $allowCached = true)
{
    $user = \XF::visitor();
    /** @var Search $search */
    $search = $this->em->create(Search::class);
    $search->setupFromQuery($query, $constraints);
    $search->user_id = $user->user_id;
    if ($allowCached && $this->allowUserUseCachedResults($user))
    {
        $previous = $this->getPreviousSearch($query, $user);
    }
    else
    {
        $previous = null;
    }
    if ($previous)
    {
        $search = $previous;
    }
    else
    {
        $results = $this->app()->search()->search($query);
        if (!$results)
        {
            return null;
        }
        $search->search_results = $results;
        $search->save();
    }
    return $search;
}

This does not catch warnings etc. that occur when the search is actually executed and should be changed so setupFromQuery is called after the search has been executed.

PHP:
public function runSearch(KeywordQuery $query, array $constraints = [], $allowCached = true)
{
    $user = \XF::visitor();

    if ($allowCached && $this->allowUserUseCachedResults($user))
    {
        $previous = $this->getPreviousSearch($query, $user);

        if ($previous)
        {
            return $previous;
        }
    }

    $results = $this->app()->search()->search($query);

    if (!$results)
    {
        return null;
    }

    $search = $this->em->create(Search::class);
    $search->setupFromQuery($query, $constraints);
    $search->user_id = $user->user_id;
    $search->search_results = $results;
    $search->save();

    return $search;
}
 
Last edited:
Back
Top Bottom