diff --git a/src/app/Observers/SignupCodeObserver.php b/src/app/Observers/SignupCodeObserver.php index 45463df9..9f90c9fc 100644 --- a/src/app/Observers/SignupCodeObserver.php +++ b/src/app/Observers/SignupCodeObserver.php @@ -1,38 +1,39 @@ code)) { $code->short_code = SignupCode::generateShortCode(); // FIXME: Replace this with something race-condition free while (true) { - $code->code = str_random($code_length); + $code->code = Str::random($code_length); if (!SignupCode::find($code->code)) { break; } } } $code->expires_at = Carbon::now()->addHours($exp_hours); } } diff --git a/src/app/Observers/VerificationCodeObserver.php b/src/app/Observers/VerificationCodeObserver.php index 9b41bc66..755b2898 100644 --- a/src/app/Observers/VerificationCodeObserver.php +++ b/src/app/Observers/VerificationCodeObserver.php @@ -1,39 +1,40 @@ code)) { $code->short_code = VerificationCode::generateShortCode(); // FIXME: Replace this with something race-condition free while (true) { - $code->code = str_random($code_length); + $code->code = Str::random($code_length); if (!VerificationCode::find($code->code)) { break; } } } $code->expires_at = Carbon::now()->addHours($exp_hours); } } diff --git a/src/app/Traits/UserSettingsTrait.php b/src/app/Traits/UserSettingsTrait.php index 72d07a5e..55d06d1a 100644 --- a/src/app/Traits/UserSettingsTrait.php +++ b/src/app/Traits/UserSettingsTrait.php @@ -1,114 +1,119 @@ 'some@other.erg']); * $locale = $user->getSetting('locale'); * ``` * * @param string $key Lookup key * - * @return string + * @return string|null */ public function getSetting(string $key) { $settings = $this->getCache(); - $value = array_get($settings, $key); - return ($value !== '') ? $value : null; + if (!array_key_exists($key, $settings)) { + return null; + } + + $value = $settings[$key]; + + return empty($value) ? null : $value; } /** * Create or update a setting. * * Example Usage: * * ```php * $user = User::firstOrCreate(['email' => 'some@other.erg']); * $user->setSetting('locale', 'en'); * ``` * * @param string $key Setting name * @param string|null $value The new value for the setting. * * @return void */ public function setSetting(string $key, $value) { $this->storeSetting($key, $value); $this->setCache(); } /** * Create or update multiple settings in one fell swoop. * * Example Usage: * * ```php * $user = User::firstOrCreate(['email' => 'some@other.erg']); * $user->setSettings(['locale', 'en', 'country' => 'GB']); * ``` * * @param array $data An associative array of key value pairs. * * @return void */ public function setSettings(array $data = []) { foreach ($data as $key => $value) { $this->storeSetting($key, $value); } $this->setCache(); } private function storeSetting(string $key, $value): void { if ($value === null || $value === '') { UserSetting::where(['user_id' => $this->id, 'key' => $key])->delete(); } else { UserSetting::updateOrCreate( ['user_id' => $this->id, 'key' => $key], ['value' => $value] ); } } private function getCache() { if (Cache::has('user_settings_' . $this->id)) { return Cache::get('user_settings_' . $this->id); } return $this->setCache(); } private function setCache() { if (Cache::has('user_settings_' . $this->id)) { Cache::forget('user_settings_' . $this->id); } $cached = []; foreach ($this->settings()->get() as $entry) { if ($entry->value !== null && $entry->value !== '') { $cached[$entry->key] = $entry->value; } } Cache::forever('user_settings_' . $this->id, $cached); return $this->getCache(); } } diff --git a/src/composer.json b/src/composer.json index a66cb4fc..6bc7c2a3 100644 --- a/src/composer.json +++ b/src/composer.json @@ -1,83 +1,83 @@ { "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": [ "framework", "laravel" ], "license": "MIT", "repositories": [ { "type": "vcs", "url": "https://git.kolab.org/diffusion/PNL/php-net_ldap3.git" } ], "require": { "php": "^7.1.3", "doctrine/dbal": "^2.9", "fideloper/proxy": "^4.0", "geoip2/geoip2": "^2.9", - "iatstuti/laravel-nullable-fields": "^1.0", + "iatstuti/laravel-nullable-fields": "*", "kolab/net_ldap3": "dev-master", - "laravel/framework": "5.8.*", + "laravel/framework": "6.*", "laravel/tinker": "^1.0", "silviolleite/laravelpwa": "^1.0", "spatie/laravel-translatable": "^4.2", "swooletw/laravel-swoole": "^2.6", "torann/currency": "^1.0", "torann/geoip": "^1.0", "tymon/jwt-auth": "^1.0" }, "require-dev": { "beyondcode/laravel-dump-server": "^1.0", "beyondcode/laravel-er-diagram-generator": "^1.3", "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "laravel/dusk": "5.9.1", "mockery/mockery": "^1.0", "nunomaduro/collision": "^3.0", "nunomaduro/larastan": "^0.4", "phpstan/phpstan": "0.11.19", "phpunit/phpunit": "^7.5" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true }, "extra": { "laravel": { "dont-discover": [] } }, "autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories", "include" ] }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "minimum-stability": "dev", "prefer-stable": true, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi" ] } }