mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'bug/add_user' into 'main'
Bug/add user See merge request jjimenez/safekat!388
This commit is contained in:
15
.idea/codeception.xml
generated
Normal file
15
.idea/codeception.xml
generated
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Codeception">
|
||||||
|
<option name="configurations">
|
||||||
|
<list>
|
||||||
|
<Configuration>
|
||||||
|
<option name="path" value="$PROJECT_DIR$/tests" />
|
||||||
|
</Configuration>
|
||||||
|
<Configuration>
|
||||||
|
<option name="path" value="$PROJECT_DIR$/ci4/tests" />
|
||||||
|
</Configuration>
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
7
.idea/php.xml
generated
7
.idea/php.xml
generated
@ -55,6 +55,13 @@
|
|||||||
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/shield" />
|
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/shield" />
|
||||||
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/settings" />
|
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/settings" />
|
||||||
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/framework" />
|
<path value="$PROJECT_DIR$/ci4/vendor/codeigniter4/framework" />
|
||||||
|
<path value="$PROJECT_DIR$/ci4/vendor/nicolab/php-ftp-client" />
|
||||||
|
<path value="$PROJECT_DIR$/ci4/vendor/hermawan/codeigniter4-datatables" />
|
||||||
|
<path value="$PROJECT_DIR$/ci4/vendor/firebase/php-jwt" />
|
||||||
|
<path value="$PROJECT_DIR$/ci4/vendor/greenlion/php-sql-parser" />
|
||||||
|
<path value="$PROJECT_DIR$/ci4/vendor/paragonie/random_compat" />
|
||||||
|
<path value="$PROJECT_DIR$/ci4/vendor/paragonie/constant_time_encoding" />
|
||||||
|
<path value="$PROJECT_DIR$/ci4/vendor/phpseclib/phpseclib" />
|
||||||
</include_path>
|
</include_path>
|
||||||
</component>
|
</component>
|
||||||
<component name="PhpProjectSharedConfiguration" php_language_level="8.2">
|
<component name="PhpProjectSharedConfiguration" php_language_level="8.2">
|
||||||
|
|||||||
16
.idea/phpspec.xml
generated
Normal file
16
.idea/phpspec.xml
generated
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="PHPSpec">
|
||||||
|
<suites>
|
||||||
|
<PhpSpecSuiteConfiguration>
|
||||||
|
<option name="myPath" value="$PROJECT_DIR$" />
|
||||||
|
</PhpSpecSuiteConfiguration>
|
||||||
|
<PhpSpecSuiteConfiguration>
|
||||||
|
<option name="myPath" value="$PROJECT_DIR$/ci4" />
|
||||||
|
</PhpSpecSuiteConfiguration>
|
||||||
|
<PhpSpecSuiteConfiguration>
|
||||||
|
<option name="myPath" value="$PROJECT_DIR$/ci4" />
|
||||||
|
</PhpSpecSuiteConfiguration>
|
||||||
|
</suites>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
10
.idea/safekat.iml
generated
10
.idea/safekat.iml
generated
@ -7,6 +7,16 @@
|
|||||||
<sourceFolder url="file://$MODULE_DIR$/ci4/app/ThirdParty/DatatablesEditor/" isTestSource="false" packagePrefix="DataTables\" />
|
<sourceFolder url="file://$MODULE_DIR$/ci4/app/ThirdParty/DatatablesEditor/" isTestSource="false" packagePrefix="DataTables\" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/ci4/tests" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/ci4/tests" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/ci4/tests/_support" isTestSource="true" packagePrefix="Tests\Support\" />
|
<sourceFolder url="file://$MODULE_DIR$/ci4/tests/_support" isTestSource="true" packagePrefix="Tests\Support\" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/ci4/spec" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/ci4/vendor/firebase/php-jwt" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/ci4/vendor/greenlion/php-sql-parser" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/ci4/vendor/hermawan/codeigniter4-datatables" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/ci4/vendor/nicolab/php-ftp-client" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/ci4/vendor/paragonie/constant_time_encoding" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/ci4/vendor/paragonie/random_compat" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/ci4/vendor/phpseclib/phpseclib" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
|||||||
@ -97,7 +97,6 @@ $routes->group('configuracion', ['namespace' => 'App\Controllers\Configuracion']
|
|||||||
|
|
||||||
$routes->group('users', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
|
$routes->group('users', ['namespace' => 'App\Controllers\Configuracion'], function ($routes) {
|
||||||
$routes->get('', 'Users::index', ['as' => 'userList']);
|
$routes->get('', 'Users::index', ['as' => 'userList']);
|
||||||
$routes->get('index', 'Users::index', ['as' => 'userIndex']);
|
|
||||||
$routes->get('list', 'Users::index', ['as' => 'userList2']);
|
$routes->get('list', 'Users::index', ['as' => 'userList2']);
|
||||||
$routes->get('add', 'Users::add', ['as' => 'newUser']);
|
$routes->get('add', 'Users::add', ['as' => 'newUser']);
|
||||||
$routes->post('add', 'Users::add', ['as' => 'createUser']);
|
$routes->post('add', 'Users::add', ['as' => 'createUser']);
|
||||||
|
|||||||
@ -42,4 +42,6 @@ class Validation extends BaseConfig
|
|||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
// Rules
|
// Rules
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,6 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
private ChatDeparmentUserModel $chat_department_user_model;
|
private ChatDeparmentUserModel $chat_department_user_model;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
use \CodeIgniter\API\ResponseTrait;
|
use \CodeIgniter\API\ResponseTrait;
|
||||||
|
|
||||||
protected static $primaryModelName = 'App\Models\UserModel';
|
protected static $primaryModelName = 'App\Models\UserModel';
|
||||||
@ -80,14 +79,14 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
} else {
|
} else {
|
||||||
$postData['password'] = $postData['new_pwd'];
|
$postData['password'] = $postData['new_pwd'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtener los grupos a los que pertenece
|
// Obtener los grupos a los que pertenece
|
||||||
$currentGroups = $postData['group'] ?? [];
|
$currentGroups = $postData['group'] ?? [];
|
||||||
$chatDepartments = $postData['chatDepartments'] ?? [];
|
$chatDepartments = $postData['chatDepartments'] ?? [];
|
||||||
unset($postData['group']);
|
unset($postData['group']);
|
||||||
unset($postData['chatDepartments']);
|
unset($postData['chatDepartments']);
|
||||||
|
|
||||||
// Generar el nombre de usuario
|
// Marcar el username como NULL
|
||||||
$postData['username'] = strstr($postData['email'], '@', true);
|
|
||||||
$sanitizedData = $this->sanitized($postData, true);
|
$sanitizedData = $this->sanitized($postData, true);
|
||||||
|
|
||||||
$noException = true;
|
$noException = true;
|
||||||
@ -99,33 +98,43 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
if ($this->canValidate()) :
|
if ($this->canValidate()) :
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$user = new User([
|
// The Email is unique
|
||||||
'username' => $sanitizedData['username'],
|
if ($this->user_model->isEmailUnique($sanitizedData['email'])) {
|
||||||
|
|
||||||
|
// Crear el usuario si pasa la validación
|
||||||
|
$user = new \CodeIgniter\Shield\Entities\User([
|
||||||
|
'username' => null, // If you don't have a username, be sure to set the value to null anyway, so that it passes CodeIgniter's empty data check
|
||||||
'first_name' => $sanitizedData['first_name'],
|
'first_name' => $sanitizedData['first_name'],
|
||||||
'last_name' => $sanitizedData['last_name'],
|
'last_name' => $sanitizedData['last_name'],
|
||||||
|
'cliente_id' => $sanitizedData['cliente_id'],
|
||||||
|
'comments' => $sanitizedData['comments'],
|
||||||
'email' => $sanitizedData['email'],
|
'email' => $sanitizedData['email'],
|
||||||
'password' => $sanitizedData['password'],
|
'password' => $sanitizedData['password'],
|
||||||
'status' => $sanitizedData['status'] ?? 0,
|
'status' => $sanitizedData['status'] ?? 0,
|
||||||
'active' => $sanitizedData['active'] ?? 0,
|
'active' => $sanitizedData['active'] ?? 0,
|
||||||
]);
|
]);
|
||||||
|
// Add the user to the system
|
||||||
$users->save($user);
|
$users->save($user);
|
||||||
$successfulResult = true; // Hacked
|
$successfulResult = true; // Hacked
|
||||||
} catch (\Exception $e) {
|
|
||||||
$noException = false;
|
} // Email is not unique!
|
||||||
//$this->dealWithException($e);
|
else {
|
||||||
if (strpos($e->getMessage(), 'correo duplicado') !== false) {
|
$this->viewData['errorMessage'] = "El correo '". $sanitizedData['email'] ."' ya está registrado en el sistema";
|
||||||
$this->viewData['errorMessage'] = "El correo electrónico ya está registrado en el sistema";
|
|
||||||
$this->session->setFlashdata('formErrors', $this->model->errors());
|
$this->session->setFlashdata('formErrors', $this->model->errors());
|
||||||
|
$successfulResult = false; // Hacked
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$noException = false;
|
||||||
|
$this->viewData['errorMessage'] = $e->getMessage();
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
$this->viewData['errorMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Users.user'))]);
|
$this->viewData['errorMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Users.user'))]);
|
||||||
$this->session->setFlashdata('formErrors', $this->model->errors());
|
$this->session->setFlashdata('formErrors', $this->model->errors());
|
||||||
endif;
|
endif;
|
||||||
|
|
||||||
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
|
$thenRedirect = true; // Change this to false if you want your user to stay on the form after submission
|
||||||
endif;
|
endif;
|
||||||
|
|
||||||
if ($noException && $successfulResult) :
|
if ($noException && $successfulResult) :
|
||||||
|
|
||||||
$id = $users->getInsertID();
|
$id = $users->getInsertID();
|
||||||
@ -138,8 +147,7 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$this->group_user_model->insert($group_user_data);
|
$this->group_user_model->insert($group_user_data);
|
||||||
}
|
}
|
||||||
$this->chat_department_user_model->where("user_id", $id)->delete();
|
$this->chat_department_user_model->where("user_id", $id)->delete();
|
||||||
foreach($chatDepartments as $chatDepartment)
|
foreach ($chatDepartments as $chatDepartment) {
|
||||||
{
|
|
||||||
$this->chat_department_user_model->insert([
|
$this->chat_department_user_model->insert([
|
||||||
"user_id" => $id,
|
"user_id" => $id,
|
||||||
"chat_department_id" => $this->chat_department_model->where("name", $chatDepartment)->first()["id"]
|
"chat_department_id" => $this->chat_department_model->where("name", $chatDepartment)->first()["id"]
|
||||||
@ -199,7 +207,6 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
unset($postData['group']);
|
unset($postData['group']);
|
||||||
unset($postData['chatDepartments']);
|
unset($postData['chatDepartments']);
|
||||||
|
|
||||||
// Obtener contraseña nueva si se ha introducido en texto plano
|
|
||||||
// Obtener contraseña nueva si se ha introducido en texto plano
|
// Obtener contraseña nueva si se ha introducido en texto plano
|
||||||
if (!empty($postData['new_pwd'])) {
|
if (!empty($postData['new_pwd'])) {
|
||||||
$postData['password'] = $postData['new_pwd'];
|
$postData['password'] = $postData['new_pwd'];
|
||||||
@ -255,8 +262,7 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
$this->group_user_model->insert($group_user_data);
|
$this->group_user_model->insert($group_user_data);
|
||||||
}
|
}
|
||||||
$this->chat_department_user_model->where("user_id", $id)->delete();
|
$this->chat_department_user_model->where("user_id", $id)->delete();
|
||||||
foreach($chatDepartments as $chatDepartment)
|
foreach ($chatDepartments as $chatDepartment) {
|
||||||
{
|
|
||||||
$this->chat_department_user_model->insert([
|
$this->chat_department_user_model->insert([
|
||||||
"user_id" => $id,
|
"user_id" => $id,
|
||||||
"chat_department_id" => $this->chat_department_model->where("name", $chatDepartment)->first()["id"]
|
"chat_department_id" => $this->chat_department_model->where("name", $chatDepartment)->first()["id"]
|
||||||
@ -308,7 +314,7 @@ class Users extends \App\Controllers\GoBaseController
|
|||||||
endif;
|
endif;
|
||||||
|
|
||||||
$users = auth()->getProvider();
|
$users = auth()->getProvider();
|
||||||
$users->delete($user->id);
|
$users->delete($user->id, true);
|
||||||
|
|
||||||
$message = "Usuario eliminado correctamente";
|
$message = "Usuario eliminado correctamente";
|
||||||
return $this->redirect2listView('successMessage', $message);
|
return $this->redirect2listView('successMessage', $message);
|
||||||
|
|||||||
@ -30,7 +30,6 @@ class UserModel extends ShieldUserModel
|
|||||||
protected $updatedField = 'updated_at';
|
protected $updatedField = 'updated_at';
|
||||||
protected $deletedField = 'deleted_at';
|
protected $deletedField = 'deleted_at';
|
||||||
|
|
||||||
|
|
||||||
protected $validationRules = [
|
protected $validationRules = [
|
||||||
"first_name" => "required|trim|max_length[150]",
|
"first_name" => "required|trim|max_length[150]",
|
||||||
"last_name" => "required|trim|max_length[150]",
|
"last_name" => "required|trim|max_length[150]",
|
||||||
@ -77,5 +76,20 @@ class UserModel extends ShieldUserModel
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Método para comprobar si el email ya está registrado
|
||||||
|
public function isEmailUnique($email)
|
||||||
|
{
|
||||||
|
$builder = $this->db
|
||||||
|
->table("auth_identities t1") // La tabla correcta
|
||||||
|
->select("t1.secret AS email")
|
||||||
|
->where('secret', $email);
|
||||||
|
|
||||||
|
// Obtener resultados
|
||||||
|
$result = $builder->get()->getRow();
|
||||||
|
|
||||||
|
// Devuelve true si no se encuentra el correo (es único), false en caso contrario
|
||||||
|
return $result === null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,7 @@ class UserModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
protected $allowedFields = [
|
protected $allowedFields = [
|
||||||
"username",
|
"username",
|
||||||
|
"email",
|
||||||
"first_name",
|
"first_name",
|
||||||
"last_name",
|
"last_name",
|
||||||
"client_id",
|
"client_id",
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
name="save"
|
name="save"
|
||||||
value="<?= lang("Basic.global.Save") ?>"
|
value="<?= lang("Basic.global.Save") ?>"
|
||||||
>
|
>
|
||||||
<?= anchor(route_to("userIndex"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary"]) ?>
|
<?= anchor(route_to("userList"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary"]) ?>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div><!-- /.card-body -->
|
</div><!-- /.card-body -->
|
||||||
|
|||||||
@ -12,28 +12,14 @@
|
|||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
|
<?= view('themes/_commonPartialsBs/_alertBoxes'); ?>
|
||||||
|
|
||||||
<table id="tableOfUsers" class="table table-striped table-hover using-data-table" style="width: 100%;">
|
<table id="tableOfUsers" class="table table-striped table-hover using-data-table"
|
||||||
|
style="width: 100%;">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><?= lang('Users.firstName') ?></th>
|
<th><?= lang('Users.firstName') ?></th>
|
||||||
<th><?= lang('Users.lastName') ?></th>
|
<th><?= lang('Users.lastName') ?></th>
|
||||||
<th><?= lang('Users.email') ?></th>
|
<th><?= lang('Users.email') ?></th>
|
||||||
<th><?= lang('Users.lastAccess') ?></th>
|
<th><?= lang('Users.lastAccess') ?></th>
|
||||||
<?php /*
|
|
||||||
<th><?= lang('Users.mobile') ?></th>
|
|
||||||
<th><?= lang('Users.email') ?></th>
|
|
||||||
<th><?= lang('Users.address') ?></th>
|
|
||||||
<th><?= lang('Users.city') ?></th>
|
|
||||||
<th><?= lang('Users.state') ?></th>
|
|
||||||
<th><?= lang('Users.country') ?></th>
|
|
||||||
<th><?= lang('Users.zipCode') ?></th>
|
|
||||||
<th><?= lang('Users.lastIp') ?></th>
|
|
||||||
|
|
||||||
<th><?= lang('Users.picture') ?></th>
|
|
||||||
<th><?= lang('Users.language') ?></th>
|
|
||||||
<th><?= lang('Users.blocked') ?></th>
|
|
||||||
<th><?= lang('Users.emailConfirmed') ?></th>
|
|
||||||
*/ ?>
|
|
||||||
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
|
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@ -47,61 +33,12 @@
|
|||||||
<?= empty($item->last_name) || strlen($item->last_name) < 51 ? esc($item->last_name) : character_limiter(esc($item->last_name), 50) ?>
|
<?= empty($item->last_name) || strlen($item->last_name) < 51 ? esc($item->last_name) : character_limiter(esc($item->last_name), 50) ?>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<?= empty($item->email) ? "" : character_limiter(esc(lang($item->email)), 50) ?>
|
<?= empty(auth()->getProvider()->findById($item->id)->email) ? "" : character_limiter(esc(auth()->getProvider()->findById($item->id)->email), 50) ?>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle text-nowrap">
|
<td class="align-middle text-nowrap">
|
||||||
<?= empty($item->last_active) ? '' : date('d/m/Y H:m:s', strtotime($item->last_active)) ?>
|
<?= empty($item->last_active) ? '' : date('d/m/Y H:m:s', strtotime($item->last_active)) ?>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<?php /*
|
|
||||||
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= empty($user_model->getGroupsTitles($item->token)) || strlen($user_model->getGroupsTitles($item->token)) < 51 ? esc($user_model->getGroupsTitles($item->token)) : character_limiter($user_model->getGroupsTitles($item->token), 50) ?>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= empty($item->mobile) || strlen($item->mobile) < 51 ? esc($item->mobile) : character_limiter(esc($item->mobile), 50) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= esc($item->email) ?>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= empty($item->address) || strlen($item->address) < 51 ? esc($item->address) : character_limiter(esc($item->address), 50) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= empty($item->city) || strlen($item->city) < 51 ? esc($item->city) : character_limiter(esc($item->city), 50) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= empty($item->state) || strlen($item->state) < 51 ? esc($item->state) : character_limiter(esc($item->state), 50) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= esc($item->country) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= empty($item->zip_code) || strlen($item->zip_code) < 51 ? esc($item->zip_code) : character_limiter(esc($item->zip_code), 50) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= empty($item->last_ip) || strlen($item->last_ip) < 51 ? esc($item->last_ip) : character_limiter(esc($item->last_ip), 50) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle text-nowrap">
|
|
||||||
<?= empty($item->last_access) ? '' : date('d/m/Y H:m:s', strtotime($item->last_access)) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= empty($item->picture) || strlen($item->picture) < 51 ? esc($item->picture) : character_limiter(esc($item->picture), 50) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= esc($item->language) ?>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td class="align-middle text-nowrap">
|
|
||||||
<?= empty($item->blocked) ? '' : date('d/m/Y H:m:s', strtotime($item->blocked)) ?>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">
|
|
||||||
<?= esc($item->email_confirmed) ?>
|
|
||||||
</td>
|
|
||||||
*/ ?>
|
|
||||||
|
|
||||||
<td class="align-middle text-center text-nowrap">
|
<td class="align-middle text-center text-nowrap">
|
||||||
<?= anchor(route_to('editUser', $item->id), "<i class='ti ti-pencil ti-sm mx-2'></i>", ['class' => 'text-body', 'data-id' => $item->id,]); ?>
|
<?= anchor(route_to('editUser', $item->id), "<i class='ti ti-pencil ti-sm mx-2'></i>", ['class' => 'text-body', 'data-id' => $item->id,]); ?>
|
||||||
<?= anchor('#confirm2delete', "<i class='ti ti-trash ti-sm mx-2'></i>", ['class' => 'text-body', 'data-href' => route_to('deleteUser', $item->id), 'data-bs-toggle' => 'modal', 'data-bs-target' => '#confirm2delete']); ?>
|
<?= anchor('#confirm2delete', "<i class='ti ti-trash ti-sm mx-2'></i>", ['class' => 'text-body', 'data-href' => route_to('deleteUser', $item->id), 'data-bs-toggle' => 'modal', 'data-bs-target' => '#confirm2delete']); ?>
|
||||||
|
|||||||
90
ci4/composer.lock
generated
90
ci4/composer.lock
generated
@ -438,33 +438,33 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laminas/laminas-escaper",
|
"name": "laminas/laminas-escaper",
|
||||||
"version": "2.13.0",
|
"version": "2.14.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laminas/laminas-escaper.git",
|
"url": "https://github.com/laminas/laminas-escaper.git",
|
||||||
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba"
|
"reference": "0f7cb975f4443cf22f33408925c231225cfba8cb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/af459883f4018d0f8a0c69c7a209daef3bf973ba",
|
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/0f7cb975f4443cf22f33408925c231225cfba8cb",
|
||||||
"reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba",
|
"reference": "0f7cb975f4443cf22f33408925c231225cfba8cb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-ctype": "*",
|
"ext-ctype": "*",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"php": "~8.1.0 || ~8.2.0 || ~8.3.0"
|
"php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"zendframework/zend-escaper": "*"
|
"zendframework/zend-escaper": "*"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"infection/infection": "^0.27.0",
|
"infection/infection": "^0.27.9",
|
||||||
"laminas/laminas-coding-standard": "~2.5.0",
|
"laminas/laminas-coding-standard": "~3.0.0",
|
||||||
"maglnet/composer-require-checker": "^3.8.0",
|
"maglnet/composer-require-checker": "^3.8.0",
|
||||||
"phpunit/phpunit": "^9.6.7",
|
"phpunit/phpunit": "^9.6.16",
|
||||||
"psalm/plugin-phpunit": "^0.18.4",
|
"psalm/plugin-phpunit": "^0.19.0",
|
||||||
"vimeo/psalm": "^5.9"
|
"vimeo/psalm": "^5.21.1"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -496,7 +496,7 @@
|
|||||||
"type": "community_bridge"
|
"type": "community_bridge"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-10-10T08:35:13+00:00"
|
"time": "2024-10-24T10:12:53+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "masterminds/html5",
|
"name": "masterminds/html5",
|
||||||
@ -986,24 +986,24 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sabberworm/php-css-parser",
|
"name": "sabberworm/php-css-parser",
|
||||||
"version": "v8.6.0",
|
"version": "v8.7.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
|
"url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
|
||||||
"reference": "d2fb94a9641be84d79c7548c6d39bbebba6e9a70"
|
"reference": "f414ff953002a9b18e3a116f5e462c56f21237cf"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d2fb94a9641be84d79c7548c6d39bbebba6e9a70",
|
"url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/f414ff953002a9b18e3a116f5e462c56f21237cf",
|
||||||
"reference": "d2fb94a9641be84d79c7548c6d39bbebba6e9a70",
|
"reference": "f414ff953002a9b18e3a116f5e462c56f21237cf",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-iconv": "*",
|
"ext-iconv": "*",
|
||||||
"php": ">=5.6.20"
|
"php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^5.7.27"
|
"phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.40"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-mbstring": "for parsing UTF-8 CSS"
|
"ext-mbstring": "for parsing UTF-8 CSS"
|
||||||
@ -1045,9 +1045,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
|
"issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
|
||||||
"source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.6.0"
|
"source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.7.0"
|
||||||
},
|
},
|
||||||
"time": "2024-07-01T07:33:21+00:00"
|
"time": "2024-10-27T17:38:32+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
@ -1123,16 +1123,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fakerphp/faker",
|
"name": "fakerphp/faker",
|
||||||
"version": "v1.23.1",
|
"version": "v1.24.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/FakerPHP/Faker.git",
|
"url": "https://github.com/FakerPHP/Faker.git",
|
||||||
"reference": "bfb4fe148adbf78eff521199619b93a52ae3554b"
|
"reference": "a136842a532bac9ecd8a1c723852b09915d7db50"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b",
|
"url": "https://api.github.com/repos/FakerPHP/Faker/zipball/a136842a532bac9ecd8a1c723852b09915d7db50",
|
||||||
"reference": "bfb4fe148adbf78eff521199619b93a52ae3554b",
|
"reference": "a136842a532bac9ecd8a1c723852b09915d7db50",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1180,9 +1180,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/FakerPHP/Faker/issues",
|
"issues": "https://github.com/FakerPHP/Faker/issues",
|
||||||
"source": "https://github.com/FakerPHP/Faker/tree/v1.23.1"
|
"source": "https://github.com/FakerPHP/Faker/tree/v1.24.0"
|
||||||
},
|
},
|
||||||
"time": "2024-01-02T13:46:09+00:00"
|
"time": "2024-11-07T15:11:20+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mikey179/vfsstream",
|
"name": "mikey179/vfsstream",
|
||||||
@ -1238,16 +1238,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "myclabs/deep-copy",
|
"name": "myclabs/deep-copy",
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||||
"reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
|
"reference": "123267b2c49fbf30d78a7b2d333f6be754b94845"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
|
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845",
|
||||||
"reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
|
"reference": "123267b2c49fbf30d78a7b2d333f6be754b94845",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1286,7 +1286,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
||||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
|
"source": "https://github.com/myclabs/DeepCopy/tree/1.12.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1294,20 +1294,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-06-12T14:39:25+00:00"
|
"time": "2024-11-08T17:47:46+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nikic/php-parser",
|
"name": "nikic/php-parser",
|
||||||
"version": "v5.2.0",
|
"version": "v5.3.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||||
"reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb"
|
"reference": "8eea230464783aa9671db8eea6f8c6ac5285794b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb",
|
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b",
|
||||||
"reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb",
|
"reference": "8eea230464783aa9671db8eea6f8c6ac5285794b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1350,9 +1350,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||||
"source": "https://github.com/nikic/PHP-Parser/tree/v5.2.0"
|
"source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1"
|
||||||
},
|
},
|
||||||
"time": "2024-09-15T16:40:33+00:00"
|
"time": "2024-10-08T18:51:32+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phar-io/manifest",
|
"name": "phar-io/manifest",
|
||||||
@ -1793,16 +1793,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "9.6.20",
|
"version": "9.6.21",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "49d7820565836236411f5dc002d16dd689cde42f"
|
"reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa",
|
||||||
"reference": "49d7820565836236411f5dc002d16dd689cde42f",
|
"reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1817,7 +1817,7 @@
|
|||||||
"phar-io/manifest": "^2.0.4",
|
"phar-io/manifest": "^2.0.4",
|
||||||
"phar-io/version": "^3.2.1",
|
"phar-io/version": "^3.2.1",
|
||||||
"php": ">=7.3",
|
"php": ">=7.3",
|
||||||
"phpunit/php-code-coverage": "^9.2.31",
|
"phpunit/php-code-coverage": "^9.2.32",
|
||||||
"phpunit/php-file-iterator": "^3.0.6",
|
"phpunit/php-file-iterator": "^3.0.6",
|
||||||
"phpunit/php-invoker": "^3.1.1",
|
"phpunit/php-invoker": "^3.1.1",
|
||||||
"phpunit/php-text-template": "^2.0.4",
|
"phpunit/php-text-template": "^2.0.4",
|
||||||
@ -1876,7 +1876,7 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.21"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1892,7 +1892,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-07-10T11:45:39+00:00"
|
"time": "2024-09-19T10:50:18+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
@ -3037,5 +3037,5 @@
|
|||||||
"php": "^8.2"
|
"php": "^8.2"
|
||||||
},
|
},
|
||||||
"platform-dev": [],
|
"platform-dev": [],
|
||||||
"plugin-api-version": "2.6.0"
|
"plugin-api-version": "2.3.0"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user