public function searchAll(Request $request)
{
$crit = $request->get('crit');
$suggest = $request->get('suggest');
$group = $request->get('group');
$response['products'] = ['results' => null, 'suggestions' => null];
$crit = str_replace(' ', '%', trim($crit));
$crit = str_replace('%%', '%', $crit);
if ($crit != '') {
if ($suggest) {
$response['products']['categories'] = Category::select('id', 'name')->search($crit, null, true)->actives()->where('type', 'store')->orderBy('name')->take(3)->get();
}
$response['products']['results'] = Product::where(function ($query) use($crit) {
$query->where('name', 'like', '%' . $crit . '%')->orWhere('description', 'like', '%' . $crit . '%');
})->select('id', 'name', 'products_group')->actives()->free()->orderBy('rate_val', 'desc');
if ($group) {
$response['products']['results']->where(function ($query) use($group) {
$query->where('products_group', '<>', $group)->orWhereNull('products_group');
})->where('id', '<>', $group);
}
$response['products']['results'] = $response['products']['results']->take(5)->get();
$deep = '';
if ($suggest) {
$crit = str_replace('%', '', $crit);
for ($i = 0; $i < strlen($crit); $i++) {
$deep .= ' ' . $crit[$i];
}
}
if (!$response['products']['results']->count() && strlen($crit) > 2) {
$response['products']['results'] = Product::select('id', 'name', 'products_group')->search($deep, null, true)->actives()->free()->orderBy('rate_val', 'desc');
if ($group) {
$response['products']['results']->where(function ($query) use($group) {
$query->where('products_group', '<>', $group)->orWhereNull('products_group');
})->where('id', '<>', $group);
}
$response['products']['results'] = $response['products']['results']->take(5)->get();
}
if ($suggest) {
$response['products']['suggestions'] = self::getSuggestions(['user_id' => \Auth::id(), 'preferences_key' => 'my_searches', 'limit' => 3, 'select' => ['id', 'name', 'features']]);
if (!$response['products']['categories']->count() && strlen($crit) > 2) {
$response['products']['categories'] = Category::select('id', 'name')->search($deep, null, true)->actives()->where('type', 'store')->orderBy('name')->take(3)->get();
}
}
}
$response['products']['categories_title'] = trans('globals.suggested_categories');
$response['products']['suggestions_title'] = trans('globals.suggested_products');
$response['products']['results_title'] = trans('globals.searchResults');
if ($request->wantsJson()) {
return json_encode($response);
} else {
if (env('APP_DEBUG', false)) {
dd($response);
}
}
}