From 06b53a37a6bbca814345a25b3e09e6e422534120 Mon Sep 17 00:00:00 2001 From: israelmelo Date: Wed, 5 Jun 2024 18:52:22 -0300 Subject: [PATCH 01/68] =?UTF-8?q?Corre=C3=A7=C3=A3o=20no=20nome=20do=20hoo?= =?UTF-8?q?k=20do=20registrationMetadata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/Entities/Opportunity.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/Entities/Opportunity.php b/src/core/Entities/Opportunity.php index e3894f7c13..17ef4668a4 100644 --- a/src/core/Entities/Opportunity.php +++ b/src/core/Entities/Opportunity.php @@ -1139,7 +1139,7 @@ function registerRegistrationMetadata($also_previous_phases = false){ $app->registerMetadata($metadata, Registration::class); } - $app->applyHookBoundTo($this, "{$this->hookPrefix}.registrationMetadada"); + $app->applyHookBoundTo($this, "{$this->hookPrefix}.registrationMetadata"); if($also_previous_phases && $this->parent) { $this->previousPhase->registerRegistrationMetadata(); From c559de6443785ee5a8554283f315d1a7c3aecef2 Mon Sep 17 00:00:00 2001 From: israelmelo Date: Wed, 5 Jun 2024 18:54:59 -0300 Subject: [PATCH 02/68] =?UTF-8?q?Criado=20hooks=20para=20a=20tab=20na=20te?= =?UTF-8?q?la=20de=20acompanhamento=20da=20inscri=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/Opportunities/views/registration/single.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/Opportunities/views/registration/single.php b/src/modules/Opportunities/views/registration/single.php index eaec2c3330..dcafad2cfd 100644 --- a/src/modules/Opportunities/views/registration/single.php +++ b/src/modules/Opportunities/views/registration/single.php @@ -42,6 +42,8 @@ + applyTemplateHook('single-tab', 'begin') ?> +
@@ -299,5 +301,7 @@
+ + applyTemplateHook('single-tab', 'end') ?>
\ No newline at end of file From c4c93fed5c0b51b6623678f0202c463b78ced75b Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Thu, 6 Jun 2024 00:15:08 -0300 Subject: [PATCH 03/68] Implementa possibilidade de definir mascaras em inputs do entity-field --- CHANGELOG.md | 1 + src/modules/Entities/components/entity-field/template.php | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6a24cd1ab..e7e8b2ba43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Melhorias - Implementa hook no método registerRegistrationMetadata da oportunidade, para possibilitar incremento de novos registros atrevéz de plugins e módulos - Implementa novos hook's para possibilitar manipulação da tela de listagem de fases +- Implementa possibilidade de definir mascaras em inputs do entity-field ### Correções - Corrige erro no carregamento do formulário de avaliação para o avaliador diff --git a/src/modules/Entities/components/entity-field/template.php b/src/modules/Entities/components/entity-field/template.php index 4a590cf9b3..d7cdfaf9bc 100644 --- a/src/modules/Entities/components/entity-field/template.php +++ b/src/modules/Entities/components/entity-field/template.php @@ -25,6 +25,7 @@ +
From 528cb41bf5037ef8987b57546c296ed536193ff9 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Thu, 6 Jun 2024 01:52:34 -0300 Subject: [PATCH 04/68] Ajusta prop mask no componente entity-field --- src/modules/Entities/components/entity-field/script.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/Entities/components/entity-field/script.js b/src/modules/Entities/components/entity-field/script.js index 739a5f2ec9..eea0210c7d 100644 --- a/src/modules/Entities/components/entity-field/script.js +++ b/src/modules/Entities/components/entity-field/script.js @@ -122,6 +122,10 @@ app.component('entity-field', { type: Boolean, default: false }, + mask: { + type: String, + default: null, + }, }, computed: { From 218722e273364f247f908871cc2d6ed56457278b Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Thu, 6 Jun 2024 02:14:59 -0300 Subject: [PATCH 05/68] =?UTF-8?q?Implementa=20contante=20global=20mcTabAct?= =?UTF-8?q?ive=20para=20guadar=20a=20aba=20que=20o=20mc-tab=20est=C3=A1=20?= =?UTF-8?q?selecionada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + src/modules/Components/components/mc-tab/script.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7e8b2ba43..69222e4925 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Implementa hook no método registerRegistrationMetadata da oportunidade, para possibilitar incremento de novos registros atrevéz de plugins e módulos - Implementa novos hook's para possibilitar manipulação da tela de listagem de fases - Implementa possibilidade de definir mascaras em inputs do entity-field +- Implementa contante global mcTabActive para guadar a aba que o mc-tab está selecionada ### Correções - Corrige erro no carregamento do formulário de avaliação para o avaliador diff --git a/src/modules/Components/components/mc-tab/script.js b/src/modules/Components/components/mc-tab/script.js index 78842538c7..c6310d1bd3 100644 --- a/src/modules/Components/components/mc-tab/script.js +++ b/src/modules/Components/components/mc-tab/script.js @@ -34,12 +34,14 @@ app.component('mc-tab', { const hash = '#' + (!props.disabled ? props.slug : '') const isActive = Vue.ref(false) const tabsProvider = Vue.inject('tabsProvider') + const global = useGlobalState(); let timeout = null Vue.watch( () => tabsProvider.activeTab, () => { isActive.value = props.slug === tabsProvider.activeTab?.slug + global.mcTabActive = tabsProvider.activeTab?.slug; window.clearTimeout(timeout) if (props.cache) { From dc7a85b03b10f31e50f511d00c68a6c205c42ed5 Mon Sep 17 00:00:00 2001 From: israelmelo Date: Thu, 6 Jun 2024 12:04:44 -0300 Subject: [PATCH 06/68] =?UTF-8?q?Criado=20novos=20hooks=20para=20adicionar?= =?UTF-8?q?=20a=20timeline=20do=20acompanhamento=20de=20inscri=C3=A7=C3=A3?= =?UTF-8?q?o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/opportunity-phases-timeline/template.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/Opportunities/components/opportunity-phases-timeline/template.php b/src/modules/Opportunities/components/opportunity-phases-timeline/template.php index e4b4422ff8..5d42752c6b 100644 --- a/src/modules/Opportunities/components/opportunity-phases-timeline/template.php +++ b/src/modules/Opportunities/components/opportunity-phases-timeline/template.php @@ -12,6 +12,7 @@ '); ?>
+ applyComponentHook('item', 'before'); ?>
@@ -44,4 +45,5 @@ applyComponentHook('item', 'end'); ?>
+ applyComponentHook('item', 'after'); ?>
\ No newline at end of file From 5443d83a0f04a51e98e28433a0c7c1743bfd3243 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Thu, 6 Jun 2024 12:59:08 -0300 Subject: [PATCH 07/68] =?UTF-8?q?Implementa=20getter=20lastPhase()=20para?= =?UTF-8?q?=20as=20inscri=C3=A7=C3=B5es,=20possibilitando=20recuperar=20a?= =?UTF-8?q?=20entidade=20da=20inscri=C3=A7=C3=A3o=20na=20ultima=20fase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + src/modules/OpportunityPhases/Module.php | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69222e4925..65c1e261dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Implementa novos hook's para possibilitar manipulação da tela de listagem de fases - Implementa possibilidade de definir mascaras em inputs do entity-field - Implementa contante global mcTabActive para guadar a aba que o mc-tab está selecionada +- Implementa getter lastPhase() para as inscrições, possibilitando recuperar a entidade da inscrição na ultima fase ### Correções - Corrige erro no carregamento do formulário de avaliação para o avaliador diff --git a/src/modules/OpportunityPhases/Module.php b/src/modules/OpportunityPhases/Module.php index b83c4834ad..b77f544485 100644 --- a/src/modules/OpportunityPhases/Module.php +++ b/src/modules/OpportunityPhases/Module.php @@ -551,6 +551,11 @@ function _init () { return; }); + $app->hook('entity(Registration).get(lastPhase)', function(&$value) use ($app) { + /** @var Registration $this */ + $value = $app->repo('Registration')->findOneBy(['number' => $this->number, 'opportunity' => $this->opportunity->lastPhase]); + }); + /** * Getters das fases de avaliação */ From eead1d9c8f43e0d4e2a26a2173617a75ca63fcb8 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Thu, 6 Jun 2024 13:06:44 -0300 Subject: [PATCH 08/68] =?UTF-8?q?Corrige=20remo=C3=A7=C3=A3o=20de=20abas?= =?UTF-8?q?=20do=20componente=20mc-tabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + src/modules/Components/components/mc-tab/script.js | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65c1e261dd..b5d0ef24b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Ajusta estêncil do upload de imagem para carregar ja no tamanho máximo permitido - Corrige db-update que atualiza legado da distribuição de avaliaçações por categoria - Corrige db-update que cria as colunas eligible e score +- Corrige remoção de abas do componente mc-tabs ## [7.4] 2024-05-28 ### Novas funcionalidades diff --git a/src/modules/Components/components/mc-tab/script.js b/src/modules/Components/components/mc-tab/script.js index c6310d1bd3..4c259a0ba8 100644 --- a/src/modules/Components/components/mc-tab/script.js +++ b/src/modules/Components/components/mc-tab/script.js @@ -69,6 +69,15 @@ app.component('mc-tab', { }) }) + Vue.onBeforeUnmount(() => { + const tab = tabsProvider.tabs.find((tab) => tab.hash == hash); + + const index = tabsProvider.tabs.indexOf(tab); + if (index > -1) { + tabsProvider.tabs.splice(index, 1); + } + }); + return { cached, hash, From 6509d1fe33119beb901f359ab81dba6a34d288b0 Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Fri, 7 Jun 2024 09:29:16 -0300 Subject: [PATCH 09/68] Refatora script start.sh e middleware ExecutionTime para fornecer um log mais limpo para o desenvolvedor --- CHANGELOG.md | 3 +++ docker/development/start.sh | 2 +- src/core/Middlewares/ExecutionTime.php | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5d0ef24b2..5a7ee3212b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,9 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Corrige db-update que cria as colunas eligible e score - Corrige remoção de abas do componente mc-tabs +### Melhorias não funcionais +- Refatora script start.sh e middleware ExecutionTime para fornecer um log mais limpo para o desenvolvedor + ## [7.4] 2024-05-28 ### Novas funcionalidades - Adiciona campos **total de vagas** e **valor total** nas oportunidades diff --git a/docker/development/start.sh b/docker/development/start.sh index be8065538e..75c1138a44 100755 --- a/docker/development/start.sh +++ b/docker/development/start.sh @@ -1,3 +1,3 @@ #!/bin/bash -php -S 0.0.0.0:80 -t /var/www/html /var/www/dev/router.php \ No newline at end of file +php -S 0.0.0.0:80 -q -t /var/www/html /var/www/dev/router.php \ No newline at end of file diff --git a/src/core/Middlewares/ExecutionTime.php b/src/core/Middlewares/ExecutionTime.php index 95d5df4462..0ea7b41cb5 100644 --- a/src/core/Middlewares/ExecutionTime.php +++ b/src/core/Middlewares/ExecutionTime.php @@ -11,7 +11,8 @@ public function __invoke(Request $request, RequestHandler $handler) { $app = App::i(); $app->log->info('========================================================================='); - + $app->log->debug($_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI']); + $response = $handler->handle($request); $endTime = microtime(true); From b74514690bac685d83a2f60d21a5c22f534dfb8c Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Fri, 7 Jun 2024 10:14:24 -0300 Subject: [PATCH 10/68] corrige hook que propaga o sentTimestamp --- src/modules/OpportunityPhases/Module.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/OpportunityPhases/Module.php b/src/modules/OpportunityPhases/Module.php index b77f544485..6bff9f8d94 100644 --- a/src/modules/OpportunityPhases/Module.php +++ b/src/modules/OpportunityPhases/Module.php @@ -211,7 +211,7 @@ function _init () { $self = $this; $registration_repository = $app->repo('Registration'); - $app->hook("entity(Registration).<>:before", function(){ + $app->hook("entity(Registration).<>:before", function(){ if(!$this->opportunity->isDataCollection){ $this->sentTimestamp = $this->previousPhase->sentTimestamp; } From 6fd7afdc57e604f6871eae905ae9c669faa67d14 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Fri, 7 Jun 2024 13:02:09 -0300 Subject: [PATCH 11/68] =?UTF-8?q?Implementa=20hook=20no=20metodo=20getVali?= =?UTF-8?q?dationErrors=20possibilitando=20a=20mainipula=C3=A7=C3=A3o=20fi?= =?UTF-8?q?nal=20dos=20erros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/Entity.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/Entity.php b/src/core/Entity.php index e7b714eb4d..813036b152 100644 --- a/src/core/Entity.php +++ b/src/core/Entity.php @@ -1142,6 +1142,8 @@ public function getValidationErrors(){ if($this->usesTaxonomies()) $errors = $errors + $this->getTaxonomiesValidationErrors(); + $app->applyHookBoundTo($this, "{$this->hookPrefix}.validationErrors", [&$errors]); + return $errors; } From 29f58c07220192d95e0fe398d264471cae5c7125 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Fri, 7 Jun 2024 13:03:46 -0300 Subject: [PATCH 12/68] =?UTF-8?q?Melhora=20fluxo=20das=20mensagens=20de=20?= =?UTF-8?q?valida=C3=A7=C3=A3o=20de=20erros=20da=20inscri=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ src/core/Controllers/Registration.php | 4 ++-- src/core/Entities/Registration.php | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5d0ef24b2..c8d5a68852 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Implementa possibilidade de definir mascaras em inputs do entity-field - Implementa contante global mcTabActive para guadar a aba que o mc-tab está selecionada - Implementa getter lastPhase() para as inscrições, possibilitando recuperar a entidade da inscrição na ultima fase +- Implementa hook no metodo getValidationErrors possibilitando a mainipulação final dos erros +- Melhora fluxo das mensagens de validação de erros da inscrição ### Correções - Corrige erro no carregamento do formulário de avaliação para o avaliador diff --git a/src/core/Controllers/Registration.php b/src/core/Controllers/Registration.php index decf99a6f3..6ab7a45a75 100644 --- a/src/core/Controllers/Registration.php +++ b/src/core/Controllers/Registration.php @@ -602,7 +602,7 @@ function POST_validateEntity() { $entity->$field = $value; } - if ($errors = $entity->getSendValidationErrors()) { + if ($errors = $entity->getValidationErrors()) { $this->errorJson($errors); } else { $this->json(true); @@ -623,7 +623,7 @@ function POST_validateProperties() { $entity->$field = $value; } - if ($_errors = $entity->getSendValidationErrors()) { + if ($_errors = $entity->getValidationErrors()) { $errors = []; foreach($this->postData as $field => $value){ if(key_exists($field, $_errors)){ diff --git a/src/core/Entities/Registration.php b/src/core/Entities/Registration.php index 84dd0d348b..5c701329d8 100644 --- a/src/core/Entities/Registration.php +++ b/src/core/Entities/Registration.php @@ -1015,10 +1015,12 @@ function isFieldVisisble(RegistrationFieldConfiguration|RegistrationFileConfigur function getValidationErrors() { if($this->isNew()) { - return parent::getValidationErrors(); + $errors = parent::getValidationErrors(); } else { - return $this->getSendValidationErrors(); + $errors = [...parent::getValidationErrors(), ...$this->getSendValidationErrors()]; } + + return $errors; } function getSendValidationErrors(string $field_prefix = 'field_', $file_prefix = 'file_', $agent_prefix = 'agent_'){ From 9b8f6a8cc847d8ecbe35471d9eeaf704dec80104 Mon Sep 17 00:00:00 2001 From: Raul Vitor Lucena Brito Date: Mon, 10 Jun 2024 10:42:31 -0300 Subject: [PATCH 13/68] Ajusta erro na modal do image-uploader (Ref.: #3194) --- .../Components/components/mc-image-uploader/script.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/modules/Components/components/mc-image-uploader/script.js b/src/modules/Components/components/mc-image-uploader/script.js index b271d29db8..020f398c28 100644 --- a/src/modules/Components/components/mc-image-uploader/script.js +++ b/src/modules/Components/components/mc-image-uploader/script.js @@ -139,13 +139,14 @@ app.component("mc-image-uploader", { }, loadImage(event, modal) { - modal.open(); - // Reference to the DOM input element const { files } = event.target; - const filename = event.target.value.split(/(\\|\/)/g).pop(); + console.log(files); - // Ensure that you have a file before attempting to read it if (files && files[0]) { + modal.open(); + const filename = event.target.value.split(/(\\|\/)/g).pop(); + + // Ensure that you have a file before attempting to read it // 1. Revoke the object URL, to allow the garbage collector to destroy the uploaded before file if (this.image.src) { URL.revokeObjectURL(this.image.src); From fc23109a03f1da19d86c195a3b744d323e7b0951 Mon Sep 17 00:00:00 2001 From: Raul Vitor Lucena Brito Date: Mon, 10 Jun 2024 11:54:07 -0300 Subject: [PATCH 14/68] Remove console log (Ref.: #3194) --- src/modules/Components/components/mc-image-uploader/script.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/Components/components/mc-image-uploader/script.js b/src/modules/Components/components/mc-image-uploader/script.js index 020f398c28..1a5285ca3c 100644 --- a/src/modules/Components/components/mc-image-uploader/script.js +++ b/src/modules/Components/components/mc-image-uploader/script.js @@ -140,7 +140,6 @@ app.component("mc-image-uploader", { loadImage(event, modal) { const { files } = event.target; - console.log(files); if (files && files[0]) { modal.open(); From 6d245b50c266c930ec0dfb6e25899e95ab006830 Mon Sep 17 00:00:00 2001 From: Victor Magalhaes Date: Mon, 10 Jun 2024 14:22:44 -0300 Subject: [PATCH 15/68] habilita hooks entity insert --- src/core/Entity.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/Entity.php b/src/core/Entity.php index fe27a636a4..e7b714eb4d 100644 --- a/src/core/Entity.php +++ b/src/core/Entity.php @@ -1215,12 +1215,12 @@ public function postPersist($args = null){ $hook_prefix = $this->getHookPrefix(); -// $app->applyHookBoundTo($this, "{$hook_prefix}.insert:after"); -// -// if ($this->usesPermissionCache()) { -// $this->createPermissionsCacheForUsers([$this->ownerUser]); -// $app->enqueueEntityToPCacheRecreation($this); -// } + $app->applyHookBoundTo($this, "{$hook_prefix}.insert:after"); + + if ($this->usesPermissionCache()) { + $this->createPermissionsCacheForUsers([$this->ownerUser]); + $app->enqueueEntityToPCacheRecreation($this); + } } /** From bc364c45dbb63aa51fecdccc4f2fd5a594e9f0f8 Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 21:03:54 -0300 Subject: [PATCH 16/68] =?UTF-8?q?melhorias=20e=20corre=C3=A7=C3=B5es=20na?= =?UTF-8?q?=20listagem=20de=20avalia=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 ++ .../opportunity-evaluations-list/script.js | 35 ++++++++++--------- .../opportunity-evaluations-list/template.php | 34 +++++++++--------- .../_opportunity-evaluations-list.scss | 10 ++++-- 4 files changed, 43 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a7ee3212b..371c0a0240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Implementa possibilidade de definir mascaras em inputs do entity-field - Implementa contante global mcTabActive para guadar a aba que o mc-tab está selecionada - Implementa getter lastPhase() para as inscrições, possibilitando recuperar a entidade da inscrição na ultima fase +- Melhorias na interface e filtro na lista de inscrições da página de avaliação ### Correções - Corrige erro no carregamento do formulário de avaliação para o avaliador @@ -18,6 +19,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Corrige db-update que atualiza legado da distribuição de avaliaçações por categoria - Corrige db-update que cria as colunas eligible e score - Corrige remoção de abas do componente mc-tabs +- Corrige link dos botões de acessar inscrição na lista de inscrições da página de avaliação ### Melhorias não funcionais - Refatora script start.sh e middleware ExecutionTime para fornecer um log mais limpo para o desenvolvedor diff --git a/src/modules/Opportunities/components/opportunity-evaluations-list/script.js b/src/modules/Opportunities/components/opportunity-evaluations-list/script.js index 37cf130b19..4d2b2795f2 100644 --- a/src/modules/Opportunities/components/opportunity-evaluations-list/script.js +++ b/src/modules/Opportunities/components/opportunity-evaluations-list/script.js @@ -34,33 +34,29 @@ app.component('opportunity-evaluations-list', { keywords: "", timeOut: null, roles: $MAPAS.currentUserRoles, - filterKeyword: false + filterKeyword: false, + loading: false } }, watch: { 'pending'(_new, _old) { - this.timeOutFind(_new, _old); + this.getEvaluations(); } }, methods: { - timeOutFind(_new, _old) { - if (_new != _old) { - clearTimeout(this.timeOut); - this.timeOut = setTimeout(() => { - this.getEvaluations(); - }, 1500); - } - }, - filterKeywordExec(_new, _old) { - if(!this.keywords){ - messages.error(this.text('Informe a palavra chave')); - }else{ + timeOutFind(delay = 1500) { + clearTimeout(this.timeOut); + + this.timeOut = setTimeout(() => { this.getEvaluations(); - } + }, delay); }, async getEvaluations() { + this.loading = true; + let args = {}; args['@select'] = "id,owner.name"; + args['registration:@select'] = "id,owner.name,sentTimestamp"; args['@opportunity'] = this.entity.opportunity.id; if(this.keywords){ @@ -77,7 +73,10 @@ app.component('opportunity-evaluations-list', { await api.GET(url).then(response => response.json().then(objs => { this.evaluations = objs.map(function(item){ return { - registrationid:item.registration.id, + evaluationId: item.evaluation?.id, + registrationNumber: item.registration.number, + registrationId: item.registration.id, + registrationSentTimestamp: new McDate(item.registration.sentTimestamp.date), agentname: item.registration.owner?.name, status: item?.evaluation?.status, resultString: item?.evaluation?.resultString || null, @@ -85,8 +84,10 @@ app.component('opportunity-evaluations-list', { } }); this.filterKeyword = false; - this.evaluations.sort((a, b) => (a.registrationid - b.registrationid)); + this.evaluations.sort((a, b) => (a.registrationId - b.registrationId)); window.dispatchEvent(new CustomEvent('evaluationRegistrationList', {detail:{evaluationRegistrationList:this.evaluations}})); + + this.loading = false; })); const globalState = useGlobalState(); diff --git a/src/modules/Opportunities/components/opportunity-evaluations-list/template.php b/src/modules/Opportunities/components/opportunity-evaluations-list/template.php index 11ed01e046..39bf43b210 100644 --- a/src/modules/Opportunities/components/opportunity-evaluations-list/template.php +++ b/src/modules/Opportunities/components/opportunity-evaluations-list/template.php @@ -8,6 +8,7 @@ $this->import(' mc-icon + mc-loading '); ?>
@@ -18,39 +19,37 @@
- - - +
- - +
-
    -
  • + +
      +
    • diff --git a/src/themes/BaseV2/assets-src/sass/2.components/_opportunity-evaluations-list.scss b/src/themes/BaseV2/assets-src/sass/2.components/_opportunity-evaluations-list.scss index fbad8d354e..2c1cb8c90a 100644 --- a/src/themes/BaseV2/assets-src/sass/2.components/_opportunity-evaluations-list.scss +++ b/src/themes/BaseV2/assets-src/sass/2.components/_opportunity-evaluations-list.scss @@ -64,7 +64,7 @@ position: relative; border-radius: size(69); height: size(40); - border: size(1) solid var(--mc-gray-100); + border: size(1) solid $gray-700; background: url(https://api.iconify.design/ant-design/search-outlined.svg) no-repeat calc(100% - size(10)) center/size(20); width: 100%; padding: size(12) size(30) size(12) size(20); @@ -101,6 +101,10 @@ } .label-evaluation { + &__search { + border-color: $gray-700; + } + &__check { margin-top: size(15); display: flex; @@ -174,9 +178,9 @@ font-family: 'Open Sans'; font-style: normal; font-weight: 700; - font-size: size(14); + font-size: size(22); line-height: size(19); - color: var(--mc-primary-500); + color: $opportunities-500; } } From b068f349bb651ca3c8da0b5df94a4b2b0d705797 Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 21:06:21 -0300 Subject: [PATCH 17/68] =?UTF-8?q?corre=C3=A7=C3=A3o=20do=20componente=20mc?= =?UTF-8?q?-link=20para=20ser=20reativo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/components/mc-link/script.js | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/modules/Components/components/mc-link/script.js b/src/modules/Components/components/mc-link/script.js index d4c5d89311..d9e8ab1fb5 100644 --- a/src/modules/Components/components/mc-link/script.js +++ b/src/modules/Components/components/mc-link/script.js @@ -57,25 +57,35 @@ app.component('mc-link', { }, - data() { - let url = ''; - let classes = this.class; - let queryString = this.serializeQueryString(); - queryString = queryString ? `?${queryString}` : queryString; - - if (this.entity) { - url = this.entity.getUrl(this.route, this.params) + queryString; - classes += ` ${this.entity.__objectType}__color` ; - } else { - const parts = this.route.split('/'); - url = Utils.createUrl(parts[0], parts[1], this.params) + queryString; - } + computed: { + url() { + let url = ''; + let queryString = this.serializeQueryString(); + queryString = queryString ? `?${queryString}` : queryString; + + if (this.entity) { + url = this.entity.getUrl(this.route, this.params) + queryString; + } else { + const parts = this.route.split('/'); + url = Utils.createUrl(parts[0], parts[1], this.params) + queryString; + } - if (this.hash) { - url = url+'#'+this.hash; - } + if (this.hash) { + url = url+'#'+this.hash; + } + + return url; + }, + + classes() { + let classes = this.class; - return {url, classes}; + if (this.entity) { + classes += ` ${this.entity.__objectType}__color` ; + } + + return classes; + } }, methods: { From a051905dc609fcdb47435d584ea216d2870590fa Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 21:38:45 -0300 Subject: [PATCH 18/68] =?UTF-8?q?Possibilita=20a=20configura=C3=A7=C3=A3o?= =?UTF-8?q?=20de=20metadados=20com=20op=C3=A7=C3=B5es=20value=20=3D>=20lab?= =?UTF-8?q?el=20com=20valores=20num=C3=A9ricos=20atrav=C3=A9s=20da=20flag?= =?UTF-8?q?=20'numericKeyValueOptions'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + src/core/Definitions/Metadata.php | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 371c0a0240..2482347b2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Corrige db-update que cria as colunas eligible e score - Corrige remoção de abas do componente mc-tabs - Corrige link dos botões de acessar inscrição na lista de inscrições da página de avaliação +- Possibilita a configuração de metadados com opções value => label com valores numéricos através da flag `numericKeyValueOptions` ### Melhorias não funcionais - Refatora script start.sh e middleware ExecutionTime para fornecer um log mais limpo para o desenvolvedor diff --git a/src/core/Definitions/Metadata.php b/src/core/Definitions/Metadata.php index c1cffd6262..1b1b1b70f1 100644 --- a/src/core/Definitions/Metadata.php +++ b/src/core/Definitions/Metadata.php @@ -90,6 +90,10 @@ class Metadata extends \MapasCulturais\Definition{ public $field_type; + public array $options = []; + + public bool $numericKeyValueOptions = false; + /** * Creates a new Metadata Definition. * @@ -148,17 +152,20 @@ function __construct($key, $config) { $this->_validations = key_exists('validations', $config) && is_array($config['validations']) ? $config['validations'] : []; + $this->numericKeyValueOptions = $config['numericKeyValueOptions'] ?? false; + if (isset($config['options']) && is_array($config['options'])) { $new_array = []; foreach ($config['options'] as $k => $value) { - if (is_int($k)) { + if (is_int($k) && !$this->numericKeyValueOptions) { $k = $value; } $new_array[$k] = $value; } $config['options'] = $new_array; + $this->options = $new_array; } $this->serialize = $config['serialize'] ?? $this->getDefaultSerializer(); @@ -357,9 +364,10 @@ function getMetadata(){ 'field_type' => $this->field_type, ]; - if(key_exists('options', $this->config)){ - $result['options'] = $this->config['options']; - $result['optionsOrder'] = array_keys((array)$this->config['options']); + if($this->options){ + $result['options'] = $this->options; + $result['optionsOrder'] = array_keys($this->options); + $result['numericKeyValueOptions'] = $this->numericKeyValueOptions; } foreach($this->config as $key => $val) { From 919bc0c40a4f5c8b4a0be59f3ae4ce7325e31e35 Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 22:39:41 -0300 Subject: [PATCH 19/68] remove debug do avatar do selos --- src/modules/Components/components/entity-card/template.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/Components/components/entity-card/template.php b/src/modules/Components/components/entity-card/template.php index 352d448894..ab8562e358 100644 --- a/src/modules/Components/components/entity-card/template.php +++ b/src/modules/Components/components/entity-card/template.php @@ -122,8 +122,7 @@ - - +
From 2f0f87c2063b9bdf677d49fff12acf73fbf16c2b Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 23:04:13 -0300 Subject: [PATCH 20/68] Melhora performance do componente home-opportunities --- CHANGELOG.md | 1 + src/modules/Home/components/home-opportunities/init.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2482347b2f..e8315ca6f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Implementa contante global mcTabActive para guadar a aba que o mc-tab está selecionada - Implementa getter lastPhase() para as inscrições, possibilitando recuperar a entidade da inscrição na ultima fase - Melhorias na interface e filtro na lista de inscrições da página de avaliação +- Melhora performance do componente home-opportunities ### Correções - Corrige erro no carregamento do formulário de avaliação para o avaliador diff --git a/src/modules/Home/components/home-opportunities/init.php b/src/modules/Home/components/home-opportunities/init.php index 34a389442f..327d332107 100644 --- a/src/modules/Home/components/home-opportunities/init.php +++ b/src/modules/Home/components/home-opportunities/init.php @@ -7,7 +7,7 @@ $queryParams = [ '@order' => 'registrationFrom ASC', - '@select' => 'id,name,shortDescription,terms,seals,singleUrl,registrationFrom,registrationTo,files', + '@select' => 'id,name,shortDescription,terms,seals,singleUrl,registrationFrom,registrationTo,files.avatar', 'registrationFrom' => 'LTE('.$future_date.')', 'registrationTo' => 'GTE('.$actual_date.')', ]; From 765f76cdb49d581e222fba125d4827163da00437 Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 23:06:31 -0300 Subject: [PATCH 21/68] =?UTF-8?q?recria=20cache=20de=20resumo=20das=20fase?= =?UTF-8?q?s=20quando=20necess=C3=A1rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/cache.php | 2 +- .../EvaluationMethodConfiguration.php | 23 ++++++++---- src/core/Entities/Opportunity.php | 19 +++++++--- .../Jobs/UpdateSummaryCaches.php | 36 +++++++++++++++++++ src/modules/Opportunities/Module.php | 24 ++++++++++++- 5 files changed, 92 insertions(+), 12 deletions(-) create mode 100644 src/modules/Opportunities/Jobs/UpdateSummaryCaches.php diff --git a/config/cache.php b/config/cache.php index 2de3a9c6d8..24fa9c106a 100644 --- a/config/cache.php +++ b/config/cache.php @@ -36,7 +36,7 @@ 'app.useRegisterCache' => __env_not_false('CACHE_REGISTER'), 'app.useApiCache' => env('CACHE_API', false), 'app.useQuotasCache' => env('CACHE_QUOTAS', false), - 'app.useOpportunitySummaryCache' =>false, + 'app.useOpportunitySummaryCache' => __env_not_false('CACHE_OPPORTUNITY_SUMARY'), 'app.registeredAutoloadCache.lifetime' => env('CACHE_AUTOLOAD', YEAR_IN_SECONDS), diff --git a/src/core/Entities/EvaluationMethodConfiguration.php b/src/core/Entities/EvaluationMethodConfiguration.php index cc9a8db1a4..9fdf5c875c 100644 --- a/src/core/Entities/EvaluationMethodConfiguration.php +++ b/src/core/Entities/EvaluationMethodConfiguration.php @@ -17,6 +17,7 @@ * * @property-read \MapasCulturais\Definitions\EvaluationMethod $definition The evaluation method definition object * @property-read \MapasCulturais\EvaluationMethod $evaluationMethod The evaluation method plugin object + * @property-read string summaryCacheKey Chave do cache do resumo das avaliações * @property int $opportunity ownerId * @property-read \MapasCulturais\Entities\Opportunity owner * @property-read boolean publishedRegistration @@ -266,22 +267,32 @@ public function getPublishTimestamp() return $this->opportunity->publishTimestamp; } - /** + + /** + * Retorna uma chave única para o cache do resumo das avaliações. + * + * @return string A chave única para o cache do resumo da avaliações . + */ + public function getSummaryCacheKey(): string + { + return "evaluation-summary-{$this->id}"; + } + + /** * Retorna um resumo do número de inscrições de uma oportunidade * * @return array */ - public function getSummary() - { + public function getSummary($skip_cache = false): array { if($this->isNew()) { return []; } /** @var App $app */ $app = App::i(); - - if($app->config['app.useOpportunitySummaryCache']) { - $cache_key = __METHOD__ . ':' . $this->id; + + $cache_key = $this->summaryCacheKey; + if(!$skip_cache && $app->config['app.useOpportunitySummaryCache']) { if ($app->cache->contains($cache_key)) { return $app->cache->fetch($cache_key); } diff --git a/src/core/Entities/Opportunity.php b/src/core/Entities/Opportunity.php index 17ef4668a4..0f9441e178 100644 --- a/src/core/Entities/Opportunity.php +++ b/src/core/Entities/Opportunity.php @@ -963,13 +963,22 @@ function isUserEvaluationsSent($user = null){ return $relation->status === EvaluationMethodConfigurationAgentRelation::STATUS_SENT; } + /** + * Retorna uma chave única para o cache do resumo da fase + * + * @return string A chave única para o cache do resumo da fase. + */ + public function getSummaryCacheKey(): string + { + return "opportunity-summary-{$this->id}"; + } + /** * Retorna um resumo do número de inscrições de uma oportunidade * * @return array */ - public function getSummary() - { + public function getSummary($skip_cache = false): array { if($this->isNew()) { return []; } @@ -977,8 +986,10 @@ public function getSummary() /** @var App $app */ $app = App::i(); - if($app->config['app.useOpportunitySummaryCache']) { - $cache_key = __METHOD__ . ':' . $this->id; + $cache_key = $this->summaryCacheKey; + + if(!$skip_cache && $app->config['app.useOpportunitySummaryCache']) { + if ($app->cache->contains($cache_key)) { return $app->cache->fetch($cache_key); } diff --git a/src/modules/Opportunities/Jobs/UpdateSummaryCaches.php b/src/modules/Opportunities/Jobs/UpdateSummaryCaches.php new file mode 100644 index 0000000000..f541fb4668 --- /dev/null +++ b/src/modules/Opportunities/Jobs/UpdateSummaryCaches.php @@ -0,0 +1,36 @@ + null]; + $emc = $data['evaluationMethodConfiguration'] ?? (object) ['id' => null]; + + return "UpdateSummaryCaches:{$opportunity->id}:{$emc->id}"; + } + + protected function _execute(\MapasCulturais\Entities\Job $job){ + $app = App::i(); + + /** @var Opportunity $opportunity */ + if($opportunity = $job->opportunity){ + $opportunity->getSummary(true); + } + + /** @var EvaluationMethodConfiguration $evaluationMethodConfiguration */ + if($evaluationMethodConfiguration = $job->evaluationMethodConfiguration){ + $evaluationMethodConfiguration->getSummary(true); + } + + return true; + } +} \ No newline at end of file diff --git a/src/modules/Opportunities/Module.php b/src/modules/Opportunities/Module.php index 37d33bf090..6c36a31a6a 100644 --- a/src/modules/Opportunities/Module.php +++ b/src/modules/Opportunities/Module.php @@ -11,7 +11,6 @@ use MapasCulturais\Entities\EvaluationMethodConfiguration; use MapasCulturais\Entities\Registration; use MapasCulturais\Entities\RegistrationEvaluation; -use PHPUnit\Util\Annotation\Registry; class Module extends \MapasCulturais\Module{ @@ -32,6 +31,29 @@ function _init(){ $app->registerJobType(new Jobs\FinishEvaluationPhase(Jobs\FinishEvaluationPhase::SLUG)); $app->registerJobType(new Jobs\FinishDataCollectionPhase(Jobs\FinishDataCollectionPhase::SLUG)); $app->registerJobType(new Jobs\PublishResult(Jobs\PublishResult::SLUG)); + $app->registerJobType(new Jobs\UpdateSummaryCaches(Jobs\UpdateSummaryCaches::SLUG)); + + // atualiza o cache dos resumos das fase de avaliação + $app->hook("entity(Registration).sent:before", function() use ($app) { + /** @var Registration $this */ + $app->enqueueOrReplaceJob(Jobs\UpdateSummaryCaches::SLUG, [ + 'opportunity' => $this->opportunity, + 'evaluationMethodConfiguration' => $this->opportunity->evaluationMethodConfiguration ?: null + ], '10 seconds'); + }); + $app->hook("entity(Registration).status(<<*>>)", function() use ($app) { + $app->log->debug("Registration {$this->id} status changed to {$this->status}"); + /** @var Registration $this */ + $app->enqueueOrReplaceJob(Jobs\UpdateSummaryCaches::SLUG, [ + 'opportunity' => $this->opportunity + ], '10 seconds'); + }); + $app->hook("entity(RegistrationEvaluation).save:after", function() use ($app) { + /** @var RegistrationEvaluation $this */ + $app->enqueueOrReplaceJob(Jobs\UpdateSummaryCaches::SLUG, [ + 'evaluationMethodConfiguration' => $this->registration->opportunity->evaluationMethodConfiguration + ], '10 seconds'); + }); // Método para que devolve se existe avaliações técnicas nas fases anteriores $app->hook("Entities\\Opportunity::hasPreviousTechnicalEvaluation", function() use ($app) { From 56304d94617ead69b6bef09f6fb89279df60f50f Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 23:07:15 -0300 Subject: [PATCH 22/68] =?UTF-8?q?melhora=20legibilidade=20das=20uri=20das?= =?UTF-8?q?=20requisi=C3=A7=C3=B5es=20no=20ambiente=20de=20dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/Middlewares/ExecutionTime.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/Middlewares/ExecutionTime.php b/src/core/Middlewares/ExecutionTime.php index 0ea7b41cb5..f769948f8f 100644 --- a/src/core/Middlewares/ExecutionTime.php +++ b/src/core/Middlewares/ExecutionTime.php @@ -11,7 +11,7 @@ public function __invoke(Request $request, RequestHandler $handler) { $app = App::i(); $app->log->info('========================================================================='); - $app->log->debug($_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI']); + $app->log->debug($_SERVER['REQUEST_METHOD'] . ' ' . urldecode($_SERVER['REQUEST_URI'])); $response = $handler->handle($request); From b3a19d61118c9f7ccb07034530f1ae6e7a1258fd Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 23:08:31 -0300 Subject: [PATCH 23/68] =?UTF-8?q?vers=C3=A3o=207.4.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 +- version.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8315ca6f1..63ccafa690 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Todas as mudanças notáveis no projeto serão documentadas neste arquivo. O formato é baseado no [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/) e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [unreleased] +## [7.4.1] 2024-06-10 ### Melhorias - Implementa hook no método registerRegistrationMetadata da oportunidade, para possibilitar incremento de novos registros atrevéz de plugins e módulos - Implementa novos hook's para possibilitar manipulação da tela de listagem de fases diff --git a/version.txt b/version.txt index b616717999..815da58b7a 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -7.4.0 \ No newline at end of file +7.4.1 From 0b8ecc1d447a49c2a9aefb494e10d90756c8e1f6 Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 23:08:31 -0300 Subject: [PATCH 24/68] =?UTF-8?q?vers=C3=A3o=207.4.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 +- version.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8315ca6f1..63ccafa690 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Todas as mudanças notáveis no projeto serão documentadas neste arquivo. O formato é baseado no [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/) e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [unreleased] +## [7.4.1] 2024-06-10 ### Melhorias - Implementa hook no método registerRegistrationMetadata da oportunidade, para possibilitar incremento de novos registros atrevéz de plugins e módulos - Implementa novos hook's para possibilitar manipulação da tela de listagem de fases diff --git a/version.txt b/version.txt index b616717999..815da58b7a 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -7.4.0 \ No newline at end of file +7.4.1 From 985731f763c3031db6f99efa35e71e1f748750f7 Mon Sep 17 00:00:00 2001 From: Rafael Chaves Freitas Date: Mon, 10 Jun 2024 23:10:36 -0300 Subject: [PATCH 25/68] =?UTF-8?q?vers=C3=A3o=20development?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 815da58b7a..6563189c54 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -7.4.1 +develop From 52fad28ce9d1d5dc7cdbb0a3f6a246af812e728f Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Tue, 11 Jun 2024 01:56:08 -0300 Subject: [PATCH 26/68] =?UTF-8?q?evita=20que=20a=20single=20da=20inscri?= =?UTF-8?q?=C3=A7=C3=A3o=20se=20quebre=20quando=20nao=20existe=20data=20de?= =?UTF-8?q?=20envio=20da=20inscri=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/registration/single.php | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/modules/Opportunities/views/registration/single.php b/src/modules/Opportunities/views/registration/single.php index dcafad2cfd..6072cbe001 100644 --- a/src/modules/Opportunities/views/registration/single.php +++ b/src/modules/Opportunities/views/registration/single.php @@ -129,41 +129,41 @@ - + : - {{entity.agentsData.owner.name}} + {{entity.agentsData.owner?.name}} - + : - {{entity.agentsData.owner.shortDescription}} + {{entity.agentsData.owner?.shortDescription}} - + : - {{entity.agentsData.owner.documento || entity.agentsData.owner.cnpj}} + {{entity.agentsData.owner?.documento || entity.agentsData.owner?.cnpj}} - + : - {{entity.agentsData.owner.dataDeNascimento}} + {{entity.agentsData.owner?.dataDeNascimento}} - + : - {{entity.agentsData.owner.emailPublico}} + {{entity.agentsData.owner?.emailPublico}} - + : - {{entity.agentsData.owner.raca}} + {{entity.agentsData.owner?.raca}} - + : - {{entity.agentsData.owner.genero}} + {{entity.agentsData.owner?.genero}} - + : - {{entity.agentsData.owner.endereco}} + {{entity.agentsData.owner?.endereco}} - + : - {{entity.agentsData.owner.En_CEP}} + {{entity.agentsData.owner?.En_CEP}} From 02f28a92ff459569663204fd1918b2fa2c5acac6 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Tue, 11 Jun 2024 01:57:30 -0300 Subject: [PATCH 27/68] =?UTF-8?q?Ajusta=20getter=20lastPhase=20na=20inscri?= =?UTF-8?q?=C3=A7=C3=A3o=20para=20que=20quando=20for=20a=20ultima=20fase?= =?UTF-8?q?=20na=20inscri=C3=A7=C3=A3o=20base,=20ele=20consiga=20devolver?= =?UTF-8?q?=20a=20entidade=20de=20forma=20correta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/OpportunityPhases/Module.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/modules/OpportunityPhases/Module.php b/src/modules/OpportunityPhases/Module.php index 6bff9f8d94..1bee23b8b3 100644 --- a/src/modules/OpportunityPhases/Module.php +++ b/src/modules/OpportunityPhases/Module.php @@ -553,7 +553,8 @@ function _init () { $app->hook('entity(Registration).get(lastPhase)', function(&$value) use ($app) { /** @var Registration $this */ - $value = $app->repo('Registration')->findOneBy(['number' => $this->number, 'opportunity' => $this->opportunity->lastPhase]); + $opportunity = $this->opportunity->isLastPhase ? $this->opportunity : $this->opportunity->lastPhase; + $value = $app->repo('Registration')->findOneBy(['number' => $this->number, 'opportunity' => $opportunity]); }); /** @@ -652,6 +653,17 @@ function _init () { }); + $app->hook('entity(Registration).get(firstPhase)', function(&$value) use($registration_repository) { + /** @var Registration $this */ + + $this->enableCacheGetterResult('firstPhase'); + + $opportunity = $this->opportunity; + + $value = $registration_repository->findOneBy(['opportunity' => $opportunity->firstPhase, 'number' => $this->number]); + + }); + /** * NOVAS ROTAS */ From b07a21928981868506ff6dae5009df217c20e6f7 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Tue, 11 Jun 2024 02:11:16 -0300 Subject: [PATCH 28/68] =?UTF-8?q?Atualiza=20para=20vers=C3=A3o=20v7.4.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 +- version.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31d16f4c4c..9a65701790 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ Todas as mudanças notáveis no projeto serão documentadas neste arquivo. O formato é baseado no [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/) e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [unreleased] +## [7.4.2] 2024-06-11 ## Correções - Ajusta getter lastPhase() na inscrição para que quando for a última fase na inscrição base, ele consiga devolver a entidade de forma correta - evita que a single da inscrição se quebre quando nao existe data de envio da inscrição diff --git a/version.txt b/version.txt index 815da58b7a..f8cb1fa110 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -7.4.1 +7.4.2 From d240f98dba49db6d8b2d36f709e854a4ad9dafce Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Tue, 11 Jun 2024 21:47:02 -0300 Subject: [PATCH 29/68] =?UTF-8?q?Reordena=20ordem=20de=20execu=C3=A7=C3=A3?= =?UTF-8?q?o=20dos=20db-updates=20que=20s=C3=A3o=20respons=C3=A1veis=20por?= =?UTF-8?q?=20manipular=20o=20esuqema=20do=20banco?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db-updates.php | 39 +++++++++++++++++------ src/modules/UserManagement/db-updates.php | 18 ----------- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/db-updates.php b/src/db-updates.php index 7b9396ded6..02585f8ffe 100644 --- a/src/db-updates.php +++ b/src/db-updates.php @@ -160,6 +160,35 @@ function __try($sql, $cb = null){ $$ LANGUAGE plpgsql strict immutable;"); }, + 'create table system_role' => function () { + __exec("CREATE SEQUENCE system_role_id_seq INCREMENT BY 1 MINVALUE 1 START 1;"); + __exec("CREATE TABLE system_role ( + id INT NOT NULL, + slug VARCHAR(64) NOT NULL, + name VARCHAR(255) NOT NULL, + subsite_context BOOLEAN NOT NULL, + permissions JSON DEFAULT NULL, + create_timestamp TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, + update_timestamp TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, + status SMALLINT NOT NULL, + PRIMARY KEY(id));"); + __exec("COMMENT ON COLUMN system_role.permissions IS '(DC2Type:json_array)';"); + }, + + 'alter system_role.permissions comment' => function () { + __exec("COMMENT ON COLUMN system_role.permissions IS '(DC2Type:json)';"); + }, + + "Cria colunas proponent_type e registration na tabela registration" => function() use ($conn){ + if(!__column_exists('registration', 'proponent_type')) { + __exec("ALTER TABLE registration ADD COLUMN proponent_type VARCHAR(255) NULL"); + } + + if(!__column_exists('registration', 'range')) { + __exec("ALTER TABLE registration ADD COLUMN range VARCHAR(255) NULL"); + } + }, + 'migrate gender' => function() use ($conn) { $conn->executeQuery("UPDATE agent_meta SET value='Homem' WHERE key='genero' AND value='Masculino'"); $conn->executeQuery("UPDATE agent_meta SET value='Mulher' WHERE key='genero' AND value='Feminino'"); @@ -2080,16 +2109,6 @@ function __try($sql, $cb = null){ p1.action = p2.action;"); }, - "Cria colunas proponent_type e registration na tabela registration" => function() use ($conn){ - if(!__column_exists('registration', 'proponent_type')) { - __exec("ALTER TABLE registration ADD COLUMN proponent_type VARCHAR(255) NULL"); - } - - if(!__column_exists('registration', 'range')) { - __exec("ALTER TABLE registration ADD COLUMN range VARCHAR(255) NULL"); - } - }, - "Cria colunas registration_proponent_types e registration_ranges na tabela opportunity" => function() use ($conn){ if(!__column_exists('opportunity', 'registration_proponent_types')) { __exec("ALTER TABLE opportunity ADD COLUMN registration_proponent_types JSON NULL"); diff --git a/src/modules/UserManagement/db-updates.php b/src/modules/UserManagement/db-updates.php index 0990d2b929..07d8e1b00a 100644 --- a/src/modules/UserManagement/db-updates.php +++ b/src/modules/UserManagement/db-updates.php @@ -3,22 +3,4 @@ use function MapasCulturais\__exec; return [ - 'create table system_role' => function () { - __exec("CREATE SEQUENCE system_role_id_seq INCREMENT BY 1 MINVALUE 1 START 1;"); - __exec("CREATE TABLE system_role ( - id INT NOT NULL, - slug VARCHAR(64) NOT NULL, - name VARCHAR(255) NOT NULL, - subsite_context BOOLEAN NOT NULL, - permissions JSON DEFAULT NULL, - create_timestamp TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, - update_timestamp TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, - status SMALLINT NOT NULL, - PRIMARY KEY(id));"); - __exec("COMMENT ON COLUMN system_role.permissions IS '(DC2Type:json_array)';"); - }, - - 'alter system_role.permissions comment' => function () { - __exec("COMMENT ON COLUMN system_role.permissions IS '(DC2Type:json)';"); - }, ]; \ No newline at end of file From a6d2124922040843eab7c2ea8b106263b4e83bd6 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Tue, 11 Jun 2024 21:48:14 -0300 Subject: [PATCH 30/68] Verrifica se as colinas price, description e priceInfo ja existe na tabela event_ocurrence antes de tentar criar as mesmas --- src/db-updates.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/db-updates.php b/src/db-updates.php index 02585f8ffe..b0d0ff3db7 100644 --- a/src/db-updates.php +++ b/src/db-updates.php @@ -1951,13 +1951,19 @@ function __try($sql, $cb = null){ }, 'Adiciona a coluna description para a descrição da ocorrência' => function() { - __exec("ALTER TABLE event_occurrence ADD description TEXT DEFAULT NULL;"); + if(!__column_exists('event_occurrence', 'description')) { + __exec("ALTER TABLE event_occurrence ADD description TEXT DEFAULT NULL;"); + } }, 'Adiciona a coluna price para a o valor de entrada da ocorrência' => function() { - __exec("ALTER TABLE event_occurrence ADD price TEXT DEFAULT NULL;"); + if(!__column_exists('event_occurrence', 'price')) { + __exec("ALTER TABLE event_occurrence ADD price TEXT DEFAULT NULL;"); + } }, 'Adiciona a coluna priceInfo para a informações sobre o valor de entrada da ocorrência' => function() { - __exec("ALTER TABLE event_occurrence ADD priceInfo TEXT DEFAULT NULL;"); + if(!__column_exists('event_occurrence', 'priceInfo')) { + __exec("ALTER TABLE event_occurrence ADD priceInfo TEXT DEFAULT NULL;"); + } }, 'Apaga registro do db-update de "Definição dos cammpos cpf e cnpj com base no documento" para que rode novamente' => function() use ($conn, $app){ From c16bf0ec69906e861c4a806a805b323c252f23f1 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Tue, 11 Jun 2024 21:49:26 -0300 Subject: [PATCH 31/68] =?UTF-8?q?Ajusta=20para=20verificar=20se=20campos?= =?UTF-8?q?=20de=20configura=C3=A7=C3=A3o=20ta=20tabela=20registration=5Ff?= =?UTF-8?q?ield=5Fconfiguration=20ja=20est=C3=A3o=20convertidos=20para=20j?= =?UTF-8?q?son=20antes=20de=20tentar=20converter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db-updates.php | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/db-updates.php b/src/db-updates.php index b0d0ff3db7..dbf948eb80 100644 --- a/src/db-updates.php +++ b/src/db-updates.php @@ -2036,11 +2036,25 @@ function __try($sql, $cb = null){ "migra valores das colunas do tipo array para do tipo json" => function() use ($conn) { $fields = $conn->fetchAll("SELECT id, config, field_options, categories from registration_field_configuration"); $count = count($fields); + + $json_validate = function (string $string): bool { + json_decode($string); + return json_last_error() === JSON_ERROR_NONE; + }; + + $check_serialize = function($value) use ($json_validate) { + if((is_string($value) && $json_validate($value)) || !$value) { + return $value; + } + + return json_encode(unserialize($value)); + }; + foreach($fields as $i => $field) { echo "migrando registration_field_configuration ({$i} / $count)\n"; - $field['config'] = json_encode(unserialize($field['config'])); - $field['field_options'] = json_encode(unserialize($field['field_options'])); - $field['categories'] = json_encode(unserialize($field['categories'])); + $field['config'] = $check_serialize($field['config']); + $field['field_options'] = $check_serialize($field['field_options']); + $field['categories'] = $check_serialize($field['categories']); $conn->executeQuery(" UPDATE registration_field_configuration @@ -2055,7 +2069,7 @@ function __try($sql, $cb = null){ $count = count($files); foreach($files as $i => $file) { echo "migrando registration_file_configuration ({$i} / $count)\n"; - $file['categories'] = json_encode(unserialize($file['categories'])); + $file['categories'] = $check_serialize($file['categories']); $conn->executeQuery(" UPDATE registration_file_configuration @@ -2068,7 +2082,7 @@ function __try($sql, $cb = null){ foreach($requests as $i => $request) { echo "migrando request ({$i} / $count)\n"; $id = $request['id']; - $metadata = json_encode(unserialize($request['metadata'])); + $metadata = $check_serialize($request['metadata']); $conn->executeQuery(" UPDATE request From b57111720a59cdc3585d1182ed26057bd85791f4 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Tue, 11 Jun 2024 21:55:05 -0300 Subject: [PATCH 32/68] Atualiza CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a65701790..450843b720 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ Todas as mudanças notáveis no projeto serão documentadas neste arquivo. O formato é baseado no [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/) e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [7.4.3] +### Correções +- Reordena db-updates para evitar problemas com colunas e tabelas nao criadas +- Corrige db-update que ajusta configurações dos campos das inscrições + ## [7.4.2] 2024-06-11 ## Correções - Ajusta getter lastPhase() na inscrição para que quando for a última fase na inscrição base, ele consiga devolver a entidade de forma correta From 1e1aeda055007535462ec3c5a91717947349419b Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Tue, 11 Jun 2024 21:56:22 -0300 Subject: [PATCH 33/68] =?UTF-8?q?Atualiza=20para=20vers=C3=A3o=20v7.4.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 6563189c54..0f4a1d6e34 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -develop +7.4.3 From d7221b9e56a44604547192b14e55182cb46859f8 Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Wed, 12 Jun 2024 11:54:23 -0300 Subject: [PATCH 34/68] =?UTF-8?q?Ajusta=20para=20que=20seja=20poss=C3=ADve?= =?UTF-8?q?l=20um=20convidado=20ver=20a=20lista=20das=20inscri=C3=A7=C3=B5?= =?UTF-8?q?es=20publicadas=20na=20fase=20de=20publica=C3=A7=C3=A3o=20de=20?= =?UTF-8?q?resultado=20final?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 6 +++++- src/core/ApiQuery.php | 4 +++- src/core/Controllers/Opportunity.php | 11 +++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 450843b720..b111fbee64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,11 @@ Todas as mudanças notáveis no projeto serão documentadas neste arquivo. O formato é baseado no [Keep a Changelog](https://keepachangelog.com/pt-BR/1.0.0/) e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [7.4.3] +## [7.4.4] 2024-06-12 +### Correções +- Corrige lista de inscrições da publicação de resultado final + +## [7.4.3] 2024-06-11 ### Correções - Reordena db-updates para evitar problemas com colunas e tabelas nao criadas - Corrige db-update que ajusta configurações dos campos das inscrições diff --git a/src/core/ApiQuery.php b/src/core/ApiQuery.php index 2a1c6c73ca..e74ab31094 100644 --- a/src/core/ApiQuery.php +++ b/src/core/ApiQuery.php @@ -286,7 +286,7 @@ class ApiQuery { * List of parameters that will be used to run the DQL * @var array */ - protected $_dqlParams = []; + public $_dqlParams = []; /** * Fields that are being selected @@ -3065,6 +3065,8 @@ protected function parseQueryParams() { if($class::isPrivateEntity() && !isset($this->apiParams['@permissions'])){ $this->_addFilterByPermissions('view'); } + + $app->applyHookBoundTo($this, "{$this->hookPrefix}.parseQueryParams"); } protected function _addFilterBySeals($seals_ids){ diff --git a/src/core/Controllers/Opportunity.php b/src/core/Controllers/Opportunity.php index b31fd1c76d..bdb116fc20 100644 --- a/src/core/Controllers/Opportunity.php +++ b/src/core/Controllers/Opportunity.php @@ -492,6 +492,17 @@ function apiFindRegistrations($opportunity, $query_data) { $current_phase_query_params['@select'] = implode(',', $current_phase_query_select); + if($phase->isLastPhase && $phase->publishedRegistrations) { + $app->hook('ApiQuery(Registration).parseQueryParams', function() use ($current_phase_query_params) { + if($this->apiParams['opportunity'] == $current_phase_query_params['opportunity']) { + $this->joins = ""; + $params = $this->_dqlParams; + array_pop($params); + $this->_dqlParams = $params; + } + }); + } + $current_phase_query = new ApiQuery(Registration::class, $current_phase_query_params); if(isset($previous_phase_query) && !$phase->isLastPhase) { $current_phase_query->addFilterByApiQuery($previous_phase_query, 'number', 'number'); From f23d9f33b72c85e86b3d1005c784357b1f6d67be Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Wed, 12 Jun 2024 11:56:20 -0300 Subject: [PATCH 35/68] =?UTF-8?q?vers=C3=A3o=207.4.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 0f4a1d6e34..4e61aeef90 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -7.4.3 +7.4.4 From 329b9bfb28e04cb93ca34138cc8bdca7a068b0fc Mon Sep 17 00:00:00 2001 From: erleibiazzio Date: Wed, 12 Jun 2024 12:17:28 -0300 Subject: [PATCH 36/68] =?UTF-8?q?Evita=20que=20os=20bot=C3=B5es=20de=20bai?= =?UTF-8?q?xar=20rascunhos=20e=20baixar=20lista=20de=20avalia=C3=A7=C3=B5e?= =?UTF-8?q?s=20sejam=20exibidos=20com=20usuario=20deslogado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../components/opportunity-registrations-table/script.js | 8 +++----- .../opportunity-registrations-table/template.php | 4 ++-- .../components/opportunity-results-table/template.php | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b111fbee64..79d71c1221 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ e este projeto adere ao [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [7.4.4] 2024-06-12 ### Correções - Corrige lista de inscrições da publicação de resultado final +- Corrige exibição dos botões de baixar rascunhos e baixar lista de inscrições ## [7.4.3] 2024-06-11 ### Correções diff --git a/src/modules/Opportunities/components/opportunity-registrations-table/script.js b/src/modules/Opportunities/components/opportunity-registrations-table/script.js index 17368365c2..e47cb561c9 100644 --- a/src/modules/Opportunities/components/opportunity-registrations-table/script.js +++ b/src/modules/Opportunities/components/opportunity-registrations-table/script.js @@ -12,11 +12,8 @@ app.component('opportunity-registrations-table', { avaliableColumns: Array, hideFilters: Boolean, hideSort: Boolean, + hideActions: Boolean, statusNotEditable: Boolean, - order: { - type: String, - default: "", - } }, setup() { // os textos estão localizados no arquivo texts.php deste componente @@ -113,7 +110,7 @@ app.component('opportunity-registrations-table', { sortOptions.splice(0, 0, {value: '@quota', label: 'classificação final'}); } } - + return { sortOptions, filters: {}, @@ -121,6 +118,7 @@ app.component('opportunity-registrations-table', { query: { '@opportunity': this.phase.id, 'status': 'GTE(0)', + '@permission': 'view' }, selectedCategories: [], selectedProponentTypes: [], diff --git a/src/modules/Opportunities/components/opportunity-registrations-table/template.php b/src/modules/Opportunities/components/opportunity-registrations-table/template.php index ff67e94c5b..80628e4c91 100644 --- a/src/modules/Opportunities/components/opportunity-registrations-table/template.php +++ b/src/modules/Opportunities/components/opportunity-registrations-table/template.php @@ -39,7 +39,7 @@ applyTemplateHook('registration-list-actions', 'after', ['entity' => $entity]); ?>
- + applyTemplateHook('registration-list-actions-entity-table', 'before', ['entity' => $entity]); ?> -