diff --git a/app/Providers/CustomFacadeProvider.php b/app/Providers/CustomFacadeProvider.php index 6e6318824..f5dd37424 100644 --- a/app/Providers/CustomFacadeProvider.php +++ b/app/Providers/CustomFacadeProvider.php @@ -30,7 +30,10 @@ class CustomFacadeProvider extends ServiceProvider }); $this->app->bind('setting', function() { - return new SettingService($this->app->make('Oxbow\Setting')); + return new SettingService( + $this->app->make('Oxbow\Setting'), + $this->app->make('Illuminate\Contracts\Cache\Repository') + ); }); } } diff --git a/app/Services/SettingService.php b/app/Services/SettingService.php index b7215f524..cab29f454 100644 --- a/app/Services/SettingService.php +++ b/app/Services/SettingService.php @@ -1,6 +1,7 @@ setting = $setting; + $this->cache = $cache; } /** @@ -32,17 +38,54 @@ class SettingService */ public function get($key, $default = false) { - $setting = $this->getSettingObjectByKey($key); - $value = $setting === null ? null : $setting->value; + $value = $this->getValueFromStore($key, $default); + return $this->formatValue($value, $default); + } + /** + * Gets a setting value from the cache or database. + * @param $key + * @param $default + * @return mixed + */ + protected function getValueFromStore($key, $default) + { + $cacheKey = $this->cachePrefix . $key; + if ($this->cache->has($cacheKey)) { + return $this->cache->get($cacheKey); + } + + $settingObject = $this->getSettingObjectByKey($key); + if($settingObject !== null) { + $value = $settingObject->value; + $this->cache->forever($cacheKey, $value); + return $value; + } + + return $default; + } + + protected function clearFromCache($key) + { + $cacheKey = $this->cachePrefix . $key; + $this->cache->forget($cacheKey); + } + + /** + * Format a settings value + * @param $value + * @param $default + * @return mixed + */ + protected function formatValue($value, $default) + { // Change string booleans to actual booleans - if($value === 'true') $value = true; - if($value === 'false') $value = false; + if ($value === 'true') $value = true; + if ($value === 'false') $value = false; // Set to default if empty - if($value === '') $value = $default; - - return $value === null ? $default : $value; + if ($value === '') $value = $default; + return $value; } /** @@ -69,6 +112,7 @@ class SettingService ]); $setting->value = $value; $setting->save(); + $this->clearFromCache($key); return true; } @@ -83,6 +127,7 @@ class SettingService if ($setting) { $setting->delete(); } + $this->clearFromCache($key); return true; }