Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
SkillRepository
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
42
0.00% covered (danger)
0.00%
0 / 1
 getSkillsInCategories
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3namespace Olz\Repository\Quiz;
4
5use Olz\Entity\Quiz\Skill;
6use Olz\Repository\Common\OlzRepository;
7
8/**
9 * @extends OlzRepository<Skill>
10 */
11class SkillRepository extends OlzRepository {
12    public const ITERATION_LIMIT = 1000;
13
14    /**
15     * @param array<int> $category_ids
16     *
17     * @return array<Skill>
18     */
19    public function getSkillsInCategories(array $category_ids): array {
20        $transitive_category_ids = array_map(
21            function ($id) {
22                return intval($id);
23            },
24            $category_ids,
25        );
26        $skills = [];
27        for ($i = 0; $i < count($transitive_category_ids); $i++) {
28            if ($i > self::ITERATION_LIMIT) {
29                throw new \Exception("Too many transitive child categories. Is there a loop?");
30            }
31            $sane_category_id = intval($transitive_category_ids[$i]);
32            $category = $this->findOneBy(['id' => $sane_category_id]);
33            $dql = "
34                SELECT sc
35                FROM SkillCategory sc
36                WHERE sc.id = '{$sane_category_id}'";
37            $query = $this->getEntityManager()->createQuery($dql);
38            foreach ($query->getResult() as $category) {
39                foreach ($category->getSkills() as $skill) {
40                    $skills[] = $skill;
41                }
42            }
43            $dql = "
44                SELECT sc
45                FROM SkillCategory sc
46                WHERE sc.parent_category = '{$sane_category_id}'";
47            $query = $this->getEntityManager()->createQuery($dql);
48            $categories = $query->getResult();
49            foreach ($categories as $category) {
50                $transitive_category_ids[] = intval($category->getId());
51            }
52        }
53        return $skills;
54    }
55}