Skip to content

Commit b3e5552

Browse files
authored
Merge pull request #1198 from stefanorosanelli/fix/remove-failedsave-session
Remove unnecessary failed save form data session handling
2 parents 9a0eb8b + 62e2b3c commit b3e5552

File tree

3 files changed

+0
-124
lines changed

3 files changed

+0
-124
lines changed

src/Controller/Component/ModulesComponent.php

-58
Original file line numberDiff line numberDiff line change
@@ -431,25 +431,6 @@ public function checkRequestForUpload(array $requestData): bool
431431
return true;
432432
}
433433

434-
/**
435-
* Set session data for `failedSave.{type}.{id}` and `failedSave.{type}.{id}__timestamp`.
436-
*
437-
* @param string $type The object type.
438-
* @param array $data The data to store into session.
439-
* @return void
440-
*/
441-
public function setDataFromFailedSave(string $type, array $data): void
442-
{
443-
if (empty($data) || empty($data['id']) || empty($type)) {
444-
return;
445-
}
446-
$key = sprintf('failedSave.%s.%s', $type, $data['id']);
447-
$session = $this->getController()->getRequest()->getSession();
448-
unset($data['id']); // remove 'id', avoid future merged with attributes
449-
$session->write($key, $data);
450-
$session->write(sprintf('%s__timestamp', $key), time());
451-
}
452-
453434
/**
454435
* Set current attributes from loaded $object data in `currentAttributes`.
455436
* Load session failure data if available.
@@ -461,45 +442,6 @@ public function setupAttributes(array &$object): void
461442
{
462443
$currentAttributes = json_encode((array)Hash::get($object, 'attributes'));
463444
$this->getController()->set(compact('currentAttributes'));
464-
465-
$this->updateFromFailedSave($object);
466-
}
467-
468-
/**
469-
* Update object, when failed save occurred.
470-
* Check session data by `failedSave.{type}.{id}` key and `failedSave.{type}.{id}__timestamp`.
471-
* If data is set and timestamp is not older than 5 minutes.
472-
*
473-
* @param array $object The object.
474-
* @return void
475-
*/
476-
protected function updateFromFailedSave(array &$object): void
477-
{
478-
// check session data for object id => use `failedSave.{type}.{id}` as key
479-
$session = $this->getController()->getRequest()->getSession();
480-
$key = sprintf(
481-
'failedSave.%s.%s',
482-
Hash::get($object, 'type'),
483-
Hash::get($object, 'id')
484-
);
485-
$data = $session->read($key);
486-
if (empty($data)) {
487-
return;
488-
}
489-
490-
// read timestamp session key
491-
$timestampKey = sprintf('%s__timestamp', $key);
492-
$timestamp = $session->read($timestampKey);
493-
494-
// if data exist for {type} and {id} and `__timestamp` not too old (<= 5 minutes)
495-
if ($timestamp > strtotime('-5 minutes')) {
496-
// => merge with $object['attributes']
497-
$object['attributes'] = array_merge($object['attributes'], (array)$data);
498-
}
499-
500-
// remove session data
501-
$session->delete($key);
502-
$session->delete($timestampKey);
503445
}
504446

505447
/**

src/Controller/ModulesController.php

-7
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,6 @@ public function save(): void
291291
$this->set(['error' => __('Invalid numeric uname. Change it to a valid string')]);
292292
$this->setSerialize(['error']);
293293

294-
// set session data to recover form
295-
$this->Modules->setDataFromFailedSave($this->objectType, $requestData);
296-
297294
return;
298295
}
299296
$id = Hash::get($requestData, 'id');
@@ -328,17 +325,13 @@ public function save(): void
328325
];
329326
$event = new Event('Controller.afterSave', $this, $options);
330327
$this->getEventManager()->dispatch($event);
331-
$this->getRequest()->getSession()->delete(sprintf('failedSave.%s.%s', $this->objectType, $id));
332328
} catch (BEditaClientException $error) {
333329
$message = new Message($error);
334330
$this->log($message->get(), LogLevel::ERROR);
335331
$this->Flash->error($message->get(), ['params' => $error]);
336332
$this->set(['error' => $message->get()]);
337333
$this->setSerialize(['error']);
338334

339-
// set session data to recover form
340-
$this->Modules->setDataFromFailedSave($this->objectType, $requestData);
341-
342335
return;
343336
}
344337
if ($response['data']) {

tests/TestCase/Controller/Component/ModulesComponentTest.php

-59
Original file line numberDiff line numberDiff line change
@@ -1073,65 +1073,6 @@ private function setupApi(): void
10731073
$this->client->setupTokens($response['meta']);
10741074
}
10751075

1076-
/**
1077-
* Test `setDataFromFailedSave`.
1078-
*
1079-
* @covers ::setDataFromFailedSave()
1080-
* @return void
1081-
*/
1082-
public function testSetDataFromFailedSave(): void
1083-
{
1084-
// empty case
1085-
$this->Modules->setDataFromFailedSave('', ['id' => 123]);
1086-
$actual = $this->Modules->getController()->getRequest()->getSession()->read('failedSave.123');
1087-
static::assertEmpty($actual);
1088-
1089-
// data and expected
1090-
$expected = [ 'id' => 999, 'name' => 'gustavo' ];
1091-
$type = 'documents';
1092-
1093-
$this->Modules->setDataFromFailedSave($type, $expected);
1094-
1095-
// verify data
1096-
$key = sprintf('failedSave.%s.%s', $type, $expected['id']);
1097-
$actual = $this->Modules->getController()->getRequest()->getSession()->read($key);
1098-
unset($expected['id']);
1099-
static::assertEquals($expected, $actual);
1100-
}
1101-
1102-
/**
1103-
* Test `updateFromFailedSave` method.
1104-
*
1105-
* @return void
1106-
* @covers ::setupAttributes()
1107-
* @covers ::updateFromFailedSave()
1108-
*/
1109-
public function testUpdateFromFailedSave(): void
1110-
{
1111-
// empty case
1112-
$this->Modules->setDataFromFailedSave('', ['id' => 123]); // wrong data, missing type
1113-
$object = ['id' => 123, 'type' => 'documents'];
1114-
$this->Modules->setupAttributes($object);
1115-
static::assertArrayNotHasKey('attributes', $object);
1116-
1117-
// write to session data, to simulate recover from session.
1118-
$object = [
1119-
'id' => 999,
1120-
'type' => 'documents',
1121-
'attributes' => [
1122-
'name' => 'john doe',
1123-
],
1124-
];
1125-
$recover = [ 'name' => 'gustavo' ];
1126-
$this->Modules->setDataFromFailedSave('documents', $recover + ['id' => 999]);
1127-
1128-
// verify data
1129-
$this->Modules->setupAttributes($object);
1130-
$expected = $object;
1131-
$expected['attributes'] = array_merge($object['attributes'], $recover);
1132-
static::assertEquals($expected, $object);
1133-
}
1134-
11351076
/**
11361077
* Data provider for `testSetupRelationsMeta`
11371078
*

0 commit comments

Comments
 (0)