Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 16 additions & 10 deletions config/environment/aurora.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ dashboard:

sidebar:
dashboard:
acl: [ 'ROLE_USER' ]
title: menu
items:
admin_dashboard:
Expand All @@ -180,6 +181,7 @@ sidebar:
# color: text-info

my_opportunities:
acl: [ 'ROLE_USER' ]
title: my_opportunities
items:
admin_registration_list:
Expand All @@ -192,6 +194,7 @@ sidebar:
text: accountability

my_events:
acl: [ 'ROLE_USER' ]
title: my_events
items:
admin_my_event_list:
Expand All @@ -200,6 +203,7 @@ sidebar:
text: my_subscriptions

notice_opportunity:
acl: [ 'ROLE_USER' ]
title: footer.notices_opportunities
items:
admin_opportunity_list:
Expand All @@ -212,6 +216,7 @@ sidebar:
text: my_reviews

entity:
acl: [ 'ROLE_ADMIN' ]
title: management
items:
admin_agent_list:
Expand All @@ -237,45 +242,46 @@ sidebar:

admin:
title: admin_options
acl: ['ROLE_ADMIN']
items:
admin_seal_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: bookmark
text: seals
admin_subsite_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: account_tree
text: subsites
admin_user_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: manage_accounts
text: users
admin_faq_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: quiz
text: faq
admin_role_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: newspaper
text: functions
admin_activity_area_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: category
text: area_of_activity
admin_tag_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: label
text: tags
admin_space_type_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: room_preferences
text: space_type
admin_architectural_accessibility_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: accessibility
text: architectural_accessibility
admin_cultural_language_list:
acl: ['ROLE_USER']
acl: ['ROLE_ADMIN']
icon: language
text: cultural_language

Expand Down
5 changes: 5 additions & 0 deletions config/routes/admin/user.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ edit_profile:
controller: App\Controller\Web\Admin\UserAdminController::editUserProfile
methods: ['GET', 'POST']

details:
path: /{id}
controller: App\Controller\Web\Admin\UserAdminController::details
methods: ['GET']

create:
path: /adicionar
controller: App\Controller\Web\Admin\UserAdminController::create
Expand Down
26 changes: 26 additions & 0 deletions migrations/Version20260106232201.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

final class Version20260106232201 extends AbstractMigration
{
public function getDescription(): string
{
return 'Modify Opportunity Entity';
}

public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE opportunity ADD description VARCHAR(255)');
}

public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE opportunity DROP description');
}
}
2 changes: 1 addition & 1 deletion src/Controller/Web/Admin/MyOpportunityAdminController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

class MyOpportunityAdminController extends AbstractAdminController
{
#[IsGranted(UserRolesEnum::ROLE_ADMIN->value, statusCode: self::ACCESS_DENIED_RESPONSE_CODE)]
// #[IsGranted(UserRolesEnum::ROLE_ADMIN->value, statusCode: self::ACCESS_DENIED_RESPONSE_CODE)]
public function list(): Response
{
return $this->render('my-opportunity/list.html.twig');
Expand Down
8 changes: 4 additions & 4 deletions src/Controller/Web/Admin/OpportunityAdminController.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,10 @@ public function create(Request $request): Response
return $this->redirectToRoute('admin_opportunity_list');
}

#[IsGranted(new Expression('
is_granted("'.UserRolesEnum::ROLE_ADMIN->value.'") or
is_granted("'.UserRolesEnum::ROLE_MANAGER->value.'")
'), statusCode: self::ACCESS_DENIED_RESPONSE_CODE)]
// #[IsGranted(new Expression('
// is_granted("'.UserRolesEnum::ROLE_ADMIN->value.'") or
// is_granted("'.UserRolesEnum::ROLE_MANAGER->value.'")
// '), statusCode: self::ACCESS_DENIED_RESPONSE_CODE)]
public function list(): Response
{
$opportunities = $this->service->findBy();
Expand Down
4 changes: 2 additions & 2 deletions src/Controller/Web/Admin/RegistrationAdminController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public function __construct(private readonly InscriptionOpportunityServiceInterf
{
}

#[IsGranted(UserRolesEnum::ROLE_ADMIN->value, statusCode: self::ACCESS_DENIED_RESPONSE_CODE)]
// #[IsGranted(UserRolesEnum::ROLE_ADMIN->value, statusCode: self::ACCESS_DENIED_RESPONSE_CODE)]
public function list(): Response
{
$inscriptions = $this->service->findUserInscriptionsWithDetails();
Expand All @@ -26,7 +26,7 @@ public function list(): Response
]);
}

#[IsGranted(UserRolesEnum::ROLE_ADMIN->value, statusCode: self::ACCESS_DENIED_RESPONSE_CODE)]
// #[IsGranted(UserRolesEnum::ROLE_ADMIN->value, statusCode: self::ACCESS_DENIED_RESPONSE_CODE)]
public function get(Uuid $id): Response
{
$inscription = $this->service->findInscriptionWithDetails($id);
Expand Down
17 changes: 17 additions & 0 deletions src/Controller/Web/Admin/UserAdminController.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,23 @@ public function timeline(Uuid $id): Response
]);
}

public function details(Uuid $id): Response
{
$user = $this->service->get($id);

$this->denyAccessUnlessGranted('get', $user);

$lastLogin = $this->documentService->getLastLoginByUserId($id);

$agents = $this->agentService->findBy(['user' => $user]);

return $this->render('user/details.html.twig', [
'user' => $user,
'lastLogin' => $lastLogin,
'agents' => $agents,
]);
}

public function accountPrivacy(Uuid $id): Response
{
$user = $this->service->get($id);
Expand Down
6 changes: 3 additions & 3 deletions src/Controller/Web/AgentWebController.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ public function list(Request $request): Response
$dashboard = [
'color' => '#D0A020',
'items' => [
new CardItem(icon: 'description', quantity: $totalAgents, text: 'view.agent.quantity.total'),
new CardItem(icon: 'person', quantity: 30, text: 'view.agent.quantity.culture'),
new CardItem(icon: 'block', quantity: 20, text: 'view.agent.quantity.inactive'),
new CardItem(icon: 'person', quantity: $totalAgents, text: 'view.agent.quantity.total'),
// new CardItem(icon: 'person', quantity: 30, text: 'view.agent.quantity.culture'),
// new CardItem(icon: 'block', quantity: 20, text: 'view.agent.quantity.inactive'),
new CardItem(icon: 'today', quantity: $recentAgents, text: $this->translator->trans('view.agent.quantity.last_days', ['{days}' => $days])),
],
];
Expand Down
15 changes: 15 additions & 0 deletions src/Entity/Opportunity.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ class Opportunity extends AbstractEntity
#[Groups('opportunity.get')]
private ?string $name = null;

#[ORM\Column(length: 255, nullable: true)]
#[Groups('opportunity.get')]
private ?string $description = null;

#[ORM\Column(nullable: true)]
#[Groups('opportunity.get')]
private ?string $image = null;
Expand Down Expand Up @@ -254,11 +258,22 @@ public function setDeletedAt(?DateTime $deletedAt): void
$this->deletedAt = $deletedAt;
}

public function getDescription(): ?string
{
return $this->description;
}

public function setDescription(?string $description): void
{
$this->description = $description;
}

public function toArray(): array
{
return [
'id' => $this->id?->toRfc4122(),
'name' => $this->name,
'description' => $this->description,
'parent' => $this->parent?->toArray(),
'space' => $this->space?->toArray(),
'initiative' => $this->initiative?->toArray(),
Expand Down
2 changes: 1 addition & 1 deletion src/Entity/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class User extends AbstractEntity implements UserInterface, PasswordAuthenticate
private string $status = UserStatusEnum::AWAITING_CONFIRMATION->value;

#[ORM\Column(type: 'json')]
private array $roles = [];
private array $roles = ['ROLE_USER'];

#[ORM\Column]
#[Groups(['user.get'])]
Expand Down
10 changes: 7 additions & 3 deletions src/Service/AgentService.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use App\DTO\AgentDto;
use App\Entity\Agent;
use App\Entity\User;
use App\Enum\UserRolesEnum;
use App\Exception\Agent\AgentResourceNotFoundException;
use App\Exception\Agent\CantRemoveUniqueAgentFromUserException;
use App\Exception\ValidatorException;
Expand Down Expand Up @@ -85,7 +86,10 @@ public function findBy(array $params = [], int $limit = 50): array
{
$userParams = $this->getDefaultParams();

if (null !== $this->security->getUser()) {
if (
null !== $this->security->getUser()
&& false === $this->security->getUser()->isRole(UserRolesEnum::ROLE_ADMIN)
) {
$user = $this->security->getUser();
$userParams['user'] = $user;
}
Expand Down Expand Up @@ -137,8 +141,8 @@ private function organizeDefaultAgentData(array $user): array
return [
'id' => Uuid::v4()->toRfc4122(),
'name' => "{$user['firstname']} {$user['lastname']}",
'shortBio' => 'Agente criado automaticamente',
'longBio' => 'Este agente foi criado automaticamente pelo sistema',
'shortBio' => '',
'longBio' => '',
'culture' => false,
'user' => $user['id'],
];
Expand Down
80 changes: 80 additions & 0 deletions templates/_admin/user/details.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
{% extends "_layouts/blank.html.twig" %}

{% block title %} {{ 'details' | trans }} - {{ user.name }}{% endblock %}

{% block content %}
{% include '_components/modal-confirm-remove.html.twig' %}
<section class="d-flex">
{% include "_components/side-bar.html.twig" %}

<section class="account-privacy w-100 px-3">
<div class="d-flex align-items-center my-4">
<span class="iconify me-2" data-icon="bi:gear-fill" style="font-size: 2rem; color: #000;"></span>
<h2 class="fw-bold mb-0" style="font-size: 1.75rem;">{{ 'account_privacy' | trans }}</h2>
</div>

<div class="row align-items-center my-4">
<div class="col-1">
<img src="{{ user.image ?? asset('img/user.png') }}" class="rounded-circle me-4" style="width: 120px; height: 120px;" alt="">
</div>
<div class="col-11 d-flex align-items-start">
<div>
<h4 class="fw-bold mb-0" style="font-size: 1.5rem;">{{ user.name }}</h4>
<p class="text-muted mb-0" style="font-size: 1rem;">ID: {{ user.id }}</p>
<p>Status:
<strong class="{% if user.isActive %}text-success{% else %}text-danger{% endif %}">
{{ "view.opportunity_admin.inscriptions.status.active" |trans }}
</strong>
</p>
</div>
<div class="ms-4">
<p class="mb-1"><strong>{{ 'last_login' | trans }}</strong> {{ lastLogin|date('d/m/Y H:i') }}</p>
<p class="mb-1"><strong>{{ 'date_created' | trans }}</strong> {{ user.createdAt|date('d/m/Y H:i') }}</p>
<p class="mb-1"><strong>{{ 'last_updated' | trans }}</strong> {{ user.updatedAt|date('d/m/Y H:i') }}</p>
</div>

<div class="ms-5 b-1">
<p class="mb-1"><strong>{{ 'roles' | trans }}:</strong></p>
<ul>
{% for role in user.roles %}
<li>{{ role | trans }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>

<div class="card shadow-sm mb-4">
<div class="card-body">
<h4 class="mb-3">{{ 'account_settings' | trans }}</h4>
<hr>
<p>
<strong>{{ 'first_name' | trans }}:</strong> {{ user.firstname }}
</p>
<p>
<strong>{{ 'lastname' | trans }}:</strong> {{ user.lastname }}
</p>
<p>
<strong>{{ 'social_name' | trans }}:</strong> {{ user.socialName }}
</p>
<p>
<strong>{{ 'email' | trans }}:</strong> {{ user.email }}
</p>
<div>
<strong>{{ 'agents' | trans }}:</strong>

<table class="table table-hover table-striped">
<tbody>
{% for agent in agents %}
<tr>
<td><a href="{{ path('web_agent_getOne', { 'id': agent.id }) }}">{{ agent.name }}</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</section>
</section>
{% endblock %}
2 changes: 1 addition & 1 deletion templates/_admin/user/list.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@

{% for item in users %}
<tr>
<td><a href="#">{{ item.name }}</a></td>
<td><a href="{{ path('admin_user_details', {id: item.id}) }}">{{ item.name }}</a></td>
<td>{{ item.email }}</td>
<td>
<a data-src="{{ asset(item.image ?? 'img/user.png') }}"
Expand Down
2 changes: 1 addition & 1 deletion templates/_components/entity-dashboard.html.twig
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div class="entity-dashboard row">
{% for item in dashboard.items %}
<div class="col">
<div class="col-3">
<div class="card dashboard-card shadow-sm">
<div class="d-flex justify-content-between align-items-start">
<h2 class="quantity">{{ item.quantity }}</h2>
Expand Down
Loading