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; $this->hashedUrl = UrlHasher::hashUrl($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; } /** * update isArchived and archive_at fields. * * @param bool $isArchived * * @return Entry */ public function updateArchived($isArchived = false) { $this->setArchived($isArchived); $this->setArchivedAt(null); if ($this->isArchived()) { $this->setArchivedAt(new \DateTime()); } return $this; } /** * @return \DateTimeInterface|null */ public function getArchivedAt() { return $this->archivedAt; } /** * @param \DateTimeInterface|null $archivedAt * * @return Entry */ public function setArchivedAt($archivedAt = null) { $this->archivedAt = $archivedAt; 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->updateArchived($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(); 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(); } /** * Set created_at. * Only used when importing data from an other service. * * @return Entry */ public function setCreatedAt(\DateTimeInterface $createdAt) { $this->createdAt = $createdAt; return $this; } /** * @return \DateTimeInterface */ public function getCreatedAt() { return $this->createdAt; } /** * @return \DateTimeInterface */ public function getUpdatedAt() { return $this->updatedAt; } /** * @return \DateTimeInterface|null */ public function getStarredAt() { return $this->starredAt; } /** * @param \DateTimeInterface|null $starredAt * * @return Entry */ public function setStarredAt($starredAt = null) { $this->starredAt = $starredAt; return $this; } /** * update isStarred and starred_at fields. * * @param bool $isStarred * * @return Entry */ public function updateStar($isStarred = false) { $this->setStarred($isStarred); $this->setStarredAt(null); if ($this->isStarred()) { $this->setStarredAt(new \DateTime()); } return $this; } /** * @return ArrayCollection */ public function getAnnotations() { return $this->annotations; } 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 ArrayCollection */ public function getTags() { return $this->tags; } /** * Only used during tests. */ public function getTagsLabel(): array { $tags = []; foreach ($this->tags as $tag) { $tags[] = $tag->getLabel(); } return $tags; } /** * @VirtualProperty * @SerializedName("tags") * @Groups({"entries_for_user", "export_all"}) */ public function getSerializedTags() { $data = []; foreach ($this->tags as $tag) { $data[] = $tag->getLabel(); } return $data; } 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); } /** * Remove the given tag from the entry (if the tag is associated). */ public function removeTag(Tag $tag) { if (!$this->tags->contains($tag)) { return; } $this->tags->removeElement($tag); $tag->removeEntry($this); } /** * Remove all assigned tags from the entry. */ public function removeAllTags() { foreach ($this->tags as $tag) { $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; } /** * Format the entry language to a valid html lang attribute. */ public function getHTMLLanguage() { $parsedLocale = \Locale::parseLocale($this->getLanguage()); $lang = ''; $lang .= $parsedLocale['language'] ?? ''; $lang .= isset($parsedLocale['region']) ? '-' . $parsedLocale['region'] : ''; return $lang; } /** * @return string|null */ public function getUid() { return $this->uid; } /** * @param string $uid * * @return Entry */ public function setUid($uid) { $this->uid = $uid; return $this; } public function generateUid() { if (null === $this->uid) { // @see http://blog.kevingomez.fr/til/2015/07/26/why-is-uniqid-slow/ for true parameter $this->uid = uniqid('', true); } } public function cleanUid() { $this->uid = null; } /** * Used in the entries filter so it's more explicit for the end user than the uid. * Also used in the API. * * @VirtualProperty * @SerializedName("is_public") * @Groups({"entries_for_user"}) * * @return bool */ public function isPublic() { return null !== $this->uid; } /** * @return string */ public function getHttpStatus() { return $this->httpStatus; } /** * @param string $httpStatus * * @return Entry */ public function setHttpStatus($httpStatus) { $this->httpStatus = $httpStatus; return $this; } /** * @return \DateTimeInterface */ public function getPublishedAt() { return $this->publishedAt; } /** * @return Entry */ public function setPublishedAt(\DateTimeInterface $publishedAt) { $this->publishedAt = $publishedAt; return $this; } /** * @return array */ public function getPublishedBy() { return $this->publishedBy; } /** * @param array $publishedBy * * @return Entry */ public function setPublishedBy($publishedBy) { $this->publishedBy = $publishedBy; return $this; } /** * @return array */ public function getHeaders() { return $this->headers; } /** * @param array $headers * * @return Entry */ public function setHeaders($headers) { $this->headers = $headers; return $this; } /** * Set origin url. * * @param string $originUrl * * @return Entry */ public function setOriginUrl($originUrl) { $this->originUrl = $originUrl; return $this; } /** * Get origin url. * * @return string */ public function getOriginUrl() { return $this->originUrl; } /** * Set given url. * * @param string $givenUrl * * @return Entry */ public function setGivenUrl($givenUrl) { $this->givenUrl = $givenUrl; $this->hashedGivenUrl = UrlHasher::hashUrl($givenUrl); return $this; } /** * Get given url. * * @return string */ public function getGivenUrl() { return $this->givenUrl; } /** * @return string */ public function getHashedUrl() { return $this->hashedUrl; } /** * @param mixed $hashedUrl * * @return Entry */ public function setHashedUrl($hashedUrl) { $this->hashedUrl = $hashedUrl; return $this; } }