277 lines
7.9 KiB
PHP
277 lines
7.9 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories\Core\Auth;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Str;
|
|
|
|
use Hyn\Tenancy\Database\Connection;
|
|
use Laratrust\Traits\LaratrustUserTrait;
|
|
|
|
use App\Models\Core\Auth\User;
|
|
use App\Models\Core\Auth\RoleUser;
|
|
|
|
use App\Repositories\Clients;
|
|
use App\Repositories\Partners;
|
|
|
|
class Users
|
|
{
|
|
use LaratrustUserTrait;
|
|
|
|
public static function isAdmin()
|
|
{
|
|
return (self::hasRole('admin')) ? true : false;
|
|
}
|
|
|
|
public static function getInfo($id = false)
|
|
{
|
|
$id = $id ? $id : self::getId();
|
|
if (!$id) {
|
|
return false;
|
|
}
|
|
$user = self::get($id);
|
|
$data = $user->toArray();
|
|
$data['name'] = $user->name;
|
|
$data['avatar'] = self::getAvatar($id);
|
|
$data['last_login'] = $user->previousLoginAt();
|
|
// $data['roles'] = self::getRoles();
|
|
// $data['permissions'] = self::getPermissions();
|
|
$data['roles'] = $user->roles->pluck('id')->toArray();
|
|
$data['permissions'] = $user->allPermissions()->pluck('id')->toArray();
|
|
return $data;
|
|
}
|
|
|
|
public static function store($data)
|
|
{
|
|
$id = isset($data['id']) ? $data['id'] : false;
|
|
|
|
if (!empty($data['password'])) {
|
|
$data['password'] = Hash::make($data['password']);
|
|
} else {
|
|
if ($id) {
|
|
unset($data['password']);
|
|
} else {
|
|
$data['password'] = Hash::make(Str::random(8));
|
|
}
|
|
}
|
|
$data['remember_token'] = Str::random(32);
|
|
$data['active'] = true;
|
|
|
|
$user = $id ? self::update($data, $id) : self::create($data);
|
|
|
|
if (isset($data['roles'])) {
|
|
$user->roles()->sync(array_keys($data['roles']));
|
|
}
|
|
// $user->sendNewUserNotification($data['remember_token'], Auth::user());
|
|
|
|
return $user;
|
|
}
|
|
|
|
public static function create($data)
|
|
{
|
|
$data['password'] = $data['password'] ? Hash::make($data['password']) : Hash::make(Str::random(8));
|
|
return User::create($data);
|
|
}
|
|
|
|
public static function update($data, $id = false)
|
|
{
|
|
$id = $id ? $id : $data['id'];
|
|
$user = self::get($id);
|
|
$ret = $user->update($data);
|
|
return $user;
|
|
}
|
|
|
|
public static function get($id = false)
|
|
{
|
|
$id = $id ? $id : self::getId();
|
|
return User::findOrFail($id);
|
|
}
|
|
|
|
public static function getId()
|
|
{
|
|
$user = self::getUser();
|
|
return $user ? $user->id : false;
|
|
}
|
|
|
|
public static function getName()
|
|
{
|
|
$user = self::getUser();
|
|
return $user->first_name . ' ' . $user->last_name;
|
|
}
|
|
|
|
public static function getUser()
|
|
{
|
|
return Auth::user();
|
|
}
|
|
|
|
public static function isConnected()
|
|
{
|
|
return Auth::check();
|
|
}
|
|
|
|
public static function getOptions()
|
|
{
|
|
return User::orderBy('name', 'asc')->get()->pluck('name', 'id')->toArray();
|
|
}
|
|
|
|
public static function delete($id)
|
|
{
|
|
$ret = RoleUser::byUser($id)->delete();
|
|
return User::destroy($id);
|
|
}
|
|
|
|
public static function getListByRole($role)
|
|
{
|
|
return self::selectOptions()->orderBy('name', 'asc')->whereRoleIs($role)->get();
|
|
}
|
|
|
|
public static function hasRole($role, $user = false)
|
|
{
|
|
$user = $user ? $user : self::getUser();
|
|
return $user ? $user->hasRole($role) : false;
|
|
}
|
|
|
|
public static function hasPermission($permission, $user = false)
|
|
{
|
|
if (self::isAdmin()) {
|
|
return true;
|
|
}
|
|
$user = $user ? $user : self::getUser();
|
|
$permissions = self::getPermissions($user);
|
|
return $user ? self::checkPermission($permissions, $permission) : false;
|
|
// TODO why is posing problem ???
|
|
// return $user ? $user->hasPermission($permission) : false;
|
|
}
|
|
|
|
public static function checkPermission($permissions, $permission)
|
|
{
|
|
if (!strpos($permission, '*')) {
|
|
return in_array($permission, $permissions);
|
|
}
|
|
$permission = str_replace('*', '', $permission);
|
|
foreach ($permissions as $item) {
|
|
if (stripos($item, $permission) !== false) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function getRoles($user = false)
|
|
{
|
|
$user = $user ? $user : self::getUser();
|
|
return $user ? $user->roles->pluck('name')->toArray() : false;
|
|
}
|
|
|
|
public static function getRolesToEdit()
|
|
{
|
|
return Roles::getListByRights();
|
|
}
|
|
|
|
public static function getPermissions($user = false)
|
|
{
|
|
$user = $user ? $user : self::getUser();
|
|
return $user ? $user->allPermissions()->pluck('name')->toArray() : false;
|
|
}
|
|
|
|
public static function getByTeam($id)
|
|
{
|
|
return User::byTeam($id)->get();
|
|
}
|
|
|
|
public static function getByUniqueTeam($id)
|
|
{
|
|
return User::byTeam($id)->byUniqueTeam()->get();
|
|
}
|
|
|
|
public static function destroyByUniqueTeam($id)
|
|
{
|
|
return User::byTeam($id)->byUniqueTeam()->delete();
|
|
}
|
|
|
|
public static function getAvatar($user_id)
|
|
{
|
|
$avatar = self::get($user_id)->avatar;
|
|
if (!$avatar) {
|
|
return '/assets/img/no-avatar.png';
|
|
}
|
|
$path = Clients::isClient() ? Clients::getPublicPath('/images/avatars/') : Partners::getPublicPath('/images/avatars/');
|
|
return $path . $avatar;
|
|
}
|
|
|
|
public static function selectOptions()
|
|
{
|
|
return User::select('id', DB::raw("concat(last_name,' ',first_name) as name"));
|
|
}
|
|
|
|
public static function count()
|
|
{
|
|
return User::count();
|
|
}
|
|
|
|
// récupère tous les utilisateurs pour un statut donné
|
|
public static function select_all_by_status_id($status_id)
|
|
{
|
|
return User::byStatus($status_id);
|
|
}
|
|
|
|
// récupère toutes les informations d'un utilisateur pour un id donné
|
|
public static function select_by_id($user_id)
|
|
{
|
|
return User::with('status')->find($user_id)->toArray();
|
|
}
|
|
|
|
// récupère toutes les informations d'un utilisateur pour un nom donné
|
|
public static function select_by_name($name)
|
|
{
|
|
return User::byName($name)->first()->toArray();
|
|
}
|
|
|
|
// récupère les utilisateurs actifs d'un statut, d'une équipe et d'une entité donnés
|
|
public static function select_by_status_and_team_and_entity($status_id, $team_id, $third_party_id)
|
|
{
|
|
return User::active()->byStatus($status_id)->byTeam($team_id)->byThirdParty($third_party_id)->get()->toArray();
|
|
}
|
|
|
|
// récupère toutes les informations nécessaires d'un utilisateur pour un id donné
|
|
public static function select_datas_by_id($user_id)
|
|
{
|
|
return User::with('status')->find($user_id)->toArray();
|
|
}
|
|
|
|
// met à jour le statut actif/inactif d'un utilisateur
|
|
public static function toggle_active($id, $active)
|
|
{
|
|
return self::get($id)->update(['active' => $active]);
|
|
}
|
|
|
|
public static function uploadAvatar($request)
|
|
{
|
|
$targetDir = 'uploads';
|
|
$file = $request->file('avatar_file');
|
|
$data = \App\Repositories\Core\Upload::getData($file);
|
|
$file_uploaded = \App\Repositories\Core\Upload::store($file, $targetDir);
|
|
$tab = pathinfo($file_uploaded);
|
|
$response['name'] = $tab['basename'];
|
|
return $response;
|
|
}
|
|
|
|
|
|
// met à jour l'avatar d'un utilisateur
|
|
public static function update_avatar($id, $avatar)
|
|
{
|
|
return User::find($id)->update(['avatar' => $avatar]);
|
|
}
|
|
|
|
// met à jour le mot de passe d'un utilisateur
|
|
public static function update_password($id, $password)
|
|
{
|
|
$password = Hash::make($password);
|
|
UserClients::changePasswordsByUser($id, $password);
|
|
$connection = app(Connection::class);
|
|
return User::on($connection->systemName())->find($id)->update(['password' => $password]);
|
|
}
|
|
}
|