Passed
Push — master ( ee4256...c7999a )
by Julito
08:50
created

ExtraFieldValuesRepository   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 47
dl 0
loc 89
rs 10
c 0
b 0
f 0
wmc 5

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getVisibleValues() 0 21 1
A __construct() 0 3 1
A getExtraFieldValuesFromItem() 0 16 1
A updateItemData() 0 30 2
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Repository;
8
9
use Chamilo\CoreBundle\Entity\ExtraField;
10
use Chamilo\CoreBundle\Entity\ExtraFieldValues;
11
use Chamilo\CoreBundle\Entity\User;
12
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
13
use Doctrine\ORM\Query\Expr\Join;
14
use Doctrine\Persistence\ManagerRegistry;
15
16
/**
17
 * @author Angel Fernando Quiroz Campos <[email protected]>
18
 */
19
class ExtraFieldValuesRepository extends ServiceEntityRepository
20
{
21
    public function __construct(ManagerRegistry $registry)
22
    {
23
        parent::__construct($registry, ExtraFieldValues::class);
24
    }
25
26
    /**
27
     * Get the extra field values for visible extra fields.
28
     *
29
     * @param int $extraFieldType The type of extra field
30
     * @param int $itemId         The item ID
31
     *
32
     * @return ExtraFieldValues[]
33
     */
34
    public function getVisibleValues(int $extraFieldType, int $itemId)
35
    {
36
        $qb = $this->createQueryBuilder('fv');
37
38
        $qb
39
            ->innerJoin(
40
                'ChamiloCoreBundle:ExtraField',
41
                'f',
42
                Join::WITH,
43
                'fv.field = f.id'
44
            )
45
            ->where(
46
                $qb->expr()->andX(
47
                    $qb->expr()->eq('f.extraFieldType', $extraFieldType),
48
                    $qb->expr()->eq('fv.itemId', $itemId),
49
                    $qb->expr()->eq('f.visibleToSelf', true)
50
                )
51
            )
52
        ;
53
54
        return $qb->getQuery()->getResult();
55
    }
56
57
    /**
58
     * @return ExtraFieldValues[]
59
     */
60
    public function getExtraFieldValuesFromItem(User $user)
61
    {
62
        $qb = $this->createQueryBuilder('v');
63
        $qb
64
            ->innerJoin('v.field', 'f')
65
            ->andWhere('v.itemId = :id')
66
            ->andWhere(
67
                $qb->expr()->eq('f.visibleToSelf', true)
68
            )
69
            ->setParameter(
70
                'id',
71
                $user->getId()
72
            )
73
        ;
74
75
        return $qb->getQuery()->getResult();
76
    }
77
78
    public function updateItemData(ExtraField $extraField, User $user, $data): ?ExtraFieldValues
79
    {
80
        $itemId = $user->getId();
81
        $qb = $this->createQueryBuilder('v');
82
        $qb
83
            ->innerJoin('v.field', 'f')
84
            ->andWhere('v.itemId = :id ')
85
            ->andWhere('f = :field ')
86
            ->setParameter('id', $itemId)
87
            ->setParameter('field', $extraField)
88
        ;
89
90
        $extraFieldValues = $qb->getQuery()->getOneOrNullResult();
91
        $em = $this->getEntityManager();
92
93
        if (null === $extraFieldValues) {
94
            $extraFieldValues = (new ExtraFieldValues())
95
                ->setItemId((int) $itemId)
96
                ->setField($extraField)
97
                ->setValue($data)
98
            ;
99
            $em->persist($extraFieldValues);
100
            $em->flush();
101
        } else {
102
            $extraFieldValues->setValue($data);
103
            $em->persist($extraFieldValues);
104
            $em->flush();
105
        }
106
107
        return $extraFieldValues;
108
    }
109
}
110