From 310847548eecbc24851b0a597e4f9e6eeb86f1aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Jaussoin?= Date: Mon, 18 Jun 2018 08:49:27 +0200 Subject: [PATCH] Create a singleton for the Configuration to prevent multiple requests from the DB --- app/Configuration.php | 12 ++++++++++++ app/Post.php | 2 +- app/widgets/AdminMain/AdminMain.php | 4 ++-- app/widgets/Api/Api.php | 4 ++-- app/widgets/Chat/Chat.php | 2 +- app/widgets/Infos/Infos.php | 2 +- app/widgets/Login/Login.php | 4 ++-- app/widgets/Subscribe/Subscribe.php | 2 +- src/Movim/Bootstrap.php | 4 ++-- src/Movim/Console/ConfigCommand.php | 2 +- src/Movim/Console/DaemonCommand.php | 2 +- src/Movim/Emoji.php | 2 +- src/Movim/Template/Builder.php | 4 ++-- 13 files changed, 29 insertions(+), 17 deletions(-) diff --git a/app/Configuration.php b/app/Configuration.php index ddd2d66c7..27f88076b 100644 --- a/app/Configuration.php +++ b/app/Configuration.php @@ -8,6 +8,8 @@ class Configuration extends Model { protected $table = 'configuration'; + private static $instance = null; + public $fillable = [ 'description', 'info', @@ -34,6 +36,16 @@ class Configuration extends Model 'xmppwhitelist' => null ]; + public static function get() + { + if (self::$instance != null) { + return self::$instance; + } + + self::$instance = self::find(1); + return self::$instance; + } + public function setPasswordAttribute($value) { $this->attributes['password'] = password_hash($value, PASSWORD_DEFAULT); diff --git a/app/Post.php b/app/Post.php index 2cd658f0c..96dcf2c51 100644 --- a/app/Post.php +++ b/app/Post.php @@ -139,7 +139,7 @@ class Post extends Model public function scopeRestrictUserHost($query) { - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); if ($configuration->restrictsuggestions) { $query->whereIn('id', function($query) { diff --git a/app/widgets/AdminMain/AdminMain.php b/app/widgets/AdminMain/AdminMain.php index 4bee1605d..313b2f1e6 100644 --- a/app/widgets/AdminMain/AdminMain.php +++ b/app/widgets/AdminMain/AdminMain.php @@ -10,7 +10,7 @@ class AdminMain extends \Movim\Widget\Base $form = $_POST; - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); if (isset($form) && !empty($form)) { if (isset($form['password']) @@ -51,7 +51,7 @@ class AdminMain extends \Movim\Widget\Base { $l = Movim\i18n\Locale::start(); - $this->view->assign('conf', Configuration::findOrNew(1)); + $this->view->assign('conf', Configuration::get()); $this->view->assign('logs', [ 0 => $this->__('log.empty'), 1 => $this->__('log.syslog'), diff --git a/app/widgets/Api/Api.php b/app/widgets/Api/Api.php index 1893dac35..d2d5a990e 100644 --- a/app/widgets/Api/Api.php +++ b/app/widgets/Api/Api.php @@ -22,7 +22,7 @@ class Api extends Base function ajaxUnregister() { - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); $configuration->unregister = !$configuration->unregister; $configuration->save(); @@ -42,7 +42,7 @@ class Api extends Base $json = requestURL(MOVIM_API.'pods/status', 2, ['url' => BASE_URI]); $json = json_decode($json); - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); if (isset($json)) { $this->view->assign('json', $json); diff --git a/app/widgets/Chat/Chat.php b/app/widgets/Chat/Chat.php index c5930ca1c..4c94e0f3d 100644 --- a/app/widgets/Chat/Chat.php +++ b/app/widgets/Chat/Chat.php @@ -773,7 +773,7 @@ class Chat extends \Movim\Widget\Base ->where('mucpublic', true) ->where('mucpersistent', true); - $conferences = (Configuration::findOrNew(1)->restrictsuggestions) + $conferences = (Configuration::get()->restrictsuggestions) ? $conferences->where('server', 'like', '%@%.' . $this->user->getServer()) : $conferences->where('server', 'like', '%@%'); diff --git a/app/widgets/Infos/Infos.php b/app/widgets/Infos/Infos.php index bc289e2b6..0b942f6c3 100644 --- a/app/widgets/Infos/Infos.php +++ b/app/widgets/Infos/Infos.php @@ -8,7 +8,7 @@ class Infos extends Base { function display() { - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); $connected = (int)requestURL('http://localhost:1560/started/', 2); $infos = [ diff --git a/app/widgets/Login/Login.php b/app/widgets/Login/Login.php index 415fb32b9..36dc356e6 100644 --- a/app/widgets/Login/Login.php +++ b/app/widgets/Login/Login.php @@ -49,7 +49,7 @@ class Login extends Base function display() { - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); $this->view->assign('info', $configuration->info); $this->view->assign('whitelist',$configuration->xmppwhitelist); @@ -180,7 +180,7 @@ class Login extends Base private function doLogin($login, $password, $deviceId = false) { // We get the Server Configuration - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); // First we check the form $validate_login = Validator::stringType()->length(1, 254); diff --git a/app/widgets/Subscribe/Subscribe.php b/app/widgets/Subscribe/Subscribe.php index 72bda761c..f465adc7f 100644 --- a/app/widgets/Subscribe/Subscribe.php +++ b/app/widgets/Subscribe/Subscribe.php @@ -19,7 +19,7 @@ class Subscribe extends Base { $json = requestURL(MOVIM_API.'servers', 3, false, true); $json = json_decode($json); - $this->view->assign('config', Configuration::findOrNew(1)); + $this->view->assign('config', Configuration::get()); if (is_object($json) && $json->status == 200) { $this->view->assign('servers', $json->servers); diff --git a/src/Movim/Bootstrap.php b/src/Movim/Bootstrap.php index f043f8e40..babe0d3b8 100644 --- a/src/Movim/Bootstrap.php +++ b/src/Movim/Bootstrap.php @@ -241,7 +241,7 @@ class Bootstrap $l->detect(); $l->loadPo(); } else { - $l->load(Configuration::findOrNew(1)->locale); + $l->load(Configuration::get()->locale); } } @@ -270,7 +270,7 @@ class Bootstrap private function setLogLevel() { - define('LOG_LEVEL', (int)Configuration::findOrNew(1)->loglevel); + define('LOG_LEVEL', (int)Configuration::get()->loglevel); } private function startingSession() diff --git a/src/Movim/Console/ConfigCommand.php b/src/Movim/Console/ConfigCommand.php index cb6d81e5b..3f6bd49e3 100644 --- a/src/Movim/Console/ConfigCommand.php +++ b/src/Movim/Console/ConfigCommand.php @@ -81,7 +81,7 @@ class ConfigCommand extends Command protected function execute(InputInterface $input, OutputInterface $output) { - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); foreach ($input->getOptions() as $key => $value) { if (in_array($key, $configuration->fillable) && isset($value)) { diff --git a/src/Movim/Console/DaemonCommand.php b/src/Movim/Console/DaemonCommand.php index bdf9c9f5d..72fad268f 100644 --- a/src/Movim/Console/DaemonCommand.php +++ b/src/Movim/Console/DaemonCommand.php @@ -80,7 +80,7 @@ class DaemonCommand extends Command $baseuri = rtrim($input->getOption('url'), '/') . '/'; - $configuration = Configuration::findOrNew(1); + $configuration = Configuration::get(); if (empty($configuration->username) || empty($configuration->password)) { $output->writeln('Please set a username and password for the admin panel (' . $baseuri . '?admin)'); diff --git a/src/Movim/Emoji.php b/src/Movim/Emoji.php index 0db1ef7b6..49e6a2aa2 100644 --- a/src/Movim/Emoji.php +++ b/src/Movim/Emoji.php @@ -81,7 +81,7 @@ class Emoji $img->setAttribute('class', 'emoji'); $img->setAttribute('alt', $this->_emoji[$astext]); $img->setAttribute('src', BASE_URI . 'themes/' . - \App\Configuration::findOrNew(1)->theme . + \App\Configuration::get()->theme . '/img/emojis/svg/' . $astext . '.svg'); return $dom->saveXML($dom->documentElement); diff --git a/src/Movim/Template/Builder.php b/src/Movim/Template/Builder.php index 5e89e560a..9448c079f 100644 --- a/src/Movim/Template/Builder.php +++ b/src/Movim/Template/Builder.php @@ -23,7 +23,7 @@ class Builder */ function __construct() { - $this->theme = Configuration::findOrNew(1)->theme; + $this->theme = Configuration::get()->theme; $this->user = \App\User::me(); } @@ -177,7 +177,7 @@ class Builder } else { $meta = $dom->createElement('meta'); $meta->setAttribute('name', 'description'); - $meta->setAttribute('content', Configuration::findOrNew(1)->description); + $meta->setAttribute('content', Configuration::get()->description); $metas->appendChild($meta); }