Lines 86.95% 20 / 23
Methods 80.00% 4 / 5
Classes 0.00% 0 / 1
Covered by tests of size
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
34class 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}