mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
339 lines
14 KiB
PHP
339 lines
14 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Libraries\PasswordHash;
|
|
use App\Models\ActivityModel;
|
|
use App\Models\CountriesModel;
|
|
use App\Models\UserModel;
|
|
use App\Models\UserGroupModel;
|
|
use App\Models\GroupUserModel;
|
|
|
|
class User extends BaseController
|
|
{
|
|
private $user_model;
|
|
private $group_model;
|
|
private $group_user_model;
|
|
private $countries_model;
|
|
private $activity_model;
|
|
|
|
function __construct()
|
|
{
|
|
$this->user_model = new UserModel();
|
|
$this->group_model = new UserGroupModel();
|
|
$this->countries_model = new CountriesModel();
|
|
$this->activity_model = new ActivityModel();
|
|
$this->group_user_model = new GroupUserModel();
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$data['title'] = [
|
|
'module' => lang("App.user_title"),
|
|
'page' => lang("App.user_subtitle"),
|
|
'icon' => 'fas fa-user-friends'
|
|
];
|
|
|
|
$data['breadcrumb'] = [
|
|
['title' => lang("App.menu_dashboard"), 'route' => "/home", 'active' => false],
|
|
['title' => lang("App.user_title"), 'route' => "", 'active' => true]
|
|
];
|
|
|
|
$data['btn_add'] = [
|
|
'title' => lang("App.user_btn_add"),
|
|
'route' => '/user/add',
|
|
'class' => 'btn btn-lg btn-primary float-md-right',
|
|
'icon' => 'fas fa-plus'
|
|
];
|
|
|
|
echo view(getenv('theme.path').'main/header');
|
|
echo view(getenv('theme.path').'form/user/index',$data);
|
|
echo view(getenv('theme.path').'main/footer');
|
|
}
|
|
|
|
public function add()
|
|
{
|
|
helper('form');
|
|
|
|
$data['title'] = [
|
|
'module' => lang("App.user_add_title"),
|
|
'page' => lang("App.user_add_subtitle"),
|
|
'icon' => 'far fa-plus-square'
|
|
];
|
|
|
|
$data['breadcrumb'] = [
|
|
['title' => lang("App.menu_dashboard"), 'route' => "/home", 'active' => false],
|
|
['title' => lang("App.user_title"), 'route' => "/user", 'active' => false],
|
|
['title' => lang("App.user_add_title"), 'route' => "", 'active' => true]
|
|
];
|
|
|
|
$data['btn_return'] = [
|
|
'title' => lang("App.global_come_back"),
|
|
'route' => '/user',
|
|
'class' => 'btn btn-dark mr-1',
|
|
'icon' => 'fas fa-angle-left'
|
|
];
|
|
|
|
$data['btn_submit'] = [
|
|
'title' => lang("App.global_save"),
|
|
'route' => '',
|
|
'class' => 'btn btn-primary mr-1',
|
|
'icon' => 'fas fa-save'
|
|
];
|
|
|
|
|
|
$data['selected_groups'] = [];
|
|
|
|
$data['group'] = $this->group_model->select('token,title')->findAll();
|
|
$data['country'] = $this->countries_model->select('code,name')->where('data_lang',session()->get('lang')??'en')->findAll();
|
|
|
|
echo view(getenv('theme.path').'main/header');
|
|
echo view(getenv('theme.path').'form/user/form',$data);
|
|
echo view(getenv('theme.path').'main/footer');
|
|
}
|
|
|
|
public function edit($token=null)
|
|
{
|
|
if(empty($token)){
|
|
return redirect()->to('/user');
|
|
}
|
|
|
|
helper('form');
|
|
|
|
$data['title'] = [
|
|
'module' => lang("App.user_edit_title"),
|
|
'page' => lang("App.user_edit_subtitle"),
|
|
'icon' => 'fas fa-edit'
|
|
];
|
|
|
|
$data['breadcrumb'] = [
|
|
['title' => lang("App.menu_dashboard"), 'route' => "/home", 'active' => false],
|
|
['title' => lang("App.user_title"), 'route' => "/user", 'active' => false],
|
|
['title' => lang("App.user_edit_title"), 'route' => "", 'active' => true]
|
|
];
|
|
|
|
$data['btn_return'] = [
|
|
'title' => lang("App.global_come_back"),
|
|
'route' => '/user',
|
|
'class' => 'btn btn-dark mr-1',
|
|
'icon' => 'fas fa-angle-left'
|
|
];
|
|
|
|
$data['btn_submit'] = [
|
|
'title' => lang("App.global_save"),
|
|
'route' => '',
|
|
'class' => 'btn btn-primary mr-1',
|
|
'icon' => 'fas fa-save'
|
|
];
|
|
|
|
$data['obj'] = $this->user_model->where('token', $token)->first();
|
|
if($data['obj']==null){
|
|
return redirect()->to('/user');
|
|
}
|
|
if(!empty($data['obj']['date_birth'])){
|
|
$data['obj']['date_birth'] = dateFormatWeb($data['obj']['date_birth']);
|
|
}
|
|
|
|
$data['selected_groups'] = $this->group_user_model->select('token_group')->where('token_user', $token)->findAll();
|
|
|
|
$data['group'] = $this->group_model->select('token,title')->findAll();
|
|
$data['country'] = $this->countries_model->select('code,name')->where('data_lang',session()->get('lang')??'en')->findAll();
|
|
|
|
echo view(getenv('theme.path').'main/header');
|
|
echo view(getenv('theme.path').'form/user/form',$data);
|
|
echo view(getenv('theme.path').'main/footer');
|
|
}
|
|
|
|
public function store()
|
|
{
|
|
//Demo Mode
|
|
if(env('demo.mode')??false){
|
|
session()->setFlashdata('sweet', ['warning',lang("App.general_demo_mode")]);
|
|
return redirect()->to('/user');
|
|
}
|
|
|
|
$session = session();
|
|
helper('form');
|
|
|
|
$password = 'max_length[35]';
|
|
$confirm_password = 'max_length[35]';
|
|
$email = 'required|valid_email';
|
|
|
|
if(empty($this->request->getPost('id_user'))){
|
|
$email = 'required|valid_email|is_unique[auth_user.email]';
|
|
$password = 'required|min_length[8]';
|
|
$confirm_password = 'matches[password]';
|
|
}else{
|
|
if(!empty($this->request->getPost('password'))){
|
|
$password = 'required|min_length[8]';
|
|
$confirm_password = 'matches[password]';
|
|
}
|
|
}
|
|
|
|
$rules = [
|
|
'first_name' => 'required',
|
|
'last_name' => 'required',
|
|
'email' => $email,
|
|
'password' => $password,
|
|
'confirm_password' => $confirm_password
|
|
];
|
|
|
|
$rules_error = [
|
|
'first_name' => [
|
|
'required' => lang("App.user_rules_first_name_r"),
|
|
],
|
|
'last_name' => [
|
|
'required' => lang("App.user_rules_last_name_r"),
|
|
],
|
|
'email' => [
|
|
'required' => lang("App.user_rules_email_r"),
|
|
'is_unique' => lang("App.user_rules_email_i"),
|
|
],
|
|
'password' => [
|
|
'required' => lang("App.user_rules_password_r"),
|
|
'min_length' => lang("App.user_rules_password_m"),
|
|
],
|
|
'confirm_password' => [
|
|
'matches' => lang("App.user_rules_password_confirm_m"),
|
|
]
|
|
];
|
|
|
|
if ($this->validate($rules,$rules_error)){
|
|
$date_birth = !empty($this->request->getPost('date_birth')??'') ? dateFormatMysql($this->request->getPost('date_birth')):null;
|
|
if(empty($this->request->getPost('id_user'))){
|
|
$phpass = new PasswordHash(8, true);
|
|
$this->user_model->save([
|
|
'id_user' => null,
|
|
//'group' => $this->request->getPost('group'),
|
|
'first_name' => $this->request->getPost('first_name'),
|
|
'last_name' => $this->request->getPost('last_name'),
|
|
'date_birth' => $date_birth,
|
|
'address' => $this->request->getPost('address'),
|
|
'city' => $this->request->getPost('city'),
|
|
'state' => $this->request->getPost('state'),
|
|
'country' => $this->request->getPost('country'),
|
|
'zip_code' => $this->request->getPost('zip_code'),
|
|
'mobile' => $this->request->getPost('mobile'),
|
|
'email' => $this->request->getPost('email'),
|
|
'password' => $phpass->HashPassword($this->request->getPost('password')),
|
|
'last_access' => date('Y-m-d h:i:s'),
|
|
'last_ip' => '::1',
|
|
'picture' => '/assets/img/default-user.png',
|
|
'language' => $this->request->getPost('language'),
|
|
'token' => md5(uniqid(rand(), true)),
|
|
'status' => $this->request->getPost('status'),
|
|
'email_confirmed' => $this->request->getPost('email_confirmed')
|
|
]);
|
|
|
|
}else{
|
|
|
|
$this->user_model->save([
|
|
'id_user' => $this->request->getPost('id_user'),
|
|
//'group' => $this->request->getPost('group'),
|
|
'first_name' => $this->request->getPost('first_name'),
|
|
'last_name' => $this->request->getPost('last_name'),
|
|
'date_birth' => $date_birth,
|
|
'address' => $this->request->getPost('address'),
|
|
'city' => $this->request->getPost('city'),
|
|
'state' => $this->request->getPost('state'),
|
|
'country' => $this->request->getPost('country'),
|
|
'zip_code' => $this->request->getPost('zip_code'),
|
|
'mobile' => $this->request->getPost('mobile'),
|
|
'email' => $this->request->getPost('email'),
|
|
'language' => $this->request->getPost('language'),
|
|
'status' => $this->request->getPost('status'),
|
|
'email_confirmed' => $this->request->getPost('email_confirmed')
|
|
]);
|
|
if(!empty($this->request->getPost('password'))){
|
|
$phpass = new PasswordHash(8, true);
|
|
$this->user_model->save([
|
|
'id_user' => $this->request->getPost('id_user'),
|
|
'password' => $phpass->HashPassword($this->request->getPost('password')),
|
|
]);
|
|
}
|
|
|
|
// Update group_user pivot table
|
|
$user_token = $this->user_model
|
|
->select('token')
|
|
->where('id_user',$this->request->getPost('id_user'))->first()['token'];
|
|
$this->group_user_model->where('token_user', $user_token)->delete();
|
|
$groups = $this->request->getPost('group');
|
|
foreach ($groups as $group){
|
|
$group_user_data = [
|
|
'token_user' => $user_token,
|
|
'token_group' => $group
|
|
];
|
|
$this->group_user_model->insert($group_user_data);
|
|
}
|
|
}
|
|
|
|
|
|
if(empty($this->request->getPost('id_user'))){
|
|
$session->setFlashdata('sweet', ['success',lang("App.user_alert_add")]);
|
|
return redirect()->to('/user');
|
|
}else{
|
|
if($session->get('id_user') == $this->request->getPost('id_user')){
|
|
// Get groups tokens
|
|
$user_token = $this->user_model
|
|
->select('token')
|
|
->where('id_user',$this->request->getPost('id_user'))->first()['token'];
|
|
$groups = $this->group_user_model
|
|
->select('token_group')
|
|
->where('token_user',$user_token)->findAll();
|
|
|
|
if (sizeof($groups)>1){
|
|
|
|
$access_rules = $this->group_model->select('rules')->where('token',$groups[0])->first()['rules'];
|
|
$access_rules = json_decode(html_entity_decode($access_rules), true);
|
|
for ($i=1; $i<sizeof($groups); $i++){
|
|
$temp_rules = $this->group_model->select('rules')->where('token',$groups[$i])->first()['rules'];
|
|
foreach ($access_rules as $key => $value){
|
|
if (array_key_exists($key, json_decode(html_entity_decode($temp_rules), true))){
|
|
$value2 = json_decode(html_entity_decode($temp_rules), true)[$key];
|
|
$access_rules[$key] = array_unique(array_merge($value, $value2));
|
|
}
|
|
else{
|
|
$access_rules[$key]= $value;
|
|
}
|
|
}
|
|
foreach (json_decode(html_entity_decode($temp_rules), true) as $key2 => $value2){
|
|
if (!array_key_exists($key2, $access_rules)){
|
|
$access_rules[$key2] = $value2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
$access_rules = $this->group_model->select('rules')->where('token',$groups)->first();
|
|
}
|
|
$session->set('rules', html_entity_decode(json_encode($access_rules)));
|
|
}
|
|
$session->setFlashdata('sweet', ['success',lang("App.user_alert_edit")]);
|
|
return redirect()->to('/user');
|
|
}
|
|
|
|
}else{
|
|
$session->setFlashdata('error','error');
|
|
$this->add();
|
|
}
|
|
}
|
|
|
|
public function delete($token)
|
|
{
|
|
//Demo Mode
|
|
if(env('demo.mode')??false){
|
|
session()->setFlashdata('sweet', ['warning',lang("App.general_demo_mode")]);
|
|
return redirect()->to('/user');
|
|
}
|
|
$session = session();
|
|
if(!empty($session->get('token'))){
|
|
$this->user_model->where('token', $token)->delete();
|
|
$this->activity_model->where('user', $token)->delete();
|
|
$session->setFlashdata('sweet', ['success',lang("App.user_alert_delete")]);
|
|
return redirect()->to('/user');
|
|
}else{
|
|
return redirect()->to('/login');
|
|
}
|
|
}
|
|
}
|