diff --git a/.docker/.env b/.docker/.env new file mode 100755 index 0000000..343c57d --- /dev/null +++ b/.docker/.env @@ -0,0 +1 @@ +COMPOSE_PROJECT_NAME=Filmator \ No newline at end of file diff --git a/.docker/data/.gitignore b/.docker/data/.gitignore old mode 100644 new mode 100755 diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml old mode 100644 new mode 100755 index 3a05eea..5406ad5 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -5,7 +5,7 @@ services: container_name: Database image: mariadb:10.6.4-focal environment: - - MYSQL_DATABASE=Filmator + - MYSQL_DATABASE=filmator - MYSQL_ROOT_PASSWORD=root volumes: - ./data/db/:/var/lib/mysql:delegated @@ -18,6 +18,20 @@ services: working_dir: /srv volumes: - ./../:/srv:delegated + - ./php/php.ini:/usr/local/etc/php.ini-production + + node: + container_name: Node + build: + context: ./.. + dockerfile: ./.docker/node/Dockerfile + working_dir: /srv + volumes: + - ./../:/srv:delegated + ports: + - "8080:8080" + - "8888:8888" + command: [ "tail", "-f", "/dev/null" ] nginx: container_name: Nginx @@ -29,7 +43,7 @@ services: - NGINX_PHP_HOST=php ports: # change localhost:port here (edit left-one) - - 80:80 + - 90:80 phpmyadmin: container_name: phpMyAdmin @@ -41,4 +55,4 @@ services: - MYSQL_PASSWORD=root ports: # change database:port here (edit left-one) - - "10000:80" + - "20000:80" diff --git a/.docker/nginx/default.conf b/.docker/nginx/default.conf old mode 100644 new mode 100755 diff --git a/.docker/node/Dockerfile b/.docker/node/Dockerfile new file mode 100644 index 0000000..09c3973 --- /dev/null +++ b/.docker/node/Dockerfile @@ -0,0 +1,15 @@ +FROM node:16.9.1-alpine3.14 + +USER root + +# Setup user docker +RUN adduser -S docker + +WORKDIR /srv/ + +RUN rm -rf /srv/node_modules +RUN mkdir /srv/node_modules +RUN chown -R docker /srv/node_modules +RUN chown docker /srv/package.json + +USER docker diff --git a/.docker/php/Dockerfile b/.docker/php/Dockerfile old mode 100644 new mode 100755 index 6f1b1b0..7129251 --- a/.docker/php/Dockerfile +++ b/.docker/php/Dockerfile @@ -1,5 +1,13 @@ FROM php:8.1.1-fpm-alpine3.15 +USER root + +# Setup user docker +RUN adduser -S docker + +# Sudo +RUN apk add sudo + # Install Git RUN apk update && apk upgrade && \ apk add git @@ -18,8 +26,9 @@ RUN apk add --no-cache \ libwebp-dev \ freetype-dev -# As of PHP 7.4 we don't need to add --with-png -RUN docker-php-ext-configure gd --with-jpeg --with-webp --with-freetype +# Install gd +RUN apk add zlib-dev libzip libpng libjpeg-turbo libwebp freetype libpng-dev libwebp-dev libjpeg-turbo-dev freetype-dev # since PHP 7.4 don't need to add --with-png +RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg --with-webp RUN docker-php-ext-install gd # Install PHP Intl @@ -27,3 +36,5 @@ RUN apk add icu-dev RUN docker-php-ext-configure intl && docker-php-ext-install intl WORKDIR /srv/ + +USER docker diff --git a/.docker/php/php.ini b/.docker/php/php.ini new file mode 100755 index 0000000..cd8f37c --- /dev/null +++ b/.docker/php/php.ini @@ -0,0 +1 @@ +UPLOAD_MAX_FILESIZE=10M \ No newline at end of file diff --git a/.gitattributes b/.gitattributes old mode 100644 new mode 100755 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/LICENSE.txt b/LICENSE.txt old mode 100644 new mode 100755 diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 index 5d95bdc..875e1b3 --- a/Makefile +++ b/Makefile @@ -19,6 +19,15 @@ logs: exec\:php: docker-compose -f .docker/docker-compose.yml exec php sh; +# Exec sh on Node container +exec\:node: + docker-compose -f .docker/docker-compose.yml exec node sh; + +setup: + docker-compose -f .docker/docker-compose.yml exec php composer install; + docker-compose -f .docker/docker-compose.yml exec node npm install; + make init + init: docker-compose -f .docker/docker-compose.yml exec php composer install; docker-compose -f .docker/docker-compose.yml exec php bin/console orm:schema-tool:drop --force --full-database; diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/app/Bootstrap.php b/app/Bootstrap.php old mode 100644 new mode 100755 diff --git a/app/Model/Database/Entity/AbstractListEntity.php b/app/Model/Database/Entity/AbstractListEntity.php new file mode 100755 index 0000000..af10b1e --- /dev/null +++ b/app/Model/Database/Entity/AbstractListEntity.php @@ -0,0 +1,23 @@ +id; + } + +} \ No newline at end of file diff --git a/app/Model/Database/Entity/ActorEntity.php b/app/Model/Database/Entity/ActorEntity.php old mode 100644 new mode 100755 index 8a6dc04..05f6f6a --- a/app/Model/Database/Entity/ActorEntity.php +++ b/app/Model/Database/Entity/ActorEntity.php @@ -2,30 +2,28 @@ namespace App\Model\Database\Entity; +use DateTime; +use App\Model\Trait\hasCreatedAt; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; +use Nette\Utils\Strings; #[ORM\Entity] #[ORM\Table(name: "actor")] -final class ActorEntity +class ActorEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + use hasCreatedAt; - #[ORM\Column(type: "string", nullable: false)] - protected string $slug; - #[ORM\Column(type: "string", nullable: false)] - protected string $name; + private const IMAGE_PATH = "img/fixture/actor/"; + #[ORM\Column(type: "string", nullable: false)] - protected string $imagePoster; + protected string $slug; #[ORM\Column(type: "string", nullable: false)] - protected string $imageBanner; + protected string $name; /** @var Collection */ #[ORM\ManyToMany(targetEntity: UserEntity::class, mappedBy: "likeActor")] @@ -33,9 +31,11 @@ final class ActorEntity protected Collection $likeUser; - public function getId(): int + public function __construct(string $name) { - return $this->id; + $this->name = $name; + $this->slug = Strings::webalize($name); + $this->createdAt = new DateTime(); } @@ -45,45 +45,21 @@ public function getSlug(): string } - public function setSlug(string $slug): void - { - $this->slug = $slug; - } - - public function getName(): string { return $this->name; } - public function setName(string $name): void - { - $this->name = $name; - } - - public function getImagePoster(): string { - return $this->imagePoster; - } - - - public function setImagePoster(string $imagePoster): void - { - $this->imagePoster = $imagePoster; + return self::IMAGE_PATH . $this->getId() . "/" . $this->getId() . self::POSTER_PREFIX; } public function getImageBanner(): string { - return $this->imageBanner; - } - - - public function setImageBanner(string $imageBanner): void - { - $this->imageBanner = $imageBanner; + return self::IMAGE_PATH . $this->getId() . "/" . $this->getId() . self::BANNER_PREFIX; } diff --git a/app/Model/Database/Entity/ArticleEntity.php b/app/Model/Database/Entity/ArticleEntity.php old mode 100644 new mode 100755 index ac910a5..bb1f9c7 --- a/app/Model/Database/Entity/ArticleEntity.php +++ b/app/Model/Database/Entity/ArticleEntity.php @@ -3,20 +3,22 @@ namespace App\Model\Database\Entity; use App\Model\Enum\Admin\Content\Month\EDateMonth; -use App\Model\Enum\Admin\Content\Month\EMonthFacade; use DateTime; +use App\Model\Trait\hasCreatedAt; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; +use Nette\Utils\Strings; #[ORM\Entity] #[ORM\Table(name: "article")] -class ArticleEntity +class ArticleEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + use hasCreatedAt; + + + private const IMAGE_PATH = "img/fixture/article/"; + #[ORM\Column(type: "string", nullable: false)] protected string $name; @@ -27,12 +29,6 @@ class ArticleEntity #[ORM\Column(type: "string", nullable: true)] protected ?string $description; - #[ORM\Column(type: "string", nullable: false)] - protected string $image; - - #[ORM\Column(type: "datetime", nullable: false)] - protected DateTime $createdAt; - /** @var Collection */ #[ORM\ManyToMany(targetEntity: UserEntity::class, mappedBy: "likeArticle")] #[ORM\JoinTable(name: "like_article")] @@ -48,9 +44,11 @@ class ArticleEntity protected Collection $articleLast; - public function getId(): int + public function __construct(string $name) { - return $this->id; + $this->name = $name; + $this->slug = Strings::webalize($name); + $this->createdAt = new DateTime(); } @@ -60,24 +58,12 @@ public function getName(): string } - public function setName(string $name): void - { - $this->name = $name; - } - - public function getSlug(): string { return $this->slug; } - public function setSlug(string $slug): void - { - $this->slug = $slug; - } - - public function getDescription(): ?string { return $this->description; @@ -92,13 +78,7 @@ public function setDescription(?string $description): void public function getImage(): string { - return $this->image; - } - - - public function setImage(string $image): void - { - $this->image = $image; + return self::IMAGE_PATH . $this->getId() . "/" . $this->getId(); } diff --git a/app/Model/Database/Entity/ArticleLastEntity.php b/app/Model/Database/Entity/ArticleLastEntity.php old mode 100644 new mode 100755 index 12bd003..b445dce --- a/app/Model/Database/Entity/ArticleLastEntity.php +++ b/app/Model/Database/Entity/ArticleLastEntity.php @@ -5,16 +5,16 @@ namespace App\Model\Database\Entity; use DateTime; +use App\Model\Trait\hasCreatedAt; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: "article_last")] -class ArticleLastEntity +class ArticleLastEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + + use hasCreatedAt; + #[ORM\ManyToOne(targetEntity: UserEntity::class, inversedBy: "userArticleLast")] protected UserEntity $user; @@ -22,24 +22,12 @@ class ArticleLastEntity #[ORM\ManyToOne(targetEntity: ArticleEntity::class, inversedBy: "articleLast")] protected ArticleEntity $article; - #[ORM\Column(type: "datetime", nullable: false)] - protected DateTime $createdAt; - public function __construct() { $this->createdAt = new DateTime(); } - public function getCreatedAt(): DateTime - { - return $this->createdAt; - } - - public function setCreatedAt(DateTime $createdAt): void - { - $this->createdAt = $createdAt; - } public function getUser(): UserEntity { diff --git a/app/Model/Database/Entity/MovieEntity.php b/app/Model/Database/Entity/MovieEntity.php old mode 100644 new mode 100755 index dea17df..2a21eeb --- a/app/Model/Database/Entity/MovieEntity.php +++ b/app/Model/Database/Entity/MovieEntity.php @@ -2,18 +2,22 @@ namespace App\Model\Database\Entity; +use App\Model\Facade\Admin\Content\Image\ImageFacade; +use App\Model\Trait\hasCreatedAt; +use App\Model\Trait\hasEditedAt; +use DateTime; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; +use Nette\Utils\Strings; #[ORM\Entity] #[ORM\Table(name: "movie")] -final class MovieEntity +class MovieEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + use hasCreatedAt; + use hasEditedAt; + #[ORM\Column(type: "string", nullable: false)] protected string $slug; @@ -33,12 +37,6 @@ final class MovieEntity #[ORM\Column(type: "text", nullable: false)] protected string $description; - #[ORM\Column(type: "string", nullable: false)] - protected string $imageBanner; - - #[ORM\Column(type: "string", nullable: false)] - protected string $imagePoster; - #[ORM\Column(type: "string", nullable: false)] protected string $trailer; @@ -57,9 +55,14 @@ final class MovieEntity protected Collection $movieLast; - public function getId(): int + public function __construct(string $name) { - return $this->id; + $timeNow = new DateTime(); + + $this->name = $name; + $this->slug = Strings::webalize($name); + $this->createdAt = $timeNow; + $this->editedAt = $timeNow; } @@ -69,24 +72,12 @@ public function getSlug(): string } - public function setSlug(string $slug): void - { - $this->slug = $slug; - } - - public function getName(): string { return $this->name; } - public function setName(string $name): void - { - $this->name = $name; - } - - public function getYear(): int { return $this->year; @@ -137,25 +128,13 @@ public function setDescription(string $description): void public function getImagePoster(): string { - return $this->imagePoster; - } - - - public function setImagePoster(string $imagePoster): void - { - $this->imagePoster = $imagePoster; + return "img/public/movie/" . $this->getId() . "/" . $this->getId() . "_" . ImageFacade::IMAGE_TYPE_POSTER; } public function getImageBanner(): string { - return $this->imageBanner; - } - - - public function setImageBanner(string $imageBanner): void - { - $this->imageBanner = $imageBanner; + return "img/public/movie/" . $this->getId() . "/" . $this->getId() . "_" . ImageFacade::IMAGE_TYPE_BANNER; } diff --git a/app/Model/Database/Entity/MovieLastEntity.php b/app/Model/Database/Entity/MovieLastEntity.php old mode 100644 new mode 100755 index 7d77cd3..b9e1b78 --- a/app/Model/Database/Entity/MovieLastEntity.php +++ b/app/Model/Database/Entity/MovieLastEntity.php @@ -4,18 +4,17 @@ namespace App\Model\Database\Entity; +use App\Model\Trait\hasCreatedAt; use DateTime; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: "movie_last")] -class MovieLastEntity +class MovieLastEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + use hasCreatedAt; + #[ORM\ManyToMany(targetEntity: UserEntity::class, inversedBy: "userMovieLast")] protected UserEntity $user; @@ -23,24 +22,12 @@ class MovieLastEntity #[ORM\ManyToOne(targetEntity: MovieEntity::class, inversedBy: "movieLast")] protected MovieEntity $movie; - #[ORM\Column(type: "datetime", nullable: false)] - protected DateTime $createdAt; - public function __construct() { $this->createdAt = new DateTime(); } - public function getCreatedAt(): DateTime - { - return $this->createdAt; - } - - public function setCreatedAt(DateTime $createdAt): void - { - $this->createdAt = $createdAt; - } public function getUser(): UserEntity { diff --git a/app/Model/Database/Entity/PermanentLoginEntity.php b/app/Model/Database/Entity/PermanentLoginEntity.php old mode 100644 new mode 100755 index 72243bf..18f2105 --- a/app/Model/Database/Entity/PermanentLoginEntity.php +++ b/app/Model/Database/Entity/PermanentLoginEntity.php @@ -2,18 +2,17 @@ namespace App\Model\Database\Entity; +use App\Model\Trait\hasCreatedAt; use DateTime; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: "token_permanent_login")] -final class PermanentLoginEntity +class PermanentLoginEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + use hasCreatedAt; + #[ORM\Column(type: "string", nullable: false)] protected string $validator; @@ -21,13 +20,16 @@ final class PermanentLoginEntity #[ORM\Column(type: "smallint", nullable: false)] protected int $userId; - #[ORM\Column(type: "datetime", nullable: false)] - protected DateTime $createdAt; - #[ORM\Column(type: "datetime", nullable: false)] protected DateTime $expiration; + public function __construct() + { + $this->createdAt = new DateTime(); + } + + public function getId(): int { return $this->id; diff --git a/app/Model/Database/Entity/SerialEntity.php b/app/Model/Database/Entity/SerialEntity.php old mode 100644 new mode 100755 index ae2420f..4eb3f7e --- a/app/Model/Database/Entity/SerialEntity.php +++ b/app/Model/Database/Entity/SerialEntity.php @@ -2,18 +2,23 @@ namespace App\Model\Database\Entity; +use App\Model\Facade\Admin\Content\Image\ImageFacade; +use DateTime; +use App\Model\Trait\hasCreatedAt; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; +use Nette\Utils\Strings; #[ORM\Entity] #[ORM\Table(name: "serial")] -final class SerialEntity +class SerialEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + use hasCreatedAt; + + + private const IMAGE_PATH = "img/fixture/serial/"; + #[ORM\Column(type: "string", nullable: false)] protected string $slug; @@ -33,12 +38,6 @@ final class SerialEntity #[ORM\Column(type: "text", nullable: false)] protected string $description; - #[ORM\Column(type: "text", nullable: false)] - protected string $imagePoster; - - #[ORM\Column(type: "text", nullable: false)] - protected string $imageBanner; - #[ORM\Column(type: "text", nullable: false)] protected string $trailer; @@ -57,9 +56,11 @@ final class SerialEntity protected Collection $serialLast; - public function getId(): int + public function __construct(string $name) { - return $this->id; + $this->name = $name; + $this->slug = Strings::webalize($name); + $this->createdAt = new DateTime(); } @@ -69,24 +70,12 @@ public function getSlug(): string } - public function setSlug(string $slug): void - { - $this->slug = $slug; - } - - public function getName(): string { return $this->name; } - public function setName(string $name): void - { - $this->name = $name; - } - - public function getYear(): string { return $this->year; @@ -137,25 +126,13 @@ public function setDescription(?string $description): void public function getImagePoster(): string { - return $this->imagePoster; - } - - - public function setImagePoster(string $imagePoster): void - { - $this->imagePoster = $imagePoster; + return self::IMAGE_PATH . $this->getId() . "/" . $this->getId() . "_" . ImageFacade::IMAGE_TYPE_POSTER; } public function getImageBanner(): string { - return $this->imageBanner; - } - - - public function setImageBanner(string $imageBanner): void - { - $this->imageBanner = $imageBanner; + return self::IMAGE_PATH . $this->getId() . "/" . $this->getId() . "_" . ImageFacade::IMAGE_TYPE_BANNER; } diff --git a/app/Model/Database/Entity/SerialLastEntity.php b/app/Model/Database/Entity/SerialLastEntity.php old mode 100644 new mode 100755 index 88cf146..2a452b4 --- a/app/Model/Database/Entity/SerialLastEntity.php +++ b/app/Model/Database/Entity/SerialLastEntity.php @@ -2,18 +2,17 @@ namespace App\Model\Database\Entity; +use App\Model\Trait\hasCreatedAt; use DateTime; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: "serial_last")] -class SerialLastEntity +class SerialLastEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + use hasCreatedAt; + #[ORM\ManyToOne(targetEntity: UserEntity::class, inversedBy: "userSerialLast")] protected UserEntity $user; @@ -21,24 +20,12 @@ class SerialLastEntity #[ORM\ManyToOne(targetEntity: SerialEntity::class, inversedBy: "serialLast")] protected SerialEntity $serial; - #[ORM\Column(type: "datetime", nullable: false)] - protected DateTime $createdAt; - public function __construct() { $this->createdAt = new DateTime(); } - public function getCreatedAt(): DateTime - { - return $this->createdAt; - } - - public function setCreatedAt(DateTime $createdAt): void - { - $this->createdAt = $createdAt; - } public function getUser(): UserEntity { diff --git a/app/Model/Database/Entity/UserEntity.php b/app/Model/Database/Entity/UserEntity.php old mode 100644 new mode 100755 index f6af92b..2973c66 --- a/app/Model/Database/Entity/UserEntity.php +++ b/app/Model/Database/Entity/UserEntity.php @@ -2,19 +2,19 @@ namespace App\Model\Database\Entity; +use DateTime; +use App\Model\Trait\hasCreatedAt; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: "user")] -final class UserEntity +class UserEntity extends AbstractListEntity { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: "AUTO")] - #[ORM\Column(type: "integer", nullable: false)] - protected int $id; + use hasCreatedAt; + #[ORM\Column(type: "string", nullable: false)] protected string $nickname; @@ -84,13 +84,7 @@ final class UserEntity public function __construct() { - $this->likedMovies = new ArrayCollection(); - } - - - public function getId(): int - { - return $this->id; + $this->createdAt = new DateTime(); } diff --git a/app/Model/Database/Fixture/AbstractFixture.php b/app/Model/Database/Fixture/AbstractFixture.php old mode 100644 new mode 100755 diff --git a/app/Model/Database/Fixture/ActorFixture.php b/app/Model/Database/Fixture/ActorFixture.php old mode 100644 new mode 100755 index f7404e8..27568f0 --- a/app/Model/Database/Fixture/ActorFixture.php +++ b/app/Model/Database/Fixture/ActorFixture.php @@ -16,17 +16,7 @@ public function load(ObjectManager $manager): void $actors = Neon::decodeFile(__DIR__ . "/content/actor.neon"); foreach ($actors as $actor) { - $newActor = new ActorEntity(); - $newActor->setName($actor['name']); - $newActor->setSlug(Strings::webalize($actor['name'])); - foreach ($actor['image'] as $type => $value) { - if ($type === 'imageBanner') { - $newActor->setImageBanner($value); - } - if ($type === 'imagePoster') { - $newActor->setImagePoster($value); - } - } + $newActor = new ActorEntity($actor['name']); $manager->persist($newActor); } $manager->flush(); diff --git a/app/Model/Database/Fixture/ArticleFixture.php b/app/Model/Database/Fixture/ArticleFixture.php old mode 100644 new mode 100755 index d331c4a..8db84fa --- a/app/Model/Database/Fixture/ArticleFixture.php +++ b/app/Model/Database/Fixture/ArticleFixture.php @@ -5,7 +5,6 @@ use App\Model\Database\Entity\ArticleEntity; use Doctrine\Persistence\ObjectManager; use Nette\Neon\Neon; -use Nette\Utils\Strings; use Nettrine\Fixtures\ContainerAwareInterface; final class ArticleFixture extends AbstractFixture implements ContainerAwareInterface @@ -13,15 +12,11 @@ final class ArticleFixture extends AbstractFixture implements ContainerAwareInte public function load(ObjectManager $manager): void { $articles = Neon::decodeFile(__DIR__ . "/content/article.neon"); - $timeNow = new \DateTime('now'); foreach ($articles as $article) { - $newArticle = new ArticleEntity(); - $newArticle->setName($article['title']); - $newArticle->setSlug(Strings::webalize($article['title'])); + $newArticle = new ArticleEntity($article['title']); $newArticle->setDescription($article['description']); - $newArticle->setImage($article['image']); - $newArticle->setCreatedAt($timeNow); + $manager->persist($newArticle); } $manager->flush(); diff --git a/app/Model/Database/Fixture/MovieFixture.php b/app/Model/Database/Fixture/MovieFixture.php old mode 100644 new mode 100755 index f25bb4c..120a4ca --- a/app/Model/Database/Fixture/MovieFixture.php +++ b/app/Model/Database/Fixture/MovieFixture.php @@ -3,6 +3,7 @@ namespace App\Model\Database\Fixture; use App\Model\Database\Entity\MovieEntity; +use App\Model\Facade\Admin\Content\Image\ImageFacade; use App\Model\Facade\Admin\Content\Trailer\TrailerFacade; use Doctrine\Persistence\ObjectManager; use Nette\Neon\Neon; @@ -12,37 +13,58 @@ final class MovieFixture extends AbstractFixture implements ContainerAwareInterface { + private string $contentImagePath = __DIR__ . '/content/img/movie'; + + private string $contentFixturePath = __DIR__ . '/content/movie.neon'; + + public function getTrailerFacade(): TrailerFacade { return $this->getContainer()->getByType(TrailerFacade::class); } + public function getImageFacade(): ImageFacade + { + return $this->getContainer()->getByType(ImageFacade::class); + } + + public function load(ObjectManager $manager): void { - $movies = Neon::decodeFile(__DIR__ . "/content/movie.neon"); + $movies = Neon::decodeFile($this->contentFixturePath); foreach ($movies as $movie) { - $newMovie = new MovieEntity(); - $title = $movie['title']; - $newMovie->setName($title); - $newMovie->setSlug(Strings::webalize($title)); + $newMovie = new MovieEntity( + $movie['title'] + ); $newMovie->setYear($movie['year']); $newMovie->setRating($movie['rating']); $newMovie->setTeaser($movie['teaser']); $newMovie->setDescription($movie['description']); + $newMovie->setTrailer($this->getTrailerFacade()->getTrailerLink($movie['trailer'])); + + $manager->persist($newMovie); + $manager->flush(); + + $movieId = $newMovie->getId(); foreach ($movie['image'] as $type => $value) { if ($type === 'imageBanner') { - $newMovie->setImageBanner($value); + $this->getImageFacade()->createImageFromFile( + "$this->contentImagePath/$value", $movieId, + ImageFacade::CONTENT_TYPE_MOVIE, + ImageFacade::IMAGE_TYPE_BANNER + ); } if ($type === 'imagePoster') { - $newMovie->setImagePoster($value); + $this->getImageFacade()->createImageFromFile( + "$this->contentImagePath/$value", $movieId, + ImageFacade::CONTENT_TYPE_MOVIE, + ImageFacade::IMAGE_TYPE_POSTER + ); } } - $newMovie->setTrailer($this->getTrailerFacade()->getTrailerLink($movie['trailer'])); - $manager->persist($newMovie); } - $manager->flush(); } } diff --git a/app/Model/Database/Fixture/SerialFixture.php b/app/Model/Database/Fixture/SerialFixture.php old mode 100644 new mode 100755 index 65e1bd8..97c7eb9 --- a/app/Model/Database/Fixture/SerialFixture.php +++ b/app/Model/Database/Fixture/SerialFixture.php @@ -22,23 +22,15 @@ public function load(ObjectManager $manager): void { $serials = Neon::decodeFile(__DIR__ . "/content/serial.neon"); + foreach ($serials as $serial) { - $newSerial = new SerialEntity(); - $title = $serial['title']; - $newSerial->setName($title); - $newSerial->setSlug(Strings::webalize($title)); + $newSerial = new SerialEntity( + $serial['title'] + ); $newSerial->setYear($serial['year']); $newSerial->setRating($serial['rating']); $newSerial->setTeaser($serial['teaser']); $newSerial->setDescription($serial['description']); - foreach ($serial['image'] as $type => $value) { - if ($type === 'imageBanner') { - $newSerial->setImageBanner($value); - } - if ($type === 'imagePoster') { - $newSerial->setImagePoster($value); - } - } $newSerial->setTrailer($this->getTrailerFacade()->getTrailerLink($serial['trailer'])); $manager->persist($newSerial); } diff --git a/app/Model/Database/Fixture/UserFixture.php b/app/Model/Database/Fixture/UserFixture.php old mode 100644 new mode 100755 diff --git a/app/Model/Database/Fixture/content/actor.neon b/app/Model/Database/Fixture/content/actor.neon old mode 100644 new mode 100755 diff --git a/app/Model/Database/Fixture/content/article.neon b/app/Model/Database/Fixture/content/article.neon old mode 100644 new mode 100755 diff --git a/app/Model/Database/Fixture/content/img/actor/1_banner.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/1_banner.jpg:Zone.Identifier new file mode 100755 index 0000000..efaa03c --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/1_banner.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_1g8h1j5g1jj94hjf0i1jfipt6o/1_banner.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/1_poster.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/1_poster.jpg:Zone.Identifier new file mode 100755 index 0000000..58f0dea --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/1_poster.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_1qpb1ln3dh51q571pkigpob551/1_poster.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/2_banner.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/2_banner.jpg:Zone.Identifier new file mode 100755 index 0000000..6389daf --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/2_banner.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_1f971buv9l6km7183r1167nls1/2_banner.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/2_poster.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/2_poster.jpg:Zone.Identifier new file mode 100755 index 0000000..acdfcd8 --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/2_poster.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_u2k1p3415fm1lmbn6e1b6j8qm1/2_poster.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/3_banner.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/3_banner.jpg:Zone.Identifier new file mode 100755 index 0000000..e0bf96a --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/3_banner.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_1fk6n22h5u9361l5o2g8gha1ne/3_banner.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/3_poster.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/3_poster.jpg:Zone.Identifier new file mode 100755 index 0000000..900d406 --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/3_poster.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_11u8djh1sc41ml3kkm11ub171d/3_poster.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/4_banner.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/4_banner.jpg:Zone.Identifier new file mode 100755 index 0000000..11f0bb3 --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/4_banner.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_mahji7137tp271qdi1r94146gn/4_banner.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/4_poster.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/4_poster.jpg:Zone.Identifier new file mode 100755 index 0000000..97d74cc --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/4_poster.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_u36sh4162gpjtvorml8j231o40/4_poster.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/5_banner.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/5_banner.jpg:Zone.Identifier new file mode 100755 index 0000000..3832c38 --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/5_banner.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_jh2ucg1a78172216ekgij11gpt/5_banner.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/5_poster.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/5_poster.jpg:Zone.Identifier new file mode 100755 index 0000000..d501e0b --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/5_poster.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_15dh10rncl86r6cb2si97kdl0r/5_poster.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/6_banner.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/6_banner.jpg:Zone.Identifier new file mode 100755 index 0000000..8d98512 --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/6_banner.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_q5d159omkq9v3r5412591t4c1i/6_banner.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/6_poster.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/6_poster.jpg:Zone.Identifier new file mode 100755 index 0000000..6f3e447 --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/6_poster.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_6r319rkf1o1fe6qpvctvd61153/6_poster.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/7_banner.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/7_banner.jpg:Zone.Identifier new file mode 100755 index 0000000..feccf70 --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/7_banner.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_bcq79r1ds6f7m19ia120d17iq1/7_banner.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/7_poster.jpg:Zone.Identifier b/app/Model/Database/Fixture/content/img/actor/7_poster.jpg:Zone.Identifier new file mode 100755 index 0000000..10a19a3 --- /dev/null +++ b/app/Model/Database/Fixture/content/img/actor/7_poster.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://png2jpg.com/ +HostUrl=https://png2jpg.com/download/13vdirgsnk17e2ch/file_uhnoim10h41ipl4b7s5m8e7fcl/7_poster.jpg diff --git a/app/Model/Database/Fixture/content/img/actor/arnold-schwarzenegger_banner.jpg b/app/Model/Database/Fixture/content/img/actor/arnold-schwarzenegger_banner.jpg new file mode 100755 index 0000000..2665fdb Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/arnold-schwarzenegger_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/arnold-schwarzenegger_poster.jpg b/app/Model/Database/Fixture/content/img/actor/arnold-schwarzenegger_poster.jpg new file mode 100755 index 0000000..b00a101 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/arnold-schwarzenegger_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/dwayne-johnson_banner.jpg b/app/Model/Database/Fixture/content/img/actor/dwayne-johnson_banner.jpg new file mode 100755 index 0000000..0218fe3 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/dwayne-johnson_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/dwayne-johnson_poster.jpg b/app/Model/Database/Fixture/content/img/actor/dwayne-johnson_poster.jpg new file mode 100755 index 0000000..906e1ba Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/dwayne-johnson_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/jason-statham_banner.jpg b/app/Model/Database/Fixture/content/img/actor/jason-statham_banner.jpg new file mode 100755 index 0000000..34a9145 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/jason-statham_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/jason-statham_poster.jpg b/app/Model/Database/Fixture/content/img/actor/jason-statham_poster.jpg new file mode 100755 index 0000000..bc67127 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/jason-statham_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/johny-depp_banner.jpg b/app/Model/Database/Fixture/content/img/actor/johny-depp_banner.jpg new file mode 100755 index 0000000..12cb58e Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/johny-depp_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/johny-depp_poster.jpg b/app/Model/Database/Fixture/content/img/actor/johny-depp_poster.jpg new file mode 100755 index 0000000..5b50023 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/johny-depp_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/keyanu-reaves_banner.jpg b/app/Model/Database/Fixture/content/img/actor/keyanu-reaves_banner.jpg new file mode 100755 index 0000000..f4004e1 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/keyanu-reaves_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/keyanu-reaves_poster.jpg b/app/Model/Database/Fixture/content/img/actor/keyanu-reaves_poster.jpg new file mode 100755 index 0000000..a53c74b Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/keyanu-reaves_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/robert-downey_banner.jpg b/app/Model/Database/Fixture/content/img/actor/robert-downey_banner.jpg new file mode 100755 index 0000000..277b6ee Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/robert-downey_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/robert-downey_poster.jpg b/app/Model/Database/Fixture/content/img/actor/robert-downey_poster.jpg new file mode 100755 index 0000000..f831293 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/robert-downey_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/silvester-stalone_banner.jpg b/app/Model/Database/Fixture/content/img/actor/silvester-stalone_banner.jpg new file mode 100755 index 0000000..2d2093b Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/silvester-stalone_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/actor/silvester-stalone_poster.jpg b/app/Model/Database/Fixture/content/img/actor/silvester-stalone_poster.jpg new file mode 100755 index 0000000..4b3f7c0 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/actor/silvester-stalone_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/avengers-endgame_banner.jpg b/app/Model/Database/Fixture/content/img/movie/avengers-endgame_banner.jpg new file mode 100755 index 0000000..88bfd74 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/avengers-endgame_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/avengers-endgame_poster.jpg b/app/Model/Database/Fixture/content/img/movie/avengers-endgame_poster.jpg new file mode 100755 index 0000000..785b6d0 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/avengers-endgame_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/fight-club_banner.jpg b/app/Model/Database/Fixture/content/img/movie/fight-club_banner.jpg new file mode 100755 index 0000000..174c486 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/fight-club_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/fight-club_poster.jpg b/app/Model/Database/Fixture/content/img/movie/fight-club_poster.jpg new file mode 100755 index 0000000..d39ef51 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/fight-club_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/gi-joe_banner.jpg b/app/Model/Database/Fixture/content/img/movie/gi-joe_banner.jpg new file mode 100755 index 0000000..acc93c8 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/gi-joe_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/gi-joe_poster.jpg b/app/Model/Database/Fixture/content/img/movie/gi-joe_poster.jpg new file mode 100755 index 0000000..8625fa4 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/gi-joe_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/love-911_banner.jpg b/app/Model/Database/Fixture/content/img/movie/love-911_banner.jpg new file mode 100755 index 0000000..7bbf576 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/love-911_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/love-911_poster.jpg b/app/Model/Database/Fixture/content/img/movie/love-911_poster.jpg new file mode 100755 index 0000000..2b94516 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/love-911_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/sherlock-holmes_banner.jpg b/app/Model/Database/Fixture/content/img/movie/sherlock-holmes_banner.jpg new file mode 100755 index 0000000..39a2735 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/sherlock-holmes_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/sherlock-holmes_poster.jpg b/app/Model/Database/Fixture/content/img/movie/sherlock-holmes_poster.jpg new file mode 100755 index 0000000..b07ecbc Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/sherlock-holmes_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/spiderman-no-way-home_banner.jpg b/app/Model/Database/Fixture/content/img/movie/spiderman-no-way-home_banner.jpg new file mode 100755 index 0000000..f6bc0ab Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/spiderman-no-way-home_banner.jpg differ diff --git a/app/Model/Database/Fixture/content/img/movie/spiderman-no-way-home_poster.jpg b/app/Model/Database/Fixture/content/img/movie/spiderman-no-way-home_poster.jpg new file mode 100755 index 0000000..dac0f37 Binary files /dev/null and b/app/Model/Database/Fixture/content/img/movie/spiderman-no-way-home_poster.jpg differ diff --git a/app/Model/Database/Fixture/content/movie.neon b/app/Model/Database/Fixture/content/movie.neon old mode 100644 new mode 100755 index 1b1a6be..28aaf8e --- a/app/Model/Database/Fixture/content/movie.neon +++ b/app/Model/Database/Fixture/content/movie.neon @@ -6,8 +6,8 @@ teaser: 'Slavný detektiv Sherlock Holmes (Robert Downey Jr.) je proslulý tím, že dokáže vyřešit i nejsložitější záhady. S věrným přítelem Dr. Watsonem (Jude Law) po boku je téměř nepřemožitelný. Jenže nyní je Londýn v ohrožení a náhlá hrozba je děsivější, než cokoli dříve.' description: 'Slavný detektiv Sherlock Holmes (Robert Downey Jr.) je proslulý tím, že dokáže vyřešit i nejsložitější záhady. S věrným přítelem Dr. Watsonem (Jude Law) po boku je téměř nepřemožitelný. Jenže nyní je Londýn v ohrožení a náhlá hrozba je děsivější, než cokoli dříve. Pro detektiva je to ovšem jen další výzva, které s radostí a odvahou hodlá čelit. Po sérii brutálních rituálních vražd přijíždí Holmes a Watson právě včas, aby zachránili před smrtí další oběť a odhalili nebezpečného vraha, zatvrzelého Lorda Blackwooda. Předtím, než je oběšen, varuje Blackwood Holmese, že smrt nad ním nemá žádnou moc. Když následně dojde k jeho záhadnému vzkříšení, Londýn oněmí v panické hrůze. Scotland Yard si neví rady, a tak se Holmes s Watsonem vydávají do světa černé magie a překvapivých nových technologií.' image: - imageBanner: img/fixture/movie/1/sherlock-holmes_banner - imagePoster: img/fixture/movie/1/sherlock-holmes_poster + imageBanner: sherlock-holmes_banner.jpg + imagePoster: sherlock-holmes_poster.jpg trailer: https://youtu.be/GK9oObrzn1w - title: Klub rváčů @@ -16,8 +16,8 @@ teaser: 'Když nemůžete půl roku usnout, celý okolní svět vám začne připadat jako nekonečný sen. Všechno kolem vás je nedokonalou xeroxovou kopií sebe sama. Chodíte do práce, díváte se na televizi a jste vděčni za to, když občas ztratíte vědomí a nevíte o světě. Lidí s podobnými problémy moc není, ale mladý úspěšný úředník, který si říká Jack, je jedním z nich.' description: 'Když nemůžete půl roku usnout, celý okolní svět vám začne připadat jako nekonečný sen. Všechno kolem vás je nedokonalou xeroxovou kopií sebe sama. Chodíte do práce, díváte se na televizi a jste vděčni za to, když občas ztratíte vědomí a nevíte o světě. Lidí s podobnými problémy moc není, ale mladý úspěšný úředník, který si říká Jack, je jedním z nich. Má slušnou práci, vydělává slušné peníze, ale trpí nejtěžší formou nespavosti. Na služební cestě se Jack seznámí s Tylerem Durdenem, který mu nabídne příbytek pod podmínkou, že mu vrazí pořádnou ránu. Tato "výměna názorů" se oběma zalíbí a brzy vznikne první Klub rváčů. Místo, kde můžou mladí muži, znechucení světem, odložit své starosti a stát se na pár minut zvířaty.' image: - imageBanner: img/fixture/movie/2/fight-club_banner - imagePoster: img/fixture/movie/2/fight-club_poster + imageBanner: fight-club_banner.jpg + imagePoster: fight-club_poster.jpg trailer: https://youtu.be/MAidmBZD0Bk - title: 'Avengers: Endgame' @@ -26,8 +26,8 @@ teaser: 'Hrozivé události způsobené Thanosem, který vyhladil polovinu života ve vesmíru a silně oslabil Avengers, vedou zbylé superhrdiny k tomu, aby ve strhujícím finále 22 filmů studia Marvel zvaném Avengers: Endgame sebrali poslední síly a pokusili se vrátit úder.' description: 'Hrozivé události způsobené Thanosem, který vyhladil polovinu života ve vesmíru a silně oslabil Avengers, vedou zbylé superhrdiny k tomu, aby ve strhujícím finále 22 filmů studia Marvel zvaném Avengers: Endgame sebrali poslední síly a pokusili se vrátit úder.' image: - imageBanner: img/fixture/movie/3/avengers-endgame_banner - imagePoster: img/fixture/movie/3/avengers-endgame_poster + imageBanner: avengers-endgame_banner.jpg + imagePoster: avengers-endgame_poster.jpg trailer: https://youtu.be/02YEOiHZH1I - title: Láska 911 @@ -36,8 +36,8 @@ teaser: 'Kang-il je hasič, ktorého manželka zomrela, keď zachraňoval ľudí pri nehode. Zápasí s pocitom viny za to, že nedokázal pomôcť svojej žene. Po tejto tragédii sa bez rozmýšľania vrhá do nebezpečenstva, aby zachránil ostatných.' description: 'Kang-il je hasič, ktorého manželka zomrela, keď zachraňoval ľudí pri nehode. Zápasí s pocitom viny za to, že nedokázal pomôcť svojej žene. Po tejto tragédii sa bez rozmýšľania vrhá do nebezpečenstva, aby zachránil ostatných. Lekárka Mi-soo urobí v nemocnici chybu pri stanovení diagnózy, a keď sa pacientka dostane do kritického stavu, Kang-il je zhodou okolností pri jej záchrane. Manžel pacientky chce Mi-soo zažalovať, a tým jej hrozí strata lekárskej licencie. Právnička Mi-soo poradí presvedčiť Kang-ila o tom, aby svedčil, že manžel pacientky naňho zaútočil potom, čo sa dozvedel o nesprávne stanovenej diagnóze. Kang-il však Mi-Soo a jej prosby ignoruje. V zúfalstve sa Mi-soo stáva dobrovoľníčkou, aby ako zdravotníčka mohla pracovať po boku Kang-ila a dostala sa tak k nemu čo najbližšie.' image: - imageBanner: img/fixture/movie/4/love-911_banner - imagePoster: img/fixture/movie/4/love-911_poster + imageBanner: love-911_banner.jpg + imagePoster: love-911_poster.jpg trailer: https://youtu.be/3MVgdmd8ri0 - title: 'Spiderman: No way home' @@ -46,8 +46,8 @@ teaser: 'Vůbec poprvé ve filmové historii je odhalena totožnost Spider-Mana a náš dobrý soused již nedokáže oddělit svou zodpovědnost superhrdiny od běžného života, čímž se jeho nebližší ocitnou ve velkém nebezpečí.' description: 'Vůbec poprvé ve filmové historii je odhalena totožnost Spider-Mana a náš dobrý soused již nedokáže oddělit svou zodpovědnost superhrdiny od běžného života, čímž se jeho nebližší ocitnou ve velkém nebezpečí. Spider-Man požádá Doctora Strange, aby mu pomohl jeho tajemství obnovit. Kouzlo však způsobí v realitě obrovskou trhlinu, jíž do světa proniknou ti nejmocnější zloduši, kteří kdy bojovali se Spider-Manem v paralelním světě. Peter tak musí překonat svou doposud největší výzvu, která navždy změní nejen jeho budoucnost, ale i budoucnost paralelních světů.' image: - imageBanner: img/fixture/movie/5/spiderman-no-way-home_banner - imagePoster: img/fixture/movie/5/spiderman-no-way-home_poster + imageBanner: spiderman-no-way-home_banner.jpg + imagePoster: spiderman-no-way-home_poster.jpg trailer: https://youtu.be/BkJ37-waPD8 - title: 'GI Joe: 2' @@ -56,6 +56,6 @@ teaser: 'V demilitarizované zóně mezi Jižní a Severní Koreou hledá jednotka G. I. Joe pod velením kapitána Dukea Housera dezertéra. Najdou ho a dopraví bezpečně do Jižní Koreje. Agenti Kobry Stormshadow a Zartan jsou stále na svobodě a aktivní, a i Commander a Dextro, kteří jsou momentálně ve vězení, přísahali pomstu…' description: 'V demilitarizované zóně mezi Jižní a Severní Koreou hledá jednotka G. I. Joe pod velením kapitána Dukea Housera dezertéra. Najdou ho a dopraví bezpečně do Jižní Koreje. Agenti Kobry Stormshadow a Zartan jsou stále na svobodě a aktivní, a i Commander a Dextro, kteří jsou momentálně ve vězení, přísahali pomstu… V Pákistánu je po atentátu na prezidenta zmatek. Pákistán je spojencem USA a panuje tam naprostý chaos, na jeho území jsou i jaderné hlavice. Generálové navrhují okamžitou vojenskou akci, prezident povolá G. I. Joe. Ve vrtulníku si procházejí plán – hlavice jsou v montážní hale a nejdou přenášet, musejí se zlikvidovat na místě. Na místě zabijí ochranku a odvezou hlavici na vojenskou základnu USA. Nahlásí prezidentovi a generálům, že mise byla splněna a že plánují cestu zpět. Odpověď je, že plán evakuace je třeba pozměnit, ať zůstanou na místě.' image: - imageBanner: img/fixture/movie/6/gi-joe-2_banner - imagePoster: img/fixture/movie/6/gi-joe-2_poster + imageBanner: gi-joe_banner.jpg + imagePoster: gi-joe_poster.jpg trailer: https://youtu.be/h8orF3EwOhI \ No newline at end of file diff --git a/app/Model/Database/Fixture/content/serial.neon b/app/Model/Database/Fixture/content/serial.neon old mode 100644 new mode 100755 diff --git a/app/Model/Database/Fixture/content/user.neon b/app/Model/Database/Fixture/content/user.neon old mode 100644 new mode 100755 diff --git a/app/Model/Enum/Admin/Content/Month/EDateMonth.php b/app/Model/Enum/Admin/Content/Month/EDateMonth.php old mode 100644 new mode 100755 diff --git a/app/Model/Exception/ValueEmptyException.php b/app/Model/Exception/ValueEmptyException.php new file mode 100755 index 0000000..3a6f22c --- /dev/null +++ b/app/Model/Exception/ValueEmptyException.php @@ -0,0 +1,10 @@ +resize(self::BANNER_WIDTH, self::BANNER_HEIGHT); - $image->save($newTitle, self::COMPRESS, Image::JPEG); + if (!$file->isImage() || !$file->isOk()) { + throw new ImageException('not an image'); + } - return $newTitle; + $resultFolder = self::IMAGE_CONTENT_PATH . "/$contentType/$id"; + $resultFile = "$resultFolder/$id" . '_' . $imageType; + + // common mistake before ID folder + FileSystem::createDir($resultFolder); + + $image = Image::fromFile($file->getTemporaryFile()); + $image->save("$resultFile.webp", $this->compress, Image::WEBP); + $image->save("$resultFile.png", $this->compress, Image::PNG); + $image->save("$resultFile.avif", $this->compress, Image::AVIF); } - public function changePosterSize(string $imageName, string $imagePath): string + /** + * @throws ImageException + * @throws UnknownImageFileException + */ + public function createImageFromFile(string $path, int $id, string $contentType, string $imageType): void { - $slug = Strings::webalize($imageName); - $newTitle = self::RESULT_PATH . $slug . self::POSTER_PREFIX; - $image = Image::fromFile($imagePath); - $image->resize(self::POSTER_WIDTH, self::POSTER_HEIGHT); - $image->sharpen(); - $image->save($newTitle, self::COMPRESS, Image::JPEG); - - return $newTitle; + $resultFolder = self::IMAGE_CONTENT_PATH . "/$contentType/$id"; + $resultFile = "$resultFolder/$id" . '_' . $imageType; + + FileSystem::createDir($resultFolder); + + $image = Image::fromFile($path); + $image->save("$resultFile.webp", $this->compress, Image::WEBP); + $image->save("$resultFile.png", $this->compress, Image::PNG); + $image->save("$resultFile.avif", $this->compress, Image::AVIF); } } diff --git a/app/Model/Facade/Admin/Content/Image/movie/1/1_banner.png b/app/Model/Facade/Admin/Content/Image/movie/1/1_banner.png new file mode 100755 index 0000000..f035f69 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/1/1_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/1/1_banner.webp b/app/Model/Facade/Admin/Content/Image/movie/1/1_banner.webp new file mode 100755 index 0000000..9285aa4 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/1/1_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/1/1_poster.png b/app/Model/Facade/Admin/Content/Image/movie/1/1_poster.png new file mode 100755 index 0000000..fc30204 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/1/1_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/1/1_poster.webp b/app/Model/Facade/Admin/Content/Image/movie/1/1_poster.webp new file mode 100755 index 0000000..b83e2da Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/1/1_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/2/2_banner.png b/app/Model/Facade/Admin/Content/Image/movie/2/2_banner.png new file mode 100755 index 0000000..01e4ef5 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/2/2_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/2/2_banner.webp b/app/Model/Facade/Admin/Content/Image/movie/2/2_banner.webp new file mode 100755 index 0000000..3b4accc Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/2/2_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/2/2_poster.png b/app/Model/Facade/Admin/Content/Image/movie/2/2_poster.png new file mode 100755 index 0000000..440873c Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/2/2_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/2/2_poster.webp b/app/Model/Facade/Admin/Content/Image/movie/2/2_poster.webp new file mode 100755 index 0000000..d033ccb Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/2/2_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/3/3_banner.png b/app/Model/Facade/Admin/Content/Image/movie/3/3_banner.png new file mode 100755 index 0000000..40354ff Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/3/3_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/3/3_banner.webp b/app/Model/Facade/Admin/Content/Image/movie/3/3_banner.webp new file mode 100755 index 0000000..2fcb21f Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/3/3_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/3/3_poster.png b/app/Model/Facade/Admin/Content/Image/movie/3/3_poster.png new file mode 100755 index 0000000..6ae766c Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/3/3_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/3/3_poster.webp b/app/Model/Facade/Admin/Content/Image/movie/3/3_poster.webp new file mode 100755 index 0000000..15d9d94 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/3/3_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/4/4_banner.png b/app/Model/Facade/Admin/Content/Image/movie/4/4_banner.png new file mode 100755 index 0000000..56ef836 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/4/4_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/4/4_banner.webp b/app/Model/Facade/Admin/Content/Image/movie/4/4_banner.webp new file mode 100755 index 0000000..3e9e2c2 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/4/4_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/4/4_poster.png b/app/Model/Facade/Admin/Content/Image/movie/4/4_poster.png new file mode 100755 index 0000000..d5619a7 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/4/4_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/4/4_poster.webp b/app/Model/Facade/Admin/Content/Image/movie/4/4_poster.webp new file mode 100755 index 0000000..173aa51 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/4/4_poster.webp differ diff --git a/www/img/fixture/movie/5/spiderman-no-way-home_poster.png b/app/Model/Facade/Admin/Content/Image/movie/5/5_banner.png old mode 100644 new mode 100755 similarity index 52% rename from www/img/fixture/movie/5/spiderman-no-way-home_poster.png rename to app/Model/Facade/Admin/Content/Image/movie/5/5_banner.png index 1967617..9e47c8e Binary files a/www/img/fixture/movie/5/spiderman-no-way-home_poster.png and b/app/Model/Facade/Admin/Content/Image/movie/5/5_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/5/5_banner.webp b/app/Model/Facade/Admin/Content/Image/movie/5/5_banner.webp new file mode 100755 index 0000000..f9760b7 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/5/5_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/5/5_poster.png b/app/Model/Facade/Admin/Content/Image/movie/5/5_poster.png new file mode 100755 index 0000000..bb4218b Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/5/5_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/5/5_poster.webp b/app/Model/Facade/Admin/Content/Image/movie/5/5_poster.webp new file mode 100755 index 0000000..b3ab105 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/5/5_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/6/6_banner.png b/app/Model/Facade/Admin/Content/Image/movie/6/6_banner.png new file mode 100755 index 0000000..04d3ae0 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/6/6_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/6/6_banner.webp b/app/Model/Facade/Admin/Content/Image/movie/6/6_banner.webp new file mode 100755 index 0000000..a630420 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/6/6_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/6/6_poster.png b/app/Model/Facade/Admin/Content/Image/movie/6/6_poster.png new file mode 100755 index 0000000..48ef069 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/6/6_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Image/movie/6/6_poster.webp b/app/Model/Facade/Admin/Content/Image/movie/6/6_poster.webp new file mode 100755 index 0000000..98b47dc Binary files /dev/null and b/app/Model/Facade/Admin/Content/Image/movie/6/6_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_banner.png b/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_banner.png new file mode 100755 index 0000000..f035f69 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_banner.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_banner.webp new file mode 100755 index 0000000..9285aa4 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_poster.png b/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_poster.png new file mode 100755 index 0000000..fc30204 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_poster.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_poster.webp new file mode 100755 index 0000000..b83e2da Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/1/1_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_banner.png b/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_banner.png new file mode 100755 index 0000000..01e4ef5 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_banner.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_banner.webp new file mode 100755 index 0000000..3b4accc Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_poster.png b/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_poster.png new file mode 100755 index 0000000..440873c Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_poster.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_poster.webp new file mode 100755 index 0000000..d033ccb Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/2/2_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_banner.png b/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_banner.png new file mode 100755 index 0000000..40354ff Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_banner.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_banner.webp new file mode 100755 index 0000000..2fcb21f Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_poster.png b/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_poster.png new file mode 100755 index 0000000..6ae766c Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_poster.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_poster.webp new file mode 100755 index 0000000..15d9d94 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/3/3_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_banner.png b/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_banner.png new file mode 100755 index 0000000..56ef836 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_banner.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_banner.webp new file mode 100755 index 0000000..3e9e2c2 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_poster.png b/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_poster.png new file mode 100755 index 0000000..d5619a7 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_poster.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_poster.webp new file mode 100755 index 0000000..173aa51 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/4/4_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_banner.png b/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_banner.png new file mode 100755 index 0000000..9e47c8e Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_banner.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_banner.webp new file mode 100755 index 0000000..f9760b7 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_poster.png b/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_poster.png new file mode 100755 index 0000000..bb4218b Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_poster.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_poster.webp new file mode 100755 index 0000000..b3ab105 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/5/5_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_banner.png b/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_banner.png new file mode 100755 index 0000000..04d3ae0 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_banner.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_banner.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_banner.webp new file mode 100755 index 0000000..a630420 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_banner.webp differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_poster.png b/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_poster.png new file mode 100755 index 0000000..48ef069 Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_poster.png differ diff --git a/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_poster.webp b/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_poster.webp new file mode 100755 index 0000000..98b47dc Binary files /dev/null and b/app/Model/Facade/Admin/Content/Imageimg/movie/6/6_poster.webp differ diff --git a/app/Model/Facade/Admin/Content/Trailer/ITrailerFacade.php b/app/Model/Facade/Admin/Content/Trailer/ITrailerFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Admin/Content/Trailer/TrailerFacade.php b/app/Model/Facade/Admin/Content/Trailer/TrailerFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Common/AutoIncrement/AutoIncrementFacade.php b/app/Model/Facade/Common/AutoIncrement/AutoIncrementFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Common/AutoIncrement/IAutoIncrementFacade.php b/app/Model/Facade/Common/AutoIncrement/IAutoIncrementFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Common/PermanentLogin/IPermanentLoginFacade.php b/app/Model/Facade/Common/PermanentLogin/IPermanentLoginFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Common/PermanentLogin/PermanentLoginFacade.php b/app/Model/Facade/Common/PermanentLogin/PermanentLoginFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/Auth/AuthenticationFacade.php b/app/Model/Facade/Front/Auth/AuthenticationFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/Auth/AuthorizationFacade.php b/app/Model/Facade/Front/Auth/AuthorizationFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/Auth/IAuthorizationFacade.php b/app/Model/Facade/Front/Auth/IAuthorizationFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/Auth/UserIdentityFacade.php b/app/Model/Facade/Front/Auth/UserIdentityFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/EmailForgotten/EmailForgottenFacade.php b/app/Model/Facade/Front/EmailForgotten/EmailForgottenFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/EmailForgotten/IEmailForgottenFacade.php b/app/Model/Facade/Front/EmailForgotten/IEmailForgottenFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/InputCheck/EInputCheckFacade.php b/app/Model/Facade/Front/InputCheck/EInputCheckFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/InputCheck/IInputCheckFacade.php b/app/Model/Facade/Front/InputCheck/IInputCheckFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/Front/InputCheck/InputCheckFacade.php b/app/Model/Facade/Front/InputCheck/InputCheckFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Last/ArticleLastFacade.php b/app/Model/Facade/User/Last/ArticleLastFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Last/MovieLastFacade.php b/app/Model/Facade/User/Last/MovieLastFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Last/SerialLastFacade.php b/app/Model/Facade/User/Last/SerialLastFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Later/LaterArticleFacade.php b/app/Model/Facade/User/Later/LaterArticleFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Later/LaterMovieFacade.php b/app/Model/Facade/User/Later/LaterMovieFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Later/LaterSerialFacade.php b/app/Model/Facade/User/Later/LaterSerialFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Like/ActorLikeFacade.php b/app/Model/Facade/User/Like/ActorLikeFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Like/ArticleLikeFacade.php b/app/Model/Facade/User/Like/ArticleLikeFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Like/MovieLikeFacade.php b/app/Model/Facade/User/Like/MovieLikeFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/User/Like/SerialLikeFacade.php b/app/Model/Facade/User/Like/SerialLikeFacade.php old mode 100644 new mode 100755 diff --git a/app/Model/Facade/facade.neon b/app/Model/Facade/facade.neon old mode 100644 new mode 100755 diff --git a/app/Model/FlashMessage.php b/app/Model/FlashMessage.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/AbstractService.php b/app/Model/Service/AbstractService.php new file mode 100755 index 0000000..3d49a4a --- /dev/null +++ b/app/Model/Service/AbstractService.php @@ -0,0 +1,24 @@ +entityManager->persist($entity); + $this->entityManager->flush(); + } + +} \ No newline at end of file diff --git a/app/Model/Service/Actor/ActorService.php b/app/Model/Service/Actor/ActorService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/Actor/IActorService.php b/app/Model/Service/Actor/IActorService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/Article/ArticleService.php b/app/Model/Service/Article/ArticleService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/Article/IArticleService.php b/app/Model/Service/Article/IArticleService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/Movie/IMovieService.php b/app/Model/Service/Movie/IMovieService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/Movie/MovieService.php b/app/Model/Service/Movie/MovieService.php old mode 100644 new mode 100755 index 6506420..b21841a --- a/app/Model/Service/Movie/MovieService.php +++ b/app/Model/Service/Movie/MovieService.php @@ -4,15 +4,19 @@ use App\Model\Database\Entity\MovieEntity; use App\Model\Database\Entity\UserEntity; -use App\Model\Facade\Front\Auth\UserIdentityFacade; +use App\Model\Facade\Admin\Content\Image\ImageFacade; +use App\Model\Service\AbstractService; use Doctrine\ORM\EntityManagerInterface; -final class MovieService implements IMovieService +final class MovieService extends AbstractService implements IMovieService { public function __construct( - private readonly EntityManagerInterface $entityManager - ) {} + protected EntityManagerInterface $entityManager, + private readonly ImageFacade $imageFacade + ) { + parent::__construct($entityManager); + } public function getMovies(): array @@ -21,6 +25,17 @@ public function getMovies(): array } + public function getMoviesByOrder(string $order): array + { + return $this->entityManager->createQueryBuilder() + ->select("movie") + ->from(MovieEntity::class, "movie") + ->orderBy("movie.id", $order) + ->getQuery() + ->getArrayResult(); + } + + public function getMovieBySlug(string $slug): MovieEntity { return $this->entityManager->getRepository(MovieEntity::class)->findOneBy([ @@ -34,6 +49,7 @@ public function getMoviesByLimit(int $limit): array return $this->entityManager->getRepository(MovieEntity::class)->findBy([], null, $limit, 0); } + public function getMoviesLastByUser(UserEntity $user): array { return $this->entityManager->createQueryBuilder() @@ -48,4 +64,32 @@ public function getMoviesLastByUser(UserEntity $user): array ->getResult(); } + + public function save(array $values): ?MovieEntity + { + $movie = new MovieEntity( + $values["name"] + ); + $movie->setYear($values["year"]); + $movie->setRating($values["rating"]); + $movie->setTrailer($values["trailer"]); + $movie->setDescription($values["description"]); + $movie->setTeaser($values["teaser"]); + + $this->entityManager->wrapInTransaction(function () use ($movie, $values) { + $this->saveEntity($movie); + + $movieId = $movie->getId(); + $this->imageFacade->createImageFromUpload($values["banner"], $movieId, ImageFacade::CONTENT_TYPE_MOVIE, ImageFacade::IMAGE_TYPE_BANNER); + $this->imageFacade->createImageFromUpload($values["poster"], $movieId, ImageFacade::CONTENT_TYPE_MOVIE, ImageFacade::IMAGE_TYPE_POSTER); + }); + + return $movie; + } + + public function findMovieById(int $id): ?MovieEntity + { + return $this->entityManager->find(MovieEntity::class, $id); + } + } diff --git a/app/Model/Service/PermanentLogin/IPermanentLoginService.php b/app/Model/Service/PermanentLogin/IPermanentLoginService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/PermanentLogin/PermanentLoginService.php b/app/Model/Service/PermanentLogin/PermanentLoginService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/Serial/ISerialService.php b/app/Model/Service/Serial/ISerialService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/Serial/SerialService.php b/app/Model/Service/Serial/SerialService.php old mode 100644 new mode 100755 index 6f62721..37860f7 --- a/app/Model/Service/Serial/SerialService.php +++ b/app/Model/Service/Serial/SerialService.php @@ -34,6 +34,7 @@ public function getSerialsByLimit(int $limit): array return $this->entityManager->getRepository(SerialEntity::class)->findBy([], null, $limit, 0); } + public function getSerialsLastByUser(UserEntity $user): array { return $this->entityManager->createQueryBuilder() diff --git a/app/Model/Service/User/IUserService.php b/app/Model/Service/User/IUserService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/User/UserService.php b/app/Model/Service/User/UserService.php old mode 100644 new mode 100755 diff --git a/app/Model/Service/service.neon b/app/Model/Service/service.neon old mode 100644 new mode 100755 diff --git a/app/Model/Trait/hasCreatedAt.php b/app/Model/Trait/hasCreatedAt.php new file mode 100755 index 0000000..006e661 --- /dev/null +++ b/app/Model/Trait/hasCreatedAt.php @@ -0,0 +1,22 @@ +createdAt; + } + +} \ No newline at end of file diff --git a/app/Model/Trait/hasEditedAt.php b/app/Model/Trait/hasEditedAt.php new file mode 100755 index 0000000..efaf76b --- /dev/null +++ b/app/Model/Trait/hasEditedAt.php @@ -0,0 +1,22 @@ +editedAt; + } + +} \ No newline at end of file diff --git a/app/Module/Admin/AdminPresenter.php b/app/Module/Admin/AdminPresenter.php index 03a69e7..aa21551 100755 --- a/app/Module/Admin/AdminPresenter.php +++ b/app/Module/Admin/AdminPresenter.php @@ -11,12 +11,10 @@ abstract class AdminPresenter extends ModulePresenter { public function __construct( - protected readonly AutoIncrementFacade $autoIncrementFacade, protected readonly PermanentLoginFacade $permanentLoginFacade, protected readonly AuthorizationFacade $authorizationFacade ) { parent::__construct( - $autoIncrementFacade, $permanentLoginFacade, $authorizationFacade ); diff --git a/app/Module/Admin/EditAdmin/EditAdminPresenter.php b/app/Module/Admin/EditAdmin/EditAdminPresenter.php deleted file mode 100755 index be6062d..0000000 --- a/app/Module/Admin/EditAdmin/EditAdminPresenter.php +++ /dev/null @@ -1,28 +0,0 @@ -entityManager = $entityManager; - } - - public function actionDefault(): void - { - $database = $this->entityManager->getRepository(UserEntity::class)->findAll(); - - $this->getTemplate()->users = $database; - } - -} diff --git a/app/Module/Admin/EditAdmin/templates/EditAdmin.default.latte b/app/Module/Admin/EditAdmin/templates/EditAdmin.default.latte deleted file mode 100755 index 6208624..0000000 --- a/app/Module/Admin/EditAdmin/templates/EditAdmin.default.latte +++ /dev/null @@ -1,57 +0,0 @@ -{varType App\Model\Database\Entity\User[] $users} -{block content} -
-

Upravit správcovství

- -
-

Admin

-
- {foreach $users as $singleUser} - {if $singleUser->getUserRole() && $singleUser->getAdminRole()} - -
-

{$singleUser->getName()}

-
-
- {/if} - {/foreach} -
- -

User

-
- {foreach $users as $singleUser} - {if $singleUser->getUserRole() && !$singleUser->getAdminRole()} - -
-

{$singleUser->getName()}

-
-
- {/if} - {/foreach} -
-
-
- - diff --git a/app/Module/Admin/Homepage/HomepagePresenter.php b/app/Module/Admin/Homepage/HomepagePresenter.php index 59f4be9..b0a6a8f 100755 --- a/app/Module/Admin/Homepage/HomepagePresenter.php +++ b/app/Module/Admin/Homepage/HomepagePresenter.php @@ -11,13 +11,11 @@ class HomepagePresenter extends AdminPresenter { public function __construct( - AutoIncrementFacade $autoIncrementFacade, PermanentLoginFacade $permanentLoginFacade, AuthorizationFacade $authorizationFacade ) { parent::__construct( - $autoIncrementFacade, $permanentLoginFacade, $authorizationFacade ); diff --git a/app/Module/Admin/Homepage/templates/Homepage.default.latte b/app/Module/Admin/Homepage/templates/Homepage.default.latte index 73b4d4c..d39c8be 100755 --- a/app/Module/Admin/Homepage/templates/Homepage.default.latte +++ b/app/Module/Admin/Homepage/templates/Homepage.default.latte @@ -1,49 +1,11 @@ +{import "defaultTopic.latte"} +{import "defaultDashboard.latte"} {block content} -
-
-

Administrativní sekce

-
-
-
+
+ {include defaultTopic} +
-
- -
-
- - +
+ {include defaultDashboard} +
\ No newline at end of file diff --git a/app/Module/Admin/Homepage/templates/defaultDashboard.latte b/app/Module/Admin/Homepage/templates/defaultDashboard.latte new file mode 100755 index 0000000..dffb49b --- /dev/null +++ b/app/Module/Admin/Homepage/templates/defaultDashboard.latte @@ -0,0 +1,61 @@ +{block defaultDashboard} + + \ No newline at end of file diff --git a/app/Module/Admin/Homepage/templates/defaultTopic.latte b/app/Module/Admin/Homepage/templates/defaultTopic.latte new file mode 100755 index 0000000..45bb2cb --- /dev/null +++ b/app/Module/Admin/Homepage/templates/defaultTopic.latte @@ -0,0 +1,31 @@ +{block defaultTopic} + +
+
+
+
+ + + + movie-n-popcorn + +
+
+
+
+
+
    +
  • <
  • +
  • Administrativní sekce

  • +
+
+
+
+
+
+
+
diff --git a/app/Module/Admin/Movie/MoviePresenter.php b/app/Module/Admin/Movie/MoviePresenter.php new file mode 100755 index 0000000..5b5e63a --- /dev/null +++ b/app/Module/Admin/Movie/MoviePresenter.php @@ -0,0 +1,114 @@ +movieService->getMoviesByOrder("DESC"); + + $grid->setDataSource($movies); + $grid->addColumnText("id", "ID"); + $grid->addColumnLink("name", "jméno", ":Front:Movie:detail", params: ["url" => "slug"])->setSortable()->setFilterText()->setPlaceholder("hledat"); + $grid->addColumnText("year", "rok")->setFilterText()->setPlaceholder("hledat"); + $grid->addColumnDateTime("createdAt", "vytvořeno")->setFormat("d. m. Y - H:m"); + $grid->addColumnDateTime("editedAt", "upraveno")->setFormat("d. m. Y - H:m"); + $grid->addAction("edit", "upravit"); + + $grid->setRememberState(false); + $grid->setDefaultPerPage(20); + + return $grid; + } + + + protected function createComponentMovieForm(): Form + { + $event = new class ($this) implements IOnSaveEvent { + + public function __construct(private readonly MoviePresenter $presenter) + { + } + + public function fire(bool $success, ?int $id = null, ?string $message = null): void + { + if ($success) { + $this->presenter->flashMessage("Úspěšně přidáno", "success"); + + if ($id) { + $this->presenter->redirect(":Admin:Homepage:", ["id" => $id]); + } else { + $this->presenter->redirect(":Admin:Movie:"); + } + } else { + $this->presenter->flashMessage($message ?? "Nebyla uvedena příčina chyby"); + } + } + + }; + + $movieFormFactory = $this->movieFormFactory->create($event); + $movieForm = $movieFormFactory->getMovieForm(); + + $movieId = $this->getParameter("id"); + + if ($movieId !== null) { + $movie = $this->movieService->findMovieById((int) $movieId); + if ($movie !== NULL) { + $movieForm->onRender[] = static function () use ($movieForm, $movie) { + $movieForm->setDefaults(MovieFormData::fillFormDataByMovie($movie)); + }; + } + } + + + return $movieForm; + } + +} \ No newline at end of file diff --git a/app/Module/Admin/Movie/components/MovieForm/IOnSaveEvent.php b/app/Module/Admin/Movie/components/MovieForm/IOnSaveEvent.php new file mode 100755 index 0000000..f3d7068 --- /dev/null +++ b/app/Module/Admin/Movie/components/MovieForm/IOnSaveEvent.php @@ -0,0 +1,10 @@ +addText("name", "Název"); + $form->addText("year", "Rok")->addRule($form::NUMERIC, "Hodnota musí být číslo"); + $form->addText("rating", "Hodnocení")->addRule($form::NUMERIC, "Hodnota musí být číslo"); + $form->addText("trailer", "Trailer")->addRule($form::MAX_LENGTH, "Překročený limit znaků", 10); + $form->addTextArea("description", "Popis"); + $form->addTextArea("teaser", "Upoutávka"); + $form->addUpload("banner", "Vybrat banner")->addRule($form::IMAGE); + $form->addUpload("poster", "Vybrat poster")->addRule($form::IMAGE); + $form->addSubmit("create", "vytvořit"); + $form->addSubmit("createAndShow", "vytvořit a zobrazit"); + $form->onSuccess[] = function (Form $form, MovieFormData $values): void + { + $movie = null; + $valuesArray = $values->toArray(); + + try { + MovieFormData::validate($form); + $movie = $this->movieService->save($valuesArray); + } catch (ValueEmptyException) { + $this->event->fire(false, message: "Vyplňte všechna požadovaná pole"); + } catch (ImageException) { + $this->event->fire(false, message: "Nebyl nahrán obrázek"); + } catch (Exception) { + $this->event->fire(false, message: "Vyskytla se chyba"); + } + + if ($movie !== NULL) { + if ($form['createAndShow']->isSubmittedBy()) { + $this->event->fire(true, $movie->getId()); + } else { + $this->event->fire(true); + } + } + + }; + + return $form; + } + +} \ No newline at end of file diff --git a/app/Module/Admin/Movie/components/MovieForm/MovieFormData.php b/app/Module/Admin/Movie/components/MovieForm/MovieFormData.php new file mode 100755 index 0000000..8e45862 --- /dev/null +++ b/app/Module/Admin/Movie/components/MovieForm/MovieFormData.php @@ -0,0 +1,75 @@ + $this->name, + "year" => (int) $this->year, + "rating" => (int) $this->rating, + "trailer" => $this->trailer, + "description" => $this->description, + "teaser" => $this->teaser, + "banner" => $this->banner, + "poster" => $this->poster, + ]; + } + + + /** + * @return array + */ + public static function fillFormDataByMovie(MovieEntity $movie): array + { + return [ + 'name' => $movie->getName(), + 'year' => $movie->getYear(), + 'rating' => $movie->getRating(), + 'trailer' => $movie->getTrailer(), + 'description' => $movie->getDescription(), + 'teaser' => $movie->getTeaser(), + ]; + } + + + /** + * @throws ValueEmptyException + */ + public static function validate(Form $form): void + { + $validateEmptyMessage = "Vyplňte pole"; + + $formValues = $form->getValues(); + + if (Validators::isNone($formValues->name)) { + $form["name"]->addError($validateEmptyMessage); + + throw new ValueEmptyException(); + } + } + +} \ No newline at end of file diff --git a/app/Module/Admin/Movie/components/MovieForm/MovieFormFactory.php b/app/Module/Admin/Movie/components/MovieForm/MovieFormFactory.php new file mode 100755 index 0000000..b093eff --- /dev/null +++ b/app/Module/Admin/Movie/components/MovieForm/MovieFormFactory.php @@ -0,0 +1,12 @@ + + {include topicCreate} + + +
+ {include contentCreate} +
\ No newline at end of file diff --git a/app/Module/Admin/Movie/templates/Movie.default.latte b/app/Module/Admin/Movie/templates/Movie.default.latte new file mode 100755 index 0000000..9ab6812 --- /dev/null +++ b/app/Module/Admin/Movie/templates/Movie.default.latte @@ -0,0 +1,11 @@ +{import "topic/topicDefault.latte"} +{import "grid/gridDefault.latte"} +{block content} + +
+ {include topicDefault} +
+ +
+ {include gridDefault} +
\ No newline at end of file diff --git a/app/Module/Admin/Movie/templates/Movie.edit.latte b/app/Module/Admin/Movie/templates/Movie.edit.latte new file mode 100755 index 0000000..754eb93 --- /dev/null +++ b/app/Module/Admin/Movie/templates/Movie.edit.latte @@ -0,0 +1,11 @@ +{import "topic/topicEdit.latte"} +{import "content/contentEdit.latte"} +{block content} + +
+ {include topicEdit} +
+ +
+ {include contentEdit} +
\ No newline at end of file diff --git a/app/Module/Admin/Movie/templates/content/contentCreate.latte b/app/Module/Admin/Movie/templates/content/contentCreate.latte new file mode 100755 index 0000000..9a58768 --- /dev/null +++ b/app/Module/Admin/Movie/templates/content/contentCreate.latte @@ -0,0 +1,133 @@ +{block contentCreate} + +
+
+
+
+
+
+
+
+ * + +
+
+ hasErrors() || $form->ownErrors} content-create__form--error{/if}"> + +
+
+
+
+
+ * + +
+
+ hasErrors() || $form->ownErrors} content-create__form--error{/if}"> + +
+
+
+
+ * + +
+
+
+ hasErrors() || $form->ownErrors} content-create__form--error{/if}"> + % +
+ +
+
+
+
+
+ * + +
+
+