mirror of
https://github.com/getgrav/grav.git
synced 2026-07-13 01:43:47 +02:00
Fixed a bug in Flex Object refresh() method
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
1. [](#bugfix)
|
||||
* Fixed `The "Grav/Common/Twig/TwigExtension" extension is not enabled` when using markdown twig tag [#3317](https://github.com/getgrav/grav/issues/3317)
|
||||
* Fixed text field maxlength validation newline issue [#3324](https://github.com/getgrav/grav/issues/3324)
|
||||
* Fixed a bug in Flex Object `refresh()` method
|
||||
|
||||
# v1.7.12
|
||||
## 04/15/2021
|
||||
|
||||
@@ -22,7 +22,6 @@ use Grav\Common\Grav;
|
||||
use Grav\Common\Media\Interfaces\MediaCollectionInterface;
|
||||
use Grav\Common\Media\Interfaces\MediaUploadInterface;
|
||||
use Grav\Common\Page\Media;
|
||||
use Grav\Common\Page\Medium\Medium;
|
||||
use Grav\Common\Page\Medium\MediumFactory;
|
||||
use Grav\Common\User\Access;
|
||||
use Grav\Common\User\Authentication;
|
||||
@@ -78,16 +77,12 @@ class UserObject extends FlexObject implements UserInterface, Countable
|
||||
|
||||
/** @var array|null */
|
||||
protected $_uploads_original;
|
||||
|
||||
/** @var FileInterface|null */
|
||||
protected $_storage;
|
||||
|
||||
/** @var UserGroupIndex */
|
||||
protected $_groups;
|
||||
|
||||
/** @var Access */
|
||||
protected $_access;
|
||||
|
||||
/** @var array|null */
|
||||
protected $access;
|
||||
|
||||
|
||||
@@ -196,9 +196,10 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface
|
||||
/**
|
||||
* Refresh object from the storage.
|
||||
*
|
||||
* @param bool $keepMissing
|
||||
* @return bool True if the object was refreshed
|
||||
*/
|
||||
public function refresh(): bool
|
||||
public function refresh(bool $keepMissing = false): bool
|
||||
{
|
||||
$key = $this->getStorageKey();
|
||||
if ('' === $key) {
|
||||
@@ -216,20 +217,36 @@ class FlexObject implements FlexObjectInterface, FlexAuthorizeInterface
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get current elements (if requested).
|
||||
$current = $keepMissing ? $this->getElements() : [];
|
||||
// Get elements from the filesystem.
|
||||
$elements = $storage->readRows([$key => null])[$key] ?? null;
|
||||
if (null !== $elements || isset($elements['__ERROR'])) {
|
||||
$meta = $elements['_META'] ?? $meta;
|
||||
if (null !== $elements) {
|
||||
$meta = $elements['__META'] ?? $meta;
|
||||
unset($elements['__META']);
|
||||
$this->filterElements($elements);
|
||||
$newKey = $meta['key'] ?? $this->getKey();
|
||||
if ($meta) {
|
||||
$this->setMetaData($meta);
|
||||
}
|
||||
$this->objectConstruct($elements, $newKey);
|
||||
}
|
||||
|
||||
/** @var Debugger $debugger */
|
||||
$debugger = Grav::instance()['debugger'];
|
||||
$debugger->addMessage("Refreshed {$this->getFlexType()} object {$this->getKey()}", 'debug');
|
||||
if ($current) {
|
||||
// Inject back elements which are missing in the filesystem.
|
||||
$data = $this->getBlueprint()->flattenData($current);
|
||||
foreach ($data as $property => $value) {
|
||||
if (strpos($property, '.') === false) {
|
||||
$this->defProperty($property, $value);
|
||||
} else {
|
||||
$this->defNestedProperty($property, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** @var Debugger $debugger */
|
||||
$debugger = Grav::instance()['debugger'];
|
||||
$debugger->addMessage("Refreshed {$this->getFlexType()} object {$this->getKey()}", 'debug');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user