middleware(function ($request, $next) { $ignore = [ // * Support Web 9, // * Gen-Game- Web 15, // * Store LDC 19, // * CRM 27, // * LDC - WEB 55, ]; $ticketsNew = Ticket::where('status', TicketStatus::new()); $ticketsWaiting = Ticket::where('status', TicketStatus::waiting()); $ticketsInProgress = Ticket::whereNotIn( 'status', [ TicketStatus::new(), TicketStatus::estimateTodo(), TicketStatus::estimateValidated(), TicketStatus::toPlan(), TicketStatus::planned(), TicketStatus::waiting(), TicketStatus::production(), TicketStatus::archived() ] ); /** @var \App\Models\User|null */ $user = Auth::user(); if (!is_null($user) and !$user->isAdmin()) { $ticketsNew = $ticketsNew->where('is_internal', false)->whereNotIn('site_id', $ignore); $ticketsWaiting = $ticketsWaiting->where('is_internal', false)->whereNotIn('site_id', $ignore); $ticketsInProgress = $ticketsInProgress->where('is_internal', false)->whereNotIn('site_id', $ignore); } View::share('ticketsNew', $ticketsNew->count()); View::share('ticketsWaiting', $ticketsWaiting->count()); View::share('ticketsInProgress', $ticketsInProgress->count()); return $next($request); }); } /** * Build Search query on specified fields * splitting search into words or using whole sentence * * @param Builder $query The eloquent query builder. * @param string $search The query string. * @param callable $searchQuery The query string. * @param string ...$fields Either a simple array or a string * in case of a string the two fields would be concatenate to make the search. * @return Builder */ protected function searchQuery( Builder $query, string $search, callable $searchQuery = null, string ...$fields ): Builder { if (count($fields)) { // Search using words. $words = explode(' ', $search); $query->where(function ($query) use ($searchQuery, $words, $search, $fields) { foreach ($words as $word) { if (!strlen($word)) { continue; } $this->searchOnFields($query, $word, $fields); } //end foreach // Search whole using whole sentence. $this->searchOnFields($query, $search, $fields); if ($searchQuery) { $searchQuery($query); } }); } //end if return $query; } /** * Build query search on all fields * * @param Builder $query * @param string $search * @param array $fields * @return Builder */ private function searchOnFields(Builder $query, string $search, array $fields): Builder { $table = $query->getModel()->getTable(); foreach ($fields as $f) { $f = str_replace('?', '\?', $f); if (is_array($f)) { $query->orWhereRaw( sprintf("UPPER(CONCAT(%s)) LIKE UPPER(?)", collect($f)->map(function ($q) use ($table) { return "`$table`.`$q`"; })->implode(', \' \', ')), ["%$search%"] ); } else { $query->orWhereRaw("UPPER(`$table`.`$f`) LIKE UPPER(?)", ["%$search%"]); } } return $query; } }