From f83464637c975d3b6d6e6e5cbcc9a21ab77561f3 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 12 Dec 2023 13:10:20 +0700 Subject: [PATCH 1/6] refactor: Add site environment --- _common/KeymanSiteEnvironment.php | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 _common/KeymanSiteEnvironment.php diff --git a/_common/KeymanSiteEnvironment.php b/_common/KeymanSiteEnvironment.php new file mode 100644 index 0000000..53f1049 --- /dev/null +++ b/_common/KeymanSiteEnvironment.php @@ -0,0 +1,46 @@ + $value) { + if (isset($env[$name])) { + self::$instance->$name = $env[$name]; + } + } + } + + public static function Debug($class) { + $props = get_class_vars($class); + var_dump($props); + } + } + +// HelpSiteEnvironment::Debug('Keyman\Site\Common\HelpSiteEnvironment'); +// echo HelpSiteEnvironment::$api_keyman_com_github_repo; + +HelpSiteEnvironment::Init(); \ No newline at end of file From e0a491042e4c6772adc116d4dd24752c400fa84e Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 13 Dec 2023 05:42:12 +0700 Subject: [PATCH 2/6] Add KeymanSiteEnvironment to _bootstrap_configure_common --- _common/KeymanSiteEnvironment.php | 13 +------------ bootstrap.inc.sh | 1 + 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/_common/KeymanSiteEnvironment.php b/_common/KeymanSiteEnvironment.php index 53f1049..520b9e5 100644 --- a/_common/KeymanSiteEnvironment.php +++ b/_common/KeymanSiteEnvironment.php @@ -3,17 +3,6 @@ namespace Keyman\Site\Common; - class HelpSiteEnvironment extends KeymanSiteEnvironment { - public static - // help.keyman.com - $KEYMANHOSTS_TIER = '', - $KEYMAN_COM_PROXY_PORT = ''; - - public static function Init() { - KeymanSiteEnvironment::_Init(get_class()); - } - } - class KeymanSiteEnvironment { public static @@ -43,4 +32,4 @@ public static function Debug($class) { // HelpSiteEnvironment::Debug('Keyman\Site\Common\HelpSiteEnvironment'); // echo HelpSiteEnvironment::$api_keyman_com_github_repo; -HelpSiteEnvironment::Init(); \ No newline at end of file +//HelpSiteEnvironment::Init(); \ No newline at end of file diff --git a/bootstrap.inc.sh b/bootstrap.inc.sh index 5bfaf14..7af8a02 100644 --- a/bootstrap.inc.sh +++ b/bootstrap.inc.sh @@ -100,6 +100,7 @@ function _bootstrap_configure_common() { JsonApiFailure.php KeymanHosts.php KeymanSentry.php + KeymanSiteEnvironment.php MarkdownHost.php ) local common_file= From 3f1fccef29947da6f624d8b7a548ec9ae95c5aa7 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 13 Dec 2023 06:34:46 +0700 Subject: [PATCH 3/6] chore: Cleanup unused code --- _common/KeymanSiteEnvironment.php | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/_common/KeymanSiteEnvironment.php b/_common/KeymanSiteEnvironment.php index 520b9e5..a8080cd 100644 --- a/_common/KeymanSiteEnvironment.php +++ b/_common/KeymanSiteEnvironment.php @@ -5,14 +5,6 @@ class KeymanSiteEnvironment { - public static - // keyman.com - $API_KEYMAN_COM_INCREMENT_DOWNLOAD_KEY, - - // api.keyman.com - $api_keyman_com_github_user, - $api_keyman_com_github_repo; - protected static function _Init($class) { $env = getenv(); $props = get_class_vars($class); @@ -28,8 +20,3 @@ public static function Debug($class) { var_dump($props); } } - -// HelpSiteEnvironment::Debug('Keyman\Site\Common\HelpSiteEnvironment'); -// echo HelpSiteEnvironment::$api_keyman_com_github_repo; - -//HelpSiteEnvironment::Init(); \ No newline at end of file From 360ffe426375d2d8eb701add8fb4465161437d6b Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 13 Dec 2023 10:45:37 +0700 Subject: [PATCH 4/6] fix: Add IsSet --- _common/KeymanSiteEnvironment.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/_common/KeymanSiteEnvironment.php b/_common/KeymanSiteEnvironment.php index a8080cd..d09c25d 100644 --- a/_common/KeymanSiteEnvironment.php +++ b/_common/KeymanSiteEnvironment.php @@ -19,4 +19,11 @@ public static function Debug($class) { $props = get_class_vars($class); var_dump($props); } + + public static function IsSet($name) { + if (isset(self::$instance->$name) && self::$instance->$name != '') { + return true; + } + return false; + } } From b3bbaa28b68655780680e40d0db4b131a0253e1e Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 13 Dec 2023 13:50:38 +0700 Subject: [PATCH 5/6] fix: Check for null --- _common/KeymanSiteEnvironment.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_common/KeymanSiteEnvironment.php b/_common/KeymanSiteEnvironment.php index d09c25d..7399b04 100644 --- a/_common/KeymanSiteEnvironment.php +++ b/_common/KeymanSiteEnvironment.php @@ -21,7 +21,7 @@ public static function Debug($class) { } public static function IsSet($name) { - if (isset(self::$instance->$name) && self::$instance->$name != '') { + if (isset(self::$instance->$name) && !is_null(self::$instance->$name)) { return true; } return false; From 103900cd32d6e2a609e5654801ebb89d5e16abad Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 14 Dec 2023 14:27:12 +0700 Subject: [PATCH 6/6] fix: Use dynamic properties --- _common/KeymanSiteEnvironment.php | 71 +++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 9 deletions(-) diff --git a/_common/KeymanSiteEnvironment.php b/_common/KeymanSiteEnvironment.php index 7399b04..5b2d9d6 100644 --- a/_common/KeymanSiteEnvironment.php +++ b/_common/KeymanSiteEnvironment.php @@ -3,27 +3,80 @@ namespace Keyman\Site\Common; + // Dynamic properties marked for deprecation: https://wiki.php.net/rfc/deprecate_dynamic_properties + #[AllowDynamicProperties] class KeymanSiteEnvironment { + private array $data = []; - protected static function _Init($class) { + private static $instance; + + public static function Instance($class = null): KeymanSiteEnvironment { + if(!self::$instance) + self::Rebuild($class); + return self::$instance; + } + + public static function Rebuild($class) { + self::$instance = new KeymanSiteEnvironment($class); + } + + protected function __construct($class) { + self::_Init($class); + } + + protected function _Init($class) { $env = getenv(); $props = get_class_vars($class); - foreach($props as $name => $value) { - if (isset($env[$name])) { - self::$instance->$name = $env[$name]; + foreach($props as $key => $value) { + if (isset($env[$key])) { + echo "key $key, env[key] $env[$key]\n"; + self::__set($key, $env[$key]); } } + var_dump($this); + echo "__get: " . self::__get('LOGNAME') . "\n"; } + public function &__get($name) { return $this->data[$name]; } + public function __isset($name) { return isset($this->data[$name]); } + public function __set($name, $value) { $this->data[$name] = $value; } + public function __unset($name) { unset($this->data[$name]); } + public static function Debug($class) { $props = get_class_vars($class); + echo "------- Debug -------\n"; var_dump($props); + echo "---------------------\n"; } + } - public static function IsSet($name) { - if (isset(self::$instance->$name) && !is_null(self::$instance->$name)) { - return true; - } - return false; + class HelpSiteEnvironment extends KeymanSiteEnvironment { + public ?string + // Expected env vars for help.keyman.com + $HOSTNAME = null, // Do not commit this line + $KEYMANHOSTS_TIER = null, + $LOGNAME = null, + $KEYMAN_COM_PROXY_PORT = null; + + const MY_KEYMAN = null; + + public function __construct() { + return new KeymanSiteEnvironment(get_class()); + } + + public static function Init() { + KeymanSiteEnvironment::Instance(get_class()); + + // For troubleshooting + KeymanSiteEnvironment::Instance()->Debug(get_class()); } } + + // Code for testing + HelpSiteEnvironment::Init(); + if (HelpSiteEnvironment::Instance()->__isset('LOGNAME')) { + echo "true\n"; + } else { + echo "false\n"; + } + \ No newline at end of file