/
ReportQueuePermissions.php
92 lines (75 loc) · 3.05 KB
/
ReportQueuePermissions.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
namespace SV\ReportImprovements\Permission;
use SV\ReportCentreEssentials\Entity\ReportQueue as ReportQueueEntity;
use SV\ReportImprovements\Repository\ReportQueue as ReportQueueRepo;
use XF\Entity\Permission;
use XF\Entity\PermissionCombination;
use XF\Mvc\Entity\AbstractCollection;
use XF\Mvc\Entity\Entity;
use XF\Permission\FlatContentPermissions;
use XF\Phrase;
use function assert;
class ReportQueuePermissions extends FlatContentPermissions
{
protected $privatePermissionGroupId = 'general';
protected $privatePermissionId = 'viewReports';
protected function getContentType(): string
{
return 'report_queue';
}
public function getAnalysisTypeTitle(): Phrase
{
return \XF::phrase('svReportImprovements_report_queue_permissions');
}
public function getContentList(): AbstractCollection
{
/** @var ReportQueueRepo $entryRepo */
$entryRepo = $this->builder->em()->getRepository('SV\ReportImprovements:ReportQueue');
return $entryRepo->getReportQueueList();
}
public function getContentTitle(Entity $entity): string
{
/** @var ReportQueueEntity $entity */
return $entity->queue_name;
}
public function rebuildCombination(PermissionCombination $combination, array $basePerms)
{
// being notified on permission changes is surprisingly challenging
$reportQueueRepo = \XF::repository('SV\ReportImprovements:ReportQueue');
assert($reportQueueRepo instanceof ReportQueueRepo);
$reportQueueRepo->resetNonModeratorsWhoCanHandleReportCacheLater();
parent::rebuildCombination($combination, $basePerms);
}
public function isValidPermission(Permission $permission): bool
{
return $permission->permission_group_id === 'report_queue' ||
($permission->permission_group_id === $this->privatePermissionGroupId && $permission->permission_id === $this->privatePermissionId);
}
protected function getFinalPerms($contentId, array $calculated, array &$childPerms): array
{
if (!isset($calculated['report_queue']))
{
$calculated['report_queue'] = [];
}
$final = $this->builder->finalizePermissionValues($calculated['report_queue']);
if ($this->privatePermissionGroupId !== 'report_queue')
{
$final = $final + $this->builder->finalizePermissionValues($calculated[$this->privatePermissionGroupId]);
}
if (empty($final[$this->privatePermissionId]))
{
$childPerms[$this->privatePermissionGroupId][$this->privatePermissionId] = 'deny';
$final = [];
}
return $final;
}
protected function getFinalAnalysisPerms($contentId, array $calculated, array &$childPerms): array
{
$final = $this->builder->finalizePermissionValues($calculated);
if (empty($final[$this->privatePermissionGroupId][$this->privatePermissionId]))
{
$childPerms[$this->privatePermissionGroupId][$this->privatePermissionId] = 'deny';
}
return $final;
}
}