Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release v1.1.1 #19

Merged
merged 23 commits into from
May 27, 2024
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a48792e
Merge pull request #11 from secultce/feat/config-options-for-publishi…
Junior-Shyko Mar 7, 2024
884ae4f
Merge pull request #12 from secultce/main
Junior-Shyko Mar 7, 2024
0f33b2b
fix: Removed anchor to valuer profile when user is registration owner
ronnyjohnti Mar 13, 2024
171a64e
Merge pull request #13 from secultce/fix/remove-anchor-to-valuer-profile
ronnyjohnti Mar 13, 2024
acfe1a8
feat: Added notificateUsers method and implemented in manual publishing
ronnyjohnti Mar 14, 2024
2e20316
feat: Added notification when opinions autopublishing
ronnyjohnti Mar 18, 2024
c98833d
config: Added .gitignore to project
ronnyjohnti Mar 21, 2024
8f8b71d
refactor: Improved output messages to debug
ronnyjohnti Mar 21, 2024
5280986
feat: Overrided function improving UI and adding a loader
ronnyjohnti Mar 21, 2024
b7d99d2
fix: Removed anchor to valuer profile when user is registration owner
ronnyjohnti Mar 13, 2024
02229c5
Merge branch 'develop' into feat/notifcate-user-after-publish
ronnyjohnti Mar 21, 2024
bc1606d
docs: Updated CHANGELOG
ronnyjohnti Mar 21, 2024
7625e02
fix: Fixed the verification for opinions publishing
ronnyjohnti Mar 21, 2024
617a9e3
docs: Updated CHANGELOG
ronnyjohnti Mar 21, 2024
d146afe
Merge pull request #16 from secultce/feat/notifcate-user-after-publish
Junior-Shyko Mar 21, 2024
b5ed516
Merge pull request #17 from secultce/fix/validate-metadata-setted-as-…
Junior-Shyko Mar 21, 2024
7abeaa7
feat: Added publishing technical opinion
ronnyjohnti Apr 29, 2024
073c339
docs: Updated CHANGELOG
ronnyjohnti Apr 29, 2024
b459b6d
Merge pull request #18 from secultce/feature/technical-opinions
Junior-Shyko Apr 30, 2024
8eebee3
docs: Modificado título da release v1.1.1
ronnyjohnti May 27, 2024
0f02d2c
fix: Corrigido trecho de código comentado
ronnyjohnti May 27, 2024
265a6c7
fix: Consertando hook do Plugin
ronnyjohnti May 27, 2024
bb8d7c7
refactor: Removendo estilos desnecessários
ronnyjohnti May 27, 2024
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/vendor/
/.idea/
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,20 @@ Todas as mudanças relevantes serão documentadas nesse arquivo.

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).

## [1.1.1] - 2024-05-27
### Adicionado
- Adicionada notificação no painel de controle do proponente quando o parecer é publicado.
- Adicionada publicação de parecer em avaliações técnicas.
### Correções
- Retirado link fantasma para o perfil do parecerista na visão do proponente;
- Corrigido botão "Visualizar Pareceres" para aparecer ao proponente, somente quando pareceres estiverem publicados.

## [1.1.0] - 2024-03-13
### Adicionado
- Agora o administrador pode selecionar se quer fazer publicação dos pareceres de forma automática ou manual;
- Adicionando botão para administrador publicar os pareceres (somente quando estiver configurado como publicação manual).

## [1.0.0] - 2024-02-27
### Adicionado
- O administrador da oportunidade consegue ver a lista de pareceres na aba de inscrições da oportunidade.
- O administrador da oportunidade consegue ver a lista de pareceres na aba de inscrições da oportunidade;
- O proponente consegue visualizar o parecer documental desde que a oportunidade esteja com o resultado publicado.
46 changes: 43 additions & 3 deletions Controllers/OpinionManagement.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

namespace OpinionManagement\Controllers;

use Doctrine\Common\Collections\Criteria;
use MapasCulturais\Controller,
MapasCulturais\App;
use MapasCulturais\Entities\Notification;
use OpinionManagement\Helpers\EvaluationList;

class OpinionManagement extends Controller
Expand Down Expand Up @@ -37,11 +39,14 @@ public function GET_opinions(): void
$registration = $app->repo('Registration')->find($this->getData['id']);
if($registration->canUser('view')) {
$opinions = new EvaluationList($registration);
$this->json($opinions);
$this->json([
'evaluationMethod' => (string) $registration->opportunity->evaluationMethodConfiguration->type,
'opinions' => $opinions,
]);
return;
}

$this->errorJson(['permission-denied'], 403);
$this->json(['permission-denied'], 403);
}

public function POST_publishOpinions(): void
Expand All @@ -58,13 +63,48 @@ public function POST_publishOpinions(): void
}


$opportunity->setMetadata('publishedOpinions', 'true');
$opportunity->setMetadata('publishedOpinions', true);
$error = $opportunity->save(true);
if($error) {
$this->errorJson(['error' => new \PDOException('Cannot save this data')], 500);
return;
}

$this->notificateUsers($opportunity->id);

$this->json(['success' => true]);
}

public static function notificateUsers(int $opportunityId, bool $verifyPublishingOpinions = true): bool
{
$app = App::i();
$opportunity = $app->repo('Opportunity')->find($opportunityId);
if($verifyPublishingOpinions && $opportunity->publishedOpinions === false) {
return false;
}

set_time_limit(500);

$criteria = new Criteria();
$criteria->where($criteria->expr()->eq('opportunity', $opportunity));
$criteria->andWhere($criteria->expr()->gt('status', '0'));

$registrations = $app->repo('Registration')->matching($criteria);
$count = count($registrations);
foreach ($registrations as $i => $registration) {
$notification = new Notification();
$notification->user = $registration->owner->user;
$notification->message =
sprintf(
"Sua inscrição <a style='font-weight:bold;' href='/inscricao/{$registration->id}'>%s</a>" .
" da oportunidade <a style='font-weight:bold;' href='/oportunidade/{$opportunity->id}'/>%s</a>está com os pareceres publicados.",
$registration->number,
$opportunity->name
);
$notification->save(true);
$app->log->debug("Notificação ".($i+1)."/$count enviada para o usuário {$registration->owner->user->id} ({$registration->owner->name})");
}

return true;
}
}
106 changes: 46 additions & 60 deletions Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use MapasCulturais\App,
OpinionManagement\Controllers\OpinionManagement;
use MapasCulturais\Entities\Opportunity as OpportunityEntity;
use MapasCulturais\Entities\Registration;

/**
* @method part(string $string, array $args = [])
Expand Down Expand Up @@ -38,27 +40,20 @@ public function _init(): void
);
});

$app->hook('template(opportunity.edit.registration-config):after', function () use ($app) {
$plugin = $this;

$app->hook('template(opportunity.edit.registration-config):after', function () use ($app, $plugin) {
$opportunity = $this->controller->requestedEntity;
/**
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
*/
if($opportunity->evaluationMethodConfiguration->type != 'documentary') {
return;

if($plugin::isEvaluationMethodValid($opportunity)) {
$this->part('OpinionManagement/selection-autopublish', ['opportunity' => $opportunity]);
}
$this->part('OpinionManagement/selection-autopublish', ['opportunity' => $opportunity]);
});

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

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

$app->hook('template(opportunity.single.user-registration-table--registration--status):end', function ($registration, $opportunity) use ($app) {
/**
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
*/
if($opportunity->publishedOpinions != 'true') {
return;
}

if($registration->canUser('@control')) {
if($opportunity->publishedOpinions === true && $registration->canUser('@control')) {
$this->part('OpinionManagement/user-btn-show-opinion.php', ['registration' => $registration]);
}
});

$app->hook('template(opportunity.single.opportunity-registrations--tables):begin', function () use ($app) {
$app->hook('template(opportunity.single.opportunity-registrations--tables):begin', function () use ($app, $plugin) {
$opportunity = $this->controller->requestedEntity;
/**
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
*/
if($opportunity->evaluationMethodConfiguration->type != 'documentary'
|| $opportunity->autopublishOpinions !== 'Não'
|| $opportunity->publishedOpinions == 'true'
if($plugin::isEvaluationMethodValid($opportunity)
&& $opportunity->autopublishOpinions !== 'Sim'
&& !$opportunity->publishedOpinions
) {
return;
$this->part('OpinionManagement/admin-btn-publish-opinions.php', ['opportunity' => $opportunity]);
}

$this->part('OpinionManagement/admin-btn-publish-opinions.php', ['opportunity' => $opportunity]);
});

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

/**
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
*/
if($opportunity->evaluationMethodConfiguration->type != 'documentary' || (!$opportunity->publishedRegistrations && !$opportunity->canUser('@control'))) {
return;
}

if($registration->canUser('@control')) {
if($plugin::isEvaluationMethodValid($opportunity)
&& $opportunity->publishedOpinions
&& $opportunity->canUser('@control')
) {
$this->part('OpinionManagement/user-btn-show-opinion.php');
}
});

$app->hook('template(panel.<<registrations|index>>.panel-registration):end', function ($registration) use ($app) {
/**
* @todo: Refatorar quando for mudar para publicar pareceres técnicos
*/
if(!$registration->opportunity->publishedRegistrations
|| $registration->opportunity->evaluationMethodConfiguration->type != 'documentary'
) return;
$this->part('OpinionManagement/user-btn-show-opinion.php', ['registration' => $registration]);
$app->view->enqueueScript(
'app',
'opinion-management',
'OpinionManagement/js/opinionManagement.js'
);
$app->hook('template(panel.<<registrations|index>>.panel-registration):end', function (Registration $registration) use ($app,$plugin) {
if($registration->opportunity->publishedOpinions
&& $plugin::isEvaluationMethodValid($registration->opportunity)
) {
$this->part('OpinionManagement/user-btn-show-opinion.php', ['registration' => $registration]);
$app->view->enqueueScript(
'app',
'opinion-management',
'OpinionManagement/js/opinionManagement.js'
);
}
});

$app->hook('entity(Opportunity).publishRegistrations:before', function () {
if($this->autopublishOpinions == 'Sim')
$this->setMetadata('publishedOpinions', 'true');
if($this->autopublishOpinions === 'Sim') {
$this->setMetadata('publishedOpinions', true);
OpinionManagement::notificateUsers($this->id);
}
});

}

/**
Expand All @@ -155,11 +135,17 @@ public function register(): void
'required' => true,
]);
$this->registerOpportunityMetadata('publishedOpinions', [
'type' => 'select',
'type' => 'boolean',
'label' => \MapasCulturais\i::__('Pareceres publicados'),
'default_value' => 'false',
'options' => ['true', 'false'],
'default_value' => false,
'options' => [true, false],
'required' => true,
]);
}

public static function isEvaluationMethodValid(OpportunityEntity $opportunity): bool
{
return $opportunity->evaluationMethodConfiguration->type == 'documentary'
|| $opportunity->evaluationMethodConfiguration->type == 'technical';
}
}
Loading