rbrecruiter/app/Helpers/Options.php

95 lines
2.5 KiB
PHP
Raw Permalink Normal View History

2020-08-30 22:06:01 +00:00
<?php
namespace App\Helpers;
use App\Options as Option;
use Illuminate\Support\Facades\Cache;
2020-08-31 18:47:27 +00:00
use Illuminate\Support\Facades\Log;
2020-08-30 22:06:01 +00:00
class Options
{
2020-08-30 22:06:01 +00:00
public function getOption(string $option): string
{
$value = Cache::get($option);
if (is_null($value))
{
Log::debug('Option ' . $option . 'not found in cache, refreshing from database');
2020-08-30 22:06:01 +00:00
$value = Option::where('option_name', $option)->first();
if (is_null($value))
2020-08-30 22:06:01 +00:00
throw new \Exception('This option does not exist.');
2020-08-30 22:06:01 +00:00
Cache::put($option, $value);
Cache::put($option . '_desc', 'Undefined description');
2020-08-30 22:06:01 +00:00
}
return $value->option_value;
2020-08-30 22:06:01 +00:00
}
public function setOption(string $option, string $value, string $description)
{
Option::create([
'option_name' => $option,
'option_value' => $value,
'friendly_name' => $description
]);
Cache::put($option, $value, now()->addDay());
Cache::put($option . '_desc', $description, now()->addDay());
2020-08-30 22:06:01 +00:00
}
public function pullOption($option): array
{
$oldOption = Option::where('option_name', $option)->first();
Option::find($oldOption->id)->delete();
// putMany is overkill here
return [
Cache::pull($option),
Cache::pull($option . '_desc')
2020-08-30 22:06:01 +00:00
];
}
public function changeOption($option, $newValue)
{
$dbOption = Option::where('option_name', $option);
if ($dbOption->first())
{
$dbOptionInstance = Option::find($dbOption->first()->id);
2020-08-30 22:06:01 +00:00
Cache::forget($option);
2020-08-31 19:02:30 +00:00
Log::debug('Changing db configuration option', [
2020-08-31 18:47:27 +00:00
'old_value' => $dbOptionInstance->option_value,
'new_value' => $newValue
2020-08-31 18:47:27 +00:00
]);
2020-08-30 22:06:01 +00:00
$dbOptionInstance->option_value = $newValue;
$dbOptionInstance->save();
2020-08-31 19:02:30 +00:00
Log::debug('New db configuration option saved',
2020-08-31 18:47:27 +00:00
[
'option' => $dbOptionInstance->option_value
2020-08-31 18:47:27 +00:00
]);
2020-08-30 22:06:01 +00:00
Cache::put('option_name', $newValue, now()->addDay());
}
else
{
2020-08-30 22:06:01 +00:00
throw new \Exception('This option does not exist.');
}
}
2020-08-30 22:06:01 +00:00
public function optionExists(string $option): bool
{
$dbOption = Option::where('option_name', $option)->first();
$locallyCachedOption = Cache::get($option);
return !is_null($dbOption) || !is_null($locallyCachedOption);
2020-08-30 22:06:01 +00:00
}
2020-08-30 22:06:01 +00:00
}