<?php
namespace App\Entity;
use App\Util\ISSN;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\SerializedName;
use Symfony\Component\Serializer\Annotation\MaxDepth;
/**
* Class Journal
* @package App\Entity
*
* @ORM\Entity(repositoryClass="App\Repository\JournalRepository")
*
* @ORM\HasLifecycleCallbacks()
*/
class Journal
{
const RESOURCE_KEY = 'journals';
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups({"api"})
*/
protected $id;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", mappedBy="favoriteJournals")
* @MaxDepth(1)
* @Groups({"api"})
*/
private $users;
/**
* @var string
* @ORM\Column(type="text", nullable=true)
* @Groups({"api"})
*/
protected $title;
/**
* @var string
* @ORM\Column(type="text", nullable=true)
* @Groups({"api"})
* @SerializedName("category") // Custom serialization name
*/
protected $categoryName;
/**
* @var string
* @ORM\Column(type="text", nullable=true)
* @Groups({"api"})
*/
protected $area;
/**
* @var Category[]
* @ORM\ManyToMany(targetEntity="Category", inversedBy="journals", cascade={"persist"})
* @Groups({"api"})
*/
private $categories;
/**
* @ORM\Column(type="text", nullable=true, name="guide")
*/
protected $guide;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $publisher;
/**
* @var string
* @ORM\Column(type="text", nullable=true)
* @Groups({"api"})
*/
protected $quartile;
/**
* @ORM\Column(type="boolean", nullable=true, options={"default":"0"})
*/
protected $isOpenAccess;
/**
* @var string
* @ORM\Column(type="string", nullable=true)
* @Groups({"api"})
*/
protected $printISSN;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $originalPrintISSN;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $originalEISSN;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $eissn;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User")
* @Groups({"api"})
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
// private $user;
/**
* @return ArrayCollection|Collection
*/
public function getUsers()
{
return $this->users;
}
/**
* @return mixed
*/
/*public function getUser()
{
return $this->user;
}*/
/**
* @param mixed $user
*/
/* public function setUser($user): void
{
$this->user = $user;
*/
/**
* @ORM\Column(type="integer", nullable=true)
*/
protected $citationCount;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $country;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $region;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $hindex;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User")
* @ORM\JoinColumn(name="contributor_id", referencedColumnName="id")
* @MaxDepth(1)
* @Groups({"api"})
*/
protected $contributor;
/**
* @ORM\Column(type="datetime" , nullable=true)
*/
private $updatedAt;
/**
* @ORM\OneToMany(targetEntity=Comment::class, mappedBy="journal", orphanRemoval=true)
* @Groups({"api"})
*/
private $comments;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $scope;
/**
* @ORM\Column(type="string", length=600, nullable=true)
*/
private $email;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $homePage;
// DOAJ DATA
/**
* @ORM\Column(type="datetime" , nullable=true)
*/
private $start_date_open_licence;
/**
* @ORM\Column(type="string", length=600, nullable=true)
*/
private $langue_manuscript;
/**
* @ORM\Column(type="string", length=600, nullable=true)
*/
private $country_publisher;
/**
* @ORM\Column(type="string", length=1000, nullable=true)
*/
private $licence;
/**
* @ORM\Column(type="string", length=1000, nullable=true)
*/
private $review_url;
/**
* @ORM\Column(type="string", length=1000, nullable=true)
*/
private $aim_scoop_url;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $weeks_between_submission_publication;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $added_in_doaj_at;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $last_updated_in_doaj_at;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $recent_article_added_at;
// DOAJ DATA
/**
* @ORM\Column(type="text", nullable=true)
*/
private $howToPublish;
/**
* @ORM\OneToMany(targetEntity=Contribution::class, mappedBy="journal", orphanRemoval=true)
*/
private $contributions;
/**
* @ORM\OneToMany(targetEntity=Report::class, mappedBy="journal")
*/
private $reports;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $sjr;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $total_doc_last_year;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $total_docs_3_years;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $total_refs;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $total_cites_3_years;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $citable_docs_3_years;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $cites_docs_2_years;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $ref_per_doc;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $female;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $overton;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $sdg;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $coverage;
public function __construct()
{
$this->categories = new ArrayCollection();
$this->comments = new ArrayCollection();
$this->contributions = new ArrayCollection();
$this->users = new ArrayCollection();
$this->reports = new ArrayCollection();
}
/**
* @return User|null
* @Groups({"api"})
*/
public function getContributor(): ?User
{
return $this->contributor;
}
/**
* @param User $contributor
*/
public function setContributor(User $contributor): void
{
$this->contributor = $contributor;
}
/**
* @return mixed
* @Groups({"api"})
*/
public function getId()
{
return $this->id;
}
/**
* @return mixed
* @Groups({"api"})
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* @param mixed $updatedAt
*/
public function setUpdatedAt($updatedAt): void
{
$this->updatedAt = $updatedAt;
}
/**
* @return mixed
*/
public function getTitle()
{
return $this->title;
}
/**
* @param mixed $title
*/
public function setTitle($title)
{
$this->title = $title;
}
/**
* @return mixed
*/
public function getPublisher()
{
return $this->publisher;
}
/**
* @param mixed $publisher
*/
public function setPublisher($publisher): void
{
$this->publisher = $publisher;
}
/**
* @return mixed
*/
public function getEissn()
{
return $this->eissn;
}
/**
* @param mixed $eissn
*/
public function setEissn($eissn): void
{
$this->eissn = $eissn;
}
/**
* @return Collection<Category>
* @Groups({"api"})
*/
public function getCategories(): Collection
{
return $this->categories;
}
public function addCategory(Category $c): self
{
if (!$this->categories->contains($c)) {
$this->categories[] = $c;
$c->addJournal($this);
}
return $this;
}
public function removeCategory(Category $c): self
{
if ($this->categories->contains($c)) {
$this->categories->removeElement($c);
if ($c->getJournals()->contains($this)) {
$c->addJournal(null);
}
}
return $this;
}
/**
* @return string
* @Groups({"api"})
*/
public function getCategoryName(): ?string
{
return $this->categoryName;
}
/**
* @param string $categoryName
* @return Journal
*/
public function setCategoryName(string $categoryName): Journal
{
$this->categoryName = $categoryName;
return $this;
}
/**
* @return string|null
*/
public function getQuartile(): ?string
{
return $this->quartile;
}
/**
* @param mixed $quartile
* @return Journal
*/
public function setQuartile($quartile)
{
$this->quartile = $quartile;
return $this;
}
/**
* @return mixed
*/
public function getIsOpenAccess()
{
return $this->isOpenAccess;
}
/**
* @param mixed $isOpenAccess
* @return Journal
*/
public function setIsOpenAccess($isOpenAccess)
{
$this->isOpenAccess = $isOpenAccess;
return $this;
}
/**
* @return string|null
*/
public function getPrintISSN(): ?string
{
return $this->printISSN;
}
/**
* @param mixed $printISSN
* @return Journal
*/
public function setPrintISSN($printISSN)
{
$this->printISSN = $printISSN;
return $this;
}
/**
* @return mixed
*/
public function getCitationCount()
{
return $this->citationCount;
}
/**
* @param mixed $citationCount
* @return Journal
*/
public function setCitationCount($citationCount)
{
if (is_string($citationCount)) {
$citationCount = (int)str_replace(',', '', $citationCount);
}
$this->citationCount = $citationCount;
return $this;
}
/**
* @return mixed
*/
public function getOriginalPrintISSN()
{
return $this->originalPrintISSN;
}
/**
* @param mixed $originalPrintISSN
* @return Journal
*/
public function setOriginalPrintISSN($originalPrintISSN)
{
$this->originalPrintISSN = $originalPrintISSN;
return $this;
}
/**
* @return mixed
*/
public function getOriginalEISSN()
{
return $this->originalEISSN;
}
/**
* @param mixed $originalEISSN
* @return Journal
*/
public function setOriginalEISSN($originalEISSN)
{
$this->originalEISSN = $originalEISSN;
return $this;
}
/**
* @ORM\PrePersist()
*/
public function setISSNValue()
{
if (!empty(ISSN::format($this->originalPrintISSN))) {
$this->setPrintISSN(ISSN::format($this->originalPrintISSN));
}
elseif (!empty(ISSN::format($this->originalEISSN))){
$this->setPrintISSN(ISSN::format($this->originalEISSN));
}
}
/**
* @ORM\PrePersist()
*/
public function setEISSNValue()
{
if (!empty(ISSN::format($this->originalEISSN))) {
$this->setEissn(ISSN::format($this->originalEISSN));
}
elseif (!empty(ISSN::format($this->originalPrintISSN))) {
$this->setEissn(ISSN::format($this->originalPrintISSN));
}
}
/**
* @return mixed
*/
public function getCountry()
{
return $this->country;
}
/**
* @param mixed $country
*/
public function setCountry($country): void
{
$this->country = $country;
}
/**
* @return mixed
*/
public function getRegion()
{
return $this->region;
}
/**
* @param mixed $region
*/
public function setRegion($region): void
{
$this->region = $region;
}
/**
* @return string
*/
public function getArea(): ?string
{
return $this->area;
}
/**
* @param string $area
*/
public function setArea(?string $area): void
{
$this->area = $area;
}
/**
* @return ArrayCollection|Collection
* @Groups({"api"})
*/
public function getComments()
{
return $this->comments;
}
public function addComment(Comment $comment): self
{
if (!$this->comments->contains($comment)) {
$this->comments[] = $comment;
$comment->setJournal($this);
}
return $this;
}
public function removeComment(Comment $comment): self
{
if ($this->comments->removeElement($comment)) {
// set the owning side to null (unless already changed)
if ($comment->getJournal() === $this) {
$comment->setJournal(null);
}
}
return $this;
}
/**
* @return mixed
*/
public function getScope()
{
return $this->scope;
}
/**
* @param mixed $scope
*/
public function setScope($scope): void
{
$this->scope = $scope;
}
/**
* @return mixed
*/
public function getEmail()
{
return $this->email;
}
/**
* @param mixed $email
*/
public function setEmail($email): void
{
$this->email = $email;
}
/**
* @return mixed
*/
public function getHomePage()
{
return $this->homePage;
}
/**
* @param mixed $homePage
*/
public function setHomePage($homePage): void
{
$this->homePage = $homePage;
}
/**
* @return mixed
*/
public function getHowToPublish()
{
return $this->howToPublish;
}
/**
* @param mixed $howToPublish
*/
public function setHowToPublish($howToPublish): void
{
$this->howToPublish = $howToPublish;
}
/**
* @return mixed
*/
public function getStartDateOpenLicence()
{
return $this->start_date_open_licence;
}
/**
* @param mixed $start_date_open_licence
*/
public function setStartDateOpenLicence($start_date_open_licence): void
{
$this->start_date_open_licence = $start_date_open_licence;
}
/**
* @return mixed
*/
public function getLangueManuscript()
{
return $this->langue_manuscript;
}
/**
* @param mixed $langue_manuscript
*/
public function setLangueManuscript($langue_manuscript): void
{
$this->langue_manuscript = $langue_manuscript;
}
/**
* @return mixed
*/
public function getCountryPublisher()
{
return $this->country_publisher;
}
/**
* @param mixed $country_publisher
*/
public function setCountryPublisher($country_publisher): void
{
$this->country_publisher = $country_publisher;
}
/**
* @return mixed
*/
public function getLicence()
{
return $this->licence;
}
/**
* @param mixed $licence
*/
public function setLicence($licence): void
{
$this->licence = $licence;
}
/**
* @return mixed
*/
public function getReviewUrl()
{
return $this->review_url;
}
/**
* @param mixed $review_url
*/
public function setReviewUrl($review_url): void
{
$this->review_url = $review_url;
}
/**
* @return mixed
*/
public function getAimScoopUrl()
{
return $this->aim_scoop_url;
}
/**
* @param mixed $aim_scoop_url
*/
public function setAimScoopUrl($aim_scoop_url): void
{
$this->aim_scoop_url = $aim_scoop_url;
}
/**
* @return mixed
*/
public function getAddedInDoajAt()
{
return $this->added_in_doaj_at;
}
/**
* @param mixed $added_in_doaj_at
*/
public function setAddedInDoajAt($added_in_doaj_at): void
{
$this->added_in_doaj_at = $added_in_doaj_at;
}
/**
* @return mixed
*/
public function getLastUpdatedInDoajAt()
{
return $this->last_updated_in_doaj_at;
}
/**
* @param mixed $last_updated_in_doaj_at
*/
public function setLastUpdatedInDoajAt($last_updated_in_doaj_at): void
{
$this->last_updated_in_doaj_at = $last_updated_in_doaj_at;
}
/**
* @return mixed
*/
public function getRecentArticleAddedAt()
{
return $this->recent_article_added_at;
}
/**
* @param mixed $recent_article_added_at
*/
public function setRecentArticleAddedAt($recent_article_added_at): void
{
$this->recent_article_added_at = $recent_article_added_at;
}
/**
* @return mixed
*/
public function getWeeksBetweenSubmissionPublication()
{
return $this->weeks_between_submission_publication;
}
/**
* @param mixed $weeks_between_submission_publication
*/
public function setWeeksBetweenSubmissionPublication($weeks_between_submission_publication): void
{
$this->weeks_between_submission_publication = $weeks_between_submission_publication;
}
/**
* @return mixed
*/
public function getGuide()
{
return $this->guide;
}
/**
* @param mixed $guide
*/
public function setGuide($guide): void
{
$this->guide = $guide;
}
/**
* @return Collection<int, Contribution>
*/
public function getContributions(): Collection
{
return $this->contributions;
}
public function addContribution(Contribution $contribution): self
{
if (!$this->contributions->contains($contribution)) {
$this->contributions[] = $contribution;
$contribution->setJournal($this);
}
return $this;
}
public function removeContribution(Contribution $contribution): self
{
if ($this->contributions->removeElement($contribution)) {
// set the owning side to null (unless already changed)
if ($contribution->getJournal() === $this) {
$contribution->setJournal(null);
}
}
return $this;
}
/**
* @return Collection<int, Report>
*/
public function getReports(): Collection
{
return $this->reports;
}
public function addReport(Report $report): self
{
if (!$this->reports->contains($report)) {
$this->reports[] = $report;
$report->setJournal($this);
}
return $this;
}
public function removeReport(Report $report): self
{
if ($this->reports->removeElement($report)) {
// set the owning side to null (unless already changed)
if ($report->getJournals() === $this) {
$report->setJournal(null);
}
}
return $this;
}
/**
* @return mixed
*/
public function getHindex()
{
return $this->hindex;
}
/**
* @param mixed $hindex
*/
public function setHindex($hindex): void
{
$this->hindex = $hindex;
}
public function getSjr(): ?string
{
return $this->sjr;
}
public function setSjr(?string $sjr): self
{
$this->sjr = $sjr;
return $this;
}
public function getTotalDocLastYear(): ?string
{
return $this->total_doc_last_year;
}
public function setTotalDocLastYear(?string $total_doc_last_year): self
{
$this->total_doc_last_year = $total_doc_last_year;
return $this;
}
public function getTotalDocs3Years(): ?string
{
return $this->total_docs_3_years;
}
public function setTotalDocs3Years(?string $total_docs_3_years): self
{
$this->total_docs_3_years = $total_docs_3_years;
return $this;
}
public function getTotalRefs(): ?string
{
return $this->total_refs;
}
public function setTotalRefs(?string $total_refs): self
{
$this->total_refs = $total_refs;
return $this;
}
public function getTotalCites3Years(): ?string
{
return $this->total_cites_3_years;
}
public function setTotalCites3Years(?string $total_cites_3_years): self
{
$this->total_cites_3_years = $total_cites_3_years;
return $this;
}
public function getCitableDocs3Years(): ?string
{
return $this->citable_docs_3_years;
}
public function setCitableDocs3Years(?string $citable_docs_3_years): self
{
$this->citable_docs_3_years = $citable_docs_3_years;
return $this;
}
public function getCitesDocs2Years(): ?string
{
return $this->cites_docs_2_years;
}
public function setCitesDocs2Years(?string $cites_docs_2_years): self
{
$this->cites_docs_2_years = $cites_docs_2_years;
return $this;
}
public function getRefPerDoc(): ?string
{
return $this->ref_per_doc;
}
public function setRefPerDoc(?string $ref_per_doc): self
{
$this->ref_per_doc = $ref_per_doc;
return $this;
}
public function getFemale(): ?string
{
return $this->female;
}
public function setFemale(?string $female): self
{
$this->female = $female;
return $this;
}
public function getOverton(): ?string
{
return $this->overton;
}
public function setOverton(?string $overton): self
{
$this->overton = $overton;
return $this;
}
public function getSdg(): ?string
{
return $this->sdg;
}
public function setSdg(?string $sdg): self
{
$this->sdg = $sdg;
return $this;
}
public function getCoverage(): ?string
{
return $this->coverage;
}
public function setCoverage(?string $coverage): self
{
$this->coverage = $coverage;
return $this;
}
}