Source of file EntityTimestampable.php

Size: 2,639 Bytes - Last Modified: 2023-11-16T22:56:02+01:00

/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/dorm-bundle/src/Traits/EntityTimestampable.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
<?php
namespace TIC\DormBundle\Traits;

use Doctrine\ORM\Mapping as ORM;

/**
 * Gestion automatique des champs createdAt et updatedAt d'une entité Doctrine.
 * 
 * Alternative sans nécessiter ni extension Doctrine, ni bundle tiers,
 * tels que Gedmo et StofDoctrineExtensionsBundle.
 * @see Gedmo\Timestampable\Traits\TimestampableEntity;
 * 
 * ATTENTION: nécesite d'activer sur la classe de l'entité "@ORM\HasLifecycleCallbacks"
 */
trait EntityTimestampable
{
	/**
	 * Flag permettant de désactiver les actions des méthodes en prePersist et preSave
	 */
	private $isTimestampable = true;
	
	/**
	 * @ORM\Column(type="datetime")
	 */
	private $createdAt;

	/**
	 * @ORM\Column(type="datetime", nullable=true)
	 */
	private $updatedAt;

	// --------------------------------------------------------------------- Custom methods

	/**
	 * Gestion de l'activation des actions en prePersist et preSave
	 * 
	 * @param   bool    $state  Nouvel état d'activation (true=actif / false=inactif)
	 * @return  bool            Retourne l'état d'activation en cours
	 */
	public function doTimestampable(?bool $state = null): bool
	{
		if (null !== $state) $this->isTimestampable = $state;
		return $this->isTimestampable;
	}

	// --------------------------------------------------------------------- Accessors (getters)

	/**
	 * Get the creation date.
	 */
	public function getCreatedAt(): ?\DateTimeInterface
	{
		return $this->createdAt;
	}

	/**
	 * Get the modification date.
	 */
	public function getUpdatedAt(): ?\DateTimeInterface
	{
		return $this->updatedAt;
	}

	// --------------------------------------------------------------------- Mutators (setters)

	/**
	 * Set the creation date.
	 */
	public function setCreatedAt(?\DateTimeInterface $createdAt): self
	{
		$this->createdAt = $createdAt;
		return $this;
	}

	/**
	 * Set the modification date.
	 */
	public function setUpdatedAt(?\DateTimeInterface $updatedAt): self
	{
		$this->updatedAt = $updatedAt;
		return $this;
	}

	// --------------------------------------------------------------------- Lifecycle callbacks

	/**
	 * Actions automatiques si l'entité dispose de "@ORM\HasLifecycleCallbacks"
	 * @ORM\PrePersist
	 */
	public function createTimestampableValues(): void
	{
		if (! $this->isTimestampable) return;
		$this->createdAt = new \DateTimeImmutable();
		$this->updatedAt = new \DateTimeImmutable();
	}

	/**
	 * Actions automatiques si l'entité dispose de "@ORM\HasLifecycleCallbacks"
	 * @ORM\PreUpdate
	 */
	public function updateTimestampableValues(): void
	{
		if (! $this->isTimestampable) return;
		$this->updatedAt = new \DateTimeImmutable();
	}

}