Merge pull request #382 from JoeForks/fix/enhance-settings

Enhance settings performance queries
This commit is contained in:
Joe Cohen
2015-01-16 12:39:26 -06:00
12 changed files with 133 additions and 40 deletions

View File

@@ -147,6 +147,7 @@ return [
'CachetHQ\Cachet\Providers\RoutingServiceProvider',
'CachetHQ\Cachet\Providers\ViewComposerServiceProvider',
'CachetHQ\Cachet\Providers\LoadConfigServiceProvider',
'CachetHQ\Cachet\Providers\SettingsServiceProvider',
],
@@ -185,7 +186,7 @@ return [
'Response' => 'Illuminate\Support\Facades\Response',
'Route' => 'Illuminate\Support\Facades\Route',
'Session' => 'Illuminate\Support\Facades\Session',
'Setting' => 'CachetHQ\Cachet\Models\Setting',
'Setting' => 'CachetHQ\Cachet\Facades\Setting',
'Str' => 'Illuminate\Support\Str',
],

View File

@@ -1,5 +1,5 @@
<?php
return array(
return [
/*
|--------------------------------------------------------------------------
@@ -26,7 +26,7 @@ return array(
|
*/
'proxies' => array(
'proxies' => [
'204.93.240.0',
'204.93.177.0',
'199.27.128.0',
@@ -46,6 +46,6 @@ return array(
'2803:f800::',
'2405:b500::',
'2405:8100::',
)
],
);
];

View File

@@ -21,7 +21,7 @@ class UsersTableSeeder extends Seeder
"password" => "test123",
"email" => "test@test.com",
"level" => 1,
]
],
];
User::truncate();

68
src/Config/Repository.php Normal file
View File

@@ -0,0 +1,68 @@
<?php
namespace CachetHQ\Cachet\Config;
use Illuminate\Database\Eloquent\Model;
class Repository
{
/**
* The eloquent model instance.
*
* @var \CachetHQ\Cachet\Models\Setting
*/
protected $model;
/**
* Cache of the settings.
*
* @var null|array
*/
protected $settings = null;
/**
* Create a new settings service instance.
*
* @param \CachetHQ\Cachet\Models\Setting $model
*
* @return void
*/
public function __construct(Model $model)
{
$this->model = $model;
}
/**
* Returns a setting from the database.
*
* @param string $settingName
* @param bool $checkEnv
*
* @return string|null
*/
public function get($settingName, $checkEnv = true)
{
$setting = null;
try {
if (! $this->settings) {
$this->settings = $this->model->all()->lists('value', 'name');
}
if (array_key_exists($settingName, $this->settings)) {
return $this->settings[$settingName];
}
} catch (ErrorException $e) {
if ($checkEnv) {
$env = getenv(strtoupper($settingName));
if (!$env) {
return $env;
}
}
return $setting;
}
return $setting;
}
}

21
src/Facades/Setting.php Normal file
View File

@@ -0,0 +1,21 @@
<?php
namespace CachetHQ\Cachet\Facades;
use Illuminate\Support\Facades\Facade;
/**
* @see \CachetHQ\Cachet\Services\SettingsService
*/
class Setting extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'setting';
}
}

View File

@@ -2,8 +2,8 @@
namespace CachetHQ\Cachet\Http\Controllers;
use CachetHQ\Cachet\Facades\Setting;
use CachetHQ\Cachet\Models\Incident;
use CachetHQ\Cachet\Models\Setting;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Response;
use Roumen\Feed\Facades\Feed;

View File

@@ -2,9 +2,9 @@
namespace CachetHQ\Cachet\Http\Controllers;
use CachetHQ\Cachet\Facades\Setting;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\Incident;
use CachetHQ\Cachet\Models\Setting;
use Exception;
use GrahamCampbell\Binput\Facades\Binput;
use GrahamCampbell\Markdown\Facades\Markdown;

View File

@@ -2,8 +2,8 @@
namespace CachetHQ\Cachet\Http\Controllers;
use CachetHQ\Cachet\Facades\Setting;
use CachetHQ\Cachet\Models\Incident;
use CachetHQ\Cachet\Models\Setting;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Response;
use Thujohn\Rss\RssFacade;

View File

@@ -2,7 +2,7 @@
namespace CachetHQ\Cachet\Http\Controllers;
use CachetHQ\Cachet\Models\Setting;
use CachetHQ\Cachet\Facades\Setting;
use CachetHQ\Cachet\Models\User;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Routing\Controller;

View File

@@ -2,7 +2,6 @@
namespace CachetHQ\Cachet\Models;
use ErrorException;
use Illuminate\Database\Eloquent\Model;
/**
@@ -27,32 +26,4 @@ class Setting extends Model
* @var string[]
*/
protected $attributes = ['value' => ''];
/**
* Returns a setting from the database.
*
* @param string $settingName
* @param bool $checkEnv
*
* @return string|null
*/
public static function get($settingName, $checkEnv = true)
{
$setting = null;
try {
$setting = self::whereName($settingName)->first()->value;
} catch (ErrorException $e) {
if ($checkEnv) {
$env = getenv(strtoupper($settingName));
if (!$env) {
return $env;
}
}
return $setting;
}
return $setting;
}
}

View File

@@ -2,7 +2,7 @@
namespace CachetHQ\Cachet\Providers;
use CachetHQ\Cachet\Models\Setting;
use CachetHQ\Cachet\Facades\Setting;
use Illuminate\Database\QueryException;
use Illuminate\Support\ServiceProvider;

View File

@@ -0,0 +1,32 @@
<?php
namespace CachetHQ\Cachet\Providers;
use CachetHQ\Cachet\Config\Repository;
use CachetHQ\Cachet\Models\Setting as SettingModel;
use Illuminate\Support\ServiceProvider;
class SettingsServiceProvider extends ServiceProvider
{
/**
* Boot the service provider.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->bindShared('setting', function ($app) {
return new Repository(new SettingModel());
});
}
}