Passed
Push — master ( 7f030f...a70d3c )
by Julito
13:07
created

getFirstResourceLinkFromCourseSession()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 19
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 12
c 0
b 0
f 0
nc 3
nop 2
dl 0
loc 19
rs 9.8666
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
namespace Chamilo\CoreBundle\Entity\Resource;
6
7
use APY\DataGridBundle\Grid\Mapping as GRID;
8
use Chamilo\CoreBundle\Entity\Course;
9
use Chamilo\CoreBundle\Entity\Session;
10
use Doctrine\Common\Collections\Criteria;
11
use Doctrine\ORM\Mapping as ORM;
12
13
/**
14
 * @ORM\MappedSuperclass
15
 * @ORM\HasLifecycleCallbacks
16
 * @ORM\EntityListeners({"Chamilo\CoreBundle\Entity\Listener\ResourceListener"})
17
 */
18
abstract class AbstractResource
19
{
20
    /**
21
     * @GRID\Column(field="resourceNode.createdAt", title="Date added", type="datetime")
22
     *
23
     * @ORM\OneToOne(
24
     *     targetEntity="Chamilo\CoreBundle\Entity\Resource\ResourceNode", mappedBy="resource", cascade={"remove"}, orphanRemoval=true
25
     * )
26
     * @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="CASCADE")
27
     */
28
    public $resourceNode;
29
30
    public function setResourceNode(ResourceNode $resourceNode): self
31
    {
32
        $this->resourceNode = $resourceNode;
33
34
        return $this;
35
    }
36
37
    public function hasResourceNode(): bool
38
    {
39
        return $this->resourceNode instanceof ResourceNode;
40
    }
41
42
    public function getResourceNode(): ResourceNode
43
    {
44
        return $this->resourceNode;
45
    }
46
47
    public function getCourseSessionResourceLink(Course $course, Session $session = null): ?ResourceLink
48
    {
49
        return $this->getFirstResourceLinkFromCourseSession($course, $session);
50
    }
51
52
    public function getFirstResourceLink(): ?ResourceLink
53
    {
54
        $resourceNode = $this->getResourceNode();
55
56
        if ($resourceNode && $resourceNode->getResourceLinks()) {
57
            $result = $resourceNode->getResourceLinks()->first();
58
            if ($result) {
59
                return $result;
60
            }
61
        }
62
63
        return null;
64
    }
65
66
    /**
67
     * See ResourceLink to see the visibility constants. Example: ResourceLink::VISIBILITY_DELETED.
68
     *
69
     * @return int
70
     */
71
    public function getLinkVisibility(Course $course, Session $session = null)
72
    {
73
        return $this->getCourseSessionResourceLink($course, $session)->getVisibility();
74
    }
75
76
    public function isVisible(Course $course, Session $session = null): bool
77
    {
78
        $link = $this->getCourseSessionResourceLink($course, $session);
79
        if (null === $link) {
80
            return false;
81
        }
82
83
        return ResourceLink::VISIBILITY_PUBLISHED === $link->getVisibility();
84
    }
85
86
    public function getFirstResourceLinkFromCourseSession(Course $course, Session $session = null): ?ResourceLink
87
    {
88
        $criteria = Criteria::create();
89
        $criteria
90
            ->where(Criteria::expr()->eq('course', $course))
91
            ->andWhere(
92
                Criteria::expr()->eq('session', $session)
93
            );
94
        $resourceNode = $this->getResourceNode();
95
96
        $result = null;
97
        if ($resourceNode && $resourceNode->getResourceLinks()->count() > 0) {
98
            $result = $resourceNode->getResourceLinks()->matching($criteria)->first();
99
            if ($result) {
100
                return $result;
101
            }
102
        }
103
104
        return null;
105
    }
106
}
107