Bookings - Create model:
- Booking model. - BookingCustomer model. - BookingRoom
This commit is contained in:
@@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace DoctrineMigrations;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-generated Migration: Please modify to your needs!
|
||||||
|
*/
|
||||||
|
final class Version20240508180113 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this up() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('CREATE SEQUENCE booking_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
|
||||||
|
$this->addSql('CREATE SEQUENCE booking_customer_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
|
||||||
|
$this->addSql('CREATE SEQUENCE booking_room_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
|
||||||
|
$this->addSql('CREATE TABLE booking (id INT NOT NULL, arrival_date DATE NOT NULL, departure_date DATE NOT NULL, booking_time TIMESTAMP(0) WITH TIME ZONE NOT NULL, PRIMARY KEY(id))');
|
||||||
|
$this->addSql('CREATE TABLE booking_customer (id INT NOT NULL, booking_id INT NOT NULL, name VARCHAR(64) NOT NULL, surname VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, phone_number VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
|
||||||
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_BA0D10843301C60 ON booking_customer (booking_id)');
|
||||||
|
$this->addSql('CREATE TABLE booking_room (id INT NOT NULL, booking_id INT NOT NULL, room_category_id INT NOT NULL, guest_number INT NOT NULL, room_price INT NOT NULL, amount INT NOT NULL, PRIMARY KEY(id))');
|
||||||
|
$this->addSql('CREATE INDEX IDX_6A0E73D53301C60 ON booking_room (booking_id)');
|
||||||
|
$this->addSql('CREATE INDEX IDX_6A0E73D567333DD ON booking_room (room_category_id)');
|
||||||
|
$this->addSql('ALTER TABLE booking_customer ADD CONSTRAINT FK_BA0D10843301C60 FOREIGN KEY (booking_id) REFERENCES booking (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||||
|
$this->addSql('ALTER TABLE booking_room ADD CONSTRAINT FK_6A0E73D53301C60 FOREIGN KEY (booking_id) REFERENCES booking (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||||
|
$this->addSql('ALTER TABLE booking_room ADD CONSTRAINT FK_6A0E73D567333DD FOREIGN KEY (room_category_id) REFERENCES room_category (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
// this down() migration is auto-generated, please modify it to your needs
|
||||||
|
$this->addSql('CREATE SCHEMA public');
|
||||||
|
$this->addSql('DROP SEQUENCE booking_id_seq CASCADE');
|
||||||
|
$this->addSql('DROP SEQUENCE booking_customer_id_seq CASCADE');
|
||||||
|
$this->addSql('DROP SEQUENCE booking_room_id_seq CASCADE');
|
||||||
|
$this->addSql('ALTER TABLE booking_customer DROP CONSTRAINT FK_BA0D10843301C60');
|
||||||
|
$this->addSql('ALTER TABLE booking_room DROP CONSTRAINT FK_6A0E73D53301C60');
|
||||||
|
$this->addSql('ALTER TABLE booking_room DROP CONSTRAINT FK_6A0E73D567333DD');
|
||||||
|
$this->addSql('DROP TABLE booking');
|
||||||
|
$this->addSql('DROP TABLE booking_customer');
|
||||||
|
$this->addSql('DROP TABLE booking_room');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use App\Repository\BookingRepository;
|
||||||
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
|
use Doctrine\Common\Collections\Collection;
|
||||||
|
use Doctrine\DBAL\Types\Types;
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
#[ORM\Entity(repositoryClass: BookingRepository::class)]
|
||||||
|
class Booking
|
||||||
|
{
|
||||||
|
#[ORM\Id]
|
||||||
|
#[ORM\GeneratedValue]
|
||||||
|
#[ORM\Column]
|
||||||
|
private ?int $id = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATE_MUTABLE)]
|
||||||
|
private ?\DateTimeInterface $ArrivalDate = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATE_MUTABLE)]
|
||||||
|
private ?\DateTimeInterface $DepartureDate = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATETIMETZ_MUTABLE)]
|
||||||
|
private ?\DateTimeInterface $BookingTime = null;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(mappedBy: 'Booking', cascade: ['persist', 'remove'])]
|
||||||
|
private ?BookingCustomer $bookingCustomer = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Collection<int, BookingRoom>
|
||||||
|
*/
|
||||||
|
#[ORM\OneToMany(targetEntity: BookingRoom::class, mappedBy: 'Booking', orphanRemoval: true)]
|
||||||
|
private Collection $bookingRooms;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->bookingRooms = new ArrayCollection();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getId(): ?int
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getArrivalDate(): ?\DateTimeInterface
|
||||||
|
{
|
||||||
|
return $this->ArrivalDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setArrivalDate(\DateTimeInterface $ArrivalDate): static
|
||||||
|
{
|
||||||
|
$this->ArrivalDate = $ArrivalDate;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDepartureDate(): ?\DateTimeInterface
|
||||||
|
{
|
||||||
|
return $this->DepartureDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setDepartureDate(\DateTimeInterface $DepartureDate): static
|
||||||
|
{
|
||||||
|
$this->DepartureDate = $DepartureDate;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBookingTime(): ?\DateTimeInterface
|
||||||
|
{
|
||||||
|
return $this->BookingTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBookingTime(\DateTimeInterface $BookingTime): static
|
||||||
|
{
|
||||||
|
$this->BookingTime = $BookingTime;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBookingCustomer(): ?BookingCustomer
|
||||||
|
{
|
||||||
|
return $this->bookingCustomer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBookingCustomer(BookingCustomer $bookingCustomer): static
|
||||||
|
{
|
||||||
|
// set the owning side of the relation if necessary
|
||||||
|
if ($bookingCustomer->getBookingId() !== $this) {
|
||||||
|
$bookingCustomer->setBookingId($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->bookingCustomer = $bookingCustomer;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection<int, BookingRoom>
|
||||||
|
*/
|
||||||
|
public function getBookingRooms(): Collection
|
||||||
|
{
|
||||||
|
return $this->bookingRooms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addBookingRoom(BookingRoom $bookingRoom): static
|
||||||
|
{
|
||||||
|
if (!$this->bookingRooms->contains($bookingRoom)) {
|
||||||
|
$this->bookingRooms->add($bookingRoom);
|
||||||
|
$bookingRoom->setBookingId($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeBookingRoom(BookingRoom $bookingRoom): static
|
||||||
|
{
|
||||||
|
if ($this->bookingRooms->removeElement($bookingRoom)) {
|
||||||
|
// set the owning side to null (unless already changed)
|
||||||
|
if ($bookingRoom->getBookingId() === $this) {
|
||||||
|
$bookingRoom->setBookingId(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use App\Repository\BookingCustomerRepository;
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
#[ORM\Entity(repositoryClass: BookingCustomerRepository::class)]
|
||||||
|
class BookingCustomer
|
||||||
|
{
|
||||||
|
#[ORM\Id]
|
||||||
|
#[ORM\GeneratedValue]
|
||||||
|
#[ORM\Column]
|
||||||
|
private ?int $id = null;
|
||||||
|
|
||||||
|
#[ORM\OneToOne(inversedBy: 'bookingCustomer', cascade: ['persist', 'remove'])]
|
||||||
|
#[ORM\JoinColumn(nullable: false, onDelete: "CASCADE")]
|
||||||
|
private ?Booking $Booking = null;
|
||||||
|
|
||||||
|
#[ORM\Column(length: 64)]
|
||||||
|
private ?string $Name = null;
|
||||||
|
|
||||||
|
#[ORM\Column(length: 255)]
|
||||||
|
private ?string $Surname = null;
|
||||||
|
|
||||||
|
#[ORM\Column(length: 255)]
|
||||||
|
private ?string $Email = null;
|
||||||
|
|
||||||
|
#[ORM\Column(length: 255)]
|
||||||
|
private ?string $PhoneNumber = null;
|
||||||
|
|
||||||
|
public function getId(): ?int
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBooking(): ?Booking
|
||||||
|
{
|
||||||
|
return $this->Booking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBooking(Booking $Booking): static
|
||||||
|
{
|
||||||
|
$this->Booking = $Booking;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName(): ?string
|
||||||
|
{
|
||||||
|
return $this->Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setName(string $Name): static
|
||||||
|
{
|
||||||
|
$this->Name = $Name;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSurname(): ?string
|
||||||
|
{
|
||||||
|
return $this->Surname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSurname(string $Surname): static
|
||||||
|
{
|
||||||
|
$this->Surname = $Surname;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEmail(): ?string
|
||||||
|
{
|
||||||
|
return $this->Email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setEmail(string $Email): static
|
||||||
|
{
|
||||||
|
$this->Email = $Email;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPhoneNumber(): ?string
|
||||||
|
{
|
||||||
|
return $this->PhoneNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPhoneNumber(string $PhoneNumber): static
|
||||||
|
{
|
||||||
|
$this->PhoneNumber = $PhoneNumber;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use App\Repository\BookingRoomRepository;
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
#[ORM\Entity(repositoryClass: BookingRoomRepository::class)]
|
||||||
|
class BookingRoom
|
||||||
|
{
|
||||||
|
#[ORM\Id]
|
||||||
|
#[ORM\GeneratedValue]
|
||||||
|
#[ORM\Column]
|
||||||
|
private ?int $id = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(inversedBy: 'bookingRooms')]
|
||||||
|
#[ORM\JoinColumn(nullable: false, onDelete: "CASCADE")]
|
||||||
|
private ?Booking $Booking = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne]
|
||||||
|
#[ORM\JoinColumn(nullable: false)]
|
||||||
|
private ?RoomCategory $RoomCategory = null;
|
||||||
|
|
||||||
|
#[ORM\Column]
|
||||||
|
private ?int $GuestNumber = null;
|
||||||
|
|
||||||
|
#[ORM\Column]
|
||||||
|
private ?int $RoomPrice = null;
|
||||||
|
|
||||||
|
#[ORM\Column]
|
||||||
|
private ?int $Amount = null;
|
||||||
|
|
||||||
|
public function getId(): ?int
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBooking(): ?Booking
|
||||||
|
{
|
||||||
|
return $this->Booking;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setBooking(?Booking $Booking): static
|
||||||
|
{
|
||||||
|
$this->Booking = $Booking;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRoomCategory(): ?RoomCategory
|
||||||
|
{
|
||||||
|
return $this->RoomCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setRoomCategoryId(?RoomCategory $RoomCategory): static
|
||||||
|
{
|
||||||
|
$this->RoomCategory = $RoomCategory;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGuestNumber(): ?int
|
||||||
|
{
|
||||||
|
return $this->GuestNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setGuestNumber(int $GuestNumber): static
|
||||||
|
{
|
||||||
|
$this->GuestNumber = $GuestNumber;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRoomPrice(): ?int
|
||||||
|
{
|
||||||
|
return $this->RoomPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setRoomPrice(int $RoomPrice): static
|
||||||
|
{
|
||||||
|
$this->RoomPrice = $RoomPrice;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAmount(): ?int
|
||||||
|
{
|
||||||
|
return $this->Amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAmount(int $Amount): static
|
||||||
|
{
|
||||||
|
$this->Amount = $Amount;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Repository;
|
||||||
|
|
||||||
|
use App\Entity\BookingCustomer;
|
||||||
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||||
|
use Doctrine\Persistence\ManagerRegistry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends ServiceEntityRepository<BookingCustomer>
|
||||||
|
*
|
||||||
|
* @method BookingCustomer|null find($id, $lockMode = null, $lockVersion = null)
|
||||||
|
* @method BookingCustomer|null findOneBy(array $criteria, array $orderBy = null)
|
||||||
|
* @method BookingCustomer[] findAll()
|
||||||
|
* @method BookingCustomer[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||||
|
*/
|
||||||
|
class BookingCustomerRepository extends ServiceEntityRepository
|
||||||
|
{
|
||||||
|
public function __construct(ManagerRegistry $registry)
|
||||||
|
{
|
||||||
|
parent::__construct($registry, BookingCustomer::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @return BookingCustomer[] Returns an array of BookingCustomer objects
|
||||||
|
// */
|
||||||
|
// public function findByExampleField($value): array
|
||||||
|
// {
|
||||||
|
// return $this->createQueryBuilder('b')
|
||||||
|
// ->andWhere('b.exampleField = :val')
|
||||||
|
// ->setParameter('val', $value)
|
||||||
|
// ->orderBy('b.id', 'ASC')
|
||||||
|
// ->setMaxResults(10)
|
||||||
|
// ->getQuery()
|
||||||
|
// ->getResult()
|
||||||
|
// ;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public function findOneBySomeField($value): ?BookingCustomer
|
||||||
|
// {
|
||||||
|
// return $this->createQueryBuilder('b')
|
||||||
|
// ->andWhere('b.exampleField = :val')
|
||||||
|
// ->setParameter('val', $value)
|
||||||
|
// ->getQuery()
|
||||||
|
// ->getOneOrNullResult()
|
||||||
|
// ;
|
||||||
|
// }
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Repository;
|
||||||
|
|
||||||
|
use App\Entity\Booking;
|
||||||
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||||
|
use Doctrine\Persistence\ManagerRegistry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends ServiceEntityRepository<Booking>
|
||||||
|
*
|
||||||
|
* @method Booking|null find($id, $lockMode = null, $lockVersion = null)
|
||||||
|
* @method Booking|null findOneBy(array $criteria, array $orderBy = null)
|
||||||
|
* @method Booking[] findAll()
|
||||||
|
* @method Booking[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||||
|
*/
|
||||||
|
class BookingRepository extends ServiceEntityRepository
|
||||||
|
{
|
||||||
|
public function __construct(ManagerRegistry $registry)
|
||||||
|
{
|
||||||
|
parent::__construct($registry, Booking::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @return Booking[] Returns an array of Booking objects
|
||||||
|
// */
|
||||||
|
// public function findByExampleField($value): array
|
||||||
|
// {
|
||||||
|
// return $this->createQueryBuilder('b')
|
||||||
|
// ->andWhere('b.exampleField = :val')
|
||||||
|
// ->setParameter('val', $value)
|
||||||
|
// ->orderBy('b.id', 'ASC')
|
||||||
|
// ->setMaxResults(10)
|
||||||
|
// ->getQuery()
|
||||||
|
// ->getResult()
|
||||||
|
// ;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public function findOneBySomeField($value): ?Booking
|
||||||
|
// {
|
||||||
|
// return $this->createQueryBuilder('b')
|
||||||
|
// ->andWhere('b.exampleField = :val')
|
||||||
|
// ->setParameter('val', $value)
|
||||||
|
// ->getQuery()
|
||||||
|
// ->getOneOrNullResult()
|
||||||
|
// ;
|
||||||
|
// }
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Repository;
|
||||||
|
|
||||||
|
use App\Entity\BookingRoom;
|
||||||
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||||
|
use Doctrine\Persistence\ManagerRegistry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends ServiceEntityRepository<BookingRoom>
|
||||||
|
*
|
||||||
|
* @method BookingRoom|null find($id, $lockMode = null, $lockVersion = null)
|
||||||
|
* @method BookingRoom|null findOneBy(array $criteria, array $orderBy = null)
|
||||||
|
* @method BookingRoom[] findAll()
|
||||||
|
* @method BookingRoom[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||||
|
*/
|
||||||
|
class BookingRoomRepository extends ServiceEntityRepository
|
||||||
|
{
|
||||||
|
public function __construct(ManagerRegistry $registry)
|
||||||
|
{
|
||||||
|
parent::__construct($registry, BookingRoom::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @return BookingRoom[] Returns an array of BookingRoom objects
|
||||||
|
// */
|
||||||
|
// public function findByExampleField($value): array
|
||||||
|
// {
|
||||||
|
// return $this->createQueryBuilder('b')
|
||||||
|
// ->andWhere('b.exampleField = :val')
|
||||||
|
// ->setParameter('val', $value)
|
||||||
|
// ->orderBy('b.id', 'ASC')
|
||||||
|
// ->setMaxResults(10)
|
||||||
|
// ->getQuery()
|
||||||
|
// ->getResult()
|
||||||
|
// ;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public function findOneBySomeField($value): ?BookingRoom
|
||||||
|
// {
|
||||||
|
// return $this->createQueryBuilder('b')
|
||||||
|
// ->andWhere('b.exampleField = :val')
|
||||||
|
// ->setParameter('val', $value)
|
||||||
|
// ->getQuery()
|
||||||
|
// ->getOneOrNullResult()
|
||||||
|
// ;
|
||||||
|
// }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user