<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Formation\Activity;
use App\Entity\Training\Training;
use App\Repository\ImageRepository;
use App\Traits\Actions;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ImageRepository::class)]
#[ApiResource]
class Image
{
use Actions;
#[ORM\Column(name: "title", type: "string", length: 255, nullable: true)]
private ?string $title;
#[ORM\Column(name: "url", type: "string", length: 255)]
private ?string $url;
private $file;
private ?string $type;
#[ORM\ManyToOne(targetEntity: Training::class, inversedBy: "images")]
#[ORM\JoinColumn(nullable: true)]
private Training $training;
#[ORM\ManyToOne(targetEntity: Activity::class, inversedBy: "images")]
#[ORM\JoinColumn(nullable: true)]
private Activity $activity;
public function __construct()
{
// date_default_timezone_set('Africa/Casablanca');
$this->createAt=new \DateTime('now');
$this->published=false;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(?string $title): self
{
$this->title = $title;
return $this;
}
public function getUrl(): ?string
{
return $this->url;
}
public function setUrl(?string $url): self
{
$this->url = $url;
return $this;
}
public function getFile()
{
return $this->file;
}
public function setFile($file): self
{
$this->file = $file;
return $this;
}
public function getType(): ?string
{
return $this->type;
}
public function setType(?string $type): self
{
$this->type = $type;
return $this;
}
public function getTraining()
{
return $this->training;
}
public function setTraining($training): self
{
$this->training = $training;
return $this;
}
public function getActivite()
{
return $this->activite;
}
public function setActivite($activite): self
{
$this->activite = $activite;
return $this;
}
public function createThumb($folder, $desired_width=100)
{
$src='images/'.$folder.'/'.$this->url;
$source_image = imagecreatefromjpeg($src);
$width = imagesx($source_image);
$height = imagesy($source_image);
// Calculer la hauteur souhaitée de la miniature en fonction de la largeur souhaitée
$desired_height = floor($height * ($desired_width / $width));
// Créer une nouvelle image vide pour la miniature
$thumbnail = imagecreatetruecolor($desired_width, $desired_height);
// Copier et redimensionner l'image source vers la miniature
imagecopyresized($thumbnail, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
// Sauvegarder la miniature dans le même dossier avec un suffixe -thumb
$thumbnail_path = pathinfo($src);
$thumbnail_name = $thumbnail_path['filename'] . '-thumb.' . $thumbnail_path['extension'];
imagejpeg($thumbnail, $thumbnail_name);
// Libérer la mémoire
imagedestroy($source_image);
imagedestroy($thumbnail);
return $thumbnail_name;
}
public function getThumb()
{
$info=pathinfo($this->url);
return $info['filename'].'-thumb.'.$info['extension'];
}
public function getActivity(): Activity
{
return $this->activity;
}
public function setActivity(Activity $activity): void
{
$this->activity = $activity;
}
}