Setting categorization system
This categorization system aims to prevent mixing different options together.
This commit is contained in:
parent
baddf3fc76
commit
abace4e85b
|
@ -22,11 +22,33 @@
|
||||||
namespace App\Helpers;
|
namespace App\Helpers;
|
||||||
|
|
||||||
use App\Options as Option;
|
use App\Options as Option;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The options class. A simple wrapper around the model. Could be a repository, but we're not using that design pattern just yet
|
||||||
|
*/
|
||||||
class Options
|
class Options
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an assortment of settings found in the mentioned category
|
||||||
|
*
|
||||||
|
* @param $category The category
|
||||||
|
* @return Collection The settings in this category
|
||||||
|
*/
|
||||||
|
public function getCategory(string $category): Collection
|
||||||
|
{
|
||||||
|
$options = Option::where('option_category', $category)->get();
|
||||||
|
if ($options->isEmpty())
|
||||||
|
{
|
||||||
|
throw new \Exception('There are no options in category ' . $category);
|
||||||
|
}
|
||||||
|
return $options;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function getOption(string $option): string
|
public function getOption(string $option): string
|
||||||
{
|
{
|
||||||
$value = Cache::get($option);
|
$value = Cache::get($option);
|
||||||
|
@ -47,12 +69,14 @@ class Options
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setOption(string $option, string $value, string $description)
|
// Null categories are settings without categories and will appear ungrouped
|
||||||
|
public function setOption(string $option, string $value, string $description, string $category = null)
|
||||||
{
|
{
|
||||||
Option::create([
|
Option::create([
|
||||||
'option_name' => $option,
|
'option_name' => $option,
|
||||||
'option_value' => $value,
|
'option_value' => $value,
|
||||||
'friendly_name' => $description,
|
'friendly_name' => $description,
|
||||||
|
'option_category' => $category
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Cache::put($option, $value, now()->addDay());
|
Cache::put($option, $value, now()->addDay());
|
||||||
|
|
|
@ -36,17 +36,17 @@ class OptionsController extends Controller
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
// TODO: Obtain this from the facade
|
|
||||||
$options = Option::all();
|
|
||||||
|
|
||||||
return view('dashboard.administration.settings')
|
return view('dashboard.administration.settings')
|
||||||
->with('options', $options)
|
->with([
|
||||||
->with('security', [
|
'options' => Options::getCategory('notifications'),
|
||||||
'secPolicy' => Options::getOption('pw_security_policy'),
|
'security' => [ // We could use the method above, but we need to set these names here for greater control in the template. This would nto be feasible for many options, we'd need to use a loop and the category method.
|
||||||
'graceperiod' => Options::getOption('graceperiod'),
|
'secPolicy' => Options::getOption('pw_security_policy'),
|
||||||
'pwExpiry' => Options::getOption('password_expiry'),
|
'graceperiod' => Options::getOption('graceperiod'),
|
||||||
'requiresPMC' => Options::getOption('requireGameLicense'),
|
'pwExpiry' => Options::getOption('password_expiry'),
|
||||||
'enforce2fa' => Options::getOption('force2fa')
|
'requiresPMC' => Options::getOption('requireGameLicense'),
|
||||||
|
'enforce2fa' => Options::getOption('force2fa')
|
||||||
|
]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddCategoryToOptions extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('options', function (Blueprint $table) {
|
||||||
|
$table->string('option_category')->after('friendly_name')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('options', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('option_category');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,25 +33,25 @@ class DefaultOptionsSeeder extends Seeder
|
||||||
*/
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through'); // done
|
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through', 'notifications'); // done
|
||||||
Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application'); // done
|
Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application' , 'notifications'); // done
|
||||||
Options::setOption('notify_new_user', true, 'Notify when someone signs up'); // done
|
Options::setOption('notify_new_user', true, 'Notify when someone signs up'); // done
|
||||||
Options::setOption('notify_application_status_change', true, 'Notify when an application changes status'); // done
|
Options::setOption('notify_application_status_change', true, 'Notify when an application changes status' , 'notifications'); // done
|
||||||
Options::setOption('notify_applicant_approved', true, 'Notify when an applicant is approved'); // done
|
Options::setOption('notify_applicant_approved', true, 'Notify when an applicant is approved' , 'notifications'); // done
|
||||||
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes'); // done
|
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes' , 'notifications'); // done
|
||||||
|
|
||||||
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications');
|
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications' , 'notifications');
|
||||||
Options::setOption('enable_email_notifications', true, 'Enable e-mail notifications');
|
Options::setOption('enable_email_notifications', true, 'Enable e-mail notifications' , 'notifications');
|
||||||
|
|
||||||
// added in 0.6.2
|
// added in 0.6.2
|
||||||
Options::setOption('pw_security_policy', 'low', 'Describes the current password security policy.');
|
Options::setOption('pw_security_policy', 'low', 'Describes the current password security policy.', 'app_security');
|
||||||
Options::setOption('graceperiod', 7, '2FA Grace Period');
|
Options::setOption('graceperiod', 7, '2FA Grace Period', 'app_security');
|
||||||
Options::setOption('password_expiry', 'disabled', 'Defines wether passwords must be reset after $value');
|
Options::setOption('password_expiry', 'disabled', 'Defines wether passwords must be reset after $value', 'app_security');
|
||||||
Options::setOption('force2fa', false, 'Defines whether 2fa is forced upon users');
|
Options::setOption('force2fa', false, 'Defines whether 2fa is forced upon users', 'app_security');
|
||||||
Options::setOption('force2faRole', 'reviewer', 'Defines which role to force 2fa for');
|
Options::setOption('force2faRole', 'reviewer', 'Defines which role to force 2fa for', 'app_security');
|
||||||
Options::setOption('requireGameLicense', true, 'Defines whether people need to validate their game license');
|
Options::setOption('requireGameLicense', true, 'Defines whether people need to validate their game license', 'app_security');
|
||||||
|
|
||||||
Options::setOption('currentGame', 'MINECRAFT', 'Defines what game we\'re working with');
|
Options::setOption('currentGame', 'MINECRAFT', 'Defines what game we\'re working with', 'app_integration');
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,13 +108,17 @@
|
||||||
<form name="settings" id="settings" method="post" action="{{route('saveSettings')}}">
|
<form name="settings" id="settings" method="post" action="{{route('saveSettings')}}">
|
||||||
@csrf
|
@csrf
|
||||||
@foreach($options as $option)
|
@foreach($options as $option)
|
||||||
<div class="form-group form-check">
|
|
||||||
<!-- Unchecked checkbox hack: This only works for serverside languages that process the last duplicate element, since the browser sends both the hidden and checkbox values. -->
|
@if(!in_array($option->option_name, $ignoreOptions))
|
||||||
<!-- This "hack" is necessary because browsers don't send, by default, unchecked checkboxes to the server, so we would have no way to know if X checkbox was unchecked. -->
|
|
||||||
<input type="hidden" name="{{$option->option_name}}" value="0">
|
<div class="form-group form-check">
|
||||||
<input type="checkbox" name="{{$option->option_name}}" value="1" id="{{$option->option_name}}" class="form-check-input" {{ ($option->option_value == 1) ? 'checked' : '' }}>
|
<input type="hidden" name="{{$option->option_name}}" value="0">
|
||||||
<label for="{{$option->option_name}}">{{$option->friendly_name}}</label>
|
<input type="checkbox" name="{{$option->option_name}}" value="1" id="{{$option->option_name}}" class="form-check-input" {{ ($option->option_value == 1) ? 'checked' : '' }}>
|
||||||
</div>
|
<label for="{{$option->option_name}}">{{$option->friendly_name}}</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@endif
|
||||||
|
|
||||||
@endforeach
|
@endforeach
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue