]> BookStack Code Mirror - bookstack/commitdiff
Prevented settings being overfetched from db/cache
authorDan Brown <redacted>
Sun, 5 Feb 2017 18:57:57 +0000 (18:57 +0000)
committerDan Brown <redacted>
Sun, 5 Feb 2017 18:57:57 +0000 (18:57 +0000)
app/Providers/AppServiceProvider.php
app/Services/SettingService.php
app/helpers.php

index 118271f51bfced69723353d61c31289c6ae91a4e..49cc15dd6130920b3a5d5a6c028ae6d3bbfd1bd9 100644 (file)
@@ -1,5 +1,7 @@
 <?php namespace BookStack\Providers;
 
+use BookStack\Services\SettingService;
+use BookStack\Setting;
 use Illuminate\Support\ServiceProvider;
 use Validator;
 
@@ -30,6 +32,8 @@ class AppServiceProvider extends ServiceProvider
      */
     public function register()
     {
-        //
+        $this->app->singleton(SettingService::class, function($app) {
+            return new SettingService($app->make(Setting::class), $app->make('Illuminate\Contracts\Cache\Repository'));
+        });
     }
 }
index 40094a513ed33deefb705b578b5903f2ae9174a8..18a7c0d1b75846543aee5b535c45cd1ea4134ac7 100644 (file)
@@ -16,6 +16,7 @@ class SettingService
 
     protected $setting;
     protected $cache;
+    protected $localCache = [];
 
     protected $cachePrefix = 'setting-';
 
@@ -40,8 +41,12 @@ class SettingService
     public function get($key, $default = false)
     {
         if ($default === false) $default = config('setting-defaults.' . $key, false);
+        if (isset($this->localCache[$key])) return $this->localCache[$key];
+
         $value = $this->getValueFromStore($key, $default);
-        return $this->formatValue($value, $default);
+        $formatted = $this->formatValue($value, $default);
+        $this->localCache[$key] = $formatted;
+        return $formatted;
     }
 
     /**
@@ -71,9 +76,8 @@ class SettingService
 
         // Check the cache
         $cacheKey = $this->cachePrefix . $key;
-        if ($this->cache->has($cacheKey)) {
-            return $this->cache->get($cacheKey);
-        }
+        $cacheVal = $this->cache->get($cacheKey, null);
+        if ($cacheVal !== null) return $cacheVal;
 
         // Check the database
         $settingObject = $this->getSettingObjectByKey($key);
index 8103ad1ff9e72033e49abbeff643a27db67e610b..f69f2c174c3ec08ee1ad4107518a5e3f6007cd63 100644 (file)
@@ -64,7 +64,7 @@ function userCan($permission, Ownable $ownable = null)
  */
 function setting($key = null, $default = false)
 {
-    $settingService = app(\BookStack\Services\SettingService::class);
+    $settingService = resolve(\BookStack\Services\SettingService::class);
     if (is_null($key)) return $settingService;
     return $settingService->get($key, $default);
 }