You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
6.0 KiB
220 lines
6.0 KiB
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use CodeIgniter\Model;
|
|
|
|
class Users extends Model
|
|
{
|
|
/**
|
|
* table users name
|
|
* @var string
|
|
*/
|
|
protected $table = 'users';
|
|
protected $allowedFields = ['username', 'password', 'email', 'firstname', 'lastname', 'phone', 'gender', 'store_id'];
|
|
|
|
/**
|
|
* function used when user try to login
|
|
* @param string $email
|
|
* @param string $password
|
|
* @return array|bool|object
|
|
*/
|
|
public function attempt(string $email, string $password, $isOutside = null)
|
|
{
|
|
$user = $this->select('users.*, groups.id as group_id, groups.group_name, groups.permission')
|
|
->join('user_group', 'user_group.user_id = users.id', 'left')
|
|
->join('groups', 'groups.id = user_group.group_id', 'left')
|
|
->where('users.email', $email)
|
|
->first();
|
|
|
|
// Verify password
|
|
if ($isOutside != null) {
|
|
if ($user) {
|
|
return $user; // Return user details with group info
|
|
}
|
|
} else {
|
|
if ($user && password_verify($password, $user['password'])) {
|
|
return $user; // Return user details with group info
|
|
}
|
|
}
|
|
|
|
return false; // Return false if authentication fails
|
|
}
|
|
|
|
|
|
/**
|
|
* get user by id
|
|
* @param int $userId
|
|
* @return array|object|null
|
|
*/
|
|
public function getUserData(int $userId = null)
|
|
{
|
|
if ($userId) {
|
|
return $this->where('id', $userId)->first();
|
|
}
|
|
|
|
return $this->where('id !=', 1)->findAll();
|
|
}
|
|
|
|
public function getUsersByGroup()
|
|
{
|
|
return $this->select('users.*')
|
|
->join('user_group', 'user_group.user_id = users.id')
|
|
->join('groups', 'user_group.group_id = groups.id')
|
|
->where('groups.group_name', 'COMMERCIALE')
|
|
->findAll(); // Get all matching users
|
|
}
|
|
/**
|
|
* get grouped user by id
|
|
* @param mixed $userId
|
|
* @return array|null
|
|
*/
|
|
public function getUserGroup($userId = null)
|
|
{
|
|
if ($userId) {
|
|
$userGroup = $this->db->table('user_group')->where('user_id', $userId)->get()->getRowArray();
|
|
|
|
if ($userGroup) {
|
|
$groupId = $userGroup['group_id'];
|
|
return $this->db->table('groups')->where('id', $groupId)->get()->getRowArray();
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function getUsers()
|
|
{
|
|
return $this->select('users.*, groups.id as group_id, groups.group_name, groups.permission')
|
|
->join('user_group', 'user_group.user_id = users.id', 'left')
|
|
->join('groups', 'groups.id = user_group.group_id', 'left')
|
|
->where('groups.group_name', \strtoupper('MECANICIEN'))
|
|
->findAll(); // Returns all users
|
|
}
|
|
|
|
/**
|
|
* create users
|
|
* @param mixed $data
|
|
* @param mixed $groupId
|
|
* @return bool
|
|
*/
|
|
public function create($data = '', $groupId = null)
|
|
{
|
|
if ($data && $groupId) {
|
|
$this->db->table('users')->insert($data);
|
|
$userId = $this->db->insertID();
|
|
|
|
$groupData = [
|
|
'user_id' => $userId,
|
|
'group_id' => $groupId
|
|
];
|
|
|
|
$this->db->table('user_group')->insert($groupData);
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* edit users
|
|
* @param mixed $data
|
|
* @param mixed $id
|
|
* @param mixed $groupId
|
|
* @return bool
|
|
*/
|
|
public function edit($data = [], $id = null, $groupId = null)
|
|
{
|
|
if ($id) {
|
|
$this->db->table('users')->where('id', $id)->update($data);
|
|
|
|
if ($groupId) {
|
|
$this->db->table('user_group')->where('user_id', $id)->update(['group_id' => $groupId]);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Assigner un utilisateur à un magasin
|
|
*
|
|
* @param int|null $userid ID de l'utilisateur
|
|
* @param int|null $storeid ID du magasin
|
|
* @return bool Résultat de l'opération (true si success, false sinon)
|
|
*/
|
|
public function assignToStore($userid = null, $storeid = null)
|
|
{
|
|
// Vérifie si l'utilisateur et le magasin sont fournis
|
|
if (!is_null($userid) && !is_null($storeid)) {
|
|
// Mise à jour du champ store_id pour l'utilisateur spécifié
|
|
// die(var_dump($this->db->table('users')
|
|
// ->where('id', $userid)
|
|
// ->update(['store_id' => $storeid])));
|
|
$this->db->table('users')
|
|
->where('id', $userid)
|
|
->update(['store_id' => $storeid]);
|
|
|
|
return true;
|
|
}
|
|
|
|
// Si $userid ou $storeid est null, l'opération échoue
|
|
return false;
|
|
}
|
|
|
|
|
|
/**
|
|
* delete users
|
|
* @param mixed $id
|
|
* @return bool
|
|
*/
|
|
public function deletes($id)
|
|
{
|
|
if ($id) {
|
|
$this->db->table('users')->where('id', $id)->delete();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// To count the total number of users
|
|
public function countTotalUsers()
|
|
{
|
|
return $this->countAllResults();
|
|
}
|
|
|
|
public function getUserWithGroupName(int $userId = null)
|
|
{
|
|
if ($userId === null) {
|
|
return null;
|
|
}
|
|
|
|
$builder = $this->db
|
|
->table('users AS u')
|
|
->select([
|
|
'g.group_name AS group_name',
|
|
])
|
|
->join('user_group AS ug', 'ug.user_id = u.id')
|
|
->join('groups AS g', 'g.id = ug.group_id')
|
|
->where('u.id', $userId);
|
|
|
|
return $builder->get()->getRowArray(); // ✅ Il faut retourner les données
|
|
}
|
|
public function getUserDataForAssign(int $userId)
|
|
{
|
|
$builder = $this->db->table('users u');
|
|
$builder->select('u.id, u.firstname, u.lastname, u.store_id, s.name as store_name, g.group_name');
|
|
$builder->join('stores s', 's.id = u.store_id', 'left');
|
|
$builder->join('user_group ug', 'ug.user_id = u.id', 'left');
|
|
$builder->join('groups g', 'g.id = ug.group_id', 'left');
|
|
$builder->where('u.id', $userId);
|
|
$query = $builder->get();
|
|
return $query->getRowArray();
|
|
}
|
|
|
|
|
|
}
|
|
|