From e14e627639d6cd69875b768aaad881601f7a5f50 Mon Sep 17 00:00:00 2001 From: Chrynn Date: Sat, 25 Nov 2023 19:38:50 +0100 Subject: [PATCH 01/15] deprecated docker-compose script changed --- .docker/docker-compose.yml | 16 ++++++++-------- .docker/node/Dockerfile | 2 -- Makefile | 10 +++++----- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 86ca9b3..a2fb50f 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -11,6 +11,14 @@ services: ports: - "80:80" + node: + build: + dockerfile: node/Dockerfile + working_dir: /var/www/html + volumes: + - ../:/var/www/html + command: [ "tail", "-f", "/dev/null" ] + mysql: image: mysql:8.0.29 environment: @@ -29,11 +37,3 @@ services: - "1000:8080" depends_on: - mysql - - node: - build: - dockerfile: node/Dockerfile - working_dir: /var/www/html - volumes: - - ../:/var/www/html - command: [ "tail", "-f", "/dev/null" ] diff --git a/.docker/node/Dockerfile b/.docker/node/Dockerfile index 5155ee9..1c84547 100644 --- a/.docker/node/Dockerfile +++ b/.docker/node/Dockerfile @@ -1,3 +1 @@ FROM node:18.17.0 - -WORKDIR /var/www/html diff --git a/Makefile b/Makefile index 6d70ab7..825bab3 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,14 @@ up: - docker-compose -f .docker/docker-compose.yml up -d + docker compose -f .docker/docker-compose.yml up -d build: - docker-compose -f .docker/docker-compose.yml up -d --build + docker compose -f .docker/docker-compose.yml up -d --build down: - docker-compose -f .docker/docker-compose.yml down + docker compose -f .docker/docker-compose.yml down php: - docker-compose -f .docker/docker-compose.yml exec php bash; + docker compose -f .docker/docker-compose.yml exec php bash; node: - docker-compose -f .docker/docker-compose.yml exec node bash; + docker compose -f .docker/docker-compose.yml exec node bash; From 325741bb5197dba10160743ba40bd241c23c688c Mon Sep 17 00:00:00 2001 From: Chrynn Date: Tue, 28 Nov 2023 21:21:45 +0100 Subject: [PATCH 02/15] BaseControll created, template variable typed in PHP, LoginForm created --- app/Model/Factory/LoginFactory.php | 12 +++ app/Model/{ => Repository}/BaseRepository.php | 2 +- app/Model/Repository/EventRepository.php | 2 - app/Model/Service/AuthorizationService.php | 18 ++++ app/Module/BasePresenter.php | 32 ++++++- app/Module/ModulePresenter.php | 13 --- .../User/Error4xx/Error4xxPresenter.php | 3 +- .../User/Register/RegisterPresenter.php | 11 +++ .../Register/templates/Register.default.latte | 1 + app/Module/User/UserPresenter.php | 4 +- app/Module/_components/BaseControl.php | 16 ++++ app/Module/_components/Login/Login.php | 24 ++++++ .../_components/Login/templates/login.latte | 34 ++++++++ .../{templates => _templates}/@layout.latte | 0 .../{templates => _templates}/footer.latte | 0 .../{templates => _templates}/header.latte | 22 +++-- www/assets/script/template/header.ts | 10 +++ www/assets/style/template/default/button.scss | 26 ++++++ www/assets/style/template/default/header.scss | 2 +- www/assets/style/template/default/login.scss | 84 +++++++++++++++++++ www/assets/style/template/template.scss | 1 + www/main.scss | 6 ++ 22 files changed, 297 insertions(+), 26 deletions(-) create mode 100644 app/Model/Factory/LoginFactory.php rename app/Model/{ => Repository}/BaseRepository.php (82%) create mode 100644 app/Model/Service/AuthorizationService.php delete mode 100644 app/Module/ModulePresenter.php create mode 100644 app/Module/User/Register/RegisterPresenter.php create mode 100644 app/Module/User/Register/templates/Register.default.latte create mode 100644 app/Module/_components/BaseControl.php create mode 100644 app/Module/_components/Login/Login.php create mode 100644 app/Module/_components/Login/templates/login.latte rename app/Module/{templates => _templates}/@layout.latte (100%) rename app/Module/{templates => _templates}/footer.latte (100%) rename app/Module/{templates => _templates}/header.latte (78%) create mode 100644 www/assets/style/template/default/login.scss diff --git a/app/Model/Factory/LoginFactory.php b/app/Model/Factory/LoginFactory.php new file mode 100644 index 0000000..a3b7405 --- /dev/null +++ b/app/Model/Factory/LoginFactory.php @@ -0,0 +1,12 @@ +netteSecurityUser->isLoggedIn(); + } +} diff --git a/app/Module/BasePresenter.php b/app/Module/BasePresenter.php index 76cc261..f7323de 100644 --- a/app/Module/BasePresenter.php +++ b/app/Module/BasePresenter.php @@ -4,8 +4,38 @@ namespace App\Module; +use App\Model\Factory\LoginFactory; +use App\Model\Service\AuthorizationService; +use App\Module\_components\Login\Login; use Nette\Application\UI\Presenter; +use Nette\Bridges\ApplicationLatte\Template; +use stdClass; -abstract class BasePresenter extends Presenter +/** + * @property-read Template|stdClass $template + */ +class BasePresenter extends Presenter { + public function __construct( + private AuthorizationService $authorizationService, + private LoginFactory $loginFactory + ) + { + parent::__construct(); + } + + protected function beforeRender(): void + { + $this->template->isLogged = $this->authorizationService->isLoggedIn(); + } + + protected function createComponentLogin(): Login + { + return $this->loginFactory->create(); + } + + public function findLayoutTemplateFile(): ?string + { + return __DIR__ . '/_templates/@layout.latte'; + } } diff --git a/app/Module/ModulePresenter.php b/app/Module/ModulePresenter.php deleted file mode 100644 index a0e5e1e..0000000 --- a/app/Module/ModulePresenter.php +++ /dev/null @@ -1,13 +0,0 @@ -addText("email"); + $form->addPassword("password"); + + return $form; + } + + public function render(): void + { + $this->template->setFile(__DIR__ . '/templates/login.latte'); + $this->template->render(); + } +} diff --git a/app/Module/_components/Login/templates/login.latte b/app/Module/_components/Login/templates/login.latte new file mode 100644 index 0000000..df4610c --- /dev/null +++ b/app/Module/_components/Login/templates/login.latte @@ -0,0 +1,34 @@ + diff --git a/app/Module/templates/@layout.latte b/app/Module/_templates/@layout.latte similarity index 100% rename from app/Module/templates/@layout.latte rename to app/Module/_templates/@layout.latte diff --git a/app/Module/templates/footer.latte b/app/Module/_templates/footer.latte similarity index 100% rename from app/Module/templates/footer.latte rename to app/Module/_templates/footer.latte diff --git a/app/Module/templates/header.latte b/app/Module/_templates/header.latte similarity index 78% rename from app/Module/templates/header.latte rename to app/Module/_templates/header.latte index e0732b1..f4b7dc9 100644 --- a/app/Module/templates/header.latte +++ b/app/Module/_templates/header.latte @@ -1,5 +1,9 @@ {block header} +{varType bool $isLogged} + +{control login} +
@@ -53,11 +57,19 @@
  • - - - - - + {if !$isLogged} + + {else} + + + + + + {/if}
  • diff --git a/www/assets/script/template/header.ts b/www/assets/script/template/header.ts index 6e4834a..7fbc178 100644 --- a/www/assets/script/template/header.ts +++ b/www/assets/script/template/header.ts @@ -18,3 +18,13 @@ export function headerScroll() { } headerScroll(); + +export function showLogin() { + const iconUserDivClass = '.js-show-login'; + const iconUserDiv = document.querySelector(iconUserDivClass); + + iconUserDiv.addEventListener('click', () => { + + }); +} +showLogin(); diff --git a/www/assets/style/template/default/button.scss b/www/assets/style/template/default/button.scss index 68a8f85..7744e4e 100644 --- a/www/assets/style/template/default/button.scss +++ b/www/assets/style/template/default/button.scss @@ -58,3 +58,29 @@ transition: $transition-medium; } } + +.input-colored { + +} + +.input-secondary { + @include font-light-thin-sans-serif; + border: 1px solid $color-secondary; + background: transparent; + font-size: $text-big; + padding: 10px 20px; + border-radius: 10px; + width: 100%; + outline: none; + transition: $transition-medium; + + &:focus { + border: 1px solid $color-tertiary; + transition: $transition-medium; + } +} + +.label-required { + @include font-colored-thin-sans-serif; + margin-left: 3px; +} diff --git a/www/assets/style/template/default/header.scss b/www/assets/style/template/default/header.scss index e609c4c..58baa20 100644 --- a/www/assets/style/template/default/header.scss +++ b/www/assets/style/template/default/header.scss @@ -2,7 +2,7 @@ width: 100%; padding: 15px 0; position: fixed; - z-index: 10; + z-index: 2; transition: $transition-medium; &--active { diff --git a/www/assets/style/template/default/login.scss b/www/assets/style/template/default/login.scss new file mode 100644 index 0000000..1851bf8 --- /dev/null +++ b/www/assets/style/template/default/login.scss @@ -0,0 +1,84 @@ +.login { + position: absolute; + z-index: 3; + display: flex; + justify-content: center; + align-items: center; + + &__block { + border-radius: 15px; + padding: 30px 30px 40px 30px; + background: $shader-stronger; + border: 1px solid $color-orange-dark; + width: 500px; + } + + &__heading { + @include font-light-thin-sans-serif; + text-align: center; + font-size: $heading-big; + margin-bottom: 10px; + } + + &__form-item:not(:last-child) { + margin-bottom: 20px; + } + + &__label { + @include font-light-thin-sans-serif; + font-size: $text-medium; + margin-bottom: 10px; + cursor: pointer; + transition: $transition-medium; + padding-left: 10px; + + &:hover { + @include font-colored-thin-sans-serif; + transition: $transition-medium; + } + } + + &__links { + margin-top: 15px; + padding: 0 10px; + display: flex; + justify-content: space-between; + } + + &__register { + @include font-light-thin-sans-serif; + text-decoration: none; + font-size: $text-medium; + text-transform: uppercase; + transition: $transition-medium; + + &:hover { + @include font-colored-thin-sans-serif; + transition: $transition-medium; + } + } + + &__forgot { + @include font-light-thin-sans-serif; + font-size: $text-medium; + text-transform: uppercase; + transition: $transition-medium; + cursor: pointer; + + &:hover { + @include font-colored-thin-sans-serif; + transition: $transition-medium; + } + + } + + &__label-wrap { + display: flex; + } + + &__button-wrap { + display: flex; + justify-content: center; + margin-top: 40px; + } +} diff --git a/www/assets/style/template/template.scss b/www/assets/style/template/template.scss index bff4ce1..8991e11 100644 --- a/www/assets/style/template/template.scss +++ b/www/assets/style/template/template.scss @@ -1,3 +1,4 @@ @import 'default/header'; @import 'default/button'; @import 'default/footer'; +@import 'default/login'; diff --git a/www/main.scss b/www/main.scss index 08a5137..6bf84f6 100644 --- a/www/main.scss +++ b/www/main.scss @@ -25,6 +25,12 @@ span { max-width: 1200px; } +.shader-softest { + background: $shader-softest; + height: 100%; + width: 100%; +} + .shader-soft { background: $shader-soft; height: 100%; From 9045008c829b0657ea84012c261e38fe5fe7fa3d Mon Sep 17 00:00:00 2001 From: Chrynn Date: Sun, 3 Dec 2023 11:11:34 +0100 Subject: [PATCH 03/15] login modal created --- .db/dummy.sql | 2 + .db/schema.sql | 9 ++++ app/Model/Repository/BaseRepository.php | 10 ++--- app/Model/Repository/EventRepository.php | 6 +-- app/Model/Repository/UserRepository.php | 20 +++++++++ app/Model/Service/AuthenticationService.php | 43 +++++++++++++++++++ app/Model/Service/AuthorizationService.php | 11 +++++ .../User/Register/RegisterPresenter.php | 4 ++ app/Module/_components/Login/Login.php | 22 +++++++++- .../_components/Login/templates/login.latte | 8 +++- app/Module/_templates/@layout.latte | 1 - app/Module/_templates/header.latte | 2 +- www/assets/image/icon/general.svg | 7 +++ www/assets/image/icon/template/icon-cross.svg | 9 ++++ www/assets/script/template/header.ts | 13 ++++++ www/assets/style/template/default/button.scss | 4 +- www/assets/style/template/default/header.scss | 5 +++ www/assets/style/template/default/login.scss | 35 +++++++++++++++ www/assets/style/variable.scss | 1 + www/main.scss | 3 ++ 20 files changed, 198 insertions(+), 17 deletions(-) create mode 100644 app/Model/Repository/UserRepository.php create mode 100644 app/Model/Service/AuthenticationService.php create mode 100644 www/assets/image/icon/template/icon-cross.svg diff --git a/.db/dummy.sql b/.db/dummy.sql index 42576d2..9c01a96 100644 --- a/.db/dummy.sql +++ b/.db/dummy.sql @@ -6,3 +6,5 @@ INSERT INTO event (title) VALUES ('Na cepu nove Plzen 10'); INSERT INTO event (title, event_time, event_place) VALUES ('Patecni grilovane kure', '2023-10-26 10:38:10', 'Snyt - Vinohrady'); INSERT INTO event (title) VALUES ('Zahradka zavrena'); INSERT INTO event (title) VALUES ('Hledame kuchare'); + +INSERT INTO user (email, password) VALUES ('test@gmail.com', 'test'); diff --git a/.db/schema.sql b/.db/schema.sql index 02d59ae..3fe1e69 100644 --- a/.db/schema.sql +++ b/.db/schema.sql @@ -7,3 +7,12 @@ CREATE TABLE event ( updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY(id) ); + +CREATE TABLE user ( + id INT UNSIGNED AUTO_INCREMENT NOT NULL, + email VARCHAR(255) NOT NULL, + password VARCHAR(255) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP , + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY(id) +); diff --git a/app/Model/Repository/BaseRepository.php b/app/Model/Repository/BaseRepository.php index 9a90629..34e98b6 100644 --- a/app/Model/Repository/BaseRepository.php +++ b/app/Model/Repository/BaseRepository.php @@ -8,12 +8,8 @@ abstract class BaseRepository { - public function __construct(private Connection $database) - { - } - - public function getDibiConnection(): Connection - { - return $this->database; + public function __construct( + protected Connection $dibi + ) { } } diff --git a/app/Model/Repository/EventRepository.php b/app/Model/Repository/EventRepository.php index 0805c58..beb98fe 100644 --- a/app/Model/Repository/EventRepository.php +++ b/app/Model/Repository/EventRepository.php @@ -10,7 +10,7 @@ class EventRepository extends BaseRepository public function findAll(): array { - $result = $this->getDibiConnection() + $result = $this->dibi ->select('*') ->from(self::TABLE); @@ -19,7 +19,7 @@ public function findAll(): array public function getAllCount(): int { - $result = $this->getDibiConnection() + $result = $this->dibi ->select('COUNT(id)') ->from(self::TABLE); @@ -28,7 +28,7 @@ public function getAllCount(): int public function findAllForPaginator(int $limit, int $offset): array { - $result = $this->getDibiConnection() + $result = $this->dibi ->select('*') ->from(self::TABLE) ->limit($limit) diff --git a/app/Model/Repository/UserRepository.php b/app/Model/Repository/UserRepository.php new file mode 100644 index 0000000..1dd2206 --- /dev/null +++ b/app/Model/Repository/UserRepository.php @@ -0,0 +1,20 @@ +dibi->query( + "SELECT * FROM user WHERE {$key}=?", + $value + ); + + return $result->fetch(); + } +} \ No newline at end of file diff --git a/app/Model/Service/AuthenticationService.php b/app/Model/Service/AuthenticationService.php new file mode 100644 index 0000000..0db92ab --- /dev/null +++ b/app/Model/Service/AuthenticationService.php @@ -0,0 +1,43 @@ +userRepository->findOneBy('email', $user); + + if (!$user) { + throw new AuthenticationException('Uzivatel nebyl nalezen'); + } + if (!$this->passwords->verify($password, $user->password)) { + throw new AuthenticationException('Nepsravne heslo'); + } + + return new SimpleIdentity( + $user->id, + null, + [ + 'email' => $user->email + ] + ); + } +} \ No newline at end of file diff --git a/app/Model/Service/AuthorizationService.php b/app/Model/Service/AuthorizationService.php index 8863ff5..638332a 100644 --- a/app/Model/Service/AuthorizationService.php +++ b/app/Model/Service/AuthorizationService.php @@ -1,7 +1,10 @@ netteSecurityUser->isLoggedIn(); } + + /** + * @throws AuthenticationException + */ + public function login(string $email, string $password): void + { + $this->netteSecurityUser->login($email, $password); + } } diff --git a/app/Module/User/Register/RegisterPresenter.php b/app/Module/User/Register/RegisterPresenter.php index a160d34..ed1b91d 100644 --- a/app/Module/User/Register/RegisterPresenter.php +++ b/app/Module/User/Register/RegisterPresenter.php @@ -8,4 +8,8 @@ class RegisterPresenter extends BasePresenter { + public function actionDefault(): void + { + + } } diff --git a/app/Module/_components/Login/Login.php b/app/Module/_components/Login/Login.php index ab68bc1..9273f85 100644 --- a/app/Module/_components/Login/Login.php +++ b/app/Module/_components/Login/Login.php @@ -2,20 +2,38 @@ namespace App\Module\_components\Login; +use App\Model\Service\AuthorizationService; use App\Module\_components\BaseControl; use Nette\Application\UI\Form; +use Nette\Security\AuthenticationException; class Login extends BaseControl { + public function __construct( + protected AuthorizationService $authorizationService + ) { + } + protected function createComponentForm(): Form { $form = new Form(); - $form->addText("email"); - $form->addPassword("password"); + $form->addEmail("email")->setRequired(); + $form->addPassword("password")->setRequired(); + $form->onSubmit[] = [$this, "handleLogin"]; return $form; } + public function handleLogin(Form $form): void + { + try { + $values = $form->getValues(); + $this->authorizationService->login($values->email, $values->password); + } catch (AuthenticationException) { + $form->addError('Nesprávný E-mail nebo heslo'); + } + } + public function render(): void { $this->template->setFile(__DIR__ . '/templates/login.latte'); diff --git a/app/Module/_components/Login/templates/login.latte b/app/Module/_components/Login/templates/login.latte index df4610c..ff33f9b 100644 --- a/app/Module/_components/Login/templates/login.latte +++ b/app/Module/_components/Login/templates/login.latte @@ -1,7 +1,13 @@
  • +
  • + {/if} + {/foreach} +
  • +
+
+ {var $iamOnFirstPage = $paginator->isFirst()} {var $iamOnLastPage = $paginator->isLast()} {var $currentPage = $paginator->getPage()} {var $pageCount = $paginator->getPageCount()} - - - - - -
    - {var $iamOnFirstOrSecondPage = in_array($currentPage, [1, 2])} + + + + + +
      + {var $iamOnFirstOrSecondPage = in_array($currentPage, [1, 2])} {var $iamOnMoreThanThirdPage = $currentPage > 3} {var $areMoreThanTwoPagesBeforeMe = ($pageCount - $currentPage) > 2} {var $iamNotOnLastOrOneBeforeLastPage = !$iamOnLastPage && ($currentPage !== ($pageCount - 1))} {if !$iamOnFirstOrSecondPage} -
    • - - 1 - -
    • - {/if} +
    • + + 1 + +
    • + {/if} {if $iamOnMoreThanThirdPage} -
    • - ... -
    • - {/if} +
    • + ... +
    • + {/if} {if !$iamOnFirstPage} -
    • - - {$currentPage - 1} - -
    • - {/if} +
    • + + {$currentPage - 1} + +
    • + {/if}
    • - {$currentPage} + {$currentPage}
    • {if !$iamOnLastPage} -
    • - - {$currentPage + 1} - -
    • - {/if} +
    • + + {$currentPage + 1} + +
    • + {/if} {if $areMoreThanTwoPagesBeforeMe} -
    • - ... -
    • - {/if} +
    • + ... +
    • + {/if} {if $iamNotOnLastOrOneBeforeLastPage} -
    • - - {$pageCount} - -
    • - {/if} -
    - - - - - +
  • + + {$pageCount} + +
  • + {/if} +
+ + + + + +
{/snippet}
From 72751c6e4a510cc158ff04b7ec91a3ba8db4df2c Mon Sep 17 00:00:00 2001 From: Chrynn Date: Mon, 11 Dec 2023 19:50:31 +0100 Subject: [PATCH 12/15] run enviroment makefile command added, README.md updated --- Makefile | 10 +++++ README.md | 37 ++++++------------- app/Module/components/Login/LoginControl.php | 3 +- .../components/Login/templates/login.latte | 2 + 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/Makefile b/Makefile index 825bab3..52d1b1d 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,12 @@ +# run environment scripts +init\:env: + cd config && touch local.neon + make up + docker compose -f .docker/docker-compose.yml exec php composer install + docker compose -f .docker/docker-compose.yml exec node npm install + docker compose -f .docker/docker-compose.yml exec php bin/console migration:reset + +# run containers scripts up: docker compose -f .docker/docker-compose.yml up -d @@ -7,6 +16,7 @@ build: down: docker compose -f .docker/docker-compose.yml down +# join container scripts php: docker compose -f .docker/docker-compose.yml exec php bash; diff --git a/README.md b/README.md index 0a2d2eb..36254b2 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,19 @@ -# Snyt +## Snyt -website for restaurant with small CMS +Website for restaurant with small CMS -> more tech-info find in project's Wiki (tab in Github repository) +### Used technology -## Start project +- `Layouts` are designed in Adobe XDesign +- `Devops` is runned by [Docker](https://www.docker.com/) & Apache virtual server +- `Frontend` is coded in HTML stylesheet [Latte](https://latte.nette.org/cs/) +- `Backend` is programmed in [PHP](https://www.php.net/) framework [Nette](https://nette.org/cs/) +- `Database` is build by MYSQL with [Adminer](https://www.adminer.org/cs/) interface & [Dibi](https://dibiphp.com/cs/) (database layer) -- start containers -``` -docker-compse up -d -``` +### Start project -- join php container -``` -docker exec php bash -``` +Run this command in Terminal & open `localhost:80` in Browser -- install dependencies ``` -composer install +make init:env ``` - -- add `local.neon` file to `config` folder -```neon -parameters: - -database: - dsn: 'mysql:host=127.0.0.1;dbname=test' - user: - password: -``` - -- run `localhost:80` in your browser \ No newline at end of file diff --git a/app/Module/components/Login/LoginControl.php b/app/Module/components/Login/LoginControl.php index 2b6f83b..4bea2ee 100644 --- a/app/Module/components/Login/LoginControl.php +++ b/app/Module/components/Login/LoginControl.php @@ -5,6 +5,7 @@ use App\Model\Service\AuthorizationService; use App\Module\components\BaseControl; use Nette\Application\UI\Form; +use Nette\Neon\Exception; use Nette\Security\AuthenticationException; class LoginControl extends BaseControl @@ -18,7 +19,7 @@ protected function createComponentForm(): Form { $form = new Form(); $form->addEmail('email')->setRequired(); - $form->addPassword('password')->setRequired(); + $form->addPassword('password')->setRequired('test'); $form->addSubmit('submit'); $form->onSubmit[] = [$this, 'actionLogin']; diff --git a/app/Module/components/Login/templates/login.latte b/app/Module/components/Login/templates/login.latte index 7c78feb..30278d7 100644 --- a/app/Module/components/Login/templates/login.latte +++ b/app/Module/components/Login/templates/login.latte @@ -17,6 +17,7 @@
+ {inputError email}
From 5a6e16019cf711e0a4ab2af1649604fed94592fd Mon Sep 17 00:00:00 2001 From: Chrynn Date: Mon, 11 Dec 2023 20:25:31 +0100 Subject: [PATCH 13/15] build asset in init command --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 52d1b1d..fd72c44 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,9 @@ init\:env: cd config && touch local.neon make up docker compose -f .docker/docker-compose.yml exec php composer install - docker compose -f .docker/docker-compose.yml exec node npm install docker compose -f .docker/docker-compose.yml exec php bin/console migration:reset + docker compose -f .docker/docker-compose.yml exec node npm install + docker compose -f .docker/docker-compose.yml exec node npm run build # run containers scripts up: From bcb401ac9363b2d3f7c3c38d843b2dd40bba804f Mon Sep 17 00:00:00 2001 From: Chrynn Date: Sun, 17 Dec 2023 12:16:40 +0100 Subject: [PATCH 14/15] event paginator ajax fixed --- app/Module/User/Event/EventPresenter.php | 15 ++ .../User/Event/templates/other/event.latte | 180 +++++++++--------- 2 files changed, 105 insertions(+), 90 deletions(-) diff --git a/app/Module/User/Event/EventPresenter.php b/app/Module/User/Event/EventPresenter.php index 91ecc2c..ccd5deb 100644 --- a/app/Module/User/Event/EventPresenter.php +++ b/app/Module/User/Event/EventPresenter.php @@ -12,6 +12,8 @@ class EventPresenter extends UserPresenter { + private Paginator $paginator; + public function __construct( protected EventRepository $eventRepository, protected AuthorizationService $authorizationService, @@ -32,10 +34,23 @@ public function actionDefault(int $page = 1): void $paginator->setItemCount($eventAllCount); $paginator->setItemsPerPage(6); $paginator->setPage($page); + $this->paginator = $paginator; $this->template->events = $this->eventRepository->findAllForPaginator($paginator->getLength(), $paginator->getOffset()); $this->template->paginator = $paginator; $this->redrawControl("event"); } + + public function handleChangePage(int $page = 1): void + { + if ($this->isAjax() === true) { + $this->paginator->setPage($page); + + $this->template->paginator = $this->paginator; + $this->template->events = $this->eventRepository->findAllForPaginator($this->paginator->getLength(), $this->paginator->getOffset()); + + $this->redrawControl("event"); + } + } } diff --git a/app/Module/User/Event/templates/other/event.latte b/app/Module/User/Event/templates/other/event.latte index b0e444b..a2e54e6 100644 --- a/app/Module/User/Event/templates/other/event.latte +++ b/app/Module/User/Event/templates/other/event.latte @@ -1,5 +1,7 @@ {varType Nette\Utils\Paginator $paginator} -{varType array $events} +{varType object $iterator} +{varType array[App\Module\User\Event] $events} +{varType string $basePath} {block event}
@@ -17,110 +19,108 @@
{snippet event} -
- +
+ {var $iamOnFirstPage = $paginator->isFirst()} {var $iamOnLastPage = $paginator->isLast()} {var $currentPage = $paginator->getPage()} {var $pageCount = $paginator->getPageCount()} - - - - - -
    - {var $iamOnFirstOrSecondPage = in_array($currentPage, [1, 2])} + + + + + +
      + {var $iamOnFirstOrSecondPage = in_array($currentPage, [1, 2])} {var $iamOnMoreThanThirdPage = $currentPage > 3} {var $areMoreThanTwoPagesBeforeMe = ($pageCount - $currentPage) > 2} {var $iamNotOnLastOrOneBeforeLastPage = !$iamOnLastPage && ($currentPage !== ($pageCount - 1))} - {if !$iamOnFirstOrSecondPage} -
    • - - 1 - -
    • - {/if} + {if !$iamOnFirstOrSecondPage} +
    • + + 1 + +
    • + {/if} - {if $iamOnMoreThanThirdPage} -
    • - ... -
    • - {/if} + {if $iamOnMoreThanThirdPage} +
    • + ... +
    • + {/if} - {if !$iamOnFirstPage} -
    • - - {$currentPage - 1} - -
    • - {/if} + {if !$iamOnFirstPage} +
    • + + {$currentPage - 1} + +
    • + {/if} -
    • - {$currentPage} -
    • +
    • + {$currentPage} +
    • - {if !$iamOnLastPage} -
    • - - {$currentPage + 1} - -
    • - {/if} + {if !$iamOnLastPage} +
    • + + {$currentPage + 1} + +
    • + {/if} - {if $areMoreThanTwoPagesBeforeMe} -
    • - ... -
    • - {/if} + {if $areMoreThanTwoPagesBeforeMe} +
    • + ... +
    • + {/if} - {if $iamNotOnLastOrOneBeforeLastPage} -
    • - - {$pageCount} - -
    • - {/if} -
    - - - - - -
+ {if $iamNotOnLastOrOneBeforeLastPage} +
  • + + {$pageCount} + +
  • + {/if} + + + + + +
    {/snippet} From 9acf90373904edfcccfa47daa220f20602f8786c Mon Sep 17 00:00:00 2001 From: Chrynn Date: Sun, 17 Dec 2023 12:21:36 +0100 Subject: [PATCH 15/15] isAjax condition changed --- app/Module/User/Event/EventPresenter.php | 2 +- app/Module/components/Login/LoginControl.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Module/User/Event/EventPresenter.php b/app/Module/User/Event/EventPresenter.php index ccd5deb..76afd02 100644 --- a/app/Module/User/Event/EventPresenter.php +++ b/app/Module/User/Event/EventPresenter.php @@ -44,7 +44,7 @@ public function actionDefault(int $page = 1): void public function handleChangePage(int $page = 1): void { - if ($this->isAjax() === true) { + if ($this->isAjax()) { $this->paginator->setPage($page); $this->template->paginator = $this->paginator; diff --git a/app/Module/components/Login/LoginControl.php b/app/Module/components/Login/LoginControl.php index 4bea2ee..45bfc56 100644 --- a/app/Module/components/Login/LoginControl.php +++ b/app/Module/components/Login/LoginControl.php @@ -28,7 +28,7 @@ protected function createComponentForm(): Form public function actionLogin(Form $form): void { - if ($this->presenter->isAjax() === true) { + if ($this->presenter->isAjax()) { try { $values = $form->getValues(); $this->authorizationService->login($values->email, $values->password);