]> git.immae.eu Git - github/wallabag/wallabag.git/blame - src/Wallabag/CoreBundle/Entity/Entry.php
Adjust preview picture
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Entity / Entry.php
CommitLineData
9d50517c
NL
1<?php
2
ad4d1caa 3namespace Wallabag\CoreBundle\Entity;
9d50517c 4
0a018fe0 5use Doctrine\Common\Collections\ArrayCollection;
9d50517c 6use Doctrine\ORM\Mapping as ORM;
b84a8055 7use Symfony\Component\Validator\Constraints as Assert;
0f006880
NL
8use Hateoas\Configuration\Annotation as Hateoas;
9use JMS\Serializer\Annotation\XmlRoot;
6eebd8c9 10use Wallabag\CoreBundle\Tools\Utils;
9d50517c
NL
11
12/**
4346a860 13 * Entry.
9d50517c 14 *
0f006880 15 * @XmlRoot("entry")
be463487 16 * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\EntryRepository")
164bd801 17 * @ORM\Table
34d15eb4 18 * @ORM\HasLifecycleCallbacks()
0f006880 19 * @Hateoas\Relation("self", href = "expr('/api/entries/' ~ object.getId())")
9d50517c 20 */
be463487 21class Entry
9d50517c 22{
0f006880 23 /** @Serializer\XmlAttribute */
9d50517c 24 /**
4346a860 25 * @var int
9d50517c 26 *
be463487 27 * @ORM\Column(name="id", type="integer")
9d50517c 28 * @ORM\Id
34d15eb4 29 * @ORM\GeneratedValue(strategy="AUTO")
9d50517c 30 */
be463487 31 private $id;
9d50517c
NL
32
33 /**
34 * @var string
35 *
36 * @ORM\Column(name="title", type="text", nullable=true)
37 */
38 private $title;
39
40 /**
41 * @var string
42 *
b84a8055 43 * @Assert\NotBlank()
9d50517c
NL
44 * @ORM\Column(name="url", type="text", nullable=true)
45 */
46 private $url;
47
48 /**
4346a860 49 * @var bool
9d50517c 50 *
be463487 51 * @ORM\Column(name="is_archived", type="boolean")
9d50517c 52 */
905ae369 53 private $isArchived = false;
9d50517c
NL
54
55 /**
4346a860 56 * @var bool
9d50517c 57 *
be463487 58 * @ORM\Column(name="is_starred", type="boolean")
9d50517c 59 */
905ae369 60 private $isStarred = false;
9d50517c 61
9d50517c
NL
62 /**
63 * @var string
64 *
eacaf7f8 65 * @ORM\Column(name="content", type="text", nullable=true)
9d50517c 66 */
eacaf7f8 67 private $content;
9d50517c 68
34d15eb4
NL
69 /**
70 * @var date
71 *
be463487 72 * @ORM\Column(name="created_at", type="datetime")
34d15eb4
NL
73 */
74 private $createdAt;
75
76 /**
77 * @var date
78 *
be463487 79 * @ORM\Column(name="updated_at", type="datetime")
34d15eb4
NL
80 */
81 private $updatedAt;
82
34d15eb4
NL
83 /**
84 * @var string
85 *
86 * @ORM\Column(name="comments", type="text", nullable=true)
87 */
88 private $comments;
89
90 /**
91 * @var string
92 *
93 * @ORM\Column(name="mimetype", type="text", nullable=true)
94 */
95 private $mimetype;
96
97 /**
4346a860 98 * @var int
34d15eb4 99 *
26864574 100 * @ORM\Column(name="reading_time", type="integer", nullable=true)
34d15eb4
NL
101 */
102 private $readingTime;
103
104 /**
105 * @var string
106 *
107 * @ORM\Column(name="domain_name", type="text", nullable=true)
108 */
109 private $domainName;
110
fad31615
JB
111 /**
112 * @var string
113 *
114 * @ORM\Column(name="preview_picture", type="text", nullable=true)
115 */
116 private $previewPicture;
117
34d15eb4 118 /**
4346a860 119 * @var bool
34d15eb4
NL
120 *
121 * @ORM\Column(name="is_public", type="boolean", nullable=true, options={"default" = false})
122 */
123 private $isPublic;
124
5f09650e
NL
125 /**
126 * @ORM\ManyToOne(targetEntity="User", inversedBy="entries")
127 */
128 private $user;
129
0a018fe0 130 /**
46bbd8d3 131 * @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist"})
164bd801 132 * @ORM\JoinTable
0a018fe0
NL
133 */
134 private $tags;
135
5f09650e
NL
136 /*
137 * @param User $user
138 */
139 public function __construct(User $user)
140 {
141 $this->user = $user;
0a018fe0 142 $this->tags = new ArrayCollection();
5f09650e
NL
143 }
144
9d50517c 145 /**
4346a860 146 * Get id.
9d50517c 147 *
4346a860 148 * @return int
9d50517c
NL
149 */
150 public function getId()
151 {
152 return $this->id;
153 }
154
155 /**
4346a860
JB
156 * Set title.
157 *
158 * @param string $title
9d50517c 159 *
be463487 160 * @return Entry
9d50517c
NL
161 */
162 public function setTitle($title)
163 {
164 $this->title = $title;
165
166 return $this;
167 }
168
169 /**
4346a860 170 * Get title.
9d50517c 171 *
7df80cb3 172 * @return string
9d50517c
NL
173 */
174 public function getTitle()
175 {
176 return $this->title;
177 }
178
179 /**
4346a860
JB
180 * Set url.
181 *
182 * @param string $url
9d50517c 183 *
be463487 184 * @return Entry
9d50517c
NL
185 */
186 public function setUrl($url)
187 {
188 $this->url = $url;
189
190 return $this;
191 }
192
193 /**
4346a860 194 * Get url.
9d50517c 195 *
7df80cb3 196 * @return string
9d50517c
NL
197 */
198 public function getUrl()
199 {
200 return $this->url;
201 }
202
203 /**
4346a860
JB
204 * Set isArchived.
205 *
206 * @param string $isArchived
9d50517c 207 *
be463487 208 * @return Entry
9d50517c 209 */
905ae369 210 public function setArchived($isArchived)
9d50517c 211 {
905ae369 212 $this->isArchived = $isArchived;
9d50517c
NL
213
214 return $this;
215 }
216
217 /**
4346a860 218 * Get isArchived.
9d50517c 219 *
7df80cb3 220 * @return string
9d50517c 221 */
905ae369 222 public function isArchived()
9d50517c 223 {
905ae369 224 return $this->isArchived;
9d50517c
NL
225 }
226
163eae0b
NL
227 public function toggleArchive()
228 {
905ae369 229 $this->isArchived = $this->isArchived() ^ 1;
7df80cb3 230
163eae0b
NL
231 return $this;
232 }
233
9d50517c 234 /**
4346a860
JB
235 * Set isStarred.
236 *
237 * @param string $isStarred
9d50517c 238 *
be463487 239 * @return Entry
9d50517c 240 */
905ae369 241 public function setStarred($isStarred)
9d50517c 242 {
905ae369 243 $this->isStarred = $isStarred;
9d50517c
NL
244
245 return $this;
246 }
247
248 /**
4346a860 249 * Get isStarred.
9d50517c 250 *
7df80cb3 251 * @return string
9d50517c 252 */
905ae369 253 public function isStarred()
9d50517c 254 {
905ae369 255 return $this->isStarred;
9d50517c
NL
256 }
257
163eae0b
NL
258 public function toggleStar()
259 {
905ae369 260 $this->isStarred = $this->isStarred() ^ 1;
163eae0b
NL
261
262 return $this;
263 }
264
9d50517c 265 /**
4346a860
JB
266 * Set content.
267 *
268 * @param string $content
9d50517c 269 *
be463487 270 * @return Entry
9d50517c
NL
271 */
272 public function setContent($content)
273 {
274 $this->content = $content;
6eebd8c9 275 $this->readingTime = Utils::getReadingTime($content);
c2257428 276 $this->domainName = parse_url($this->url, PHP_URL_HOST);
9d50517c
NL
277
278 return $this;
279 }
280
281 /**
4346a860 282 * Get content.
9d50517c 283 *
7df80cb3 284 * @return string
9d50517c
NL
285 */
286 public function getContent()
287 {
288 return $this->content;
289 }
290
291 /**
5f09650e 292 * @return User
9d50517c 293 */
5f09650e 294 public function getUser()
9d50517c 295 {
5f09650e 296 return $this->user;
9d50517c 297 }
42a90646 298
34d15eb4 299 /**
2f69eb4a 300 * @return string
34d15eb4
NL
301 */
302 public function getCreatedAt()
303 {
304 return $this->createdAt;
305 }
306
34d15eb4
NL
307 /**
308 * @return string
309 */
310 public function getUpdatedAt()
311 {
312 return $this->updatedAt;
313 }
314
315 /**
be463487 316 * @ORM\PrePersist
34d15eb4
NL
317 * @ORM\PreUpdate
318 */
be463487 319 public function timestamps()
34d15eb4 320 {
be463487
NL
321 if (is_null($this->createdAt)) {
322 $this->createdAt = new \DateTime();
323 }
324
34d15eb4
NL
325 $this->updatedAt = new \DateTime();
326 }
327
328 /**
329 * @return string
330 */
331 public function getComments()
332 {
333 return $this->comments;
334 }
335
336 /**
337 * @param string $comments
338 */
339 public function setComments($comments)
340 {
341 $this->comments = $comments;
342 }
343
344 /**
345 * @return string
346 */
347 public function getMimetype()
348 {
349 return $this->mimetype;
350 }
351
352 /**
353 * @param string $mimetype
354 */
355 public function setMimetype($mimetype)
356 {
357 $this->mimetype = $mimetype;
358 }
359
360 /**
361 * @return int
362 */
363 public function getReadingTime()
364 {
365 return $this->readingTime;
366 }
367
368 /**
369 * @param int $readingTime
370 */
371 public function setReadingTime($readingTime)
372 {
373 $this->readingTime = $readingTime;
374 }
375
376 /**
377 * @return string
378 */
379 public function getDomainName()
380 {
381 return $this->domainName;
382 }
383
384 /**
385 * @param string $domainName
386 */
387 public function setDomainName($domainName)
388 {
389 $this->domainName = $domainName;
390 }
391
392 /**
4346a860 393 * @return bool
34d15eb4 394 */
2c093b03 395 public function isPublic()
34d15eb4
NL
396 {
397 return $this->isPublic;
398 }
399
400 /**
4346a860 401 * @param bool $isPublic
34d15eb4 402 */
82d6d9cb 403 public function setIsPublic($isPublic)
34d15eb4
NL
404 {
405 $this->isPublic = $isPublic;
406 }
0a018fe0
NL
407
408 /**
409 * @return ArrayCollection<Tag>
410 */
411 public function getTags()
412 {
413 return $this->tags;
414 }
415
416 /**
417 * @param Tag $tag
418 */
419 public function addTag(Tag $tag)
420 {
421 $this->tags[] = $tag;
46bbd8d3 422 $tag->addEntry($this);
0a018fe0 423 }
092ca707
NL
424
425 public function removeTag(Tag $tag)
426 {
427 $this->tags->removeElement($tag);
428 }
fad31615
JB
429
430 /**
a1413a3d 431 * Set previewPicture.
fad31615
JB
432 *
433 * @param string $previewPicture
434 *
435 * @return Entry
436 */
437 public function setPreviewPicture($previewPicture)
438 {
439 $this->previewPicture = $previewPicture;
440
441 return $this;
442 }
443
444 /**
a1413a3d 445 * Get previewPicture.
fad31615
JB
446 *
447 * @return string
448 */
449 public function getPreviewPicture()
450 {
451 return $this->previewPicture;
452 }
9d50517c 453}