Passed
Push — master ( d5b010...83f4f4 )
by Julito
11:40
created

AbstractResource::getResourceLinkListFromEntity()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
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 Doctrine\Common\Collections\Criteria;
10
use Doctrine\ORM\Mapping as ORM;
11
use Symfony\Component\Serializer\Annotation\Groups;
12
use Symfony\Component\Serializer\Annotation\MaxDepth;
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
     * @Assert\Valid()
32
     * @ApiSubresource()
33
     * @Groups({"resource_node:read", "resource_node:write"})
34
     * @ORM\OneToOne(
35
     *     targetEntity="Chamilo\CoreBundle\Entity\ResourceNode",
36
     *     cascade={"persist", "remove"},
37
     *     orphanRemoval=true
38
     * )
39
     * @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="CASCADE")
40
     */
41
    public $resourceNode;
42
43
    /**
44
     * @Groups({"resource_node:read", "resource_node:write", "document:read", "document:write"})
45
     */
46
    public $parentResourceNode;
47
48
    /**
49
     * @ApiProperty(iri="http://schema.org/image")
50
     */
51
    public $uploadFile;
52
53
    /**
54
     * @Groups({"resource_node:read", "document:read"})
55
     */
56
    public $resourceLinkList;
57
58
    abstract public function getResourceName(): string;
59
60
    public function setResourceLinkList($links)
61
    {
62
        $this->resourceLinkList = $links;
63
    }
64
65
    public function getResourceLinkListFromEntity()
66
    {
67
        return $this->resourceLinkList;
68
    }
69
70
    public function getResourceLinkList()
71
    {
72
        $resourceNode = $this->getResourceNode();
73
        $links = $resourceNode->getResourceLinks();
74
        $resourceLinkList = [];
75
76
        foreach ($links as $link) {
77
            $resourceLinkList[] = [
78
                'id' => $link->getId(),
79
                'session' => $link->getSession(),
80
                'course' => $link->getCourse(),
81
                'visibilityName' => $link->getVisibilityName(),
82
                'group' => $link->getGroup(),
83
                'userGroup' => $link->getUserGroup(),
84
            ];
85
        }
86
87
        return $resourceLinkList;
88
    }
89
90
    public function hasParentResourceNode(): bool
91
    {
92
        return null !== $this->parentResourceNode;
93
    }
94
95
    public function setParentResourceNode($resourceNode): self
96
    {
97
        $this->parentResourceNode = $resourceNode;
98
99
        return $this;
100
    }
101
102
    public function getParentResourceNode()
103
    {
104
        return $this->parentResourceNode;
105
    }
106
107
    public function hasUploadFile(): bool
108
    {
109
        return null !== $this->uploadFile;
110
    }
111
112
    public function getUploadFile()
113
    {
114
        return $this->uploadFile;
115
    }
116
117
    public function setUploadFile($file)
118
    {
119
        $this->uploadFile = $file;
120
121
        return $this;
122
    }
123
124
    public function setResourceNode(ResourceNode $resourceNode): self
125
    {
126
        $this->resourceNode = $resourceNode;
127
128
        return $this;
129
    }
130
131
    public function hasResourceNode(): bool
132
    {
133
        return $this->resourceNode instanceof ResourceNode;
134
    }
135
136
    public function getResourceNode(): ResourceNode
137
    {
138
        return $this->resourceNode;
139
    }
140
141
    public function getCourseSessionResourceLink(Course $course, Session $session = null): ?ResourceLink
142
    {
143
        return $this->getFirstResourceLinkFromCourseSession($course, $session);
144
    }
145
146
    public function getFirstResourceLink(): ?ResourceLink
147
    {
148
        $resourceNode = $this->getResourceNode();
149
150
        if ($resourceNode && $resourceNode->getResourceLinks()) {
151
            $result = $resourceNode->getResourceLinks()->first();
152
            if ($result) {
153
                return $result;
154
            }
155
        }
156
157
        return null;
158
    }
159
160
    /**
161
     * See ResourceLink to see the visibility constants. Example: ResourceLink::VISIBILITY_DELETED.
162
     *
163
     * @return int
164
     */
165
    public function getLinkVisibility(Course $course, Session $session = null)
166
    {
167
        return $this->getCourseSessionResourceLink($course, $session)->getVisibility();
168
    }
169
170
    public function isVisible(Course $course, Session $session = null): bool
171
    {
172
        $link = $this->getCourseSessionResourceLink($course, $session);
173
        if (null === $link) {
174
            return false;
175
        }
176
177
        return ResourceLink::VISIBILITY_PUBLISHED === $link->getVisibility();
178
    }
179
180
    public function getFirstResourceLinkFromCourseSession(Course $course, Session $session = null): ?ResourceLink
181
    {
182
        $criteria = Criteria::create();
183
        $criteria
184
            ->where(Criteria::expr()->eq('course', $course))
185
            ->andWhere(
186
                Criteria::expr()->eq('session', $session)
187
            );
188
        $resourceNode = $this->getResourceNode();
189
190
        $result = null;
191
        if ($resourceNode && $resourceNode->getResourceLinks()->count() > 0) {
192
            //var_dump($resourceNode->getResourceLinks()->count());
193
            foreach ($resourceNode->getResourceLinks() as $link) {
194
                //var_dump(get_class($link));
195
            }
196
            $result = $resourceNode->getResourceLinks()->matching($criteria)->first();
197
            //var_dump($result);
198
            if ($result) {
199
                return $result;
200
            }
201
        }
202
203
        return null;
204
    }
205
}
206