diff --git a/app/Filters/UserFilters.php b/app/Filters/UserFilters.php new file mode 100644 index 000000000000..b6f49895d5fc --- /dev/null +++ b/app/Filters/UserFilters.php @@ -0,0 +1,111 @@ +builder; + + return $this->builder->where(function ($query) use ($filter) { + $query->where('users.first_name', 'like', '%'.$filter.'%') + ->orWhere('users.last_name', 'like' , '%'.$filter.'%') + ->orWhere('users.email', 'like' , '%'.$filter.'%') + ->orWhere('users.signature', 'like' , '%'.$filter.'%'); + }); + } + + /** + * Filters the list based on the status + * archived, active, deleted + * + * @param string filter + * @return Illuminate\Database\Query\Builder + */ + public function status(string $filter = '') : Builder + { + if(strlen($filter) == 0) + return $this->builder; + + $table = 'users'; + $filters = explode(',', $filter); + + return $this->builder->where(function ($query) use ($filters, $table) { + $query->whereNull($table . '.id'); + + if (in_array(parent::STATUS_ACTIVE, $filters)) { + $query->orWhereNull($table . '.deleted_at'); + } + + if (in_array(parent::STATUS_ARCHIVED, $filters)) { + $query->orWhere(function ($query) use ($table) { + $query->whereNotNull($table . '.deleted_at'); + + if (! in_array($table, ['users'])) { + $query->where($table . '.is_deleted', '=', 0); + } + }); + } + + if (in_array(parent::STATUS_DELETED, $filters)) { + $query->orWhere($table . '.is_deleted', '=', 1); + } + }); + } + + /** + * Sorts the list based on $sort + * + * @param string sort formatted as column|asc + * @return Illuminate\Database\Query\Builder + */ + public function sort(string $sort) : Builder + { + $sort_col = explode("|", $sort); + return $this->builder->orderBy($sort_col[0], $sort_col[1]); + } + + /** + * Returns the base query + * + * @param int company_id + * @return Illuminate\Database\Query\Builder + * @deprecated + */ + public function baseQuery(int $company_id, User $user) : Builder + { + + } + + /** + * Filters the query by the users company ID + * + * @param $company_id The company Id + * @return Illuminate\Database\Query\Builder + */ + public function entityFilter() + { + + return $this->builder->whereCompanyId(auth()->user()->company()->id); + + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index d15fe5f04a63..02eec1043549 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -2,7 +2,11 @@ namespace App\Http\Controllers; +use App\Filters\UserFilters; use App\Http\Controllers\Traits\VerifiesUserEmail; +use App\Models\User; +use App\Transformers\UserTransformer; +use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; /** @@ -13,10 +17,95 @@ class UserController extends BaseController { use VerifiesUserEmail; + use MakesHash; + + protected $entity_type = User::class; + + protected $entity_transformer = UserTransformer::class; + public function __construct() { parent::__construct(); } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index(UserFilters $filster) + { + $users = User::filter($filters); + + return $this->listResponse($users); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } + } diff --git a/app/Models/User.php b/app/Models/User.php index 24fea90e9bf4..31e8c2120358 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Models\Company; use App\Models\CompanyToken; use App\Models\CompanyUser; +use App\Models\Filterable; use App\Models\Traits\UserTrait; use App\Utils\Traits\MakesHash; use App\Utils\Traits\UserSessionAttributes; @@ -25,7 +26,8 @@ class User extends Authenticatable implements MustVerifyEmail use MakesHash; use UserSessionAttributes; use UserSettings; - + use Filterable; + protected $guard = 'user'; protected $dates = ['deleted_at']; diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php index 7eace9598b0e..7d7e1351e37c 100644 --- a/app/Observers/UserObserver.php +++ b/app/Observers/UserObserver.php @@ -2,6 +2,7 @@ namespace App\Observers; +use App\Events\User\UserWasUpdated; use App\Models\User; class UserObserver @@ -25,7 +26,7 @@ class UserObserver */ public function updated(User $user) { - // + event(new UserWasUpdated($user)); } /**