From b398d04d96c7ac193d1b3ba2f2b60329c898ba4b Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Thu, 20 Jun 2019 00:45:59 +0300 Subject: [PATCH 1/2] Fixed a bug in `Route::withParam()` method --- CHANGELOG.md | 1 + system/src/Grav/Framework/Route/Route.php | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15a9415ac..f27512001 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ 1. [](#bugfix) * Fixed error in `ImageMedium::url()` if the image cache folder does not exist * Fixed empty form flash name after update + * Fixed a bug in `Route::withParam()` method # v1.6.10 ## 06/14/2019 diff --git a/system/src/Grav/Framework/Route/Route.php b/system/src/Grav/Framework/Route/Route.php index a75234077..49ff78920 100644 --- a/system/src/Grav/Framework/Route/Route.php +++ b/system/src/Grav/Framework/Route/Route.php @@ -313,9 +313,9 @@ class Route */ protected function withParam($type, $param, $value) { - $oldValue = $this->{$type}[$param] ?? null; + $typeValue = $this->{$type}[$param] ?? null; - if ($oldValue === $value) { + if ($typeValue === $value) { return $this; } @@ -323,7 +323,8 @@ class Route if ($value === null) { unset($new->{$type}[$param]); } else { - $new->{$type}[$param] = $value; + $typeValue[$param] = $value; + $new->{$type} = $typeValue; } return $new; From f695aaaea4c90c5ebada548af1fe4e7d8eff5b4a Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Thu, 20 Jun 2019 00:51:20 +0300 Subject: [PATCH 2/2] Added `FormTrait::getAllFlashes()` method to get all the available form flash objects for the form --- CHANGELOG.md | 2 + .../Grav/Framework/Form/Traits/FormTrait.php | 73 ++++++++++++++----- 2 files changed, 55 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f27512001..8218fdf51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # v1.6.11 ## mm/dd/2019 +1. [](#new) + * Added `FormTrait::getAllFlashes()` method to get all the available form flash objects for the form 1. [](#bugfix) * Fixed error in `ImageMedium::url()` if the image cache folder does not exist * Fixed empty form flash name after update diff --git a/system/src/Grav/Framework/Form/Traits/FormTrait.php b/system/src/Grav/Framework/Form/Traits/FormTrait.php index 97348cd9d..29a4cf7fb 100644 --- a/system/src/Grav/Framework/Form/Traits/FormTrait.php +++ b/system/src/Grav/Framework/Form/Traits/FormTrait.php @@ -336,35 +336,42 @@ trait FormTrait public function getFlash(): FormFlash { if (null === $this->flash) { - /** @var Grav $grav */ $grav = Grav::instance(); - $id = null; - - $user = $grav['user'] ?? null; - if (isset($user)) { - $rememberState = $this->getBlueprint()->get('form/remember_state'); - if ($rememberState === 'user') { - $id = $user->username; - } - } - - // Session Required for flash form - $session = $grav['session'] ?? null; - if (isset($session)) { - // By default store flash by the session id. - if (null === $id) { - $id = $session->getId(); - } - + $id = $this->getFlashId(); + if ($id) { $this->flash = new FormFlash($id, $this->getUniqueId(), $this->getName()); - $this->flash->setUrl($grav['uri']->url)->setUser($user); + $this->flash->setUrl($grav['uri']->url)->setUser($grav['user'] ?? null); } } return $this->flash; } + /** + * Get all available form flash objects for this form. + * + * @return FormFlash[] + */ + public function getAllFlashes(): array + { + $folder = FormFlash::getSessionTmpDir($this->getFlashId()); + $name = $this->getName(); + $id = $this->getFlashId(); + + $list = []; + /** @var \SplFileInfo $file */ + foreach (new \FilesystemIterator($folder) as $file) { + $flash = new FormFlash($id, $file->getFilename(), $name); + if ($flash->exists() && $flash->getFormName() === $name) { + $list[] = $flash; + } + } + + return $list; + + } + /** * {@inheritdoc} * @see FormInterface::render() @@ -389,6 +396,32 @@ trait FormTrait return $block; } + protected function getFlashId(): ?string + { + /** @var Grav $grav */ + $grav = Grav::instance(); + $id = null; + + $user = $grav['user'] ?? null; + if (isset($user)) { + $rememberState = $this->getBlueprint()->get('form/remember_state'); + if ($rememberState === 'user') { + $id = $user->username; + } + } + + // Session Required for flash form + $session = $grav['session'] ?? null; + if (isset($session)) { + // By default store flash by the session id. + if (null === $id) { + $id = $session->getId(); + } + } + + return $id; + } + protected function unsetFlash(): void { $this->flash = null;