Skip to content

Commit 18b8e8c

Browse files
authored
Merge pull request #931 from culturagovbr/develop-minc
atualiza develop minc
2 parents 2f6717f + 1e367b5 commit 18b8e8c

62 files changed

Lines changed: 1031 additions & 545 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

config/logs.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,20 @@
5656
'app.log.assets' => env('LOG_ASSETS', false),
5757
'app.log.auth' => env('LOG_AUTH', false),
5858

59+
'app.log.evaluations' => env('LOG_EVALUATIONS', false),
60+
'app.log.summary' => env('LOG_SUMMARY', false),
61+
62+
'app.log.lockfile' => env('LOG_LOCKFILE', false),
63+
5964
'app.log.components' => env('LOG_COMPONENTS', false),
6065
'app.log.assetManager' => env('LOG_ASSETMANAGER', false),
6166

6267
'app.log.jobs' => env('LOG_JOBS', false),
6368
'app.log.pcache' => env('LOG_PCACHE', false),
6469
'app.log.pcache.users' => env('LOG_PCACHE_USERS', false),
6570

66-
'app.queryLogger' => env('LOG_QUERYLOG_CLASS', null)
71+
'app.queryLogger' => env('LOG_QUERYLOG_CLASS', null),
72+
73+
6774

6875
];

src/core/ApiQuery.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,7 @@ protected function generateWhere() {
10701070
$where = $where_dqls;
10711071
}
10721072

1073-
if($this->usesStatus && (!isset($this->apiParams['status']) || !$this->_permission)){
1073+
if($app->isAccessControlEnabled() && $this->usesStatus && (!isset($this->apiParams['status']) || !$this->_permission)){
10741074
$params = $this->apiParams;
10751075

10761076
if($this->rootEntityClassName === Opportunity::class && (isset($params['id']) || isset($params['status']) || isset($params['parent']))) {
@@ -1319,7 +1319,7 @@ protected function processEntities(array &$entities) {
13191319
$entity['originSiteUrl'] = $main_site_url;
13201320
}
13211321
if($this->_selectingType && isset($entity['_type'])){
1322-
$entity['type'] = $types[$entity['_type']];
1322+
$entity['type'] = $types[$entity['_type']] ?? null;
13231323
unset($entity['_type']);
13241324
}
13251325

@@ -3156,6 +3156,11 @@ protected function _setPermissionsUser($value) {
31563156

31573157
protected function _addFilterByPermissions($value) {
31583158
$app = App::i();
3159+
3160+
if(!$app->isAccessControlEnabled()) {
3161+
return;
3162+
}
3163+
31593164
$user = $this->_permissionsUser ?
31603165
$app->repo('User')->find($this->_permissionsUser) :
31613166
$app->user;

src/core/App.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1799,8 +1799,20 @@ public function enqueueJob(string $type_slug, array $data, string $start_string
17991799
$conn->delete('job', ['id' => $id]);
18001800
}
18011801

1802+
/** @var Entities\Job $job */
18021803
if ($job = $this->repo('Job')->find($id)) {
1803-
return $job;
1804+
$job_create_timestamp = $job->createTimestamp;
1805+
1806+
// o job tem mais que 5 minutos?
1807+
$is_old = $job_create_timestamp->getTimestamp() < (time() - 5 * MINUTE_IN_SECONDS);
1808+
1809+
// remove o job se ele estiver com status de processamento e for mais velho que 5 minutos
1810+
if($job->status == Job::STATUS_PROCESSING && $iterations == 1 && $is_old) {
1811+
$conn = $this->em->getConnection();
1812+
$conn->delete('job', ['id' => $id]);
1813+
} else {
1814+
return $job;
1815+
}
18041816
}
18051817

18061818
$job = new Job($type);

src/core/Controllers/EvaluationMethodConfiguration.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use MapasCulturais\Controller;
77
use MapasCulturais\Entities\EvaluationMethodConfiguration as EvaluationMethodConfigurationEntity;
88
use MapasCulturais\Traits;
9+
use Opportunities\Jobs\RedistributeCommitteeRegistrations;
910

1011
// use MapasCulturais\Entities\EvaluationMethodConfiguration;
1112

@@ -187,4 +188,21 @@ protected function _setPermissionCacheUsers(){
187188

188189
$entity->__skipQueuingPCacheRecreation = true;
189190
}
191+
192+
function POST_registributeEvaluations() {
193+
$app = App::i();
194+
195+
$this->requireAuthentication();
196+
197+
$emc = $this->requestedEntity;
198+
199+
if(!$emc) {
200+
$app->pass();
201+
}
202+
$emc->checkPermission('manageEvaluationCommittee');
203+
204+
$app->enqueueOrReplaceJob(RedistributeCommitteeRegistrations::SLUG, ['evaluationMethodConfiguration' => $emc], 'now');
205+
206+
$this->json(true);
207+
}
190208
}

src/core/Controllers/Opportunity.php

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,8 @@ function apiFindRegistrations($opportunity, $query_data) {
518518
}
519519
}
520520

521-
521+
$opportunity->registerRegistrationMetadata();
522+
522523
return (object) ['count' => $current_phase_query->count(), 'registrations' => $current_phase_result,];
523524
}
524525

@@ -942,8 +943,8 @@ function apiFindEvaluations(int $opportunity_id = null, array $query_data = [])
942943
$rdata = [
943944
'@select' => 'id',
944945
'opportunity' => "EQ({$opportunity->id})",
945-
'@permissions' => 'viewUserEvaluation',
946-
'@order' => 'id ASC'
946+
'@order' => 'id ASC',
947+
'status' => API::GT(0)
947948
];
948949

949950
foreach($query_data as $k => $v){
@@ -960,9 +961,10 @@ function apiFindEvaluations(int $opportunity_id = null, array $query_data = [])
960961
}
961962
}
962963

964+
$app->disableAccessControl();
963965
$registrations_query = new ApiQuery('MapasCulturais\Entities\Registration', $rdata);
964-
965966
$registration_ids = implode(",", $registrations_query->findIds() ?: [-1]);
967+
$app->enableAccessControl();
966968

967969
$query = "
968970
SELECT
@@ -1035,13 +1037,16 @@ function apiFindEvaluations(int $opportunity_id = null, array $query_data = [])
10351037

10361038
$evaluations = $conn->fetchAll($query, $params);
10371039

1040+
$app->disableAccessControl();
10381041

10391042
$registration_numbers = array_filter(array_unique(array_map(function($r) { return $r['registration_number']; }, $evaluations)));
10401043
$evaluations_ids = array_filter(array_unique(array_map(function($r) { return $r['evaluation_id']; }, $evaluations)));
10411044

10421045
$_registrations = $this->_getOpportunityRegistrations($opportunity, $registration_numbers, $query_data);
10431046
$_evaluations = $this->_getOpportunityEvaluations($opportunity, $evaluations_ids);
10441047

1048+
$app->disableAccessControl();
1049+
10451050
$_result = [];
10461051

10471052
foreach($evaluations as $eval) {
@@ -1473,5 +1478,29 @@ public function ALL_fixNextPhaseRegistrationIds():void
14731478
$opportunity->fixNextPhaseRegistrationIds();
14741479

14751480
}
1481+
1482+
public function API_findEvaluable(): void {
1483+
$this->requireAuthentication();
1484+
1485+
$app = App::i();
1486+
1487+
$user_id = $this->data['@user'] ?? $app->user->id;
1488+
$user = $app->repo('User')->find($user_id);
1489+
1490+
$user->profile->checkPermission('@control');
1491+
1492+
$opportunity_ids = $app->repo('Opportunity')->findValuerOpportunities($user->id, only_ids: true);
1493+
1494+
$query_params = $this->data;
1495+
$query_params['id'] = API::IN($opportunity_ids);
1496+
1497+
unset($query_params['@user']);
1498+
1499+
$query = new ApiQuery(EntitiesOpportunity::class, $query_params);
1500+
$result = $query->find();
1501+
1502+
$this->apiAddHeaderMetadata($query_params, $result, $query->count());
1503+
$this->apiResponse($result);
1504+
}
14761505

14771506
}

src/core/Entities/EvaluationMethodConfiguration.php

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,11 @@ public function getSummary($skip_cache = false): array {
325325
return $app->mscache->fetch($cache_key);
326326
}
327327
}
328+
329+
if ($app->config['app.log.summary']) {
330+
$app->log->debug("SUMMARY: Atualizando o resumo de avaliações da fase {$this->name} ($this->id)");
331+
}
332+
328333
$em = $this->evaluationMethod;
329334
$conn = $app->em->getConnection();
330335
$opportunity = $this->owner;
@@ -402,7 +407,65 @@ public function getSummary($skip_cache = false): array {
402407
return $data;
403408
}
404409

405-
public function enqueueUpdateSummary($start_string = '10 seconds') {
410+
411+
412+
public function getValuerSummary(?User $user = null): array {
413+
$app = App::i();
414+
415+
/** @var \MapasCulturais\Connection $conn */
416+
$conn = $app->em->getConnection();
417+
$opportunity = $this->opportunity;
418+
$data = [];
419+
if($user) {
420+
$user_ids = [$user->id];
421+
} else {
422+
$agent_relations = $this->getAgentRelations();
423+
424+
$user_ids = array_map(fn($agent_relation) => $agent_relation->agent->user->id, $agent_relations);
425+
}
426+
427+
$user_ids = implode(',', $user_ids);
428+
/**
429+
* Constrói a query para contar as avaliações com base no status.
430+
*
431+
* @param int|null $status Status da avaliação (0 = iniciada, 1 = concluída, 2 = enviada).
432+
* @return int Retorna a contagem de avaliações.
433+
*/
434+
$buildQuery = function ($status = null) use ($user_ids, $opportunity, $conn): int {
435+
$statusCondition = is_null($status) ? "e.status IS NULL" : "e.status = {$status} AND e.registration_id IN (SELECT r.id FROM registration r WHERE r.opportunity_id = {$opportunity->id})";
436+
437+
438+
$query = "
439+
SELECT DISTINCT count(e.registration_id)
440+
FROM registration_evaluation e
441+
WHERE {$statusCondition} AND user_id IN($user_ids)
442+
";
443+
444+
return $conn->fetchScalar($query);
445+
};
446+
447+
// Avaliações pendentes
448+
$query = "
449+
SELECT DISTINCT count(e.registration_id)
450+
FROM evaluations e
451+
WHERE opportunity_id = {$opportunity->id} AND e.evaluation_status IS NULL AND valuer_user_id IN ($user_ids)
452+
";
453+
454+
$data['pending'] = $conn->fetchScalar($query);
455+
456+
// Avaliações iniciadas
457+
$data['started'] = $buildQuery(0);
458+
459+
// Avaliações concluídas
460+
$data['completed'] = $buildQuery(1);
461+
462+
// Avaliações enviadas
463+
$data['sent'] = $buildQuery(2);
464+
465+
return $data;
466+
}
467+
468+
public function enqueueUpdateSummary(string $start_string = 'now') {
406469
$app = App::i();
407470
$app->enqueueOrReplaceJob(UpdateSummaryCaches::SLUG, [
408471
'evaluationMethodConfiguration' => $this
@@ -488,11 +551,7 @@ protected function canUserRemove($user){
488551
}
489552

490553
protected function canUserManageEvaluationCommittee($user){
491-
if(!$this->canUser('@controll', $user)){
492-
return false;
493-
}
494-
495-
return true;
554+
return $this->opportunity->canUser('@control', $user);
496555
}
497556

498557
protected function canUserCreateAgentRelationWithControl($user){

0 commit comments

Comments
 (0)