Files
wallabag/src/Wallabag/CoreBundle/Entity/Entry.php

599 lines
11 KiB
PHP
Raw Normal View History

2015-01-22 17:18:56 +01:00
<?php
namespace Wallabag\CoreBundle\Entity;
2015-01-22 17:18:56 +01:00
2015-02-20 20:29:33 +01:00
use Doctrine\Common\Collections\ArrayCollection;
2015-01-22 17:18:56 +01:00
use Doctrine\ORM\Mapping as ORM;
use Hateoas\Configuration\Annotation as Hateoas;
2015-10-19 21:17:30 +02:00
use JMS\Serializer\Annotation\Groups;
use JMS\Serializer\Annotation\XmlRoot;
2016-03-13 20:17:52 +01:00
use JMS\Serializer\Annotation\Exclude;
use JMS\Serializer\Annotation\VirtualProperty;
use JMS\Serializer\Annotation\SerializedName;
use Symfony\Component\Validator\Constraints as Assert;
use Wallabag\UserBundle\Entity\User;
use Wallabag\AnnotationBundle\Entity\Annotation;
2015-01-22 17:18:56 +01:00
/**
2015-05-30 13:52:26 +02:00
* Entry.
2015-01-22 17:18:56 +01:00
*
* @XmlRoot("entry")
2015-02-06 07:45:32 +01:00
* @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\EntryRepository")
* @ORM\Table(name="`entry`")
2015-02-04 22:25:44 +01:00
* @ORM\HasLifecycleCallbacks()
* @Hateoas\Relation("self", href = "expr('/api/entries/' ~ object.getId())")
2015-01-22 17:18:56 +01:00
*/
2015-02-06 07:45:32 +01:00
class Entry
2015-01-22 17:18:56 +01:00
{
/** @Serializer\XmlAttribute */
2015-01-22 17:18:56 +01:00
/**
2015-05-30 13:52:26 +02:00
* @var int
2015-01-22 17:18:56 +01:00
*
2015-02-06 07:45:32 +01:00
* @ORM\Column(name="id", type="integer")
2015-01-22 17:18:56 +01:00
* @ORM\Id
2015-02-04 22:25:44 +01:00
* @ORM\GeneratedValue(strategy="AUTO")
*
* @Groups({"entries_for_user", "export_all"})
2015-01-22 17:18:56 +01:00
*/
2015-02-06 07:45:32 +01:00
private $id;
2015-01-22 17:18:56 +01:00
/**
* @var string
*
* @ORM\Column(name="title", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
2015-01-22 17:18:56 +01:00
*/
private $title;
/**
* @var string
*
2015-01-23 14:58:17 +01:00
* @Assert\NotBlank()
2015-01-22 17:18:56 +01:00
* @ORM\Column(name="url", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
2015-01-22 17:18:56 +01:00
*/
private $url;
/**
2015-05-30 13:52:26 +02:00
* @var bool
2015-01-22 17:18:56 +01:00
*
* @Exclude
*
2015-02-06 07:45:32 +01:00
* @ORM\Column(name="is_archived", type="boolean")
*
* @Groups({"entries_for_user", "export_all"})
2015-01-22 17:18:56 +01:00
*/
2015-02-05 22:33:36 +01:00
private $isArchived = false;
2015-01-22 17:18:56 +01:00
/**
2015-05-30 13:52:26 +02:00
* @var bool
2015-01-22 17:18:56 +01:00
*
* @Exclude
*
2015-02-06 07:45:32 +01:00
* @ORM\Column(name="is_starred", type="boolean")
*
* @Groups({"entries_for_user", "export_all"})
2015-01-22 17:18:56 +01:00
*/
2015-02-05 22:33:36 +01:00
private $isStarred = false;
2015-01-22 17:18:56 +01:00
/**
* @var string
*
* @ORM\Column(name="content", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
2015-01-22 17:18:56 +01:00
*/
private $content;
2015-01-22 17:18:56 +01:00
2015-02-04 22:25:44 +01:00
/**
* @var date
*
2015-02-06 07:45:32 +01:00
* @ORM\Column(name="created_at", type="datetime")
*
* @Groups({"export_all"})
2015-02-04 22:25:44 +01:00
*/
private $createdAt;
/**
* @var date
*
2015-02-06 07:45:32 +01:00
* @ORM\Column(name="updated_at", type="datetime")
*
* @Groups({"export_all"})
2015-02-04 22:25:44 +01:00
*/
private $updatedAt;
/**
* @ORM\OneToMany(targetEntity="Wallabag\AnnotationBundle\Entity\Annotation", mappedBy="entry", cascade={"persist", "remove"})
* @ORM\JoinTable
*
* @Groups({"entries_for_user", "export_all"})
2015-02-04 22:25:44 +01:00
*/
private $annotations;
2015-02-04 22:25:44 +01:00
/**
* @var string
*
* @ORM\Column(name="mimetype", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
2015-02-04 22:25:44 +01:00
*/
private $mimetype;
2015-09-20 22:37:27 +02:00
/**
* @var string
*
* @ORM\Column(name="language", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
2015-09-20 22:37:27 +02:00
*/
private $language;
2015-02-04 22:25:44 +01:00
/**
2015-05-30 13:52:26 +02:00
* @var int
2015-02-04 22:25:44 +01:00
*
* @ORM\Column(name="reading_time", type="integer", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
2015-02-04 22:25:44 +01:00
*/
private $readingTime;
/**
* @var string
*
* @ORM\Column(name="domain_name", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
2015-02-04 22:25:44 +01:00
*/
private $domainName;
2015-08-24 12:27:17 +02:00
/**
* @var string
*
* @ORM\Column(name="preview_picture", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
2015-08-24 12:27:17 +02:00
*/
private $previewPicture;
2015-02-04 22:25:44 +01:00
/**
2015-05-30 13:52:26 +02:00
* @var bool
2015-02-04 22:25:44 +01:00
*
* @ORM\Column(name="is_public", type="boolean", nullable=true, options={"default" = false})
*
* @Groups({"export_all"})
2015-02-04 22:25:44 +01:00
*/
private $isPublic;
/**
2016-03-13 20:17:52 +01:00
* @Exclude
*
* @ORM\ManyToOne(targetEntity="Wallabag\UserBundle\Entity\User", inversedBy="entries")
*
* @Groups({"export_all"})
*/
private $user;
2015-02-20 20:29:33 +01:00
/**
manage assets through npm first draft remote assetic totally work nearly there use at least nodejs > 0.12 use proper version of grunt bump nodejs version for travis update npm workaround for materialize install node 5.0 add grunt-cli baggy theme & cache node modules cache bower & npm make travis build assets on php7 only exclude installing node & npm if not needed & use bash clean & try to make icomoon work on baggy ready config for travis rebase make travis work more travis work impove travis & update deps add missing pixrem deps add module through oddly lost ui updates install latest nodejs add install_dev.sh, link local binaries for npm/bower/grunt ui improvements (mostly baggy) fix travis build no need to install on travis Add unread filter to entries pages Add the ability to filter for unread pages in the filters menu. Add unread filter test to EntryControllerTest Add a new test to the EntryControllerTest collection which checks that only entries which have not been archived (and are treated as "unread") are retrieved. Improve English translation Update FAQ -Fix grammar -Add notes about MTA, firewall, and SELinux Update installation instructions -Fix grammar -Add SELinux section add screenshots of android docu in English Fix the deletion of Tags/Entries relation when delete an entry Fix #2121 Move fixtures to the right place Display a message when saving an entry failed When saving an entry fail because of database error we previously just returned `false`. Now we got an error in the log and the displayed notice to the user is updated too. Change ManyToMany between entry & tag Following https://gist.github.com/Ocramius/3121916 Be sure to remove the related entity when removing an entity. Let say you have Entry -> EntryTag -> Tag. If you remove the entry: - before that commit, the EntryTag will stay (at least using SQLite). - with that commit, the related entity is removed Prepare wallabag 2.0.5 enforce older materialize version
2016-03-08 17:02:34 +01:00
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="entries", cascade={"persist"})
* @ORM\JoinTable(
* name="entry_tag",
* joinColumns={
* @ORM\JoinColumn(name="entry_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
* }
* )
*
* @Groups({"entries_for_user", "export_all"})
2015-02-20 20:29:33 +01:00
*/
private $tags;
/*
* @param User $user
*/
public function __construct(User $user)
{
$this->user = $user;
2015-02-20 20:29:33 +01:00
$this->tags = new ArrayCollection();
}
2015-01-22 17:18:56 +01:00
/**
2015-05-30 13:52:26 +02:00
* Get id.
2015-01-22 17:18:56 +01:00
*
2015-05-30 13:52:26 +02:00
* @return int
2015-01-22 17:18:56 +01:00
*/
public function getId()
{
return $this->id;
}
/**
2015-05-30 13:52:26 +02:00
* Set title.
*
* @param string $title
2015-01-22 17:18:56 +01:00
*
2015-02-06 07:45:32 +01:00
* @return Entry
2015-01-22 17:18:56 +01:00
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
2015-05-30 13:52:26 +02:00
* Get title.
2015-01-22 17:18:56 +01:00
*
2015-01-31 19:09:34 +01:00
* @return string
2015-01-22 17:18:56 +01:00
*/
public function getTitle()
{
return $this->title;
}
/**
2015-05-30 13:52:26 +02:00
* Set url.
*
* @param string $url
2015-01-22 17:18:56 +01:00
*
2015-02-06 07:45:32 +01:00
* @return Entry
2015-01-22 17:18:56 +01:00
*/
public function setUrl($url)
{
$this->url = $url;
return $this;
}
/**
2015-05-30 13:52:26 +02:00
* Get url.
2015-01-22 17:18:56 +01:00
*
2015-01-31 19:09:34 +01:00
* @return string
2015-01-22 17:18:56 +01:00
*/
public function getUrl()
{
return $this->url;
}
/**
2015-05-30 13:52:26 +02:00
* Set isArchived.
*
* @param bool $isArchived
2015-01-22 17:18:56 +01:00
*
2015-02-06 07:45:32 +01:00
* @return Entry
2015-01-22 17:18:56 +01:00
*/
2015-02-05 22:33:36 +01:00
public function setArchived($isArchived)
2015-01-22 17:18:56 +01:00
{
2015-02-05 22:33:36 +01:00
$this->isArchived = $isArchived;
2015-01-22 17:18:56 +01:00
return $this;
}
/**
2015-05-30 13:52:26 +02:00
* Get isArchived.
2015-01-22 17:18:56 +01:00
*
* @return bool
2015-01-22 17:18:56 +01:00
*/
2015-02-05 22:33:36 +01:00
public function isArchived()
2015-01-22 17:18:56 +01:00
{
2015-02-05 22:33:36 +01:00
return $this->isArchived;
2015-01-22 17:18:56 +01:00
}
/**
* @VirtualProperty
* @SerializedName("is_archived")
* @Groups({"entries_for_user", "export_all"})
*/
public function is_Archived()
{
return (int) $this->isArchived();
}
2015-01-23 12:45:24 +01:00
public function toggleArchive()
{
2015-02-05 22:33:36 +01:00
$this->isArchived = $this->isArchived() ^ 1;
2015-01-31 19:09:34 +01:00
2015-01-23 12:45:24 +01:00
return $this;
}
2015-01-22 17:18:56 +01:00
/**
2015-05-30 13:52:26 +02:00
* Set isStarred.
*
* @param bool $isStarred
2015-01-22 17:18:56 +01:00
*
2015-02-06 07:45:32 +01:00
* @return Entry
2015-01-22 17:18:56 +01:00
*/
2015-02-05 22:33:36 +01:00
public function setStarred($isStarred)
2015-01-22 17:18:56 +01:00
{
2015-02-05 22:33:36 +01:00
$this->isStarred = $isStarred;
2015-01-22 17:18:56 +01:00
return $this;
}
/**
2015-05-30 13:52:26 +02:00
* Get isStarred.
2015-01-22 17:18:56 +01:00
*
* @return bool
2015-01-22 17:18:56 +01:00
*/
2015-02-05 22:33:36 +01:00
public function isStarred()
2015-01-22 17:18:56 +01:00
{
2015-02-05 22:33:36 +01:00
return $this->isStarred;
2015-01-22 17:18:56 +01:00
}
/**
* @VirtualProperty
* @SerializedName("is_starred")
* @Groups({"entries_for_user", "export_all"})
*/
public function is_Starred()
{
return (int) $this->isStarred();
}
2015-01-23 12:45:24 +01:00
public function toggleStar()
{
2015-02-05 22:33:36 +01:00
$this->isStarred = $this->isStarred() ^ 1;
2015-01-23 12:45:24 +01:00
return $this;
}
2015-01-22 17:18:56 +01:00
/**
2015-05-30 13:52:26 +02:00
* Set content.
*
* @param string $content
2015-01-22 17:18:56 +01:00
*
2015-02-06 07:45:32 +01:00
* @return Entry
2015-01-22 17:18:56 +01:00
*/
public function setContent($content)
{
$this->content = $content;
return $this;
}
/**
2015-05-30 13:52:26 +02:00
* Get content.
2015-01-22 17:18:56 +01:00
*
2015-01-31 19:09:34 +01:00
* @return string
2015-01-22 17:18:56 +01:00
*/
public function getContent()
{
return $this->content;
}
/**
* @return User
2015-01-22 17:18:56 +01:00
*/
public function getUser()
2015-01-22 17:18:56 +01:00
{
return $this->user;
2015-01-22 17:18:56 +01:00
}
2015-02-04 17:54:23 +01:00
2016-03-13 20:17:52 +01:00
/**
* @VirtualProperty
* @SerializedName("user_name")
*/
public function getUserName()
{
return $this->user->getUserName();
}
/**
* @VirtualProperty
* @SerializedName("user_email")
*/
public function getUserEmail()
{
return $this->user->getEmail();
}
/**
* @VirtualProperty
* @SerializedName("user_id")
*/
public function getUserId()
{
return $this->user->getId();
}
2015-02-04 22:25:44 +01:00
/**
2015-02-06 14:18:01 +01:00
* @return string
2015-02-04 22:25:44 +01:00
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @return string
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
2015-02-06 07:45:32 +01:00
* @ORM\PrePersist
2015-02-04 22:25:44 +01:00
* @ORM\PreUpdate
*/
2015-02-06 07:45:32 +01:00
public function timestamps()
2015-02-04 22:25:44 +01:00
{
2015-02-06 07:45:32 +01:00
if (is_null($this->createdAt)) {
$this->createdAt = new \DateTime();
}
2015-02-04 22:25:44 +01:00
$this->updatedAt = new \DateTime();
}
/**
* @return ArrayCollection<Annotation>
2015-02-04 22:25:44 +01:00
*/
public function getAnnotations()
2015-02-04 22:25:44 +01:00
{
return $this->annotations;
2015-02-04 22:25:44 +01:00
}
/**
* @param Annotation $annotation
2015-02-04 22:25:44 +01:00
*/
public function setAnnotation(Annotation $annotation)
2015-02-04 22:25:44 +01:00
{
$this->annotations[] = $annotation;
2015-02-04 22:25:44 +01:00
}
/**
* @return string
*/
public function getMimetype()
{
return $this->mimetype;
}
/**
* @param string $mimetype
*/
public function setMimetype($mimetype)
{
$this->mimetype = $mimetype;
}
/**
* @return int
*/
public function getReadingTime()
{
return $this->readingTime;
}
/**
* @param int $readingTime
*/
public function setReadingTime($readingTime)
{
$this->readingTime = $readingTime;
}
/**
* @return string
*/
public function getDomainName()
{
return $this->domainName;
}
/**
* @param string $domainName
*/
public function setDomainName($domainName)
{
$this->domainName = $domainName;
}
/**
2015-05-30 13:52:26 +02:00
* @return bool
2015-02-04 22:25:44 +01:00
*/
public function isPublic()
2015-02-04 22:25:44 +01:00
{
return $this->isPublic;
}
/**
2015-05-30 13:52:26 +02:00
* @param bool $isPublic
2015-02-04 22:25:44 +01:00
*/
public function setIsPublic($isPublic)
2015-02-04 22:25:44 +01:00
{
$this->isPublic = $isPublic;
}
2015-02-20 20:29:33 +01:00
/**
* @return ArrayCollection<Tag>
*/
public function getTags()
{
return $this->tags;
}
/**
* @param Tag $tag
*/
public function addTag(Tag $tag)
{
if ($this->tags->contains($tag)) {
return;
}
// check if tag already exist but has not yet be persisted
// it seems that the previous condition with `contains()` doesn't check that case
foreach ($this->tags as $existingTag) {
2015-12-29 14:50:52 +01:00
if ($existingTag->getLabel() === $tag->getLabel()) {
return;
}
}
manage assets through npm first draft remote assetic totally work nearly there use at least nodejs > 0.12 use proper version of grunt bump nodejs version for travis update npm workaround for materialize install node 5.0 add grunt-cli baggy theme & cache node modules cache bower & npm make travis build assets on php7 only exclude installing node & npm if not needed & use bash clean & try to make icomoon work on baggy ready config for travis rebase make travis work more travis work impove travis & update deps add missing pixrem deps add module through oddly lost ui updates install latest nodejs add install_dev.sh, link local binaries for npm/bower/grunt ui improvements (mostly baggy) fix travis build no need to install on travis Add unread filter to entries pages Add the ability to filter for unread pages in the filters menu. Add unread filter test to EntryControllerTest Add a new test to the EntryControllerTest collection which checks that only entries which have not been archived (and are treated as "unread") are retrieved. Improve English translation Update FAQ -Fix grammar -Add notes about MTA, firewall, and SELinux Update installation instructions -Fix grammar -Add SELinux section add screenshots of android docu in English Fix the deletion of Tags/Entries relation when delete an entry Fix #2121 Move fixtures to the right place Display a message when saving an entry failed When saving an entry fail because of database error we previously just returned `false`. Now we got an error in the log and the displayed notice to the user is updated too. Change ManyToMany between entry & tag Following https://gist.github.com/Ocramius/3121916 Be sure to remove the related entity when removing an entity. Let say you have Entry -> EntryTag -> Tag. If you remove the entry: - before that commit, the EntryTag will stay (at least using SQLite). - with that commit, the related entity is removed Prepare wallabag 2.0.5 enforce older materialize version
2016-03-08 17:02:34 +01:00
$this->tags->add($tag);
2015-02-24 07:42:09 +01:00
$tag->addEntry($this);
2015-02-20 20:29:33 +01:00
}
public function removeTag(Tag $tag)
{
manage assets through npm first draft remote assetic totally work nearly there use at least nodejs > 0.12 use proper version of grunt bump nodejs version for travis update npm workaround for materialize install node 5.0 add grunt-cli baggy theme & cache node modules cache bower & npm make travis build assets on php7 only exclude installing node & npm if not needed & use bash clean & try to make icomoon work on baggy ready config for travis rebase make travis work more travis work impove travis & update deps add missing pixrem deps add module through oddly lost ui updates install latest nodejs add install_dev.sh, link local binaries for npm/bower/grunt ui improvements (mostly baggy) fix travis build no need to install on travis Add unread filter to entries pages Add the ability to filter for unread pages in the filters menu. Add unread filter test to EntryControllerTest Add a new test to the EntryControllerTest collection which checks that only entries which have not been archived (and are treated as "unread") are retrieved. Improve English translation Update FAQ -Fix grammar -Add notes about MTA, firewall, and SELinux Update installation instructions -Fix grammar -Add SELinux section add screenshots of android docu in English Fix the deletion of Tags/Entries relation when delete an entry Fix #2121 Move fixtures to the right place Display a message when saving an entry failed When saving an entry fail because of database error we previously just returned `false`. Now we got an error in the log and the displayed notice to the user is updated too. Change ManyToMany between entry & tag Following https://gist.github.com/Ocramius/3121916 Be sure to remove the related entity when removing an entity. Let say you have Entry -> EntryTag -> Tag. If you remove the entry: - before that commit, the EntryTag will stay (at least using SQLite). - with that commit, the related entity is removed Prepare wallabag 2.0.5 enforce older materialize version
2016-03-08 17:02:34 +01:00
if (!$this->tags->contains($tag)) {
return;
}
$this->tags->removeElement($tag);
manage assets through npm first draft remote assetic totally work nearly there use at least nodejs > 0.12 use proper version of grunt bump nodejs version for travis update npm workaround for materialize install node 5.0 add grunt-cli baggy theme & cache node modules cache bower & npm make travis build assets on php7 only exclude installing node & npm if not needed & use bash clean & try to make icomoon work on baggy ready config for travis rebase make travis work more travis work impove travis & update deps add missing pixrem deps add module through oddly lost ui updates install latest nodejs add install_dev.sh, link local binaries for npm/bower/grunt ui improvements (mostly baggy) fix travis build no need to install on travis Add unread filter to entries pages Add the ability to filter for unread pages in the filters menu. Add unread filter test to EntryControllerTest Add a new test to the EntryControllerTest collection which checks that only entries which have not been archived (and are treated as "unread") are retrieved. Improve English translation Update FAQ -Fix grammar -Add notes about MTA, firewall, and SELinux Update installation instructions -Fix grammar -Add SELinux section add screenshots of android docu in English Fix the deletion of Tags/Entries relation when delete an entry Fix #2121 Move fixtures to the right place Display a message when saving an entry failed When saving an entry fail because of database error we previously just returned `false`. Now we got an error in the log and the displayed notice to the user is updated too. Change ManyToMany between entry & tag Following https://gist.github.com/Ocramius/3121916 Be sure to remove the related entity when removing an entity. Let say you have Entry -> EntryTag -> Tag. If you remove the entry: - before that commit, the EntryTag will stay (at least using SQLite). - with that commit, the related entity is removed Prepare wallabag 2.0.5 enforce older materialize version
2016-03-08 17:02:34 +01:00
$tag->removeEntry($this);
}
2015-08-24 12:27:17 +02:00
/**
2015-08-24 12:35:02 +02:00
* Set previewPicture.
2015-08-24 12:27:17 +02:00
*
* @param string $previewPicture
*
* @return Entry
*/
public function setPreviewPicture($previewPicture)
{
$this->previewPicture = $previewPicture;
return $this;
}
/**
2015-08-24 12:35:02 +02:00
* Get previewPicture.
2015-08-24 12:27:17 +02:00
*
* @return string
*/
public function getPreviewPicture()
{
return $this->previewPicture;
}
2015-09-20 22:37:27 +02:00
/**
* Set language.
*
* @param string $language
*
* @return Entry
*/
public function setLanguage($language)
{
$this->language = $language;
return $this;
}
/**
* Get language.
*
* @return string
*/
public function getLanguage()
{
return $this->language;
}
2015-01-22 17:18:56 +01:00
}