Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
13 / 13 |
CRAP | |
100.00% |
33 / 33 |
Job | |
100.00% |
1 / 1 |
|
100.00% |
13 / 13 |
21 | |
100.00% |
33 / 33 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getId | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setAbbreviation | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getAbbreviation | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setEnabled | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getEnabled | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setMandate | |
100.00% |
1 / 1 |
6 | |
100.00% |
7 / 7 |
|||
getMandate | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setTitle | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getTitle | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
addUser | |
100.00% |
1 / 1 |
3 | |
100.00% |
7 / 7 |
|||
removeUser | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
getUsers | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
<?php | |
/* | |
* This file is part of the Incipio package. | |
* | |
* (c) Théo FIDRY <theo.fidry@gmail.com> | |
* | |
* For the full copyright and license information, please view the LICENSE | |
* file that was distributed with this source code. | |
*/ | |
namespace ApiBundle\Entity; | |
use Doctrine\Common\Collections\ArrayCollection; | |
use Doctrine\ORM\Mapping as ORM; | |
use Dunglas\ApiBundle\Annotation\Iri; | |
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; | |
use Symfony\Component\Serializer\Annotation\Groups; | |
use Symfony\Component\Validator\Constraints as Assert; | |
/** | |
* @ORM\Table | |
* @ORM\Entity | |
* @ORM\EntityListeners({"ApiBundle\EventListener\Doctrine\JobListener"}) | |
* @UniqueEntity("title") | |
* | |
* @author Théo FIDRY <theo.fidry@gmail.com> | |
*/ | |
class Job | |
{ | |
/** | |
* @var int | |
* | |
* @ORM\Id | |
* @ORM\Column(type="integer") | |
* @ORM\GeneratedValue(strategy="AUTO") | |
*/ | |
private $id; | |
/** | |
* @var string Job title abbreviation. | |
* | |
* @Iri("https://schema.org/alternateName") | |
* @ORM\Column(type="string", length=255, nullable=true) | |
* @Assert\Type("string") | |
* @Assert\Length(max=20) | |
* @Groups({"job", "user"}) | |
*/ | |
private $abbreviation; | |
/** | |
* @var bool If false the job cannot be used anymore. | |
* | |
* @ORM\Column(type="boolean") | |
* @Assert\Type("bool") | |
* @Assert\NotNull | |
* @Groups({"job", "user"}) | |
*/ | |
private $enabled = true; | |
/** | |
* @var Mandate | |
* | |
* @ORM\ManyToOne(targetEntity="Mandate", inversedBy="jobs") | |
* @ORM\JoinColumn(referencedColumnName="id") | |
* @Groups({"job", "user"}) | |
*/ | |
private $mandate; | |
/** | |
* @var string | |
* | |
* @Iri("http://schema.org/roleName") | |
* @ORM\Column(type="string", length=255) | |
* @Assert\Type("string") | |
* @Assert\Length(min=2, max=100) | |
* @Assert\NotBlank | |
* @Groups({"job", "user"}) | |
*/ | |
private $title; | |
/** | |
* @var ArrayCollection|User[] | |
* | |
* @ORM\ManyToMany(targetEntity="User", inversedBy="jobs") | |
* @ORM\JoinColumn(referencedColumnName="id") | |
* @Groups({"job"}) | |
*/ | |
private $users; | |
public function __construct() | |
{ | |
$this->users = new ArrayCollection(); | |
} | |
/** | |
* @return int|null | |
*/ | |
public function getId() | |
{ | |
return $this->id; | |
} | |
/** | |
* @param string|null $abbreviation | |
* | |
* @return $this | |
*/ | |
public function setAbbreviation($abbreviation) | |
{ | |
$this->abbreviation = $abbreviation; | |
return $this; | |
} | |
/** | |
* @return string|null | |
*/ | |
public function getAbbreviation() | |
{ | |
return $this->abbreviation; | |
} | |
/** | |
* @param bool $enabled | |
* | |
* @return $this | |
*/ | |
public function setEnabled($enabled) | |
{ | |
$this->enabled = $enabled; | |
return $this; | |
} | |
/** | |
* @return bool | |
*/ | |
public function getEnabled() | |
{ | |
return $this->enabled; | |
} | |
/** | |
* @param Mandate|null $mandate | |
* | |
* @return $this | |
*/ | |
public function setMandate(Mandate $mandate = null) | |
{ | |
// Handle bidirectional relationship | |
// Check for the other side first | |
if (null === $mandate && null !== $this->mandate && true === $this->mandate->getJobs()->contains($this)) { | |
// Mandate was set and is being reset | |
// Since it's a bidirectional relationship, unset the other relation from the other side first | |
$this->mandate->removeJob($this); | |
} elseif (null !== $mandate && false === $mandate->getJobs()->contains($this)) { | |
$mandate->addJob($this); | |
} | |
$this->mandate = $mandate; | |
return $this; | |
} | |
/** | |
* @return Mandate|null | |
*/ | |
public function getMandate() | |
{ | |
return $this->mandate; | |
} | |
/** | |
* @param string $title | |
* | |
* @return $this | |
*/ | |
public function setTitle($title) | |
{ | |
$this->title = $title; | |
return $this; | |
} | |
/** | |
* @return string | |
*/ | |
public function getTitle() | |
{ | |
return $this->title; | |
} | |
/** | |
* @param User $user | |
* | |
* @return $this | |
*/ | |
public function addUser(User $user) | |
{ | |
// Check for duplication | |
if (false === $this->users->contains($user)) { | |
$this->users->add($user); | |
} | |
// Ensure the relation is bidirectional | |
if (false === $user->getJobs()->contains($this)) { | |
$user->addJob($this); | |
} | |
return $this; | |
} | |
/** | |
* @param User $user | |
* | |
* @return $this | |
*/ | |
public function removeUser(User $user) | |
{ | |
$this->users->removeElement($user); | |
// Ensure the relation is unset for both entities | |
// The check must be done to avoid circular references | |
if (true === $user->getJobs()->contains($this)) { | |
$user->removeJob($this); | |
} | |
return $this; | |
} | |
/** | |
* @return ArrayCollection|User[] | |
*/ | |
public function getUsers() | |
{ | |
return $this->users; | |
} | |
} |