diff --git a/src/Notion/ObjectBase.php b/src/Notion/ObjectBase.php index 6d6104a..7c81e50 100644 --- a/src/Notion/ObjectBase.php +++ b/src/Notion/ObjectBase.php @@ -41,7 +41,7 @@ public function __construct($data, $notion) { $this->notion = $notion; - if (! $data) { + if (!$data) { return; } @@ -55,8 +55,8 @@ protected function handleResponse($data) protected function setProperties($data): void { - $this->id = $data->id; - $this->created_time = $data->created_time; + $this->id = $data->id; + $this->created_time = $data->created_time; $this->last_edited_time = $data->last_edited_time; if (isset($data->archived)) { @@ -65,7 +65,8 @@ protected function setProperties($data): void if (property_exists($data, 'properties')) { foreach ($data->properties as $label => $property) { - $this->properties[Str::camel($label)] = $this->createNewProperty($label, $property); + $this->properties[sha1($label)] = $this->createNewProperty($label, $property); + $this->propertiesCamelCaseAliases[Str::camel($label)] = sha1($label); } } diff --git a/src/Notion/Objects/Page.php b/src/Notion/Objects/Page.php index 028b1eb..f6d1870 100644 --- a/src/Notion/Objects/Page.php +++ b/src/Notion/Objects/Page.php @@ -1,5 +1,6 @@ properties = $data; + // generate aliases for camelCase properties + foreach ($data as $sha1key => $property) { + $this->propertiesCamelCaseAliases[Str::camel($property->name)] = sha1($property->name); + } + return $this; } public function __get($property) { - if (!isset($this->properties[$property])) { - return $this->$property; + // search propery by sha1 key + if (isset($this->properties[sha1($property)])) { + return $this->properties[sha1($property)]->value(); + } + + // fallback for camelCase alias + if(isset($this->propertiesCamelCaseAliases[$property]) && isset($this->properties[$this->propertiesCamelCaseAliases[$property]])) { + return $this->properties[$this->propertiesCamelCaseAliases[$property]]->value(); } - return $this->properties[$property] - ->value(); + // other cases- return class propery + return $this->$property; } public function __set($property, $value) { - if (!isset($this->properties[$property])) { - $this->$property = $value; + // if we have this property in our sha1-keyed array + if (isset($this->properties[sha1($property)])) { + $this->properties[sha1($property)]->set($value); + return; + } + + // else check if it is camelCase alias + if(isset($this->propertiesCamelCaseAliases[$property]) && isset($this->properties[$this->propertiesCamelCaseAliases[$property]])) { + $this->properties[$this->propertiesCamelCaseAliases[$property]]->set($value); return; } - $this->properties[$property]->set($value); + // set class property in other cases + $this->$property = $value; } public function __isset($property) { - return isset($this->properties[$property]); + return isset($this->properties[sha1($property)]) || (isset($this->propertiesCamelCaseAliases[$property]) && isset($this->properties[$this->propertiesCamelCaseAliases[$property]])); } public function save()