Completed
Push — master ( c58ed8...556108 )
by Julito
10:31
created

AbstractResource::setResourceNode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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