Skip to content

Commit be01841

Browse files
authored
Merge pull request #19 from secultce/develop
Release v1.1.1
2 parents 3916a23 + bb8d7c7 commit be01841

File tree

6 files changed

+193
-96
lines changed

6 files changed

+193
-96
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/vendor/
2+
/.idea/

CHANGELOG.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@ Todas as mudanças relevantes serão documentadas nesse arquivo.
33

44
O formato é baseado no [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0), e esse projeto adere ao [Semantic Versionning](https://semver.org/spec/v2.0.0.html).
55

6+
## [1.1.1] - 2024-05-27
7+
### Adicionado
8+
- Adicionada notificação no painel de controle do proponente quando o parecer é publicado.
9+
- Adicionada publicação de parecer em avaliações técnicas.
10+
### Correções
11+
- Retirado link fantasma para o perfil do parecerista na visão do proponente;
12+
- Corrigido botão "Visualizar Pareceres" para aparecer ao proponente, somente quando pareceres estiverem publicados.
13+
614
## [1.1.0] - 2024-03-13
715
### Adicionado
816
- Agora o administrador pode selecionar se quer fazer publicação dos pareceres de forma automática ou manual;
917
- Adicionando botão para administrador publicar os pareceres (somente quando estiver configurado como publicação manual).
1018

1119
## [1.0.0] - 2024-02-27
1220
### Adicionado
13-
- O administrador da oportunidade consegue ver a lista de pareceres na aba de inscrições da oportunidade.
21+
- O administrador da oportunidade consegue ver a lista de pareceres na aba de inscrições da oportunidade;
1422
- O proponente consegue visualizar o parecer documental desde que a oportunidade esteja com o resultado publicado.

Controllers/OpinionManagement.php

+43-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
namespace OpinionManagement\Controllers;
44

5+
use Doctrine\Common\Collections\Criteria;
56
use MapasCulturais\Controller,
67
MapasCulturais\App;
8+
use MapasCulturais\Entities\Notification;
79
use OpinionManagement\Helpers\EvaluationList;
810

911
class OpinionManagement extends Controller
@@ -37,11 +39,14 @@ public function GET_opinions(): void
3739
$registration = $app->repo('Registration')->find($this->getData['id']);
3840
if($registration->canUser('view')) {
3941
$opinions = new EvaluationList($registration);
40-
$this->json($opinions);
42+
$this->json([
43+
'evaluationMethod' => (string) $registration->opportunity->evaluationMethodConfiguration->type,
44+
'opinions' => $opinions,
45+
]);
4146
return;
4247
}
4348

44-
$this->errorJson(['permission-denied'], 403);
49+
$this->json(['permission-denied'], 403);
4550
}
4651

4752
public function POST_publishOpinions(): void
@@ -58,13 +63,48 @@ public function POST_publishOpinions(): void
5863
}
5964

6065

61-
$opportunity->setMetadata('publishedOpinions', 'true');
66+
$opportunity->setMetadata('publishedOpinions', true);
6267
$error = $opportunity->save(true);
6368
if($error) {
6469
$this->errorJson(['error' => new \PDOException('Cannot save this data')], 500);
6570
return;
6671
}
6772

73+
$this->notificateUsers($opportunity->id);
74+
6875
$this->json(['success' => true]);
6976
}
77+
78+
public static function notificateUsers(int $opportunityId, bool $verifyPublishingOpinions = true): bool
79+
{
80+
$app = App::i();
81+
$opportunity = $app->repo('Opportunity')->find($opportunityId);
82+
if($verifyPublishingOpinions && $opportunity->publishedOpinions === false) {
83+
return false;
84+
}
85+
86+
set_time_limit(500);
87+
88+
$criteria = new Criteria();
89+
$criteria->where($criteria->expr()->eq('opportunity', $opportunity));
90+
$criteria->andWhere($criteria->expr()->gt('status', '0'));
91+
92+
$registrations = $app->repo('Registration')->matching($criteria);
93+
$count = count($registrations);
94+
foreach ($registrations as $i => $registration) {
95+
$notification = new Notification();
96+
$notification->user = $registration->owner->user;
97+
$notification->message =
98+
sprintf(
99+
"Sua inscrição <a style='font-weight:bold;' href='/inscricao/{$registration->id}'>%s</a>" .
100+
" da oportunidade <a style='font-weight:bold;' href='/oportunidade/{$opportunity->id}'/>%s</a>está com os pareceres publicados.",
101+
$registration->number,
102+
$opportunity->name
103+
);
104+
$notification->save(true);
105+
$app->log->debug("Notificação ".($i+1)."/$count enviada para o usuário {$registration->owner->user->id} ({$registration->owner->name})");
106+
}
107+
108+
return true;
109+
}
70110
}

Plugin.php

+46-60
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
use MapasCulturais\App,
66
OpinionManagement\Controllers\OpinionManagement;
7+
use MapasCulturais\Entities\Opportunity as OpportunityEntity;
8+
use MapasCulturais\Entities\Registration;
79

810
/**
911
* @method part(string $string, array $args = [])
@@ -38,27 +40,20 @@ public function _init(): void
3840
);
3941
});
4042

41-
$app->hook('template(opportunity.edit.registration-config):after', function () use ($app) {
43+
$plugin = $this;
44+
45+
$app->hook('template(opportunity.edit.evaluations-config):begin', function () use ($app, $plugin) {
4246
$opportunity = $this->controller->requestedEntity;
43-
/**
44-
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
45-
*/
46-
if($opportunity->evaluationMethodConfiguration->type != 'documentary') {
47-
return;
47+
48+
if($plugin::isEvaluationMethodValid($opportunity)) {
49+
$this->part('OpinionManagement/selection-autopublish', ['opportunity' => $opportunity]);
4850
}
49-
$this->part('OpinionManagement/selection-autopublish', ['opportunity' => $opportunity]);
5051
});
5152

52-
$app->hook('template(opportunity.single.registration-list-header):end', function() use($app) {
53+
$app->hook('template(opportunity.single.registration-list-header):end', function() use($app, $plugin) {
5354
$opportunity = $this->controller->requestedEntity;
54-
/**
55-
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
56-
*/
57-
if($opportunity->evaluationMethodConfiguration->type != 'documentary') {
58-
return;
59-
}
6055

61-
if($opportunity->canUser('@control')) {
56+
if($plugin::isEvaluationMethodValid($opportunity) && $opportunity->canUser('@control')) {
6257
$this->part('OpinionManagement/admin-registrations-table-column.php');
6358
$app->view->enqueueScript(
6459
'app',
@@ -73,68 +68,53 @@ public function _init(): void
7368
});
7469

7570
$app->hook('template(opportunity.single.user-registration-table--registration--status):end', function ($registration, $opportunity) use ($app) {
76-
/**
77-
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
78-
*/
79-
if($opportunity->publishedOpinions != 'true') {
80-
return;
81-
}
82-
83-
if($registration->canUser('@control')) {
71+
if($opportunity->publishedOpinions === true && $registration->canUser('@control')) {
8472
$this->part('OpinionManagement/user-btn-show-opinion.php', ['registration' => $registration]);
8573
}
8674
});
8775

88-
$app->hook('template(opportunity.single.opportunity-registrations--tables):begin', function () use ($app) {
76+
$app->hook('template(opportunity.single.opportunity-registrations--tables):begin', function () use ($app, $plugin) {
8977
$opportunity = $this->controller->requestedEntity;
90-
/**
91-
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
92-
*/
93-
if($opportunity->evaluationMethodConfiguration->type != 'documentary'
94-
|| $opportunity->autopublishOpinions !== 'Não'
95-
|| $opportunity->publishedOpinions == 'true'
78+
if($plugin::isEvaluationMethodValid($opportunity)
79+
&& $opportunity->autopublishOpinions !== 'Sim'
80+
&& !$opportunity->publishedOpinions
9681
) {
97-
return;
82+
$this->part('OpinionManagement/admin-btn-publish-opinions.php', ['opportunity' => $opportunity]);
9883
}
99-
100-
$this->part('OpinionManagement/admin-btn-publish-opinions.php', ['opportunity' => $opportunity]);
10184
});
10285

103-
$app->hook('template(registration.view.header-fieldset):after', function() use($app) {
86+
$app->hook('template(registration.view.header-fieldset):after', function() use($app, $plugin) {
10487
$registration = $this->controller->requestedEntity;
10588
$opportunity = $registration->opportunity;
10689

107-
/**
108-
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
109-
*/
110-
if($opportunity->evaluationMethodConfiguration->type != 'documentary' || (!$opportunity->publishedRegistrations && !$opportunity->canUser('@control'))) {
111-
return;
112-
}
113-
114-
if($registration->canUser('@control')) {
90+
if($plugin::isEvaluationMethodValid($opportunity)
91+
&& $opportunity->publishedOpinions
92+
&& $opportunity->canUser('@control')
93+
) {
11594
$this->part('OpinionManagement/user-btn-show-opinion.php');
11695
}
11796
});
11897

119-
$app->hook('template(panel.<<registrations|index>>.panel-registration):end', function ($registration) use ($app) {
120-
/**
121-
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
122-
*/
123-
if(!$registration->opportunity->publishedRegistrations
124-
|| $registration->opportunity->evaluationMethodConfiguration->type != 'documentary'
125-
) return;
126-
$this->part('OpinionManagement/user-btn-show-opinion.php', ['registration' => $registration]);
127-
$app->view->enqueueScript(
128-
'app',
129-
'opinion-management',
130-
'OpinionManagement/js/opinionManagement.js'
131-
);
98+
$app->hook('template(panel.<<registrations|index>>.panel-registration):end', function (Registration $registration) use ($app,$plugin) {
99+
if($registration->opportunity->publishedOpinions
100+
&& $plugin::isEvaluationMethodValid($registration->opportunity)
101+
) {
102+
$this->part('OpinionManagement/user-btn-show-opinion.php', ['registration' => $registration]);
103+
$app->view->enqueueScript(
104+
'app',
105+
'opinion-management',
106+
'OpinionManagement/js/opinionManagement.js'
107+
);
108+
}
132109
});
133110

134111
$app->hook('entity(Opportunity).publishRegistrations:before', function () {
135-
if($this->autopublishOpinions == 'Sim')
136-
$this->setMetadata('publishedOpinions', 'true');
112+
if($this->autopublishOpinions === 'Sim') {
113+
$this->setMetadata('publishedOpinions', true);
114+
OpinionManagement::notificateUsers($this->id);
115+
}
137116
});
117+
138118
}
139119

140120
/**
@@ -155,11 +135,17 @@ public function register(): void
155135
'required' => true,
156136
]);
157137
$this->registerOpportunityMetadata('publishedOpinions', [
158-
'type' => 'select',
138+
'type' => 'boolean',
159139
'label' => \MapasCulturais\i::__('Pareceres publicados'),
160-
'default_value' => 'false',
161-
'options' => ['true', 'false'],
140+
'default_value' => false,
141+
'options' => [true, false],
162142
'required' => true,
163143
]);
164144
}
145+
146+
public static function isEvaluationMethodValid(OpportunityEntity $opportunity): bool
147+
{
148+
return $opportunity->evaluationMethodConfiguration->type == 'documentary'
149+
|| $opportunity->evaluationMethodConfiguration->type == 'technical';
150+
}
165151
}

0 commit comments

Comments
 (0)