<?php
declare(strict_types=1);
namespace App\Entity;
use App\Repository\ActionRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Action.
*
* @ORM\Table(name="Action")
*
* @ORM\Entity(repositoryClass=ActionRepository::class)
*/
class Action
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
*
* @ORM\Id
*
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="intitule", type="string", length=255, nullable=true)
*/
private $intitule;
/**
* @var string
*
* @ORM\Column(name="referent", type="string", length=255, nullable=true)
*/
private $referent;
#[Assert\File(maxSize: '1024k', mimeTypes: ['application/pdf', 'application/x-pdf'], mimeTypesMessage: 'Please upload a valid PDF')]
protected $document;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255, nullable=true)
*/
private $email;
/**
* @var string
*
* @ORM\Column(name="descriptif", type="text", nullable=true)
*/
private $descriptif;
/**
* @var string
*
* @ORM\Column(name="origine", type="text", nullable=true)
*/
private $origine;
/**
* @var string
*
* @ORM\Column(name="objectif", type="text", nullable=true)
*/
private $objectif;
/**
* @var string
*
* @ORM\Column(name="impact", type="text", nullable=true)
*/
private $impact;
/**
* @var string
*
* @ORM\Column(name="reussite", type="text", nullable=true)
*/
private $reussite;
/**
* @var string
*
* @ORM\Column(name="limite", type="text", nullable=true)
*/
private $limite;
/**
* @ORM\ManyToOne(targetEntity="Structure", inversedBy="actions")
*
* @ORM\JoinColumn(name="structure_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $structure;
/**
* @ORM\ManyToOne(targetEntity="ActionPublic", inversedBy="actions")
*
* @ORM\JoinColumn(name="action_public_id", referencedColumnName="id")
*/
private $actionPublic;
/**
* @ORM\ManyToOne(targetEntity="ActionCulturelle", inversedBy="actions")
*
* @ORM\JoinColumn(name="action_culturelle_id", referencedColumnName="id")
*/
private $actionCulturelle;
/**
* @ORM\ManyToOne(targetEntity="ActionEconomique", inversedBy="actions")
*
* @ORM\JoinColumn(name="action_economique_id", referencedColumnName="id")
*/
private $actionEconomique;
/**
* @ORM\ManyToOne(targetEntity="ActionFamiliale", inversedBy="actions")
*
* @ORM\JoinColumn(name="action_familiale_id", referencedColumnName="id")
*/
private $actionFamiliale;
/**
* @ORM\ManyToOne(targetEntity="ActionPolitique", inversedBy="actions")
*
* @ORM\JoinColumn(name="action_politique_id", referencedColumnName="id")
*/
private $actionPolitique;
/**
* @ORM\ManyToMany(targetEntity="ActionTag", cascade={"persist"})
*
* @ORM\JoinTable(name="actions_tag")
*/
private $actionTag;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
protected $path;
/**
* @Gedmo\Timestampable(on="create")
*
* @ORM\Column(name="created", type="datetime")
*/
private $created;
/**
* @ORM\Column(name="updated", type="datetime")
*
* @Gedmo\Timestampable(on="update")
*/
private $updated;
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set intitule.
*
* @param string $intitule
*/
public function setIntitule($intitule): static
{
$this->intitule = $intitule;
return $this;
}
/**
* Get intitule.
*
* @return string
*/
public function getIntitule()
{
return $this->intitule;
}
/**
* Set referent.
*
* @param string $referent
*/
public function setReferent($referent): static
{
$this->referent = $referent;
return $this;
}
/**
* Get referent.
*
* @return string
*/
public function getReferent()
{
return $this->referent;
}
/**
* Set document.
*/
public function setDocument(?File $file = null): void
{
$this->document = $file;
}
/**
* Get document.
*
* @return string
*/
public function getDocument()
{
return $this->document;
}
/**
* Set descriptif.
*
* @param string $descriptif
*/
public function setDescriptif($descriptif): static
{
$this->descriptif = $descriptif;
return $this;
}
/**
* Get descriptif.
*
* @return string
*/
public function getDescriptif()
{
return $this->descriptif;
}
/**
* Set origine.
*
* @param string $origine
*/
public function setOrigine($origine): static
{
$this->origine = $origine;
return $this;
}
/**
* Get origine.
*
* @return string
*/
public function getOrigine()
{
return $this->origine;
}
/**
* Set objectif.
*
* @param string $objectif
*/
public function setObjectif($objectif): static
{
$this->objectif = $objectif;
return $this;
}
/**
* Get objectif.
*
* @return string
*/
public function getObjectif()
{
return $this->objectif;
}
/**
* Set impact.
*
* @param string $impact
*/
public function setImpact($impact): static
{
$this->impact = $impact;
return $this;
}
/**
* Get impact.
*
* @return string
*/
public function getImpact()
{
return $this->impact;
}
/**
* Set reussite.
*
* @param string $reussite
*/
public function setReussite($reussite): static
{
$this->reussite = $reussite;
return $this;
}
/**
* Get reussite.
*
* @return string
*/
public function getReussite()
{
return $this->reussite;
}
/**
* Set limite.
*
* @param string $limite
*/
public function setLimite($limite): static
{
$this->limite = $limite;
return $this;
}
/**
* Get limite.
*
* @return string
*/
public function getLimite()
{
return $this->limite;
}
/**
* Constructor.
*/
public function __construct()
{
$this->actionPublic = new \Doctrine\Common\Collections\ArrayCollection();
$this->actionTag = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add actionPublic.
*/
public function addActionPublic(ActionPublic $actionPublic): static
{
$this->actionPublic[] = $actionPublic;
return $this;
}
/**
* Remove actionPublic.
*/
public function removeActionPublic(ActionPublic $actionPublic): void
{
$this->actionPublic->removeElement($actionPublic);
}
/**
* Get actionPublic.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getActionPublic()
{
return $this->actionPublic;
}
/**
* Set actionCulturelle.
*/
public function setActionCulturelle(?ActionCulturelle $actionCulturelle = null): static
{
$this->actionCulturelle = $actionCulturelle;
return $this;
}
/**
* Get actionCulturelle.
*
* @return ActionCulturelle
*/
public function getActionCulturelle()
{
return $this->actionCulturelle;
}
/**
* Set actionEconomique.
*/
public function setActionEconomique(?ActionEconomique $actionEconomique = null): static
{
$this->actionEconomique = $actionEconomique;
return $this;
}
/**
* Get actionEconomique.
*
* @return ActionEconomique
*/
public function getActionEconomique()
{
return $this->actionEconomique;
}
/**
* Set actionFamiliale.
*/
public function setActionFamiliale(?ActionFamiliale $actionFamiliale = null): static
{
$this->actionFamiliale = $actionFamiliale;
return $this;
}
/**
* Get actionFamiliale.
*
* @return ActionFamiliale
*/
public function getActionFamiliale()
{
return $this->actionFamiliale;
}
/**
* Set actionPolitique.
*/
public function setActionPolitique(?ActionPolitique $actionPolitique = null): static
{
$this->actionPolitique = $actionPolitique;
return $this;
}
/**
* Get actionPolitique.
*
* @return ActionPolitique
*/
public function getActionPolitique()
{
return $this->actionPolitique;
}
/**
* Add actionTag.
*/
public function addActionTag(ActionTag $actionTag): static
{
$this->actionTag[] = $actionTag;
return $this;
}
/**
* Remove actionTag.
*/
public function removeActionTag(ActionTag $actionTag): void
{
$this->actionTag->removeElement($actionTag);
}
/**
* Get actionTag.
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getActionTag()
{
return $this->actionTag;
}
/**
* Get path.
*
* @return string
*/
public function getPath()
{
return $this->path;
}
/**
* Set structure.
*/
public function setStructure(?Structure $structure = null): static
{
$this->structure = $structure;
return $this;
}
/**
* Get structure.
*
* @return Structure
*/
public function getStructure()
{
return $this->structure;
}
public function getAbsolutePath()
{
return null === $this->path ? null : $this->getUploadRootDir().'/'.$this->path;
}
public function getWebPath()
{
return (null === $this->path && file_exists($this->getAbsolutePath())) ? null : $this->getUploadDir().'/'.$this->path;
}
protected function getUploadRootDir(): string
{
// the absolute directory path where uploaded documents should be saved
// return $basepath.$this->getUploadDir();
return __DIR__.'/../../public/'.$this->getUploadDir();
}
protected function getUploadDir(): string
{
// get rid of the __DIR__ so it doesn't screw when displaying uploaded doc/image in the view.
return 'uploads/actions/documents';
}
public function upload($basepath): void
{
// the file property can be empty if the field is not required
if (null === $this->document) {
return;
}
if (null === $basepath) {
return;
}
// we use the original file name here but you should
// sanitize it at least to avoid any security issues
// move takes the target directory and then the target filename to move to
$this->document->move($this->getUploadRootDir(), $this->document->getClientOriginalName());
// set the path property to the filename where you'ved saved the file
$this->path = $this->document->getClientOriginalName();
// clean up the file property as you won't need it anymore
$this->document = null;
}
public function getDocumentSize(): ?string
{
if (file_exists($this->getAbsolutePath())) {
$bytes = filesize($this->getAbsolutePath());
$human_filesize = $this->human_filesize($bytes);
} else {
$human_filesize = null;
}
return $human_filesize;
}
private function human_filesize(int|bool $bytes, $decimals = 2): string
{
$sz = 'BKMGTP';
$factor = floor((strlen(strval($bytes)) - 1) / 3);
return sprintf(sprintf('%%.%sf', $decimals), $bytes / 1024 ** $factor).@$sz[$factor];
}
public function getCreated()
{
return $this->created;
}
public function getUpdated()
{
return $this->updated;
}
/**
* Set path.
*
* @param string $path
*/
public function setPath($path): static
{
$this->path = $path;
return $this;
}
/**
* Set created.
*
* @param \DateTime $created
*/
public function setCreated($created): static
{
$this->created = $created;
return $this;
}
/**
* Set updated.
*
* @param \DateTime $updated
*/
public function setUpdated($updated): static
{
$this->updated = $updated;
return $this;
}
/**
* Set actionPublic.
*/
public function setActionPublic(?ActionPublic $actionPublic = null): static
{
$this->actionPublic = $actionPublic;
return $this;
}
/**
* Set email.
*
* @param string $email
*/
public function setEmail($email): static
{
$this->email = $email;
return $this;
}
/**
* Get email.
*
* @return string
*/
public function getEmail()
{
return $this->email;
}
}