Merge branch 'dev/tabulator-bugfix' into 'develop'

Dev/tabulator bugfix

See merge request easy-solutions/apps/easyportal!43
This commit is contained in:
Charles-Edouard MARGUERITE 2026-03-03 14:06:55 +00:00
commit 91f3e06dd5
9 changed files with 34 additions and 25 deletions

View File

@ -1,7 +1,7 @@
import {Controller} from '@hotwired/stimulus'
// Important: include a build with Ajax + pagination (TabulatorFull is simplest)
import {TabulatorFull as Tabulator} from 'tabulator-tables';
import {eyeIconLink, TABULATOR_FR_LANG} from "../js/global.js";
import {capitalizeFirstLetter, eyeIconLink, TABULATOR_FR_LANG} from "../js/global.js";
import { Modal } from "bootstrap";
export default class extends Controller {
@ -197,6 +197,7 @@ export default class extends Controller {
if (this.currentOrgId) {
formData.append('_method', 'PUT');
}
formData.set('name', capitalizeFirstLetter(formData.get('name')));
try {
const response = await fetch(url, {

View File

@ -7,7 +7,8 @@ import {
eyeIconLink,
sendEmailIcon,
TABULATOR_FR_LANG,
trashIconForm
trashIconForm,
capitalizeFirstLetter
} from "../js/global.js";
import { Modal } from "bootstrap";
import base_controller from "./base_controller.js";
@ -161,8 +162,8 @@ export default class extends base_controller {
return wrapper;
},
},
{title: "<b>Nom</b>", field: "name", headerFilter: "input", widthGrow: 2, vertAlign: "middle"},
{title: "<b>Prénom</b>", field: "prenom", headerFilter: "input", widthGrow: 2, vertAlign: "middle"},
{title: "<b>Nom</b>", field: "surname", headerFilter: "input", widthGrow: 2, vertAlign: "middle"},
{title: "<b>Prénom</b>", field: "name", headerFilter: "input", widthGrow: 2, vertAlign: "middle"},
{title: "<b>Email</b>", field: "email", headerFilter: "input", widthGrow: 3, vertAlign: "middle"},
{
title: "<b>Statut</b>", field: "statut", vertAlign: "middle",
@ -301,6 +302,7 @@ export default class extends base_controller {
// Add filters
if (params.filter) {
params.filter.forEach(filter => {
console.log("Adding filter to query:", filter.field, filter.value);
queryParams.append(`filter[${filter.field}]`, filter.value);
});
}
@ -639,8 +641,8 @@ export default class extends base_controller {
return wrapper;
},
},
{title: "<b>Nom</b>", field: "name", headerFilter: "input", widthGrow: 2, vertAlign: "middle"},
{title: "<b>Prénom</b>", field: "prenom", headerFilter: "input", widthGrow: 2, vertAlign: "middle"},
{title: "<b>Nom</b>", field: "surname", headerFilter: "input", widthGrow: 2, vertAlign: "middle"},
{title: "<b>Prénom</b>", field: "name", headerFilter: "input", widthGrow: 2, vertAlign: "middle"},
{title: "<b>Email</b>", field: "email", headerFilter: "input", widthGrow: 3, vertAlign: "middle"},
{
title: "<b>Statut</b>", field: "statut", vertAlign: "middle",
@ -1032,6 +1034,7 @@ export default class extends base_controller {
const formData = new FormData(form);
const ucSurname = formData.get('surname').toUpperCase();
formData.set('surname', ucSurname);
formData.set('name', capitalizeFirstLetter(formData.get('name'))); // Capitalize first letter of name
try {
const response = await fetch('/user/new/ajax', { // Adjust path if prefix is different
@ -1101,6 +1104,7 @@ export default class extends base_controller {
// Force Uppercase on Surname as requested
formData.set('surname', formData.get('surname').toUpperCase());
formData.set('name', capitalizeFirstLetter(formData.get('name'))); // Capitalize first letter of name
try {
const response = await fetch(`/user/edit/${this.currentUserId}/ajax`, {

View File

@ -80,3 +80,7 @@ export function sendEmailIcon(userId, orgId) {
<svg xmlns="http://www.w3.org/2000/svg" width="35px" height="35px" viewBox="0 0 24 24"><path fill="currentColor" d="M18.175 17H15q-.425 0-.712-.288T14 16t.288-.712T15 15h3.175l-.9-.9Q17 13.825 17 13.413t.3-.713q.275-.275.7-.275t.7.275l2.6 2.6q.125.125.2.312t.075.388t-.075.387t-.2.313l-2.6 2.6q-.275.275-.687.288T17.3 19.3q-.275-.275-.275-.7t.275-.7zM4 17q-.825 0-1.412-.587T2 15V5q0-.825.588-1.412T4 3h13q.825 0 1.413.588T19 5v4.075q0 .4-.3.7t-.7.3q-.425 0-.712-.288T17 9.076V6.4L10.4 11L4 6.425V15h7.075q.425 0 .713.288t.287.712t-.287.713t-.713.287zM5.45 5l4.95 3.55L15.5 5zM4 15V5z"/></svg>
</a>`
}
export function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}

View File

@ -107,7 +107,7 @@ class OrganizationController extends AbstractController
}
$organization->setProjectPrefix($this->organizationsService->generateUniqueProjectPrefix());
$organization->setName(ucFirst($organization->getName()));
$this->entityManager->persist($organization);
$this->entityManager->flush();
@ -165,6 +165,7 @@ class OrganizationController extends AbstractController
if ($logoFile) {
$this->organizationsService->handleLogo($organization, $logoFile);
}
$organization->setName(ucFirst($organization->getName()));
$this->entityManager->persist($organization);
$this->entityManager->flush();
$this->actionService->createAction("Edit Organization", $actingUser, $organization, $organization->getName());

View File

@ -531,8 +531,8 @@ class UserController extends AbstractController
return [
'id' => $user->getId(),
'pictureUrl' => $user->getPictureUrl(),
'name' => $user->getSurname(),
'prenom' => $user->getName(),
'surname' => $user->getSurname(),
'name' => $user->getName(),
'email' => $user->getEmail(),
'isConnected' => $this->userService->isUserConnected($user->getUserIdentifier()),
'showUrl' => $this->generateUrl('user_show', ['id' => $user->getId()]),

View File

@ -39,7 +39,7 @@ class OrganizationsRepository extends ServiceEntityRepository
// 2. Filters
if (!empty($filters['name'])) {
$qb->andWhere('o.name LIKE :name')
->setParameter('name', '%' . strtolower($filters['name']) . '%');
->setParameter('name', '%' . ucfirst($filters['name']) . '%');
}
if (!empty($filters['email'])) {
$qb->andWhere('o.email LIKE :email')

View File

@ -45,14 +45,13 @@ class UserRepository extends ServiceEntityRepository implements PasswordUpgrader
$qb = $this->createQueryBuilder('u')
->where('u.isDeleted = :del')
->setParameter('del', false);
if (!empty($filters['name'])) {
$qb->andWhere('u.surname LIKE :name')
->setParameter('name', '%' . strtolower($filters['name']) . '%');
if (!empty($filters['surname'])) {
$qb->andWhere('u.surname LIKE :surname')
->setParameter('surname', '%' . strtoupper($filters['surname']) . '%');
}
if (!empty($filters['prenom'])) {
$qb->andWhere('u.name LIKE :prenom')
->setParameter('prenom', '%' . strtolower($filters['prenom']) . '%');
if (!empty($filters['name'])) {
$qb->andWhere('u.name LIKE :name')
->setParameter('name', '%' . ucFirst($filters['name']) . '%');
}
if (!empty($filters['email'])) {
$qb->andWhere('u.email LIKE :email')

View File

@ -58,13 +58,13 @@ class UsersOrganizationsRepository extends ServiceEntityRepository
->setParameter('org', $org);
// Apply filters
if (!empty($filters['name'])) {
$qb->andWhere('u.surname LIKE :name')
->setParameter('name', '%' . strtolower($filters['name']) . '%');
if (!empty($filters['surname'])) {
$qb->andWhere('u.surname LIKE :surname')
->setParameter('surname', '%' . strtoupper($filters['surname']) . '%');
}
if (!empty($filters['prenom'])) {
$qb->andWhere('u.name LIKE :prenom')
->setParameter('prenom', '%' . strtolower($filters['prenom']) . '%');
if (!empty($filters['name'])) {
$qb->andWhere('u.name LIKE :name')
->setParameter('name', '%' . ucFirst($filters['name']) . '%');
}
if (!empty($filters['email'])) {
$qb->andWhere('u.email LIKE :email')

View File

@ -418,8 +418,8 @@ class UserService
}
return [
'pictureUrl' => $user->getPictureUrl(),
'name' => $user->getSurname(),
'prenom' => $user->getName(),
'surname' => $user->getSurname(),
'name' => $user->getName(),
'email' => $user->getEmail(),
'isConnected' => $this->isUserConnected($user->getUserIdentifier()),
'statut' => $statut,