Passed
Push — master ( 845a96...e5a491 )
by Julito
09:08
created

AbstractResource::getUploadFile()   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\Validator\Constraints as Assert;
13
14
/**
15
 * @ORM\MappedSuperclass
16
 * @ORM\HasLifecycleCallbacks
17
 * @ORM\EntityListeners({"Chamilo\CoreBundle\Entity\Listener\ResourceListener"})
18
 */
19
abstract class AbstractResource
20
{
21
    /**
22
     * @var string|null
23
     *
24
     * @ApiProperty(iri="http://schema.org/contentUrl")
25
     * @Groups({"resource_file:read", "resource_node:read", "document:read", "media_object_read"})
26
     */
27
    public $contentUrl;
28
29
    /**
30
     * @Assert\Valid()
31
     * @ApiSubresource()
32
     * @Groups({"resource_node:read", "resource_node:write", "document:read", "document:write"})
33
     * @ORM\OneToOne(
34
     *     targetEntity="Chamilo\CoreBundle\Entity\ResourceNode",
35
     *     cascade={"persist", "remove"},
36
     *     orphanRemoval=true
37
     * )
38
     * @ORM\JoinColumn(name="resource_node_id", referencedColumnName="id", onDelete="CASCADE")
39
     */
40
    public $resourceNode;
41
42
    /**
43
     * @Groups({"resource_node:read", "resource_node:write", "document:read", "document:write"})
44
     */
45
    public $parentResourceNode;
46
47
    /**
48
     * @ApiProperty(iri="http://schema.org/image")
49
     * @Groups({"resource_node:read", "resource_node:write", "document:read", "document:write"})
50
     */
51
    public $uploadFile;
52
53
    public $resourceLinkList;
54
55
    public function setResourceLinkList(array $links)
56
    {
57
        $this->resourceLinkList = $links;
58
59
        return $this;
60
    }
61
62
    public function getResourceLinkList(): array
63
    {
64
        if (null === $this->resourceLinkList) {
65
            return [];
66
        }
67
68
        return $this->resourceLinkList;
69
    }
70
71
    public function hasParentResourceNode(): bool
72
    {
73
        return null !== $this->parentResourceNode;
74
    }
75
76
    public function setParentResourceNode($resourceNode): self
77
    {
78
        $this->parentResourceNode = $resourceNode;
79
80
        return $this;
81
    }
82
83
    public function getParentResourceNode()
84
    {
85
        return $this->parentResourceNode;
86
    }
87
88
    public function hasUploadFile(): bool
89
    {
90
        return null !== $this->uploadFile;
91
    }
92
93
    public function getUploadFile()
94
    {
95
        return $this->uploadFile;
96
    }
97
98
    public function setUploadFile($file)
99
    {
100
        $this->uploadFile = $file;
101
102
        return $this;
103
    }
104
105
    public function setResourceNode(ResourceNode $resourceNode): self
106
    {
107
        $this->resourceNode = $resourceNode;
108
109
        return $this;
110
    }
111
112
    public function hasResourceNode(): bool
113
    {
114
        return $this->resourceNode instanceof ResourceNode;
115
    }
116
117
    public function getResourceNode(): ResourceNode
118
    {
119
        return $this->resourceNode;
120
    }
121
122
    public function getCourseSessionResourceLink(Course $course, Session $session = null): ?ResourceLink
123
    {
124
        return $this->getFirstResourceLinkFromCourseSession($course, $session);
125
    }
126
127
    public function getFirstResourceLink(): ?ResourceLink
128
    {
129
        $resourceNode = $this->getResourceNode();
130
131
        if ($resourceNode && $resourceNode->getResourceLinks()) {
132
            $result = $resourceNode->getResourceLinks()->first();
133
            if ($result) {
134
                return $result;
135
            }
136
        }
137
138
        return null;
139
    }
140
141
    /**
142
     * See ResourceLink to see the visibility constants. Example: ResourceLink::VISIBILITY_DELETED.
143
     *
144
     * @return int
145
     */
146
    public function getLinkVisibility(Course $course, Session $session = null)
147
    {
148
        return $this->getCourseSessionResourceLink($course, $session)->getVisibility();
149
    }
150
151
    public function isVisible(Course $course, Session $session = null): bool
152
    {
153
        $link = $this->getCourseSessionResourceLink($course, $session);
154
        if (null === $link) {
155
            return false;
156
        }
157
158
        return ResourceLink::VISIBILITY_PUBLISHED === $link->getVisibility();
159
    }
160
161
    public function getFirstResourceLinkFromCourseSession(Course $course, Session $session = null): ?ResourceLink
162
    {
163
        $criteria = Criteria::create();
164
        $criteria
165
            ->where(Criteria::expr()->eq('course', $course))
166
            ->andWhere(
167
                Criteria::expr()->eq('session', $session)
168
            );
169
        $resourceNode = $this->getResourceNode();
170
171
        $result = null;
172
        if ($resourceNode && $resourceNode->getResourceLinks()->count() > 0) {
173
            //var_dump($resourceNode->getResourceLinks()->count());
174
            foreach ($resourceNode->getResourceLinks() as $link) {
175
                //var_dump(get_class($link));
176
            }
177
            $result = $resourceNode->getResourceLinks()->matching($criteria)->first();
178
            //var_dump($result);
179
            if ($result) {
180
                return $result;
181
            }
182
        }
183
184
        return null;
185
    }
186
}
187