From 75b34967a1fb82eb8eec3b6c8119e56e0447b291 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Wed, 9 Nov 2022 19:10:16 -0100 Subject: [PATCH] fix getChecksum() Signed-off-by: Maxence Lange --- lib/Model/Probes/CircleProbe.php | 71 +++++++++++++++++++++++++++++++ lib/Tools/Traits/TDeserialize.php | 35 ++++++++++++++- 2 files changed, 105 insertions(+), 1 deletion(-) diff --git a/lib/Model/Probes/CircleProbe.php b/lib/Model/Probes/CircleProbe.php index 084ebfbe7..11006792f 100644 --- a/lib/Model/Probes/CircleProbe.php +++ b/lib/Model/Probes/CircleProbe.php @@ -49,6 +49,8 @@ class CircleProbe extends MemberProbe { /** @var bool */ private $includeNonVisible = false; + /** @var bool */ + private $visitSingleCircles = false; /** @@ -59,6 +61,8 @@ public function __construct() { /** + * Configure whether personal circles are included in the probe + * * @param bool $include * * @return $this @@ -74,6 +78,8 @@ public function includePersonalCircles(bool $include = true): self { } /** + * Configure whether single circles are included in the probe + * * @param bool $include * * @return $this @@ -89,6 +95,8 @@ public function includeSingleCircles(bool $include = true): self { } /** + * Configure whether system circles are included in the probe + * * @param bool $include * * @return $this @@ -104,6 +112,8 @@ public function includeSystemCircles(bool $include = true): self { } /** + * Configure whether hidden circles are included in the probe + * * @param bool $include * * @return $this @@ -119,6 +129,8 @@ public function includeHiddenCircles(bool $include = true): self { } /** + * Configure whether backend circles are included in the probe + * * @param bool $include * * @return $this @@ -134,6 +146,8 @@ public function includeBackendCircles(bool $include = true): self { } /** + * Configure whether non-visible circles are included in the probe + * * @param bool $include * * @return $this @@ -145,6 +159,8 @@ public function includeNonVisibleCircles(bool $include = true): self { } /** + * Return whether non-visible circles are included in the probe + * * @return bool */ public function nonVisibleCirclesIncluded(): bool { @@ -153,6 +169,31 @@ public function nonVisibleCirclesIncluded(): bool { /** + * Configure whether single circles are visited in the probe + * + * @param bool $visit + * + * @return $this + */ + public function visitSingleCircles(bool $visit = true): self { + $this->visitSingleCircles = $visit; + + return $this; + } + + /** + * Return whether single circles are visited in the probe + * + * @return bool + */ + public function visitingSingleCircles(): bool { + return $this->visitSingleCircles; + } + + + /** + * Return the include value + * * @return int */ public function included(): int { @@ -160,6 +201,8 @@ public function included(): int { } /** + * Return whether a config is included in the probe (bitwise comparison) + * * @param int $config * * @return bool @@ -170,6 +213,8 @@ public function isIncluded(int $config): bool { /** + * Configure whether personal circles are filtered in the probe + * * @param bool $filter * * @return $this @@ -185,6 +230,8 @@ public function filterPersonalCircles(bool $filter = true): self { } /** + * Configure whether single circles are filtered in the probe + * * @param bool $filter * * @return $this @@ -200,6 +247,8 @@ public function filterSingleCircles(bool $filter = true): self { } /** + * Configure whether system circles are filtered in the probe + * * @param bool $filter * * @return $this @@ -215,6 +264,8 @@ public function filterSystemCircles(bool $filter = true): self { } /** + * Configure whether hidden circles are filtered in the probe + * * @param bool $filter * * @return $this @@ -230,6 +281,8 @@ public function filterHiddenCircles(bool $filter = true): self { } /** + * Configure whether backend circles are filtered in the probe + * * @param bool $filter * * @return $this @@ -246,6 +299,8 @@ public function filterBackendCircles(bool $filter = true): self { /** + * Add a config to the probe filter + * * @param int $config * @param bool $filter * @@ -263,6 +318,8 @@ public function filterConfig(int $config, bool $filter = true): self { /** + * Return the filtered value + * * @return int */ public function filtered(): int { @@ -270,6 +327,8 @@ public function filtered(): int { } /** + * Return whether a config is filtered in the probe (bitwise comparison) + * * @param int $config * * @return bool @@ -280,6 +339,8 @@ public function isFiltered(int $config): bool { /** + * Return an array with includes as options + * * @return array */ public function getAsOptions(): array { @@ -292,6 +353,7 @@ public function getAsOptions(): array { 'includeSystemCircles' => $this->isIncluded(Circle::CFG_SYSTEM), 'includePersonalCircles' => $this->isIncluded(Circle::CFG_PERSONAL), 'includeNonVisibleCircles' => $this->nonVisibleCirclesIncluded(), + 'visitingSingleCircles' => $this->visitingSingleCircles(), 'filtered' => $this->included(), 'filterHiddenCircles' => $this->isIncluded(Circle::CFG_HIDDEN), 'filterSingleCircles' => $this->isIncluded(Circle::CFG_SINGLE), @@ -305,6 +367,15 @@ public function getAsOptions(): array { /** + * @return string + */ + public function getChecksum(): string { + return md5(json_encode($this->getAsOptions())); + } + + /** + * Return a JSON object with includes as options + * * @return array */ public function JsonSerialize(): array { diff --git a/lib/Tools/Traits/TDeserialize.php b/lib/Tools/Traits/TDeserialize.php index e58899458..733b69570 100644 --- a/lib/Tools/Traits/TDeserialize.php +++ b/lib/Tools/Traits/TDeserialize.php @@ -80,12 +80,45 @@ public function deserialize(array $data, string $class): IDeserializable { /** * @param array $data * @param string $class + * @param bool $associative + * + * @return IDeserializable[] + */ + public function deserializeArray(array $data, string $class, bool $associative = false): array { + $arr = []; + foreach ($data as $key => $entry) { + if (!is_array($entry)) { + continue; + } + + try { + if ($associative) { + $arr[$key] = $this->deserialize($entry, $class); + } else { + $arr[] = $this->deserialize($entry, $class); + } + } catch (InvalidItemException $e) { + } + } + + return $arr; + } + + + /** + * @param string $json + * @param string $class * * @return IDeserializable[] * @throws InvalidItemException */ - public function deserializeArray(array $data, string $class): array { + public function deserializeList(string $json, string $class): array { $arr = []; + $data = json_decode($json, true); + if (!is_array($data)) { + return $arr; + } + foreach ($data as $entry) { $arr[] = $this->deserialize($entry, $class); }