From 13601b27b3525992b6384deb1b66dc5a86a35449 Mon Sep 17 00:00:00 2001 From: Maxime Leclercq Date: Mon, 1 Jul 2024 15:49:36 +0200 Subject: [PATCH] feat(plugin): first version --- .github/workflows/recipe.yaml | 6 +- .github/workflows/security.yaml | 4 +- .github/workflows/tests.yaml | 4 +- README.md | 61 ++- composer.json | 4 +- dist/.env.local | 2 + .../monsieurbiz_sylius_blog_plugin.yaml | 2 +- docker-compose.yaml.dist | 3 +- src/Controller/.gitignore | 0 .../MonsieurBizSyliusBlogExtension.php | 22 +- src/Entity/.gitignore | 0 src/Entity/Article.php | 226 +++++++++ src/Entity/ArticleInterface.php | 80 +++ src/Entity/ArticleTranslation.php | 75 +++ src/Entity/ArticleTranslationInterface.php | 32 ++ src/Entity/Author.php | 39 ++ src/Entity/AuthorInterface.php | 23 + src/Entity/Tag.php | 118 +++++ src/Entity/TagInterface.php | 40 ++ src/Entity/TagTranslation.php | 51 ++ src/Entity/TagTranslationInterface.php | 24 + src/EventListener/AdminMenuListener.php | 42 ++ src/Fixture/ArticleFixture.php | 63 +++ src/Fixture/AuthorFixture.php | 42 ++ src/Fixture/Factory/ArticleFixtureFactory.php | 243 +++++++++ src/Fixture/Factory/AuthorFixtureFactory.php | 63 +++ src/Fixture/Factory/TagFixtureFactory.php | 119 +++++ src/Fixture/TagFixture.php | 50 ++ src/Form/Type/ArticleTranslationType.php | 44 ++ src/Form/Type/ArticleType.php | 90 ++++ src/Form/Type/AuthorType.php | 32 ++ src/Form/Type/TagTranslationType.php | 36 ++ src/Form/Type/TagType.php | 36 ++ src/Menu/AdminArticleUpdateMenuBuilder.php | 58 +++ src/Migrations/.gitignore | 0 src/Migrations/Version20240702145615.php | 70 +++ src/Repository/ArticleRepository.php | 115 +++++ src/Repository/ArticleRepositoryInterface.php | 42 ++ src/Repository/AuthorRepository.php | 29 ++ src/Repository/AuthorRepositoryInterface.php | 26 + src/Repository/TagRepository.php | 96 ++++ src/Repository/TagRepositoryInterface.php | 42 ++ src/Resources/config/config.yaml | 4 + src/Resources/config/doctrine/Article.orm.xml | 66 +++ .../doctrine/ArticleTranslation.orm.xml | 26 + src/Resources/config/doctrine/Author.orm.xml | 14 + src/Resources/config/doctrine/Tag.orm.xml | 33 ++ .../config/doctrine/TagTranslation.orm.xml | 24 + src/Resources/config/images.yaml | 8 + src/Resources/config/resources.yaml | 30 ++ src/Resources/config/routes.yaml | 9 + src/Resources/config/routes/admin.yaml | 99 ++++ src/Resources/config/routes/shop.yaml | 60 +++ src/Resources/config/services.yaml | 41 +- src/Resources/config/sylius/fixtures.yaml | 15 + src/Resources/config/sylius/grids.yaml | 2 + .../grids/monsieurbiz_blog_admin_article.yaml | 102 ++++ .../grids/monsieurbiz_blog_admin_author.yaml | 35 ++ .../grids/monsieurbiz_blog_shop_article.yaml | 50 ++ .../grids/monsieurbiz_blog_shop_category.yaml | 27 + .../monsieurbiz_blog_shop_tag_article.yaml | 50 ++ .../config/sylius/state_machine.yaml | 2 + .../monsieurbiz_blog_article.yaml | 20 + src/Resources/config/sylius/ui.yaml | 7 + src/Resources/config/validation/Article.yaml | 11 + .../config/validation/ArticleTranslation.yaml | 27 + src/Resources/config/validation/Author.yaml | 9 + src/Resources/config/validation/Tag.yaml | 5 + .../config/validation/TagTranslation.yaml | 21 + src/Resources/fixtures/article-1.jpg | Bin 0 -> 271043 bytes src/Resources/fixtures/article-2.jpg | Bin 0 -> 45031 bytes src/Resources/fixtures/article-3.jpg | Bin 0 -> 134061 bytes src/Resources/fixtures/article-4.jpg | Bin 0 -> 104826 bytes src/Resources/fixtures/article-5.jpg | Bin 0 -> 38938 bytes src/Resources/translations/messages.en.yaml | 36 ++ src/Resources/translations/messages.fr.yaml | 36 ++ src/Resources/views/.gitignore | 0 .../views/Admin/Article/State/draft.html.twig | 4 + .../Admin/Article/State/published.html.twig | 4 + .../Admin/Article/Update/_toolbar.html.twig | 4 + .../views/Admin/Grid/Field/_authors.html.twig | 3 + src/Resources/views/Admin/Tag/_tree.html.twig | 54 ++ .../views/Admin/Tag/create.html.twig | 12 + .../views/Admin/Tag/update.html.twig | 12 + .../views/Shop/Article/_image.html.twig | 14 + .../views/Shop/Article/_list.html.twig | 62 +++ .../Shop/Article/_structured_data.html.twig | 32 ++ .../views/Shop/Article/index.html.twig | 16 + .../views/Shop/Article/show.html.twig | 65 +++ .../Shop/Layout/Topbar/_blogLink.html.twig | 5 + .../views/Shop/Tag/_header.html.twig | 13 + symfony.lock | 470 ++++++++++++++++++ 92 files changed, 3759 insertions(+), 34 deletions(-) create mode 100644 dist/.env.local delete mode 100644 src/Controller/.gitignore delete mode 100644 src/Entity/.gitignore create mode 100644 src/Entity/Article.php create mode 100644 src/Entity/ArticleInterface.php create mode 100644 src/Entity/ArticleTranslation.php create mode 100644 src/Entity/ArticleTranslationInterface.php create mode 100644 src/Entity/Author.php create mode 100644 src/Entity/AuthorInterface.php create mode 100644 src/Entity/Tag.php create mode 100644 src/Entity/TagInterface.php create mode 100644 src/Entity/TagTranslation.php create mode 100644 src/Entity/TagTranslationInterface.php create mode 100644 src/EventListener/AdminMenuListener.php create mode 100644 src/Fixture/ArticleFixture.php create mode 100644 src/Fixture/AuthorFixture.php create mode 100644 src/Fixture/Factory/ArticleFixtureFactory.php create mode 100644 src/Fixture/Factory/AuthorFixtureFactory.php create mode 100644 src/Fixture/Factory/TagFixtureFactory.php create mode 100644 src/Fixture/TagFixture.php create mode 100644 src/Form/Type/ArticleTranslationType.php create mode 100644 src/Form/Type/ArticleType.php create mode 100644 src/Form/Type/AuthorType.php create mode 100644 src/Form/Type/TagTranslationType.php create mode 100644 src/Form/Type/TagType.php create mode 100644 src/Menu/AdminArticleUpdateMenuBuilder.php delete mode 100644 src/Migrations/.gitignore create mode 100644 src/Migrations/Version20240702145615.php create mode 100644 src/Repository/ArticleRepository.php create mode 100644 src/Repository/ArticleRepositoryInterface.php create mode 100644 src/Repository/AuthorRepository.php create mode 100644 src/Repository/AuthorRepositoryInterface.php create mode 100644 src/Repository/TagRepository.php create mode 100644 src/Repository/TagRepositoryInterface.php create mode 100644 src/Resources/config/doctrine/Article.orm.xml create mode 100644 src/Resources/config/doctrine/ArticleTranslation.orm.xml create mode 100644 src/Resources/config/doctrine/Author.orm.xml create mode 100644 src/Resources/config/doctrine/Tag.orm.xml create mode 100644 src/Resources/config/doctrine/TagTranslation.orm.xml create mode 100644 src/Resources/config/images.yaml create mode 100644 src/Resources/config/resources.yaml create mode 100644 src/Resources/config/routes/admin.yaml create mode 100644 src/Resources/config/routes/shop.yaml create mode 100644 src/Resources/config/sylius/fixtures.yaml create mode 100644 src/Resources/config/sylius/grids.yaml create mode 100644 src/Resources/config/sylius/grids/monsieurbiz_blog_admin_article.yaml create mode 100644 src/Resources/config/sylius/grids/monsieurbiz_blog_admin_author.yaml create mode 100644 src/Resources/config/sylius/grids/monsieurbiz_blog_shop_article.yaml create mode 100644 src/Resources/config/sylius/grids/monsieurbiz_blog_shop_category.yaml create mode 100644 src/Resources/config/sylius/grids/monsieurbiz_blog_shop_tag_article.yaml create mode 100644 src/Resources/config/sylius/state_machine.yaml create mode 100644 src/Resources/config/sylius/state_machine/monsieurbiz_blog_article.yaml create mode 100644 src/Resources/config/sylius/ui.yaml create mode 100644 src/Resources/config/validation/Article.yaml create mode 100644 src/Resources/config/validation/ArticleTranslation.yaml create mode 100644 src/Resources/config/validation/Author.yaml create mode 100644 src/Resources/config/validation/Tag.yaml create mode 100644 src/Resources/config/validation/TagTranslation.yaml create mode 100644 src/Resources/fixtures/article-1.jpg create mode 100644 src/Resources/fixtures/article-2.jpg create mode 100644 src/Resources/fixtures/article-3.jpg create mode 100644 src/Resources/fixtures/article-4.jpg create mode 100644 src/Resources/fixtures/article-5.jpg create mode 100644 src/Resources/translations/messages.en.yaml create mode 100644 src/Resources/translations/messages.fr.yaml delete mode 100644 src/Resources/views/.gitignore create mode 100644 src/Resources/views/Admin/Article/State/draft.html.twig create mode 100644 src/Resources/views/Admin/Article/State/published.html.twig create mode 100644 src/Resources/views/Admin/Article/Update/_toolbar.html.twig create mode 100644 src/Resources/views/Admin/Grid/Field/_authors.html.twig create mode 100644 src/Resources/views/Admin/Tag/_tree.html.twig create mode 100644 src/Resources/views/Admin/Tag/create.html.twig create mode 100644 src/Resources/views/Admin/Tag/update.html.twig create mode 100644 src/Resources/views/Shop/Article/_image.html.twig create mode 100644 src/Resources/views/Shop/Article/_list.html.twig create mode 100644 src/Resources/views/Shop/Article/_structured_data.html.twig create mode 100644 src/Resources/views/Shop/Article/index.html.twig create mode 100644 src/Resources/views/Shop/Article/show.html.twig create mode 100644 src/Resources/views/Shop/Layout/Topbar/_blogLink.html.twig create mode 100644 src/Resources/views/Shop/Tag/_header.html.twig create mode 100644 symfony.lock diff --git a/.github/workflows/recipe.yaml b/.github/workflows/recipe.yaml index 9d83f70..a4077d9 100644 --- a/.github/workflows/recipe.yaml +++ b/.github/workflows/recipe.yaml @@ -9,15 +9,13 @@ jobs: recipe: - name: Flex recipe (PHP ${{ matrix.php }}, Sylius ${{ matrix.sylius }}) - runs-on: ubuntu-latest strategy: fail-fast: false matrix: - php: ['8.2'] - sylius: ["~1.13.0"] + php: ['8.1', '8.2'] + sylius: ["~1.12.0", "~1.13.0"] steps: - name: Setup PHP diff --git a/.github/workflows/security.yaml b/.github/workflows/security.yaml index 8167db5..82777fc 100644 --- a/.github/workflows/security.yaml +++ b/.github/workflows/security.yaml @@ -8,14 +8,12 @@ jobs: security: - name: Security check (PHP ${{ matrix.php }}) - runs-on: ubuntu-latest strategy: fail-fast: false matrix: - php: ['8.2'] + php: ['8.1', '8.2'] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 501ea6c..78b94f4 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -9,14 +9,12 @@ jobs: php: - name: Quality tests (PHP ${{ matrix.php }}) - runs-on: ubuntu-latest strategy: fail-fast: false matrix: - php: ['8.2'] + php: ['8.1', '8.2'] env: COMPOSER_ARGS: --prefer-dist diff --git a/README.md b/README.md index b9e4de6..58f6e0b 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,67 @@ -# Sylius Blog Plugin +

Sylius Blog Plugin

+This plugin adds a blog to your Sylius project. It allows you to create blog articles, tags and authors. +## Compatibility + +## Compatibility + +| Sylius Version | PHP Version | +|---|---| +| 1.12 | 8.1 - 8.2 | +| 1.13 | 8.1 - 8.2 | ## Installation -TBD +If you want to use our recipes, you can add recipes endpoints to your composer.json by running this command: + +```bash +composer config --no-plugins --json extra.symfony.endpoint '["https://api.github.com/repos/monsieurbiz/symfony-recipes/contents/index.json?ref=flex/master","flex://defaults"]' +``` + +Install the plugin via composer: + +```bash +composer require monsieurbiz/sylius-blog-plugin:dev-master +``` + + + +Change your `config/bundles.php` file to add this line for the plugin declaration: + +```php + ['all' => true], +]; +``` + +Add the plugin's routing by creating a new file in `config/routes/monsieurbiz_sylius_blog_plugin.yaml` with the following content: + +```yaml +imports: + resource: '@MonsieurBizSyliusBlogPlugin/Resources/config/config.yaml' +``` + +Add the plugin's routing by creating a new file in `config/routes/monsieurbiz_sylius_blog_plugin.yaml` with the following content: + +```yaml +monsieurbiz_blog_plugin: + resource: '@MonsieurBizSyliusBlogPlugin/Resources/config/routes.yaml' +``` + +And finally, update your database: + +```bash +bin/console doctrine:migrations:migrate +``` + ## License This plugin is under the MIT license. -Please see the [LICENSE](LICENSE) file for more information. +Please see the [LICENSE](LICENSE) file for more information._ diff --git a/composer.json b/composer.json index fc63d11..c469139 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,9 @@ "license": "MIT", "require": { "php": "^8.2", - "sylius/sylius": "^1.12.0 || ^1.13.0" + "sylius/sylius": "^1.12.0 || ^1.13.0", + "monsieurbiz/sylius-rich-editor-plugin": "^2.8", + "monsieurbiz/sylius-media-manager-plugin": "^1.1" }, "require-dev": { "behat/behat": "^3.6.1", diff --git a/dist/.env.local b/dist/.env.local new file mode 100644 index 0000000..2587391 --- /dev/null +++ b/dist/.env.local @@ -0,0 +1,2 @@ +SYLIUS_FIXTURES_HOSTNAME=${SYMFONY_DEFAULT_ROUTE_HOST:-localhost} +SYMFONY_IDE=phpstorm diff --git a/dist/config/routes/monsieurbiz_sylius_blog_plugin.yaml b/dist/config/routes/monsieurbiz_sylius_blog_plugin.yaml index 1fb0cf9..7917a38 100644 --- a/dist/config/routes/monsieurbiz_sylius_blog_plugin.yaml +++ b/dist/config/routes/monsieurbiz_sylius_blog_plugin.yaml @@ -1,2 +1,2 @@ -imports: +monsieurbiz_blog_plugin: resource: '@MonsieurBizSyliusBlogPlugin/Resources/config/routes.yaml' diff --git a/docker-compose.yaml.dist b/docker-compose.yaml.dist index ee0776f..24d6f0c 100644 --- a/docker-compose.yaml.dist +++ b/docker-compose.yaml.dist @@ -1,4 +1,3 @@ -version: '3.8' services: database: image: mysql:8.0 @@ -18,4 +17,4 @@ services: - 1080 volumes: - database: {} \ No newline at end of file + database: {} diff --git a/src/Controller/.gitignore b/src/Controller/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/src/DependencyInjection/MonsieurBizSyliusBlogExtension.php b/src/DependencyInjection/MonsieurBizSyliusBlogExtension.php index b89f91a..ecb8f34 100644 --- a/src/DependencyInjection/MonsieurBizSyliusBlogExtension.php +++ b/src/DependencyInjection/MonsieurBizSyliusBlogExtension.php @@ -18,33 +18,22 @@ use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; -/** - * @SuppressWarnings(PHPMD.LongClassName) - */ final class MonsieurBizSyliusBlogExtension extends Extension implements PrependExtensionInterface { use PrependDoctrineMigrationsTrait; /** - * @inheritdoc + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function load(array $config, ContainerBuilder $container): void + public function load(array $configs, ContainerBuilder $container): void { $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.yaml'); } - /** - * @inheritdoc - */ public function getAlias(): string { - return 'monsieurbiz_blog'; - } - - public function prepend(ContainerBuilder $container): void - { - $this->prependDoctrineMigrations($container); + return str_replace('monsieur_biz', 'monsieurbiz', parent::getAlias()); } protected function getMigrationsNamespace(): string @@ -63,4 +52,9 @@ protected function getNamespacesOfMigrationsExecutedBefore(): array 'Sylius\Bundle\CoreBundle\Migrations', ]; } + + public function prepend(ContainerBuilder $container): void + { + $this->prependDoctrineMigrations($container); + } } diff --git a/src/Entity/.gitignore b/src/Entity/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/src/Entity/Article.php b/src/Entity/Article.php new file mode 100644 index 0000000..5f1f18f --- /dev/null +++ b/src/Entity/Article.php @@ -0,0 +1,226 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use DateTime; +use DateTimeInterface; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Sylius\Component\Channel\Model\ChannelInterface; +use Sylius\Component\Resource\Model\TimestampableTrait; +use Sylius\Component\Resource\Model\ToggleableTrait; +use Sylius\Component\Resource\Model\TranslatableTrait; + +/** + * @method ArticleTranslationInterface doGetTranslation(?string $locale = null) + */ +class Article implements ArticleInterface +{ + use TimestampableTrait; + use ToggleableTrait; + use TranslatableTrait { + TranslatableTrait::__construct as private initializeTranslationsCollection; + TranslatableTrait::getTranslation as private doGetTranslation; + } + + private ?int $id = null; + + protected ?string $image = null; + + /** @var bool */ + protected $enabled = true; + + /** @var Collection */ + protected Collection $channels; + + /** @var Collection */ + protected Collection $tags; + + protected ?DateTimeInterface $publishedAt; + + /** @var Collection */ + protected Collection $authors; + + protected string $state = ArticleInterface::STATE_DRAFT; + + public function __construct() + { + $this->initializeTranslationsCollection(); + $this->channels = new ArrayCollection(); + $this->tags = new ArrayCollection(); + $this->authors = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getTitle(): ?string + { + return $this->getTranslation()->getTitle(); + } + + public function setTitle(?string $title): void + { + $this->getTranslation()->setTitle($title); + } + + public function getImage(): ?string + { + return $this->image; + } + + public function setImage(?string $image): void + { + $this->image = $image; + } + + public function getSlug(): ?string + { + return $this->getTranslation()->getSlug(); + } + + public function setSlug(?string $slug): void + { + $this->getTranslation()->setSlug($slug); + } + + public function getDescription(): ?string + { + return $this->getTranslation()->getDescription(); + } + + public function setDescription(?string $description): void + { + $this->getTranslation()->setDescription($description); + } + + public function getContent(): ?string + { + return $this->getTranslation()->getContent(); + } + + public function setContent(string $content): void + { + $this->getTranslation()->setContent($content); + } + + public function addTag(TagInterface $tag): void + { + if (!$this->hasTag($tag)) { + $this->tags->add($tag); + $tag->addArticle($this); + } + } + + public function removeTag(TagInterface $tag): void + { + if ($this->hasTag($tag)) { + $this->tags->removeElement($tag); + $tag->removeArticle($this); + } + } + + public function hasTag(TagInterface $tag): bool + { + return $this->tags->contains($tag); + } + + public function getTags(): Collection + { + return $this->tags; + } + + public function getChannels(): Collection + { + return $this->channels; + } + + public function hasChannel(ChannelInterface $channel): bool + { + return $this->channels->contains($channel); + } + + public function addChannel(ChannelInterface $channel): void + { + if (!$this->hasChannel($channel)) { + $this->channels->add($channel); + } + } + + public function removeChannel(ChannelInterface $channel): void + { + if ($this->hasChannel($channel)) { + $this->channels->removeElement($channel); + } + } + + public function getState(): string + { + return $this->state; + } + + public function setState(string $state): void + { + $this->state = $state; + } + + public function getPublishedAt(): ?DateTimeInterface + { + return $this->publishedAt; + } + + public function setPublishedAt(?DateTimeInterface $publishedAt): void + { + $this->publishedAt = $publishedAt; + } + + public function addAuthor(AuthorInterface $author): void + { + if (!$this->hasAuthor($author)) { + $this->authors->add($author); + } + } + + public function removeAuthor(AuthorInterface $author): void + { + if ($this->hasAuthor($author)) { + $this->authors->removeElement($author); + } + } + + public function hasAuthor(AuthorInterface $author): bool + { + return $this->authors->contains($author); + } + + public function getAuthors(): Collection + { + return $this->authors; + } + + public function publish(): void + { + $this->publishedAt = new DateTime(); + } + + public function getTranslation(?string $locale = null): ArticleTranslationInterface + { + return $this->doGetTranslation($locale); + } + + protected function createTranslation(): ArticleTranslationInterface + { + return new ArticleTranslation(); + } +} diff --git a/src/Entity/ArticleInterface.php b/src/Entity/ArticleInterface.php new file mode 100644 index 0000000..b4591e1 --- /dev/null +++ b/src/Entity/ArticleInterface.php @@ -0,0 +1,80 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use DateTimeInterface; +use Doctrine\Common\Collections\Collection; +use Sylius\Component\Channel\Model\ChannelsAwareInterface; +use Sylius\Component\Resource\Model\ResourceInterface; +use Sylius\Component\Resource\Model\SlugAwareInterface; +use Sylius\Component\Resource\Model\TimestampableInterface; +use Sylius\Component\Resource\Model\ToggleableInterface; +use Sylius\Component\Resource\Model\TranslatableInterface; + +interface ArticleInterface extends ChannelsAwareInterface, ResourceInterface, SlugAwareInterface, ToggleableInterface, TranslatableInterface, TimestampableInterface +{ + public const GRAPH = 'monsieurbiz_blog_article'; + + public const TRANSITION_PUBLISH = 'publish'; + + public const STATE_DRAFT = 'draft'; + + public const STATE_PUBLISHED = 'published'; + + public function getTitle(): ?string; + + public function setTitle(?string $title): void; + + public function getDescription(): ?string; + + public function setDescription(?string $description): void; + + public function getImage(): ?string; + + public function setImage(?string $image): void; + + public function getContent(): ?string; + + public function setContent(string $content): void; + + public function addTag(TagInterface $tag): void; + + public function removeTag(TagInterface $tag): void; + + public function hasTag(TagInterface $tag): bool; + + /** + * @return Collection + */ + public function getTags(): Collection; + + public function getState(): string; + + public function setState(string $state): void; + + public function getPublishedAt(): ?DateTimeInterface; + + public function setPublishedAt(?DateTimeInterface $publishedAt): void; + + public function addAuthor(AuthorInterface $author): void; + + public function removeAuthor(AuthorInterface $author): void; + + public function hasAuthor(AuthorInterface $author): bool; + + /** + * @return Collection + */ + public function getAuthors(): Collection; + + public function publish(): void; +} diff --git a/src/Entity/ArticleTranslation.php b/src/Entity/ArticleTranslation.php new file mode 100644 index 0000000..e0c37de --- /dev/null +++ b/src/Entity/ArticleTranslation.php @@ -0,0 +1,75 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use Sylius\Component\Resource\Model\AbstractTranslation; +use Sylius\Component\Resource\Model\TimestampableTrait; + +class ArticleTranslation extends AbstractTranslation implements ArticleTranslationInterface +{ + use TimestampableTrait; + + protected ?int $id; + + protected ?string $title = null; + + protected ?string $slug; + + protected ?string $description; + + protected ?string $content; + + public function getId(): ?int + { + return $this->id; + } + + public function getTitle(): ?string + { + return $this->title; + } + + public function setTitle(?string $title): void + { + $this->title = $title; + } + + public function getSlug(): ?string + { + return $this->slug; + } + + public function setSlug(?string $slug): void + { + $this->slug = $slug; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): void + { + $this->description = $description; + } + + public function getContent(): ?string + { + return $this->content; + } + + public function setContent(?string $content): void + { + $this->content = $content; + } +} diff --git a/src/Entity/ArticleTranslationInterface.php b/src/Entity/ArticleTranslationInterface.php new file mode 100644 index 0000000..f94bc24 --- /dev/null +++ b/src/Entity/ArticleTranslationInterface.php @@ -0,0 +1,32 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use Sylius\Component\Resource\Model\ResourceInterface; +use Sylius\Component\Resource\Model\SlugAwareInterface; +use Sylius\Component\Resource\Model\TimestampableInterface; +use Sylius\Component\Resource\Model\TranslationInterface; + +interface ArticleTranslationInterface extends ResourceInterface, SlugAwareInterface, TimestampableInterface, TranslationInterface +{ + public function getTitle(): ?string; + + public function setTitle(?string $title): void; + + public function getDescription(): ?string; + + public function setDescription(?string $description): void; + + public function getContent(): ?string; + + public function setContent(string $content): void; +} diff --git a/src/Entity/Author.php b/src/Entity/Author.php new file mode 100644 index 0000000..3efc48a --- /dev/null +++ b/src/Entity/Author.php @@ -0,0 +1,39 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +class Author implements AuthorInterface +{ + private ?int $id = null; + + protected ?string $name = null; + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): void + { + $this->name = $name; + } + + public function __toString(): string + { + return $this->getName() ?? ''; + } +} diff --git a/src/Entity/AuthorInterface.php b/src/Entity/AuthorInterface.php new file mode 100644 index 0000000..3463900 --- /dev/null +++ b/src/Entity/AuthorInterface.php @@ -0,0 +1,23 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use Sylius\Component\Resource\Model\ResourceInterface; + +interface AuthorInterface extends ResourceInterface +{ + public function getId(): ?int; + + public function getName(): ?string; + + public function setName(?string $name): void; +} diff --git a/src/Entity/Tag.php b/src/Entity/Tag.php new file mode 100644 index 0000000..adb4155 --- /dev/null +++ b/src/Entity/Tag.php @@ -0,0 +1,118 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Sylius\Component\Resource\Model\TimestampableTrait; +use Sylius\Component\Resource\Model\ToggleableTrait; +use Sylius\Component\Resource\Model\TranslatableTrait; + +class Tag implements TagInterface +{ + use TimestampableTrait; + use ToggleableTrait; + use TranslatableTrait { + TranslatableTrait::__construct as private initializeTranslationsCollection; + TranslatableTrait::getTranslation as private doGetTranslation; + } + + private ?int $id = null; + + /** + * @var bool + */ + protected $enabled = true; + + protected ?int $position = null; + + /** + * @var Collection + */ + protected Collection $articles; + + public function __construct() + { + $this->initializeTranslationsCollection(); + $this->articles = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): ?string + { + return $this->getTranslation()->getName(); + } + + public function setName(?string $name): void + { + $this->getTranslation()->setName($name); + } + + public function getPosition(): ?int + { + return $this->position; + } + + public function setPosition(?int $position): void + { + $this->position = $position; + } + + public function getSlug(): ?string + { + return $this->getTranslation()->getSlug(); + } + + public function setSlug(?string $slug): void + { + $this->getTranslation()->setSlug($slug); + } + + public function addArticle(ArticleInterface $article): void + { + if (!$this->hasArticle($article)) { + $this->articles->add($article); + } + } + + public function removeArticle(ArticleInterface $article): void + { + if ($this->hasArticle($article)) { + $this->articles->removeElement($article); + } + } + + public function hasArticle(ArticleInterface $article): bool + { + return $this->articles->contains($article); + } + + public function getArticles(): Collection + { + return $this->articles; + } + + public function getTranslation(?string $locale = null): TagTranslationInterface + { + /** @phpstan-ignore-next-line */ + return $this->doGetTranslation($locale); + } + + protected function createTranslation(): TagTranslationInterface + { + return new TagTranslation(); + } +} diff --git a/src/Entity/TagInterface.php b/src/Entity/TagInterface.php new file mode 100644 index 0000000..97f1eb0 --- /dev/null +++ b/src/Entity/TagInterface.php @@ -0,0 +1,40 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use Doctrine\Common\Collections\Collection; +use Sylius\Component\Resource\Model\ResourceInterface; +use Sylius\Component\Resource\Model\SlugAwareInterface; +use Sylius\Component\Resource\Model\ToggleableInterface; +use Sylius\Component\Resource\Model\TranslatableInterface; + +interface TagInterface extends ResourceInterface, ToggleableInterface, TranslatableInterface, SlugAwareInterface +{ + public function getName(): ?string; + + public function setName(?string $name): void; + + public function getPosition(): ?int; + + public function setPosition(?int $position): void; + + public function addArticle(ArticleInterface $article): void; + + public function removeArticle(ArticleInterface $article): void; + + public function hasArticle(ArticleInterface $article): bool; + + /** + * @return Collection + */ + public function getArticles(): Collection; +} diff --git a/src/Entity/TagTranslation.php b/src/Entity/TagTranslation.php new file mode 100644 index 0000000..f35b56b --- /dev/null +++ b/src/Entity/TagTranslation.php @@ -0,0 +1,51 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use Sylius\Component\Resource\Model\AbstractTranslation; +use Sylius\Component\Resource\Model\TimestampableTrait; + +class TagTranslation extends AbstractTranslation implements TagTranslationInterface +{ + use TimestampableTrait; + + protected ?int $id; + + protected ?string $name = null; + + protected ?string $slug; + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): ?string + { + return $this->name; + } + + 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; + } +} diff --git a/src/Entity/TagTranslationInterface.php b/src/Entity/TagTranslationInterface.php new file mode 100644 index 0000000..72642c3 --- /dev/null +++ b/src/Entity/TagTranslationInterface.php @@ -0,0 +1,24 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Entity; + +use Sylius\Component\Resource\Model\ResourceInterface; +use Sylius\Component\Resource\Model\SlugAwareInterface; +use Sylius\Component\Resource\Model\TimestampableInterface; +use Sylius\Component\Resource\Model\TranslationInterface; + +interface TagTranslationInterface extends ResourceInterface, SlugAwareInterface, TimestampableInterface, TranslationInterface +{ + public function getName(): ?string; + + public function setName(?string $name): void; +} diff --git a/src/EventListener/AdminMenuListener.php b/src/EventListener/AdminMenuListener.php new file mode 100644 index 0000000..b6341ae --- /dev/null +++ b/src/EventListener/AdminMenuListener.php @@ -0,0 +1,42 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\EventListener; + +use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent; + +final class AdminMenuListener +{ + public function __invoke(MenuBuilderEvent $event): void + { + $menu = $event->getMenu(); + + $blogMenu = $menu + ->addChild('monsieurbiz-blog') + ->setLabel('monsieurbiz_blog.ui.menu_blog') + ; + + $blogMenu->addChild('monsieurbiz-blog-tags', ['route' => 'monsieurbiz_blog_admin_tag_index']) + ->setLabel('monsieurbiz_blog.ui.tags') + ->setLabelAttribute('icon', 'grid layout') + ; + + $blogMenu->addChild('monsieurbiz-blog-articles', ['route' => 'monsieurbiz_blog_admin_article_index']) + ->setLabel('monsieurbiz_blog.ui.articles') + ->setLabelAttribute('icon', 'newspaper') + ; + + $blogMenu->addChild('monsieurbiz-blog-authors', ['route' => 'monsieurbiz_blog_admin_author_index']) + ->setLabel('monsieurbiz_blog.ui.authors') + ->setLabelAttribute('icon', 'user') + ; + } +} diff --git a/src/Fixture/ArticleFixture.php b/src/Fixture/ArticleFixture.php new file mode 100644 index 0000000..6718e1f --- /dev/null +++ b/src/Fixture/ArticleFixture.php @@ -0,0 +1,63 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Fixture; + +use Doctrine\ORM\EntityManagerInterface; +use MonsieurBiz\SyliusBlogPlugin\Fixture\Factory\ArticleFixtureFactory; +use Sylius\Bundle\CoreBundle\Fixture\AbstractResourceFixture; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; + +final class ArticleFixture extends AbstractResourceFixture +{ + public function __construct( + EntityManagerInterface $blogArticleManager, + ArticleFixtureFactory $exampleFactory + ) { + parent::__construct($blogArticleManager, $exampleFactory); + } + + public function getName(): string + { + return 'monsieubiz_blog_article'; + } + + protected function configureResourceNode(ArrayNodeDefinition $resourceNode): void + { + /** @phpstan-ignore-next-line */ + $resourceNode + ->children() + ->booleanNode('enabled')->defaultTrue()->end() + ->scalarNode('image')->defaultNull()->end() + ->scalarNode('tag')->defaultNull()->end() + ->scalarNode('is_published')->defaultTrue()->end() + ->scalarNode('publish_date')->cannotBeEmpty()->end() + ->arrayNode('authors') + ->arrayPrototype() + ->children() + ->scalarNode('name')->cannotBeEmpty()->end() + ->end() + ->end() + ->end() + ->arrayNode('translations') + ->arrayPrototype() + ->children() + ->scalarNode('title')->cannotBeEmpty()->end() + ->scalarNode('slug')->cannotBeEmpty()->end() + ->scalarNode('description')->cannotBeEmpty()->end() + ->scalarNode('content')->cannotBeEmpty()->end() + ->end() + ->end() + ->end() + ->end() + ; + } +} diff --git a/src/Fixture/AuthorFixture.php b/src/Fixture/AuthorFixture.php new file mode 100644 index 0000000..ad83b2b --- /dev/null +++ b/src/Fixture/AuthorFixture.php @@ -0,0 +1,42 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Fixture; + +use Doctrine\ORM\EntityManagerInterface; +use MonsieurBiz\SyliusBlogPlugin\Fixture\Factory\AuthorFixtureFactory; +use Sylius\Bundle\CoreBundle\Fixture\AbstractResourceFixture; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; + +final class AuthorFixture extends AbstractResourceFixture +{ + public function __construct( + EntityManagerInterface $blogAuthorManager, + AuthorFixtureFactory $exampleFactory + ) { + parent::__construct($blogAuthorManager, $exampleFactory); + } + + public function getName(): string + { + return 'monsieubiz_blog_author'; + } + + protected function configureResourceNode(ArrayNodeDefinition $resourceNode): void + { + /** @phpstan-ignore-next-line */ + $resourceNode + ->children() + ->scalarNode('name')->cannotBeEmpty()->end() + ->end() + ; + } +} diff --git a/src/Fixture/Factory/ArticleFixtureFactory.php b/src/Fixture/Factory/ArticleFixtureFactory.php new file mode 100644 index 0000000..dba31a1 --- /dev/null +++ b/src/Fixture/Factory/ArticleFixtureFactory.php @@ -0,0 +1,243 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Fixture\Factory; + +use Closure; +use DateTime; +use DateTimeInterface; +use Faker\Factory; +use Faker\Generator; +use MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\ArticleTranslationInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\AuthorInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\TagInterface; +use MonsieurBiz\SyliusBlogPlugin\Repository\TagRepositoryInterface; +use MonsieurBiz\SyliusMediaManagerPlugin\Exception\CannotReadCurrentFolderException; +use MonsieurBiz\SyliusMediaManagerPlugin\Helper\FileHelperInterface; +use MonsieurBiz\SyliusMediaManagerPlugin\Model\File; +use SM\Factory\FactoryInterface as StateMachineFactoryInterface; +use Sylius\Bundle\CoreBundle\Fixture\Factory\AbstractExampleFactory; +use Sylius\Bundle\CoreBundle\Fixture\OptionsResolver\LazyOption; +use Sylius\Component\Channel\Repository\ChannelRepositoryInterface; +use Sylius\Component\Core\Formatter\StringInflector; +use Sylius\Component\Core\Model\ChannelInterface; +use Sylius\Component\Locale\Model\LocaleInterface; +use Sylius\Component\Resource\Factory\FactoryInterface; +use Sylius\Component\Resource\Repository\RepositoryInterface; +use Symfony\Component\Config\FileLocatorInterface; +use Symfony\Component\HttpFoundation\File\UploadedFile; +use Symfony\Component\OptionsResolver\Options; +use Symfony\Component\OptionsResolver\OptionsResolver; + +final class ArticleFixtureFactory extends AbstractExampleFactory +{ + private OptionsResolver $optionsResolver; + + private OptionsResolver $translationOptionsResolver; + + private Generator $faker; + + /** + * @param FactoryInterface $articleFactory + * @param FactoryInterface $articleTranslationFactory + * @param TagRepositoryInterface $tagRepository + * @param RepositoryInterface $localeRepository + * @param ChannelRepositoryInterface $channelRepository + * @param RepositoryInterface $authorRepository + */ + public function __construct( + private FactoryInterface $articleFactory, + private FactoryInterface $articleTranslationFactory, + private TagRepositoryInterface $tagRepository, + private StateMachineFactoryInterface $stateMachineFactory, + private RepositoryInterface $localeRepository, + private ChannelRepositoryInterface $channelRepository, + private RepositoryInterface $authorRepository, + private FileLocatorInterface $fileLocator, + private FileHelperInterface $fileHelper, + ) { + $this->faker = Factory::create(); + + $this->optionsResolver = new OptionsResolver(); + $this->configureOptions($this->optionsResolver); + + $this->translationOptionsResolver = new OptionsResolver(); + $this->configureTranslationOptions($this->translationOptionsResolver); + } + + /** + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + */ + public function create(array $options = []): ArticleInterface + { + $options = $this->optionsResolver->resolve($options); + + /** @var ArticleInterface $article */ + $article = $this->articleFactory->createNew(); + $article->setEnabled($options['enabled']); + $article->addTag($options['tag']); + $article->setImage($options['image']); + $channels = $this->channelRepository->findAll(); + /** @var ChannelInterface $channel */ + foreach ($channels as $channel) { + $article->addChannel($channel); + } + $this->addAuthors($article, $options); + $this->createTranslations($article, $options); + + if ($options['is_published']) { + $this->applyTransition($article, ArticleInterface::TRANSITION_PUBLISH); + } + if (ArticleInterface::STATE_PUBLISHED === $article->getState() && null !== $options['publish_date']) { + $article->setPublishedAt($options['publish_date']); + } + + return $article; + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + protected function configureOptions(OptionsResolver $resolver): void + { + $resolver + ->setDefault('enabled', function (Options $options): bool { + return $this->faker->boolean(80); + }) + + ->setDefault('image', $this->lazyImageDefault(80)) + ->setAllowedTypes('image', ['string', 'null']) + + ->setDefault('tag', LazyOption::randomOne($this->tagRepository)) + ->setAllowedTypes('tag', ['string', TagInterface::class]) + ->setNormalizer('tag', function (Options $options, $previousValue): ?object { + if (null === $previousValue || \is_object($previousValue)) { + return $previousValue; + } + + return $this->tagRepository->findOneByName($previousValue, 'fr'); + }) + + ->setDefault('authors', []) + ->setAllowedTypes('authors', ['array']) + + ->setDefault('translations', []) + ->setAllowedTypes('translations', ['array']) + + ->setDefault('is_published', fn (Options $options): bool => $this->faker->boolean(80)) + ->setAllowedTypes('is_published', ['bool']) + + ->setDefault('publish_date', fn (Options $options): DateTimeInterface => $this->faker->dateTimeBetween('-1 years', 'now')) + ->setAllowedTypes('publish_date', ['null', DateTime::class]) + ; + } + + private function addAuthors(ArticleInterface $article, array $options): void + { + foreach ($options['authors'] as $author) { + /** @var ?AuthorInterface $author */ + $author = $this->authorRepository->findOneBy(['name' => $author['name']]); + + if (null !== $author) { + $article->addAuthor($author); + } + } + } + + private function createTranslations(ArticleInterface $article, array $options): void + { + // add translation for each defined locales + foreach ($this->getLocales() as $localeCode) { + $translation = $options['translations'][$localeCode] ?? []; + $translation = $this->translationOptionsResolver->resolve($translation); + /** @var ArticleTranslationInterface $articleTranslation */ + $articleTranslation = $this->articleTranslationFactory->createNew(); + $articleTranslation->setLocale($localeCode); + $articleTranslation->setTitle($translation['title']); + $articleTranslation->setSlug($translation['slug'] ?? StringInflector::nameToCode($translation['title'])); + $articleTranslation->setDescription($translation['description']); + $articleTranslation->setContent($translation['content']); + + $article->addTranslation($articleTranslation); + } + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + private function configureTranslationOptions(OptionsResolver $resolver): void + { + $resolver + ->setDefault('title', fn (Options $options): string => /** @phpstan-ignore-line */ $this->faker->words(3, true)) + ->setDefault('slug', null) + ->setDefault('description', fn (Options $options): string => $this->faker->paragraph) + ->setDefault('content', fn (Options $options): string => $this->faker->paragraph) + ; + } + + private function applyTransition(ArticleInterface $article, string $transition): void + { + $this->stateMachineFactory->get($article, ArticleInterface::GRAPH)->apply($transition); + } + + private function getLocales(): iterable + { + /** @var LocaleInterface[] $locales */ + $locales = $this->localeRepository->findAll(); + foreach ($locales as $locale) { + yield $locale->getCode(); + } + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + private function lazyImageDefault(int $chanceOfRandomOne): Closure + { + return function (Options $options) use ($chanceOfRandomOne): ?string { + if (random_int(1, 100) > $chanceOfRandomOne) { + return null; + } + + $random = random_int(1, 5); + $sourcePath = $this->fileLocator->locate(sprintf('@MonsieurBizSyliusBlogPlugin/Resources/fixtures/article-%d.jpg', $random)); + $existingImage = $this->findExistingImage(basename($sourcePath)); + if (null !== $existingImage) { + return $existingImage; + } + + $file = new UploadedFile($sourcePath, basename($sourcePath)); + $filename = $this->fileHelper->upload($file, 'blog', 'gallery/images'); + + return 'gallery/images/blog/' . $filename; + }; + } + + private function findExistingImage(string $filename): ?string + { + try { + $files = $this->fileHelper->list('blog', 'gallery/images'); + } catch (CannotReadCurrentFolderException) { + $this->fileHelper->createFolder('blog', '', 'gallery/images'); // Create the folder if it does not exist + $files = []; + } + + /** @var File $file */ + foreach ($files as $file) { + if ($filename === $file->getName()) { + return 'gallery/images/' . $file->getPath(); + } + } + + return null; + } +} diff --git a/src/Fixture/Factory/AuthorFixtureFactory.php b/src/Fixture/Factory/AuthorFixtureFactory.php new file mode 100644 index 0000000..eef1d64 --- /dev/null +++ b/src/Fixture/Factory/AuthorFixtureFactory.php @@ -0,0 +1,63 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Fixture\Factory; + +use Faker\Factory; +use Faker\Generator; +use MonsieurBiz\SyliusBlogPlugin\Entity\AuthorInterface; +use Sylius\Bundle\CoreBundle\Fixture\Factory\AbstractExampleFactory; +use Sylius\Component\Resource\Factory\FactoryInterface; +use Symfony\Component\OptionsResolver\Options; +use Symfony\Component\OptionsResolver\OptionsResolver; + +final class AuthorFixtureFactory extends AbstractExampleFactory +{ + private OptionsResolver $optionsResolver; + + private Generator $faker; + + /** + * @param FactoryInterface $authorFactory + */ + public function __construct( + private FactoryInterface $authorFactory, + ) { + $this->faker = Factory::create(); + + $this->optionsResolver = new OptionsResolver(); + $this->configureOptions($this->optionsResolver); + } + + public function create(array $options = []): AuthorInterface + { + $options = $this->optionsResolver->resolve($options); + + /** @var AuthorInterface $author */ + $author = $this->authorFactory->createNew(); + $author->setName($options['name']); + + return $author; + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + protected function configureOptions(OptionsResolver $resolver): void + { + $resolver + ->setDefault('name', function (Options $options) { + return $this->faker->name; + }) + ->setAllowedTypes('name', 'string') + ; + } +} diff --git a/src/Fixture/Factory/TagFixtureFactory.php b/src/Fixture/Factory/TagFixtureFactory.php new file mode 100644 index 0000000..52d5b60 --- /dev/null +++ b/src/Fixture/Factory/TagFixtureFactory.php @@ -0,0 +1,119 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Fixture\Factory; + +use Behat\Transliterator\Transliterator; +use Faker\Factory; +use Faker\Generator; +use MonsieurBiz\SyliusBlogPlugin\Entity\TagInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\TagTranslationInterface; +use Sylius\Bundle\CoreBundle\Fixture\Factory\AbstractExampleFactory; +use Sylius\Component\Locale\Model\LocaleInterface; +use Sylius\Component\Resource\Factory\FactoryInterface; +use Sylius\Component\Resource\Repository\RepositoryInterface; +use Symfony\Component\OptionsResolver\Options; +use Symfony\Component\OptionsResolver\OptionsResolver; + +final class TagFixtureFactory extends AbstractExampleFactory +{ + private OptionsResolver $optionsResolver; + + private OptionsResolver $translationOptionsResolver; + + private Generator $faker; + + /** + * @param FactoryInterface $tagFactory + * @param FactoryInterface $tagTranslationFactory + * @param RepositoryInterface $localeRepository + */ + public function __construct( + private FactoryInterface $tagFactory, + private FactoryInterface $tagTranslationFactory, + private RepositoryInterface $localeRepository, + ) { + $this->faker = Factory::create(); + + $this->optionsResolver = new OptionsResolver(); + $this->configureOptions($this->optionsResolver); + + $this->translationOptionsResolver = new OptionsResolver(); + $this->configureTranslationOptions($this->translationOptionsResolver); + } + + public function create(array $options = []): TagInterface + { + $options = $this->optionsResolver->resolve($options); + + /** @var TagInterface $tag */ + $tag = $this->tagFactory->createNew(); + $tag->setEnabled($options['enabled']); + $this->createTranslations($tag, $options); + + return $tag; + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + protected function configureOptions(OptionsResolver $resolver): void + { + $resolver + ->setDefault('enabled', function (Options $options): bool { + return $this->faker->boolean(80); + }) + + ->setDefault('translations', function (OptionsResolver $translationResolver): void { + $translationResolver->setDefaults($this->configureDefaultTranslations()); + }) + ->setAllowedTypes('translations', ['array']) + ; + } + + private function createTranslations(TagInterface $tag, array $options): void + { + foreach ($options['translations'] as $localeCode => $translation) { + $translation = $this->translationOptionsResolver->resolve($translation); + /** @var TagTranslationInterface $tagTranslation */ + $tagTranslation = $this->tagTranslationFactory->createNew(); + $tagTranslation->setLocale($localeCode); + $tagTranslation->setName($translation['name']); + $slug = $translation['slug'] ?? Transliterator::transliterate(str_replace('\'', '-', $translation['name'])); + $tagTranslation->setSlug($slug); + + $tag->addTranslation($tagTranslation); + } + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + private function configureTranslationOptions(OptionsResolver $resolver): void + { + $resolver + ->setDefault('name', fn (Options $options): string => /** @phpstan-ignore-line */ $this->faker->words(3, true)) + ->setDefault('slug', null) + ; + } + + private function configureDefaultTranslations(): array + { + $translations = []; + $locales = $this->localeRepository->findAll(); + /** @var LocaleInterface $locale */ + foreach ($locales as $locale) { + $translations[$locale->getCode()] = []; + } + + return $translations; + } +} diff --git a/src/Fixture/TagFixture.php b/src/Fixture/TagFixture.php new file mode 100644 index 0000000..f8df38c --- /dev/null +++ b/src/Fixture/TagFixture.php @@ -0,0 +1,50 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Fixture; + +use Doctrine\ORM\EntityManagerInterface; +use MonsieurBiz\SyliusBlogPlugin\Fixture\Factory\TagFixtureFactory; +use Sylius\Bundle\CoreBundle\Fixture\AbstractResourceFixture; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; + +final class TagFixture extends AbstractResourceFixture +{ + public function __construct( + EntityManagerInterface $blogTagManager, + TagFixtureFactory $exampleFactory + ) { + parent::__construct($blogTagManager, $exampleFactory); + } + + public function getName(): string + { + return 'monsieurbiz_blog_tag'; + } + + protected function configureResourceNode(ArrayNodeDefinition $resourceNode): void + { + /** @phpstan-ignore-next-line */ + $resourceNode + ->children() + ->booleanNode('enabled')->defaultTrue()->end() + ->arrayNode('translations') + ->arrayPrototype() + ->children() + ->scalarNode('name')->cannotBeEmpty()->end() + ->scalarNode('slug')->cannotBeEmpty()->end() + ->end() + ->end() + ->end() + ->end() + ; + } +} diff --git a/src/Form/Type/ArticleTranslationType.php b/src/Form/Type/ArticleTranslationType.php new file mode 100644 index 0000000..3130cdb --- /dev/null +++ b/src/Form/Type/ArticleTranslationType.php @@ -0,0 +1,44 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Form\Type; + +use MonsieurBiz\SyliusRichEditorPlugin\Form\Type\RichEditorType; +use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType; +use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; + +final class ArticleTranslationType extends AbstractResourceType +{ + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameters) + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('title', TextType::class, [ + 'label' => 'monsieurbiz_blog.form.article.title', + 'required' => true, + ]) + ->add('slug', TextType::class, [ + 'label' => 'monsieurbiz_blog.form.article.slug', + 'required' => true, + ]) + ->add('description', TextareaType::class, [ + 'label' => 'monsieurbiz_blog.form.article.description', + ]) + ->add('content', RichEditorType::class, [ + 'label' => 'monsieurbiz_blog.form.article.content', + ]) + ; + } +} diff --git a/src/Form/Type/ArticleType.php b/src/Form/Type/ArticleType.php new file mode 100644 index 0000000..50832b5 --- /dev/null +++ b/src/Form/Type/ArticleType.php @@ -0,0 +1,90 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Form\Type; + +use MonsieurBiz\SyliusBlogPlugin\Entity\AuthorInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\Tag; +use MonsieurBiz\SyliusBlogPlugin\Entity\TagInterface; +use MonsieurBiz\SyliusBlogPlugin\Repository\AuthorRepositoryInterface; +use MonsieurBiz\SyliusBlogPlugin\Repository\TagRepositoryInterface; +use MonsieurBiz\SyliusMediaManagerPlugin\Form\Type\ImageType; +use Sylius\Bundle\ChannelBundle\Form\Type\ChannelChoiceType; +use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType; +use Sylius\Bundle\ResourceBundle\Form\Type\ResourceTranslationsType; +use Sylius\Component\Locale\Context\LocaleContextInterface; +use Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer; +use Symfony\Bridge\Doctrine\Form\Type\EntityType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Form\FormBuilderInterface; + +final class ArticleType extends AbstractResourceType +{ + /** + * @param AuthorRepositoryInterface $authorRepository + */ + public function __construct( + private LocaleContextInterface $localeContext, + private AuthorRepositoryInterface $authorRepository, + string $dataClass, + array $validationGroups = [], + ) { + parent::__construct($dataClass, $validationGroups); + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameters) + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('enabled', CheckboxType::class, [ + 'required' => false, + 'label' => 'sylius.ui.enabled', + ]) + ->add('channels', ChannelChoiceType::class, [ + 'multiple' => true, + 'expanded' => true, + 'label' => 'sylius.form.product.channels', + ]) + ->add('authors', ChoiceType::class, [ + 'label' => 'monsieurbiz_blog.form.article.authors', + 'multiple' => true, + 'choices' => $this->authorRepository->findAll(), + 'choice_label' => 'name', + 'choice_translation_domain' => false, + 'required' => false, + ]) + ->add('tags', EntityType::class, [ + 'label' => 'monsieurbiz_blog.form.article.tags', + 'required' => true, + 'multiple' => true, + 'class' => Tag::class, + 'query_builder' => function (TagRepositoryInterface $tagRepository) { + return $tagRepository->createListQueryBuilder($this->localeContext->getLocaleCode()); + }, + 'choice_label' => function (TagInterface $tag) { + return $tag->getName(); + }, + ]) + ->add('image', ImageType::class, [ + 'label' => 'monsieurbiz_blog.form.article.image', + 'required' => false, + ]) + ->add('translations', ResourceTranslationsType::class, [ + 'entry_type' => ArticleTranslationType::class, + ]) + ; + + $builder->get('authors')->addModelTransformer(new CollectionToArrayTransformer()); + } +} diff --git a/src/Form/Type/AuthorType.php b/src/Form/Type/AuthorType.php new file mode 100644 index 0000000..36adda3 --- /dev/null +++ b/src/Form/Type/AuthorType.php @@ -0,0 +1,32 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Form\Type; + +use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; + +final class AuthorType extends AbstractResourceType +{ + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameters) + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('name', TextType::class, [ + 'required' => false, + 'label' => 'monsieurbiz_blog.form.author.name', + ]) + ; + } +} diff --git a/src/Form/Type/TagTranslationType.php b/src/Form/Type/TagTranslationType.php new file mode 100644 index 0000000..e3ffb7f --- /dev/null +++ b/src/Form/Type/TagTranslationType.php @@ -0,0 +1,36 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Form\Type; + +use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; + +final class TagTranslationType extends AbstractResourceType +{ + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameters) + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('name', TextType::class, [ + 'label' => 'monsieurbiz_blog.form.tag.title', + 'required' => true, + ]) + ->add('slug', TextType::class, [ + 'label' => 'monsieurbiz_blog.form.tag.slug', + 'required' => true, + ]) + ; + } +} diff --git a/src/Form/Type/TagType.php b/src/Form/Type/TagType.php new file mode 100644 index 0000000..2725e7f --- /dev/null +++ b/src/Form/Type/TagType.php @@ -0,0 +1,36 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Form\Type; + +use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType; +use Sylius\Bundle\ResourceBundle\Form\Type\ResourceTranslationsType; +use Symfony\Component\Form\Extension\Core\Type\CheckboxType; +use Symfony\Component\Form\FormBuilderInterface; + +final class TagType extends AbstractResourceType +{ + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameters) + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('enabled', CheckboxType::class, [ + 'required' => false, + 'label' => 'sylius.ui.enabled', + ]) + ->add('translations', ResourceTranslationsType::class, [ + 'entry_type' => TagTranslationType::class, + ]) + ; + } +} diff --git a/src/Menu/AdminArticleUpdateMenuBuilder.php b/src/Menu/AdminArticleUpdateMenuBuilder.php new file mode 100644 index 0000000..04a291b --- /dev/null +++ b/src/Menu/AdminArticleUpdateMenuBuilder.php @@ -0,0 +1,58 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Menu; + +use Knp\Menu\FactoryInterface; +use Knp\Menu\ItemInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface; +use SM\Factory\FactoryInterface as StateMachineFactoryInterface; +use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; + +final class AdminArticleUpdateMenuBuilder +{ + public function __construct( + private FactoryInterface $factory, + private StateMachineFactoryInterface $stateMachineFactory, + private CsrfTokenManagerInterface $csrfTokenManager, + ) { + } + + public function createMenu(array $options): ItemInterface + { + $menu = $this->factory->createItem('root'); + + $article = $options['article'] ?? null; + if (!$article instanceof ArticleInterface) { + return $menu; + } + + $stateMachine = $this->stateMachineFactory->get($article, ArticleInterface::GRAPH); + if ($stateMachine->can(ArticleInterface::TRANSITION_PUBLISH)) { + $menu + ->addChild('publish', [ + 'route' => 'monsieurbiz_blog_admin_article_update_state', + 'routeParameters' => [ + 'id' => $article->getId(), + 'state' => ArticleInterface::TRANSITION_PUBLISH, + '_csrf_token' => $this->csrfTokenManager->getToken((string) $article->getId())->getValue(), + ], + ]) + ->setAttribute('type', 'transition') + ->setLabel('monsieurbiz_blog.ui.publish') + ->setLabelAttribute('icon', 'check') + ->setLabelAttribute('color', 'green') + ; + } + + return $menu; + } +} diff --git a/src/Migrations/.gitignore b/src/Migrations/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/src/Migrations/Version20240702145615.php b/src/Migrations/Version20240702145615.php new file mode 100644 index 0000000..10896c7 --- /dev/null +++ b/src/Migrations/Version20240702145615.php @@ -0,0 +1,70 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Migrations; + +use Doctrine\DBAL\Schema\Schema; +use Doctrine\Migrations\AbstractMigration; + +/** + * Auto-generated Migration: Please modify to your needs! + */ +final class Version20240702145615 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 TABLE monsieurbiz_blog_article (id INT AUTO_INCREMENT NOT NULL, enabled TINYINT(1) DEFAULT 1 NOT NULL, image VARCHAR(255) DEFAULT NULL, state VARCHAR(255) NOT NULL, publishedAt DATETIME DEFAULT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE monsieurbiz_blog_article_tags (article_id INT NOT NULL, tag_id INT NOT NULL, INDEX IDX_81F1F9E97294869C (article_id), INDEX IDX_81F1F9E9BAD26311 (tag_id), PRIMARY KEY(article_id, tag_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE monsieurbiz_blog_article_channels (article_id INT NOT NULL, channel_id INT NOT NULL, INDEX IDX_9F50BAA27294869C (article_id), INDEX IDX_9F50BAA272F5A1AA (channel_id), PRIMARY KEY(article_id, channel_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE monsieurbiz_blog_article_authors (article_id INT NOT NULL, author_id INT NOT NULL, INDEX IDX_CCC1D3057294869C (article_id), INDEX IDX_CCC1D305F675F31B (author_id), PRIMARY KEY(article_id, author_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE monsieurbiz_blog_article_translation (id INT AUTO_INCREMENT NOT NULL, translatable_id INT NOT NULL, title VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL, description LONGTEXT NOT NULL, content LONGTEXT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME NOT NULL, locale VARCHAR(255) NOT NULL, INDEX IDX_AC951C7A2C2AC5D3 (translatable_id), UNIQUE INDEX monsieurbiz_blog_article_translation_uniq_trans (translatable_id, locale), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE monsieurbiz_blog_author (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE monsieurbiz_blog_tag (id INT AUTO_INCREMENT NOT NULL, enabled TINYINT(1) DEFAULT 1 NOT NULL, position INT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE monsieurbiz_blog_tag_translation (id INT AUTO_INCREMENT NOT NULL, translatable_id INT NOT NULL, name VARCHAR(255) NOT NULL, slug VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME NOT NULL, locale VARCHAR(255) NOT NULL, INDEX IDX_7BF826C2C2AC5D3 (translatable_id), UNIQUE INDEX monsieurbiz_blog_tag_translation_uniq_trans (translatable_id, locale), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_tags ADD CONSTRAINT FK_81F1F9E97294869C FOREIGN KEY (article_id) REFERENCES monsieurbiz_blog_article (id)'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_tags ADD CONSTRAINT FK_81F1F9E9BAD26311 FOREIGN KEY (tag_id) REFERENCES monsieurbiz_blog_tag (id)'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_channels ADD CONSTRAINT FK_9F50BAA27294869C FOREIGN KEY (article_id) REFERENCES monsieurbiz_blog_article (id)'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_channels ADD CONSTRAINT FK_9F50BAA272F5A1AA FOREIGN KEY (channel_id) REFERENCES sylius_channel (id)'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_authors ADD CONSTRAINT FK_CCC1D3057294869C FOREIGN KEY (article_id) REFERENCES monsieurbiz_blog_article (id)'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_authors ADD CONSTRAINT FK_CCC1D305F675F31B FOREIGN KEY (author_id) REFERENCES monsieurbiz_blog_author (id)'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_translation ADD CONSTRAINT FK_AC951C7A2C2AC5D3 FOREIGN KEY (translatable_id) REFERENCES monsieurbiz_blog_article (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE monsieurbiz_blog_tag_translation ADD CONSTRAINT FK_7BF826C2C2AC5D3 FOREIGN KEY (translatable_id) REFERENCES monsieurbiz_blog_tag (id) ON DELETE CASCADE'); + $this->addSql('ALTER TABLE messenger_messages CHANGE created_at created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', CHANGE available_at available_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', CHANGE delivered_at delivered_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\''); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE monsieurbiz_blog_article_tags DROP FOREIGN KEY FK_81F1F9E97294869C'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_tags DROP FOREIGN KEY FK_81F1F9E9BAD26311'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_channels DROP FOREIGN KEY FK_9F50BAA27294869C'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_channels DROP FOREIGN KEY FK_9F50BAA272F5A1AA'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_authors DROP FOREIGN KEY FK_CCC1D3057294869C'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_authors DROP FOREIGN KEY FK_CCC1D305F675F31B'); + $this->addSql('ALTER TABLE monsieurbiz_blog_article_translation DROP FOREIGN KEY FK_AC951C7A2C2AC5D3'); + $this->addSql('ALTER TABLE monsieurbiz_blog_tag_translation DROP FOREIGN KEY FK_7BF826C2C2AC5D3'); + $this->addSql('DROP TABLE monsieurbiz_blog_article'); + $this->addSql('DROP TABLE monsieurbiz_blog_article_tags'); + $this->addSql('DROP TABLE monsieurbiz_blog_article_channels'); + $this->addSql('DROP TABLE monsieurbiz_blog_article_authors'); + $this->addSql('DROP TABLE monsieurbiz_blog_article_translation'); + $this->addSql('DROP TABLE monsieurbiz_blog_author'); + $this->addSql('DROP TABLE monsieurbiz_blog_tag'); + $this->addSql('DROP TABLE monsieurbiz_blog_tag_translation'); + $this->addSql('ALTER TABLE messenger_messages CHANGE created_at created_at DATETIME NOT NULL, CHANGE available_at available_at DATETIME NOT NULL, CHANGE delivered_at delivered_at DATETIME DEFAULT NULL'); + } +} diff --git a/src/Repository/ArticleRepository.php b/src/Repository/ArticleRepository.php new file mode 100644 index 0000000..d91fa7c --- /dev/null +++ b/src/Repository/ArticleRepository.php @@ -0,0 +1,115 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Repository; + +use Doctrine\ORM\NonUniqueResultException; +use Doctrine\ORM\QueryBuilder; +use MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\AuthorInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\TagInterface; +use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository; +use Sylius\Component\Channel\Model\ChannelInterface; + +/** + * @template T of ArticleInterface + * + * @implements ArticleRepositoryInterface + */ +final class ArticleRepository extends EntityRepository implements ArticleRepositoryInterface +{ + public function createListQueryBuilder(string $localeCode): QueryBuilder + { + return $this->createQueryBuilder('ba') + ->addSelect('translation') + ->leftJoin('ba.translations', 'translation', 'WITH', 'translation.locale = :localeCode') + ->setParameter('localeCode', $localeCode) + ; + } + + public function createShopListQueryBuilder(string $localeCode, ChannelInterface $channel, ?TagInterface $tag): QueryBuilder + { + $queryBuilder = $this->createListQueryBuilder($localeCode) + ->andWhere(':channel MEMBER OF ba.channels') + ->andWhere('ba.enabled = true') + ->andWhere('ba.state = :state') + ->setParameter('channel', $channel) + ->setParameter('state', ArticleInterface::STATE_PUBLISHED) + ; + + if (null !== $tag) { + $queryBuilder + ->andWhere(':tag MEMBER OF ba.tags') + ->setParameter('tag', $tag) + ; + } + + return $queryBuilder; + } + + public function findAllEnabledAndPublishedByTag(string $localeCode, ChannelInterface $channel, TagInterface $tag, int $limit): array + { + /** @phpstan-ignore-next-line */ + return $this->createShopListQueryBuilder($localeCode, $channel, $tag) + ->setMaxResults($limit) + ->getQuery() + ->getResult() + ; + } + + /** + * @throws NonUniqueResultException + */ + public function findOneBySlug(string $slug, string $localeCode): ?ArticleInterface + { + /** @phpstan-ignore-next-line */ + return $this->createListQueryBuilder($localeCode) + ->andWhere('translation.slug = :slug') + ->setParameter('slug', $slug) + ->getQuery() + ->getOneOrNullResult() + ; + } + + public function findOnePublishedBySlug(string $slug, string $localeCode, ChannelInterface $channel): ?ArticleInterface + { + /** @phpstan-ignore-next-line */ + return $this->createListQueryBuilder($localeCode) + ->andWhere('translation.slug = :slug') + ->andWhere(':channel MEMBER OF ba.channels') + ->andWhere('ba.enabled = true') + ->andWhere('ba.state = :state') + ->setParameter('slug', $slug) + ->setParameter('channel', $channel) + ->setParameter('state', ArticleInterface::STATE_PUBLISHED) + ->getQuery() + ->getOneOrNullResult() + ; + } + + public function findAllEnabledAndPublishedByAuthor(string $localeCode, ChannelInterface $channel, AuthorInterface $author, int $limit): array + { + /** @phpstan-ignore-next-line */ + return $this->createListQueryBuilder($localeCode) + ->andWhere(':channel MEMBER OF ba.channels') + ->andWhere('ba.enabled = true') + ->andWhere('ba.state = :state') + ->andWhere(':author MEMBER OF ba.authors') + ->setParameter('channel', $channel) + ->setParameter('state', ArticleInterface::STATE_PUBLISHED) + ->setParameter('author', $author) + ->addOrderBy('ba.publishedAt', 'DESC') + ->setMaxResults($limit) + ->getQuery() + ->getResult() + ; + } +} diff --git a/src/Repository/ArticleRepositoryInterface.php b/src/Repository/ArticleRepositoryInterface.php new file mode 100644 index 0000000..99ef119 --- /dev/null +++ b/src/Repository/ArticleRepositoryInterface.php @@ -0,0 +1,42 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Repository; + +use Doctrine\ORM\QueryBuilder; +use MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\AuthorInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\TagInterface; +use Sylius\Component\Channel\Model\ChannelInterface; +use Sylius\Component\Resource\Repository\RepositoryInterface; + +/** + * @template T of ArticleInterface + * + * @extends RepositoryInterface + */ +interface ArticleRepositoryInterface extends RepositoryInterface +{ + public function createListQueryBuilder(string $localeCode): QueryBuilder; + + public function createShopListQueryBuilder(string $localeCode, ChannelInterface $channel, TagInterface $tag): QueryBuilder; + + /** + * @return ArticleInterface[] + */ + public function findAllEnabledAndPublishedByTag(string $localeCode, ChannelInterface $channel, TagInterface $tag, int $limit): array; + + public function findOneBySlug(string $slug, string $localeCode): ?ArticleInterface; + + public function findOnePublishedBySlug(string $slug, string $localeCode, ChannelInterface $channel): ?ArticleInterface; + + public function findAllEnabledAndPublishedByAuthor(string $localeCode, ChannelInterface $channel, AuthorInterface $author, int $limit): array; +} diff --git a/src/Repository/AuthorRepository.php b/src/Repository/AuthorRepository.php new file mode 100644 index 0000000..1ad7a97 --- /dev/null +++ b/src/Repository/AuthorRepository.php @@ -0,0 +1,29 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Repository; + +use Doctrine\ORM\QueryBuilder; +use MonsieurBiz\SyliusBlogPlugin\Entity\AuthorInterface; +use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository; + +/** + * @template T of AuthorInterface + * + * @implements AuthorRepositoryInterface + */ +final class AuthorRepository extends EntityRepository implements AuthorRepositoryInterface +{ + public function createListQueryBuilder(): QueryBuilder + { + return $this->createQueryBuilder('a'); + } +} diff --git a/src/Repository/AuthorRepositoryInterface.php b/src/Repository/AuthorRepositoryInterface.php new file mode 100644 index 0000000..32b2b02 --- /dev/null +++ b/src/Repository/AuthorRepositoryInterface.php @@ -0,0 +1,26 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Repository; + +use Doctrine\ORM\QueryBuilder; +use MonsieurBiz\SyliusBlogPlugin\Entity\AuthorInterface; +use Sylius\Component\Resource\Repository\RepositoryInterface; + +/** + * @template T of AuthorInterface + * + * @extends RepositoryInterface + */ +interface AuthorRepositoryInterface extends RepositoryInterface +{ + public function createListQueryBuilder(): QueryBuilder; +} diff --git a/src/Repository/TagRepository.php b/src/Repository/TagRepository.php new file mode 100644 index 0000000..4774114 --- /dev/null +++ b/src/Repository/TagRepository.php @@ -0,0 +1,96 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Repository; + +use Doctrine\ORM\NonUniqueResultException; +use Doctrine\ORM\QueryBuilder; +use MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface; +use MonsieurBiz\SyliusBlogPlugin\Entity\TagInterface; +use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository; + +/** + * @template T of TagInterface + * + * @implements TagRepositoryInterface + */ +final class TagRepository extends EntityRepository implements TagRepositoryInterface +{ + public function findRootNodes(): array + { + /** @phpstan-ignore-next-line */ + return $this->createQueryBuilder('o') + ->addOrderBy('o.position') + ->getQuery() + ->getResult() + ; + } + + public function findHydratedRootNodes(): array + { + $this->createQueryBuilder('o') + ->select(['o', 'ot']) + ->leftJoin('o.translations', 'ot') + ->getQuery() + ->getResult() + ; + + return $this->findRootNodes(); + } + + public function createListQueryBuilder(string $localeCode): QueryBuilder + { + return $this->createQueryBuilder('bc') + ->addSelect('translation') + ->leftJoin('bc.translations', 'translation', 'WITH', 'translation.locale = :localeCode') + ->setParameter('localeCode', $localeCode) + ; + } + + public function createEnabledListQueryBuilder(string $localeCode): QueryBuilder + { + return $this->createListQueryBuilder($localeCode) + ->join('bc.articles', 'articles') + ->andWhere('bc.enabled = true') + ->andWhere('articles.enabled = true') + ->andWhere('articles.state = :state') + ->setParameter('state', ArticleInterface::STATE_PUBLISHED) + ; + } + + /** + * @throws NonUniqueResultException + */ + public function findOneByName(string $name, string $localeCode): ?TagInterface + { + /** @phpstan-ignore-next-line */ + return $this->createListQueryBuilder($localeCode) + ->andWhere('translation.name = :name') + ->setParameter('name', $name) + ->getQuery() + ->getOneOrNullResult() + ; + } + + /** + * @throws NonUniqueResultException + */ + public function findOneBySlug(string $slug, string $localeCode): ?TagInterface + { + /** @phpstan-ignore-next-line */ + return $this->createListQueryBuilder($localeCode) + ->andWhere('translation.slug = :slug') + ->setParameter('slug', $slug) + ->getQuery() + ->getOneOrNullResult() + ; + } +} diff --git a/src/Repository/TagRepositoryInterface.php b/src/Repository/TagRepositoryInterface.php new file mode 100644 index 0000000..143387b --- /dev/null +++ b/src/Repository/TagRepositoryInterface.php @@ -0,0 +1,42 @@ + + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace MonsieurBiz\SyliusBlogPlugin\Repository; + +use Doctrine\ORM\QueryBuilder; +use MonsieurBiz\SyliusBlogPlugin\Entity\TagInterface; +use Sylius\Component\Resource\Repository\RepositoryInterface; + +/** + * @template T of TagInterface + * + * @extends RepositoryInterface + */ +interface TagRepositoryInterface extends RepositoryInterface +{ + /** + * @return TagInterface[] + */ + public function findRootNodes(): array; + + /** + * @return TagInterface[] + */ + public function findHydratedRootNodes(): array; + + public function createListQueryBuilder(string $localeCode): QueryBuilder; + + public function createEnabledListQueryBuilder(string $localeCode): QueryBuilder; + + public function findOneByName(string $name, string $localeCode): ?TagInterface; + + public function findOneBySlug(string $slug, string $localeCode): ?TagInterface; +} diff --git a/src/Resources/config/config.yaml b/src/Resources/config/config.yaml index e69de29..577647c 100644 --- a/src/Resources/config/config.yaml +++ b/src/Resources/config/config.yaml @@ -0,0 +1,4 @@ +imports: + - { resource: 'resources.yaml' } + - { resource: 'sylius/*.yaml' } + - { resource: 'images.yaml' } diff --git a/src/Resources/config/doctrine/Article.orm.xml b/src/Resources/config/doctrine/Article.orm.xml new file mode 100644 index 0000000..4281142 --- /dev/null +++ b/src/Resources/config/doctrine/Article.orm.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Resources/config/doctrine/ArticleTranslation.orm.xml b/src/Resources/config/doctrine/ArticleTranslation.orm.xml new file mode 100644 index 0000000..4d0c4a3 --- /dev/null +++ b/src/Resources/config/doctrine/ArticleTranslation.orm.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Resources/config/doctrine/Author.orm.xml b/src/Resources/config/doctrine/Author.orm.xml new file mode 100644 index 0000000..4454943 --- /dev/null +++ b/src/Resources/config/doctrine/Author.orm.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/src/Resources/config/doctrine/Tag.orm.xml b/src/Resources/config/doctrine/Tag.orm.xml new file mode 100644 index 0000000..8e134bd --- /dev/null +++ b/src/Resources/config/doctrine/Tag.orm.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Resources/config/doctrine/TagTranslation.orm.xml b/src/Resources/config/doctrine/TagTranslation.orm.xml new file mode 100644 index 0000000..b60f796 --- /dev/null +++ b/src/Resources/config/doctrine/TagTranslation.orm.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/Resources/config/images.yaml b/src/Resources/config/images.yaml new file mode 100644 index 0000000..e6ba989 --- /dev/null +++ b/src/Resources/config/images.yaml @@ -0,0 +1,8 @@ +liip_imagine: + filter_sets: + monsieurbiz_blog_image_large_thumbnail: + filters: + thumbnail: { size: [800, 800], mode: outbound } + monsieurbiz_blog_image_thumbnail: + filters: + thumbnail: { size: [260, 260], mode: outbound } diff --git a/src/Resources/config/resources.yaml b/src/Resources/config/resources.yaml new file mode 100644 index 0000000..5230bb0 --- /dev/null +++ b/src/Resources/config/resources.yaml @@ -0,0 +1,30 @@ +sylius_resource: + resources: + monsieurbiz_blog.tag: + classes: + model: MonsieurBiz\SyliusBlogPlugin\Entity\Tag + interface: MonsieurBiz\SyliusBlogPlugin\Entity\TagInterface + repository: MonsieurBiz\SyliusBlogPlugin\Repository\TagRepository + form: MonsieurBiz\SyliusBlogPlugin\Form\Type\TagType + translation: + classes: + model: MonsieurBiz\SyliusBlogPlugin\Entity\TagTranslation + interface: MonsieurBiz\SyliusBlogPlugin\Entity\TagTranslationInterface + form: MonsieurBiz\SyliusBlogPlugin\Form\Type\TagTranslationType + monsieurbiz_blog.article: + classes: + model: MonsieurBiz\SyliusBlogPlugin\Entity\Article + interface: MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface + repository: MonsieurBiz\SyliusBlogPlugin\Repository\ArticleRepository + form: MonsieurBiz\SyliusBlogPlugin\Form\Type\ArticleType + translation: + classes: + model: MonsieurBiz\SyliusBlogPlugin\Entity\ArticleTranslation + interface: MonsieurBiz\SyliusBlogPlugin\Entity\ArticleTranslationInterface + form: MonsieurBiz\SyliusBlogPlugin\Form\Type\ArticleTranslationType + monsieurbiz_blog.author: + classes: + model: MonsieurBiz\SyliusBlogPlugin\Entity\Author + interface: MonsieurBiz\SyliusBlogPlugin\Entity\AuthorInterface + repository: MonsieurBiz\SyliusBlogPlugin\Repository\AuthorRepository + form: MonsieurBiz\SyliusBlogPlugin\Form\Type\AuthorType diff --git a/src/Resources/config/routes.yaml b/src/Resources/config/routes.yaml index e69de29..895fdda 100644 --- a/src/Resources/config/routes.yaml +++ b/src/Resources/config/routes.yaml @@ -0,0 +1,9 @@ +monsieurbiz_blog_admin: + resource: "@MonsieurBizSyliusBlogPlugin/Resources/config/routes/admin.yaml" + prefix: /%sylius_admin.path_name% + +monsieurbiz_blog_shop: + resource: "@MonsieurBizSyliusBlogPlugin/Resources/config/routes/shop.yaml" + prefix: /{_locale} + requirements: + _locale: ^[A-Za-z]{2,4}(_([A-Za-z]{4}|[0-9]{3}))?(_([A-Za-z]{2}|[0-9]{3}))?$ diff --git a/src/Resources/config/routes/admin.yaml b/src/Resources/config/routes/admin.yaml new file mode 100644 index 0000000..293ecdf --- /dev/null +++ b/src/Resources/config/routes/admin.yaml @@ -0,0 +1,99 @@ +monsieurbiz_blog_admin_tag: + resource: | + section: admin + alias: monsieurbiz_blog.tag + path: /blog/tag + templates: "@MonsieurBizSyliusBlogPlugin/Admin/Tag" + redirect: update + only: ['update', 'delete'] + vars: + all: + subheader: monsieurbiz_blog.ui.manage_your_blog_tags + index: + route: + name: monsieurbiz_blog_admin_tag_create + type: sylius.resource + +monsieurbiz_blog_admin_tag_index: + path: /blog/tags + controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction + defaults: + route: monsieurbiz_blog_admin_tag_create + permanent: true + keepQueryParams: true + +monsieurbiz_blog_admin_tag_create: + path: /blog/tag/new + methods: [ GET, POST ] + defaults: + _controller: monsieurbiz_blog.controller.tag::createAction + _sylius: + section: admin + permission: true + template: "@MonsieurBizSyliusBlogPlugin/Admin/Tag/create.html.twig" + factory: + method: createNew + redirect: + route: monsieurbiz_blog_admin_tag_create + vars: + subheader: monsieurbiz_blog.ui.manage_your_blog_tags + index: + route: + name: 'monsieurbiz_blog_admin_tag_create' + +monsieurbiz_blog_admin_partial_tags_tree: + path: /_partial/blog/tags/tree + methods: [GET] + defaults: + _controller: monsieurbiz_blog.controller.tag::indexAction + _sylius: + template: $template + repository: + method: findHydratedRootNodes + permission: true + +monsieurbiz_blog_admin_article: + resource: | + section: admin + alias: monsieurbiz_blog.article + path: /blog/articles + templates: "@SyliusAdmin/Crud" + redirect: index + except: ['show'] + grid: monsieurbiz_blog_admin_article + vars: + index: + icon: 'newspaper' + update: + templates: + toolbar: "@MonsieurBizSyliusBlogPlugin/Admin/Article/Update/_toolbar.html.twig" + type: sylius.resource + +monsieurbiz_blog_admin_article_update_state: + path: /blog/articles/{id}/{state} + methods: [PUT] + defaults: + _controller: monsieurbiz_blog.controller.article::applyStateMachineTransitionAction + _sylius: + event: $state + section: admin + permission: true + state_machine: + graph: !php/const \MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface::GRAPH + transition: $state + redirect: referer + flash: monsieurbiz_blog.blog.article.$state + +monsieurbiz_blog_admin_author: + resource: | + section: admin + alias: monsieurbiz_blog.author + path: /blog/authors + templates: "@SyliusAdmin/Crud" + redirect: index + except: ['show'] + grid: monsieurbiz_blog_admin_author + vars: + index: + icon: 'user' + type: sylius.resource diff --git a/src/Resources/config/routes/shop.yaml b/src/Resources/config/routes/shop.yaml new file mode 100644 index 0000000..c7fb80f --- /dev/null +++ b/src/Resources/config/routes/shop.yaml @@ -0,0 +1,60 @@ +monsieurbiz_blog_index: + path: /blog + methods: [ GET ] + defaults: + _controller: monsieurbiz_blog.controller.article::indexAction + _sylius: + template: "@MonsieurBizSyliusBlogPlugin/Shop/Article/index.html.twig" + grid: monsieurbiz_blog_shop_article + +monsieurbiz_blog_tag_show: + path: /blog/tag/{slug} + methods: [ GET ] + defaults: + _controller: monsieurbiz_blog.controller.article::indexAction + _sylius: + template: "@MonsieurBizSyliusBlogPlugin/Shop/Article/index.html.twig" + grid: monsieurbiz_blog_shop_tag_article + parameters: + tag: "expr:notFoundOnNull(service('monsieurbiz_blog.repository.tag').findOneBySlug($slug, service('sylius.context.locale').getLocaleCode()))" + +monsieurbiz_blog_partial_tag_show: + path: /_partial/blog/tag/{slug} + methods: [GET] + defaults: + _controller: monsieurbiz_blog.controller.article::indexAction + _sylius: + template: "@MonsieurBizSyliusBlogPlugin/Shop/Article/_list.html.twig" + grid: monsieurbiz_blog_shop_article + paginate: false + requirements: + slug: "[^/]+" + +monsieurbiz_blog_partial_tag_show_by_slug: + path: /_partial/blog/tag/by-slug/{slug} + methods: [GET] + defaults: + _controller: monsieurbiz_blog.controller.tag::showAction + _sylius: + template: $template + repository: + method: findOneBySlug + arguments: + - $slug + - "expr:service('sylius.context.locale').getLocaleCode()" + requirements: + slug: .+ + +monsieurbiz_blog_article_show: + path: /blog/{slug} + methods: [ GET ] + defaults: + _controller: monsieurbiz_blog.controller.article::showAction + _sylius: + template: "@MonsieurBizSyliusBlogPlugin/Shop/Article/show.html.twig" + repository: + method: findOnePublishedBySlug + arguments: + - $slug + - "expr:service('sylius.context.locale').getLocaleCode()" + - "expr:service('sylius.context.channel').getChannel()" diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml index 3847bdb..2e23217 100644 --- a/src/Resources/config/services.yaml +++ b/src/Resources/config/services.yaml @@ -8,7 +8,42 @@ services: resource: '../../*' exclude: '../../{Entity,Migrations}' - MonsieurBiz\SyliusBlogPlugin\Controller\: - resource: '../../Controller' - tags: [ 'controller.service_arguments' ] + # Add menu item in admin panel + MonsieurBiz\SyliusBlogPlugin\EventListener\AdminMenuListener: + tags: + - { name: kernel.event_listener, event: sylius.menu.admin.main } + # Form types + MonsieurBiz\SyliusBlogPlugin\Form\Type\TagType: + arguments: + $dataClass: '%monsieurbiz_blog.model.tag.class%' + $validationGroups: ['monsieurbiz'] + MonsieurBiz\SyliusBlogPlugin\Form\Type\TagTranslationType: + arguments: + $dataClass: '%monsieurbiz_blog.model.tag_translation.class%' + $validationGroups: ['monsieurbiz'] + + MonsieurBiz\SyliusBlogPlugin\Form\Type\ArticleType: + arguments: + $dataClass: '%monsieurbiz_blog.model.article.class%' + $validationGroups: ['monsieurbiz'] + + MonsieurBiz\SyliusBlogPlugin\Form\Type\ArticleTranslationType: + arguments: + $dataClass: '%monsieurbiz_blog.model.article_translation.class%' + $validationGroups: ['monsieurbiz'] + + MonsieurBiz\SyliusBlogPlugin\Form\Type\AuthorType: + arguments: + $dataClass: '%monsieurbiz_blog.model.author.class%' + $validationGroups: [ 'monsieurbiz' ] + + # Menus + MonsieurBiz\SyliusBlogPlugin\Menu\AdminArticleUpdateMenuBuilder: + tags: + - { name: knp_menu.menu_builder, method: createMenu, alias: monsieurbiz_blog.admin.article.update } + + # Fixtures + MonsieurBiz\SyliusBlogPlugin\Fixture\Factory\ArticleFixtureFactory: + arguments: + $fileLocator: '@file_locator' diff --git a/src/Resources/config/sylius/fixtures.yaml b/src/Resources/config/sylius/fixtures.yaml new file mode 100644 index 0000000..74c5764 --- /dev/null +++ b/src/Resources/config/sylius/fixtures.yaml @@ -0,0 +1,15 @@ +sylius_fixtures: + suites: + default: + fixtures: + monsieurbiz_blog_tag: + options: + random: 30 + + monsieubiz_blog_author: + options: + random: 3 + + monsieubiz_blog_article: + options: + random: 100 diff --git a/src/Resources/config/sylius/grids.yaml b/src/Resources/config/sylius/grids.yaml new file mode 100644 index 0000000..9a9bbf2 --- /dev/null +++ b/src/Resources/config/sylius/grids.yaml @@ -0,0 +1,2 @@ +imports: + - { resource: 'grids/*.yaml' } diff --git a/src/Resources/config/sylius/grids/monsieurbiz_blog_admin_article.yaml b/src/Resources/config/sylius/grids/monsieurbiz_blog_admin_article.yaml new file mode 100644 index 0000000..ff62345 --- /dev/null +++ b/src/Resources/config/sylius/grids/monsieurbiz_blog_admin_article.yaml @@ -0,0 +1,102 @@ +sylius_grid: + grids: + monsieurbiz_blog_admin_article: + driver: + name: doctrine/orm + options: + class: '%monsieurbiz_blog.model.article.class%' + repository: + method: createListQueryBuilder + arguments: [ "expr:service('sylius.context.locale').getLocaleCode()" ] + sorting: + id: desc + filters: + title: + type: string + label: monsieurbiz_blog.ui.title + options: + fields: [ translation.title ] + enabled: + type: boolean + label: sylius.ui.enabled + state: + type: select + label: sylius.ui.state + form_options: + choices: + monsieurbiz_blog.ui.draft: draft + monsieurbiz_blog.ui.published: published + channel: + type: entity + label: sylius.ui.channel + options: + fields: [channels.id] + form_options: + class: "%sylius.model.channel.class%" + publishedAt: + type: date + label: monsieurbiz_blog.ui.published_at + fields: + id: + label: sylius.ui.id + type: string + sortable: ~ + title: + type: string + label: monsieurbiz_blog.ui.title + authors: + type: twig + label: monsieurbiz_blog.form.article.authors + options: + template: '@MonsieurBizSyliusBlogPlugin/Admin/Grid/Field/_authors.html.twig' + channels: + type: twig + label: sylius.ui.channels + options: + template: '@SyliusAdmin/Grid/Field/_channels.html.twig' + enabled: + type: twig + label: sylius.ui.enabled + options: + template: "@SyliusUi/Grid/Field/enabled.html.twig" + state: + type: twig + label: sylius.ui.state + sortable: ~ + options: + template: "@SyliusUi/Grid/Field/state.html.twig" + vars: + labels: "@MonsieurBizSyliusBlogPlugin/Admin/Article/State" + updatedAt: + type: datetime + sortable: ~ + label: sylius.ui.updating_date + publishedAt: + type: datetime + sortable: ~ + label: monsieurbiz_blog.ui.published_at + actions: + main: + create: + type: create + item: + update: + type: update + delete: + type: delete + publish: + type: apply_transition + label: monsieurbiz_blog.ui.publish + icon: check + options: + link: + route: monsieurbiz_blog_admin_article_update_state + parameters: + id: resource.id + state: !php/const \MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface::TRANSITION_PUBLISH + class: green + transition: !php/const \MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface::TRANSITION_PUBLISH + graph: !php/const \MonsieurBiz\SyliusBlogPlugin\Entity\ArticleInterface::GRAPH + bulk: + delete: + type: delete diff --git a/src/Resources/config/sylius/grids/monsieurbiz_blog_admin_author.yaml b/src/Resources/config/sylius/grids/monsieurbiz_blog_admin_author.yaml new file mode 100644 index 0000000..22457e4 --- /dev/null +++ b/src/Resources/config/sylius/grids/monsieurbiz_blog_admin_author.yaml @@ -0,0 +1,35 @@ +sylius_grid: + grids: + monsieurbiz_blog_admin_author: + driver: + name: doctrine/orm + options: + class: '%monsieurbiz_blog.model.author.class%' + repository: + method: createListQueryBuilder + sorting: + id: desc + filters: + name: + type: string + label: monsieurbiz_blog.ui.name + fields: + id: + label: sylius.ui.id + type: string + sortable: ~ + name: + type: string + label: monsieurbiz_blog.ui.name + actions: + main: + create: + type: create + item: + update: + type: update + delete: + type: delete + bulk: + delete: + type: delete diff --git a/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_article.yaml b/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_article.yaml new file mode 100644 index 0000000..e6f4ff3 --- /dev/null +++ b/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_article.yaml @@ -0,0 +1,50 @@ +sylius_grid: + grids: + monsieurbiz_blog_shop_article: + driver: + name: doctrine/orm + options: + class: '%monsieurbiz_blog.model.article.class%' + repository: + method: createShopListQueryBuilder + arguments: + locale: "expr:service('sylius.context.locale').getLocaleCode()" + channel: "expr:service('sylius.context.channel').getChannel()" + tag: null + sorting: + publishedAt: desc + limits: [9] + fields: + id: + label: sylius.ui.id + type: string + sortable: ~ + title: + type: string + label: monsieurbiz_blog.ui.title + channels: + type: twig + label: sylius.ui.channels + options: + template: '@SyliusAdmin/Grid/Field/_channels.html.twig' + enabled: + type: twig + label: sylius.ui.enabled + options: + template: "@SyliusUi/Grid/Field/enabled.html.twig" + state: + type: twig + label: sylius.ui.state + sortable: ~ + options: + template: "@SyliusUi/Grid/Field/state.html.twig" + vars: + labels: "@MonsieurBizSyliusBlogPlugin/Admin/Article/State" + updatedAt: + type: datetime + sortable: ~ + label: sylius.ui.updating_date + publishedAt: + type: datetime + sortable: ~ + label: monsieurbiz_blog.ui.published_at diff --git a/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_category.yaml b/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_category.yaml new file mode 100644 index 0000000..286d1c9 --- /dev/null +++ b/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_category.yaml @@ -0,0 +1,27 @@ +sylius_grid: + grids: + monsieurbiz_blog_shop_tag: + driver: + name: doctrine/orm + options: + class: '%monsieurbiz_blog.model.tag.class%' + repository: + method: createEnabledListQueryBuilder + arguments: [ "expr:service('sylius.context.locale').getLocaleCode()" ] + sorting: + position: asc + fields: + id: + label: sylius.ui.id + type: string + sortable: ~ + name: + type: string + position: + type: string + sortable: ~ + enabled: + type: twig + label: sylius.ui.enabled + options: + template: "@SyliusUi/Grid/Field/enabled.html.twig" diff --git a/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_tag_article.yaml b/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_tag_article.yaml new file mode 100644 index 0000000..690bf02 --- /dev/null +++ b/src/Resources/config/sylius/grids/monsieurbiz_blog_shop_tag_article.yaml @@ -0,0 +1,50 @@ +sylius_grid: + grids: + monsieurbiz_blog_shop_tag_article: + driver: + name: doctrine/orm + options: + class: '%monsieurbiz_blog.model.article.class%' + repository: + method: createShopListQueryBuilder + arguments: + locale: "expr:service('sylius.context.locale').getLocaleCode()" + channel: "expr:service('sylius.context.channel').getChannel()" + tag: "expr:notFoundOnNull(service('monsieurbiz_blog.repository.tag').findOneBySlug($slug, service('sylius.context.locale').getLocaleCode()))" + sorting: + publishedAt: desc + limits: [9] + fields: + id: + label: sylius.ui.id + type: string + sortable: ~ + title: + type: string + label: monsieurbiz_blog.ui.title + channels: + type: twig + label: sylius.ui.channels + options: + template: '@SyliusAdmin/Grid/Field/_channels.html.twig' + enabled: + type: twig + label: sylius.ui.enabled + options: + template: "@SyliusUi/Grid/Field/enabled.html.twig" + state: + type: twig + label: sylius.ui.state + sortable: ~ + options: + template: "@SyliusUi/Grid/Field/state.html.twig" + vars: + labels: "@MonsieurBizSyliusBlogPlugin/Admin/Article/State" + updatedAt: + type: datetime + sortable: ~ + label: sylius.ui.updating_date + publishedAt: + type: datetime + sortable: ~ + label: monsieurbiz_blog.ui.published_at diff --git a/src/Resources/config/sylius/state_machine.yaml b/src/Resources/config/sylius/state_machine.yaml new file mode 100644 index 0000000..f07b8a3 --- /dev/null +++ b/src/Resources/config/sylius/state_machine.yaml @@ -0,0 +1,2 @@ +imports: + - { resource: 'state_machine/*.yaml' } diff --git a/src/Resources/config/sylius/state_machine/monsieurbiz_blog_article.yaml b/src/Resources/config/sylius/state_machine/monsieurbiz_blog_article.yaml new file mode 100644 index 0000000..4cf4d75 --- /dev/null +++ b/src/Resources/config/sylius/state_machine/monsieurbiz_blog_article.yaml @@ -0,0 +1,20 @@ +winzou_state_machine: + monsieurbiz_blog_article: + class: "%monsieurbiz_blog.model.article.class%" + property_path: state + graph: monsieurbiz_blog_article + state_machine_class: "%sylius.state_machine.class%" + states: + draft: ~ + published: ~ + transitions: + publish: + from: [draft, ready] + to: published + callbacks: + after: + monsieurbiz_blog_article_save_publish_date: + on: ["publish"] + do: ["object", "publish"] + args: ["object"] + priority: -100 diff --git a/src/Resources/config/sylius/ui.yaml b/src/Resources/config/sylius/ui.yaml new file mode 100644 index 0000000..e825018 --- /dev/null +++ b/src/Resources/config/sylius/ui.yaml @@ -0,0 +1,7 @@ +sylius_ui: + events: + sylius.shop.layout.topbar: + blocks: + currency_switcher: + template: "@MonsieurBizSyliusBlogPlugin/Shop/Layout/Topbar/_blogLink.html.twig" + priority: 15 diff --git a/src/Resources/config/validation/Article.yaml b/src/Resources/config/validation/Article.yaml new file mode 100644 index 0000000..d72a077 --- /dev/null +++ b/src/Resources/config/validation/Article.yaml @@ -0,0 +1,11 @@ +MonsieurBiz\SyliusBlogPlugin\Entity\Article: + properties: + tags: + - NotBlank: + groups: [ monsieurbiz ] + - Count: + min: 1 + groups: [ monsieurbiz ] + translations: + - Valid: + groups: [ monsieurbiz ] diff --git a/src/Resources/config/validation/ArticleTranslation.yaml b/src/Resources/config/validation/ArticleTranslation.yaml new file mode 100644 index 0000000..262c248 --- /dev/null +++ b/src/Resources/config/validation/ArticleTranslation.yaml @@ -0,0 +1,27 @@ +MonsieurBiz\SyliusBlogPlugin\Entity\ArticleTranslation: + constraints: + - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: + fields: [ slug, locale ] + errorPath: slug + groups: [ monsieurbiz ] + properties: + title: + - NotBlank: + groups: [ monsieurbiz ] + - Length: + min: 2 + max: 255 + groups: [ monsieurbiz ] + slug: + - NotBlank: + groups: [ monsieurbiz ] + - Length: + min: 2 + max: 255 + groups: [ monsieurbiz ] + description: + - NotBlank: + groups: [ monsieurbiz ] + content: + - NotBlank: + groups: [ monsieurbiz ] diff --git a/src/Resources/config/validation/Author.yaml b/src/Resources/config/validation/Author.yaml new file mode 100644 index 0000000..1251a30 --- /dev/null +++ b/src/Resources/config/validation/Author.yaml @@ -0,0 +1,9 @@ +MonsieurBiz\SyliusBlogPlugin\Entity\Author: + properties: + name: + - NotBlank: + groups: [ monsieurbiz ] + - Length: + min: 2 + max: 255 + groups: [ monsieurbiz ] diff --git a/src/Resources/config/validation/Tag.yaml b/src/Resources/config/validation/Tag.yaml new file mode 100644 index 0000000..d3a3293 --- /dev/null +++ b/src/Resources/config/validation/Tag.yaml @@ -0,0 +1,5 @@ +MonsieurBiz\SyliusBlogPlugin\Entity\Tag: + properties: + translations: + - Valid: + groups: [ monsieurbiz ] diff --git a/src/Resources/config/validation/TagTranslation.yaml b/src/Resources/config/validation/TagTranslation.yaml new file mode 100644 index 0000000..1a2a8e8 --- /dev/null +++ b/src/Resources/config/validation/TagTranslation.yaml @@ -0,0 +1,21 @@ +MonsieurBiz\SyliusBlogPlugin\Entity\TagTranslation: + constraints: + - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: + fields: [ slug, locale ] + errorPath: slug + groups: [ monsieurbiz ] + properties: + name: + - NotBlank: + groups: [ monsieurbiz ] + - Length: + min: 2 + max: 255 + groups: [ monsieurbiz ] + slug: + - NotBlank: + groups: [ monsieurbiz ] + - Length: + min: 2 + max: 255 + groups: [ monsieurbiz ] diff --git a/src/Resources/fixtures/article-1.jpg b/src/Resources/fixtures/article-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02d640e23fc3ec653fb72e3ad58598b468881407 GIT binary patch literal 271043 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ξ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

?@j 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%0Dt=Z;Dt!SXQZK}r0bcOr)C^OT+uAe_*=jW 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�wPdom=yfvRo(YjGPwCu7pV)Bp-RDg5ath)Np$N zQ0}9r_5z_dy&M^fdI3?h)1`op{tv}cZl;UbRKrSm{FOfFBl1+^{22X}2iV8tpe@cO z4qzx5VJtBb-@})$f@}~%VQ6LEM`yuLB%=e}ggLl{_g=+DG7+=MMCT8iWy#AV%6*+2 zF|+{NuFpVoY~gnBPG(~7Z@hkJ5pncQlmPL2Xm^hSq>qfO<>?O*y*1+PH~BfN`YziY zF%r7h$a#Vl*ldJsl5@o2L9Kt|1Ujeg1l`CwHgK?AWn6&$P_f4wxC|v=YR)tF zk3khLJBvcS2p@T9u6lC$BcME4;5c(YeueI5Ekc$*PCR40&&e_RJ3br!k+&iiIz!1; z)Nc^C%&5V@?QM?7N$j@_4KwTb(1(ToJxw3mSHguH@osvR$N@iA9Nhgi9i$41q1?pp)XX^ z=)^O7)b*?|Kt3%?+-9!vJtgzC2Hwk6kXfFO_kO$f<3X_B6MJM~8`Y_$?rI6sQ(Yos1i7MloH`CO(Bbv5>1G?zkjRGSic$9Ds(y`X- zR7Q65TanO&2?685XL|sNW{o_Rv}g$7#6uO?fLJLS!g4(Bh5&eKi(84OcWF52>)A>y z6YO%g60LIKu83wWerm@dVvFC2?sJrGcqNt_?4mYp(Z)kxg@cl?2KOthBKan>78j68 zX>kY_0MY`n#M7qpy<>6gYOy%onQ%i5fIzm^vN-I6Z;6`kK#(w$+YM7mJGv}0Rvv}# zp;sCd8h55P&o>Y-|BJt*~HH9U8!#b+?d0+I|Wqf840-Q!S^x4l3!$_l^B(+Zv~|Ph~aq zOknhwFq9i7S1AL!?Z~#0QEa*lkTOB(#o2d;;+azkg~rX3Haoig-lL&TWR7FT7c|&| zxT`53vn4p=_k_uwWMhMafI)VoVI*7vp8o(rt~cbUr*3Z(O@k3;frz$Z*fGDdTwA@V z^il?hnk8XBrq2EWe0B+2A=K#YT6eVpO!#owqZ6-XYqjFe88~n#H9nqRv6ehX6&})! zvV(k09w7c|eV0}wjQQyCz^JR>5=3(zlXrrz(pWnHmiKqJ!2_7l9*nv!2yn?5sUflK zb(uGYMLJ3Fj`L5ER`FP*FC#_$+<29*$PPDY!tOkLQ3nf!j_wD;=-Ts(Hb1`IeSA~m z&QW&v*{7^-K!8EGJvps93m|?SY*B4HZ>bkPXovnM)aOF_=wo?7IH|LdeCK&_7U)F`JW}=nDkr>V8Qm4uVlSt8^4mMK~kS(wcNA zSqE-RayyE6+=$d8Z4n(HqWuD7e|gBBhd)m>1se%rV~Ex6^jf5y$KvMa?O*)@bKG3_ z7dhIJtkopskN|6aCmewFs%i_zvu!;38QeP~z$vPwGS4IAdDYH61ny7X(wru_1!{}0 zWg!EwQ^7ry?g)>A)t|j$dmhuEk9i>DV)#M7 zWzXit@Q`b>CG%qVL;nD^Pv*t&i0QKB^J4fxr}k9dY+HYR%bVL`+uDC+P3^I5{o5{Y zZHsU3*)#dK^ILaz$*J>d+ncscPn%ZW{{Y&j^Ka(1_x{yCn-<^y0NSVXYTM^cmp_|U z-4h7^0J7&>Vgg$x%c)ys`fR$T@P{IHRQ_#Se^2bG{MxqrKmP!iD%-uAlwk8Izrb+zNPLuz3f7QxEW^&+e64 z;fPYoLD1n|?33B5T zza>~(oiyIKo%t%ZoA~wdMKjJ9&$`eD4*B(jrUcWY0vg*+2ynVK^mFq^xQ((N<AZVa>|GXp9v` zwt<7Lh2L&{T1g7>QEmy}z zA^;!|FuM>f-0xVjbv&^8N-ihK87nY1AmDG}6K7!#3VoMW9~rmc;lQY? zq7PxShOOQY$jrJuceio;iVnZOb-a3Q(0{YyJSP5yVXprGL#^Yv7m&v{3;1#HU0gtU zub3VscD_h+NFwdvoXsxw`^V;kg~7P`A`rQBN2_tyx_m;wLuMEpbU#%19*)w)M~c6i z>^qvpgg1K-cmVjK=^D|!*YyR~PZXnEu_1-78e~1`lV8YNDB*Rv z0UJjWtqWD0)oN>f<(OK2p&QNZh1^?`m7a@)gMrAPGLfZ+pXP9(|5AA**BNgS8+BW;qnp3%>(H%cn>AS@gRn7MVPeroc z;-Z>&LzCMUzqF}`_$*YfzAAPqR^HLauJ))8_)w@EKSLI2j3v#CGj+p?gHaoEP+I1i z4-%qovERViLmO-$8FNiP;Hd5iiJl5A@wHR;7@^!6qPC4u+aTX0&I8Femy&7-bPj-< zz?mk+_Ja zg5!%7Db|_}e>N2!>Uw>5uqsj={oauO0H7*!r8Hi^P>m_0_7GsRTZh0|NubS0H#W)S zdLzj>yp#8qMU)rSzO@lL4;!f5a|0y+&k~1Fbx~UQ zQ*V}tTG=dn3bXfXCZShANk2Ho;eS2_3|e${oD;E(Ad(L3)ke;%Ym9P6eI|#CVrp*F zgwjs?&zsrU)uBUFW2=r+1!FQ{+<7=~LRx61!0`4w#_n8?^gF`MHTy=HvgI3|8hvQe zODs+-b8Z7(*Bp+Rzc8XQw02vCx?{cg>8;p}L95|Srvz_Z1L`JpsYvDwFPHPtg^ z%>&G)d`55zQv+b`R z6`2HC!%(uiB?kDf_DJO`Rq9%Vq;-Q62jYxFQucA)Jb80hrw5-!$I1>knsC34_1nwoJUPoa$ zU^-Pf6b(W{%*v^cQFplM#s7swk62gX9h2M*YYiK&ct1 zMIMpR5Lf6dLEF{z=ooWM4!noey%5|i7+SB>@HF9pmXcz$qsLGVKRk z`$xpBY!-Q;)tAUy978hq

lN4$5yMQ19pzlgeK!i{9g#oNiA*9S4FVR$YD7c{Isp zRs`&_2$P^kfLHiEQTz5G)W?~{kADUI+Flq1yw%^})q2tUO;zwc?G!Ye0WWf|{{SOL z?YUQPprrQPtAF;|U*kDfe~_g1+^fIHQu}UI`=}{Bw<_)Q6u#S)ZvC50{AVhS`!Wwy z5hqj*hgAUE|m4ExR zdu#sy-J|%+hRq+wTy|%a$(#0Xl*%pJH_m0lW{=}88#I3zfBUtc#!r5f9#W_`Pqj4`Bdtx{;;0joYqV5IRChzNy;a8LnPup{g{+8fqN@1Q0_+5JAyMKH>ZpP5qFE z{%qO5zy6L*DV@`wH5;0LOgtQ^V|AqX(LA20!30TBZf;ayYcuV-`Km@RgA~p@OsXT3 zBO#-m(A>ha$~=|MQLTFx^{n!5y%GKxKk8bzMm@AGoDunwnD(B)ZtlTPwTq3Ea*=%0 z3~2PS(P$?)KxivwSPc1Z^%n(F0^{nxbn)1hA%N9}t-M z%(Pv$X@f(1p!zujgMfRa^&<>yq^S%s$WK)KT=Y$;s117y#6LK|RZTrp<8(waL#Vbw z_d=EiQ&u|fA;3F|2A&rd0Or`(Xq@o+*w_Oa0D3DJ%TS+8`ySL=+ryYp*1`d^*zDTj zxm4_W;P~Cz8XeCH9i>m!L~P;d$GxZI2WzO%jY4(6kO6%T=Xicd4G^;b0An6fHD0Z# zF@P-y$quIRkk?%HHy;iM+_e_58iT0uU7wZ z7c1B+G3&75&7;(?Qo6%k5%|l-g}^v?pDp=K9f@vb1U%gEmys47++Ki0VeIHnIk;W5J=w81anp??6<)iD*`-j2?X!h3?=A zy)0b7Sv!&sFJ}<29Q6jvG5V`sEcSx1=M;s!j$ug8N-{?l=9=vf(1z+%Y}2$DCODP<|^PuibEcm(<1j#rns>PooHT-l*f z?5p*}O+M&Z{Z&@fedc|m8bsWhIx|{^tNfeFRqxSr({F>4bEt3NhsEQ&?(VbEEPYzm~k*#7{1xspT%NV)w8m`eyf_nO0^2XP(5CaIg#cPa|mt zt(`Q0laAqyb+RLm1oG0zqXJUL^$g#UyUV(g6-97H+w*;sSH06!m!fAoWsVJ+|&8GO8(JeXtM#2Y5VG z`z`%o7@=^*e(JNX0@1^cY1FUKn90q*)GB?U4jBeGpQDDL@d~ft^?P3%{{Ui5&m0Pi zXvK+x3&*6xsOZFUK>`b0F4MT97p0tgox{iT=>Gs=zm$wut#3BF@Lx9H*&QD->p}L% zdyO15ADB*!;6B~095g){e6Zt*y_fOh;)`8{;?CW`_#dIU2!|tpo=CZ|xNddIyV%2{ zj%UFM!G7#_@=ks+;1CmahQxtk;)s@P?w)HTlSW{-i9zx}&hbJzhgfzZjDWs=HVe1s z4qhRAIb{6=Utra(B~^_DwU{J7)Q!ETHxBsX)A=>RSWol3XJ0S}Z@o1s!O zebX)53Mn*l2c|iJ!`Uimw_+TT8iY|;enizdfrXvopr##x)=AzvCp_K8{RPI&7g4}5 zPVDzEYN_Y}iuZo#WB#R8?Kk}M@W;9~6O-k5Yenv#5qyMpzedj; zUAPwu9 z3$pC@AHjBr;7{Ve-o2Om_MlMWfeEN^_bUzR`ET$++mF34kZkXIBYVf1ItTtJ_wUVf z2=Pabi#w8>Mowu8L8-cNB{=U+wxvAZGKkcXxp8qpq+Rb!m%pBRtSq})?76S@1y4JE zD@0D-g!e;=GHmBKkI}e0)uCCG`W?F!RB^UP!pFIR+;EizT^&5kFEURbUL%p0ARX6I zR5-b(0Q$Mu^CdyGA$=WF1h5v`1j*?j3$fSSx zB!#8*00ZKzR2AO`A&XgQSR;ECJ!K4(lQ0%PcXaL{0XETOnHUI(pp3&+>Lh%S*{zg@ zj5aN>C$dvsI_fKzum@lU&u>0=8^Sfz40(*V5iM|W%oR^o%s3j^8GHv0K#{y}3TUK! zC9jVI#B3*949N#@DyfsSI%&(Y?Uv|I)pe9xN}j=(h7#9@~&NH}$ zZzL1;e7MJIGwCr>?Ro+~OAGwkf1y+CdfZXI;{AvBxfLCJHwMpdq{U6 z;mKcMOhnA$8JGzZ)b|^sd`ha?lVhop<8uasq#S@( z`5AQCcHFZ)8IGHL931L@q9L(nGdgcy-4FT|>(%OJAa4GJ7Z)muCQ0mW zFy@ep-D?EwM7$=n9P&l&A-Ax|xNk%<%@;hApXt8b1(mOvD6o6;MDI-vzOF|Z#F?47 z#8D$$JdiudKsU2uN_FfmgYsxN8>%1%43PwkCD%HyoZJWEvt5(KjFGo%RQEc--4