wallabag/src/Wallabag/CoreBundle/Entity/Entry.php
Thomas Citharel 5ecdfcd041 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-06-09 17:12:51 +02:00

599 lines
11 KiB
PHP

<?php
namespace Wallabag\CoreBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Hateoas\Configuration\Annotation as Hateoas;
use JMS\Serializer\Annotation\Groups;
use JMS\Serializer\Annotation\XmlRoot;
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;
/**
* Entry.
*
* @XmlRoot("entry")
* @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\EntryRepository")
* @ORM\Table(name="`entry`")
* @ORM\HasLifecycleCallbacks()
* @Hateoas\Relation("self", href = "expr('/api/entries/' ~ object.getId())")
*/
class Entry
{
/** @Serializer\XmlAttribute */
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
* @Groups({"entries_for_user", "export_all"})
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $title;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="url", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $url;
/**
* @var bool
*
* @Exclude
*
* @ORM\Column(name="is_archived", type="boolean")
*
* @Groups({"entries_for_user", "export_all"})
*/
private $isArchived = false;
/**
* @var bool
*
* @Exclude
*
* @ORM\Column(name="is_starred", type="boolean")
*
* @Groups({"entries_for_user", "export_all"})
*/
private $isStarred = false;
/**
* @var string
*
* @ORM\Column(name="content", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $content;
/**
* @var date
*
* @ORM\Column(name="created_at", type="datetime")
*
* @Groups({"export_all"})
*/
private $createdAt;
/**
* @var date
*
* @ORM\Column(name="updated_at", type="datetime")
*
* @Groups({"export_all"})
*/
private $updatedAt;
/**
* @ORM\OneToMany(targetEntity="Wallabag\AnnotationBundle\Entity\Annotation", mappedBy="entry", cascade={"persist", "remove"})
* @ORM\JoinTable
*
* @Groups({"entries_for_user", "export_all"})
*/
private $annotations;
/**
* @var string
*
* @ORM\Column(name="mimetype", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $mimetype;
/**
* @var string
*
* @ORM\Column(name="language", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $language;
/**
* @var int
*
* @ORM\Column(name="reading_time", type="integer", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $readingTime;
/**
* @var string
*
* @ORM\Column(name="domain_name", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $domainName;
/**
* @var string
*
* @ORM\Column(name="preview_picture", type="text", nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
private $previewPicture;
/**
* @var bool
*
* @ORM\Column(name="is_public", type="boolean", nullable=true, options={"default" = false})
*
* @Groups({"export_all"})
*/
private $isPublic;
/**
* @Exclude
*
* @ORM\ManyToOne(targetEntity="Wallabag\UserBundle\Entity\User", inversedBy="entries")
*
* @Groups({"export_all"})
*/
private $user;
/**
* @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"})
*/
private $tags;
/*
* @param User $user
*/
public function __construct(User $user)
{
$this->user = $user;
$this->tags = new ArrayCollection();
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set title.
*
* @param string $title
*
* @return Entry
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
* Get title.
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set url.
*
* @param string $url
*
* @return Entry
*/
public function setUrl($url)
{
$this->url = $url;
return $this;
}
/**
* Get url.
*
* @return string
*/
public function getUrl()
{
return $this->url;
}
/**
* Set isArchived.
*
* @param bool $isArchived
*
* @return Entry
*/
public function setArchived($isArchived)
{
$this->isArchived = $isArchived;
return $this;
}
/**
* Get isArchived.
*
* @return bool
*/
public function isArchived()
{
return $this->isArchived;
}
/**
* @VirtualProperty
* @SerializedName("is_archived")
* @Groups({"entries_for_user", "export_all"})
*/
public function is_Archived()
{
return (int) $this->isArchived();
}
public function toggleArchive()
{
$this->isArchived = $this->isArchived() ^ 1;
return $this;
}
/**
* Set isStarred.
*
* @param bool $isStarred
*
* @return Entry
*/
public function setStarred($isStarred)
{
$this->isStarred = $isStarred;
return $this;
}
/**
* Get isStarred.
*
* @return bool
*/
public function isStarred()
{
return $this->isStarred;
}
/**
* @VirtualProperty
* @SerializedName("is_starred")
* @Groups({"entries_for_user", "export_all"})
*/
public function is_Starred()
{
return (int) $this->isStarred();
}
public function toggleStar()
{
$this->isStarred = $this->isStarred() ^ 1;
return $this;
}
/**
* Set content.
*
* @param string $content
*
* @return Entry
*/
public function setContent($content)
{
$this->content = $content;
return $this;
}
/**
* Get content.
*
* @return string
*/
public function getContent()
{
return $this->content;
}
/**
* @return User
*/
public function getUser()
{
return $this->user;
}
/**
* @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();
}
/**
* @return string
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @return string
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function timestamps()
{
if (is_null($this->createdAt)) {
$this->createdAt = new \DateTime();
}
$this->updatedAt = new \DateTime();
}
/**
* @return ArrayCollection<Annotation>
*/
public function getAnnotations()
{
return $this->annotations;
}
/**
* @param Annotation $annotation
*/
public function setAnnotation(Annotation $annotation)
{
$this->annotations[] = $annotation;
}
/**
* @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;
}
/**
* @return bool
*/
public function isPublic()
{
return $this->isPublic;
}
/**
* @param bool $isPublic
*/
public function setIsPublic($isPublic)
{
$this->isPublic = $isPublic;
}
/**
* @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) {
if ($existingTag->getLabel() === $tag->getLabel()) {
return;
}
}
$this->tags->add($tag);
$tag->addEntry($this);
}
public function removeTag(Tag $tag)
{
if (!$this->tags->contains($tag)) {
return;
}
$this->tags->removeElement($tag);
$tag->removeEntry($this);
}
/**
* Set previewPicture.
*
* @param string $previewPicture
*
* @return Entry
*/
public function setPreviewPicture($previewPicture)
{
$this->previewPicture = $previewPicture;
return $this;
}
/**
* Get previewPicture.
*
* @return string
*/
public function getPreviewPicture()
{
return $this->previewPicture;
}
/**
* 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;
}
}