Lines
86.95%
20 / 23
Methods
80.00%
4 / 5
Classes
0.00%
0 / 1
| Name | Lines | Methods | CRAP | ||||
|---|---|---|---|---|---|---|---|
| __construct | 100.00% | 1 / 1 | 100.00% | 1 / 1 | 1 | ||
| setFaqId | 100.00% | 2 / 2 | 100.00% | 1 / 1 | 1 | ||
| setFaqLanguage | 100.00% | 2 / 2 | 100.00% | 1 / 1 | 1 | ||
| setCategories | 100.00% | 2 / 2 | 100.00% | 1 / 1 | 1 | ||
| save | 81.25% | 13 / 16 | 0.00% | 0 / 1 | 2.03 | ||
| 34 | class MetaData | |
| 35 | { | |
| 36 | private ?int $faqId = null; | |
| 37 | ||
| 38 | private ?string $faqLanguage = null; | |
| 39 | ||
| 40 | /** @var int[]|null */ | |
| 41 | private ?array $categories = null; | |
| 42 | ||
| 43 | /** | |
| 44 | * FaqPermission constructor. | |
| 45 | */ | |
| 46 | public function __construct( | |
| 47 | private readonly Configuration $configuration, | |
| 48 | ) { | |
| 49 | } | |
| 50 | ||
| 51 | public function setFaqId(int $faqId): MetaData | |
| 52 | { | |
| 53 | $this->faqId = $faqId; | |
| 54 | return $this; | |
| 55 | } | |
| 56 | ||
| 57 | public function setFaqLanguage(string $faqLanguage): MetaData | |
| 58 | { | |
| 59 | $this->faqLanguage = $faqLanguage; | |
| 60 | return $this; | |
| 61 | } | |
| 62 | ||
| 63 | /** | |
| 64 | * @param int[] $categories | |
| 65 | */ | |
| 66 | public function setCategories(array $categories): MetaData | |
| 67 | { | |
| 68 | $this->categories = $categories; | |
| 69 | return $this; | |
| 70 | } | |
| 71 | ||
| 72 | /** | |
| 73 | * This method saves the category relations, the initial visits | |
| 74 | * and the permissions | |
| 75 | */ | |
| 76 | public function save(): void | |
| 77 | { | |
| 78 | $categories = $this->categories ?? []; | |
| 79 | $faqId = $this->faqId ?? 0; | |
| 80 | $faqLanguage = $this->faqLanguage ?? ''; | |
| 81 | ||
| 82 | $categoryRelation = new Relation($this->configuration, new Category($this->configuration)); | |
| 83 | $categoryRelation->add($categories, $faqId, $faqLanguage); | |
| 84 | ||
| 85 | // Activate visits | |
| 86 | $visits = new Visits($this->configuration); | |
| 87 | $visits->logViews($faqId); | |
| 88 | ||
| 89 | // Set permissions: derive from category permissions and apply to both FAQ record and categories | |
| 90 | $faqPermission = new FaqPermission($this->configuration); | |
| 91 | $categoryPermission = new CategoryPermission($this->configuration); | |
| 92 | ||
| 93 | $userPermissions = $categoryPermission->get(CategoryPermission::USER, $categories); | |
| 94 | ||
| 95 | // Apply user permissions to the FAQ record and keep category permissions aligned | |
| 96 | $faqPermission->add(FaqPermission::USER, $faqId, $userPermissions); | |
| 97 | $categoryPermission->add(CategoryPermission::USER, $categories, $userPermissions); | |
| 98 | ||
| 99 | if ($this->configuration->get(item: 'security.permLevel') !== 'basic') { | |
| 100 | $groupPermissions = $categoryPermission->get(CategoryPermission::GROUP, $categories); | |
| 101 | $faqPermission->add(FaqPermission::GROUP, $faqId, $groupPermissions); | |
| 102 | $categoryPermission->add(CategoryPermission::GROUP, $categories, $groupPermissions); | |
| 103 | } | |
| 104 | } | |
| 105 | } |