Files
opensem/app/Repositories/Core/Auth/Users.php
Ludovic CANDELLIER f3e9ccaa46 'fixes'
2022-04-24 22:07:31 +02:00

290 lines
8.1 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;
use App\Repositories\Core\Upload;
use LangleyFoxall\LaravelNISTPasswordRules\PasswordRules;
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();
$data['clients'] = $user->clients->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);
$user->roles()->sync(array_keys($data['roles'] ?? []));
UserClients::associate($user->id, $data['clients'] ?? false );
// $user->sendNewUserNotification($data['remember_token'], Auth::user());
return $user;
}
public static function create($data, $copy_password = false)
{
$data['password'] = $copy_password ? $data['password'] : ($data['password'] ? Hash::make($data['password']) : Hash::make(Str::random(8)));
$user = User::create($data);
PasswordSecurities::create($user->id);
return $user;
}
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($id = false)
{
$user = $id ? self::get($id) : self::getUser();
return $user->first_name . ' ' . $user->last_name;
}
public static function getUsername($id = false)
{
return $id ? self::get($id)->username : self::getUser()->username;
}
public static function getUser()
{
return Auth::user();
}
public static function isConnected()
{
return Auth::check();
}
public static function getOptions()
{
return User::orderBy('name')->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')->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();
}
public static function select_all_by_status_id($status_id)
{
return User::byStatus($status_id);
}
public static function select_by_id($user_id)
{
return User::with('status')->find($user_id)->toArray();
}
public static function select_by_name($name)
{
return self::getByName($name)->toArray();
}
public static function getByUsername($username)
{
return User::byUsername($username)->withTrashed()->first();
}
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();
}
public static function select_datas_by_id($user_id)
{
return User::with('status')->find($user_id)->toArray();
}
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 = Upload::getData($file);
$file_uploaded = Upload::store($file, $targetDir);
$tab = pathinfo($file_uploaded);
$response['name'] = $tab['basename'];
return $response;
}
public static function update_avatar($id, $avatar)
{
return User::find($id)->update(['avatar' => $avatar]);
}
public static function update_password($id, $password)
{
$password = Hash::make($password);
UserClients::changePasswordsByUser($id, $password);
return User::find($id)->update(['password' => $password]);
// $connection = app(Connection::class);
// return User::on($connection->systemName())->find($id)->update(['password' => $password]);
}
public static function validate($username, $field = 'current_password')
{
return PasswordRules::changePassword($username, $field);
}
}