diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index ea5a5949..6c4f9795 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -37,7 +37,6 @@ $routes->group('', [], function($routes) { $routes->group('paises', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) { $routes->get('', 'Paises::index', ['as' => 'paisList']); $routes->get('index', 'Paises::index', ['as' => 'paisIndex']); - $routes->get('list', 'Paises::index', ['as' => 'paisList2']); $routes->get('add', 'Paises::add', ['as' => 'newPais']); $routes->post('add', 'Paises::add', ['as' => 'createPais']); $routes->get('edit/(:num)', 'Paises::edit/$1', ['as' => 'editPais']); @@ -59,6 +58,32 @@ $routes->group('', [], function($routes) { $routes->post('allmenuitems', 'Tarifaacabado::allItemsSelect', ['as' => 'select2ItemsOfTarifasacabado']); $routes->post('menuitems', 'Tarifaacabado::menuItems', ['as' => 'menuItemsOfTarifasacabado']); }); + + $routes->group('users', ['namespace' => 'App\Controllers\Usuarios'], function ($routes) { + $routes->get('', 'Users::index', ['as' => 'userList']); + $routes->get('index', 'Users::index', ['as' => 'userIndex']); + $routes->get('list', 'Users::index', ['as' => 'userList2']); + $routes->get('add', 'Users::add', ['as' => 'newUser']); + $routes->post('add', 'Users::add', ['as' => 'createUser']); + $routes->get('edit/(:num)', 'Users::edit/$1', ['as' => 'editUser']); + $routes->post('edit/(:num)', 'Users::edit/$1', ['as' => 'updateUser']); + $routes->get('delete/(:num)', 'Users::delete/$1', ['as' => 'deleteUser']); + $routes->post('allmenuitems', 'Users::allItemsSelect', ['as' => 'select2ItemsOfUsers']); + $routes->post('menuitems', 'Users::menuItems', ['as' => 'menuItemsOfUsers']); + }); + + $routes->group('group', ['namespace' => 'App\Controllers\Usuarios'], function ($routes) { + $routes->get('', 'Group::index', ['as' => 'userGroupList']); + $routes->get('index', 'Group::index', ['as' => 'groupIndex']); + $routes->post('edit/(:num)', 'Group::edit/$1', ['as' => 'updateGroup']); + $routes->get('edit/(:num)', 'Group::edit/$1', ['as' => 'editGroup']); + $routes->get('delete/(:num)', 'Group::delete/$1', ['as' => 'deleteGroup']); + }); + $routes->resource('group', ['namespace' => 'App\Controllers\Usuarios', 'controller' => 'UserGroups', 'except' => 'show,new,create,update']); + + + + }); diff --git a/ci4/app/Controllers/Activity.php b/ci4/app/Controllers/Activity.php index 95b695e8..609f1c4d 100644 --- a/ci4/app/Controllers/Activity.php +++ b/ci4/app/Controllers/Activity.php @@ -3,7 +3,7 @@ namespace App\Controllers; use App\Models\ActivityModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; class Activity extends BaseController { diff --git a/ci4/app/Controllers/Ajax.php b/ci4/app/Controllers/Ajax.php index e044c218..bbe7cbb1 100644 --- a/ci4/app/Controllers/Ajax.php +++ b/ci4/app/Controllers/Ajax.php @@ -4,7 +4,7 @@ namespace App\Controllers; use App\Models\CronTabModel; use App\Models\NotificationModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; use App\Models\UserGroupModel; use App\Models\GroupUserModel; use App\Models\ActivityModel; diff --git a/ci4/app/Controllers/Api.php b/ci4/app/Controllers/Api.php index 77701109..fee1ac15 100644 --- a/ci4/app/Controllers/Api.php +++ b/ci4/app/Controllers/Api.php @@ -4,7 +4,7 @@ namespace App\Controllers; use App\Libraries\PasswordHash; use App\Models\SettingsModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\RESTful\ResourceController; diff --git a/ci4/app/Controllers/Configuracion/Paises.php b/ci4/app/Controllers/Configuracion/Paises.php index ff527a2c..744987f4 100644 --- a/ci4/app/Controllers/Configuracion/Paises.php +++ b/ci4/app/Controllers/Configuracion/Paises.php @@ -169,7 +169,7 @@ class Paises extends \App\Controllers\GoBaseController { endif; // ($requestMethod === 'post') $this->viewData['pais'] = $pais; - + $this->viewData['formAction'] = route_to('updatePais', $id); $this->viewData['boxTitle'] = lang('Basic.global.edit2').' '.lang('Paises.pais').' '.lang('Basic.global.edit3'); diff --git a/ci4/app/Controllers/Cron.php b/ci4/app/Controllers/Cron.php index 90da5893..36927dde 100644 --- a/ci4/app/Controllers/Cron.php +++ b/ci4/app/Controllers/Cron.php @@ -7,7 +7,7 @@ use App\Models\BackupModel; use App\Models\CronTabModel; use App\Models\NotificationModel; use App\Models\SettingsModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; class Cron extends BaseController { diff --git a/ci4/app/Controllers/Home.php b/ci4/app/Controllers/Home.php index 2008c4d6..efa5da5a 100644 --- a/ci4/app/Controllers/Home.php +++ b/ci4/app/Controllers/Home.php @@ -3,7 +3,7 @@ namespace App\Controllers; use App\Models\ActivityModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; class Home extends BaseController { @@ -18,6 +18,7 @@ class Home extends BaseController public function index() { + /* $session = session(); $id_user = $session->get('id_user'); $name = $session->get('first_name'); @@ -70,8 +71,8 @@ class Home extends BaseController for ($i = 1; $i <= 12; $i++) { $notFound = true; foreach ($return_char_bar_geral as $item){ - if($i == intval($item['month'])){ - array_push($year,intval($item['total'])); + if($i == intval($item->month)){ + array_push($year,intval($item->total)); $notFound = false; break; } @@ -85,8 +86,8 @@ class Home extends BaseController for ($i = 1; $i <= 12; $i++) { $notFound = true; foreach ($return_char_bar_enabled as $item){ - if($i == intval($item['month'])){ - array_push($year,intval($item['total'])); + if($i == intval($item->month)){ + array_push($year,intval($item->total)); $notFound = false; break; } @@ -100,8 +101,8 @@ class Home extends BaseController for ($i = 1; $i <= 12; $i++) { $notFound = true; foreach ($return_char_bar_disabled as $item){ - if($i == intval($item['month'])){ - array_push($year,intval($item['total'])); + if($i == intval($item->month)){ + array_push($year,intval($item->total)); $notFound = false; break; } @@ -124,7 +125,7 @@ class Home extends BaseController ->findAll(30); echo view(getenv('theme.path').'main/header'); - echo view(getenv('theme.path').'form/dashboard/admin',$data); + //echo view(getenv('theme.path').'form/dashboard/admin',$data); echo view(getenv('theme.path').'main/footer'); break; @@ -140,13 +141,16 @@ class Home extends BaseController ]; echo view(getenv('theme.path').'main/header'); - echo view(getenv('theme.path').'form/dashboard/user',$data); + //echo view(getenv('theme.path').'form/dashboard/user',$data); echo view(getenv('theme.path').'main/footer'); break; default: echo view(getenv('theme.path').'main/header'); - echo view(getenv('theme.path').'form/dashboard/index'); + //echo view(getenv('theme.path').'form/dashboard/index'); echo view(getenv('theme.path').'main/footer'); endswitch; + */ + echo view(getenv('theme.path').'main/defaultlayout'); } + } diff --git a/ci4/app/Controllers/Integration.php b/ci4/app/Controllers/Integration.php index a20b1d24..878b27a9 100644 --- a/ci4/app/Controllers/Integration.php +++ b/ci4/app/Controllers/Integration.php @@ -6,7 +6,7 @@ use App\Models\ActivityModel; use App\Models\PasswordRecoveryModel; use App\Models\SettingsModel; use App\Models\TemplateModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; use App\Libraries\PasswordHash; use CodeIgniter\HTTP\Files\FileCollection; diff --git a/ci4/app/Controllers/Login.php b/ci4/app/Controllers/Login.php index b4f9c27c..e6d9c098 100644 --- a/ci4/app/Controllers/Login.php +++ b/ci4/app/Controllers/Login.php @@ -9,7 +9,7 @@ use App\Models\NotificationModel; use App\Models\PasswordRecoveryModel; use App\Models\SettingsModel; use App\Models\TemplateModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; use App\Models\UserGroupModel; use App\Models\GroupUserModel; diff --git a/ci4/app/Controllers/Migrate.php b/ci4/app/Controllers/Migrate.php index 6c769b1f..ad48780d 100644 --- a/ci4/app/Controllers/Migrate.php +++ b/ci4/app/Controllers/Migrate.php @@ -11,11 +11,11 @@ class Migrate extends Controller { $migrate = \Config\Services::migrations(); + $file = 'Database\\Migrations\\2023-04-25-161753_RemoveGroupFromUser.php'; + try { - #$migrate->regress(-1); - $migrate->latest(); - echo "migrated"; - + $migrate->force($file); + } catch (\Exception $e) { echo $e->getMessage(); diff --git a/ci4/app/Controllers/My.php b/ci4/app/Controllers/My.php index b6bd917b..91819fcd 100644 --- a/ci4/app/Controllers/My.php +++ b/ci4/app/Controllers/My.php @@ -3,7 +3,7 @@ namespace App\Controllers; use App\Models\NotificationModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; class My extends BaseController { diff --git a/ci4/app/Controllers/Notification.php b/ci4/app/Controllers/Notification.php index 2291970d..7d30f614 100644 --- a/ci4/app/Controllers/Notification.php +++ b/ci4/app/Controllers/Notification.php @@ -3,7 +3,7 @@ namespace App\Controllers; use App\Models\CountriesModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; use App\Models\NotificationModel; class Notification extends BaseController diff --git a/ci4/app/Controllers/Profile.php b/ci4/app/Controllers/Profile.php index 24ddc1e1..e72c0640 100644 --- a/ci4/app/Controllers/Profile.php +++ b/ci4/app/Controllers/Profile.php @@ -5,7 +5,7 @@ namespace App\Controllers; use App\Libraries\PasswordHash; use App\Models\CountriesModel; use App\Models\UserGroupModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; class Profile extends BaseController { diff --git a/ci4/app/Controllers/Settings.php b/ci4/app/Controllers/Settings.php index 7dd8aa43..e375a3d7 100644 --- a/ci4/app/Controllers/Settings.php +++ b/ci4/app/Controllers/Settings.php @@ -10,7 +10,7 @@ use App\Models\TemplateModel; use App\Models\ThemeModel; use App\Models\TimezoneModel; use App\Models\UserGroupModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; class Settings extends BaseController { diff --git a/ci4/app/Controllers/Usuarios/Group.php b/ci4/app/Controllers/Usuarios/Group.php index aa90cc7e..f0cec4a9 100644 --- a/ci4/app/Controllers/Usuarios/Group.php +++ b/ci4/app/Controllers/Usuarios/Group.php @@ -1,45 +1,40 @@ -user_model = new UserModel(); - $this->group_model = new UserGroupModel(); + protected static $primaryModelName = 'App\Models\Usuarios\UserGroupModel'; + protected $modelName = UserGroupModel::class; + + protected static $singularObjectNameCc = 'userGroup'; + protected static $singularObjectName = 'Group'; + protected static $pluralObjectName = 'Groups'; + protected static $controllerSlug = 'groups'; + + static $viewPath = ''; + + protected $indexRoute = 'groupList'; + + public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger) { + $this->viewData['pageTitle'] = lang('Group.moduleTitle'); + self::$viewPath = getenv('theme.path').'form/group/'; + + parent::initController($request, $response, $logger); + } public function index() { - $data['title'] = [ - 'module' => lang("App.group_title"), - 'page' => lang("App.group_subtitle"), - 'icon' => 'fas fa-user-lock' - ]; - - $data['breadcrumb'] = [ - ['title' => lang("App.menu_dashboard"), 'route' => "/home", 'active' => false], - ['title' => lang("App.group_title"), 'route' => "", 'active' => true] - ]; - - $data['btn_add'] = [ - 'title' => lang("App.group_btn_add"), - 'route' => '/usuarios/group/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/group/index',$data); - echo view(getenv('theme.path').'main/footer'); + $this->viewData['usingClientSideDataTable'] = true; + $this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Groups.group')]); + + parent::index(); } public function add() @@ -77,8 +72,81 @@ class Group extends BaseController echo view(getenv('theme.path').'main/footer'); } - public function edit($id) + //public function edit($id) + public function edit($requestedId = null) { + + if ($requestedId == null) : + return $this->redirect2listView(); + endif; + $id = filter_var($requestedId, FILTER_SANITIZE_URL); + $group = $this->model->find($id); + + if ($group == false) : + $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Paises.pais')), $id]); + return $this->redirect2listView('errorMessage', $message); + endif; + + $requestMethod = $this->request->getMethod(); + + if ($requestMethod === 'post') : + + $nullIfEmpty = true; // !(phpversion() >= '8.1'); + + $postData = $this->request->getPost(); + $sanitizedData = $this->sanitized($postData, $nullIfEmpty); + + + $noException = true; + if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) : + + + + if ($this->canValidate()) : + try { + $successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData); + } catch (\Exception $e) { + $noException = false; + $this->dealWithException($e); + } + else: + $this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Paises.pais'))]); + $this->session->setFlashdata('formErrors', $this->model->errors()); + + endif; + + $group->fill($sanitizedData); + + $thenRedirect = true; + endif; + if ($noException && $successfulResult) : + $id = $group->id ?? $id; + $message = lang('Basic.global.updateSuccess', [mb_strtolower(lang('Group.group'))]).'.'; + $message .= anchor(route_to('editGroup', $id), lang('Basic.global.continueEditing').'?'); + $message = ucfirst(str_replace("'", "\'", $message)); + + if ($thenRedirect) : + if (!empty($this->indexRoute)) : + return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message); + else: + return $this->redirect2listView('successMessage', $message); + endif; + else: + $this->viewData['successMessage'] = $message; + endif; + + endif; // $noException && $successfulResult + endif; // ($requestMethod === 'post') + + $this->viewData['group'] = $group; + + $this->viewData['formAction'] = route_to('updateGroup', $id); + + $this->viewData['boxTitle'] = lang('Basic.global.edit2').' '.lang('Paises.pais').' '.lang('Basic.global.edit3'); + + + return $this->displayForm(__METHOD__, $id); + /* helper('form'); $data['title'] = [ @@ -115,8 +183,13 @@ class Group extends BaseController echo view(getenv('theme.path').'main/header'); echo view(getenv('theme.path').'form/group/form',$data); echo view(getenv('theme.path').'main/footer'); + */ } + + + + /* public function store() { //Demo Mode @@ -214,4 +287,5 @@ class Group extends BaseController } return redirect()->to('/usuarios/group'); } + */ } diff --git a/ci4/app/Controllers/Usuarios/User.php b/ci4/app/Controllers/Usuarios/User.php deleted file mode 100644 index 55ecb977..00000000 --- a/ci4/app/Controllers/Usuarios/User.php +++ /dev/null @@ -1,339 +0,0 @@ -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; $igroup_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'); - } - } -} diff --git a/ci4/app/Controllers/Usuarios/Users.php b/ci4/app/Controllers/Usuarios/Users.php new file mode 100644 index 00000000..8dc30ac2 --- /dev/null +++ b/ci4/app/Controllers/Usuarios/Users.php @@ -0,0 +1,262 @@ +group_model = new UserGroupModel(); + $this->group_user_model = new GroupUserModel(); + + $this->viewData['pageTitle'] = lang('Users.moduleTitle'); + parent::initController($request, $response, $logger); + + } + + public function index() { + + $this->viewData['usingClientSideDataTable'] = true; + + $this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Users.user')]); + parent::index(); + + } + + public function add() { + + + + $requestMethod = $this->request->getMethod(); + + if ($requestMethod === 'post') : + + $nullIfEmpty = true; // !(phpversion() >= '8.1'); + + $postData = $this->request->getPost(); + $sanitizedData = $this->sanitized($postData, $nullIfEmpty); + + + $noException = true; + if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) : + + + if ($this->canValidate()) : + try { + $successfulResult = $this->model->skipValidation(true)->save($sanitizedData); + } catch (\Exception $e) { + $noException = false; + $this->dealWithException($e); + } + else: + $this->viewData['errorMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Users.user'))]); + $this->session->setFlashdata('formErrors', $this->model->errors()); + endif; + + $thenRedirect = true; // Change this to false if you want your user to stay on the form after submission + endif; + if ($noException && $successfulResult) : + + $id = $this->model->db->insertID(); + + $message = lang('Basic.global.saveSuccess', [mb_strtolower(lang('Users.user'))]).'.'; + $message .= anchor(route_to('editUser', $id), lang('Basic.global.continueEditing').'?'); + $message = ucfirst(str_replace("'", "\'", $message)); + + if ($thenRedirect) : + if (!empty($this->indexRoute)) : + return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message); + else: + return $this->redirect2listView('successMessage', $message); + endif; + else: + $this->viewData['successMessage'] = $message; + endif; + + endif; // $noException && $successfulResult + + endif; // ($requestMethod === 'post') + + $this->viewData['user'] = isset($sanitizedData) ? new UserEntity($sanitizedData) : new UserEntity(); + $this->viewData['userGroupList'] = $this->getUserGroupListItems($user->group ?? null); + + $this->viewData['formAction'] = route_to('createUser'); + $this->viewData['groups'] = $this->group_model->select('token,title')->findAll(); + + $this->viewData['boxTitle'] = lang('Basic.global.addNew').' '.lang('Users.user').' '.lang('Basic.global.addNewSuffix'); + + + return $this->displayForm(__METHOD__); + } // end function add() + + public function edit($requestedId = null) { + + if ($requestedId == null) : + return $this->redirect2listView(); + endif; + $id = filter_var($requestedId, FILTER_SANITIZE_URL); + $user = $this->model->find($id); + + if ($user == false) : + $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Users.user')), $id]); + return $this->redirect2listView('errorMessage', $message); + endif; + + $requestMethod = $this->request->getMethod(); + + if ($requestMethod === 'post') : + + $nullIfEmpty = true; // !(phpversion() >= '8.1'); + + $postData = $this->request->getPost(); + $sanitizedData = $this->sanitized($postData, $nullIfEmpty); + if ($this->request->getPost('tfa') == null ) { + $sanitizedData['tfa'] = false; + } + if ($this->request->getPost('status') == null ) { + $sanitizedData['status'] = false; + } + + + + $noException = true; + if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) : + + + + if ($this->canValidate()) : + try { + $successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData); + } catch (\Exception $e) { + $noException = false; + $this->dealWithException($e); + } + else: + $this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Users.user'))]); + $this->session->setFlashdata('formErrors', $this->model->errors()); + + endif; + + $user->fill($sanitizedData); + + $thenRedirect = true; + endif; + if ($noException && $successfulResult) : + $id = $user->id_user ?? $id; + $message = lang('Basic.global.updateSuccess', [mb_strtolower(lang('Users.user'))]).'.'; + $message .= anchor(route_to('editUser', $id), lang('Basic.global.continueEditing').'?'); + $message = ucfirst(str_replace("'", "\'", $message)); + + if ($thenRedirect) : + if (!empty($this->indexRoute)) : + return redirect()->to(route_to($this->indexRoute))->with('successMessage', $message); + else: + return $this->redirect2listView('successMessage', $message); + endif; + else: + $this->viewData['successMessage'] = $message; + endif; + + endif; // $noException && $successfulResult + endif; // ($requestMethod === 'post') + + $this->viewData['user'] = $user; + $this->viewData['userGroupList'] = $this->getUserGroupListItems($user->group ?? null); + + $this->viewData['formAction'] = route_to('updateUser', $id); + $this->viewData['groups'] = $this->group_model->select('token,title')->findAll(); + + $this->viewData['boxTitle'] = lang('Basic.global.edit2').' '.lang('Users.user').' '.lang('Basic.global.edit3'); + + + return $this->displayForm(__METHOD__, $id); + } // end function edit(...) + + + + public function allItemsSelect() { + if ($this->request->isAJAX()) { + $onlyActiveOnes = true; + $reqVal = $this->request->getPost('val') ?? 'id_user'; + $menu = $this->model->getAllForMenu($reqVal.', first_name', 'first_name', $onlyActiveOnes, false); + $nonItem = new \stdClass; + $nonItem->id_user = ''; + $nonItem->first_name = '- '.lang('Basic.global.None').' -'; + array_unshift($menu , $nonItem); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'menu' => $menu, + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + public function menuItems() { + if ($this->request->isAJAX()) { + $searchStr = goSanitize($this->request->getPost('searchTerm'))[0]; + $reqId = goSanitize($this->request->getPost('id'))[0]; + $reqText = goSanitize($this->request->getPost('text'))[0]; + $onlyActiveOnes = false; + $columns2select = [$reqId ?? 'id_user', $reqText ?? 'first_name']; + $onlyActiveOnes = false; + $menu = $this->model->getSelect2MenuItems($columns2select, $columns2select[1], $onlyActiveOnes, $searchStr); + $nonItem = new \stdClass; + $nonItem->id = ''; + $nonItem->text = '- '.lang('Basic.global.None').' -'; + array_unshift($menu , $nonItem); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'menu' => $menu, + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data); + } else { + return $this->failUnauthorized('Invalid request', 403); + } + } + + protected function getUserGroupListItems($selId = null) { + $data = [''=>lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('UserGroups.userGroup'))])]; + if (!empty($selId)) : + $userGroupModel = model('App\Models\Usuarios\UserGroupModel'); + + $selOption = $userGroupModel->where('token', $selId)->findColumn('title'); + if (!empty($selOption)) : + $data[$selId] = $selOption[0]; + endif; + endif; + return $data; + } + +} diff --git a/ci4/app/Entities/Usuarios/UserEntity.php b/ci4/app/Entities/Usuarios/UserEntity.php new file mode 100644 index 00000000..e4128f0a --- /dev/null +++ b/ci4/app/Entities/Usuarios/UserEntity.php @@ -0,0 +1,64 @@ + null, + "group" => null, + "first_name" => null, + "last_name" => null, + "date_birth" => null, + "address" => null, + "city" => null, + "state" => null, + "country" => null, + "zip_code" => null, + "mobile" => null, + "email" => null, + "password" => null, + "last_ip" => null, + "last_access" => null, + "picture" => "/assets/img/default-user.png", + "language" => null, + "tfa" => false, + "tfa_secret" => null, + "tfa_code" => null, + "blocked" => null, + "email_confirmed" => 0, + "token" => null, + "status" => false, + "created_at" => null, + "updated_at" => null, + ]; + protected $casts = [ + "tfa" => "boolean", + "email_confirmed" => "int", + "status" => "boolean", + ]; + /** + * Returns a full name: "first last" + * + * @return string + */ + public function getFullName() + { + $fullName = + (!empty($this->attributes["first_name"]) ? trim($this->attributes["first_name"]) . " " : "") . + (!empty($this->attributes["last_name"]) ? trim($this->attributes["last_name"]) : ""); + $name = empty($fullName) ? $this->attributes["username"] : $fullName; + return $name; + } + + /** + * Alias for getFullName() + * + * @return string + */ + public function fullName() + { + return $this->getFullName(); + } +} diff --git a/ci4/app/Entities/Usuarios/UserGroupEntity.php b/ci4/app/Entities/Usuarios/UserGroupEntity.php new file mode 100644 index 00000000..866535d2 --- /dev/null +++ b/ci4/app/Entities/Usuarios/UserGroupEntity.php @@ -0,0 +1,18 @@ + null, + "title" => null, + "dashboard" => null, + "rules" => null, + "token" => null, + "created_at" => null, + "updated_at" => null, + ]; + protected $casts = []; +} diff --git a/ci4/app/Filters/LoginAuthFilter.php b/ci4/app/Filters/LoginAuthFilter.php index d6a6da4c..6eb2d034 100644 --- a/ci4/app/Filters/LoginAuthFilter.php +++ b/ci4/app/Filters/LoginAuthFilter.php @@ -140,7 +140,6 @@ class LoginAuthFilter implements FilterInterface 'Migrate', 'Test', 'GoBaseController' - ]; } @@ -171,7 +170,11 @@ class LoginAuthFilter implements FilterInterface '__construct', 'validateControllerAccess', 'whiteListController', - 'whiteListMethod' + 'whiteListMethod', + 'allItemsSelect', + 'menuItems', + 'collect', + 'cast', ]; } diff --git a/ci4/app/Helpers/general_helper.php b/ci4/app/Helpers/general_helper.php index 4a65b9b8..853711ab 100644 --- a/ci4/app/Helpers/general_helper.php +++ b/ci4/app/Helpers/general_helper.php @@ -161,8 +161,8 @@ function getDictionary($word=''){ 'my' => lang("App.permisos_my"), 'Notification' => lang("App.permisos_notificacion"), - 'Usuarios' => lang("App.permisos_usuarios"), - 'Usuario' => lang("App.permisos_usuario"), + 'Users' => lang("App.permisos_usuarios"), + 'User' => lang("App.permisos_usuario"), 'Group' => lang("App.permisos_roles"), 'Logistica' => lang("App.permisos_logistica"), diff --git a/ci4/app/Helpers/go_common_helper.php b/ci4/app/Helpers/go_common_helper.php new file mode 100644 index 00000000..e64429cf --- /dev/null +++ b/ci4/app/Helpers/go_common_helper.php @@ -0,0 +1,153 @@ +']; + + if ($onlyAlphaNumeric) { + $badparts[] = "='"; + $badparts[] = '="'; + $badparts[] = '='; + $badparts[] = '_'; + $badparts[] = '/'; + $badparts[] = '"'; + $badparts[] = "'"; + $badparts[] = ">"; + $badparts[] = "<"; + $badparts[] = "()"; + } + + foreach ($badParts as $bp) { + if (strpos($str1, $bp)!==false) { + $malScore += 1; + $str1 = str_replace($bp, '', $str1); + } + } + } + + if ($fromGetRequest) { + $str1 = urldecode ($str1); + } + + // $finalVal = filter_var($str1, FILTER_SANITIZE_FULL_SPECIAL_CHARS); // doesn't play well with esc() and old() as well as form_textarea() functions of CI 4 + $finalVal = $str1; + } + return [trim($finalVal),$malScore]; +} + + +function convertTurkishCharacters($text) { + $text = trim($text); + $search = array('Ç','ç','Ğ','ğ','ı','İ','Ö','ö','Ş','ş','Ü','ü',' '); + $replace = array('c','c','g','g','i','i','o','o','s','s','u','u','-'); + $new_text = str_replace($search,$replace,$text); + return $new_text; +} + +function convertPhpDateToMomentFormat($format) +{ + $replacements = [ + 'd' => 'DD', + 'D' => 'ddd', + 'j' => 'D', + 'l' => 'dddd', + 'N' => 'E', + 'S' => 'o', + 'w' => 'e', + 'z' => 'DDD', + 'W' => 'W', + 'F' => 'MMMM', + 'm' => 'MM', + 'M' => 'MMM', + 'n' => 'M', + 't' => '', // no equivalent + 'L' => '', // no equivalent + 'o' => 'YYYY', + 'Y' => 'YYYY', + 'y' => 'YY', + 'a' => 'a', + 'A' => 'A', + 'B' => '', // no equivalent + 'g' => 'h', + 'G' => 'H', + 'h' => 'hh', + 'H' => 'HH', + 'i' => 'mm', + 's' => 'ss', + 'u' => 'SSS', + 'e' => 'zz', // deprecated since version 1.6.0 of moment.js + 'I' => '', // no equivalent + 'O' => '', // no equivalent + 'P' => '', // no equivalent + 'T' => '', // no equivalent + 'Z' => '', // no equivalent + 'c' => '', // no equivalent + 'r' => '', // no equivalent + 'U' => 'X', + ]; + $momentFormat = strtr($format, $replacements); + return $momentFormat; +} + +// Check if the function does not exists +if ( ! function_exists('slugify')) { + // Slugify a string + function slugify($string) + { + helper('text'); + + // Replace unsupported characters (add your owns if necessary) + $string = str_replace("'", '-', $string); + $string = str_replace(".", '-', $string); + $string = str_replace("²", '2', $string); + + // Slugify and return the string + return url_title(convert_accented_characters(convertTurkishCharacters($string)), '-', true); + } +} + +if (!function_exists('convertToSnakeCase')) { + function convertToSnakeCase($strInput) { + preg_match_all('!([A-Z][A-Z0-9]*(?=$|[A-Z][a-z0-9])|[A-Za-z][a-z0-9]+)!', $strInput, $matches); + $ret = $matches[0]; + foreach ($ret as &$match) { + $match = $match == strtoupper($match) ? strtolower($match) : lcfirst($match); + } + return implode('_', $ret); + } +} + +if (!function_exists('newUUID')) { + + function newUUID() { + if (function_exists('com_create_guid') === true) { + return trim(com_create_guid(), '{}'); + } + + return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); + } + +} \ No newline at end of file diff --git a/ci4/app/Helpers/jwt_helper.php b/ci4/app/Helpers/jwt_helper.php index eea83a27..d00d4529 100644 --- a/ci4/app/Helpers/jwt_helper.php +++ b/ci4/app/Helpers/jwt_helper.php @@ -1,7 +1,7 @@ [ diff --git a/ci4/app/Models/UserGroupModel.php b/ci4/app/Models/UserGroupModel.php deleted file mode 100644 index 8396f05f..00000000 --- a/ci4/app/Models/UserGroupModel.php +++ /dev/null @@ -1,17 +0,0 @@ - "t1.id_group", + 2 => "t1.title", + 3 => "t1.dashboard", + 4 => "t1.rules", + 5 => "t1.token", + 6 => "t1.created_at", + 7 => "t1.updated_at", + ]; + + protected $allowedFields = ["id_group", "title", "dashboard", "rules", "token"]; + protected $returnType = "App\Entities\Usuarios\UserGroupEntity"; + + public static $labelField = "title"; + + protected $validationRules = [ + "dashboard" => [ + "label" => "UserGroups.dashboard", + "rules" => "trim|required|max_length[50]", + ], + "id_group" => [ + "label" => "UserGroups.idGroup", + "rules" => "max_length[31]", + ], + "rules" => [ + "label" => "UserGroups.rules", + "rules" => "trim|required|max_length[4194192]", + ], + "title" => [ + "label" => "UserGroups.title", + "rules" => "trim|required|max_length[150]", + ], + "token" => [ + "label" => "UserGroups.token", + "rules" => "trim|required|max_length[35]", + ], + ]; + + protected $validationMessages = [ + "dashboard" => [ + "max_length" => "UserGroups.validation.dashboard.max_length", + "required" => "UserGroups.validation.dashboard.required", + ], + "id_group" => [ + "max_length" => "UserGroups.validation.id_group.max_length", + ], + "rules" => [ + "max_length" => "UserGroups.validation.rules.max_length", + "required" => "UserGroups.validation.rules.required", + ], + "title" => [ + "max_length" => "UserGroups.validation.title.max_length", + "required" => "UserGroups.validation.title.required", + ], + "token" => [ + "max_length" => "UserGroups.validation.token.max_length", + "required" => "UserGroups.validation.token.required", + ], + ]; + + /** + * Get resource data. + * + * @param string $search + * + * @return \CodeIgniter\Database\BaseBuilder + */ + public function getResource(string $search = "") + { + $builder = $this->db + ->table($this->table . " t1") + ->select( + "t1.id_group AS id_group, t1.title AS title, t1.dashboard AS dashboard, t1.rules AS rules, t1.token AS token, t1.created_at AS created_at, t1.updated_at AS updated_at" + ); + + return empty($search) + ? $builder + : $builder + ->groupStart() + ->like("t1.id_group", $search) + ->orLike("t1.title", $search) + ->orLike("t1.dashboard", $search) + ->orLike("t1.rules", $search) + ->orLike("t1.token", $search) + ->orLike("t1.created_at", $search) + ->orLike("t1.updated_at", $search) + ->orLike("t1.id_group", $search) + ->orLike("t1.title", $search) + ->orLike("t1.dashboard", $search) + ->orLike("t1.rules", $search) + ->orLike("t1.token", $search) + ->orLike("t1.created_at", $search) + ->orLike("t1.updated_at", $search) + ->groupEnd(); + } +} diff --git a/ci4/app/Models/Usuarios/UserModel.php b/ci4/app/Models/Usuarios/UserModel.php new file mode 100644 index 00000000..5770ae6c --- /dev/null +++ b/ci4/app/Models/Usuarios/UserModel.php @@ -0,0 +1,207 @@ + [ + "label" => "Users.address", + "rules" => "trim|max_length[255]", + ], + "blocked" => [ + "label" => "Users.blocked", + "rules" => "valid_date|permit_empty", + ], + "city" => [ + "label" => "Users.city", + "rules" => "trim|max_length[255]", + ], + "country" => [ + "label" => "Users.country", + "rules" => "trim|required|max_length[2]", + ], + "date_birth" => [ + "label" => "Users.dateBirth", + "rules" => "valid_date|permit_empty", + ], + "email" => [ + "label" => "Users.email", + "rules" => "trim|required|max_length[150]|valid_email", + ], + "email_confirmed" => [ + "label" => "Users.emailConfirmed", + "rules" => "required|integer", + ], + "first_name" => [ + "label" => "Users.firstName", + "rules" => "trim|required|max_length[150]", + ], + "group" => [ + "label" => "Users.group", + "rules" => "trim|required|max_length[35]", + ], + "language" => [ + "label" => "Users.language", + "rules" => "trim|required|max_length[10]", + ], + "last_access" => [ + "label" => "Users.lastAccess", + "rules" => "required|valid_date", + ], + "last_ip" => [ + "label" => "Users.lastIp", + "rules" => "trim|required|max_length[50]", + ], + "last_name" => [ + "label" => "Users.lastName", + "rules" => "trim|required|max_length[150]", + ], + "mobile" => [ + "label" => "Users.mobile", + "rules" => "trim|required|max_length[50]", + ], + "password" => [ + "label" => "Users.password", + "rules" => "required|max_length[35]", + ], + "picture" => [ + "label" => "Users.picture", + "rules" => "trim|required|max_length[150]", + ], + "state" => [ + "label" => "Users.state", + "rules" => "trim|required|max_length[255]", + ], + "tfa_code" => [ + "label" => "Users.tfaCode", + "rules" => "trim|required|max_length[60]", + ], + "tfa_secret" => [ + "label" => "Users.tfaSecret", + "rules" => "trim|required|max_length[20]", + ], + "zip_code" => [ + "label" => "Users.zipCode", + "rules" => "trim|max_length[50]", + ], + ]; + + protected $validationMessages = [ + "address" => [ + "max_length" => "Users.validation.address.max_length", + ], + "blocked" => [ + "valid_date" => "Users.validation.blocked.valid_date", + ], + "city" => [ + "max_length" => "Users.validation.city.max_length", + ], + "country" => [ + "max_length" => "Users.validation.country.max_length", + "required" => "Users.validation.country.required", + ], + "date_birth" => [ + "valid_date" => "Users.validation.date_birth.valid_date", + ], + "email" => [ + "max_length" => "Users.validation.email.max_length", + "required" => "Users.validation.email.required", + "valid_email" => "Users.validation.email.valid_email", + ], + "email_confirmed" => [ + "integer" => "Users.validation.email_confirmed.integer", + "required" => "Users.validation.email_confirmed.required", + ], + "first_name" => [ + "max_length" => "Users.validation.first_name.max_length", + "required" => "Users.validation.first_name.required", + ], + "group" => [ + "max_length" => "Users.validation.group.max_length", + "required" => "Users.validation.group.required", + ], + "language" => [ + "max_length" => "Users.validation.language.max_length", + "required" => "Users.validation.language.required", + ], + "last_access" => [ + "required" => "Users.validation.last_access.required", + "valid_date" => "Users.validation.last_access.valid_date", + ], + "last_ip" => [ + "max_length" => "Users.validation.last_ip.max_length", + "required" => "Users.validation.last_ip.required", + ], + "last_name" => [ + "max_length" => "Users.validation.last_name.max_length", + "required" => "Users.validation.last_name.required", + ], + "mobile" => [ + "max_length" => "Users.validation.mobile.max_length", + "required" => "Users.validation.mobile.required", + ], + "password" => [ + "max_length" => "Users.validation.password.max_length", + "required" => "Users.validation.password.required", + ], + "picture" => [ + "max_length" => "Users.validation.picture.max_length", + "required" => "Users.validation.picture.required", + ], + "state" => [ + "max_length" => "Users.validation.state.max_length", + "required" => "Users.validation.state.required", + ], + "tfa_code" => [ + "max_length" => "Users.validation.tfa_code.max_length", + "required" => "Users.validation.tfa_code.required", + ], + "tfa_secret" => [ + "max_length" => "Users.validation.tfa_secret.max_length", + "required" => "Users.validation.tfa_secret.required", + ], + "zip_code" => [ + "max_length" => "Users.validation.zip_code.max_length", + ], + ]; +} diff --git a/ci4/app/Validation/ApiAuthRules.php b/ci4/app/Validation/ApiAuthRules.php index 90c7d22f..4ef2f8c6 100644 --- a/ci4/app/Validation/ApiAuthRules.php +++ b/ci4/app/Validation/ApiAuthRules.php @@ -4,7 +4,7 @@ namespace App\Validation; use App\Libraries\PasswordHash; use App\Models\SettingsModel; -use App\Models\UserModel; +use App\Models\Usuarios\UserModel; use Exception; class ApiAuthRules diff --git a/ci4/app/Views/themes/backend/focus2/form/configuracion/paises/viewPaisForm.php b/ci4/app/Views/themes/backend/focus2/form/configuracion/paises/viewPaisForm.php index 5a5a91c5..a8f2a01f 100644 --- a/ci4/app/Views/themes/backend/focus2/form/configuracion/paises/viewPaisForm.php +++ b/ci4/app/Views/themes/backend/focus2/form/configuracion/paises/viewPaisForm.php @@ -16,7 +16,7 @@ diff --git a/ci4/app/Views/themes/backend/focus2/form/group/viewUserGroupForm.php b/ci4/app/Views/themes/backend/focus2/form/group/viewUserGroupForm.php new file mode 100644 index 00000000..cf39d609 --- /dev/null +++ b/ci4/app/Views/themes/backend/focus2/form/group/viewUserGroupForm.php @@ -0,0 +1,111 @@ +include("themes/_commonPartialsBs/select2bs5") ?> +extend('themes/backend/focus2/main/defaultlayout') ?> + +section("content") ?> +
+
+
+
+

+
+
+ +
+ + + +
+
+
+
+ + +
+
+
+
+ + dashboard : set_value('dashboard');?> + +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+

+
+
+
+ + +
+

+ + +
+ + +
+ + +
+ + +
+
+
+ +
+
+

+
+
+
+ + +
+

+ + +
+ + +
+ + +
+ + +
+
+
+ +
+
+
+
+ "btn btn-secondary float-start"]) ?> + "> +
+
+ + +
+ +
+
+
+endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/backend/focus2/form/group/viewUserGroupList.php b/ci4/app/Views/themes/backend/focus2/form/group/viewUserGroupList.php new file mode 100644 index 00000000..38a1a6e5 --- /dev/null +++ b/ci4/app/Views/themes/backend/focus2/form/group/viewUserGroupList.php @@ -0,0 +1,66 @@ +include('themes/_commonPartialsBs/datatables') ?> +extend('themes/backend/focus2/main/defaultlayout') ?> +section('content'); ?> +
+
+ +
+
+

+ 'btn btn-primary float-end']); ?> +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ id_group ?> + + title) ?> + + dashboard) ?> + + token) ?> + + created_at) ? '' : date('d/m/Y H:m:s', strtotime($item->created_at)) ?> + + updated_at) ? '' : date('d/m/Y H:m:s', strtotime($item->updated_at)) ?> + + id_group), lang('Basic.global.edit'), ['class'=>'btn btn-sm btn-warning btn-edit me-1', 'data-id'=>$item->id_group,]); ?> + 'btn btn-sm btn-danger btn-delete ms-1', 'data-href'=>route_to('deleteGroup', $item->id_group), 'data-bs-toggle'=>'modal', 'data-bs-target'=>'#confirm2delete']); ?> +
+
+ +
+
+
+ +endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/backend/focus2/form/tarifas/acabado/viewTarifaacabadoForm.php b/ci4/app/Views/themes/backend/focus2/form/tarifas/acabado/viewTarifaacabadoForm.php index 200566e6..fdb7a8c1 100644 --- a/ci4/app/Views/themes/backend/focus2/form/tarifas/acabado/viewTarifaacabadoForm.php +++ b/ci4/app/Views/themes/backend/focus2/form/tarifas/acabado/viewTarifaacabadoForm.php @@ -1,5 +1,5 @@ -include("Themes/_commonPartialsBs/select2bs5") ?> -extend("Themes/" . config("Basics")->theme["name"] . "/AdminLayout/defaultLayout") ?> +include("themes/_commonPartialsBs/select2bs5") ?> +extend("themes/" . config("Basics")->theme["name"] . "/AdminLayout/defaultLayout") ?> section("content") ?>
@@ -10,7 +10,7 @@
- + getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
diff --git a/ci4/app/Views/themes/backend/focus2/form/user/_userFormItems.php b/ci4/app/Views/themes/backend/focus2/form/user/_userFormItems.php new file mode 100644 index 00000000..95190068 --- /dev/null +++ b/ci4/app/Views/themes/backend/focus2/form/user/_userFormItems.php @@ -0,0 +1,158 @@ +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + + +
+
+ +
+ + +
+ +
+ + blocked);?> + +
+ +
+ + email_confirmed);?> + + +
+ + +
+ + status);?> + + +
+ + + +
+ +
\ No newline at end of file diff --git a/ci4/app/Views/themes/backend/focus2/form/user/form.php b/ci4/app/Views/themes/backend/focus2/form/user/form.php deleted file mode 100644 index f3f02d6e..00000000 --- a/ci4/app/Views/themes/backend/focus2/form/user/form.php +++ /dev/null @@ -1,219 +0,0 @@ - -" rel="stylesheet"> - -
-
-
-
-
-

- -
-
-
- -
-
-
-
-
-
-

-
-
- - " method="post"> - - -
-
-
- -
-
-
- - " value=""> -
-
-
-
- - " value=""> -
-
-
-
- - " value=""> -
-
-
-
- - " id="date_birth" name="date_birth" value=""> -
-
-
-
- - " value=""> -
-
-
-
- - "> -
-
-
-
- - "> -
-
- -
-
- - - -
-
- -
-
- - - -
-
- -
-
- - - -
-
-
-
-
- -
-
-
- - " value=""> -
-
-
-
- - " value=""> -
-
-
-
- - " value=""> -
-
-
-
- - - -
-
-
-
- - - -
-
-
- -
-
- - - - -
- -
-
-
-
-
-
- - - - - - - - - - - - - diff --git a/ci4/app/Views/themes/backend/focus2/form/user/index.php b/ci4/app/Views/themes/backend/focus2/form/user/index.php deleted file mode 100644 index c29315e5..00000000 --- a/ci4/app/Views/themes/backend/focus2/form/user/index.php +++ /dev/null @@ -1,120 +0,0 @@ - -
-
-
-
-
-

- -
-
-
- -
-
-
-
-
-
-
-

-
-
- - - -
-
-
- - - -
- - - - - - - - - - - - - -
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ci4/app/Views/themes/backend/focus2/form/user/viewUserForm.php b/ci4/app/Views/themes/backend/focus2/form/user/viewUserForm.php new file mode 100644 index 00000000..309e925a --- /dev/null +++ b/ci4/app/Views/themes/backend/focus2/form/user/viewUserForm.php @@ -0,0 +1,25 @@ +include("themes/_commonPartialsBs/select2bs5") ?> +extend('themes/backend/focus2/main/defaultlayout') ?> +section("content") ?> +
+
+
+
+

+
+
+ +
+ + getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?> + +
+ +
+
+
+
+endSection() ?> diff --git a/ci4/app/Views/themes/backend/focus2/form/user/viewUserList.php b/ci4/app/Views/themes/backend/focus2/form/user/viewUserList.php new file mode 100644 index 00000000..55667d0f --- /dev/null +++ b/ci4/app/Views/themes/backend/focus2/form/user/viewUserList.php @@ -0,0 +1,135 @@ +include('themes/_commonPartialsBs/datatables') ?> +extend('themes/backend/focus2/main/defaultlayout') ?> +section('content'); ?> +
+
+ +
+
+

+ 'btn btn-primary float-end']); ?> +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ id_user ?> + + first_name) || strlen($item->first_name) < 51 ? esc($item->first_name) : character_limiter(esc($item->first_name), 50) ?> + + last_name) || strlen($item->last_name) < 51 ? esc($item->last_name) : character_limiter(esc($item->last_name), 50) ?> + + + + mobile) || strlen($item->mobile) < 51 ? esc($item->mobile) : character_limiter(esc($item->mobile), 50) ?> + + email) ?> + + address) || strlen($item->address) < 51 ? esc($item->address) : character_limiter(esc($item->address), 50) ?> + + city) || strlen($item->city) < 51 ? esc($item->city) : character_limiter(esc($item->city), 50) ?> + + state) || strlen($item->state) < 51 ? esc($item->state) : character_limiter(esc($item->state), 50) ?> + + country) ?> + + zip_code) || strlen($item->zip_code) < 51 ? esc($item->zip_code) : character_limiter(esc($item->zip_code), 50) ?> + + last_ip) || strlen($item->last_ip) < 51 ? esc($item->last_ip) : character_limiter(esc($item->last_ip), 50) ?> + + last_access) ? '' : date('d/m/Y H:m:s', strtotime($item->last_access)) ?> + + picture) || strlen($item->picture) < 51 ? esc($item->picture) : character_limiter(esc($item->picture), 50) ?> + + language) ?> + + blocked) ? '' : date('d/m/Y H:m:s', strtotime($item->blocked)) ?> + + email_confirmed) ?> + + token) ?> + + + status ) { ?> + + + + + + + created_at) ? '' : date('d/m/Y H:m:s', strtotime($item->created_at)) ?> + + updated_at) ? '' : date('d/m/Y H:m:s', strtotime($item->updated_at)) ?> + + id_user), lang('Basic.global.edit'), ['class'=>'btn btn-sm btn-warning btn-edit me-1', 'data-id'=>$item->id_user,]); ?> + 'btn btn-sm btn-danger btn-delete ms-1', 'data-href'=>route_to('deleteUser', $item->id_user), 'data-bs-toggle'=>'modal', 'data-bs-target'=>'#confirm2delete']); ?> +
+
+ +
+
+
+ +endSection() ?> \ No newline at end of file diff --git a/ci4/app/Views/themes/backend/focus2/main/defaultlayout.php b/ci4/app/Views/themes/backend/focus2/main/defaultlayout.php index 650d7436..82622b1c 100644 --- a/ci4/app/Views/themes/backend/focus2/main/defaultlayout.php +++ b/ci4/app/Views/themes/backend/focus2/main/defaultlayout.php @@ -151,6 +151,14 @@ $notification = session()->get('notification'); renderSection('additionalExternalJs') ?> + +