2015-01-22 17:18:56 +01:00
|
|
|
<?php
|
|
|
|
|
|
2024-02-19 01:30:12 +01:00
|
|
|
namespace Wallabag\Entity;
|
2015-01-22 17:18:56 +01:00
|
|
|
|
2015-12-22 10:16:34 +01:00
|
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
2015-01-22 17:18:56 +01:00
|
|
|
use Doctrine\ORM\Mapping as ORM;
|
2017-07-01 09:52:38 +02:00
|
|
|
use Gedmo\Mapping\Annotation as Gedmo;
|
2015-02-20 20:29:33 +01:00
|
|
|
use JMS\Serializer\Annotation\ExclusionPolicy;
|
|
|
|
|
use JMS\Serializer\Annotation\Expose;
|
2015-12-22 10:16:34 +01:00
|
|
|
use JMS\Serializer\Annotation\XmlRoot;
|
2025-04-05 12:55:51 +02:00
|
|
|
use Wallabag\Repository\TagRepository;
|
2015-01-22 17:18:56 +01:00
|
|
|
|
|
|
|
|
/**
|
2015-05-30 13:52:26 +02:00
|
|
|
* Tag.
|
2015-01-22 17:18:56 +01:00
|
|
|
*
|
2015-02-20 17:20:12 +01:00
|
|
|
* @XmlRoot("tag")
|
2015-02-20 20:29:33 +01:00
|
|
|
* @ExclusionPolicy("all")
|
2015-01-22 17:18:56 +01:00
|
|
|
*/
|
2025-04-05 12:55:51 +02:00
|
|
|
#[ORM\Table(name: '`tag`')]
|
|
|
|
|
#[ORM\Index(columns: ['label'])]
|
|
|
|
|
#[ORM\Entity(repositoryClass: TagRepository::class)]
|
2015-02-06 18:15:19 +01:00
|
|
|
class Tag
|
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-20 20:29:33 +01:00
|
|
|
* @Expose
|
2015-01-22 17:18:56 +01:00
|
|
|
*/
|
2025-04-05 12:55:51 +02:00
|
|
|
#[ORM\Column(name: 'id', type: 'integer')]
|
|
|
|
|
#[ORM\Id]
|
|
|
|
|
#[ORM\GeneratedValue(strategy: 'AUTO')]
|
2015-01-22 17:18:56 +01:00
|
|
|
private $id;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var string
|
|
|
|
|
*
|
2015-02-20 20:29:33 +01:00
|
|
|
* @Expose
|
2015-01-22 17:18:56 +01:00
|
|
|
*/
|
2025-04-05 12:55:51 +02:00
|
|
|
#[ORM\Column(name: 'label', type: 'text')]
|
2015-02-06 18:15:19 +01:00
|
|
|
private $label;
|
2015-01-22 17:18:56 +01:00
|
|
|
|
2015-10-14 21:30:25 +02:00
|
|
|
/**
|
2015-12-29 14:50:52 +01:00
|
|
|
* @Expose
|
2023-01-09 22:18:23 +01:00
|
|
|
* @Gedmo\Slug(fields={"label"}, prefix="t:")
|
2015-10-14 21:30:25 +02:00
|
|
|
*/
|
2025-04-05 12:55:51 +02:00
|
|
|
#[ORM\Column(length: 128, unique: true)]
|
2015-10-14 21:30:25 +02:00
|
|
|
private $slug;
|
|
|
|
|
|
2025-04-05 12:55:51 +02:00
|
|
|
#[ORM\ManyToMany(targetEntity: Entry::class, mappedBy: 'tags', cascade: ['persist'])]
|
2015-02-20 20:29:33 +01:00
|
|
|
private $entries;
|
|
|
|
|
|
2015-12-29 14:50:52 +01:00
|
|
|
public function __construct()
|
2015-02-24 07:42:09 +01:00
|
|
|
{
|
|
|
|
|
$this->entries = new ArrayCollection();
|
|
|
|
|
}
|
2015-06-02 18:54:34 +02:00
|
|
|
|
|
|
|
|
public function __toString()
|
|
|
|
|
{
|
|
|
|
|
return $this->label;
|
|
|
|
|
}
|
|
|
|
|
|
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 label.
|
|
|
|
|
*
|
|
|
|
|
* @param string $label
|
2015-01-22 17:18:56 +01:00
|
|
|
*
|
2015-02-06 18:15:19 +01:00
|
|
|
* @return Tag
|
2015-01-22 17:18:56 +01:00
|
|
|
*/
|
2015-02-06 18:15:19 +01:00
|
|
|
public function setLabel($label)
|
2015-01-22 17:18:56 +01:00
|
|
|
{
|
2021-01-18 10:38:56 +01:00
|
|
|
$this->label = mb_convert_case($label, \MB_CASE_LOWER);
|
2015-01-22 17:18:56 +01:00
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2015-05-30 13:52:26 +02:00
|
|
|
* Get label.
|
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
|
|
|
*/
|
2015-02-06 18:15:19 +01:00
|
|
|
public function getLabel()
|
2015-01-22 17:18:56 +01:00
|
|
|
{
|
2015-02-20 16:38:24 +01:00
|
|
|
return $this->label;
|
2015-01-22 17:18:56 +01:00
|
|
|
}
|
2015-02-24 07:42:09 +01:00
|
|
|
|
2015-10-14 21:30:25 +02:00
|
|
|
public function getSlug()
|
|
|
|
|
{
|
|
|
|
|
return $this->slug;
|
|
|
|
|
}
|
|
|
|
|
|
2015-02-24 07:42:09 +01:00
|
|
|
public function addEntry(Entry $entry)
|
|
|
|
|
{
|
2016-05-30 14:34:11 +02:00
|
|
|
if ($this->entries->contains($entry)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->entries->add($entry);
|
|
|
|
|
$entry->addTag($this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function removeEntry(Entry $entry)
|
|
|
|
|
{
|
|
|
|
|
if (!$this->entries->contains($entry)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->entries->removeElement($entry);
|
|
|
|
|
$entry->removeTag($this);
|
2015-02-24 07:42:09 +01:00
|
|
|
}
|
2015-03-05 19:41:23 +01:00
|
|
|
|
2015-08-19 11:46:21 +02:00
|
|
|
public function hasEntry($entry)
|
|
|
|
|
{
|
|
|
|
|
return $this->entries->contains($entry);
|
|
|
|
|
}
|
2016-02-10 17:41:28 +01:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get entries for this tag.
|
|
|
|
|
*
|
|
|
|
|
* @return ArrayCollection<Entry>
|
|
|
|
|
*/
|
|
|
|
|
public function getEntries()
|
|
|
|
|
{
|
|
|
|
|
return $this->entries;
|
|
|
|
|
}
|
2016-05-03 21:12:40 +02:00
|
|
|
|
2016-05-04 11:42:52 +02:00
|
|
|
public function getEntriesByUserId($userId)
|
2016-05-03 21:12:40 +02:00
|
|
|
{
|
|
|
|
|
$filteredEntries = new ArrayCollection();
|
|
|
|
|
foreach ($this->entries as $entry) {
|
|
|
|
|
if ($entry->getUser()->getId() === $userId) {
|
|
|
|
|
$filteredEntries->add($entry);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $filteredEntries;
|
|
|
|
|
}
|
2015-01-22 17:18:56 +01:00
|
|
|
}
|