forked from miguel456/rbrecruiter
Compare commits
132 Commits
0.5.2
...
l10n_maste
Author | SHA1 | Date | |
---|---|---|---|
50ed47964c | |||
58d6a8ef1f | |||
d988b9a5cb | |||
eeae03dec5 | |||
c374100eed | |||
01e3a9edce | |||
d93170b555 | |||
8e85e08171 | |||
de3dba3627 | |||
f7a18816bc | |||
369185c4ed | |||
5ee79880d5 | |||
75d7181bca | |||
3fe3df7357 | |||
7e58c3af6b | |||
5ca155ba42 | |||
7c7c20d5b2 | |||
fdb508fd5a | |||
cbe660f4ad | |||
6e34b6b8fa | |||
60874c046f | |||
e9dd1567b8 | |||
a95c9518b3 | |||
af96d193a4 | |||
48054f0837 | |||
9b5e35b241 | |||
4c7783f366 | |||
af2c23a73c | |||
af17bbe468 | |||
17f61f0d6b | |||
a5aef7deb7 | |||
f32c4dc68c | |||
687316d77a | |||
ff70c21283 | |||
727c14d0c2 | |||
6b7d2db612 | |||
d743554df6 | |||
fd8bf4f0f2 | |||
bd530696d2 | |||
3040afd730 | |||
e7d2c548c0 | |||
f001a16d4d | |||
d8dbb1a0a2 | |||
4e1b4f5afd | |||
81c0b65404 | |||
a10f3f9c96 | |||
326e0f8c7c | |||
a0192cdb02 | |||
8f45563b24 | |||
004e9edcb0 | |||
fafc9dca87 | |||
800d205c74 | |||
3cd7292c36 | |||
36db8a1337 | |||
bcd11c462a | |||
6703ac89c1 | |||
fda34ad8bf | |||
2cde1cdbbe | |||
0bca7619f7 | |||
d223515d19 | |||
93fb7a8432 | |||
6bf0d9f373 | |||
db5d150758 | |||
348b1a37d0 | |||
86bf02bb42 | |||
6c45573fbe | |||
910863bdea | |||
884ff74f42 | |||
4f1935fbf2 | |||
3a53f3bbc2 | |||
6c08e839d6 | |||
362ce6c866 | |||
d336354482 | |||
88cf53c53d | |||
a5568be339 | |||
d393a8cedc | |||
62d5f68279 | |||
5c068a325d | |||
15c02c1de1 | |||
3782f79b51 | |||
0c53757912 | |||
6db69f997d | |||
edb2e4b2d6 | |||
baac37e967 | |||
5952ed9248 | |||
356483ef7b | |||
b80e168dfb | |||
9b469c434b | |||
ca3a06f248 | |||
1e2f331778 | |||
4a09fa581d | |||
c58b5b56d7 | |||
bf5d4058ad | |||
f871e14307 | |||
1e78a8e6d9 | |||
17fb0e236f | |||
27b1f3170b | |||
00cc36246f | |||
41e3e817a2 | |||
2afea88846 | |||
ea96cbc1f5 | |||
2996e66c8b | |||
a32af7c464 | |||
cd874c5f58 | |||
42de40e320 | |||
faa3a65e2b | |||
ba3a139d1c | |||
25ddf81118 | |||
9431eb5036 | |||
a3071dccf9 | |||
b0cbf65cfc | |||
6be5e241d4 | |||
d6c49a5cf0 | |||
075617fd32 | |||
da73c91b4a | |||
ca82f5882d | |||
88c36dd3f8 | |||
535a2c3973 | |||
ad5c3404cc | |||
64d418c590 | |||
62b063ee63 | |||
2c0c404d73 | |||
168f08bd96 | |||
94d08f1886 | |||
0cf6208577 | |||
9255a6c88d | |||
098205a969 | |||
bf426e3bdd | |||
02059bbcb0 | |||
91627decbe | |||
2763f777ab | |||
d392c0593f |
@@ -3,6 +3,9 @@ APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
APP_LOGO="https://www.raspberrypi.org/app/uploads/2020/05/Raspberry-Pi-OS-downloads-image-150x150-1.png"
|
||||
APP_SITEHOMEPAGE=""
|
||||
# This can be your main homepage, other than this site itself
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
|
||||
|
2
.idea/hrm-mcserver.iml
generated
2
.idea/hrm-mcserver.iml
generated
@@ -39,7 +39,9 @@
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/ui" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/commonmark" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/mime-type-detection" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/maximebf/debugbar" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/mcamara/laravel-localization" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/mockery/mockery" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
|
||||
|
14
.idea/php.xml
generated
14
.idea/php.xml
generated
@@ -127,6 +127,20 @@
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/string" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-grapheme" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
|
||||
<path value="$PROJECT_DIR$/vendor/bacon/bacon-qr-code" />
|
||||
<path value="$PROJECT_DIR$/vendor/dasprid/enum" />
|
||||
<path value="$PROJECT_DIR$/vendor/geo-sot/laravel-env-editor" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/slack-notification-channel" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php70" />
|
||||
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa-laravel" />
|
||||
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa" />
|
||||
<path value="$PROJECT_DIR$/vendor/pragmarx/google2fa-qrcode" />
|
||||
<path value="$PROJECT_DIR$/vendor/arcanedev/log-viewer" />
|
||||
<path value="$PROJECT_DIR$/vendor/arcanedev/support" />
|
||||
<path value="$PROJECT_DIR$/vendor/paragonie/constant_time_encoding" />
|
||||
<path value="$PROJECT_DIR$/vendor/graham-campbell/markdown" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/mime-type-detection" />
|
||||
<path value="$PROJECT_DIR$/vendor/mcamara/laravel-localization" />
|
||||
</include_path>
|
||||
</component>
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="7.2" />
|
||||
|
@@ -1,10 +1,11 @@
|
||||
# Raspberry Teams - The Simple Staff Application Manager v 0.1.0
|
||||
## The quick and pain-free staff application manager (for Minecraft)
|
||||
|
||||
# Raspberry Teams - The Simple Staff Application Manager v 0.1.0 [](https://crowdin.com/project/raspberry-staff-manager)
|
||||
## The quick and pain-free staff application manager
|
||||
|
||||
Have you ever gotten tired of managing your Minecraft server/network's applications through Discord (or anything else) and having to scroll through hundreds of new messages just to find that one applicant's username?
|
||||
|
||||
|
||||
Wish you had a better application managemet strategy? Well, then Raspberry Teams is for you! It was originally designed and developed for internal use, but sharing is caring! After noticing a worrying lack of "human resources" management systems on SpigotMC's resources section (There was only one outdated/unsupported project), I've decided to take it up into my own terms and start working on it.
|
||||
Wish you had a better application managemet strategy? Well, then Raspberry Teams is for you! It was originally designed and developed for internal use for a gameserver network, but sharing is caring!
|
||||
|
||||
|
||||
# Features (not exhaustive)
|
||||
@@ -60,7 +61,7 @@ Tech stack:
|
||||
|
||||
- JSON
|
||||
- Curl (highly recommended)
|
||||
|
||||
- Image Magick (imagick) for 2FA support
|
||||
|
||||
# Installation
|
||||
|
||||
|
@@ -7,11 +7,13 @@ use Illuminate\Database\Eloquent\Model;
|
||||
class Appointment extends Model
|
||||
{
|
||||
public $fillable = [
|
||||
'appointmentDescription',
|
||||
'appointmentDate',
|
||||
'applicationID',
|
||||
'appointmentDescription',
|
||||
'appointmentDate',
|
||||
'applicationID',
|
||||
'appointmentStatus',
|
||||
'appointmentLocation'
|
||||
'appointmentLocation',
|
||||
'meetingNotes',
|
||||
'userAccepted'
|
||||
];
|
||||
|
||||
public function application()
|
||||
|
13
app/Facades/Options.php
Normal file
13
app/Facades/Options.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Facades;
|
||||
use \Illuminate\Support\Facades\Facade;
|
||||
|
||||
class Options extends Facade
|
||||
{
|
||||
public static function getFacadeAccessor()
|
||||
{
|
||||
return 'smOptions';
|
||||
}
|
||||
}
|
94
app/Helpers/Options.php
Normal file
94
app/Helpers/Options.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Helpers;
|
||||
|
||||
use App\Options as Option;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class Options
|
||||
{
|
||||
|
||||
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');
|
||||
$value = Option::where('option_name', $option)->first();
|
||||
if (is_null($value))
|
||||
throw new \Exception('This option does not exist.');
|
||||
|
||||
Cache::put($option, $value);
|
||||
Cache::put($option . '_desc', 'Undefined description');
|
||||
}
|
||||
|
||||
return $value->option_value;
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
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')
|
||||
];
|
||||
}
|
||||
|
||||
public function changeOption($option, $newValue)
|
||||
{
|
||||
$dbOption = Option::where('option_name', $option);
|
||||
|
||||
if ($dbOption->first())
|
||||
{
|
||||
$dbOptionInstance = Option::find($dbOption->first()->id);
|
||||
Cache::forget($option);
|
||||
|
||||
Log::debug('Changing db configuration option', [
|
||||
'old_value' => $dbOptionInstance->option_value,
|
||||
'new_value' => $newValue
|
||||
]);
|
||||
|
||||
$dbOptionInstance->option_value = $newValue;
|
||||
$dbOptionInstance->save();
|
||||
|
||||
Log::debug('New db configuration option saved',
|
||||
[
|
||||
'option' => $dbOptionInstance->option_value
|
||||
]);
|
||||
|
||||
Cache::put('option_name', $newValue, now()->addDay());
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new \Exception('This option does not exist.');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function optionExists(string $option): bool
|
||||
{
|
||||
$dbOption = Option::where('option_name', $option)->first();
|
||||
$locallyCachedOption = Cache::get($option);
|
||||
|
||||
return !is_null($dbOption) || !is_null($locallyCachedOption);
|
||||
}
|
||||
|
||||
}
|
@@ -231,7 +231,7 @@ class ApplicationController extends Controller
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
public function updateApplicationStatus(Request $request, $application, $newStatus)
|
||||
public function updateApplicationStatus(Request $request, Application $application, $newStatus)
|
||||
{
|
||||
$this->authorize('update', Application::class);
|
||||
|
||||
|
@@ -72,10 +72,12 @@ class AppointmentController extends Controller
|
||||
}
|
||||
|
||||
// also updates
|
||||
public function saveNotes(SaveNotesRequest $request, $application)
|
||||
public function saveNotes(SaveNotesRequest $request, Application $application)
|
||||
{
|
||||
if (!is_null($application))
|
||||
{
|
||||
$application->load('appointment');
|
||||
|
||||
$application->appointment->meetingNotes = $request->noteText;
|
||||
$application->appointment->save();
|
||||
|
||||
|
@@ -44,7 +44,7 @@ class LoginController extends Controller
|
||||
|
||||
// We can't customise the error message, since that would imply overriding the login method, which is large.
|
||||
// Also, the user should never know that they're banned.
|
||||
public function attemptLogin(Request $request)
|
||||
public function attemptLogin(Request $request)
|
||||
{
|
||||
$user = User::where('email', $request->email)->first();
|
||||
|
||||
@@ -60,9 +60,9 @@ class LoginController extends Controller
|
||||
return $this->originalAttemptLogin($request);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $this->originalAttemptLogin($request);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -70,7 +70,7 @@ class RegisterController extends Controller
|
||||
'uuid' => ['required', 'string', 'unique:users', 'min:32', 'max:32'],
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||
'password' => ['required', 'string', 'min:8', 'confirmed'],
|
||||
'password' => ['required', 'string', 'min:10', 'confirmed', 'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/'],
|
||||
], [
|
||||
'uuid.required' => 'Please enter a valid (and Premium) Minecraft username! We do not support cracked users.'
|
||||
]);
|
||||
|
16
app/Http/Controllers/Auth/TwofaController.php
Normal file
16
app/Http/Controllers/Auth/TwofaController.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Traits\AuthenticatesTwoFactor;
|
||||
|
||||
class TwofaController extends Controller
|
||||
{
|
||||
use AuthenticatesTwoFactor;
|
||||
|
||||
|
||||
protected $redirectTo = '/dashboard';
|
||||
|
||||
}
|
@@ -24,34 +24,38 @@ class BanController extends Controller
|
||||
$duration = strtolower($request->durationOperator);
|
||||
$durationOperand = $request->durationOperand;
|
||||
|
||||
$expiryDate = now();
|
||||
|
||||
if (!empty($duration))
|
||||
{
|
||||
$expiryDate = now();
|
||||
|
||||
switch($duration)
|
||||
{
|
||||
case 'days':
|
||||
$expiryDate->addDays($duration);
|
||||
$expiryDate->addDays($durationOperand);
|
||||
break;
|
||||
|
||||
case 'weeks':
|
||||
$expiryDate->addWeeks($duration);
|
||||
$expiryDate->addWeeks($durationOperand);
|
||||
break;
|
||||
|
||||
case 'months':
|
||||
$expiryDate->addMonths($duration);
|
||||
$expiryDate->addMonths($durationOperand);
|
||||
break;
|
||||
|
||||
case 'years':
|
||||
$expiryDate->addYears($duration);
|
||||
$expiryDate->addYears($durationOperand);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Essentially permanent
|
||||
$expiryDate->addYears(100);
|
||||
}
|
||||
|
||||
$ban = Ban::create([
|
||||
'userID' => $user->id,
|
||||
'reason' => $request->reason,
|
||||
'reason' => $reason,
|
||||
'bannedUntil' => $expiryDate->toDateTimeString() ?? null,
|
||||
'userAgent' => "Unknown",
|
||||
'authorUserID' => Auth::user()->id
|
||||
|
60
app/Http/Controllers/OptionsController.php
Normal file
60
app/Http/Controllers/OptionsController.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Facades\Options;
|
||||
use App\Options as Option;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class OptionsController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Http\Response|\Illuminate\View\View
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
// TODO: Obtain this from the facade
|
||||
$options = Option::all();
|
||||
|
||||
|
||||
return view('dashboard.administration.settings')
|
||||
->with('options', $options);
|
||||
}
|
||||
|
||||
public function saveSettings(Request $request)
|
||||
{
|
||||
if (Auth::user()->can('admin.settings.edit'))
|
||||
{
|
||||
foreach($request->all() as $optionName => $option)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Options::optionExists($option))
|
||||
{
|
||||
Options::changeOption($optionName, $option);
|
||||
}
|
||||
}
|
||||
catch(\Exception $ex)
|
||||
{
|
||||
$errorCond = true;
|
||||
$request->session()->flash('error', 'An error occurred while trying to save settings: ' . $ex->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($errorCond))
|
||||
{
|
||||
$request->session()->flash('success', 'Settings saved successfully!');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$request->session()->flash('error', 'You do not have permission to update this resource.');
|
||||
}
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
}
|
@@ -8,6 +8,8 @@ use App\Http\Requests\FlushSessionsRequest;
|
||||
use App\Http\Requests\DeleteUserRequest;
|
||||
use App\Http\Requests\SearchPlayerRequest;
|
||||
use App\Http\Requests\UpdateUserRequest;
|
||||
use App\Http\Requests\Add2FASecretRequest;
|
||||
use App\Http\Requests\Remove2FASecretRequest;
|
||||
|
||||
use App\User;
|
||||
use App\Ban;
|
||||
@@ -21,6 +23,8 @@ use App\Notifications\EmailChanged;
|
||||
use App\Notifications\ChangedPassword;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
use Google2FA;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
|
||||
@@ -112,10 +116,32 @@ class UserController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
public function showAccount()
|
||||
public function showAccount(Request $request)
|
||||
{
|
||||
$QRCode = null;
|
||||
|
||||
if (!$request->user()->has2FA())
|
||||
{
|
||||
if ($request->session()->has('twofaAttemptFailed'))
|
||||
{
|
||||
$twoFactorSecret = $request->session()->get('current2FA');
|
||||
}
|
||||
else
|
||||
{
|
||||
$twoFactorSecret = Google2FA::generateSecretKey(32, '');
|
||||
$request->session()->put('current2FA', $twoFactorSecret);
|
||||
}
|
||||
|
||||
$QRCode = Google2FA::getQRCodeInline(
|
||||
config('app.name'),
|
||||
$request->user()->email,
|
||||
$twoFactorSecret
|
||||
);
|
||||
}
|
||||
|
||||
return view('dashboard.user.profile.useraccount')
|
||||
->with('ip', request()->ip());
|
||||
->with('ip', request()->ip())
|
||||
->with('twofaQRCode', $QRCode);
|
||||
}
|
||||
|
||||
|
||||
@@ -247,10 +273,67 @@ class UserController extends Controller
|
||||
|
||||
}
|
||||
|
||||
public function add2FASecret(Add2FASecretRequest $request)
|
||||
{
|
||||
$currentSecret = $request->session()->get('current2FA');
|
||||
$isValid = Google2FA::verifyKey($currentSecret, $request->otp);
|
||||
|
||||
if ($isValid)
|
||||
{
|
||||
$request->user()->twofa_secret = $currentSecret;
|
||||
$request->user()->save();
|
||||
|
||||
Log::warning('SECURITY: User activated two-factor authentication', [
|
||||
'initiator' => $request->user()->email,
|
||||
'ip' => $request->ip()
|
||||
]);
|
||||
|
||||
Google2FA::login();
|
||||
|
||||
Log::warning('SECURITY: Started two factor session automatically', [
|
||||
'initiator' => $request->user()->email,
|
||||
'ip' => $request->ip()
|
||||
]);
|
||||
|
||||
$request->session()->forget('current2FA');
|
||||
|
||||
if ($request->session()->has('twofaAttemptFailed'))
|
||||
$request->session()->forget('twofaAttemptFailed');
|
||||
|
||||
|
||||
$request->session()->flash('success', '2FA succesfully enabled! You\'ll now be prompted for an OTP each time you log in.');
|
||||
}
|
||||
else
|
||||
{
|
||||
$request->session()->flash('error', 'Incorrect code. Please reopen the 2FA settings panel and try again.');
|
||||
$request->session()->put('twofaAttemptFailed', true);
|
||||
}
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
public function remove2FASecret(Remove2FASecretRequest $request)
|
||||
{
|
||||
Log::warning('SECURITY: Disabling two factor authentication (user initiated)', [
|
||||
'initiator' => $request->user()->email,
|
||||
'ip' => $request->ip()
|
||||
]);
|
||||
|
||||
$request->user()->twofa_secret = null;
|
||||
$request->user()->save();
|
||||
|
||||
$request->session()->flash('success', 'Two-factor authentication disabled.');
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function terminate(Request $request, User $user)
|
||||
{
|
||||
$this->authorize('terminate', User::class);
|
||||
|
||||
// TODO: move logic to policy
|
||||
if (!$user->isStaffMember() || $user->is(Auth::user()))
|
||||
{
|
||||
$request->session()->flash('error', 'You cannot terminate this user.');
|
||||
|
@@ -111,24 +111,24 @@ class VacancyController extends Controller
|
||||
}
|
||||
|
||||
|
||||
public function edit(Request $request, Vacancy $position)
|
||||
public function edit(Request $request, Vacancy $vacancy)
|
||||
{
|
||||
$this->authorize('update', $vacancy);
|
||||
return view('dashboard.administration.editposition')
|
||||
->with('vacancy', $position);
|
||||
->with('vacancy', $vacancy);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function update(VacancyEditRequest $request, Vacancy $position)
|
||||
public function update(VacancyEditRequest $request, Vacancy $vacancy)
|
||||
{
|
||||
$this->authorize('update', $vacancy);
|
||||
|
||||
$position->vacancyFullDescription = $request->vacancyFullDescription;
|
||||
$position->vacancyDescription = $request->vacancyDescription;
|
||||
$position->vacancyCount = $request->vacancyCount;
|
||||
$vacancy->vacancyFullDescription = $request->vacancyFullDescription;
|
||||
$vacancy->vacancyDescription = $request->vacancyDescription;
|
||||
$vacancy->vacancyCount = $request->vacancyCount;
|
||||
|
||||
$position->save();
|
||||
$vacancy->save();
|
||||
|
||||
$request->session()->flash('success', 'Vacancy successfully updated.');
|
||||
return redirect()->back();
|
||||
|
@@ -21,7 +21,7 @@ class VoteController extends Controller
|
||||
'userID' => Auth::user()->id,
|
||||
'allowedVoteType' => $voteRequest->voteType,
|
||||
]);
|
||||
$vote->application()->attach($applicationID);
|
||||
$vote->application()->attach($application->id);
|
||||
|
||||
|
||||
Log::info('User ' . Auth::user()->name . ' has voted in applicant ' . $application->user->name . '\'s application', [
|
||||
|
@@ -64,6 +64,12 @@ class Kernel extends HttpKernel
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
'eligibility' => \App\Http\Middleware\ApplicationEligibility::class,
|
||||
'usernameUUID' => \App\Http\Middleware\UsernameUUID::class,
|
||||
'forcelogout' => \App\Http\Middleware\ForceLogoutMiddleware::class
|
||||
'forcelogout' => \App\Http\Middleware\ForceLogoutMiddleware::class,
|
||||
'2fa' => \PragmaRX\Google2FALaravel\Middleware::class,
|
||||
'localize' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class,
|
||||
'localizationRedirect' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class,
|
||||
'localeSessionRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class,
|
||||
'localeCookieRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleCookieRedirect::class,
|
||||
'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class
|
||||
];
|
||||
}
|
||||
|
@@ -12,12 +12,12 @@ class TrustProxies extends Middleware
|
||||
*
|
||||
* @var array|string
|
||||
*/
|
||||
protected $proxies;
|
||||
protected $proxies = "*";
|
||||
|
||||
/**
|
||||
* The headers that should be used to detect proxies.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $headers = Request::HEADER_X_FORWARDED_ALL;
|
||||
protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;
|
||||
}
|
||||
|
31
app/Http/Requests/Add2FASecretRequest.php
Normal file
31
app/Http/Requests/Add2FASecretRequest.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class Add2FASecretRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
// current logic only updates currently authenticated user
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'otp' => 'required|string|min:6|max:6'
|
||||
];
|
||||
}
|
||||
}
|
31
app/Http/Requests/Remove2FASecretRequest.php
Normal file
31
app/Http/Requests/Remove2FASecretRequest.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class Remove2FASecretRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'currentPassword' => 'required|password',
|
||||
'consent' => 'required|accepted'
|
||||
];
|
||||
}
|
||||
}
|
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Facades\Options;
|
||||
use App\Traits\Cancellable;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
@@ -11,7 +13,7 @@ use App\Application;
|
||||
|
||||
class ApplicationApproved extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
public $application;
|
||||
|
||||
@@ -24,15 +26,15 @@ class ApplicationApproved extends Notification implements ShouldQueue
|
||||
{
|
||||
$this->application = $application;
|
||||
}
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
|
||||
public function channels()
|
||||
{
|
||||
return ['mail', 'slack'];
|
||||
return $this->chooseChannelsViaOptions();
|
||||
}
|
||||
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return Options::getOption('notify_applicant_approved') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -6,10 +6,12 @@ use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use App\Traits\Cancellable;
|
||||
use App\Facades\Options;
|
||||
|
||||
class ApplicationMoved extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
@@ -21,15 +23,9 @@ class ApplicationMoved extends Notification implements ShouldQueue
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
return Options::getOption('notify_application_status_change') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -10,9 +10,12 @@ use Illuminate\Notifications\Notification;
|
||||
use App\Application;
|
||||
use App\Vacancy;
|
||||
|
||||
use App\Traits\Cancellable;
|
||||
use App\Facades\Options;
|
||||
|
||||
class NewApplicant extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
|
||||
protected $application;
|
||||
@@ -31,15 +34,19 @@ class NewApplicant extends Notification implements ShouldQueue
|
||||
$this->vacancy = $vacancy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function channels()
|
||||
{
|
||||
return ['slack'];
|
||||
if (Options::getOption('enable_slack_notifications') == 1)
|
||||
{
|
||||
return ['slack'];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return Options::getOption('notify_new_user') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -8,10 +8,12 @@ use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use App\Comment;
|
||||
use App\Application;
|
||||
use App\Traits\Cancellable;
|
||||
use App\Facades\Options;
|
||||
|
||||
class NewComment extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
|
||||
protected $application;
|
||||
@@ -26,15 +28,9 @@ class NewComment extends Notification implements ShouldQueue
|
||||
$this->application = $application;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
return Options::getOption('notify_application_comment') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -10,10 +10,12 @@ use Illuminate\Notifications\Messages\SlackMessage;
|
||||
|
||||
use App\User;
|
||||
use App\Facades\UUID;
|
||||
use App\Traits\Cancellable;
|
||||
use App\Facades\Options;
|
||||
|
||||
class NewUser extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
use Queueable, Cancellable;
|
||||
|
||||
public $user;
|
||||
|
||||
@@ -27,18 +29,14 @@ class NewUser extends Notification implements ShouldQueue
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function channels($notifiable)
|
||||
{
|
||||
return ($notifiable->isStaffMember())
|
||||
? ['slack', 'mail']
|
||||
: ['mail'];
|
||||
return $this->chooseChannelsViaOptions();
|
||||
}
|
||||
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return Options::getOption('notify_new_user') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -9,10 +9,12 @@ use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
use App\Vacancy;
|
||||
use App\Facades\Options;
|
||||
use App\Traits\Cancellable;
|
||||
|
||||
class VacancyClosed extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
use Queueable, SerializesModels, Cancellable;
|
||||
|
||||
protected $vacancy;
|
||||
|
||||
@@ -26,15 +28,9 @@ class VacancyClosed extends Notification implements ShouldQueue
|
||||
$this->vacancy = $vacancy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
return Options::getOption('notify_vacancystatus_change') !== 1;
|
||||
}
|
||||
|
||||
/**
|
||||
|
13
app/Options.php
Normal file
13
app/Options.php
Normal file
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Options extends Model
|
||||
{
|
||||
public $fillable = [
|
||||
'option_name',
|
||||
'option_value'
|
||||
];
|
||||
}
|
@@ -13,7 +13,7 @@ class AppointmentPolicy
|
||||
/**
|
||||
* Determine whether the user can view any models.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function viewAny(User $user)
|
||||
@@ -24,8 +24,8 @@ class AppointmentPolicy
|
||||
/**
|
||||
* Determine whether the user can view the model.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Appointment $appointment
|
||||
* @param User $user
|
||||
* @param Appointment $appointment
|
||||
* @return mixed
|
||||
*/
|
||||
public function view(User $user, Appointment $appointment)
|
||||
@@ -36,7 +36,7 @@ class AppointmentPolicy
|
||||
/**
|
||||
* Determine whether the user can create models.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function create(User $user)
|
||||
@@ -47,8 +47,8 @@ class AppointmentPolicy
|
||||
/**
|
||||
* Determine whether the user can update the model.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Appointment $appointment
|
||||
* @param User $user
|
||||
* @param Appointment $appointment
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, Appointment $appointment)
|
||||
@@ -59,8 +59,8 @@ class AppointmentPolicy
|
||||
/**
|
||||
* Determine whether the user can delete the model.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Appointment $appointment
|
||||
* @param User $user
|
||||
* @param Appointment $appointment
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(User $user, Appointment $appointment)
|
||||
@@ -71,8 +71,8 @@ class AppointmentPolicy
|
||||
/**
|
||||
* Determine whether the user can restore the model.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Appointment $appointment
|
||||
* @param User $user
|
||||
* @param Appointment $appointment
|
||||
* @return mixed
|
||||
*/
|
||||
public function restore(User $user, Appointment $appointment)
|
||||
@@ -83,8 +83,8 @@ class AppointmentPolicy
|
||||
/**
|
||||
* Determine whether the user can permanently delete the model.
|
||||
*
|
||||
* @param \App\User $user
|
||||
* @param \App\Appointment $appointment
|
||||
* @param User $user
|
||||
* @param Appointment $appointment
|
||||
* @return mixed
|
||||
*/
|
||||
public function forceDelete(User $user, Appointment $appointment)
|
||||
|
@@ -5,6 +5,8 @@ namespace App\Policies;
|
||||
use App\Ban;
|
||||
use App\User;
|
||||
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class BanPolicy
|
||||
{
|
||||
@@ -41,7 +43,13 @@ class BanPolicy
|
||||
*/
|
||||
public function create(User $user)
|
||||
{
|
||||
return $user->hasRole('admin') && $user->isNot(Auth::user());
|
||||
Log::debug("Authorization check started", [
|
||||
'requiredRoles' => 'admin',
|
||||
'currentRoles' => $user->roles(),
|
||||
'hasRequiredRole' => $user->hasRole('admin'),
|
||||
'isCurrentUser' => Auth::user()->is($user)
|
||||
]);
|
||||
return $user->hasRole('admin') && Auth::user()->isNot($user);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -33,5 +33,7 @@ class AppServiceProvider extends ServiceProvider
|
||||
|
||||
Schema::defaultStringLength(191);
|
||||
User::observe(UserObserver::class);
|
||||
|
||||
$this->app['request']->server->set('HTTPS', $this->app->environment() != 'local');
|
||||
}
|
||||
}
|
||||
|
31
app/Providers/OptionsProvider.php
Normal file
31
app/Providers/OptionsProvider.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use App;
|
||||
|
||||
class OptionsProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
App::bind('smOptions', function (){
|
||||
return new App\Helpers\Options();
|
||||
});
|
||||
}
|
||||
}
|
40
app/Traits/AuthenticatesTwoFactor.php
Normal file
40
app/Traits/AuthenticatesTwoFactor.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Traits;
|
||||
|
||||
use Google2FA;
|
||||
use App\Http\Requests\Add2FASecretRequest;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
|
||||
trait AuthenticatesTwoFactor
|
||||
{
|
||||
|
||||
public function verify2FA(Add2FASecretRequest $request)
|
||||
{
|
||||
$isValid = Google2FA::verifyKey($request->user()->twofa_secret, $request->otp);
|
||||
|
||||
if ($isValid)
|
||||
{
|
||||
Google2FA::login();
|
||||
|
||||
Log::info('SECURITY (postauth): One-time password verification succeeded', [
|
||||
'initiator' => $request->user()->email,
|
||||
'ip' => $request->ip()
|
||||
]);
|
||||
|
||||
return redirect()->to($this->redirectTo);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log::warning('SECURITY (preauth): One-time password verification failed', [
|
||||
'initiator' => $request->user()->email,
|
||||
'ip' => $request->ip()
|
||||
]);
|
||||
|
||||
$request->session()->flash('error', 'Your one time password is invalid.');
|
||||
return redirect()->back();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
49
app/Traits/Cancellable.php
Normal file
49
app/Traits/Cancellable.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace App\Traits;
|
||||
|
||||
|
||||
use App\Facades\Options;
|
||||
|
||||
trait Cancellable
|
||||
{
|
||||
|
||||
public function chooseChannelsViaOptions()
|
||||
{
|
||||
$channels = [];
|
||||
|
||||
if (Options::getOption('enable_slack_notifications') == 1)
|
||||
{
|
||||
array_push($channels, 'slack');
|
||||
}
|
||||
elseif(Options::getOption('enable_email_notifications') == 1)
|
||||
{
|
||||
array_push($channels, 'email');
|
||||
}
|
||||
|
||||
return $channels;
|
||||
}
|
||||
|
||||
public function channels()
|
||||
{
|
||||
return ['mail'];
|
||||
}
|
||||
|
||||
public function via($notifiable)
|
||||
{
|
||||
if ($this->optOut($notifiable))
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
return $this->channels();
|
||||
}
|
||||
|
||||
|
||||
public function optOut($notifiable)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@@ -68,18 +68,24 @@ class User extends Authenticatable
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function isBanned()
|
||||
{
|
||||
return !$this->bans()->get()->isEmpty();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function isStaffMember()
|
||||
{
|
||||
return $this->hasAnyRole('reviewer', 'admin', 'hiringManager');
|
||||
}
|
||||
|
||||
public function has2FA()
|
||||
{
|
||||
return !is_null($this->twofa_secret);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function routeNotificationForSlack($notification)
|
||||
|
@@ -9,6 +9,7 @@
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^7.2.5",
|
||||
"ext-imagick": "*",
|
||||
"ext-json": "*",
|
||||
"arcanedev/log-viewer": "^7.0",
|
||||
"doctrine/dbal": "^2.10",
|
||||
@@ -22,6 +23,8 @@
|
||||
"laravel/slack-notification-channel": "^2.0",
|
||||
"laravel/tinker": "^2.0",
|
||||
"laravel/ui": "^2.0",
|
||||
"mcamara/laravel-localization": "^1.5",
|
||||
"pragmarx/google2fa-laravel": "^1.3",
|
||||
"sentry/sentry-laravel": "1.7.1",
|
||||
"spatie/laravel-permission": "^3.13"
|
||||
},
|
||||
|
2202
composer.lock
generated
2202
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -14,7 +14,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'title' => 'Raspberry Net',
|
||||
'title' => env('APP_NAME'),
|
||||
'title_prefix' => '',
|
||||
'title_postfix' => '',
|
||||
|
||||
@@ -45,12 +45,12 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'logo' => 'RaspberryNet Staff',
|
||||
'logo_img' => 'https://www.raspberrypi.org/app/uploads/2020/05/Raspberry-Pi-OS-downloads-image-150x150-1.png',
|
||||
'logo' => env('APP_NAME'),
|
||||
'logo_img' => env('APP_LOGO'),
|
||||
'logo_img_class' => 'brand-image img-circle elevation-3',
|
||||
'logo_img_xl' => null,
|
||||
'logo_img_xl_class' => 'brand-image-xs',
|
||||
'logo_img_alt' => 'Raspberry Network Staff Temporary Logo',
|
||||
'logo_img_alt' => env('APP_NAME') . '\'s Temporary Logo',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -209,15 +209,15 @@ return [
|
||||
|
||||
'menu' => [
|
||||
[
|
||||
'text' => 'Home',
|
||||
'icon' => 'fas fa-home',
|
||||
'url' => 'dashboard'
|
||||
'text' => 'Home',
|
||||
'icon' => 'fas fa-home',
|
||||
'url' => 'dashboard'
|
||||
],
|
||||
[
|
||||
'text' => 'Directory',
|
||||
'icon' => 'fas fa-users',
|
||||
'url' => 'users/directory',
|
||||
'can' => 'profiles.view.others'
|
||||
'text' => 'Directory',
|
||||
'icon' => 'fas fa-users',
|
||||
'url' => 'users/directory',
|
||||
'can' => 'profiles.view.others'
|
||||
],
|
||||
[
|
||||
'header' => 'Applications',
|
||||
@@ -252,10 +252,10 @@ return [
|
||||
'can' => ['applications.view.all', 'applications.vote']
|
||||
],
|
||||
[
|
||||
'text' => 'All applications',
|
||||
'url' => 'applications/staff/all',
|
||||
'icon' => 'fas fa-list-ol',
|
||||
'can' => 'applications.view.all'
|
||||
'text' => 'All applications',
|
||||
'url' => 'applications/staff/all',
|
||||
'icon' => 'fas fa-list-ol',
|
||||
'can' => 'applications.view.all'
|
||||
],
|
||||
[
|
||||
'text' => 'Outstanding Applications',
|
||||
@@ -298,8 +298,8 @@ return [
|
||||
'can' => 'admin.userlist'
|
||||
],
|
||||
[
|
||||
'text' => 'Hiring Management',
|
||||
'icon' => 'far fa-calendar-plus',
|
||||
'text' => 'Hiring Management',
|
||||
'icon' => 'far fa-calendar-plus',
|
||||
'can' => 'admin.hiring.*',
|
||||
'submenu' => [
|
||||
[
|
||||
@@ -331,17 +331,17 @@ return [
|
||||
'can' => 'admin.notificationsettings',
|
||||
'submenu' => [
|
||||
[
|
||||
'text' => 'Global Notification Settings',
|
||||
'icon' => 'far fa-bell',
|
||||
'url' => '/admin/notifications',
|
||||
'can' => 'admin.notificationsettings.edit'
|
||||
'text' => 'Global Application Settings',
|
||||
'icon' => 'fas fa-cogs',
|
||||
'url' => '/admin/settings',
|
||||
'can' => 'admin.settings.view'
|
||||
],
|
||||
[
|
||||
'text' => 'Developer Tools',
|
||||
'icon' => 'fas fa-code',
|
||||
'url' => '/admin/devtools',
|
||||
'can' => 'admin.developertools.use'
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
[
|
||||
@@ -368,7 +368,6 @@ return [
|
||||
JeroenNoten\LaravelAdminLte\Menu\Filters\HrefFilter::class,
|
||||
JeroenNoten\LaravelAdminLte\Menu\Filters\SearchFilter::class,
|
||||
JeroenNoten\LaravelAdminLte\Menu\Filters\ActiveFilter::class,
|
||||
JeroenNoten\LaravelAdminLte\Menu\Filters\SubmenuFilter::class,
|
||||
JeroenNoten\LaravelAdminLte\Menu\Filters\ClassesFilter::class,
|
||||
JeroenNoten\LaravelAdminLte\Menu\Filters\GateFilter::class,
|
||||
JeroenNoten\LaravelAdminLte\Menu\Filters\LangFilter::class,
|
||||
|
@@ -15,6 +15,19 @@ return [
|
||||
|
||||
'name' => env('APP_NAME', 'Laravel'),
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Homepage
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the application's homepage.
|
||||
| If you have a main website other than this application itself, you can link it here.
|
||||
| It will be used exclusively on the "Homepage" header menu.
|
||||
|
|
||||
*/
|
||||
'sitehomepage' => env('APP_SITEHOMEPAGE', 'https://google.com'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Environment
|
||||
@@ -180,6 +193,7 @@ return [
|
||||
App\Providers\EventServiceProvider::class,
|
||||
App\Providers\RouteServiceProvider::class,
|
||||
\App\Providers\MojangStatusProvider::class,
|
||||
\App\Providers\OptionsProvider::class
|
||||
|
||||
],
|
||||
|
||||
@@ -235,7 +249,8 @@ return [
|
||||
'UUID' => App\Facades\UUID::class,
|
||||
'IP' => App\Facades\IP::class,
|
||||
'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class,
|
||||
'ContextAwareValidator' => App\Facades\ContextAwareValidation::class
|
||||
'ContextAwareValidator' => App\Facades\ContextAwareValidation::class,
|
||||
'Settings' => App\Facades\Options::class
|
||||
|
||||
],
|
||||
|
||||
|
79
config/google2fa.php
Normal file
79
config/google2fa.php
Normal file
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
* Enable / disable Google2FA.
|
||||
*/
|
||||
'enabled' => env('OTP_ENABLED', true),
|
||||
|
||||
/*
|
||||
* Lifetime in minutes.
|
||||
*
|
||||
* In case you need your users to be asked for a new one time passwords from time to time.
|
||||
*/
|
||||
'lifetime' => env('OTP_LIFETIME', 0), // 0 = eternal
|
||||
|
||||
/*
|
||||
* Renew lifetime at every new request.
|
||||
*/
|
||||
'keep_alive' => env('OTP_KEEP_ALIVE', true),
|
||||
|
||||
/*
|
||||
* Auth container binding.
|
||||
*/
|
||||
'auth' => 'auth',
|
||||
|
||||
/*
|
||||
* 2FA verified session var.
|
||||
*/
|
||||
|
||||
'session_var' => 'google2fa',
|
||||
|
||||
/*
|
||||
* One Time Password request input name.
|
||||
*/
|
||||
'otp_input' => 'otp',
|
||||
|
||||
/*
|
||||
* One Time Password Window.
|
||||
*/
|
||||
'window' => 1,
|
||||
|
||||
/*
|
||||
* Forbid user to reuse One Time Passwords.
|
||||
*/
|
||||
'forbid_old_passwords' => false,
|
||||
|
||||
/*
|
||||
* User's table column for google2fa secret.
|
||||
*/
|
||||
'otp_secret_column' => 'twofa_secret',
|
||||
|
||||
/*
|
||||
* One Time Password View.
|
||||
*/
|
||||
'view' => 'auth.2fa',
|
||||
|
||||
/*
|
||||
* One Time Password error message.
|
||||
*/
|
||||
'error_messages' => [
|
||||
'wrong_otp' => "Your one time code was incorrect.",
|
||||
'cannot_be_empty' => 'The one time code cannot be empty.',
|
||||
'unknown' => 'An unknown error has occurred. Please try again.',
|
||||
],
|
||||
|
||||
/*
|
||||
* Throw exceptions or just fire events?
|
||||
*/
|
||||
'throw_exceptions' => env('OTP_THROW_EXCEPTION', true),
|
||||
|
||||
/*
|
||||
* Which image backend to use for generating QR codes?
|
||||
*
|
||||
* Supports imagemagick, svg and eps
|
||||
*/
|
||||
'qrcode_image_backend' => \PragmaRX\Google2FALaravel\Support\Constants::QRCODE_IMAGE_BACKEND_IMAGEMAGICK,
|
||||
|
||||
];
|
70
config/laravellocalization.php
Normal file
70
config/laravellocalization.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
// Uncomment the languages that your site supports - or add new ones.
|
||||
// These are sorted by the native name, which is the order you might show them in a language selector.
|
||||
// Regional languages are sorted by their base language, so "British English" sorts as "English, British"
|
||||
'supportedLocales' => [
|
||||
'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'],
|
||||
'es' => ['name' => 'Spanish', 'script' => 'Latn', 'native' => 'Español', 'regional' => 'es_ES'],
|
||||
'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'Português', 'regional' => 'pt_PT'],
|
||||
'fr' => ['name' => 'French', 'script' => 'Latn', 'native' => 'Français', 'regional' => 'fr_FR'],
|
||||
],
|
||||
|
||||
// Requires middleware `LaravelSessionRedirect.php`.
|
||||
//
|
||||
// Automatically determine locale from browser (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)
|
||||
// on first call if it's not defined in the URL. Redirect user to computed localized url.
|
||||
// For example, if users browser language is `de`, and `de` is active in the array `supportedLocales`,
|
||||
// the `/about` would be redirected to `/de/about`.
|
||||
//
|
||||
// The locale will be stored in session and only be computed from browser
|
||||
// again if the session expires.
|
||||
//
|
||||
// If false, system will take app.php locale attribute
|
||||
'useAcceptLanguageHeader' => true,
|
||||
|
||||
// If `hideDefaultLocaleInURL` is true, then a url without locale
|
||||
// is identical with the same url with default locale.
|
||||
// For example, if `en` is default locale, then `/en/about` and `/about`
|
||||
// would be identical.
|
||||
//
|
||||
// If in addition the middleware `LaravelLocalizationRedirectFilter` is active, then
|
||||
// every url with default locale is redirected to url without locale.
|
||||
// For example, `/en/about` would be redirected to `/about`.
|
||||
// It is recommended to use `hideDefaultLocaleInURL` only in
|
||||
// combination with the middleware `LaravelLocalizationRedirectFilter`
|
||||
// to avoid duplicate content (SEO).
|
||||
//
|
||||
// If `useAcceptLanguageHeader` is true, then the first time
|
||||
// the locale will be determined from browser and redirect to that language.
|
||||
// After that, `hideDefaultLocaleInURL` behaves as usual.
|
||||
'hideDefaultLocaleInURL' => true,
|
||||
|
||||
// If you want to display the locales in particular order in the language selector you should write the order here.
|
||||
//CAUTION: Please consider using the appropriate locale code otherwise it will not work
|
||||
//Example: 'localesOrder' => ['es','en'],
|
||||
'localesOrder' => ['en', 'pt', 'fr', 'es'],
|
||||
|
||||
// If you want to use custom lang url segments like 'at' instead of 'de-AT', you can use the mapping to tallow the LanguageNegotiator to assign the descired locales based on HTTP Accept Language Header. For example you want ot use 'at', so map HTTP Accept Language Header 'de-AT' to 'at' (['de-AT' => 'at']).
|
||||
'localesMapping' => [],
|
||||
|
||||
// Locale suffix for LC_TIME and LC_MONETARY
|
||||
// Defaults to most common ".UTF-8". Set to blank on Windows systems, change to ".utf8" on CentOS and similar.
|
||||
'utf8suffix' => env('LARAVELLOCALIZATION_UTF8SUFFIX', '.UTF-8'),
|
||||
|
||||
// URLs which should not be processed, e.g. '/nova', '/nova/*', '/nova-api/*' or specific application URLs
|
||||
// Defaults to []
|
||||
'urlsIgnored' => [
|
||||
'/js/*',
|
||||
'/img/*',
|
||||
'/css/*',
|
||||
'/vendor/*',
|
||||
'/app.css',
|
||||
'/robots.txt',
|
||||
'/slides/*',
|
||||
'/auth/logout'
|
||||
],
|
||||
|
||||
];
|
5
crowdin.yml
Normal file
5
crowdin.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
files:
|
||||
- source: /**/lang/en/*.php
|
||||
ignore:
|
||||
- /**/lang/en/*2.php
|
||||
translation: /**/lang/%two_letters_code%/%original_file_name%
|
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class AddTwofaSecretToUsers extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->string('twofa_secret')->nullable()->after('password');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
$table->dropColumn('twofa_secret');
|
||||
});
|
||||
}
|
||||
}
|
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateOptionsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('options', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('option_name');
|
||||
$table->string('option_value');
|
||||
$table->string('friendly_name');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('options');
|
||||
}
|
||||
}
|
@@ -13,5 +13,6 @@ class DatabaseSeeder extends Seeder
|
||||
{
|
||||
$this->call(PermissionSeeder::class);
|
||||
$this->call(UserSeeder::class);
|
||||
$this->call(DefaultOptionsSeeder::class);
|
||||
}
|
||||
}
|
||||
|
27
database/seeds/DefaultOptionsSeeder.php
Normal file
27
database/seeds/DefaultOptionsSeeder.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
use App\Facades\Options;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DefaultOptionsSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
Options::setOption('notify_new_application_email', true, 'Notify when a new application comes through'); // done
|
||||
Options::setOption('notify_application_comment', false, 'Notify when someone comments on an application'); // 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_applicant_approved', true, 'Notify when an applicant is approved'); // done
|
||||
Options::setOption('notify_vacancystatus_change', false, 'Notify when a vacancy\'s status changes'); // done
|
||||
|
||||
|
||||
Options::setOption('enable_slack_notifications', true, 'Enable slack notifications');
|
||||
Options::setOption('enable_email_notifications', true, 'Enable e-mail notifications');
|
||||
|
||||
}
|
||||
}
|
31
database/seeds/NewPermissions.php
Normal file
31
database/seeds/NewPermissions.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class NewPermissions extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$developer = Role::create([
|
||||
'name' => 'developer'
|
||||
]);
|
||||
|
||||
$admin = Role::where('name', 'admin')->first();
|
||||
|
||||
Permission::create(['name' => 'admin.settings.view']);
|
||||
Permission::create(['name' => 'admin.settings.edit']);
|
||||
|
||||
$developer->givePermissionTo('admin.developertools.use');
|
||||
$admin->givePermissionTo('admin.settings.view');
|
||||
$admin->givePermissionTo('admin.settings.edit');
|
||||
|
||||
|
||||
}
|
||||
}
|
9993
package-lock.json
generated
9993
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"postinstall": "npm run prod",
|
||||
"dev": "npm run development",
|
||||
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||
"watch": "npm run development -- --watch",
|
||||
|
6
public/css/authpages.css
vendored
6
public/css/authpages.css
vendored
@@ -1,6 +0,0 @@
|
||||
/* overrides customizations for the AdminLTE auth pages */
|
||||
|
||||
.login-page, .register-page {
|
||||
background-image: url('/img/authbg.jpg') !important;
|
||||
background-size: cover !important;
|
||||
}
|
81
public/css/login.css
vendored
Normal file
81
public/css/login.css
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
body {
|
||||
font-family: "Karla", sans-serif;
|
||||
background-color: #d0d0ce;
|
||||
min-height: 100vh; }
|
||||
|
||||
.brand-wrapper {
|
||||
margin-bottom: 19px; }
|
||||
.brand-wrapper .logo {
|
||||
height: 37px; }
|
||||
|
||||
.login-card {
|
||||
border: 0;
|
||||
border-radius: 27.5px;
|
||||
box-shadow: 0 10px 30px 0 rgba(172, 168, 168, 0.43);
|
||||
overflow: hidden; }
|
||||
.login-card-img {
|
||||
border-radius: 0;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
-o-object-fit: cover;
|
||||
object-fit: cover; }
|
||||
.login-card .card-body {
|
||||
padding: 85px 60px 60px; }
|
||||
@media (max-width: 422px) {
|
||||
.login-card .card-body {
|
||||
padding: 35px 24px; } }
|
||||
.login-card-description {
|
||||
font-size: 25px;
|
||||
color: #000;
|
||||
font-weight: normal;
|
||||
margin-bottom: 23px; }
|
||||
.login-card form {
|
||||
max-width: 326px; }
|
||||
.login-card .form-control {
|
||||
border: 1px solid #d5dae2;
|
||||
padding: 15px 25px;
|
||||
margin-bottom: 20px;
|
||||
min-height: 45px;
|
||||
font-size: 13px;
|
||||
line-height: 15;
|
||||
font-weight: normal; }
|
||||
.login-card .form-control::-webkit-input-placeholder {
|
||||
color: #919aa3; }
|
||||
.login-card .form-control::-moz-placeholder {
|
||||
color: #919aa3; }
|
||||
.login-card .form-control:-ms-input-placeholder {
|
||||
color: #919aa3; }
|
||||
.login-card .form-control::-ms-input-placeholder {
|
||||
color: #919aa3; }
|
||||
.login-card .form-control::placeholder {
|
||||
color: #919aa3; }
|
||||
.login-card .login-btn {
|
||||
padding: 13px 20px 12px;
|
||||
background-color: #000;
|
||||
border-radius: 4px;
|
||||
font-size: 17px;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: #fff;
|
||||
margin-bottom: 24px; }
|
||||
.login-card .login-btn:hover {
|
||||
border: 1px solid #000;
|
||||
background-color: transparent;
|
||||
color: #000; }
|
||||
.login-card .forgot-password-link {
|
||||
font-size: 14px;
|
||||
color: #919aa3;
|
||||
margin-bottom: 12px; }
|
||||
.login-card-footer-text {
|
||||
font-size: 16px;
|
||||
color: #0d2366;
|
||||
margin-bottom: 60px; }
|
||||
@media (max-width: 767px) {
|
||||
.login-card-footer-text {
|
||||
margin-bottom: 24px; } }
|
||||
.login-card-footer-nav a {
|
||||
font-size: 14px;
|
||||
color: #919aa3; }
|
||||
|
||||
/*# sourceMappingURL=login.css.map */
|
1
public/css/login.css.map
Executable file
1
public/css/login.css.map
Executable file
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["login.scss"],"names":[],"mappings":"AAAA;EACI,gCAAgC;EAChC,yBAAyB;EACzB,iBAAiB,EAAA;;AAGrB;EACI,mBAAmB,EAAA;EADvB;IAIQ,YAAY,EAAA;;AAIpB;EACI,SAAS;EACT,qBAAqB;EACrB,mDAAmD;EACnD,gBAAgB,EAAA;EAGhB;IACI,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,oBAAiB;OAAjB,iBAAiB,EAAA;EAZzB;IAeQ,uBAAuB,EAAA;IAEvB;MAjBR;QAkBY,kBAAkB,EAAA,EAEzB;EAED;IACI,eAAe;IACf,WAAW;IACX,mBAAmB;IACnB,mBAAmB,EAAA;EA1B3B;IA8BQ,gBAAgB,EAAA;EA9BxB;IAkCQ,yBAAyB;IACzB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,mBAAmB,EAAA;IAxC3B;MA2CY,cAAc,EAAA;IA3C1B;MA2CY,cAAc,EAAA;IA3C1B;MA2CY,cAAc,EAAA;IA3C1B;MA2CY,cAAc,EAAA;IA3C1B;MA2CY,cAAc,EAAA;EA3C1B;IAgDQ,uBAAuB;IACvB,sBAAsB;IACtB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,mBAAmB,EAAA;IAvD3B;MA0DY,sBAAsB;MACtB,6BAA6B;MAC7B,WAAW,EAAA;EA5DvB;IAiEQ,eAAe;IACf,cAAc;IACd,mBAAmB,EAAA;EAGvB;IACI,eAAe;IACf,cAAc;IACd,mBAAmB,EAAA;IAEnB;MALJ;QAMQ,mBAAmB,EAAA,EAE1B;EAEA;IAEO,eAAe;IACf,cAAc,EAAA","file":"login.css","sourcesContent":["body {\n font-family: \"Karla\", sans-serif;\n background-color: #d0d0ce;\n min-height: 100vh;\n}\n\n.brand-wrapper {\n margin-bottom: 19px;\n\n .logo {\n height: 37px;\n }\n}\n\n.login-card {\n border: 0;\n border-radius: 27.5px;\n box-shadow: 0 10px 30px 0 rgba(172, 168, 168, 0.43);\n overflow: hidden;\n\n\n &-img {\n border-radius: 0;\n position: absolute;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n .card-body {\n padding: 85px 60px 60px;\n\n @media (max-width: 422px) {\n padding: 35px 24px;\n }\n }\n\n &-description {\n font-size: 25px;\n color: #000;\n font-weight: normal;\n margin-bottom: 23px;\n }\n\n form {\n max-width: 326px;\n }\n\n .form-control {\n border: 1px solid #d5dae2;\n padding: 15px 25px;\n margin-bottom: 20px;\n min-height: 45px;\n font-size: 13px;\n line-height: 15;\n font-weight: normal;\n\n &::placeholder {\n color: #919aa3;\n }\n }\n\n .login-btn {\n padding: 13px 20px 12px;\n background-color: #000;\n border-radius: 4px;\n font-size: 17px;\n font-weight: bold;\n line-height: 20px;\n color: #fff;\n margin-bottom: 24px;\n\n &:hover {\n border: 1px solid #000;\n background-color: transparent;\n color: #000;\n }\n }\n\n .forgot-password-link {\n font-size: 14px;\n color: #919aa3;\n margin-bottom: 12px;\n }\n\n &-footer-text {\n font-size: 16px;\n color: #0d2366;\n margin-bottom: 60px;\n\n @media (max-width: 767px) {\n margin-bottom: 24px;\n }\n }\n\n &-footer-nav {\n a {\n font-size: 14px;\n color: #919aa3;\n }\n }\n}\n"]}
|
BIN
public/img/login.jpg
Executable file
BIN
public/img/login.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 436 KiB |
25
resources/js/app.js
vendored
25
resources/js/app.js
vendored
@@ -43,28 +43,3 @@ $("#comment").keyup(function(){
|
||||
$("#submitComment").on('click', function(){
|
||||
$("#newComment").submit();
|
||||
});
|
||||
|
||||
window.Vue = require('vue');
|
||||
|
||||
/**
|
||||
* The following block of code may be used to automatically register your
|
||||
* Vue components. It will recursively scan this directory for the Vue
|
||||
* components and automatically register them with their "basename".
|
||||
*
|
||||
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
|
||||
*/
|
||||
|
||||
// const files = require.context('./', true, /\.vue$/i)
|
||||
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
|
||||
|
||||
Vue.component('example-component', require('./components/ExampleComponent.vue').default);
|
||||
|
||||
/**
|
||||
* Next, we will create a fresh Vue application instance and attach it to
|
||||
* the page. Then, you may begin adding components to this application
|
||||
* or customize the JavaScript scaffolding to fit your unique needs.
|
||||
*/
|
||||
|
||||
const app = new Vue({
|
||||
el: '#app',
|
||||
});
|
||||
|
610
resources/lang/en/messages.php
Normal file
610
resources/lang/en/messages.php
Normal file
@@ -0,0 +1,610 @@
|
||||
<?php
|
||||
/*
|
||||
* -- Information for translators | READ BEFORE TRANSLATING ANYTHING ---
|
||||
* In this file, only translate messages to the right, in this fashion:
|
||||
* 'something' => 'translate-me'
|
||||
* Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon.
|
||||
* Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as:
|
||||
* auth.php, pagination.php, passwords.php, and validation.php.
|
||||
* It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote
|
||||
*
|
||||
* Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters.
|
||||
* If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly.
|
||||
*
|
||||
* Thank you for translating!
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// ============== MENU TRANSLATIONS ======================
|
||||
|
||||
|
||||
'menu' => [
|
||||
|
||||
'my_apps' => 'My Applications',
|
||||
'current_apps' => 'Current Applications',
|
||||
'profile_settings' => 'Profile Settings',
|
||||
'hiring_man' => 'Hiring Management',
|
||||
'all_forms' => 'All Forms',
|
||||
'app_settings' => 'App Settings',
|
||||
'global_app_settings' => 'Global App Settings',
|
||||
'system_logs' => 'System Logs'
|
||||
],
|
||||
|
||||
|
||||
|
||||
// ============== REUSABLE, GENERIC STRINGS ===============
|
||||
|
||||
'reusable' => [
|
||||
'created_at' => 'Created at',
|
||||
'updated_at' => 'Updated at',
|
||||
'actions' => 'Actions',
|
||||
'delete' => 'Delete',
|
||||
'status' => 'Status',
|
||||
'view' => 'View',
|
||||
'view_c' => 'View Details',
|
||||
'no_access' => 'Application Access Denied',
|
||||
'validation_err' => 'Validation error!',
|
||||
'description' => 'Description',
|
||||
'join_date' => 'Join Date',
|
||||
'my_acc' => 'My Account',
|
||||
'confirm' => 'Please Confirm',
|
||||
'confirm_plain' => 'Confirm',
|
||||
'confirm_click' => 'Click to Confirm',
|
||||
'date' => 'Date',
|
||||
'datetime' => 'Time & Date',
|
||||
'location' => 'Location',
|
||||
'none_yet' => 'None yet',
|
||||
'reason' => 'Reason',
|
||||
'days' => 'Days',
|
||||
'weeks' => 'Weeks',
|
||||
'months' => 'Months',
|
||||
'years' => 'Years',
|
||||
'yes' => 'Yes',
|
||||
'no' => 'No',
|
||||
'roles' => 'Roles',
|
||||
'member_since' => 'Member since :date',
|
||||
'lookup' => 'Lookup :ipAddress',
|
||||
'abt' => 'About',
|
||||
'acc' => 'Account',
|
||||
'settings' => 'Settings',
|
||||
'profile' => 'My Profile',
|
||||
'code' => 'code',
|
||||
'here' => 'here',
|
||||
'auth_req' => 'Please authenticate',
|
||||
'eligible' => 'Eligible',
|
||||
'ineligible' => 'Ineligible',
|
||||
'schedule' => 'Schedule',
|
||||
'schedule_action' => 'Schedule an Appointment',
|
||||
'platform' => 'Platform',
|
||||
'notepad' => 'Shared Notepad', // Context: The shared notepad that appears when votes are needed,
|
||||
'appointment_info' => 'Appointment Information',
|
||||
'ip_info' => 'IP Address Information for'
|
||||
],
|
||||
|
||||
|
||||
// ============== HOMEPAGE MESSAGES ======================
|
||||
|
||||
'home' => 'Home',
|
||||
'homepagetxt' => 'Homepage',
|
||||
'login' => 'Sign in',
|
||||
'logout' => 'Sign out',
|
||||
'register' => 'Sign up',
|
||||
'dashboard' => 'Dashboard',
|
||||
'back' => 'Go back',
|
||||
'homepage_welcome' => 'Welcome to our team management center!',
|
||||
'homepage_explainer_line1' => 'Here, you can apply for open staff member positions, view your application status, and manage your profile.',
|
||||
'homepage_explainer_line2' => 'Sign up with Email to continue.',
|
||||
'footer_copy' => 'All rights reserved',
|
||||
'global_error' => 'An error occurred',
|
||||
'global_success' => 'Success!',
|
||||
'txt_learn_more' => 'Learn more',
|
||||
'opening_nodetails' => 'There don\'t seem to be any details',
|
||||
'opening_nodetails_exp' => 'This opening does not have any details yet.',
|
||||
'details_m_title' => 'Opening details',
|
||||
'open_positions' => 'Open Positions',
|
||||
'last_updated' => 'Last updated',
|
||||
'open_position_count' => '{1} There is :count open position!|[2,*] There are :count open positions!',
|
||||
'ineligible_days_remaining' => 'Ineligible (:days) day(s) remaining',
|
||||
'txt_apply' => 'Apply', // Context: Apply as in applying for a "job", e.g. registering for a job
|
||||
'txt_application' => 'Application',
|
||||
'application_closed' => 'Applications Closed',
|
||||
'application_closed_intro' => 'Hello there!',
|
||||
'application_closed_intro_line2' => '
|
||||
We are currently not hiring any new staff members at the moment. If you\'d like to apply, check out our Discord\'s
|
||||
announcement channel for news when a new position opens.
|
||||
Our application cycle usually lasts two weeks, so if you\'re seeing this, it\'s because it finished, and new one will begin soon.
|
||||
',
|
||||
'where_work' => 'Where you\'ll work',
|
||||
'join_team' => 'Join The Team',
|
||||
'join_team_cta' => 'Join the team today and help out network grow and prosper!',
|
||||
'contact_cta' => 'Any questions? Leave a message!',
|
||||
'contact_disclaimer' => '*This is not an application form. Any applications sent here will be ignored.',
|
||||
'contactlabel_name' => 'Name',
|
||||
'contactlabel_email' => 'E-mail',
|
||||
'contactlabel_subject' => 'Subject (ex. Site Suggestion)',
|
||||
'contactlabel_send' => 'Send',
|
||||
|
||||
|
||||
|
||||
// ======================== AUTHENTICATION MESSAGES ===========================
|
||||
|
||||
'2fa_txt' => 'Two-Factor Authentication',
|
||||
'2fa_sronly' => 'Two-factor secret code (You can find this on Google Authenticator)',
|
||||
'2fa_lostcode' => 'Don\'t know the code?',
|
||||
'2fa_cancel_login' => 'Cancel login (logout)',
|
||||
|
||||
'terms' => 'Terms of Use',
|
||||
'ppolicy' => 'Privacy Policy',
|
||||
|
||||
'signin_cta' => 'Sign into your account',
|
||||
'password' => 'Password',
|
||||
'remember_me' => 'Remember me',
|
||||
'forgot_pw' => 'Forgot password?',
|
||||
'register_cta' => 'Register here',
|
||||
'no_acc' => 'Don\'t have an account?',
|
||||
'register_acc' => 'Register a new account',
|
||||
'pwsec' => [
|
||||
'line1' => 'Basic password security',
|
||||
'line2' => 'For your security, we implement strict password policies. It\'s also advisable to let your password manager or browser generate and save passwords for you (if it\'s a private device).',
|
||||
'line3' => 'Passwords must be a combination of: ',
|
||||
'line4' => 'A minimum of 10 characters;',
|
||||
'line5' => 'At least 3 uppercase characters;',
|
||||
'line6' => 'At least 3 numbers;',
|
||||
'line7' => 'Any number of special characters.'
|
||||
],
|
||||
'sronly_confirmpassword' => 'Confirm Password', // hint: sronly stands for screen-reader only
|
||||
'sronly_mcusername' => 'Minecraft Username (Premium)',
|
||||
'have_account' => 'Have an account with us?',
|
||||
'login_here' => 'Login here',
|
||||
'register_txt' => 'Register',
|
||||
|
||||
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
|
||||
|
||||
'modal_close' => 'Close',
|
||||
'component_nopermission' => 'We\'re sorry, but you do not have permission to access this web page.',
|
||||
'component_accessdenied' => 'Access Denied',
|
||||
'component_contact' => 'Please contact your administrator if you believe this was in error.',
|
||||
'welcome_back' => 'Welcome back,',
|
||||
'eligible' => 'Eligible',
|
||||
'ineligible' => 'Ineligible',
|
||||
'eligibility_status' => 'Your current application eligibility status: :badgeStatus',
|
||||
'ongoing_apps' => 'Ongoing apps',
|
||||
'denied_apps' => 'Denied apps',
|
||||
'users_staff' => 'Total Users + Staff',
|
||||
'new_apps' => 'New applications',
|
||||
'v_backlog' => 'Vote backlog',
|
||||
'ranks' => 'Available ranks',
|
||||
'open' => 'Open',
|
||||
'closed' => 'Closed',
|
||||
'upcoming' => 'Your upcoming interviews',
|
||||
'soon' => 'Coming soon',
|
||||
|
||||
|
||||
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
|
||||
|
||||
'adm' => 'Administration',
|
||||
'devtools' => 'Developer Tools',
|
||||
'devtools_evn' => 'Event Management',
|
||||
'devoptions' => 'Developer Options',
|
||||
'forceeval' => 'Please choose an application to force re-evaluation',
|
||||
'appid' => 'Application ID',
|
||||
'no_valid_app' => 'There are no valid applications',
|
||||
'choose_app' => 'Choose an application',
|
||||
'dispatch_event' => 'Dispatch event now',
|
||||
'devtools_warn' => 'Do not use these options if you don\'t know what you\'re doing, even if you have access to this page.',
|
||||
'warn' => 'Warning',
|
||||
'override_votes' => 'Override Vote Evaluation',
|
||||
'artisan_evaluate' => 'Artisan: Evaluate Votes Now', // Tip: Artisan is a program name, therefore not translatable
|
||||
'devtools_info' => 'This panel may be also used to completely override the vote system in stalemate scenarios',
|
||||
|
||||
|
||||
'forms' => 'Forms',
|
||||
'positions' => 'Positions', // Context: Positions as in job opening
|
||||
'edit_form' => 'Edit Form',
|
||||
'edt' => 'Editor',
|
||||
'edit' => 'Edit',
|
||||
'edt_action' => 'Editing',
|
||||
'txtbox' => 'Textbox',
|
||||
'multiline' => 'Multi line answer',
|
||||
'checkbox' => 'Checkbox',
|
||||
'field_type' => 'Choose a field type',
|
||||
'save_exit' => 'Save & Quit',
|
||||
'new_field' => 'New field',
|
||||
'vacancy_edit' => 'Vacancy Editor',
|
||||
'new_vacancy' => 'New Vacancy',
|
||||
'form_consistency' => 'For consistency purposes, grayed out fields can\'t be edited.',
|
||||
|
||||
'vacancy' => [
|
||||
'add' => 'Add vacancy',
|
||||
'name' => 'Vacancy Name',
|
||||
'description' => 'Vacancy Description',
|
||||
'details' => 'Vacancy Details',
|
||||
'markdown' => 'Markdown Supported',
|
||||
'no_details' => 'No details yet... Add some!',
|
||||
'permission_group' => 'Permission Group',
|
||||
'permission_group_tooltip' => 'The permission group from your server/network\'s permissions manager. Compatible with Luckperms and PEX.',
|
||||
'discord_roleid' => 'Discord Role ID',
|
||||
'discord_roleid_tooltip' => 'Discord Desktop: Go to your Account Settings > Appearance -> Advanced and toggle Developer Mode. On your server\'s roles tab, right click any role to copy it\'s ID.',
|
||||
'current_form' => 'Current Form (uneditable)',
|
||||
'remaining_slots' => 'Remaining slots',
|
||||
'free_slots' => 'Free slots',
|
||||
'free_slots_tooltip' => 'How many submissions before the vacancy stops accepting new applicants?',
|
||||
'save' => 'Save Changes',
|
||||
'cancel' => 'Cancel',
|
||||
'close_vacancy' => 'Close Position',
|
||||
'description_tooltip' => 'Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary',
|
||||
''
|
||||
|
||||
],
|
||||
|
||||
'form' => 'Form',
|
||||
|
||||
'form_builder' => [
|
||||
'builder' => 'Form Builder',
|
||||
'builder_name' => 'Application Form Management Tool',
|
||||
'name_form' => 'Name your form...',
|
||||
'save_form' => 'Save Form',
|
||||
],
|
||||
|
||||
'form_preview' => [
|
||||
'preview' => 'Preview',
|
||||
'title' => 'Application Form Preview',
|
||||
'looks' => 'This is how your form looks like to applicants',
|
||||
'f_info' => 'You may edit it and add more fields later.',
|
||||
''
|
||||
],
|
||||
|
||||
'forms_p' => [
|
||||
|
||||
'available_forms' => 'Available forms',
|
||||
'form_title' => 'Form title',
|
||||
'empty_noforms' => 'Nothing to see here! Please add some forms first.',
|
||||
'new_form' => 'NEW FORM'
|
||||
],
|
||||
|
||||
'players' => [
|
||||
|
||||
'reg_players' => 'Registered Players',
|
||||
'reg_players_staff' => 'See Registered Players (Applicant Pool)',
|
||||
'total_banned' => 'Total Banned Players',
|
||||
'search' => 'Search players',
|
||||
'f_p_search' => 'Full/partial email search',
|
||||
'p_disclaimer' => 'Please note: This list only includes players registered in the team management portal. In a future release, all network players will be shown here.',
|
||||
'listing' => 'Player Listing',
|
||||
'reg_date' => 'Registration Date',
|
||||
'ign' => 'IGN', // Context: Short for In-Game Name
|
||||
'banned' => 'Banned',
|
||||
'active' => 'Active',
|
||||
'no_reg' => 'There are no registered players!',
|
||||
'no_reg_exp' => "
|
||||
Registered players are those without a staff role in the team management application.
|
||||
There may be other users registered in the platform, but they won't be displayed here.
|
||||
",
|
||||
'see_staff' => 'See Staff Members'
|
||||
|
||||
],
|
||||
|
||||
'positions_p' => [
|
||||
|
||||
'application_form' => 'Application Form',
|
||||
'select_form' => 'Select a form...',
|
||||
'no_form_error' => "
|
||||
You cannot create a vacancy without any forms with which people would apply.
|
||||
create a form first, then, create a vacancy.
|
||||
A single form is allowed to have multiple vacancies, so you can attach future vacancies to the same form if you'd like.
|
||||
",
|
||||
'new_pos' => 'NEW POSITION',
|
||||
'empty_pos_warning' => 'Nothing to see here! Open some vacancies first. This will get applicants pouring in! (hopefully)',
|
||||
'manage_forms' => 'MANAGE APPLICATION FORMS',
|
||||
|
||||
],
|
||||
|
||||
'settings' => [
|
||||
|
||||
'settings' => 'Settings',
|
||||
'settings_header' => 'Notification Settings',
|
||||
'settings_p' => 'Change which notifications are sent here.',
|
||||
'back_btn' => 'Back to Dashboard'
|
||||
|
||||
],
|
||||
|
||||
'staff' => [
|
||||
|
||||
'members' => 'Staff Members',
|
||||
'active_sm' => 'Active Staff Members',
|
||||
'm_listing' => 'Member Listing',
|
||||
'f_name' => 'Full Name',
|
||||
'rank' => 'Rank',
|
||||
],
|
||||
|
||||
// ======================== APPLICATION RENDERING MESSAGES =========================
|
||||
|
||||
'application_r' => [
|
||||
|
||||
'appl_submit_warn' => 'Are you sure you want to submit your application? Please review each of your answers carefully before doing so.',
|
||||
'appl_submit_doublewarn' => 'Please note: Applications CANNOT be modified once they\'re submitted!',
|
||||
'acceptsend' => 'Accept & Send',
|
||||
'review' => 'Review',
|
||||
'applying_for' => 'You are applying for: :name',
|
||||
'welcome' => [
|
||||
'yrs_old' => 'Years old', // Context: "years old" as in: Tom is 24 years old
|
||||
'line1' => 'We\'re glad you\'ve decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.',
|
||||
'line2' => 'Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is at least :agerqr.',
|
||||
'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.'
|
||||
],
|
||||
'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.'
|
||||
],
|
||||
|
||||
|
||||
'application_m' => [
|
||||
'title' => 'Application Management',
|
||||
'all_apps' => 'All Applications',
|
||||
'modal_confirm' => 'Are you sure?',
|
||||
'really_delete' => 'Really delete this?',
|
||||
|
||||
|
||||
'outstanding_sm' => 'Outstanding',
|
||||
'outstanding_apps' => 'Outstanding Applications',
|
||||
'outstanding_subm' => 'Outstanding (Submitted)',
|
||||
|
||||
'interview_q' => 'Interview Queue',
|
||||
'interview_p' => 'Interview',
|
||||
'interview_s' => 'Interview Scheduled',
|
||||
'finished_int' => 'Finished Interviews',
|
||||
'schedule_int' => 'Schedule Interviews',
|
||||
'p_review' => 'Peer Review',
|
||||
'applicant' => 'Applicant',
|
||||
'interviewee' => 'Interviewee',
|
||||
'pending_int' => 'Pending Interview',
|
||||
'schedule' => 'Schedule',
|
||||
|
||||
'view_interview_queue' => 'View Interview Queue',
|
||||
'view_approval_queue' => 'View Approval Queue',
|
||||
'view_outstanding_queue' => 'View Outstanding Queue',
|
||||
|
||||
'approved' => 'Approved',
|
||||
'denied' => 'Denied',
|
||||
'unknown_stat' => 'Unknown',
|
||||
|
||||
'consequence_irreversible' => 'IRREVERSIBLE',
|
||||
'delete_action_warning' => 'This action is :consequence.',
|
||||
'delete_explainer' => 'Comments, appointments and any votes attached to this application WILL be deleted too. Please make sure this application really needs to be deleted.',
|
||||
|
||||
'all_apps_header' => 'You\'re looking at all applications ever received',
|
||||
'all_apps_exp' => 'Here, you have quick and easy access to all applications ever received by the system.',
|
||||
|
||||
'no_apps' => 'There are no applications here',
|
||||
'no_apps_exp' => 'We couldn\'t find any applications. Maybe no one has applied yet? Please try again later.',
|
||||
'int_applications' => 'Applications',
|
||||
|
||||
'no_apps_pending_int' => 'No Applications Pending Interview',
|
||||
'no_apps_pending_int_exp' => 'There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.',
|
||||
'upcoming_int' => 'My Upcoming Interviews',
|
||||
'pending_schedule' => 'Pending Schedule',
|
||||
|
||||
'no_upcoming' => 'There are no upcoming interviews',
|
||||
'no_upcoming_exp' => 'Please check other queues down in the application process. Applicants here may have already been interviewed.',
|
||||
|
||||
'no_outstanding' => 'Seeing no applications? Check with an Administrator to make sure that there are available open positions.',
|
||||
'no_outstanding_exp' => 'Advertising on relevant forums made for this purpose is also a good idea.',
|
||||
|
||||
'applicant_name' => 'Applicant Name',
|
||||
'application_date' => 'Application Date',
|
||||
|
||||
'no_pending' => 'There are no pending applications',
|
||||
'no_pending_exp' => 'It seems like no one new has applied yet. Checkout the interview and approval queues for applications that might have moved up the ladder by now.',
|
||||
|
||||
'voting_reminder' => [
|
||||
|
||||
'title' => 'Voting Reminder',
|
||||
'line1' => 'Applications which gain more than 50% of positive votes are automatically approved after one day.',
|
||||
'line2' => 'Conversely, applications that do not reach this number are automatically denied.',
|
||||
'line3' => 'Please note that the vote system can be overridden'
|
||||
|
||||
],
|
||||
|
||||
'no_pending_review' => 'There are no applications pending review',
|
||||
'no_pending_review_exp' => 'Check the other queues for any applications! Applications will be shown here as soon as their interview is completed. You\'ll be able to view meeting notes and vote based on your observations.',
|
||||
|
||||
],
|
||||
|
||||
// ============= PROFILE & USER MESSAGES ===============
|
||||
|
||||
'profile' => [
|
||||
|
||||
'title' => ':name\'s profile',
|
||||
'profile' => 'Profile',
|
||||
'users' => 'Users',
|
||||
'account_banned' => 'Account banned',
|
||||
'account_banned_exp' => 'This user has been banned by the moderators.',
|
||||
'ban_confirm' => 'Please confirm that you want to ban this user account. You\'ll need to add a reason and expiration date to confirm this. Bans don\'t transfer to connected Minecraft networks (yet).',
|
||||
'leave_empty' => 'Leave empty for a permanent ban',
|
||||
'duration' => 'Duration',
|
||||
'p_duration' => 'Punishment duration',
|
||||
'p_duration_exp' => 'e.g. Spamming',
|
||||
'ban' => 'Ban',
|
||||
|
||||
'terminate_notice' => 'You are about to terminate a staff member',
|
||||
'terminate_notice_warning' => 'Terminating a staff member will remove their privileges on the team management site and Network.
|
||||
They will be notified of their termination. Make sure to have discussed this with them first.',
|
||||
'terminate_notice_consequence' => 'THIS PROCESS IS IRREVERSIBLE AND IMMEDIATE',
|
||||
'terminate_txt' => 'Terminate Staff Member',
|
||||
|
||||
'delete_acc_warn' => 'WARNING: This is a potentially destructive action!',
|
||||
'delete_acc_consequence' => 'Deleting a user\'s account is an irreversible process. Historic and current applications, votes, and profile content, as well as any personally identifiable information will be immediately erased.',
|
||||
'type_to_confirm' => 'Type to confirm:',
|
||||
'type_placeholder' => 'Please type the above',
|
||||
|
||||
'delete_acc' => 'Delete Account',
|
||||
'edit_acc' => 'Edit Account',
|
||||
|
||||
'ban_acc' => 'Ban Account',
|
||||
'unban_acc' => 'Unban Account',
|
||||
|
||||
'search_result' => 'Search results',
|
||||
|
||||
'origin_cc' => 'Origin country',
|
||||
'state_prov' => 'State/Province',
|
||||
'district' => 'District (if any)',
|
||||
'city' => 'City',
|
||||
'zipcode' => 'Zipcode',
|
||||
'coords' => 'Coordinates',
|
||||
'european' => 'European?',
|
||||
'isp' => 'ISP', // Internet service provider
|
||||
'org' => 'Organization (if any)',
|
||||
'ctype' => 'C. Type', // Internet Connection type
|
||||
'timezone' => 'Timezone',
|
||||
'noresults' => 'This query returned no results.',
|
||||
|
||||
'edituser' => 'Edit PII and Roles', // PII: Personally identifiable information
|
||||
'edituser_consequence' => 'Warning! This is a sensitive setting! Changing this could have unintended consequences!',
|
||||
'acc_management' => 'Account Management (Admin)',
|
||||
'discord_tag' => 'User\'s Discord Tag: :discordTag',
|
||||
'account_settings' => 'Account Settings',
|
||||
'account_settings_personal' => 'My Account Settings',
|
||||
|
||||
'2fa_welcome' => 'We\'re glad you decided to increase your account\'s security!',
|
||||
'supported_apps' => 'Supported apps you can install: ',
|
||||
'scan_code' => 'Scan the :scannable code with your preferred app, and then copy the code here.',
|
||||
'otp' => 'One-time code',
|
||||
'2fa_enable' => 'Enable 2FA',
|
||||
'2fa_remove_consequence' => 'Removing two-factor authentication will reduce the security of your account.',
|
||||
'2fa_password_confirm' => 'Confirm your password to continue',
|
||||
'2fa_password_confirm_exp' => 'To prevent unauthorized changes, a password is always required for sensitive operations.',
|
||||
'2fa_disable_consent' => '"I understand the possible consequences of disabling two factor authentication"',
|
||||
'2fa_remove' => 'Remove 2FA',
|
||||
'2fa_remove_extended' => 'Remove Two-Factor Authentication',
|
||||
|
||||
'security_lgotherdev' => 'For your security, you\'ll need to re-enter your password before logging out other devices. If you believe your account has been compromised, please change your password instead, as that will automatically log out anyone else who might using your account, and prevent them from signing back in.',
|
||||
'password_reenter' => 'Re-enter your password',
|
||||
|
||||
'acc_security' => 'Account Security',
|
||||
'2fa' => 'Two Factor Authentication',
|
||||
'sessions' => 'Sessions',
|
||||
'contact_settings' => 'Contact Settings (E-Mail)',
|
||||
|
||||
'change_password' => 'Change Password',
|
||||
'change_password_exp' => 'Change your password here. This will log you out from all existing sessions for your security.',
|
||||
|
||||
'old_pass' => 'Old Password',
|
||||
'forgot_pw' => 'Forgot your password? Reset it :link',
|
||||
'new_pw' => 'New Password',
|
||||
|
||||
'2fa_enable_success' => 'Hooray! 2FA is setup correctly for your account. A code will be asked each time you login.',
|
||||
'2fa_avail' => 'Two-factor auth is available for your account.',
|
||||
'2fa_avail_exp' => ' Enabling this security option greatly increases your account\'s security in case your password ever gets stolen.',
|
||||
|
||||
'session_manager' => 'Session Manager',
|
||||
'terminate_others' => 'Terminating other sessions is generally a good idea if your account has been compromised.',
|
||||
'current_session' => 'Your current session: logged in from :ipAddress',
|
||||
'flush_session' => 'Flush sessions',
|
||||
'personal_data_change' => 'Need to change personal data? You can do so here.',
|
||||
'current_email' => 'Current Email Address',
|
||||
'new_email' => 'New Email Address',
|
||||
'current_password' => 'Current Password',
|
||||
'security_nochangepw' => 'For security reasons, you cannot make important account changes without confirming your password. You\'ll also need to verify your new email.',
|
||||
'change_email' => 'Change Email Address',
|
||||
|
||||
'basic_info' => 'Basic Information',
|
||||
'fl_name' => 'First / Last Name',
|
||||
'shortbio' => 'Short Bio',
|
||||
'about_me' => 'About Me',
|
||||
'pref_media' => 'Preferences & Media',
|
||||
'avatar_source' => 'Retrieve avatar from: ',
|
||||
'social_media' => 'Social Media',
|
||||
|
||||
'github_user' => 'Github Username',
|
||||
'twitter_user' => 'Twitter Username',
|
||||
'insta_user' => 'Instagram Username',
|
||||
'discord_user' => 'Discord Handle',
|
||||
|
||||
'update_prfl' => 'Update Profile'
|
||||
|
||||
],
|
||||
|
||||
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
|
||||
|
||||
'user' => [
|
||||
|
||||
'app_process' => [
|
||||
'title' => 'Application Process',
|
||||
'line1' => 'Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.',
|
||||
'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.'
|
||||
],
|
||||
|
||||
'account_standing' => 'Account Standing',
|
||||
'account_eligibility' => 'Your account is currently :eligibility for application',
|
||||
'days_remaining_acc_alt' => 'As of today, there are :days remaining until you\'re permitted to submit another application.',
|
||||
'my_ongoingapps' => 'My Ongoing Applications',
|
||||
|
||||
'submitted' => 'Submitted',
|
||||
'peer_approval' => 'Peer Approval',
|
||||
'peer_approval_q' => 'Peer Approval Queue',
|
||||
|
||||
'nothing_to_show' => 'Nothing to show',
|
||||
'nothing_to_show_exp' => 'You currently have no applications to display. If you\'re eligible, you may apply once every month.',
|
||||
|
||||
'directory' => [
|
||||
|
||||
'itsyou' => 'It\'s you!',
|
||||
'title' => 'User Directory',
|
||||
'directory' => 'Directory'
|
||||
|
||||
]
|
||||
|
||||
],
|
||||
|
||||
'view_app' => [
|
||||
|
||||
'title' => 'Viewing application',
|
||||
'viewing_app' => 'Viewing :user\'s application',
|
||||
'cantvote' => 'You cannot vote on this application anymore.',
|
||||
'no_notes' => 'There are no notes yet. Add some!',
|
||||
'deny_confirm' => 'Are you sure you want to deny this application? Please keep in mind that this user will only be allowed to apply 30 days after their first application.',
|
||||
'deny_confirm_consequence' => 'This action cannot be undone.',
|
||||
'deny_confirm_btn' => 'Confirm: Deny Applicant',
|
||||
'form_updated_alert' => 'If this form has been updated, new fields and updated questions will not show up here!',
|
||||
'context_info' => 'Contextual Information',
|
||||
'appl_ip' => 'Applicant IP Address',
|
||||
'appl_for' => 'Applying for',
|
||||
'currentstatus' => 'Current Status',
|
||||
'decisionmod' => 'Decision & Moderation Tools',
|
||||
'denyapp' => 'Deny applicant',
|
||||
'nextstage' => 'Move to next stage',
|
||||
'appointment_desc' => 'Appointment description',
|
||||
'int_date_time' => 'Interview Date & Time',
|
||||
'choosedate' => 'Click to choose a date',
|
||||
'appointment_loc' => 'Appointment Location',
|
||||
'pref_platform' => 'Select your preferred platform',
|
||||
'coming_soon_int' => 'Embedded in-house video conferencing coming soon, powered by Jitsi Meet',
|
||||
'scheduled_for' => 'Interview Scheduled for:',
|
||||
'platform' => 'Platform',
|
||||
'finish_meeting' => 'Finish Meeting',
|
||||
'view_notes' => 'View Meeting Notes',
|
||||
'vote_app' => 'Vote on this application',
|
||||
|
||||
'vote_explainer' => [
|
||||
|
||||
'line1' => 'If you weren\'t present during this meeting, you can view the shared meeting notepad to help you make a decision.',
|
||||
'line2' => 'You may vote on as many applications as needed; However, you can only vote once per application.',
|
||||
'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.'
|
||||
|
||||
],
|
||||
|
||||
'vote_approve' => 'Vote: Approve Applicant',
|
||||
'vote_deny' => 'Vote: Deny Applicant',
|
||||
'm_notes' => 'Meeting notes',
|
||||
'view_more' => 'View more Applications',
|
||||
'comments' => 'Comments',
|
||||
'no_comments' => 'There are no comments here.',
|
||||
'no_comments_exp' => 'There are no comments here! Comments are only visible to staff members. Be the first to share your input! Commenting may help with decision-making when time comes to vote for an application.',
|
||||
'commenting_as' => 'Commenting as :username',
|
||||
'max_chars' => 'max characters', // Context: A number is added before max characters
|
||||
'post' => 'Post', // Context: Post as in post comment
|
||||
|
||||
]
|
||||
|
||||
// ==================== END OF MAIN I18N FILE ======================
|
||||
|
||||
];
|
19
resources/lang/es/auth.php
Normal file
19
resources/lang/es/auth.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
|
||||
];
|
610
resources/lang/es/messages.php
Normal file
610
resources/lang/es/messages.php
Normal file
@@ -0,0 +1,610 @@
|
||||
<?php
|
||||
/*
|
||||
* -- Information for translators | READ BEFORE TRANSLATING ANYTHING ---
|
||||
* In this file, only translate messages to the right, in this fashion:
|
||||
* 'something' => 'translate-me'
|
||||
* Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon.
|
||||
* Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as:
|
||||
* auth.php, pagination.php, passwords.php, and validation.php.
|
||||
* It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote
|
||||
*
|
||||
* Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters.
|
||||
* If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly.
|
||||
*
|
||||
* Thank you for translating!
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// ============== MENU TRANSLATIONS ======================
|
||||
|
||||
|
||||
'menu' => [
|
||||
|
||||
'my_apps' => 'My Applications',
|
||||
'current_apps' => 'Current Applications',
|
||||
'profile_settings' => 'Profile Settings',
|
||||
'hiring_man' => 'Hiring Management',
|
||||
'all_forms' => 'All Forms',
|
||||
'app_settings' => 'App Settings',
|
||||
'global_app_settings' => 'Global App Settings',
|
||||
'system_logs' => 'System Logs'
|
||||
],
|
||||
|
||||
|
||||
|
||||
// ============== REUSABLE, GENERIC STRINGS ===============
|
||||
|
||||
'reusable' => [
|
||||
'created_at' => 'Created at',
|
||||
'updated_at' => 'Updated at',
|
||||
'actions' => 'Actions',
|
||||
'delete' => 'Delete',
|
||||
'status' => 'Status',
|
||||
'view' => 'View',
|
||||
'view_c' => 'View Details',
|
||||
'no_access' => 'Application Access Denied',
|
||||
'validation_err' => 'Validation error!',
|
||||
'description' => 'Description',
|
||||
'join_date' => 'Join Date',
|
||||
'my_acc' => 'My Account',
|
||||
'confirm' => 'Please Confirm',
|
||||
'confirm_plain' => 'Confirm',
|
||||
'confirm_click' => 'Click to Confirm',
|
||||
'date' => 'Date',
|
||||
'datetime' => 'Time & Date',
|
||||
'location' => 'Location',
|
||||
'none_yet' => 'None yet',
|
||||
'reason' => 'Reason',
|
||||
'days' => 'Days',
|
||||
'weeks' => 'Weeks',
|
||||
'months' => 'Months',
|
||||
'years' => 'Years',
|
||||
'yes' => 'Yes',
|
||||
'no' => 'No',
|
||||
'roles' => 'Roles',
|
||||
'member_since' => 'Member since :date',
|
||||
'lookup' => 'Lookup :ipAddress',
|
||||
'abt' => 'About',
|
||||
'acc' => 'Account',
|
||||
'settings' => 'Settings',
|
||||
'profile' => 'My Profile',
|
||||
'code' => 'code',
|
||||
'here' => 'here',
|
||||
'auth_req' => 'Please authenticate',
|
||||
'eligible' => 'Eligible',
|
||||
'ineligible' => 'Ineligible',
|
||||
'schedule' => 'Schedule',
|
||||
'schedule_action' => 'Schedule an Appointment',
|
||||
'platform' => 'Platform',
|
||||
'notepad' => 'Shared Notepad', // Context: The shared notepad that appears when votes are needed,
|
||||
'appointment_info' => 'Appointment Information',
|
||||
'ip_info' => 'IP Address Information for'
|
||||
],
|
||||
|
||||
|
||||
// ============== HOMEPAGE MESSAGES ======================
|
||||
|
||||
'home' => 'Home',
|
||||
'homepagetxt' => 'Homepage',
|
||||
'login' => 'Sign in',
|
||||
'logout' => 'Sign out',
|
||||
'register' => 'Sign up',
|
||||
'dashboard' => 'Dashboard',
|
||||
'back' => 'Go back',
|
||||
'homepage_welcome' => 'Welcome to our team management center!',
|
||||
'homepage_explainer_line1' => 'Here, you can apply for open staff member positions, view your application status, and manage your profile.',
|
||||
'homepage_explainer_line2' => 'Sign up with Email to continue.',
|
||||
'footer_copy' => 'All rights reserved',
|
||||
'global_error' => 'An error occurred',
|
||||
'global_success' => 'Success!',
|
||||
'txt_learn_more' => 'Learn more',
|
||||
'opening_nodetails' => 'There don\'t seem to be any details',
|
||||
'opening_nodetails_exp' => 'This opening does not have any details yet.',
|
||||
'details_m_title' => 'Opening details',
|
||||
'open_positions' => 'Open Positions',
|
||||
'last_updated' => 'Last updated',
|
||||
'open_position_count' => '{1} There is :count open position!|[2,*] There are :count open positions!',
|
||||
'ineligible_days_remaining' => 'Ineligible (:days) day(s) remaining',
|
||||
'txt_apply' => 'Apply', // Context: Apply as in applying for a "job", e.g. registering for a job
|
||||
'txt_application' => 'Application',
|
||||
'application_closed' => 'Applications Closed',
|
||||
'application_closed_intro' => 'Hello there!',
|
||||
'application_closed_intro_line2' => '
|
||||
We are currently not hiring any new staff members at the moment. If you\'d like to apply, check out our Discord\'s
|
||||
announcement channel for news when a new position opens.
|
||||
Our application cycle usually lasts two weeks, so if you\'re seeing this, it\'s because it finished, and new one will begin soon.
|
||||
',
|
||||
'where_work' => 'Where you\'ll work',
|
||||
'join_team' => 'Join The Team',
|
||||
'join_team_cta' => 'Join the team today and help out network grow and prosper!',
|
||||
'contact_cta' => 'Any questions? Leave a message!',
|
||||
'contact_disclaimer' => '*This is not an application form. Any applications sent here will be ignored.',
|
||||
'contactlabel_name' => 'Name',
|
||||
'contactlabel_email' => 'E-mail',
|
||||
'contactlabel_subject' => 'Subject (ex. Site Suggestion)',
|
||||
'contactlabel_send' => 'Send',
|
||||
|
||||
|
||||
|
||||
// ======================== AUTHENTICATION MESSAGES ===========================
|
||||
|
||||
'2fa_txt' => 'Two-Factor Authentication',
|
||||
'2fa_sronly' => 'Two-factor secret code (You can find this on Google Authenticator)',
|
||||
'2fa_lostcode' => 'Don\'t know the code?',
|
||||
'2fa_cancel_login' => 'Cancel login (logout)',
|
||||
|
||||
'terms' => 'Terms of Use',
|
||||
'ppolicy' => 'Privacy Policy',
|
||||
|
||||
'signin_cta' => 'Sign into your account',
|
||||
'password' => 'Password',
|
||||
'remember_me' => 'Remember me',
|
||||
'forgot_pw' => 'Forgot password?',
|
||||
'register_cta' => 'Register here',
|
||||
'no_acc' => 'Don\'t have an account?',
|
||||
'register_acc' => 'Register a new account',
|
||||
'pwsec' => [
|
||||
'line1' => 'Basic password security',
|
||||
'line2' => 'For your security, we implement strict password policies. It\'s also advisable to let your password manager or browser generate and save passwords for you (if it\'s a private device).',
|
||||
'line3' => 'Passwords must be a combination of: ',
|
||||
'line4' => 'A minimum of 10 characters;',
|
||||
'line5' => 'At least 3 uppercase characters;',
|
||||
'line6' => 'At least 3 numbers;',
|
||||
'line7' => 'Any number of special characters.'
|
||||
],
|
||||
'sronly_confirmpassword' => 'Confirm Password', // hint: sronly stands for screen-reader only
|
||||
'sronly_mcusername' => 'Minecraft Username (Premium)',
|
||||
'have_account' => 'Have an account with us?',
|
||||
'login_here' => 'Login here',
|
||||
'register_txt' => 'Register',
|
||||
|
||||
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
|
||||
|
||||
'modal_close' => 'Close',
|
||||
'component_nopermission' => 'We\'re sorry, but you do not have permission to access this web page.',
|
||||
'component_accessdenied' => 'Access Denied',
|
||||
'component_contact' => 'Please contact your administrator if you believe this was in error.',
|
||||
'welcome_back' => 'Welcome back,',
|
||||
'eligible' => 'Eligible',
|
||||
'ineligible' => 'Ineligible',
|
||||
'eligibility_status' => 'Your current application eligibility status: :badgeStatus',
|
||||
'ongoing_apps' => 'Ongoing apps',
|
||||
'denied_apps' => 'Denied apps',
|
||||
'users_staff' => 'Total Users + Staff',
|
||||
'new_apps' => 'New applications',
|
||||
'v_backlog' => 'Vote backlog',
|
||||
'ranks' => 'Available ranks',
|
||||
'open' => 'Open',
|
||||
'closed' => 'Closed',
|
||||
'upcoming' => 'Your upcoming interviews',
|
||||
'soon' => 'Coming soon',
|
||||
|
||||
|
||||
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
|
||||
|
||||
'adm' => 'Administration',
|
||||
'devtools' => 'Developer Tools',
|
||||
'devtools_evn' => 'Event Management',
|
||||
'devoptions' => 'Developer Options',
|
||||
'forceeval' => 'Please choose an application to force re-evaluation',
|
||||
'appid' => 'Application ID',
|
||||
'no_valid_app' => 'There are no valid applications',
|
||||
'choose_app' => 'Choose an application',
|
||||
'dispatch_event' => 'Dispatch event now',
|
||||
'devtools_warn' => 'Do not use these options if you don\'t know what you\'re doing, even if you have access to this page.',
|
||||
'warn' => 'Warning',
|
||||
'override_votes' => 'Override Vote Evaluation',
|
||||
'artisan_evaluate' => 'Artisan: Evaluate Votes Now', // Tip: Artisan is a program name, therefore not translatable
|
||||
'devtools_info' => 'This panel may be also used to completely override the vote system in stalemate scenarios',
|
||||
|
||||
|
||||
'forms' => 'Forms',
|
||||
'positions' => 'Positions', // Context: Positions as in job opening
|
||||
'edit_form' => 'Edit Form',
|
||||
'edt' => 'Editor',
|
||||
'edit' => 'Edit',
|
||||
'edt_action' => 'Editing',
|
||||
'txtbox' => 'Textbox',
|
||||
'multiline' => 'Multi line answer',
|
||||
'checkbox' => 'Checkbox',
|
||||
'field_type' => 'Choose a field type',
|
||||
'save_exit' => 'Save & Quit',
|
||||
'new_field' => 'New field',
|
||||
'vacancy_edit' => 'Vacancy Editor',
|
||||
'new_vacancy' => 'New Vacancy',
|
||||
'form_consistency' => 'For consistency purposes, grayed out fields can\'t be edited.',
|
||||
|
||||
'vacancy' => [
|
||||
'add' => 'Add vacancy',
|
||||
'name' => 'Vacancy Name',
|
||||
'description' => 'Vacancy Description',
|
||||
'details' => 'Vacancy Details',
|
||||
'markdown' => 'Markdown Supported',
|
||||
'no_details' => 'No details yet... Add some!',
|
||||
'permission_group' => 'Permission Group',
|
||||
'permission_group_tooltip' => 'The permission group from your server/network\'s permissions manager. Compatible with Luckperms and PEX.',
|
||||
'discord_roleid' => 'Discord Role ID',
|
||||
'discord_roleid_tooltip' => 'Discord Desktop: Go to your Account Settings > Appearance -> Advanced and toggle Developer Mode. On your server\'s roles tab, right click any role to copy it\'s ID.',
|
||||
'current_form' => 'Current Form (uneditable)',
|
||||
'remaining_slots' => 'Remaining slots',
|
||||
'free_slots' => 'Free slots',
|
||||
'free_slots_tooltip' => 'How many submissions before the vacancy stops accepting new applicants?',
|
||||
'save' => 'Save Changes',
|
||||
'cancel' => 'Cancel',
|
||||
'close_vacancy' => 'Close Position',
|
||||
'description_tooltip' => 'Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary',
|
||||
''
|
||||
|
||||
],
|
||||
|
||||
'form' => 'Form',
|
||||
|
||||
'form_builder' => [
|
||||
'builder' => 'Form Builder',
|
||||
'builder_name' => 'Application Form Management Tool',
|
||||
'name_form' => 'Name your form...',
|
||||
'save_form' => 'Save Form',
|
||||
],
|
||||
|
||||
'form_preview' => [
|
||||
'preview' => 'Preview',
|
||||
'title' => 'Application Form Preview',
|
||||
'looks' => 'This is how your form looks like to applicants',
|
||||
'f_info' => 'You may edit it and add more fields later.',
|
||||
''
|
||||
],
|
||||
|
||||
'forms_p' => [
|
||||
|
||||
'available_forms' => 'Available forms',
|
||||
'form_title' => 'Form title',
|
||||
'empty_noforms' => 'Nothing to see here! Please add some forms first.',
|
||||
'new_form' => 'NEW FORM'
|
||||
],
|
||||
|
||||
'players' => [
|
||||
|
||||
'reg_players' => 'Registered Players',
|
||||
'reg_players_staff' => 'See Registered Players (Applicant Pool)',
|
||||
'total_banned' => 'Total Banned Players',
|
||||
'search' => 'Search players',
|
||||
'f_p_search' => 'Full/partial email search',
|
||||
'p_disclaimer' => 'Please note: This list only includes players registered in the team management portal. In a future release, all network players will be shown here.',
|
||||
'listing' => 'Player Listing',
|
||||
'reg_date' => 'Registration Date',
|
||||
'ign' => 'IGN', // Context: Short for In-Game Name
|
||||
'banned' => 'Banned',
|
||||
'active' => 'Active',
|
||||
'no_reg' => 'There are no registered players!',
|
||||
'no_reg_exp' => "
|
||||
Registered players are those without a staff role in the team management application.
|
||||
There may be other users registered in the platform, but they won't be displayed here.
|
||||
",
|
||||
'see_staff' => 'See Staff Members'
|
||||
|
||||
],
|
||||
|
||||
'positions_p' => [
|
||||
|
||||
'application_form' => 'Application Form',
|
||||
'select_form' => 'Select a form...',
|
||||
'no_form_error' => "
|
||||
You cannot create a vacancy without any forms with which people would apply.
|
||||
create a form first, then, create a vacancy.
|
||||
A single form is allowed to have multiple vacancies, so you can attach future vacancies to the same form if you'd like.
|
||||
",
|
||||
'new_pos' => 'NEW POSITION',
|
||||
'empty_pos_warning' => 'Nothing to see here! Open some vacancies first. This will get applicants pouring in! (hopefully)',
|
||||
'manage_forms' => 'MANAGE APPLICATION FORMS',
|
||||
|
||||
],
|
||||
|
||||
'settings' => [
|
||||
|
||||
'settings' => 'Settings',
|
||||
'settings_header' => 'Notification Settings',
|
||||
'settings_p' => 'Change which notifications are sent here.',
|
||||
'back_btn' => 'Back to Dashboard'
|
||||
|
||||
],
|
||||
|
||||
'staff' => [
|
||||
|
||||
'members' => 'Staff Members',
|
||||
'active_sm' => 'Active Staff Members',
|
||||
'm_listing' => 'Member Listing',
|
||||
'f_name' => 'Full Name',
|
||||
'rank' => 'Rank',
|
||||
],
|
||||
|
||||
// ======================== APPLICATION RENDERING MESSAGES =========================
|
||||
|
||||
'application_r' => [
|
||||
|
||||
'appl_submit_warn' => 'Are you sure you want to submit your application? Please review each of your answers carefully before doing so.',
|
||||
'appl_submit_doublewarn' => 'Please note: Applications CANNOT be modified once they\'re submitted!',
|
||||
'acceptsend' => 'Accept & Send',
|
||||
'review' => 'Review',
|
||||
'applying_for' => 'You are applying for: :name',
|
||||
'welcome' => [
|
||||
'yrs_old' => 'Years old', // Context: "years old" as in: Tom is 24 years old
|
||||
'line1' => 'We\'re glad you\'ve decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.',
|
||||
'line2' => 'Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is at least :agerqr.',
|
||||
'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.'
|
||||
],
|
||||
'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.'
|
||||
],
|
||||
|
||||
|
||||
'application_m' => [
|
||||
'title' => 'Application Management',
|
||||
'all_apps' => 'All Applications',
|
||||
'modal_confirm' => 'Are you sure?',
|
||||
'really_delete' => 'Really delete this?',
|
||||
|
||||
|
||||
'outstanding_sm' => 'Outstanding',
|
||||
'outstanding_apps' => 'Outstanding Applications',
|
||||
'outstanding_subm' => 'Outstanding (Submitted)',
|
||||
|
||||
'interview_q' => 'Interview Queue',
|
||||
'interview_p' => 'Interview',
|
||||
'interview_s' => 'Interview Scheduled',
|
||||
'finished_int' => 'Finished Interviews',
|
||||
'schedule_int' => 'Schedule Interviews',
|
||||
'p_review' => 'Peer Review',
|
||||
'applicant' => 'Applicant',
|
||||
'interviewee' => 'Interviewee',
|
||||
'pending_int' => 'Pending Interview',
|
||||
'schedule' => 'Schedule',
|
||||
|
||||
'view_interview_queue' => 'View Interview Queue',
|
||||
'view_approval_queue' => 'View Approval Queue',
|
||||
'view_outstanding_queue' => 'View Outstanding Queue',
|
||||
|
||||
'approved' => 'Approved',
|
||||
'denied' => 'Denied',
|
||||
'unknown_stat' => 'Unknown',
|
||||
|
||||
'consequence_irreversible' => 'IRREVERSIBLE',
|
||||
'delete_action_warning' => 'This action is :consequence.',
|
||||
'delete_explainer' => 'Comments, appointments and any votes attached to this application WILL be deleted too. Please make sure this application really needs to be deleted.',
|
||||
|
||||
'all_apps_header' => 'You\'re looking at all applications ever received',
|
||||
'all_apps_exp' => 'Here, you have quick and easy access to all applications ever received by the system.',
|
||||
|
||||
'no_apps' => 'There are no applications here',
|
||||
'no_apps_exp' => 'We couldn\'t find any applications. Maybe no one has applied yet? Please try again later.',
|
||||
'int_applications' => 'Applications',
|
||||
|
||||
'no_apps_pending_int' => 'No Applications Pending Interview',
|
||||
'no_apps_pending_int_exp' => 'There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.',
|
||||
'upcoming_int' => 'My Upcoming Interviews',
|
||||
'pending_schedule' => 'Pending Schedule',
|
||||
|
||||
'no_upcoming' => 'There are no upcoming interviews',
|
||||
'no_upcoming_exp' => 'Please check other queues down in the application process. Applicants here may have already been interviewed.',
|
||||
|
||||
'no_outstanding' => 'Seeing no applications? Check with an Administrator to make sure that there are available open positions.',
|
||||
'no_outstanding_exp' => 'Advertising on relevant forums made for this purpose is also a good idea.',
|
||||
|
||||
'applicant_name' => 'Applicant Name',
|
||||
'application_date' => 'Application Date',
|
||||
|
||||
'no_pending' => 'There are no pending applications',
|
||||
'no_pending_exp' => 'It seems like no one new has applied yet. Checkout the interview and approval queues for applications that might have moved up the ladder by now.',
|
||||
|
||||
'voting_reminder' => [
|
||||
|
||||
'title' => 'Voting Reminder',
|
||||
'line1' => 'Applications which gain more than 50% of positive votes are automatically approved after one day.',
|
||||
'line2' => 'Conversely, applications that do not reach this number are automatically denied.',
|
||||
'line3' => 'Please note that the vote system can be overridden'
|
||||
|
||||
],
|
||||
|
||||
'no_pending_review' => 'There are no applications pending review',
|
||||
'no_pending_review_exp' => 'Check the other queues for any applications! Applications will be shown here as soon as their interview is completed. You\'ll be able to view meeting notes and vote based on your observations.',
|
||||
|
||||
],
|
||||
|
||||
// ============= PROFILE & USER MESSAGES ===============
|
||||
|
||||
'profile' => [
|
||||
|
||||
'title' => ':name\'s profile',
|
||||
'profile' => 'Profile',
|
||||
'users' => 'Users',
|
||||
'account_banned' => 'Account banned',
|
||||
'account_banned_exp' => 'This user has been banned by the moderators.',
|
||||
'ban_confirm' => 'Please confirm that you want to ban this user account. You\'ll need to add a reason and expiration date to confirm this. Bans don\'t transfer to connected Minecraft networks (yet).',
|
||||
'leave_empty' => 'Leave empty for a permanent ban',
|
||||
'duration' => 'Duration',
|
||||
'p_duration' => 'Punishment duration',
|
||||
'p_duration_exp' => 'e.g. Spamming',
|
||||
'ban' => 'Ban',
|
||||
|
||||
'terminate_notice' => 'You are about to terminate a staff member',
|
||||
'terminate_notice_warning' => 'Terminating a staff member will remove their privileges on the team management site and Network.
|
||||
They will be notified of their termination. Make sure to have discussed this with them first.',
|
||||
'terminate_notice_consequence' => 'THIS PROCESS IS IRREVERSIBLE AND IMMEDIATE',
|
||||
'terminate_txt' => 'Terminate Staff Member',
|
||||
|
||||
'delete_acc_warn' => 'WARNING: This is a potentially destructive action!',
|
||||
'delete_acc_consequence' => 'Deleting a user\'s account is an irreversible process. Historic and current applications, votes, and profile content, as well as any personally identifiable information will be immediately erased.',
|
||||
'type_to_confirm' => 'Type to confirm:',
|
||||
'type_placeholder' => 'Please type the above',
|
||||
|
||||
'delete_acc' => 'Delete Account',
|
||||
'edit_acc' => 'Edit Account',
|
||||
|
||||
'ban_acc' => 'Ban Account',
|
||||
'unban_acc' => 'Unban Account',
|
||||
|
||||
'search_result' => 'Search results',
|
||||
|
||||
'origin_cc' => 'Origin country',
|
||||
'state_prov' => 'State/Province',
|
||||
'district' => 'District (if any)',
|
||||
'city' => 'City',
|
||||
'zipcode' => 'Zipcode',
|
||||
'coords' => 'Coordinates',
|
||||
'european' => 'European?',
|
||||
'isp' => 'ISP', // Internet service provider
|
||||
'org' => 'Organization (if any)',
|
||||
'ctype' => 'C. Type', // Internet Connection type
|
||||
'timezone' => 'Timezone',
|
||||
'noresults' => 'This query returned no results.',
|
||||
|
||||
'edituser' => 'Edit PII and Roles', // PII: Personally identifiable information
|
||||
'edituser_consequence' => 'Warning! This is a sensitive setting! Changing this could have unintended consequences!',
|
||||
'acc_management' => 'Account Management (Admin)',
|
||||
'discord_tag' => 'User\'s Discord Tag: :discordTag',
|
||||
'account_settings' => 'Account Settings',
|
||||
'account_settings_personal' => 'My Account Settings',
|
||||
|
||||
'2fa_welcome' => 'We\'re glad you decided to increase your account\'s security!',
|
||||
'supported_apps' => 'Supported apps you can install: ',
|
||||
'scan_code' => 'Scan the :scannable code with your preferred app, and then copy the code here.',
|
||||
'otp' => 'One-time code',
|
||||
'2fa_enable' => 'Enable 2FA',
|
||||
'2fa_remove_consequence' => 'Removing two-factor authentication will reduce the security of your account.',
|
||||
'2fa_password_confirm' => 'Confirm your password to continue',
|
||||
'2fa_password_confirm_exp' => 'To prevent unauthorized changes, a password is always required for sensitive operations.',
|
||||
'2fa_disable_consent' => '"I understand the possible consequences of disabling two factor authentication"',
|
||||
'2fa_remove' => 'Remove 2FA',
|
||||
'2fa_remove_extended' => 'Remove Two-Factor Authentication',
|
||||
|
||||
'security_lgotherdev' => 'For your security, you\'ll need to re-enter your password before logging out other devices. If you believe your account has been compromised, please change your password instead, as that will automatically log out anyone else who might using your account, and prevent them from signing back in.',
|
||||
'password_reenter' => 'Re-enter your password',
|
||||
|
||||
'acc_security' => 'Account Security',
|
||||
'2fa' => 'Two Factor Authentication',
|
||||
'sessions' => 'Sessions',
|
||||
'contact_settings' => 'Contact Settings (E-Mail)',
|
||||
|
||||
'change_password' => 'Change Password',
|
||||
'change_password_exp' => 'Change your password here. This will log you out from all existing sessions for your security.',
|
||||
|
||||
'old_pass' => 'Old Password',
|
||||
'forgot_pw' => 'Forgot your password? Reset it :link',
|
||||
'new_pw' => 'New Password',
|
||||
|
||||
'2fa_enable_success' => 'Hooray! 2FA is setup correctly for your account. A code will be asked each time you login.',
|
||||
'2fa_avail' => 'Two-factor auth is available for your account.',
|
||||
'2fa_avail_exp' => ' Enabling this security option greatly increases your account\'s security in case your password ever gets stolen.',
|
||||
|
||||
'session_manager' => 'Session Manager',
|
||||
'terminate_others' => 'Terminating other sessions is generally a good idea if your account has been compromised.',
|
||||
'current_session' => 'Your current session: logged in from :ipAddress',
|
||||
'flush_session' => 'Flush sessions',
|
||||
'personal_data_change' => 'Need to change personal data? You can do so here.',
|
||||
'current_email' => 'Current Email Address',
|
||||
'new_email' => 'New Email Address',
|
||||
'current_password' => 'Current Password',
|
||||
'security_nochangepw' => 'For security reasons, you cannot make important account changes without confirming your password. You\'ll also need to verify your new email.',
|
||||
'change_email' => 'Change Email Address',
|
||||
|
||||
'basic_info' => 'Basic Information',
|
||||
'fl_name' => 'First / Last Name',
|
||||
'shortbio' => 'Short Bio',
|
||||
'about_me' => 'About Me',
|
||||
'pref_media' => 'Preferences & Media',
|
||||
'avatar_source' => 'Retrieve avatar from: ',
|
||||
'social_media' => 'Social Media',
|
||||
|
||||
'github_user' => 'Github Username',
|
||||
'twitter_user' => 'Twitter Username',
|
||||
'insta_user' => 'Instagram Username',
|
||||
'discord_user' => 'Discord Handle',
|
||||
|
||||
'update_prfl' => 'Update Profile'
|
||||
|
||||
],
|
||||
|
||||
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
|
||||
|
||||
'user' => [
|
||||
|
||||
'app_process' => [
|
||||
'title' => 'Application Process',
|
||||
'line1' => 'Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.',
|
||||
'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.'
|
||||
],
|
||||
|
||||
'account_standing' => 'Account Standing',
|
||||
'account_eligibility' => 'Your account is currently :eligibility for application',
|
||||
'days_remaining_acc_alt' => 'As of today, there are :days remaining until you\'re permitted to submit another application.',
|
||||
'my_ongoingapps' => 'My Ongoing Applications',
|
||||
|
||||
'submitted' => 'Submitted',
|
||||
'peer_approval' => 'Peer Approval',
|
||||
'peer_approval_q' => 'Peer Approval Queue',
|
||||
|
||||
'nothing_to_show' => 'Nothing to show',
|
||||
'nothing_to_show_exp' => 'You currently have no applications to display. If you\'re eligible, you may apply once every month.',
|
||||
|
||||
'directory' => [
|
||||
|
||||
'itsyou' => 'It\'s you!',
|
||||
'title' => 'User Directory',
|
||||
'directory' => 'Directory'
|
||||
|
||||
]
|
||||
|
||||
],
|
||||
|
||||
'view_app' => [
|
||||
|
||||
'title' => 'Viewing application',
|
||||
'viewing_app' => 'Viewing :user\'s application',
|
||||
'cantvote' => 'You cannot vote on this application anymore.',
|
||||
'no_notes' => 'There are no notes yet. Add some!',
|
||||
'deny_confirm' => 'Are you sure you want to deny this application? Please keep in mind that this user will only be allowed to apply 30 days after their first application.',
|
||||
'deny_confirm_consequence' => 'This action cannot be undone.',
|
||||
'deny_confirm_btn' => 'Confirm: Deny Applicant',
|
||||
'form_updated_alert' => 'If this form has been updated, new fields and updated questions will not show up here!',
|
||||
'context_info' => 'Contextual Information',
|
||||
'appl_ip' => 'Applicant IP Address',
|
||||
'appl_for' => 'Applying for',
|
||||
'currentstatus' => 'Current Status',
|
||||
'decisionmod' => 'Decision & Moderation Tools',
|
||||
'denyapp' => 'Deny applicant',
|
||||
'nextstage' => 'Move to next stage',
|
||||
'appointment_desc' => 'Appointment description',
|
||||
'int_date_time' => 'Interview Date & Time',
|
||||
'choosedate' => 'Click to choose a date',
|
||||
'appointment_loc' => 'Appointment Location',
|
||||
'pref_platform' => 'Select your preferred platform',
|
||||
'coming_soon_int' => 'Embedded in-house video conferencing coming soon, powered by Jitsi Meet',
|
||||
'scheduled_for' => 'Interview Scheduled for:',
|
||||
'platform' => 'Platform',
|
||||
'finish_meeting' => 'Finish Meeting',
|
||||
'view_notes' => 'View Meeting Notes',
|
||||
'vote_app' => 'Vote on this application',
|
||||
|
||||
'vote_explainer' => [
|
||||
|
||||
'line1' => 'If you weren\'t present during this meeting, you can view the shared meeting notepad to help you make a decision.',
|
||||
'line2' => 'You may vote on as many applications as needed; However, you can only vote once per application.',
|
||||
'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.'
|
||||
|
||||
],
|
||||
|
||||
'vote_approve' => 'Vote: Approve Applicant',
|
||||
'vote_deny' => 'Vote: Deny Applicant',
|
||||
'm_notes' => 'Meeting notes',
|
||||
'view_more' => 'View more Applications',
|
||||
'comments' => 'Comments',
|
||||
'no_comments' => 'There are no comments here.',
|
||||
'no_comments_exp' => 'There are no comments here! Comments are only visible to staff members. Be the first to share your input! Commenting may help with decision-making when time comes to vote for an application.',
|
||||
'commenting_as' => 'Commenting as :username',
|
||||
'max_chars' => 'max characters', // Context: A number is added before max characters
|
||||
'post' => 'Post', // Context: Post as in post comment
|
||||
|
||||
]
|
||||
|
||||
// ==================== END OF MAIN I18N FILE ======================
|
||||
|
||||
];
|
19
resources/lang/es/pagination.php
Normal file
19
resources/lang/es/pagination.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Previous',
|
||||
'next' => 'Next »',
|
||||
|
||||
];
|
22
resources/lang/es/passwords.php
Normal file
22
resources/lang/es/passwords.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'reset' => 'Your password has been reset!',
|
||||
'sent' => 'We have emailed your password reset link!',
|
||||
'throttled' => 'Please wait before retrying.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'user' => "We can't find a user with that email address.",
|
||||
|
||||
];
|
151
resources/lang/es/validation.php
Normal file
151
resources/lang/es/validation.php
Normal file
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
||||
'alpha' => 'The :attribute may only contain letters.',
|
||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
|
||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
||||
'array' => 'The :attribute must be an array.',
|
||||
'before' => 'The :attribute must be a date before :date.',
|
||||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
||||
'between' => [
|
||||
'numeric' => 'The :attribute must be between :min and :max.',
|
||||
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||
'string' => 'The :attribute must be between :min and :max characters.',
|
||||
'array' => 'The :attribute must have between :min and :max items.',
|
||||
],
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'confirmed' => 'The :attribute confirmation does not match.',
|
||||
'date' => 'The :attribute is not a valid date.',
|
||||
'date_equals' => 'The :attribute must be a date equal to :date.',
|
||||
'date_format' => 'The :attribute does not match the format :format.',
|
||||
'different' => 'The :attribute and :other must be different.',
|
||||
'digits' => 'The :attribute must be :digits digits.',
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'ends_with' => 'The :attribute must end with one of the following: :values.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'file' => 'The :attribute must be a file.',
|
||||
'filled' => 'The :attribute field must have a value.',
|
||||
'gt' => [
|
||||
'numeric' => 'The :attribute must be greater than :value.',
|
||||
'file' => 'The :attribute must be greater than :value kilobytes.',
|
||||
'string' => 'The :attribute must be greater than :value characters.',
|
||||
'array' => 'The :attribute must have more than :value items.',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => 'The :attribute must be greater than or equal :value.',
|
||||
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
|
||||
'string' => 'The :attribute must be greater than or equal :value characters.',
|
||||
'array' => 'The :attribute must have :value items or more.',
|
||||
],
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
||||
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'lt' => [
|
||||
'numeric' => 'The :attribute must be less than :value.',
|
||||
'file' => 'The :attribute must be less than :value kilobytes.',
|
||||
'string' => 'The :attribute must be less than :value characters.',
|
||||
'array' => 'The :attribute must have less than :value items.',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => 'The :attribute must be less than or equal :value.',
|
||||
'file' => 'The :attribute must be less than or equal :value kilobytes.',
|
||||
'string' => 'The :attribute must be less than or equal :value characters.',
|
||||
'array' => 'The :attribute must not have more than :value items.',
|
||||
],
|
||||
'max' => [
|
||||
'numeric' => 'The :attribute may not be greater than :max.',
|
||||
'file' => 'The :attribute may not be greater than :max kilobytes.',
|
||||
'string' => 'The :attribute may not be greater than :max characters.',
|
||||
'array' => 'The :attribute may not have more than :max items.',
|
||||
],
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
||||
'min' => [
|
||||
'numeric' => 'The :attribute must be at least :min.',
|
||||
'file' => 'The :attribute must be at least :min kilobytes.',
|
||||
'string' => 'The :attribute must be at least :min characters.',
|
||||
'array' => 'The :attribute must have at least :min items.',
|
||||
],
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'not_regex' => 'The :attribute format is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'password' => 'The password is incorrect.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size' => [
|
||||
'numeric' => 'The :attribute must be :size.',
|
||||
'file' => 'The :attribute must be :size kilobytes.',
|
||||
'string' => 'The :attribute must be :size characters.',
|
||||
'array' => 'The :attribute must contain :size items.',
|
||||
],
|
||||
'starts_with' => 'The :attribute must start with one of the following: :values.',
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'timezone' => 'The :attribute must be a valid zone.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
'uuid' => 'The :attribute must be a valid UUID.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap our attribute placeholder
|
||||
| with something more reader friendly such as "E-Mail Address" instead
|
||||
| of "email". This simply helps us make our message more expressive.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
19
resources/lang/fr/auth.php
Normal file
19
resources/lang/fr/auth.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
|
||||
];
|
610
resources/lang/fr/messages.php
Normal file
610
resources/lang/fr/messages.php
Normal file
@@ -0,0 +1,610 @@
|
||||
<?php
|
||||
/*
|
||||
* -- Information for translators | READ BEFORE TRANSLATING ANYTHING ---
|
||||
* In this file, only translate messages to the right, in this fashion:
|
||||
* 'something' => 'translate-me'
|
||||
* Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon.
|
||||
* Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as:
|
||||
* auth.php, pagination.php, passwords.php, and validation.php.
|
||||
* It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote
|
||||
*
|
||||
* Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters.
|
||||
* If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly.
|
||||
*
|
||||
* Thank you for translating!
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// ============== MENU TRANSLATIONS ======================
|
||||
|
||||
|
||||
'menu' => [
|
||||
|
||||
'my_apps' => 'My Applications',
|
||||
'current_apps' => 'Current Applications',
|
||||
'profile_settings' => 'Profile Settings',
|
||||
'hiring_man' => 'Hiring Management',
|
||||
'all_forms' => 'All Forms',
|
||||
'app_settings' => 'App Settings',
|
||||
'global_app_settings' => 'Global App Settings',
|
||||
'system_logs' => 'System Logs'
|
||||
],
|
||||
|
||||
|
||||
|
||||
// ============== REUSABLE, GENERIC STRINGS ===============
|
||||
|
||||
'reusable' => [
|
||||
'created_at' => 'Created at',
|
||||
'updated_at' => 'Updated at',
|
||||
'actions' => 'Actions',
|
||||
'delete' => 'Delete',
|
||||
'status' => 'Status',
|
||||
'view' => 'View',
|
||||
'view_c' => 'View Details',
|
||||
'no_access' => 'Application Access Denied',
|
||||
'validation_err' => 'Validation error!',
|
||||
'description' => 'Description',
|
||||
'join_date' => 'Join Date',
|
||||
'my_acc' => 'My Account',
|
||||
'confirm' => 'Please Confirm',
|
||||
'confirm_plain' => 'Confirm',
|
||||
'confirm_click' => 'Click to Confirm',
|
||||
'date' => 'Date',
|
||||
'datetime' => 'Time & Date',
|
||||
'location' => 'Location',
|
||||
'none_yet' => 'None yet',
|
||||
'reason' => 'Reason',
|
||||
'days' => 'Days',
|
||||
'weeks' => 'Weeks',
|
||||
'months' => 'Months',
|
||||
'years' => 'Years',
|
||||
'yes' => 'Yes',
|
||||
'no' => 'No',
|
||||
'roles' => 'Roles',
|
||||
'member_since' => 'Member since :date',
|
||||
'lookup' => 'Lookup :ipAddress',
|
||||
'abt' => 'About',
|
||||
'acc' => 'Account',
|
||||
'settings' => 'Settings',
|
||||
'profile' => 'My Profile',
|
||||
'code' => 'code',
|
||||
'here' => 'here',
|
||||
'auth_req' => 'Please authenticate',
|
||||
'eligible' => 'Eligible',
|
||||
'ineligible' => 'Ineligible',
|
||||
'schedule' => 'Schedule',
|
||||
'schedule_action' => 'Schedule an Appointment',
|
||||
'platform' => 'Platform',
|
||||
'notepad' => 'Shared Notepad', // Context: The shared notepad that appears when votes are needed,
|
||||
'appointment_info' => 'Appointment Information',
|
||||
'ip_info' => 'IP Address Information for'
|
||||
],
|
||||
|
||||
|
||||
// ============== HOMEPAGE MESSAGES ======================
|
||||
|
||||
'home' => 'Home',
|
||||
'homepagetxt' => 'Homepage',
|
||||
'login' => 'Sign in',
|
||||
'logout' => 'Sign out',
|
||||
'register' => 'Sign up',
|
||||
'dashboard' => 'Dashboard',
|
||||
'back' => 'Go back',
|
||||
'homepage_welcome' => 'Welcome to our team management center!',
|
||||
'homepage_explainer_line1' => 'Here, you can apply for open staff member positions, view your application status, and manage your profile.',
|
||||
'homepage_explainer_line2' => 'Sign up with Email to continue.',
|
||||
'footer_copy' => 'All rights reserved',
|
||||
'global_error' => 'An error occurred',
|
||||
'global_success' => 'Success!',
|
||||
'txt_learn_more' => 'Learn more',
|
||||
'opening_nodetails' => 'There don\'t seem to be any details',
|
||||
'opening_nodetails_exp' => 'This opening does not have any details yet.',
|
||||
'details_m_title' => 'Opening details',
|
||||
'open_positions' => 'Open Positions',
|
||||
'last_updated' => 'Last updated',
|
||||
'open_position_count' => '{1} There is :count open position!|[2,*] There are :count open positions!',
|
||||
'ineligible_days_remaining' => 'Ineligible (:days) day(s) remaining',
|
||||
'txt_apply' => 'Apply', // Context: Apply as in applying for a "job", e.g. registering for a job
|
||||
'txt_application' => 'Application',
|
||||
'application_closed' => 'Applications Closed',
|
||||
'application_closed_intro' => 'Hello there!',
|
||||
'application_closed_intro_line2' => '
|
||||
We are currently not hiring any new staff members at the moment. If you\'d like to apply, check out our Discord\'s
|
||||
announcement channel for news when a new position opens.
|
||||
Our application cycle usually lasts two weeks, so if you\'re seeing this, it\'s because it finished, and new one will begin soon.
|
||||
',
|
||||
'where_work' => 'Where you\'ll work',
|
||||
'join_team' => 'Join The Team',
|
||||
'join_team_cta' => 'Join the team today and help out network grow and prosper!',
|
||||
'contact_cta' => 'Any questions? Leave a message!',
|
||||
'contact_disclaimer' => '*This is not an application form. Any applications sent here will be ignored.',
|
||||
'contactlabel_name' => 'Name',
|
||||
'contactlabel_email' => 'E-mail',
|
||||
'contactlabel_subject' => 'Subject (ex. Site Suggestion)',
|
||||
'contactlabel_send' => 'Send',
|
||||
|
||||
|
||||
|
||||
// ======================== AUTHENTICATION MESSAGES ===========================
|
||||
|
||||
'2fa_txt' => 'Two-Factor Authentication',
|
||||
'2fa_sronly' => 'Two-factor secret code (You can find this on Google Authenticator)',
|
||||
'2fa_lostcode' => 'Don\'t know the code?',
|
||||
'2fa_cancel_login' => 'Cancel login (logout)',
|
||||
|
||||
'terms' => 'Terms of Use',
|
||||
'ppolicy' => 'Privacy Policy',
|
||||
|
||||
'signin_cta' => 'Sign into your account',
|
||||
'password' => 'Password',
|
||||
'remember_me' => 'Remember me',
|
||||
'forgot_pw' => 'Forgot password?',
|
||||
'register_cta' => 'Register here',
|
||||
'no_acc' => 'Don\'t have an account?',
|
||||
'register_acc' => 'Register a new account',
|
||||
'pwsec' => [
|
||||
'line1' => 'Basic password security',
|
||||
'line2' => 'For your security, we implement strict password policies. It\'s also advisable to let your password manager or browser generate and save passwords for you (if it\'s a private device).',
|
||||
'line3' => 'Passwords must be a combination of: ',
|
||||
'line4' => 'A minimum of 10 characters;',
|
||||
'line5' => 'At least 3 uppercase characters;',
|
||||
'line6' => 'At least 3 numbers;',
|
||||
'line7' => 'Any number of special characters.'
|
||||
],
|
||||
'sronly_confirmpassword' => 'Confirm Password', // hint: sronly stands for screen-reader only
|
||||
'sronly_mcusername' => 'Minecraft Username (Premium)',
|
||||
'have_account' => 'Have an account with us?',
|
||||
'login_here' => 'Login here',
|
||||
'register_txt' => 'Register',
|
||||
|
||||
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
|
||||
|
||||
'modal_close' => 'Close',
|
||||
'component_nopermission' => 'We\'re sorry, but you do not have permission to access this web page.',
|
||||
'component_accessdenied' => 'Access Denied',
|
||||
'component_contact' => 'Please contact your administrator if you believe this was in error.',
|
||||
'welcome_back' => 'Welcome back,',
|
||||
'eligible' => 'Eligible',
|
||||
'ineligible' => 'Ineligible',
|
||||
'eligibility_status' => 'Your current application eligibility status: :badgeStatus',
|
||||
'ongoing_apps' => 'Ongoing apps',
|
||||
'denied_apps' => 'Denied apps',
|
||||
'users_staff' => 'Total Users + Staff',
|
||||
'new_apps' => 'New applications',
|
||||
'v_backlog' => 'Vote backlog',
|
||||
'ranks' => 'Available ranks',
|
||||
'open' => 'Open',
|
||||
'closed' => 'Closed',
|
||||
'upcoming' => 'Your upcoming interviews',
|
||||
'soon' => 'Coming soon',
|
||||
|
||||
|
||||
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
|
||||
|
||||
'adm' => 'Administration',
|
||||
'devtools' => 'Developer Tools',
|
||||
'devtools_evn' => 'Event Management',
|
||||
'devoptions' => 'Developer Options',
|
||||
'forceeval' => 'Please choose an application to force re-evaluation',
|
||||
'appid' => 'Application ID',
|
||||
'no_valid_app' => 'There are no valid applications',
|
||||
'choose_app' => 'Choose an application',
|
||||
'dispatch_event' => 'Dispatch event now',
|
||||
'devtools_warn' => 'Do not use these options if you don\'t know what you\'re doing, even if you have access to this page.',
|
||||
'warn' => 'Warning',
|
||||
'override_votes' => 'Override Vote Evaluation',
|
||||
'artisan_evaluate' => 'Artisan: Evaluate Votes Now', // Tip: Artisan is a program name, therefore not translatable
|
||||
'devtools_info' => 'This panel may be also used to completely override the vote system in stalemate scenarios',
|
||||
|
||||
|
||||
'forms' => 'Forms',
|
||||
'positions' => 'Positions', // Context: Positions as in job opening
|
||||
'edit_form' => 'Edit Form',
|
||||
'edt' => 'Editor',
|
||||
'edit' => 'Edit',
|
||||
'edt_action' => 'Editing',
|
||||
'txtbox' => 'Textbox',
|
||||
'multiline' => 'Multi line answer',
|
||||
'checkbox' => 'Checkbox',
|
||||
'field_type' => 'Choose a field type',
|
||||
'save_exit' => 'Save & Quit',
|
||||
'new_field' => 'New field',
|
||||
'vacancy_edit' => 'Vacancy Editor',
|
||||
'new_vacancy' => 'New Vacancy',
|
||||
'form_consistency' => 'For consistency purposes, grayed out fields can\'t be edited.',
|
||||
|
||||
'vacancy' => [
|
||||
'add' => 'Add vacancy',
|
||||
'name' => 'Vacancy Name',
|
||||
'description' => 'Vacancy Description',
|
||||
'details' => 'Vacancy Details',
|
||||
'markdown' => 'Markdown Supported',
|
||||
'no_details' => 'No details yet... Add some!',
|
||||
'permission_group' => 'Permission Group',
|
||||
'permission_group_tooltip' => 'The permission group from your server/network\'s permissions manager. Compatible with Luckperms and PEX.',
|
||||
'discord_roleid' => 'Discord Role ID',
|
||||
'discord_roleid_tooltip' => 'Discord Desktop: Go to your Account Settings > Appearance -> Advanced and toggle Developer Mode. On your server\'s roles tab, right click any role to copy it\'s ID.',
|
||||
'current_form' => 'Current Form (uneditable)',
|
||||
'remaining_slots' => 'Remaining slots',
|
||||
'free_slots' => 'Free slots',
|
||||
'free_slots_tooltip' => 'How many submissions before the vacancy stops accepting new applicants?',
|
||||
'save' => 'Save Changes',
|
||||
'cancel' => 'Cancel',
|
||||
'close_vacancy' => 'Close Position',
|
||||
'description_tooltip' => 'Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary',
|
||||
''
|
||||
|
||||
],
|
||||
|
||||
'form' => 'Form',
|
||||
|
||||
'form_builder' => [
|
||||
'builder' => 'Form Builder',
|
||||
'builder_name' => 'Application Form Management Tool',
|
||||
'name_form' => 'Name your form...',
|
||||
'save_form' => 'Save Form',
|
||||
],
|
||||
|
||||
'form_preview' => [
|
||||
'preview' => 'Preview',
|
||||
'title' => 'Application Form Preview',
|
||||
'looks' => 'This is how your form looks like to applicants',
|
||||
'f_info' => 'You may edit it and add more fields later.',
|
||||
''
|
||||
],
|
||||
|
||||
'forms_p' => [
|
||||
|
||||
'available_forms' => 'Available forms',
|
||||
'form_title' => 'Form title',
|
||||
'empty_noforms' => 'Nothing to see here! Please add some forms first.',
|
||||
'new_form' => 'NEW FORM'
|
||||
],
|
||||
|
||||
'players' => [
|
||||
|
||||
'reg_players' => 'Registered Players',
|
||||
'reg_players_staff' => 'See Registered Players (Applicant Pool)',
|
||||
'total_banned' => 'Total Banned Players',
|
||||
'search' => 'Search players',
|
||||
'f_p_search' => 'Full/partial email search',
|
||||
'p_disclaimer' => 'Please note: This list only includes players registered in the team management portal. In a future release, all network players will be shown here.',
|
||||
'listing' => 'Player Listing',
|
||||
'reg_date' => 'Registration Date',
|
||||
'ign' => 'IGN', // Context: Short for In-Game Name
|
||||
'banned' => 'Banned',
|
||||
'active' => 'Active',
|
||||
'no_reg' => 'There are no registered players!',
|
||||
'no_reg_exp' => "
|
||||
Registered players are those without a staff role in the team management application.
|
||||
There may be other users registered in the platform, but they won't be displayed here.
|
||||
",
|
||||
'see_staff' => 'See Staff Members'
|
||||
|
||||
],
|
||||
|
||||
'positions_p' => [
|
||||
|
||||
'application_form' => 'Application Form',
|
||||
'select_form' => 'Select a form...',
|
||||
'no_form_error' => "
|
||||
You cannot create a vacancy without any forms with which people would apply.
|
||||
create a form first, then, create a vacancy.
|
||||
A single form is allowed to have multiple vacancies, so you can attach future vacancies to the same form if you'd like.
|
||||
",
|
||||
'new_pos' => 'NEW POSITION',
|
||||
'empty_pos_warning' => 'Nothing to see here! Open some vacancies first. This will get applicants pouring in! (hopefully)',
|
||||
'manage_forms' => 'MANAGE APPLICATION FORMS',
|
||||
|
||||
],
|
||||
|
||||
'settings' => [
|
||||
|
||||
'settings' => 'Settings',
|
||||
'settings_header' => 'Notification Settings',
|
||||
'settings_p' => 'Change which notifications are sent here.',
|
||||
'back_btn' => 'Back to Dashboard'
|
||||
|
||||
],
|
||||
|
||||
'staff' => [
|
||||
|
||||
'members' => 'Staff Members',
|
||||
'active_sm' => 'Active Staff Members',
|
||||
'm_listing' => 'Member Listing',
|
||||
'f_name' => 'Full Name',
|
||||
'rank' => 'Rank',
|
||||
],
|
||||
|
||||
// ======================== APPLICATION RENDERING MESSAGES =========================
|
||||
|
||||
'application_r' => [
|
||||
|
||||
'appl_submit_warn' => 'Are you sure you want to submit your application? Please review each of your answers carefully before doing so.',
|
||||
'appl_submit_doublewarn' => 'Please note: Applications CANNOT be modified once they\'re submitted!',
|
||||
'acceptsend' => 'Accept & Send',
|
||||
'review' => 'Review',
|
||||
'applying_for' => 'You are applying for: :name',
|
||||
'welcome' => [
|
||||
'yrs_old' => 'Years old', // Context: "years old" as in: Tom is 24 years old
|
||||
'line1' => 'We\'re glad you\'ve decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.',
|
||||
'line2' => 'Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is at least :agerqr.',
|
||||
'line3' => 'Asking about your application will result in instant denial. Everything you need to know is here.'
|
||||
],
|
||||
'app_timeout' => 'Your account is not permitted to submit another application. Please wait :days more days before trying to submit an application.'
|
||||
],
|
||||
|
||||
|
||||
'application_m' => [
|
||||
'title' => 'Application Management',
|
||||
'all_apps' => 'All Applications',
|
||||
'modal_confirm' => 'Are you sure?',
|
||||
'really_delete' => 'Really delete this?',
|
||||
|
||||
|
||||
'outstanding_sm' => 'Outstanding',
|
||||
'outstanding_apps' => 'Outstanding Applications',
|
||||
'outstanding_subm' => 'Outstanding (Submitted)',
|
||||
|
||||
'interview_q' => 'Interview Queue',
|
||||
'interview_p' => 'Interview',
|
||||
'interview_s' => 'Interview Scheduled',
|
||||
'finished_int' => 'Finished Interviews',
|
||||
'schedule_int' => 'Schedule Interviews',
|
||||
'p_review' => 'Peer Review',
|
||||
'applicant' => 'Applicant',
|
||||
'interviewee' => 'Interviewee',
|
||||
'pending_int' => 'Pending Interview',
|
||||
'schedule' => 'Schedule',
|
||||
|
||||
'view_interview_queue' => 'View Interview Queue',
|
||||
'view_approval_queue' => 'View Approval Queue',
|
||||
'view_outstanding_queue' => 'View Outstanding Queue',
|
||||
|
||||
'approved' => 'Approved',
|
||||
'denied' => 'Denied',
|
||||
'unknown_stat' => 'Unknown',
|
||||
|
||||
'consequence_irreversible' => 'IRREVERSIBLE',
|
||||
'delete_action_warning' => 'This action is :consequence.',
|
||||
'delete_explainer' => 'Comments, appointments and any votes attached to this application WILL be deleted too. Please make sure this application really needs to be deleted.',
|
||||
|
||||
'all_apps_header' => 'You\'re looking at all applications ever received',
|
||||
'all_apps_exp' => 'Here, you have quick and easy access to all applications ever received by the system.',
|
||||
|
||||
'no_apps' => 'There are no applications here',
|
||||
'no_apps_exp' => 'We couldn\'t find any applications. Maybe no one has applied yet? Please try again later.',
|
||||
'int_applications' => 'Applications',
|
||||
|
||||
'no_apps_pending_int' => 'No Applications Pending Interview',
|
||||
'no_apps_pending_int_exp' => 'There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.',
|
||||
'upcoming_int' => 'My Upcoming Interviews',
|
||||
'pending_schedule' => 'Pending Schedule',
|
||||
|
||||
'no_upcoming' => 'There are no upcoming interviews',
|
||||
'no_upcoming_exp' => 'Please check other queues down in the application process. Applicants here may have already been interviewed.',
|
||||
|
||||
'no_outstanding' => 'Seeing no applications? Check with an Administrator to make sure that there are available open positions.',
|
||||
'no_outstanding_exp' => 'Advertising on relevant forums made for this purpose is also a good idea.',
|
||||
|
||||
'applicant_name' => 'Applicant Name',
|
||||
'application_date' => 'Application Date',
|
||||
|
||||
'no_pending' => 'There are no pending applications',
|
||||
'no_pending_exp' => 'It seems like no one new has applied yet. Checkout the interview and approval queues for applications that might have moved up the ladder by now.',
|
||||
|
||||
'voting_reminder' => [
|
||||
|
||||
'title' => 'Voting Reminder',
|
||||
'line1' => 'Applications which gain more than 50% of positive votes are automatically approved after one day.',
|
||||
'line2' => 'Conversely, applications that do not reach this number are automatically denied.',
|
||||
'line3' => 'Please note that the vote system can be overridden'
|
||||
|
||||
],
|
||||
|
||||
'no_pending_review' => 'There are no applications pending review',
|
||||
'no_pending_review_exp' => 'Check the other queues for any applications! Applications will be shown here as soon as their interview is completed. You\'ll be able to view meeting notes and vote based on your observations.',
|
||||
|
||||
],
|
||||
|
||||
// ============= PROFILE & USER MESSAGES ===============
|
||||
|
||||
'profile' => [
|
||||
|
||||
'title' => ':name\'s profile',
|
||||
'profile' => 'Profile',
|
||||
'users' => 'Users',
|
||||
'account_banned' => 'Account banned',
|
||||
'account_banned_exp' => 'This user has been banned by the moderators.',
|
||||
'ban_confirm' => 'Please confirm that you want to ban this user account. You\'ll need to add a reason and expiration date to confirm this. Bans don\'t transfer to connected Minecraft networks (yet).',
|
||||
'leave_empty' => 'Leave empty for a permanent ban',
|
||||
'duration' => 'Duration',
|
||||
'p_duration' => 'Punishment duration',
|
||||
'p_duration_exp' => 'e.g. Spamming',
|
||||
'ban' => 'Ban',
|
||||
|
||||
'terminate_notice' => 'You are about to terminate a staff member',
|
||||
'terminate_notice_warning' => 'Terminating a staff member will remove their privileges on the team management site and Network.
|
||||
They will be notified of their termination. Make sure to have discussed this with them first.',
|
||||
'terminate_notice_consequence' => 'THIS PROCESS IS IRREVERSIBLE AND IMMEDIATE',
|
||||
'terminate_txt' => 'Terminate Staff Member',
|
||||
|
||||
'delete_acc_warn' => 'WARNING: This is a potentially destructive action!',
|
||||
'delete_acc_consequence' => 'Deleting a user\'s account is an irreversible process. Historic and current applications, votes, and profile content, as well as any personally identifiable information will be immediately erased.',
|
||||
'type_to_confirm' => 'Type to confirm:',
|
||||
'type_placeholder' => 'Please type the above',
|
||||
|
||||
'delete_acc' => 'Delete Account',
|
||||
'edit_acc' => 'Edit Account',
|
||||
|
||||
'ban_acc' => 'Ban Account',
|
||||
'unban_acc' => 'Unban Account',
|
||||
|
||||
'search_result' => 'Search results',
|
||||
|
||||
'origin_cc' => 'Origin country',
|
||||
'state_prov' => 'State/Province',
|
||||
'district' => 'District (if any)',
|
||||
'city' => 'City',
|
||||
'zipcode' => 'Zipcode',
|
||||
'coords' => 'Coordinates',
|
||||
'european' => 'European?',
|
||||
'isp' => 'ISP', // Internet service provider
|
||||
'org' => 'Organization (if any)',
|
||||
'ctype' => 'C. Type', // Internet Connection type
|
||||
'timezone' => 'Timezone',
|
||||
'noresults' => 'This query returned no results.',
|
||||
|
||||
'edituser' => 'Edit PII and Roles', // PII: Personally identifiable information
|
||||
'edituser_consequence' => 'Warning! This is a sensitive setting! Changing this could have unintended consequences!',
|
||||
'acc_management' => 'Account Management (Admin)',
|
||||
'discord_tag' => 'User\'s Discord Tag: :discordTag',
|
||||
'account_settings' => 'Account Settings',
|
||||
'account_settings_personal' => 'My Account Settings',
|
||||
|
||||
'2fa_welcome' => 'We\'re glad you decided to increase your account\'s security!',
|
||||
'supported_apps' => 'Supported apps you can install: ',
|
||||
'scan_code' => 'Scan the :scannable code with your preferred app, and then copy the code here.',
|
||||
'otp' => 'One-time code',
|
||||
'2fa_enable' => 'Enable 2FA',
|
||||
'2fa_remove_consequence' => 'Removing two-factor authentication will reduce the security of your account.',
|
||||
'2fa_password_confirm' => 'Confirm your password to continue',
|
||||
'2fa_password_confirm_exp' => 'To prevent unauthorized changes, a password is always required for sensitive operations.',
|
||||
'2fa_disable_consent' => '"I understand the possible consequences of disabling two factor authentication"',
|
||||
'2fa_remove' => 'Remove 2FA',
|
||||
'2fa_remove_extended' => 'Remove Two-Factor Authentication',
|
||||
|
||||
'security_lgotherdev' => 'For your security, you\'ll need to re-enter your password before logging out other devices. If you believe your account has been compromised, please change your password instead, as that will automatically log out anyone else who might using your account, and prevent them from signing back in.',
|
||||
'password_reenter' => 'Re-enter your password',
|
||||
|
||||
'acc_security' => 'Account Security',
|
||||
'2fa' => 'Two Factor Authentication',
|
||||
'sessions' => 'Sessions',
|
||||
'contact_settings' => 'Contact Settings (E-Mail)',
|
||||
|
||||
'change_password' => 'Change Password',
|
||||
'change_password_exp' => 'Change your password here. This will log you out from all existing sessions for your security.',
|
||||
|
||||
'old_pass' => 'Old Password',
|
||||
'forgot_pw' => 'Forgot your password? Reset it :link',
|
||||
'new_pw' => 'New Password',
|
||||
|
||||
'2fa_enable_success' => 'Hooray! 2FA is setup correctly for your account. A code will be asked each time you login.',
|
||||
'2fa_avail' => 'Two-factor auth is available for your account.',
|
||||
'2fa_avail_exp' => ' Enabling this security option greatly increases your account\'s security in case your password ever gets stolen.',
|
||||
|
||||
'session_manager' => 'Session Manager',
|
||||
'terminate_others' => 'Terminating other sessions is generally a good idea if your account has been compromised.',
|
||||
'current_session' => 'Your current session: logged in from :ipAddress',
|
||||
'flush_session' => 'Flush sessions',
|
||||
'personal_data_change' => 'Need to change personal data? You can do so here.',
|
||||
'current_email' => 'Current Email Address',
|
||||
'new_email' => 'New Email Address',
|
||||
'current_password' => 'Current Password',
|
||||
'security_nochangepw' => 'For security reasons, you cannot make important account changes without confirming your password. You\'ll also need to verify your new email.',
|
||||
'change_email' => 'Change Email Address',
|
||||
|
||||
'basic_info' => 'Basic Information',
|
||||
'fl_name' => 'First / Last Name',
|
||||
'shortbio' => 'Short Bio',
|
||||
'about_me' => 'About Me',
|
||||
'pref_media' => 'Preferences & Media',
|
||||
'avatar_source' => 'Retrieve avatar from: ',
|
||||
'social_media' => 'Social Media',
|
||||
|
||||
'github_user' => 'Github Username',
|
||||
'twitter_user' => 'Twitter Username',
|
||||
'insta_user' => 'Instagram Username',
|
||||
'discord_user' => 'Discord Handle',
|
||||
|
||||
'update_prfl' => 'Update Profile'
|
||||
|
||||
],
|
||||
|
||||
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
|
||||
|
||||
'user' => [
|
||||
|
||||
'app_process' => [
|
||||
'title' => 'Application Process',
|
||||
'line1' => 'Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.',
|
||||
'line2' => 'If an interview is scheduled, you\'ll need to open your application here and confirm the time, date, and location assigned for you.'
|
||||
],
|
||||
|
||||
'account_standing' => 'Account Standing',
|
||||
'account_eligibility' => 'Your account is currently :eligibility for application',
|
||||
'days_remaining_acc_alt' => 'As of today, there are :days remaining until you\'re permitted to submit another application.',
|
||||
'my_ongoingapps' => 'My Ongoing Applications',
|
||||
|
||||
'submitted' => 'Submitted',
|
||||
'peer_approval' => 'Peer Approval',
|
||||
'peer_approval_q' => 'Peer Approval Queue',
|
||||
|
||||
'nothing_to_show' => 'Nothing to show',
|
||||
'nothing_to_show_exp' => 'You currently have no applications to display. If you\'re eligible, you may apply once every month.',
|
||||
|
||||
'directory' => [
|
||||
|
||||
'itsyou' => 'It\'s you!',
|
||||
'title' => 'User Directory',
|
||||
'directory' => 'Directory'
|
||||
|
||||
]
|
||||
|
||||
],
|
||||
|
||||
'view_app' => [
|
||||
|
||||
'title' => 'Viewing application',
|
||||
'viewing_app' => 'Viewing :user\'s application',
|
||||
'cantvote' => 'You cannot vote on this application anymore.',
|
||||
'no_notes' => 'There are no notes yet. Add some!',
|
||||
'deny_confirm' => 'Are you sure you want to deny this application? Please keep in mind that this user will only be allowed to apply 30 days after their first application.',
|
||||
'deny_confirm_consequence' => 'This action cannot be undone.',
|
||||
'deny_confirm_btn' => 'Confirm: Deny Applicant',
|
||||
'form_updated_alert' => 'If this form has been updated, new fields and updated questions will not show up here!',
|
||||
'context_info' => 'Contextual Information',
|
||||
'appl_ip' => 'Applicant IP Address',
|
||||
'appl_for' => 'Applying for',
|
||||
'currentstatus' => 'Current Status',
|
||||
'decisionmod' => 'Decision & Moderation Tools',
|
||||
'denyapp' => 'Deny applicant',
|
||||
'nextstage' => 'Move to next stage',
|
||||
'appointment_desc' => 'Appointment description',
|
||||
'int_date_time' => 'Interview Date & Time',
|
||||
'choosedate' => 'Click to choose a date',
|
||||
'appointment_loc' => 'Appointment Location',
|
||||
'pref_platform' => 'Select your preferred platform',
|
||||
'coming_soon_int' => 'Embedded in-house video conferencing coming soon, powered by Jitsi Meet',
|
||||
'scheduled_for' => 'Interview Scheduled for:',
|
||||
'platform' => 'Platform',
|
||||
'finish_meeting' => 'Finish Meeting',
|
||||
'view_notes' => 'View Meeting Notes',
|
||||
'vote_app' => 'Vote on this application',
|
||||
|
||||
'vote_explainer' => [
|
||||
|
||||
'line1' => 'If you weren\'t present during this meeting, you can view the shared meeting notepad to help you make a decision.',
|
||||
'line2' => 'You may vote on as many applications as needed; However, you can only vote once per application.',
|
||||
'line3' => 'Votes carry no weight based on rank. This system has been designed with fairness and ease of use in mind.'
|
||||
|
||||
],
|
||||
|
||||
'vote_approve' => 'Vote: Approve Applicant',
|
||||
'vote_deny' => 'Vote: Deny Applicant',
|
||||
'm_notes' => 'Meeting notes',
|
||||
'view_more' => 'View more Applications',
|
||||
'comments' => 'Comments',
|
||||
'no_comments' => 'There are no comments here.',
|
||||
'no_comments_exp' => 'There are no comments here! Comments are only visible to staff members. Be the first to share your input! Commenting may help with decision-making when time comes to vote for an application.',
|
||||
'commenting_as' => 'Commenting as :username',
|
||||
'max_chars' => 'max characters', // Context: A number is added before max characters
|
||||
'post' => 'Post', // Context: Post as in post comment
|
||||
|
||||
]
|
||||
|
||||
// ==================== END OF MAIN I18N FILE ======================
|
||||
|
||||
];
|
19
resources/lang/fr/pagination.php
Normal file
19
resources/lang/fr/pagination.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Previous',
|
||||
'next' => 'Next »',
|
||||
|
||||
];
|
22
resources/lang/fr/passwords.php
Normal file
22
resources/lang/fr/passwords.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'reset' => 'Your password has been reset!',
|
||||
'sent' => 'We have emailed your password reset link!',
|
||||
'throttled' => 'Please wait before retrying.',
|
||||
'token' => 'This password reset token is invalid.',
|
||||
'user' => "We can't find a user with that email address.",
|
||||
|
||||
];
|
151
resources/lang/fr/validation.php
Normal file
151
resources/lang/fr/validation.php
Normal file
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
||||
'alpha' => 'The :attribute may only contain letters.',
|
||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
|
||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
||||
'array' => 'The :attribute must be an array.',
|
||||
'before' => 'The :attribute must be a date before :date.',
|
||||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
||||
'between' => [
|
||||
'numeric' => 'The :attribute must be between :min and :max.',
|
||||
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||
'string' => 'The :attribute must be between :min and :max characters.',
|
||||
'array' => 'The :attribute must have between :min and :max items.',
|
||||
],
|
||||
'boolean' => 'The :attribute field must be true or false.',
|
||||
'confirmed' => 'The :attribute confirmation does not match.',
|
||||
'date' => 'The :attribute is not a valid date.',
|
||||
'date_equals' => 'The :attribute must be a date equal to :date.',
|
||||
'date_format' => 'The :attribute does not match the format :format.',
|
||||
'different' => 'The :attribute and :other must be different.',
|
||||
'digits' => 'The :attribute must be :digits digits.',
|
||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||
'distinct' => 'The :attribute field has a duplicate value.',
|
||||
'email' => 'The :attribute must be a valid email address.',
|
||||
'ends_with' => 'The :attribute must end with one of the following: :values.',
|
||||
'exists' => 'The selected :attribute is invalid.',
|
||||
'file' => 'The :attribute must be a file.',
|
||||
'filled' => 'The :attribute field must have a value.',
|
||||
'gt' => [
|
||||
'numeric' => 'The :attribute must be greater than :value.',
|
||||
'file' => 'The :attribute must be greater than :value kilobytes.',
|
||||
'string' => 'The :attribute must be greater than :value characters.',
|
||||
'array' => 'The :attribute must have more than :value items.',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => 'The :attribute must be greater than or equal :value.',
|
||||
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
|
||||
'string' => 'The :attribute must be greater than or equal :value characters.',
|
||||
'array' => 'The :attribute must have :value items or more.',
|
||||
],
|
||||
'image' => 'The :attribute must be an image.',
|
||||
'in' => 'The selected :attribute is invalid.',
|
||||
'in_array' => 'The :attribute field does not exist in :other.',
|
||||
'integer' => 'The :attribute must be an integer.',
|
||||
'ip' => 'The :attribute must be a valid IP address.',
|
||||
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
||||
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
||||
'json' => 'The :attribute must be a valid JSON string.',
|
||||
'lt' => [
|
||||
'numeric' => 'The :attribute must be less than :value.',
|
||||
'file' => 'The :attribute must be less than :value kilobytes.',
|
||||
'string' => 'The :attribute must be less than :value characters.',
|
||||
'array' => 'The :attribute must have less than :value items.',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => 'The :attribute must be less than or equal :value.',
|
||||
'file' => 'The :attribute must be less than or equal :value kilobytes.',
|
||||
'string' => 'The :attribute must be less than or equal :value characters.',
|
||||
'array' => 'The :attribute must not have more than :value items.',
|
||||
],
|
||||
'max' => [
|
||||
'numeric' => 'The :attribute may not be greater than :max.',
|
||||
'file' => 'The :attribute may not be greater than :max kilobytes.',
|
||||
'string' => 'The :attribute may not be greater than :max characters.',
|
||||
'array' => 'The :attribute may not have more than :max items.',
|
||||
],
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
||||
'min' => [
|
||||
'numeric' => 'The :attribute must be at least :min.',
|
||||
'file' => 'The :attribute must be at least :min kilobytes.',
|
||||
'string' => 'The :attribute must be at least :min characters.',
|
||||
'array' => 'The :attribute must have at least :min items.',
|
||||
],
|
||||
'not_in' => 'The selected :attribute is invalid.',
|
||||
'not_regex' => 'The :attribute format is invalid.',
|
||||
'numeric' => 'The :attribute must be a number.',
|
||||
'password' => 'The password is incorrect.',
|
||||
'present' => 'The :attribute field must be present.',
|
||||
'regex' => 'The :attribute format is invalid.',
|
||||
'required' => 'The :attribute field is required.',
|
||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||
'required_with' => 'The :attribute field is required when :values is present.',
|
||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||
'same' => 'The :attribute and :other must match.',
|
||||
'size' => [
|
||||
'numeric' => 'The :attribute must be :size.',
|
||||
'file' => 'The :attribute must be :size kilobytes.',
|
||||
'string' => 'The :attribute must be :size characters.',
|
||||
'array' => 'The :attribute must contain :size items.',
|
||||
],
|
||||
'starts_with' => 'The :attribute must start with one of the following: :values.',
|
||||
'string' => 'The :attribute must be a string.',
|
||||
'timezone' => 'The :attribute must be a valid zone.',
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'uploaded' => 'The :attribute failed to upload.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
'uuid' => 'The :attribute must be a valid UUID.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'custom-message',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap our attribute placeholder
|
||||
| with something more reader friendly such as "E-Mail Address" instead
|
||||
| of "email". This simply helps us make our message more expressive.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
19
resources/lang/pt/auth.php
Normal file
19
resources/lang/pt/auth.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'Estas credenciais não coincidem com os nossos registos.',
|
||||
'throttle' => 'Demasiadas tentativas de acesso. Tente novamente em :seconds segundos.',
|
||||
|
||||
];
|
610
resources/lang/pt/messages.php
Normal file
610
resources/lang/pt/messages.php
Normal file
@@ -0,0 +1,610 @@
|
||||
<?php
|
||||
/*
|
||||
* -- Information for translators | READ BEFORE TRANSLATING ANYTHING ---
|
||||
* In this file, only translate messages to the right, in this fashion:
|
||||
* 'something' => 'translate-me'
|
||||
* Also, don't translate, change, or move placeholders (:this-is-a-placeholder) starting with a colon.
|
||||
* Try to keep the message as close to the original in meaning as possible. These simple rules also apply to other files you're translating, such as:
|
||||
* auth.php, pagination.php, passwords.php, and validation.php.
|
||||
* It is VERY important that you "escape" single quotes with a backslash if they're present in your language, like this: I\'m an escaped quote
|
||||
*
|
||||
* Additionally, don't change anything in square or curly brackets, and don't remove pipe (|) characters.
|
||||
* If you see two messages separated by pipe, then usually the left side is singular and the right side is plural, so translate accordingly.
|
||||
*
|
||||
* Thank you for translating!
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// ============== MENU TRANSLATIONS ======================
|
||||
|
||||
|
||||
'menu' => [
|
||||
|
||||
'my_apps' => 'As minhas Candidaturas',
|
||||
'current_apps' => 'Candidaturas Atuais',
|
||||
'profile_settings' => 'Configurações do Perfil',
|
||||
'hiring_man' => 'Gestão de Contratação',
|
||||
'all_forms' => 'Todos os Formulários',
|
||||
'app_settings' => 'Configurações da App',
|
||||
'global_app_settings' => 'Configurações globais do aplicativo',
|
||||
'system_logs' => 'Registos do Sistema'
|
||||
],
|
||||
|
||||
|
||||
|
||||
// ============== REUSABLE, GENERIC STRINGS ===============
|
||||
|
||||
'reusable' => [
|
||||
'created_at' => 'Data de Criação',
|
||||
'updated_at' => 'Atualizado em',
|
||||
'actions' => 'Ações',
|
||||
'delete' => 'Apagar',
|
||||
'status' => 'Estado',
|
||||
'view' => 'Ver',
|
||||
'view_c' => 'Ver Detalhes',
|
||||
'no_access' => 'Acesso Negado à Aplicação',
|
||||
'validation_err' => 'Erro de validação!',
|
||||
'description' => 'Descrição',
|
||||
'join_date' => 'Data de inscrição',
|
||||
'my_acc' => 'Minha Conta',
|
||||
'confirm' => 'Por favor confirme',
|
||||
'confirm_plain' => 'Confirmar',
|
||||
'confirm_click' => 'Clique para confirmar',
|
||||
'date' => 'Data',
|
||||
'datetime' => 'Hora & Data',
|
||||
'location' => 'Local',
|
||||
'none_yet' => 'Nenhum ainda',
|
||||
'reason' => 'Motivo',
|
||||
'days' => 'Dias',
|
||||
'weeks' => 'Semanas',
|
||||
'months' => 'Meses',
|
||||
'years' => 'Anos',
|
||||
'yes' => 'Sim',
|
||||
'no' => 'Não',
|
||||
'roles' => 'Funções',
|
||||
'member_since' => 'Membro desde :date',
|
||||
'lookup' => 'Pesquisar :ipAddress',
|
||||
'abt' => 'Sobre',
|
||||
'acc' => 'Conta',
|
||||
'settings' => 'Definições',
|
||||
'profile' => 'Meu perfil',
|
||||
'code' => 'código',
|
||||
'here' => 'aqui',
|
||||
'auth_req' => 'Por favor autentique-se',
|
||||
'eligible' => 'Qualificado',
|
||||
'ineligible' => 'Não elegível',
|
||||
'schedule' => 'Agendar',
|
||||
'schedule_action' => 'Marcar um Compromisso',
|
||||
'platform' => 'Plataforma',
|
||||
'notepad' => 'Bloco Notas Partilhado', // Context: The shared notepad that appears when votes are needed,
|
||||
'appointment_info' => 'Informação da Marcação',
|
||||
'ip_info' => 'Informação de Endereço IP para'
|
||||
],
|
||||
|
||||
|
||||
// ============== HOMEPAGE MESSAGES ======================
|
||||
|
||||
'home' => 'Início',
|
||||
'homepagetxt' => 'Página Inicial',
|
||||
'login' => 'Iniciar sessão',
|
||||
'logout' => 'Terminar sessão',
|
||||
'register' => 'Inscreva-se',
|
||||
'dashboard' => 'Painel de controlo',
|
||||
'back' => 'Retroceder',
|
||||
'homepage_welcome' => 'Bem-vindo ao nosso centro de gestão de equipas!',
|
||||
'homepage_explainer_line1' => 'Aqui, você pode candidatar-se a cargos abertos, ver o estado da sua candidatura, e gerir o seu perfil.',
|
||||
'homepage_explainer_line2' => 'Registe-se com o E-mail para continuar.',
|
||||
'footer_copy' => 'Todos os direitos reservados',
|
||||
'global_error' => 'Ocorreu um erro',
|
||||
'global_success' => 'Sucesso!',
|
||||
'txt_learn_more' => 'Mais informações',
|
||||
'opening_nodetails' => 'Parecem não haver detalhes',
|
||||
'opening_nodetails_exp' => 'Esta candidatura ainda não tem detalhes.',
|
||||
'details_m_title' => 'Detalhes da Candidatura',
|
||||
'open_positions' => 'Vagas Abertas',
|
||||
'last_updated' => 'Última atualização',
|
||||
'open_position_count' => '{1} Há :count vaga aberta!|[2,*] Há :count vagas abertas!',
|
||||
'ineligible_days_remaining' => 'Não elegível (:days) dia(s) restantes',
|
||||
'txt_apply' => 'Candidatar-se', // Context: Apply as in applying for a "job", e.g. registering for a job
|
||||
'txt_application' => 'Candidatura',
|
||||
'application_closed' => 'Candidaturas Fechadas',
|
||||
'application_closed_intro' => 'Olá!',
|
||||
'application_closed_intro_line2' => '
|
||||
Atualmente não estamos contratando nenhum novo membro da equipa no momento. Se você quiser se candidatar, confira o canal de anúncios
|
||||
do Discord para saber quando abre uma nova vaga.
|
||||
Nosso ciclo de candidaturas geralmente dura duas semanas, então se você está vendo isso, é porque ela terminou, e um novo começará em breve.
|
||||
',
|
||||
'where_work' => 'Onde você trabalhará',
|
||||
'join_team' => 'Junte-se à equipa',
|
||||
'join_team_cta' => 'Junte-se hoje à equipa e ajude a rede a crescer e prosperar!',
|
||||
'contact_cta' => 'Alguma pergunta? Deixe uma mensagem!',
|
||||
'contact_disclaimer' => '*Este não é um formulário de candidatura. Qualquer candidatura enviada aqui será ignorada.',
|
||||
'contactlabel_name' => 'Nome',
|
||||
'contactlabel_email' => 'E-mail',
|
||||
'contactlabel_subject' => 'Assunto (ex. sugestão do site)',
|
||||
'contactlabel_send' => 'Enviar',
|
||||
|
||||
|
||||
|
||||
// ======================== AUTHENTICATION MESSAGES ===========================
|
||||
|
||||
'2fa_txt' => 'Autenticação de dois Fatores',
|
||||
'2fa_sronly' => 'Código secreto de dois fatores (Poderá encontrar isso no Google Authenticator)',
|
||||
'2fa_lostcode' => 'Não sabe o código?',
|
||||
'2fa_cancel_login' => 'Cancelar login (sair)',
|
||||
|
||||
'terms' => 'Condições de Utilização',
|
||||
'ppolicy' => 'Política de privacidade',
|
||||
|
||||
'signin_cta' => 'Entrar na sua conta',
|
||||
'password' => 'Palavra-passe',
|
||||
'remember_me' => 'Lembrar-me',
|
||||
'forgot_pw' => 'Esqueceu-se da palavra-passe?',
|
||||
'register_cta' => 'Registe-se aqui',
|
||||
'no_acc' => 'Não tem uma conta?',
|
||||
'register_acc' => 'Registar nova conta',
|
||||
'pwsec' => [
|
||||
'line1' => 'Verificar a segurança da password',
|
||||
'line2' => 'Para sua segurança, implementamos políticas de palavra-passe rigorosas. Também é aconselhável deixar o seu gestor de senhas ou o navegador gerar e salvar senhas para você (se for um dispositivo privado).',
|
||||
'line3' => 'As senhas devem ser uma combinação de: ',
|
||||
'line4' => 'Um mínimo de 10 caracteres;',
|
||||
'line5' => 'Pelo menos 3 caracteres maiúsculos;',
|
||||
'line6' => 'Pelo menos 3 números;',
|
||||
'line7' => 'Números e caracteres especiais.'
|
||||
],
|
||||
'sronly_confirmpassword' => 'Confirmar palavra-passe', // hint: sronly stands for screen-reader only
|
||||
'sronly_mcusername' => 'Utilizador do Minecraft (Premium)',
|
||||
'have_account' => 'Já tem uma conta?',
|
||||
'login_here' => 'Inicie sessão aqui',
|
||||
'register_txt' => 'Registe-se',
|
||||
|
||||
// ===================== DASHBOARD & COMPONENT MESSAGES ===========================
|
||||
|
||||
'modal_close' => 'Fechar',
|
||||
'component_nopermission' => 'Não tem permissões para aceder a este recurso.',
|
||||
'component_accessdenied' => 'Acesso negado',
|
||||
'component_contact' => 'Por favor, entre em contacto com seu administrador se acredita que isso foi um erro.',
|
||||
'welcome_back' => 'Bem-vindo de volta,',
|
||||
'eligible' => 'Qualificado',
|
||||
'ineligible' => 'Não elegível',
|
||||
'eligibility_status' => 'Seu atual estado de elegibilidade: :badgeStatus',
|
||||
'ongoing_apps' => 'Candidaturas a decorrer',
|
||||
'denied_apps' => 'Candidaturas negadas',
|
||||
'users_staff' => 'Utilizadores totais + Equipa',
|
||||
'new_apps' => 'Novas Candidaturas',
|
||||
'v_backlog' => 'Votos em atraso',
|
||||
'ranks' => 'Cargos disponíveis',
|
||||
'open' => 'Abrir',
|
||||
'closed' => 'Fechada',
|
||||
'upcoming' => 'As suas próximas entrevistas',
|
||||
'soon' => 'Disponível em breve',
|
||||
|
||||
|
||||
//=================== ADMINISTRATION MESSAGES (for all administration pages) ===============
|
||||
|
||||
'adm' => 'Administração',
|
||||
'devtools' => 'Ferramentas de Programador',
|
||||
'devtools_evn' => 'Gestão de Eventos',
|
||||
'devoptions' => 'Opções de Desenvolvedor',
|
||||
'forceeval' => 'Por favor, escolha uma candidatura para forçar reavaliação',
|
||||
'appid' => 'ID da candidatura',
|
||||
'no_valid_app' => 'Não há candidaturas válidas',
|
||||
'choose_app' => 'Escolha uma candidatura',
|
||||
'dispatch_event' => 'Enviar evento agora',
|
||||
'devtools_warn' => 'Não use estas opções se você não sabe o que está fazendo, mesmo se tiver acesso a esta página.',
|
||||
'warn' => 'Atenção',
|
||||
'override_votes' => 'Substituir Avaliação do Voto',
|
||||
'artisan_evaluate' => 'Artisan: Avaliar Votos Agora', // Tip: Artisan is a program name, therefore not translatable
|
||||
'devtools_info' => 'Este painel também pode ser usado para substituir completamente o sistema de votação em cenários de impasse',
|
||||
|
||||
|
||||
'forms' => 'Formulários',
|
||||
'positions' => 'Vagas', // Context: Positions as in job opening
|
||||
'edit_form' => 'Editar Formulário',
|
||||
'edt' => 'Editor',
|
||||
'edit' => 'Editar',
|
||||
'edt_action' => 'Editando',
|
||||
'txtbox' => 'Caixa de texto',
|
||||
'multiline' => 'Múltipla resposta',
|
||||
'checkbox' => 'Caixa de verificação',
|
||||
'field_type' => 'Selecione um Tipo de Campo',
|
||||
'save_exit' => 'Guardar e Sair',
|
||||
'new_field' => 'Novo Campo',
|
||||
'vacancy_edit' => 'Editor de vagas',
|
||||
'new_vacancy' => 'Nova vaga',
|
||||
'form_consistency' => 'Para fins de consistência, campos acinzentados não podem ser editados.',
|
||||
|
||||
'vacancy' => [
|
||||
'add' => 'Adicionar vaga',
|
||||
'name' => 'Nome da vaga',
|
||||
'description' => 'Descrição da vaga',
|
||||
'details' => 'Detalhes da vaga',
|
||||
'markdown' => 'Markdown suportado',
|
||||
'no_details' => 'Sem detalhes ainda... Adicione alguns!',
|
||||
'permission_group' => 'Grupos de Permissão',
|
||||
'permission_group_tooltip' => 'O grupo de permissões do seu servidor/rede. Compatível com a Luckperms e PEX.',
|
||||
'discord_roleid' => 'ID do cargo Discord',
|
||||
'discord_roleid_tooltip' => 'Discord Desktop: Vá para as configurações da sua conta > Aparência -> Avançado e ative o Modo Desenvolvedor. Na página de cargos do seu servidor, clique com o botão direito de qualquer cargo para copiar o ID.',
|
||||
'current_form' => 'Formulário atual (não editável)',
|
||||
'remaining_slots' => 'Espaços restantes',
|
||||
'free_slots' => 'Espaços livres',
|
||||
'free_slots_tooltip' => 'Quantas submissões antes que a vaga pare de aceitar novos candidatos?',
|
||||
'save' => 'Guardar Alterações',
|
||||
'cancel' => 'Cancelar',
|
||||
'close_vacancy' => 'Fechar vaga',
|
||||
'description_tooltip' => 'Adicione coisas como requisitos de admissão, responsabilidades e funções, e qualquer outra coisa que você ache necessária',
|
||||
''
|
||||
|
||||
],
|
||||
|
||||
'form' => 'Formulário',
|
||||
|
||||
'form_builder' => [
|
||||
'builder' => 'Construtor de Formulários',
|
||||
'builder_name' => 'Ferramenta de Gestão de Formulários de Candidatura',
|
||||
'name_form' => 'Nomeie o seu formulário...',
|
||||
'save_form' => 'Guardar Formulário',
|
||||
],
|
||||
|
||||
'form_preview' => [
|
||||
'preview' => 'Pré-visualizar',
|
||||
'title' => 'Pré-visualização do Formulário de Candidatura',
|
||||
'looks' => 'É assim que o seu formulário aparece para os candidatos',
|
||||
'f_info' => 'Você pode editá-lo e adicionar mais campos posteriormente.',
|
||||
''
|
||||
],
|
||||
|
||||
'forms_p' => [
|
||||
|
||||
'available_forms' => 'Formulários disponíveis',
|
||||
'form_title' => 'Título do Formulário',
|
||||
'empty_noforms' => 'Nada para ver aqui! Por favor, crie alguns formulários primeiro.',
|
||||
'new_form' => 'NOVO FORMULÁRIO'
|
||||
],
|
||||
|
||||
'players' => [
|
||||
|
||||
'reg_players' => 'Jogadores registados',
|
||||
'reg_players_staff' => 'Ver Jogadores Registados (Grupo de Candidatos)',
|
||||
'total_banned' => 'Total de jogadores banidos',
|
||||
'search' => 'Procurar jogadores',
|
||||
'f_p_search' => 'Pesquisa de e-mail completa/parcial',
|
||||
'p_disclaimer' => 'Atenção: Esta lista inclui apenas jogadores registados no portal de gestão de equipa. Numa versão futura, todos os jogadores da rede serão mostrados aqui.',
|
||||
'listing' => 'Lista de jogadores',
|
||||
'reg_date' => 'Data de registo',
|
||||
'ign' => 'IGN', // Context: Short for In-Game Name
|
||||
'banned' => 'Banido',
|
||||
'active' => 'Ativo',
|
||||
'no_reg' => 'Não há jogadores inscritos!',
|
||||
'no_reg_exp' => "
|
||||
Jogadores registados são aqueles que não possuem uma função administrativa no aplicativo de gestão de equipa.
|
||||
Pode haver outros utilizadores registados na plataforma, mas eles não serão exibidos aqui.
|
||||
",
|
||||
'see_staff' => 'Ver Membros da Equipa'
|
||||
|
||||
],
|
||||
|
||||
'positions_p' => [
|
||||
|
||||
'application_form' => 'Formulário de Candidatura',
|
||||
'select_form' => 'Selecione um formulário...',
|
||||
'no_form_error' => "
|
||||
Não pode criar uma vaga sem qualquer formulário cujos quais as pessoas se poderiam candidatar.
|
||||
Crie um formulário primeiro, e depois crie uma vaga.
|
||||
Um único formulário pode ter várias vagas, para que possa anexar futuras vagas ao mesmo formulário, se quiser.
|
||||
",
|
||||
'new_pos' => 'NOVA VAGA',
|
||||
'empty_pos_warning' => 'Nada para ver aqui! Abra algumas vagas primeiro. Isso fará os candidatos aparecerem! (esperançoso)',
|
||||
'manage_forms' => 'GERIR FORMULÁRIOS DE CANDIDATURA',
|
||||
|
||||
],
|
||||
|
||||
'settings' => [
|
||||
|
||||
'settings' => 'Definições',
|
||||
'settings_header' => 'Configuração das notificações',
|
||||
'settings_p' => 'Altere quais notificações são enviadas aqui.',
|
||||
'back_btn' => 'Voltar ao painel'
|
||||
|
||||
],
|
||||
|
||||
'staff' => [
|
||||
|
||||
'members' => 'Membros da Equipa',
|
||||
'active_sm' => 'Membros Ativos da Equipa',
|
||||
'm_listing' => 'Lista de Membros',
|
||||
'f_name' => 'Nome completo',
|
||||
'rank' => 'Cargo',
|
||||
],
|
||||
|
||||
// ======================== APPLICATION RENDERING MESSAGES =========================
|
||||
|
||||
'application_r' => [
|
||||
|
||||
'appl_submit_warn' => 'Tem certeza de que deseja enviar a sua candidatura? Por favor, analise cada uma das suas respostas cuidadosamente antes de enviá-la.',
|
||||
'appl_submit_doublewarn' => 'Por favor, note: Candidaturas NÃO PODEM serem modificadas assim que forem enviadas!',
|
||||
'acceptsend' => 'Aceitar e Enviar',
|
||||
'review' => 'Rever',
|
||||
'applying_for' => 'Você está se candidatando para: :name',
|
||||
'welcome' => [
|
||||
'yrs_old' => 'Anos de idade', // Context: "years old" as in: Tom is 24 years old
|
||||
'line1' => 'Estamos felizes que você decidiu se candidatar. Geralmente, as candidaturas levam 48 horas para serem processadas e revisadas. Dependendo das circunstâncias e do volume de candidaturas, você poderá receber uma resposta em um período mais curto de tempo.',
|
||||
'line2' => 'Por favor, preencha o formulário abaixo. Mantenha todas as respostas concisas e completas. Lembre-se de que o requisito de idade é de pelo menos :agerqr.',
|
||||
'line3' => 'Perguntar sobre a sua candidatura resultará em ser negado instantaneamente. Tudo o que você precisa saber está aqui.'
|
||||
],
|
||||
'app_timeout' => 'A sua conta não pode enviar outra candidatura. Por favor, espere :days mais dias antes de tentar enviar uma candidatura.'
|
||||
],
|
||||
|
||||
|
||||
'application_m' => [
|
||||
'title' => 'Gestão de Candidaturas',
|
||||
'all_apps' => 'Todas as Candidaturas',
|
||||
'modal_confirm' => 'Tem a certeza?',
|
||||
'really_delete' => 'Deseja realmente excluir isto?',
|
||||
|
||||
|
||||
'outstanding_sm' => 'Pendente',
|
||||
'outstanding_apps' => 'Candidaturas Pendendes',
|
||||
'outstanding_subm' => 'Pendente (Enviado)',
|
||||
|
||||
'interview_q' => 'Fila de entrevistas',
|
||||
'interview_p' => 'Entrevista',
|
||||
'interview_s' => 'Entrevista Agendada',
|
||||
'finished_int' => 'Entrevistas concluídas',
|
||||
'schedule_int' => 'Agendar Entrevistas',
|
||||
'p_review' => 'Revisão por pares',
|
||||
'applicant' => 'Candidato',
|
||||
'interviewee' => 'Entrevistado',
|
||||
'pending_int' => 'Entrevista Pendente',
|
||||
'schedule' => 'Agendar',
|
||||
|
||||
'view_interview_queue' => 'Ver fila de entrevistas',
|
||||
'view_approval_queue' => 'Ver Fila de Aprovação por Pares',
|
||||
'view_outstanding_queue' => 'Visualizar fila de pendentes',
|
||||
|
||||
'approved' => 'Aprovado',
|
||||
'denied' => 'Recusado',
|
||||
'unknown_stat' => 'Desconhecido',
|
||||
|
||||
'consequence_irreversible' => 'IRREVERSÍVEL',
|
||||
'delete_action_warning' => 'Esta ação é :consequence.',
|
||||
'delete_explainer' => 'Comentários, compromissos e quaisquer votos anexados a esta candidatura também serão excluídos. Por favor, certifique-se de que esta candidatura realmente precisa ser excluída.',
|
||||
|
||||
'all_apps_header' => 'Você está a ver todas as candidaturas recebidas',
|
||||
'all_apps_exp' => 'Aqui, você tem acesso rápido e fácil a todas as candidaturas recebidos pelo sistema.',
|
||||
|
||||
'no_apps' => 'Não há candidaturas aqui',
|
||||
'no_apps_exp' => 'Não conseguimos encontrar nenhuma candidatura. Talvez ninguém se inscreveu ainda? Por favor, tente novamente mais tarde.',
|
||||
'int_applications' => 'Candidaturas',
|
||||
|
||||
'no_apps_pending_int' => 'Nenhuma candidatura pendente de entrevista',
|
||||
'no_apps_pending_int_exp' => 'Não há aplicativos que tenham sido movidos para a fase de Entrevistas. Verifique a fila pendente. Aqui não há aplicativos que tenham sido movidos para a fase de Entrevistas. Por favor, verifique a fila pendente.',
|
||||
'upcoming_int' => 'Minhas próximas entrevistas',
|
||||
'pending_schedule' => 'Agendamento pendente',
|
||||
|
||||
'no_upcoming' => 'Não há próximas entrevistas',
|
||||
'no_upcoming_exp' => 'Por favor, verifique outras filas no processo de candidatura. Os candidatos aqui podem já ter sido entrevistados.',
|
||||
|
||||
'no_outstanding' => 'Não está vendo candidaturas? Verifique com um administrador para certificar-se de que existem posições abertas.',
|
||||
'no_outstanding_exp' => 'É também uma boa ideia a publicidade em fóruns relevantes para este fim.',
|
||||
|
||||
'applicant_name' => 'Nome do Candidato',
|
||||
'application_date' => 'Data de Inscrição',
|
||||
|
||||
'no_pending' => 'Não existem candidaturas pendente',
|
||||
'no_pending_exp' => 'Parece que ninguém novo se candidatou ainda. Confira as filas de entrevista e aprovação para candidaturas que podem ter movido fases até agora.',
|
||||
|
||||
'voting_reminder' => [
|
||||
|
||||
'title' => 'Lembrete de votação',
|
||||
'line1' => 'Candidaturas que obtêm mais de 50% dos votos positivos são automaticamente aprovadas após um dia.',
|
||||
'line2' => 'Inversamente, candidaturas que não atingem esse número são automaticamente negadas.',
|
||||
'line3' => 'Por favor, lembre-se que o sistema de votação pode ser substituído'
|
||||
|
||||
],
|
||||
|
||||
'no_pending_review' => 'Não há candidaturas pendentes de entrevista',
|
||||
'no_pending_review_exp' => 'Verifique as outras filas para ver mais candidaturas! As candidaturas serão mostradas aqui assim que as suas entrevistas forem concluídas. Poderá ver notas da reunião e votar baseando-se nas suas observações.',
|
||||
|
||||
],
|
||||
|
||||
// ============= PROFILE & USER MESSAGES ===============
|
||||
|
||||
'profile' => [
|
||||
|
||||
'title' => 'Perfil de :name',
|
||||
'profile' => 'Perfil',
|
||||
'users' => 'Utilizadores',
|
||||
'account_banned' => 'Conta banida',
|
||||
'account_banned_exp' => 'Este utilizador foi banido pelos moderadores.',
|
||||
'ban_confirm' => 'Por favor, confirme que você deseja banir este utilizador. Você precisará adicionar um motivo e uma data de expiração para confirmar isto. Banimentos não transferem para redes de Minecraft conectadas (ainda).',
|
||||
'leave_empty' => 'Deixe em branco para um banimento permanente',
|
||||
'duration' => 'Duração',
|
||||
'p_duration' => 'Duração da penalização',
|
||||
'p_duration_exp' => 'por exemplo, spam',
|
||||
'ban' => 'Banir',
|
||||
|
||||
'terminate_notice' => 'Você está prestes a excluir um membro da equipa',
|
||||
'terminate_notice_warning' => 'Excluir um membro da equipa irá remover os respetivos privilégios do site de gestão da equipa e da Rede.
|
||||
Eles serão notificados sobre o cancelamento. Certifique-se de que já tenha discutido isto com eles.',
|
||||
'terminate_notice_consequence' => 'ESTE PROCESSO É IRREVERSÍVEL E IMEDIATO',
|
||||
'terminate_txt' => 'Apagar membro da equipa',
|
||||
|
||||
'delete_acc_warn' => 'AVISO: Esta é uma ação potencialmente destrutiva!',
|
||||
'delete_acc_consequence' => 'Excluir uma conta de utilizador é um processo irreversível. Candidaturas históricas e atuais, votos e conteúdo do perfil, bem como qualquer informação que seja pessoalmente identificável serão imediatamente apagados.',
|
||||
'type_to_confirm' => 'Digite para confirmar:',
|
||||
'type_placeholder' => 'Digite o valor acima',
|
||||
|
||||
'delete_acc' => 'Apagar conta',
|
||||
'edit_acc' => 'Editar Conta',
|
||||
|
||||
'ban_acc' => 'Banir conta',
|
||||
'unban_acc' => 'Desbloquar conta',
|
||||
|
||||
'search_result' => 'Resultados da pesquisa',
|
||||
|
||||
'origin_cc' => 'País de origem',
|
||||
'state_prov' => 'Estado/Província',
|
||||
'district' => 'Distrito (se houver)',
|
||||
'city' => 'Cidade',
|
||||
'zipcode' => 'Código postal',
|
||||
'coords' => 'Coordenadas',
|
||||
'european' => 'Europeu?',
|
||||
'isp' => 'Provedor', // Internet service provider
|
||||
'org' => 'Organização (se houver)',
|
||||
'ctype' => 'T. de Ligação', // Internet Connection type
|
||||
'timezone' => 'Fuso horário',
|
||||
'noresults' => 'A sua pesquisa não retornou resultados.',
|
||||
|
||||
'edituser' => 'Editar dados pessoais e cargos', // PII: Personally identifiable information
|
||||
'edituser_consequence' => 'Aviso! Esta é uma configuração sensível! Mudar isto pode ter consequências não intencionais!',
|
||||
'acc_management' => 'Gestão de conta (administrador)',
|
||||
'discord_tag' => 'Tag do Discord: :discordTag',
|
||||
'account_settings' => 'Definições de Conta',
|
||||
'account_settings_personal' => 'Minhas Configurações de Conta',
|
||||
|
||||
'2fa_welcome' => 'Estamos felizes por você ter decidido aumentar a segurança de sua conta!',
|
||||
'supported_apps' => 'Aplicativos suportados que você pode instalar: ',
|
||||
'scan_code' => 'Leia o código :scannable com o seu aplicativo preferido e copie o código aqui.',
|
||||
'otp' => 'Código de uso único',
|
||||
'2fa_enable' => 'Ativar 2FA',
|
||||
'2fa_remove_consequence' => 'Remover a autenticação de dois fatores reduzirá a segurança de sua conta.',
|
||||
'2fa_password_confirm' => 'Confirme a sua palavra-passe para continuar',
|
||||
'2fa_password_confirm_exp' => 'Para impedir alterações não autorizadas, uma senha é sempre necessária para operações confidenciais.',
|
||||
'2fa_disable_consent' => '"Eu compreendo as possíveis consequências de desativar a autenticação de dois fatores"',
|
||||
'2fa_remove' => 'Remover 2FA',
|
||||
'2fa_remove_extended' => 'Desativar autenticação em dois passos',
|
||||
|
||||
'security_lgotherdev' => 'Para sua segurança, você precisará re-introduzir a sua senha antes de desconectar outros dispositivos. Se você acredita que sua conta foi comprometida, altere sua senha em vez disso, já que isso desconectará automaticamente qualquer pessoa que poderá estar usando sua conta e impedir que faça login novamente.',
|
||||
'password_reenter' => 'Repita a sua palavra-passe',
|
||||
|
||||
'acc_security' => 'Segurança da conta',
|
||||
'2fa' => 'Autenticação de dois Fatores',
|
||||
'sessions' => 'Sessões',
|
||||
'contact_settings' => 'Configurações de Contacto (E-Mail)',
|
||||
|
||||
'change_password' => 'Alterar palavra-passe',
|
||||
'change_password_exp' => 'Altere sua senha aqui. Isto desconectará você de todas as sessões existentes para sua segurança.',
|
||||
|
||||
'old_pass' => 'Palavra-passe antiga',
|
||||
'forgot_pw' => 'Esqueceu sua senha? Reponha-a :link',
|
||||
'new_pw' => 'Nova palavra-passe',
|
||||
|
||||
'2fa_enable_success' => 'Fixe! A 2FA está configurada corretamente para a sua conta. Será solicitado um código toda vez que você fizer login.',
|
||||
'2fa_avail' => 'A autenticação de dois fatores está disponível para sua conta.',
|
||||
'2fa_avail_exp' => ' Habilitar esta opção de segurança aumenta consideravelmente a segurança da sua conta caso a sua senha seja roubada.',
|
||||
|
||||
'session_manager' => 'Gestor de Sessões',
|
||||
'terminate_others' => 'Terminar outras sessões é geralmente uma boa ideia se sua conta foi comprometida.',
|
||||
'current_session' => 'Sua sessão atual: conectado a partir de :ipAddress',
|
||||
'flush_session' => 'Limpar sessões',
|
||||
'personal_data_change' => 'Precisa alterar dados pessoais? Você pode fazer isso aqui.',
|
||||
'current_email' => 'Endereço de e-mail atual',
|
||||
'new_email' => 'Novo endereço de e-mail',
|
||||
'current_password' => 'Palavra-passe Atual',
|
||||
'security_nochangepw' => 'Por motivos de segurança, você não pode fazer alterações de conta importantes sem confirmar a sua senha. Você também precisará confirmar o seu novo e-mail.',
|
||||
'change_email' => 'Alterar Endereço de Email',
|
||||
|
||||
'basic_info' => 'Informações básicas',
|
||||
'fl_name' => 'Primeiro e último nome',
|
||||
'shortbio' => 'Pequena biografia',
|
||||
'about_me' => 'Sobre mim',
|
||||
'pref_media' => 'Preferências & Média',
|
||||
'avatar_source' => 'Obter o avatar de: ',
|
||||
'social_media' => 'Redes Sociais',
|
||||
|
||||
'github_user' => 'Utilizador GitHub',
|
||||
'twitter_user' => 'Utilizador no Twitter',
|
||||
'insta_user' => 'Nome de Utilizador do Instagram',
|
||||
'discord_user' => '"Handle" do Discord',
|
||||
|
||||
'update_prfl' => 'Atualizar Perfil'
|
||||
|
||||
],
|
||||
|
||||
// ==================== USER ACCOUNT MESSAGES (NON-PRIVILEGED) =====================
|
||||
|
||||
'user' => [
|
||||
|
||||
'app_process' => [
|
||||
'title' => 'Processo de Candidatura',
|
||||
'line1' => 'Por favor, aguarde pelo menos três dias para que sua candidatura seja processada. A inscrição será revisada por todos os membros da equipa, e será promovida em fases.',
|
||||
'line2' => 'Se uma entrevista estiver programada, você precisará abrir o aplicativo aqui e confirmar a hora, data e local atribuídos para você.'
|
||||
],
|
||||
|
||||
'account_standing' => 'Estado da Conta',
|
||||
'account_eligibility' => 'Sua conta está atualmente :eligibility para candidatura',
|
||||
'days_remaining_acc_alt' => 'A partir de hoje, há :days restantes até que você tenha permissão para enviar outra candidatura.',
|
||||
'my_ongoingapps' => 'Minhas Candidaturas em Andamento',
|
||||
|
||||
'submitted' => 'Enviado',
|
||||
'peer_approval' => 'Aprovação em Pares',
|
||||
'peer_approval_q' => 'Fila de Aprovação por Pares',
|
||||
|
||||
'nothing_to_show' => 'Nada a exibir',
|
||||
'nothing_to_show_exp' => 'Você atualmente não tem nenhuma candidatura para exibir. Se você é elegível, você pode-se candidatar uma vez por mês.',
|
||||
|
||||
'directory' => [
|
||||
|
||||
'itsyou' => 'É você!',
|
||||
'title' => 'Diretório de Utilizadores',
|
||||
'directory' => 'Diretório'
|
||||
|
||||
]
|
||||
|
||||
],
|
||||
|
||||
'view_app' => [
|
||||
|
||||
'title' => 'Vendo candidatura',
|
||||
'viewing_app' => 'Visualizando a candidatura de :user',
|
||||
'cantvote' => 'Não pode votar nesta candidatura novamente.',
|
||||
'no_notes' => 'Ainda não há notas. Adicione algumas!',
|
||||
'deny_confirm' => 'Tem certeza que deseja negar esta candidatura? Por favor, tenha em mente que este utilizador só terá permissão para se candidatar 30 dias após sua primeira candidatura.',
|
||||
'deny_confirm_consequence' => 'Esta ação não pode ser desfeita.',
|
||||
'deny_confirm_btn' => 'Confirmar: Negar candidato',
|
||||
'form_updated_alert' => 'Se este formulário foi atualizado, novos campos e perguntas atualizadas não aparecerão aqui!',
|
||||
'context_info' => 'Informações contextuais',
|
||||
'appl_ip' => 'Endereço IP do candidato',
|
||||
'appl_for' => 'Candidatando-se a',
|
||||
'currentstatus' => 'Estado atual',
|
||||
'decisionmod' => 'Ferramentas de Decisão & Moderação',
|
||||
'denyapp' => 'Recusar candidato',
|
||||
'nextstage' => 'Mover para a próxima fase',
|
||||
'appointment_desc' => 'Descrição do agendamento',
|
||||
'int_date_time' => 'Data e Hora da Entrevista',
|
||||
'choosedate' => 'Clique para escolher uma data',
|
||||
'appointment_loc' => 'Local do Agendamento',
|
||||
'pref_platform' => 'Selecione sua plataforma preferida',
|
||||
'coming_soon_int' => 'Videoconferência interna em breve, suportada por Jitsi Meet',
|
||||
'scheduled_for' => 'Entrevista Agendada para:',
|
||||
'platform' => 'Plataforma',
|
||||
'finish_meeting' => 'Finalizar reunião',
|
||||
'view_notes' => 'Notas da Reunião',
|
||||
'vote_app' => 'Votar nesta candidatura',
|
||||
|
||||
'vote_explainer' => [
|
||||
|
||||
'line1' => 'Se você não estava presente durante esta reunião, pode visualizar o bloco de notas da reunião partilhado para ajudá-lo a tomar uma decisão.',
|
||||
'line2' => 'Você pode votar em quantas candidaturas forem necessárias; no entanto, só pode votar uma vez por candidatura.',
|
||||
'line3' => 'Os votos não têm peso baseado no cargo. Esse sistema foi projetado com justiça e facilidade de uso em mente.'
|
||||
|
||||
],
|
||||
|
||||
'vote_approve' => 'Voto: Aprovar o candidato',
|
||||
'vote_deny' => 'Voto: Negar o candidato',
|
||||
'm_notes' => 'Notas da Reunião',
|
||||
'view_more' => 'Ver mais candidaturas',
|
||||
'comments' => 'Comentários',
|
||||
'no_comments' => 'Ainda não há comentários.',
|
||||
'no_comments_exp' => 'Não há comentários aqui! Comentários só são visíveis para os membros da equipa. Seja o primeiro a partilhar a sua opinião! Comentar pode ajudar na tomada de decisões quando chegar o momento de votar na candidatura.',
|
||||
'commenting_as' => 'Comentando como :username',
|
||||
'max_chars' => 'caracteres no máximo', // Context: A number is added before max characters
|
||||
'post' => 'Publicar', // Context: Post as in post comment
|
||||
|
||||
]
|
||||
|
||||
// ==================== END OF MAIN I18N FILE ======================
|
||||
|
||||
];
|
19
resources/lang/pt/pagination.php
Normal file
19
resources/lang/pt/pagination.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Anterior',
|
||||
'next' => 'Seguinte »',
|
||||
|
||||
];
|
22
resources/lang/pt/passwords.php
Normal file
22
resources/lang/pt/passwords.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'reset' => 'Sua palavra-passe foi redefinida!',
|
||||
'sent' => 'Enviamos um e-mail com um link para redefinir a sua password!',
|
||||
'throttled' => 'Por favor, aguarde antes de tentar novamente.',
|
||||
'token' => 'Token para recuperação de senha inválido.',
|
||||
'user' => "Não foi possível encontrar um utilizador com este e-mail.",
|
||||
|
||||
];
|
151
resources/lang/pt/validation.php
Normal file
151
resources/lang/pt/validation.php
Normal file
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
'accepted' => 'O :attribute tem que ser aceite.',
|
||||
'active_url' => 'O campo :attribute deve conter uma URL válida.',
|
||||
'after' => 'O :attribute tem de ser uma data após :date.',
|
||||
'after_or_equal' => 'O campo :attribute deverá conter uma data posterior ou igual a :date.',
|
||||
'alpha' => 'O campo :attribute deve conter apenas letras.',
|
||||
'alpha_dash' => 'O campo :attribute deverá conter apenas letras, números e traços.',
|
||||
'alpha_num' => 'O campo :attribute deve conter apenas letras e números.',
|
||||
'array' => 'O campo :attribute deverá conter uma coleção de elementos.',
|
||||
'before' => 'O campo :attribute deverá conter uma data anterior a :date.',
|
||||
'before_or_equal' => 'O Campo :attribute deverá conter uma data anterior ou igual a :date.',
|
||||
'between' => [
|
||||
'numeric' => 'O campo :attribute deve conter um número entre :min e :max.',
|
||||
'file' => 'O campo :attribute deve estar compreendido entre :min e :max kilobytes.',
|
||||
'string' => 'O :attribute deverá ser entre :min e :max caracteres.',
|
||||
'array' => 'O campo :attribute deverá conter entre :min - :max elementos.',
|
||||
],
|
||||
'boolean' => 'O campo :attribute deverá conter o valor verdadeiro ou falso.',
|
||||
'confirmed' => 'A confirmação do :attribute não coincide.',
|
||||
'date' => 'O campo :attribute não contém uma data válida.',
|
||||
'date_equals' => 'O :attribute deve ser uma data igual a :date.',
|
||||
'date_format' => 'O :attribute não corresponde ao formato :format.',
|
||||
'different' => 'Os campos :attribute e :other deverão conter valores diferentes.',
|
||||
'digits' => 'O :attribute deve ter :digits dígitos.',
|
||||
'digits_between' => 'O :attribute tem de ter entre :min e :max dígitos.',
|
||||
'dimensions' => 'O :attribute tem dimensões de imagem inválidas.',
|
||||
'distinct' => 'O campo :attribute contém um valor duplicado.',
|
||||
'email' => 'O :attribute tem de ser um e-mail válido.',
|
||||
'ends_with' => 'O :attribute deve terminar com um dos seguintes: :values.',
|
||||
'exists' => 'O :attribute selecionado é inválido.',
|
||||
'file' => 'O campo :attribute deverá conter um ficheiro.',
|
||||
'filled' => 'O campo :attribute deve ter um valor.',
|
||||
'gt' => [
|
||||
'numeric' => 'O :attribute deve ser maior do que :value.',
|
||||
'file' => 'O :attribute deve ser maior que :value kilobytes.',
|
||||
'string' => 'O :attribute deve ser maior que :value caracteres.',
|
||||
'array' => 'O :attribute deve ter mais de :value itens.',
|
||||
],
|
||||
'gte' => [
|
||||
'numeric' => 'O :attribute deve ser maior ou igual a :value.',
|
||||
'file' => 'O :attribute deve ser maior ou igual a :value kilobytes.',
|
||||
'string' => 'O :attribute deve ser maior ou igual a :value caracteres.',
|
||||
'array' => 'O :attribute deve ter :value itens ou mais.',
|
||||
],
|
||||
'image' => 'O :attribute tem de ser uma imagem.',
|
||||
'in' => 'O :attribute selecionado é inválido.',
|
||||
'in_array' => 'O campo :attribute não existe em :other.',
|
||||
'integer' => 'O campo :attribute deve conter um número inteiro.',
|
||||
'ip' => 'O :attribute deve ser um endereço IP válido.',
|
||||
'ipv4' => 'O campo :attribute deverá conter um IPv4 válido.',
|
||||
'ipv6' => 'O campo :attribute deverá conter um IPv6 válido.',
|
||||
'json' => 'O campo :attribute deve conter uma string JSON válida.',
|
||||
'lt' => [
|
||||
'numeric' => 'O :attribute tem de ser menor ou igual que :value.',
|
||||
'file' => 'O :attribute deve ter menos de :value kilobytes.',
|
||||
'string' => 'O :attribute deve ter menos de :value caracteres.',
|
||||
'array' => 'O campo :attribute deve ter menos de :value itens.',
|
||||
],
|
||||
'lte' => [
|
||||
'numeric' => 'O :attribute tem de ser menor ou igual que :value.',
|
||||
'file' => 'O :attribute deve ser menor ou igual a :value kilobytes.',
|
||||
'string' => 'O :attribute deve ser menor ou igual a :value caracteres.',
|
||||
'array' => 'O :attribute não deve ter mais de :value items.',
|
||||
],
|
||||
'max' => [
|
||||
'numeric' => 'O campo :attribute não pode conter um valor superior a :max.',
|
||||
'file' => 'O :attribute não deve ser maior que :max kilobytes.',
|
||||
'string' => 'O :attribute não pode ter mais que :max caracteres.',
|
||||
'array' => 'O :attribute não deverá ter mais que :max itens.',
|
||||
],
|
||||
'mimes' => 'O :attribute só pode conter os seguintes formatos: :values.',
|
||||
'mimetypes' => 'O :attribute deve ser um ficheiro do tipo: :attribute.',
|
||||
'min' => [
|
||||
'numeric' => 'O campo :attribute deve conter um número superior ou igual a :min.',
|
||||
'file' => 'O campo :attribute deve conter um arquivo com no mínimo :min kilobytes.',
|
||||
'string' => 'O campo :attribute deve conter pelo menos :min itens.',
|
||||
'array' => 'O campo :attribute deve conter pelo menos :min itens.',
|
||||
],
|
||||
'not_in' => 'O :attribute selecionado é inválido.',
|
||||
'not_regex' => 'O formato do valor informado no campo :attribute é inválido.',
|
||||
'numeric' => 'O campo :attribute deve conter um valor numérico.',
|
||||
'password' => 'A palavra-passe está incorreta.',
|
||||
'present' => 'O campo :attribute deve estar presente.',
|
||||
'regex' => 'O formato do :attribute é inválido.',
|
||||
'required' => 'O campo :attribute é obrigatório.',
|
||||
'required_if' => 'É obrigatória a indicação de um valor para o campo :attribute quando o valor do campo :other é igual a :value.',
|
||||
'required_unless' => 'O campo :attribute e obrigatório, a menos que :other esteja em :values.',
|
||||
'required_with' => 'O campo :attribute é obrigatório quando o :value se encontra definido.',
|
||||
'required_with_all' => 'O campo :attribute é obrigatório quando :values estão presentes.',
|
||||
'required_without' => 'O campo :attribute é necessário quando :values não está presente.',
|
||||
'required_without_all' => 'O campo :attribute é obrigatório quando nenhum dos :values está presente.',
|
||||
'same' => 'Os campos :attribute e :other deverão conter valores iguais.',
|
||||
'size' => [
|
||||
'numeric' => 'O :attribute deve ser maior que :size.',
|
||||
'file' => 'O campo :attribute deve conter um arquivo com o tamanho de :size kilobytes.',
|
||||
'string' => 'O campo :attribute deverá conter :size caracteres.',
|
||||
'array' => 'O :attribute tem de conter :size itens.',
|
||||
],
|
||||
'starts_with' => 'O :attribute deve começar com um dos seguintes: :values.',
|
||||
'string' => 'O campo :attribute deverá conter texto.',
|
||||
'timezone' => 'O campo :attribute deve conter um fuso horário válido.',
|
||||
'unique' => 'O valor indicado para o campo :attribute já se encontra registado.',
|
||||
'uploaded' => 'O :attribute falhou ao ser enviado.',
|
||||
'url' => 'O formato do valor informado no campo :attribute é inválido.',
|
||||
'uuid' => 'O campo :attribute deve conter um UUID válido.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
'custom' => [
|
||||
'attribute-name' => [
|
||||
'rule-name' => 'mensagem-personalizada',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap our attribute placeholder
|
||||
| with something more reader friendly such as "E-Mail Address" instead
|
||||
| of "email". This simply helps us make our message more expressive.
|
||||
|
|
||||
*/
|
||||
|
||||
'attributes' => [],
|
||||
|
||||
];
|
36
resources/views/auth/2fa.blade.php
Normal file
36
resources/views/auth/2fa.blade.php
Normal file
@@ -0,0 +1,36 @@
|
||||
@extends('breadcrumbs.auth.main')
|
||||
|
||||
@section('authpage')
|
||||
|
||||
<div class="container">
|
||||
<div class="card login-card">
|
||||
<div class="row no-gutters">
|
||||
<div class="col-md-5">
|
||||
<img src="/img/login.jpg" alt="login" class="login-card-img">
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="card-body">
|
||||
<div class="brand-wrapper">
|
||||
<img src="{{ config('adminlte.logo_img') }}" alt="logo" class="logo">{{ config('adminlte.logo') }}
|
||||
</div>
|
||||
<p class="login-card-description">{{__('messages.2fa_txt')}}</p>
|
||||
<form action="{{ route('verify2FA') }}" method="POST" id="verify">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="name" class="sr-only">{{__('messages.2fa_sronly')}}</label>
|
||||
<input type="text" name="otp" id="name" class="form-control" placeholder="2FA Code (e.g. 543324)">
|
||||
</div>
|
||||
<input name="register" id="register" class="btn btn-block login-btn mb-4" type="submit" value="Send 2FA Code">
|
||||
</form>
|
||||
<p class="login-card-footer-text">{{__('messages.2fa_lostcode')}} <a href="{{ route('logout') }}" class="text-reset">{{__('messages.2fa_cancel_login')}}</a></p>
|
||||
<nav class="login-card-footer-nav">
|
||||
<a href="#!">{{__('messages.terms')}}</a>
|
||||
<a href="#!">{{__('messages.ppolicy')}}</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
@@ -1 +1,44 @@
|
||||
@extends('adminlte::auth.login')
|
||||
@extends('breadcrumbs.auth.main')
|
||||
|
||||
@section('authpage')
|
||||
|
||||
<div class="container">
|
||||
<div class="card login-card">
|
||||
<div class="row no-gutters">
|
||||
<div class="col-md-5">
|
||||
<img src="/img/login.jpg" alt="login" class="login-card-img">
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="card-body">
|
||||
<div class="brand-wrapper">
|
||||
<img src="{{ config('adminlte.logo_img') }}" alt="logo" class="logo">{{ config('adminlte.logo') }}
|
||||
</div>
|
||||
<p class="login-card-description">{{__('messages.signin_cta')}}</p>
|
||||
<form action="{{ route('login') }}" method="POST" id="loginForm">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="email" class="sr-only">{{__('messages.contactlabel_email')}}</label>
|
||||
<input type="email" name="email" id="email" class="form-control" placeholder="Email address">
|
||||
</div>
|
||||
<div class="form-group mb-4">
|
||||
<label for="password" class="sr-only">{{__('messages.password')}}</label>
|
||||
<input type="password" name="password" id="password" class="form-control" placeholder="***********">
|
||||
</div>
|
||||
<div class="form-group mb-4">
|
||||
<label for="remember">{{__('messages.remember_me')}}</label>
|
||||
<input type="checkbox" name="remember" id="remember" />
|
||||
</div>
|
||||
<input name="login" id="login" class="btn btn-block login-btn mb-4" type="submit" value="{{__('messages.login')}}">
|
||||
</form>
|
||||
<a href="{{ route('password.request') }}" class="forgot-password-link">{{__('messages.forgot_pw')}}</a>
|
||||
<p class="login-card-footer-text">{{__('messages.no_acc')}} <a href="{{ route('register') }}" class="text-reset">{{__('messages.register_cta')}}</a></p>
|
||||
<nav class="login-card-footer-nav">
|
||||
<a href="#!">{{__('messages.terms')}}</a>
|
||||
<a href="#!">{{__('messages.ppolicy')}}</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
||||
|
@@ -1 +1,74 @@
|
||||
@extends('adminlte::auth.register')
|
||||
@extends('breadcrumbs.auth.main')
|
||||
|
||||
@section('authpage')
|
||||
|
||||
<div class="container">
|
||||
<div class="card login-card">
|
||||
<div class="row no-gutters">
|
||||
<div class="col-md-5">
|
||||
<img src="/img/login.jpg" alt="login" class="login-card-img">
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="card-body">
|
||||
<div class="brand-wrapper">
|
||||
<img src="{{ config('adminlte.logo_img') }}" alt="logo" class="logo">{{ config('adminlte.logo') }}
|
||||
</div>
|
||||
<p class="login-card-description">{{__('messages.register_acc')}}</p>
|
||||
<div class="alert alert-warning alert-dismissible">
|
||||
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
|
||||
<p><b>{{__('messages.pwsec.line1')}}</b></p>
|
||||
<p>{{__('messages.pwsec.line2')}}</p>
|
||||
|
||||
<p>{{__('messages.pwsec.line3')}} </p>
|
||||
<ul>
|
||||
<li>
|
||||
{{__('messages.pwsec.line4')}}
|
||||
</li>
|
||||
<li>
|
||||
{{__('messages.pwsec.line5')}}
|
||||
</li>
|
||||
<li>
|
||||
{{__('messages.pwsec.line6')}}
|
||||
</li>
|
||||
<li>
|
||||
{{__('messages.pwsec.line7')}}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<form action="{{ route('register') }}" method="POST" id="registerForm">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="name" class="sr-only">{{__('messages.contactlabel_name')}}</label>
|
||||
<input type="text" name="name" id="name" class="form-control" placeholder="{{__('messages.contactlabel_name')}}">
|
||||
</div>
|
||||
<div class="form-group mb-4">
|
||||
<label for="email" class="sr-only">{{__('messages.contactlabel_email')}}</label>
|
||||
<input type="email" name="email" id="email" class="form-control" placeholder="{{__('messages.contactlabel_email')}}">
|
||||
</div>
|
||||
<div class="form-group mb-4">
|
||||
<label for="password" class="sr-only">{{__('messages.password')}}</label>
|
||||
<input type="password" name="password" id="password" class="form-control" placeholder="{{__('messages.password')}}">
|
||||
</div>
|
||||
<div class="form-group mb-4">
|
||||
<label for="passwordc" class="sr-only">{{__('messages.sronly_confirmpassword')}}</label>
|
||||
<input type="password" id="passwordc" name="password_confirmation" class="form-control" placeholder="{{__('messages.sronly_confirmpassword')}}" />
|
||||
</div>
|
||||
|
||||
<div class="form-group mt-5">
|
||||
<label for="mcusername" class="sr-only">{{__('messages.sronly_mcusername')}}</label>
|
||||
<input type="text" name="uuid" class="form-control" id="mcusername" placeholder="{{__('messages.sronly_mcusername')}}" />
|
||||
</div>
|
||||
<input name="register" id="register" class="btn btn-block login-btn mb-4" type="submit" value="{{__('messages.register_txt')}}">
|
||||
</form>
|
||||
<p class="login-card-footer-text">{{__('messages.have_account')}} <a href="{{ route('login') }}" class="text-reset">{{__('messages.login_here')}}</a></p>
|
||||
<nav class="login-card-footer-nav">
|
||||
<a href="#!">{{__('messages.terms')}}</a>
|
||||
<a href="#!">{{__('messages.ppolicy')}}</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
@@ -1 +1 @@
|
||||
@extends('adminlte::auth.verify')
|
||||
@extends('adminlte::auth.verify')
|
||||
|
@@ -5,21 +5,23 @@
|
||||
@if (session()->has('error'))
|
||||
|
||||
<script>
|
||||
toastr.error('{{session()->get('error')}}', 'An error ocurred')
|
||||
toastr.error('{{session()->get('error')}}', '{{__('messages.global_error')}}')
|
||||
</script>
|
||||
|
||||
@elseif (session()->has('success'))
|
||||
|
||||
<script>
|
||||
toastr.success('{{session()->get('success')}}', 'Success!')
|
||||
toastr.success('{{session()->get('success')}}', '{{__('messages.global_success')}}')
|
||||
</script>
|
||||
|
||||
@endif
|
||||
|
||||
@yield('content')
|
||||
|
||||
@include('breadcrumbs.footer')
|
||||
|
||||
@include('breadcrumbs.footer')
|
||||
<script>
|
||||
$('.dropdown-toggle').dropdown()
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
29
resources/views/breadcrumbs/auth/main.blade.php
Normal file
29
resources/views/breadcrumbs/auth/main.blade.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>{{ config('app.name') . ' | ID' }}</title>
|
||||
<link href="https://fonts.googleapis.com/css?family=Karla:400,700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/4.8.95/css/materialdesignicons.min.css">
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css" />
|
||||
<link rel="stylesheet" href="/css/login.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<main class="d-flex align-items-center min-vh-100 py-3 py-md-0">
|
||||
@yield('authpage')
|
||||
</main>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/toastr@2.1.4/toastr.min.js"></script>
|
||||
|
||||
<x-global-errors></x-global-errors>
|
||||
|
||||
</body>
|
@@ -1,9 +1,9 @@
|
||||
<!-- Footer -->
|
||||
<footer class="page-footer font-small footer-grad">
|
||||
|
||||
<!-- Copyright -->
|
||||
<!-- Copyright - DO NOT REMOVE WITHOUT PERMISSION -->
|
||||
<div class="footer-copyright text-center py-3">
|
||||
<a href="https://spacejewel-hosting.com/"> Spacejewel Hosting © 2019-2020 - All rights reserved</a>
|
||||
<a href="https://spacejewel-hosting.com/"> Spacejewel Hosting © 2019-2020 - {{__('messages.footer_copy')}}</a>
|
||||
</div>
|
||||
<!-- Copyright -->
|
||||
<!-- Built by Miguel Nogueira -->
|
||||
|
@@ -10,6 +10,7 @@
|
||||
<meta name="tags" content="minecraft, minecraft server staff, minecraft staff, minecraft servers">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<title>{{config('app.name')}} | {{__('messages.home')}}</title>
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css">
|
||||
<!-- Google Fonts -->
|
||||
@@ -43,7 +44,7 @@
|
||||
<header>
|
||||
|
||||
<nav class="navbar fixed-top navbar-expand-lg navbar-dark">
|
||||
<a class="navbar-brand" href="#"><strong>Raspberry Network</strong></a>
|
||||
<a class="navbar-brand" href="#"><strong>{{config('app.name')}}</strong></a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
@@ -51,10 +52,22 @@
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav mr-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link " href="#">Homepage</a>
|
||||
<a class="nav-link " href="{{config('app.sitehomepage')}}">{{__('messages.homepagetxt')}}</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="#">Ban Appeals</a>
|
||||
<li class="nav-item dropdown">
|
||||
<a href="#" class="nav-link dropdown-toggle"><i class="fas fa-language"></i> Language</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="dropdown-item text-center">
|
||||
<a target="_blank" href="https://crowdin.com/project/raspberry-staff-manager"><img src="https://badges.crowdin.net/raspberry-staff-manager/localized.svg"></a>
|
||||
</li>
|
||||
@foreach(Mcamara\LaravelLocalization\Facades\LaravelLocalization::getSupportedLocales() as $localeCode => $properties)
|
||||
<li class="dropdown-item">
|
||||
<a rel="alternate" hreflang="{{ $localeCode }}" href="{{ Mcamara\LaravelLocalization\Facades\LaravelLocalization::getLocalizedURL($localeCode, null, [], true) }}">
|
||||
<img src="https://www.countryflags.io/{{($localeCode == 'en') ? 'gb' : $localeCode}}/flat/24.png"> {{ $properties['native'] }}
|
||||
</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -62,23 +75,23 @@
|
||||
<ul class="navbar-nav ml-auto float-right">
|
||||
@guest
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-info" type="button" onclick="window.location.href='{{route('login')}}'"><i class="fas fa-sign-in-alt"></i> Sign-in</button>
|
||||
<button class="btn btn-info" type="button" onclick="window.location.href='{{route('login')}}'"><i class="fas fa-sign-in-alt"></i> {{__('messages.login')}}</button>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<button class="btn btn-info" type="button" onclick="window.location.href='{{route('register')}}'"><i class="fas fa-plus"></i> Sign-up</button>
|
||||
<button class="btn btn-info" type="button" onclick="window.location.href='{{route('register')}}'"><i class="fas fa-plus"></i> {{__('messages.register')}}</button>
|
||||
</li>
|
||||
@endguest
|
||||
|
||||
@auth
|
||||
<li class="nav-item">
|
||||
<button type="button" class="btn btn-info" onclick="window.location.href='{{route('dashboard')}}'">Dashboard</button>
|
||||
<button type="button" class="btn btn-info" onclick="window.location.href='{{route('dashboard')}}'">{{__('messages.dashboard')}}</button>
|
||||
</li>
|
||||
|
||||
<li class="nav-item">
|
||||
<form method="POST" action="{{route('logout')}}">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-danger"><i class="fa fa-power-off"></i> Sign-out</button>
|
||||
<button type="submit" class="btn btn-danger"><i class="fa fa-power-off"></i>{{__('messages.logout')}}</button>
|
||||
</form>
|
||||
</li>
|
||||
@endauth
|
||||
@@ -92,11 +105,11 @@
|
||||
<div class="mask rgba-black-light flex-center">
|
||||
<div class="container text-center white-text">
|
||||
<div class="white-text text-center wow fadeInUp">
|
||||
<h2>Raspberry Network Application Center</h2>
|
||||
<h5>Welcome to our team management center!</h5>
|
||||
<h2>{{config('app.name')}}</h2>
|
||||
<h5> {{__('messages.homepage_welcome')}}</h5>
|
||||
<br>
|
||||
<p>Here, you can apply for open staff member positions, view your application status, and manage your profile. </p>
|
||||
<p>Sign up with Email to continue.</p>
|
||||
<p>{{__('messages.homepage_explainer_line1')}}</p>
|
||||
<p>{{__('messages.homepage_explainer_line2')}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -17,7 +17,7 @@
|
||||
{{ $modalFooter }}
|
||||
|
||||
@if ($includeCloseButton == true)
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{__('messages.modal_close')}}</button>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -16,12 +16,12 @@
|
||||
<div class="col">
|
||||
|
||||
<div class="alert alert-{{$type}}">
|
||||
<h4><i class="fas fa-user-lock"></i> Access Denied</h2>
|
||||
<h4><i class="fas fa-user-lock"></i> {{__('messages.component_accessdenied')}}</h4>
|
||||
<p>
|
||||
We're sorry, but you do not have permission to access this web page.
|
||||
{{__('messages.component_nopermission')}}
|
||||
</p>
|
||||
<p>
|
||||
Please contact your administrator if you believe this was in error.
|
||||
{{__('messages.component_contact')}}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Developer Options')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.devoptions'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Administration / Developer Tools</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.devtools')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -14,27 +14,27 @@
|
||||
|
||||
@section('content')
|
||||
|
||||
<x-modal id="confirmForceEventDispatch" modal-label="confirmForceEventDispatch" modal-title="Choose an application" include-close-button="true">
|
||||
<x-modal id="confirmForceEventDispatch" modal-label="confirmForceEventDispatch" modal-title="{{__('messages.choose_app')}}" include-close-button="true">
|
||||
|
||||
<p>Please choose an application to force re-evaluation</p>
|
||||
<p>{{__('messages.forceeval')}}</p>
|
||||
<form method="POST" id="forceEval" action="{{route('devToolsForceVoteCount')}}">
|
||||
@csrf
|
||||
<select name="application" class="custom-select">
|
||||
@if(!$applications->isEmpty())
|
||||
@foreach($applications as $application)
|
||||
|
||||
<option value="{{$application->id}}">Application ID {{$application->id}} ({{$application->user->name}})</option>
|
||||
<option value="{{$application->id}}">{{__('messages.appid')}} {{$application->id}} ({{$application->user->name}})</option>
|
||||
|
||||
@endforeach
|
||||
@else
|
||||
<option value="null" disabled>There are no valid applications</option>
|
||||
<option value="null" disabled>{{__('messages.no_valid_app')}}</option>
|
||||
@endif
|
||||
</select>
|
||||
|
||||
</form>
|
||||
|
||||
<x-slot name="modalFooter">
|
||||
<button type="button" class="btn btn-danger" onclick="document.getElementById('forceEval').submit()">Dispatch event now</button>
|
||||
<button type="button" class="btn btn-danger" onclick="document.getElementById('forceEval').submit()">{{__('messages.dispatch_event')}}</button>
|
||||
</x-slot>
|
||||
|
||||
</x-modal>
|
||||
@@ -44,8 +44,8 @@
|
||||
|
||||
<div class="alert alert-warning">
|
||||
|
||||
<i class="fa fa-exclamation-triangle"></i> <b>Warning</b>
|
||||
<p>Do not use these options if you don't know what you're doing, even if you have access to this page.</p>
|
||||
<i class="fa fa-exclamation-triangle"></i> <b>{{__('messages.warn')}}</b>
|
||||
<p>{{__('messages.devtools_warn')}}</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -55,16 +55,16 @@
|
||||
|
||||
<div class="col">
|
||||
|
||||
<x-card id="tools" card-title="Event Management" footer-style="text-center">
|
||||
<x-card id="tools" card-title="{{__('messages.devtools_evn')}}" footer-style="text-center">
|
||||
|
||||
<x-slot name="cardHeader">
|
||||
|
||||
</x-slot>
|
||||
<button type="button" class="btn btn-danger" onclick="$('#confirmForceEventDispatch').modal('show')">Override Vote Evaluation</button>
|
||||
<button type="button" class="btn btn-warning ml-3">Artisan: Evaluate Votes Now</button>
|
||||
<button type="button" class="btn btn-danger" onclick="$('#confirmForceEventDispatch').modal('show')">{{__('messages.override_votes')}}</button>
|
||||
<button type="button" class="btn btn-warning ml-3">{{__('messages.artisan_evaluate')}}</button>
|
||||
|
||||
<x-slot name="cardFooter">
|
||||
<p class="text-muted"> This panel may be also used to completely override the vote system in stalemate scenarios.</p>
|
||||
<p class="text-muted"> .</p>
|
||||
</x-slot>
|
||||
</x-card>
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Administration / Forms / Editor</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.forms')}} / {{__('messages.edt')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
<div class="card-header">
|
||||
|
||||
<h4>Editing {{ $title }}...</h4>
|
||||
<h4>{{__('messages.edt_action')}} {{ $title }}...</h4>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -61,10 +61,10 @@
|
||||
|
||||
<select class="custom-select" id="{{ $fieldName }}-type" name="{{ $fieldName }}[]">
|
||||
|
||||
<option value="nil" disabled>Choose a type</option>
|
||||
<option value="textbox" {{ ($field['type'] == 'textbox' ? 'selected' : '') }}>Textbox</option>
|
||||
<option value="textarea" {{ ($field['type'] == 'textarea' ? 'selected' : '') }}>Multi line answer</option>
|
||||
<option value="checkbox" {{ ($field['type'] == 'checkbox' ? 'selected' : '') }}>Checkbox</option>
|
||||
<option value="nil" disabled>{{__('messages.field_type')}}</option>
|
||||
<option value="textbox" {{ ($field['type'] == 'textbox' ? 'selected' : '') }}>{{__('messages.txtbox')}}</option>
|
||||
<option value="textarea" {{ ($field['type'] == 'textarea' ? 'selected' : '') }}>{{__('messages.multiline')}}</option>
|
||||
<option value="checkbox" {{ ($field['type'] == 'checkbox' ? 'selected' : '') }}>{{__('messages.checkbox')}}</option>
|
||||
|
||||
</select>
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
|
||||
<div class="card-footer text-center">
|
||||
|
||||
<button type="button" class="btn btn-warning ml-2" onclick="$('#editForm').submit()"><i class="fas fa-save"></i> Save & Quit</button>
|
||||
<button type="button" class="btn btn-primary ml-2" id="add"><i class="fas fa-plus"></i> New field</button>
|
||||
<button type="button" class="btn btn-warning ml-2" onclick="$('#editForm').submit()"><i class="fas fa-save"></i> {{__('messages.save_exit')}}</button>
|
||||
<button type="button" class="btn btn-primary ml-2" id="add"><i class="fas fa-plus"></i> {{__('messages.new_field')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Administration / Positions / Edit</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.positions')}} / {{__('messages.edit')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
<div class="col center">
|
||||
|
||||
<h3>Vacancy Editor</h3>
|
||||
<h3>{{__('messages.vacancy_edit')}}</h3>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -49,9 +49,9 @@
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<p class="text-muted"><i class="fas fa-question-circle"></i> For consistency purposes, grayed out fields can't be edited.</p>
|
||||
<p class="text-muted"><i class="fas fa-question-circle"></i> {{__('messages.form_consistency')}}</p>
|
||||
|
||||
<form method="POST" id="editPositionForm" action="{{ route('updatePosition', ['position' => $vacancy->id]) }}">
|
||||
<form method="POST" id="editPositionForm" action="{{ route('updatePosition', ['vacancy' => $vacancy->id]) }}">
|
||||
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
@@ -61,14 +61,14 @@
|
||||
<div class="col">
|
||||
|
||||
|
||||
<label for="vacancyName">Vacancy Name</label>
|
||||
<label for="vacancyName">{{__('messages.vacancy.name')}}</label>
|
||||
<input type="text" value="{{ $vacancy->vacancyName }}" class="form-control" disabled />
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
|
||||
<label for="vacancyDescription">Vacancy description</label>
|
||||
<label for="vacancyDescription">{{__('messages.vacancy.description')}}</label>
|
||||
<input type="vacancyDescription" class="form-control" name="vacancyDescription" value="{{ $vacancy->vacancyDescription }}" />
|
||||
|
||||
|
||||
@@ -81,9 +81,9 @@
|
||||
<div class="col">
|
||||
|
||||
<!-- skipping the accessor for obvious reasons -->
|
||||
<label for="vacanyDetails">Vacancy details</label>
|
||||
<textarea name="vacancyFullDescription" class="form-control" placeholder="{{ (is_null($vacancy->vacancyFullDescription)) ? 'No details yet. Add some!' : '' }}" rows="20">{{ $vacancy->getAttributes()['vacancyFullDescription'] }}</textarea>
|
||||
<span class="text-muted"><i class="fab fa-markdown"></i> Markdown supported</span>
|
||||
<label for="vacanyDetails">{{__('messages.vacancy.details')}}</label>
|
||||
<textarea name="vacancyFullDescription" class="form-control" placeholder="{{ (is_null($vacancy->vacancyFullDescription)) ? __('messages.vacancy.no_details') : '' }}" rows="20">{{ $vacancy->getAttributes()['vacancyFullDescription'] }}</textarea>
|
||||
<span class="text-muted"><i class="fab fa-markdown"></i> {{__('messages.vacancy.markdown')}}</span>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -93,14 +93,14 @@
|
||||
|
||||
<div class="col">
|
||||
|
||||
<label for "permissionGroupName">Permission Group</label>
|
||||
<label for="permissionGroupName">{{__('messages.vacancy.permission_group')}}</label>
|
||||
<input type="text" class="form-control" value="{{ $vacancy->permissionGroupName }}" id="permissionGroupName" disabled />
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
|
||||
<label for "discordRoleID">Discord Role ID</label>
|
||||
<label for="discordRoleID">{{__('messages.vacancy.discord_roleid')}}</label>
|
||||
<input type="text" class="form-control" value="{{ $vacancy->discordRoleID }}" id="discordRoleID" disabled />
|
||||
|
||||
|
||||
@@ -111,10 +111,10 @@
|
||||
|
||||
<div class="col">
|
||||
|
||||
<label for "currentForm">Current Form (uneditable)</label>
|
||||
<label for="currentForm">{{__('messages.vacancy.current_form')}}</label>
|
||||
<input type="text" class="form-control" value="{{ $vacancy->forms->formName }}" id="currentForm" disabled />
|
||||
|
||||
<label for "remainingSlots">Remaining slots</label>
|
||||
<label for="remainingSlots">{{__('messages.vacancy.remaining_slots')}}</label>
|
||||
<input type="text" class="form-control" value="{{ $vacancy->vacancyCount }}" id="remainingSlots" name="vacancyCount" />
|
||||
|
||||
|
||||
@@ -128,15 +128,15 @@
|
||||
|
||||
<div class="card-footer">
|
||||
|
||||
<button type="button" class="btn btn-warning" onclick="$('#editPositionForm').submit()"><i class="fas fa-edit"></i> Save Changes</button>
|
||||
<button type="button" class="btn btn-danger" onclick="window.location.href='{{ route('showPositions') }}'"><i class="fas fa-times"></i> Cancel</button>
|
||||
<button type="button" class="btn btn-warning" onclick="$('#editPositionForm').submit()"><i class="fas fa-edit"></i> {{__('messages.vacancy.save')}}</button>
|
||||
<button type="button" class="btn btn-danger" onclick="window.location.href='{{ route('showPositions') }}'"><i class="fas fa-times"></i> {{__('messages.vacancy.cancel')}}</button>
|
||||
|
||||
@if($vacancy->vacancyStatus == 'OPEN')
|
||||
|
||||
<form method="POST" action="{{ route('updatePositionAvailability', ['vacancy' => $vacancy->id, 'status' => 'close']) }}" style="display: inline">
|
||||
@method('PATCH')
|
||||
@csrf
|
||||
<button type="submit" class="ml-4 btn btn-danger"><i class="fas fa-ban"></i> Close Position</button>
|
||||
<button type="submit" class="ml-4 btn btn-danger"><i class="fas fa-ban"></i> {{__('messages.vacancy.close_vacancy')}}</button>
|
||||
</form>
|
||||
|
||||
@endif
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Application Form Management Tool')
|
||||
@section('title', config('app.name') . '| ' . __('messages.form_builder.builder_name'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Administration / Form Builder</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.form_builder.builder')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -45,9 +45,9 @@
|
||||
@csrf
|
||||
|
||||
<fieldset id="buildyourform">
|
||||
<legend class="text-center">Form Builder</legend>
|
||||
<legend class="text-center">{{__('messages.form_builder.builder')}}</legend>
|
||||
|
||||
<input type="text" name="formName" class="form-control mb-5" placeholder="Name your form..." required>
|
||||
<input type="text" name="formName" class="form-control mb-5" placeholder="{{__('messages.form_builder.name_form')}}" required>
|
||||
|
||||
</fieldset>
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
|
||||
<div class="card-footer text-center">
|
||||
|
||||
<button onclick="save()" type="button" class="btn btn-success">Save Form</button>
|
||||
<input type="button" value="New Field" class="add btn btn-info ml-3" id="add" />
|
||||
<button onclick="save()" type="button" class="btn btn-success">{{__('messages.form_builder.save_form')}}</button>
|
||||
<input type="button" value="{{__('messages.new_field')}}" class="add btn btn-info ml-3" id="add" />
|
||||
|
||||
|
||||
</div>
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Application Form Preview')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.form_preview.title'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Administration / Form Builder / Preview</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.form_builder.builder')}} / {{__('messages.form_preview.preview')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
<div class="col">
|
||||
<div class="alert alert-success">
|
||||
|
||||
<h5><i class="fas fa-eye"></i> This is how your form looks like to applicants</h3>
|
||||
<h5><i class="fas fa-eye"></i> {{__('messages.form_preview.looks')}}</h5>
|
||||
|
||||
<p>
|
||||
You may edit it and add more fields later.
|
||||
{{__('messages.form_preview.f_info')}}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
<div class="card-header">
|
||||
|
||||
<h3>{{ $title }}'s form</h2>
|
||||
<h3>{{ $title }} - {{__('messages.form')}}</h2>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -66,8 +66,8 @@
|
||||
|
||||
<div class="card-footer text-center">
|
||||
|
||||
<button type="button" class="btn btn-success ml-2" onclick="window.location.href='{{ route('showForms') }}'"><i class="fas fa-chevron-left"></i> Go back</button>
|
||||
<button type="button" class="btn btn-warning ml-2" onclick="window.location.href='{{ route('editForm', ['form' => $formID]) }}'"><i class="far fa-edit"></i> Edit</button>
|
||||
<button type="button" class="btn btn-success ml-2" onclick="window.location.href='{{ route('showForms') }}'"><i class="fas fa-chevron-left"></i> {{__('messages.back')}}</button>
|
||||
<button type="button" class="btn btn-warning ml-2" onclick="window.location.href='{{ route('editForm', ['form' => $formID]) }}'"><i class="far fa-edit"></i> {{__('messages.edit')}}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Application Form Management Tool')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.forms_p.available_forms'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Administration / Forms</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.forms')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<div class="card bg-gray-dark">
|
||||
|
||||
<div class="card-header bg-indigo">
|
||||
<div class="card-title"><h4 class="text-bold">Available Forms</h4></div>
|
||||
<div class="card-title"><h4 class="text-bold">{{__('messages.forms_p.available_forms')}}</h4></div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@@ -36,10 +36,10 @@
|
||||
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Form Title</th>
|
||||
<th>Created On</th>
|
||||
<th>Updated On</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.forms_p.form_title')}}</th>
|
||||
<th>{{__('messages.reusable.created_at')}}</th>
|
||||
<th>{{__('messages.reusable.updated_at')}}</th>
|
||||
<th>{{__('messages.reusable.actions')}}</th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
@@ -59,9 +59,9 @@
|
||||
@method('DELETE')
|
||||
@csrf
|
||||
|
||||
<button type="submit" class="btn btn-sm btn-danger mr-2"><i class="fa fa-trash"></i> Delete</button>
|
||||
<button type="submit" class="btn btn-sm btn-danger mr-2"><i class="fa fa-trash"></i> {{__('messages.reusable.delete')}}</button>
|
||||
</form>
|
||||
<button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{ route('previewForm', ['form' => $form->id]) }}'"><i class="fa fa-eye"></i> Preview</button>
|
||||
<button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{ route('previewForm', ['form' => $form->id]) }}'"><i class="fa fa-eye"></i> {{__('messages.form_preview.preview')}}</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
<div class="alert alert-warning">
|
||||
|
||||
Nothing to see here! Please add some forms first.
|
||||
{{__('messages.forms_p.empty_noforms')}}
|
||||
|
||||
</div>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
<div class="card-footer">
|
||||
|
||||
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route('showFormBuilder')}}'">NEW FORM</button>
|
||||
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route('showFormBuilder')}}'">{{__('messages.forms_p.new_form')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Registered Players')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.players.reg_players'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Administration / Registered Players</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.players.reg_players')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<div class="inner">
|
||||
<h3>{{$users->count()}}</h3>
|
||||
|
||||
<p>Registered Players</p>
|
||||
<p>{{__('messages.players.reg_players')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-users"></i>
|
||||
@@ -37,7 +37,7 @@
|
||||
<div class="inner">
|
||||
<h3>{{$bannedUserCount}}</h3>
|
||||
|
||||
<p>Total Banned Players</p>
|
||||
<p>{{__('messages.players.total_banned')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-ban"></i>
|
||||
@@ -55,7 +55,7 @@ I
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="card-title"><h4><i class="fas fa-search"></i>Search Players</h4></div>
|
||||
<div class="card-title"><h4><i class="fas fa-search"></i>{{__('messages.players.search')}}</h4></div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@@ -63,7 +63,7 @@ I
|
||||
<form name="search" method="POST" action="{{route('searchRegisteredPLayerList')}}">
|
||||
@csrf
|
||||
<div class="input-group">
|
||||
<input type="text" name="searchTerm" class="form-control" placeholder="Full/partial email search">
|
||||
<input type="text" name="searchTerm" class="form-control" placeholder="{{__('messages.players.f_p_search')}}">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default" type="submit">
|
||||
<i class="fa fa-search"></i>
|
||||
@@ -87,7 +87,7 @@ I
|
||||
<div class="col">
|
||||
|
||||
<div class="alert alert-warning">
|
||||
<p>Please note: This list only includes players registered in the team management portal. In a future release, all network players will be shown here.</p>
|
||||
<p>{{__('messages.players.p_disclaimer')}}</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -103,7 +103,7 @@ I
|
||||
|
||||
<div class="card-header bg-indigo">
|
||||
|
||||
<div class="card-title"><h4 class="text-bold">Player Listing</h4></div>
|
||||
<div class="card-title"><h4 class="text-bold">{{__('messages.players.listing')}}</h4></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -114,12 +114,12 @@ I
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>IGN</th>
|
||||
<th>{{__('messages.players.ign')}}</th>
|
||||
<th>UUID</th>
|
||||
<th>Email</th>
|
||||
<th>Status</th>
|
||||
<th>Registration Date</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.contactlabel_email')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
<th>{{__('messages.players.reg_date')}}</th>
|
||||
<th>{{__('messages.reusable.actions')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -134,9 +134,9 @@ I
|
||||
<td>{{ $user->email }}</td>
|
||||
<td>
|
||||
@if ($user->isBanned())
|
||||
<span class="badge badge-danger"><i class="fa fa-ban"></i> Banned</span>
|
||||
<span class="badge badge-danger"><i class="fa fa-ban"></i> {{__('messages.players.banned')}}</span>
|
||||
@else
|
||||
<span class="badge badge-success">Active</span>
|
||||
<span class="badge badge-success">{{__('messages.players.active')}}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>{{$user->created_at}}</td>
|
||||
@@ -153,10 +153,9 @@ I
|
||||
@else
|
||||
<div class="alert alert-secondary">
|
||||
|
||||
<i class="fas fa-question"></i><span> There are no registered players!</span>
|
||||
<i class="fas fa-question"></i><span> {{__('messages.players.no_reg')}}</span>
|
||||
<p>
|
||||
Registered players are those without a staff role in the team management application.
|
||||
There may be other users registered in the platform, but they won't be displayed here.
|
||||
{{__('messages.players.no_reg_exp')}}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
@@ -165,7 +164,7 @@ I
|
||||
|
||||
<div class="card-footer">
|
||||
|
||||
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route("staffMemberList")}}'">See Staff Members</button>
|
||||
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route("staffMemberList")}}'">{{__('messages.players.see_staff')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -1,13 +1,13 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Open Positions')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.open_positions'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
@if (Auth::user()->hasAnyRole('admin', 'hiringManager'))
|
||||
<h4>Administration / Open Positions</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.open_positions')}}</h4>
|
||||
@else
|
||||
<h4>Application Access Denied</h4>
|
||||
<h4>{{__('messages.reusable.no_access')}}</h4>
|
||||
@endif
|
||||
|
||||
@stop
|
||||
@@ -29,7 +29,7 @@
|
||||
@if($errors->any())
|
||||
|
||||
@foreach ($errors->all() as $error)
|
||||
<script>toastr.error('{{$error}}', 'Validation error!')</script>
|
||||
<script>toastr.error('{{$error}}', '{{__('messages.reusable.validation_err')}}')</script>
|
||||
@endforeach
|
||||
|
||||
@endif
|
||||
@@ -43,7 +43,7 @@
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="modalFormLabel">New Vacancy</h5>
|
||||
<h5 class="modal-title" id="modalFormLabel">{{__('messages.new_vacancy')}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
@@ -54,35 +54,35 @@
|
||||
|
||||
<form id="savePositionForm" action="{{route('savePosition')}}" method="POST">
|
||||
@csrf
|
||||
<label for="vacancyName">Vacancy name (e.g. Helper)</label>
|
||||
<label for="vacancyName">{{__('messages.vacancy.name')}}</label>
|
||||
<input type="text" id="vacancyName" name="vacancyName" class="form-control">
|
||||
|
||||
<label for="vacancyDescription">Vacancy Description</label>
|
||||
<label for="vacancyDescription">{{__('messages.vacancy.description')}}</label>
|
||||
<input type="text" id="vacancyDescription" name="vacancyDescription" class="form-control">
|
||||
|
||||
<label for="vacancyFullDescription">Vacancy Details</label>
|
||||
<textarea name="vacancyFullDescription" class="form-control" rel="txtTooltip" title="Add things like admission requirements, rank resposibilities and roles, and anything else you feel is necessary" data-toggle="tooltip" data-placement="bottom"></textarea>
|
||||
<span class="right text-muted"><i class="fab fa-markdown"></i> Markdown supported</span>
|
||||
<label for="vacancyFullDescription">{{__('messages.vacancy.description')}}</label>
|
||||
<textarea name="vacancyFullDescription" class="form-control" rel="txtTooltip" title="{{__('messages.vacancy.description_tooltip')}}" data-toggle="tooltip" data-placement="bottom"></textarea>
|
||||
<span class="right text-muted"><i class="fab fa-markdown"></i> {{__('messages.vacancy.markdown')}}</span>
|
||||
<div class="row mt-3">
|
||||
|
||||
<div class="col">
|
||||
<label for="pgroup">Permission Group Name</label>
|
||||
<input rel="txtTooltip" title="The permission group from your server/network's permissions manager. Compatible with Luckperms and PEX." data-toggle="tooltip" data-placement="bottom" type="text" id="pgroup" name="permissionGroup" class="form-control">
|
||||
<label for="pgroup">{{__('messages.vacancy.permission_group')}}</label>
|
||||
<input rel="txtTooltip" title="{{__('messages.vacancy.permission_group_tooltip')}}" data-toggle="tooltip" data-placement="bottom" type="text" id="pgroup" name="permissionGroup" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<label for="discordrole">Discord Role ID (*)</label>
|
||||
<input rel="txtTooltip" title="Discord Desktop: Go to your Account Settings > Appearance -> Advanced and toggle Developer Mode. On your server's roles tab, right click any role to copy it's ID." data-toggle="tooltip" data-placement="bottom" type="text" id="discordrole" name="discordRole" class="form-control">
|
||||
<label for="discordrole">{{__('messages.vacancy.discord_roleid')}} (*)</label>
|
||||
<input rel="txtTooltip" title="{{__('messages.vacancy.discord_roleid_tooltip')}}" data-toggle="tooltip" data-placement="bottom" type="text" id="discordrole" name="discordRole" class="form-control">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="form-group mt-4">
|
||||
|
||||
<label for="associatedForm">Application form</label>
|
||||
<label for="associatedForm">{{__('messages.positions_p.application_form')}}</label>
|
||||
<select class="custom-select" name="vacancyFormID" id="associatedForm">
|
||||
|
||||
<option disabled>Select a form...</option>
|
||||
<option disabled>{{__('messages.positions_p.select_form')}}</option>
|
||||
@foreach($forms as $form)
|
||||
|
||||
<option value="{{$form->id}}">{{$form->formName}}</option>
|
||||
@@ -91,8 +91,8 @@
|
||||
|
||||
</select>
|
||||
|
||||
<label for="vacancyCount">Free slots</label>
|
||||
<input rel="txtTooltip" title="How many submissions before the vacancy stops accepting new applicants?" data-toggle="tooltip" data-placement="bottom" type="text" id="vacancyCount" name="vacancyCount" class="form-control">
|
||||
<label for="vacancyCount">{{__('messages.vacancy.free_slots')}}</label>
|
||||
<input rel="txtTooltip" title="{{__('messages.vacancy.free_slots_tooltip')}}" data-toggle="tooltip" data-placement="bottom" type="text" id="vacancyCount" name="vacancyCount" class="form-control">
|
||||
|
||||
|
||||
</div>
|
||||
@@ -103,9 +103,7 @@
|
||||
<div class="alert alert-danger">
|
||||
|
||||
<p>
|
||||
You cannot create a vacancy without any forms with which people would apply.
|
||||
Please create a form first, then, create a vacancy.
|
||||
A single form is allowed to have multiple vacancies, so you can attach future vacancies to the same form if you'd like.
|
||||
{{__('messages.positions_p.no_form_error')}}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -115,10 +113,10 @@
|
||||
<div class="modal-footer">
|
||||
|
||||
@if(!$forms->isEmpty())
|
||||
<button type="button" class="btn btn-primary" onclick="document.getElementById('savePositionForm').submit()">Add Vacancy</button>
|
||||
<button type="button" class="btn btn-primary" onclick="document.getElementById('savePositionForm').submit()">{{__('messages.vacancy.add')}}</button>
|
||||
@endif
|
||||
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{__('messages.modal_close')}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -132,7 +130,7 @@
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<button type="button" class="btn btn-primary" onclick="$('#newVacancyForm').modal('show')">NEW POSITION</button>
|
||||
<button type="button" class="btn btn-primary" onclick="$('#newVacancyForm').modal('show')">{{__('messages.positions_p.new_pos')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -149,7 +147,7 @@
|
||||
<div class="card bg-gray-dark">
|
||||
|
||||
<div class="card-header bg-indigo">
|
||||
<div class="card-title"><h4 class="text-bold">Open Vacancies</h4></div>
|
||||
<div class="card-title"><h4 class="text-bold">{{__('messages.open_positions')}}</h4></div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@@ -161,14 +159,14 @@
|
||||
<thead>
|
||||
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Description</th>
|
||||
<th>Discord Role ID</th>
|
||||
<th>Perm. Group Name</th>
|
||||
<th>Open Slots</th>
|
||||
<th>Status</th>
|
||||
<th>Created On</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.contactlabel_name')}}</th>
|
||||
<th>{{__('messages.reusable.description')}}</th>
|
||||
<th>{{__('messages.vacancy.discord_roleid')}}</th>
|
||||
<th>{{__('messages.vacancy.permission_group')}}</th>
|
||||
<th>{{__('messages.vacancy.free_slots')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
<th>{{__('messages.reusable.created_at')}}</th>
|
||||
<th>{{__('messages.reusable.actions')}}</th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
@@ -184,14 +182,14 @@
|
||||
<td><span class="badge badge-success">{{$vacancy->permissionGroupName}}</span></td>
|
||||
<td>{{$vacancy->vacancyCount}}</td>
|
||||
@if($vacancy->vacancyStatus == 'OPEN')
|
||||
<td><span class="badge badge-success">OPEN</span></td>
|
||||
<td><span class="badge badge-success">{{__('messages.open')}}</span></td>
|
||||
@else
|
||||
<td><span class="badge badge-danger">CLOSED</span></td>
|
||||
<td><span class="badge badge-danger">{{__('messages.closed')}}</span></td>
|
||||
@endif
|
||||
<td>{{$vacancy->created_at}}</td>
|
||||
<td>
|
||||
|
||||
<button type="button" class="btn btn-sm btn-warning" onclick="window.location.href='{{ route('editPosition', ['position' => $vacancy->id]) }}'"><i class="fas fa-edit"></i></button>
|
||||
<button type="button" class="btn btn-sm btn-warning" onclick="window.location.href='{{ route('editPosition', ['vacancy' => $vacancy->id]) }}'"><i class="fas fa-edit"></i></button>
|
||||
|
||||
@if ($vacancy->vacancyStatus == 'OPEN')
|
||||
|
||||
@@ -223,7 +221,7 @@
|
||||
@else
|
||||
|
||||
<div class="alert alert-warning">
|
||||
<p>Nothing to see here! Open some vacancies first. This will get applicants pouring in! (hopefully)</p>
|
||||
<p>{{__('messages.positions_p.empty_pos_warning')}}</p>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
@@ -231,7 +229,7 @@
|
||||
|
||||
<div class="card-footer">
|
||||
|
||||
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route('showForms')}}'">MANAGE APPLICATION FORMS</button>
|
||||
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route('showForms')}}'">{{__('messages.positions_p.manage_forms')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
76
resources/views/dashboard/administration/settings.blade.php
Normal file
76
resources/views/dashboard/administration/settings.blade.php
Normal file
@@ -0,0 +1,76 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', config('app.name') . ' | ' . __('messages.settings.settings'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
@if (Auth::user()->hasAnyRole('admin'))
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.settings.settings')}}</h4>
|
||||
@else
|
||||
<h4>{{__('messages.reusable.no_access')}}</h4>
|
||||
@endif
|
||||
|
||||
@stop
|
||||
|
||||
@section('js')
|
||||
|
||||
@if (session()->has('success'))
|
||||
<script>
|
||||
toastr.success("{{session('success')}}")
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if (session()->has('error'))
|
||||
<script>
|
||||
toastr.error("{{session('error')}}")
|
||||
</script>
|
||||
@endif
|
||||
|
||||
@if($errors->any())
|
||||
@foreach ($errors->all() as $error)
|
||||
<script>toastr.error('{{$error}}', 'Validation error!')</script>
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
@stop
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col">
|
||||
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<h3>{{__('messages.settings.settings_header')}}</h3>
|
||||
<p>{{__('messages.settings.settings_p')}}</p>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<form name="settings" id="settings" method="post" action="{{route('saveSettings')}}">
|
||||
@csrf
|
||||
@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. -->
|
||||
<!-- 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">
|
||||
<input type="checkbox" name="{{$option->option_name}}" value="1" id="{{$option->option_name}}" class="form-check-input" {{ ($option->option_value == 1) ? 'checked' : '' }}>
|
||||
<label for="{{$option->option_name}}">{{$option->friendly_name}}</label>
|
||||
</div>
|
||||
@endforeach
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="card-footer">
|
||||
<button type="button" class="btn btn-success" onclick="$('#settings').submit()"><i class="fa fa-save"></i> {{__('messages.vacancy.save')}}</button>
|
||||
<button type="button" class="btn btn-warning" onclick="window.location.href='{{route('dashboard')}}'"><i class="fa fa-arrow-circle-o-left"></i> {{__('messages.settings.back_btn')}}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@stop
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Staff Members')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.staff.members'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Administration / Staff Members</h4>
|
||||
<h4>{{__('messages.adm')}} / {{__('messages.staff.members')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class="inner">
|
||||
<h3>{{$users->count()}}</h3>
|
||||
|
||||
<p>Active Staff Members</p>
|
||||
<p>{{__('messages.staff.active_sm')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-user-tie"></i>
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
<div class="card-header bg-indigo">
|
||||
|
||||
<div class="card-title"><h4 class="text-bold">Member Listing</h4></div>
|
||||
<div class="card-title"><h4 class="text-bold">{{__('messages.staff.m_listing')}}</h4></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -46,13 +46,13 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Full Name</th>
|
||||
<th>{{__('messages.staff.f_name')}}</th>
|
||||
<th>UUID</th>
|
||||
<th>Rank</th>
|
||||
<th>Email</th>
|
||||
<th>Status</th>
|
||||
<th>Join Date</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.staff.rank')}}</th>
|
||||
<th>{{__('messages.contactlabel_email')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
<th>{{__('messages.reusable.join_date')}}</th>
|
||||
<th>{{__('messages.reusable.actions')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
@endforeach
|
||||
</td>
|
||||
<td>{{ $user->email }}</td>
|
||||
<td><span class="badge badge-success">Active</span></td>
|
||||
<td><span class="badge badge-success">{{__('messages.players.active')}}</span></td>
|
||||
<td>{{$user->created_at}}</td>
|
||||
<td>
|
||||
<button type="button" class="btn btn-sm btn-success mr-2" onclick="window.location.href='{{route('showSingleProfile', ['user' => $user->id])}}'"><i class="fa fa-eye"></i></button>
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
<div class="card-footer">
|
||||
|
||||
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route("registeredPlayerList")}}'">See Registered Players (Applicant Pool)</button>
|
||||
<button type="button" class="btn btn-outline-primary" onclick="window.location.href='{{route("registeredPlayerList")}}'">{{__('messages.players.reg_players_staff')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -1,9 +1,9 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network Team Management')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.txt_apply'))
|
||||
|
||||
@section('content_header')
|
||||
<h1>My Account / Apply / {{$vacancy->vacancyName}} Application</h1>
|
||||
<h1>{{__('messages.reusable.my_acc')}} / {{__('messages.txt_apply')}} / {{$vacancy->vacancyName}} {{__('messages.txt_application')}}</h1>
|
||||
@stop
|
||||
|
||||
@section('js')
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
@if(!$isEligibleForApplication)
|
||||
|
||||
<script>toastr.error("You do not have permission to view this page.", "Access denied")</script>
|
||||
<script>toastr.error("{{__('messages.reusable.no_access')}}")</script>
|
||||
|
||||
@endif
|
||||
|
||||
@@ -38,20 +38,20 @@
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="modalConfirmLabel">Please confirm</h5>
|
||||
<h5 class="modal-title" id="modalConfirmLabel">{{__('messages.reusable.confirm')}}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<p>Are you sure you want to submit your application? Please review each of your answers carefully before doing so.</p>
|
||||
<p class="text-bold">Please note: Applications CANNOT be modified once they're submitted!</p>
|
||||
<p>{{__('messages.application_r.appl_submit_warn')}}</p>
|
||||
<p class="text-bold">{{__('messages.application_r.appl_submit_doublewarn')}}</p>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-success" onclick="document.getElementById('submitApplicationForm').submit()"><i class="fas fa-check-double"></i> Accept & Send</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Review</button>
|
||||
<button type="button" class="btn btn-success" onclick="document.getElementById('submitApplicationForm').submit()"><i class="fas fa-check-double"></i> {{__('messages.application_r.acceptsend')}}</button>
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">{{__('messages.application_r.review')}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -63,11 +63,11 @@
|
||||
|
||||
<div class="callout callout-success">
|
||||
|
||||
<p class="text-bold">You are applying for: {{$vacancy->vacancyName}}</p>
|
||||
<p class="text-bold">{{__('messages.application_r.applying_for', ['name' => $vacancy->vacancyName])}}</p>
|
||||
|
||||
<p>We're glad you've decided to apply. Generally, applications take 48 hours to be processed and reviewed. Depending on the circumstances and the volume of applications, you may receive an answer in a shorter time.</p>
|
||||
<p>Please fill out the form below. Keep all answers concise and complete. Please keep in mind that the age requirement is <b>at least 18 years old</b>.</p>
|
||||
<p class="text-bold">Asking about your application will result in instant denial. Everything you need to know is here.</p>
|
||||
<p>{{__('messages.application_r.welcome.line1')}}</p>
|
||||
<p>{{__('messages.application_r.welcome.line2', ['agerqr' => '18 ' . __('messages.application_r.welcome.yrs_old')])}}.</p>
|
||||
<p class="text-bold">{{__('messages.application_r.welcome.line3')}}.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
<div class="card-footer text-center">
|
||||
|
||||
<button type="button" class="btn btn-success" onclick="$('#confirm').modal('show')"><i class="fas fa-paper-plane"></i> Send</button>
|
||||
<button type="button" class="btn btn-success" onclick="$('#confirm').modal('show')"><i class="fas fa-paper-plane"></i> {{__('messages.contactlabel_send')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -118,9 +118,9 @@
|
||||
|
||||
<div class="alert alert-danger">
|
||||
|
||||
<p class="text-bold">Access denied</p>
|
||||
<p class="text-bold">{{__('messages.reusable.no_access')}}</p>
|
||||
|
||||
<p>Your account is not permitted to submit another application. Please wait {{$eligibilityDaysRemaining}} more days before trying to submit an application.</p>
|
||||
<p>{{__('messages.application_r.app_timeout', ['days' => $eligibilityDaysRemaining])}}</p>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Profile')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.application_m.all_apps'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Application Management / All Applications</h4>
|
||||
<h4>{{__('messages.application_m.title')}} / {{__('messages.application_m.all_apps')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -20,20 +20,20 @@
|
||||
|
||||
@foreach($applications as $application)
|
||||
|
||||
<x-modal id="deletionConfirmationModal-{{ $application->id }}" modal-label="deletion-{{ $application->id }}" modal-title="Are you sure?" include-close-button="true">
|
||||
<x-modal id="deletionConfirmationModal-{{ $application->id }}" modal-label="deletion-{{ $application->id }}" modal-title="{{__('messages.application_m.modal_confirm')}}" include-close-button="true">
|
||||
|
||||
<h4><i class="fas fa-exclamation-triangle"></i> Really delete this?</h3>
|
||||
<h4><i class="fas fa-exclamation-triangle"></i> {{__('messages.application_m.really_delete')}}</h4>
|
||||
<p>
|
||||
This action is <b>IRREVERSBILE.</b>
|
||||
{{__('messages.application_m.delete_action_warning', ['consequence' => '<b>' . __('messages.application_m.consequence_irreversible') .'</b>'])}}
|
||||
</p>
|
||||
<p>Comments, appointments and any votes attached to this application WILL be deleted too. Please make sure this application really needs to be deleted.</p>
|
||||
<p>{{__('messages.application_m.delete_explainer')}}</p>
|
||||
|
||||
<x-slot name="modalFooter">
|
||||
|
||||
<form method="POST" action="{{ route('deleteApplication', ['application' => $application->id]) }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-danger"><i class="fas fa-check-double"></i> Confirm</button>
|
||||
<button type="submit" class="btn btn-danger"><i class="fas fa-check-double"></i> {{__('messages.reusable.confirm_plain')}}</button>
|
||||
|
||||
</form>
|
||||
|
||||
@@ -61,9 +61,9 @@
|
||||
|
||||
<div class="col">
|
||||
|
||||
<h3><i class="fas fa-info-circle"></i> You're looking at all applications ever received</h3>
|
||||
<h3><i class="fas fa-info-circle"></i> {{__('messages.application_m.all_apps_header')}}</h3>
|
||||
<p>
|
||||
Here, you have quick and easy access to all applications ever received by the system.
|
||||
{{__('messages.application_m.all_apps_exp')}}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
@@ -90,16 +90,16 @@
|
||||
<div class="row">
|
||||
|
||||
<div class="col-3">
|
||||
<h3>All applications</h3>
|
||||
<h3>{{__('messages.application_m.all_apps')}}</h3>
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
|
||||
<div class="navbtn right" style="whitespace: nowrap">
|
||||
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="window.location.href='{{ route('staffPendingApps') }}'"><i class="far fa-folder-open"></i> Outstanding Applications</button>
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="window.location.href='{{ route('pendingInterview') }}'"><i class="fas fa-microphone-alt"></i> Interview Queue</button>
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="window.location.href='{{ route('peerReview') }}'"><i class="fas fa-search"></i> Peer Review</button>
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="window.location.href='{{ route('staffPendingApps') }}'"><i class="far fa-folder-open"></i> {{__('messages.application_m.outstanding_apps')}}</button>
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="window.location.href='{{ route('pendingInterview') }}'"><i class="fas fa-microphone-alt"></i> {{__('messages.application_m.interview_q')}}</button>
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="window.location.href='{{ route('peerReview') }}'"><i class="fas fa-search"></i> {{__('messages.application_m.p_review')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -131,10 +131,10 @@
|
||||
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Applicant</th>
|
||||
<th>Status</th>
|
||||
<th>Date</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.application_m.applicant')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
<th>{{__('messages.reusable.date')}}</th>
|
||||
<th>{{__('messages.reusable.actions')}}</th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
@@ -151,48 +151,48 @@
|
||||
|
||||
@case('STAGE_SUBMITTED')
|
||||
|
||||
<span class="badge badge-primary"><i class="far fa-clock"></i> Outstanding (Submitted)</span>
|
||||
<span class="badge badge-primary"><i class="far fa-clock"></i> {{__('messages.application_m.outstanding_subm')}}</span>
|
||||
@break
|
||||
|
||||
@case('STAGE_PEERAPPROVAL')
|
||||
|
||||
<span class="badge badge-warning"><i class="fas fa-vote-yea"></i> Peer Approval</span>
|
||||
<span class="badge badge-warning"><i class="fas fa-vote-yea"></i> {{__('messages.application_m.p_review')}}</span>
|
||||
@break
|
||||
|
||||
@case('STAGE_INTERVIEW')
|
||||
|
||||
<span class="badge badge-warning"><i class="fas fa-microphone-alt"></i> Interview</span>
|
||||
<span class="badge badge-warning"><i class="fas fa-microphone-alt"></i> {{__('messages.application_m.interview_p')}}</span>
|
||||
|
||||
@break
|
||||
|
||||
@case('STAGE_INTERVIEW_SCHEDULED')
|
||||
|
||||
<span class="badge badge-warning"><i class="far fa-clock"></i>Interview Scheduled</span>
|
||||
<span class="badge badge-warning"><i class="far fa-clock"></i>{{__('messages.application_m.interview_s')}}</span>
|
||||
|
||||
@break
|
||||
|
||||
@case('APPROVED')
|
||||
|
||||
<span class="badge badge-success"><i class="fas fa-check"></i> Approved</span>
|
||||
<span class="badge badge-success"><i class="fas fa-check"></i> {{__('messages.application_m.approved')}}</span>
|
||||
|
||||
@break
|
||||
|
||||
@case('DENIED')
|
||||
|
||||
<span class="badge badge-danger"><i class="fas fa-times"></i> Denied</span>
|
||||
<span class="badge badge-danger"><i class="fas fa-times"></i> {{__('messages.application_m.denied')}}</span>
|
||||
|
||||
@break;
|
||||
|
||||
@default
|
||||
<span class="badge badge-secondary"><i class="fas fa-question-circle"></i> Unknown</span>
|
||||
<span class="badge badge-secondary"><i class="fas fa-question-circle"></i> {{__('messages.application_m.denied')}}</span>
|
||||
|
||||
|
||||
@endswitch
|
||||
</td>
|
||||
<td>{{ $application->created_at }}</td>
|
||||
<td>
|
||||
<button type="button" class="btn btn-success btn-sm" onclick="window.location.href='{{ route('showUserApp', ['application' => $application->id]) }}'"><i class="fas fa-eye"></i> View</button>
|
||||
<button type="button" class="btn btn-danger btn-sm ml-2" onclick="$('#deletionConfirmationModal-{{ $application->id }}').modal('show')"><i class="fa fa-trash"></i> Delete</button>
|
||||
<button type="button" class="btn btn-success btn-sm" onclick="window.location.href='{{ route('showUserApp', ['application' => $application->id]) }}'"><i class="fas fa-eye"></i> {{__('messages.reusable.view')}}</button>
|
||||
<button type="button" class="btn btn-danger btn-sm ml-2" onclick="$('#deletionConfirmationModal-{{ $application->id }}').modal('show')"><i class="fa fa-trash"></i> {{__('messages.reusable.delete')}}</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -206,10 +206,9 @@
|
||||
|
||||
<div class="alert alert-warning">
|
||||
|
||||
<h3><i class="fas fa-question-circle"></i> There are no applications here</h3>
|
||||
<h3><i class="fas fa-question-circle"></i> {{__('messages.application_m.no_apps')}}</h3>
|
||||
<p>
|
||||
We couldn't find any applications. Maybe no one has applied yet?
|
||||
Please try again later.
|
||||
{{__('messages.application_m.no_apps_exp')}}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Applications')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.application_m.int_applications'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Application Management / Pending Interviews</h4>
|
||||
<h4>{{__('messages.application_m.title')}} / {{__('messages.application_m.interview_q')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class="small-box bg-warning">
|
||||
<div class="inner">
|
||||
<h3>{{$applications->count()}}</h3>
|
||||
<p>Pending Interviews</p>
|
||||
<p>{{__('messages.application_m.interview_q')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fas fa-microphone-alt"></i>
|
||||
@@ -31,7 +31,7 @@
|
||||
<div class="small-box bg-success">
|
||||
<div class="inner">
|
||||
<h3>{{$finishedCount}}</h3>
|
||||
<p>Finished Interviews</p>
|
||||
<p>{{__('messages.application_m.finished_int')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fas fa-check"></i>
|
||||
@@ -48,7 +48,7 @@
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="card-title"><h3>Schedule Interviews</h3></div>
|
||||
<div class="card-title"><h3>{{__('messages.application_m.schedule_int')}}</h3></div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@@ -61,9 +61,9 @@
|
||||
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Interviewee</th>
|
||||
<th>Status</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.application_m.interviewee')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
<th>{{__('messages.reusable.actions')}}</th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
@@ -75,10 +75,10 @@
|
||||
<tr>
|
||||
<td>{{$application->id}}</td>
|
||||
<td>{{$application->user->name}}</td>
|
||||
<td><span class="badge-warning badge">{{($application->applicationStatus == 'STAGE_INTERVIEW') ? 'Pending Interview' : 'Unknown Status'}}</span></td>
|
||||
<td><span class="badge-warning badge">{{($application->applicationStatus == 'STAGE_INTERVIEW') ? __('messages.application_m.pending_int') : __('messages.application_m.unknown_stat')}}</span></td>
|
||||
<td>
|
||||
<button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{route('showUserApp', ['application' => $application->id])}}'"><i class="fa fa-eye"></i> View</button>
|
||||
<button type="button" class="btn btn-sm btn-warning"><i class="fa fa-clock"></i> Schedule</button>
|
||||
<button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{route('showUserApp', ['application' => $application->id])}}'"><i class="fa fa-eye"></i> {{__('messages.reusable.view')}}</button>
|
||||
<button type="button" class="btn btn-sm btn-warning"><i class="fa fa-clock"></i> {{__('messages.application_m.schedule')}}</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -92,8 +92,8 @@
|
||||
|
||||
<div class="alert alert-danger">
|
||||
|
||||
<b><i class="fa fa-exclamation-triangle"></i> No Applications Pending Interview</b>
|
||||
<p>There are no applications that have been moved up to the Interview stage. Please check the outstanding queue.</p>
|
||||
<b><i class="fa fa-exclamation-triangle"></i> {{__('messages.application_m.no_apps_pending_int')}}</b>
|
||||
<p>{{__('messages.application_m.no_apps_pending_int_exp')}}</p>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
@@ -110,7 +110,7 @@
|
||||
|
||||
<div class="card-header">
|
||||
|
||||
<div class="card-title"><h3>My Upcoming Interviews</h3></div>
|
||||
<div class="card-title"><h3>{{__('messages.application_m.upcoming_int')}}</h3></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -124,11 +124,11 @@
|
||||
<tr>
|
||||
|
||||
<th>#</th>
|
||||
<th>Interviewee</th>
|
||||
<th>Status</th>
|
||||
<th>Time & Date</th>
|
||||
<th>Location</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.application_m.interviewee')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
<th>{{__('messages.reusable.datetime')}}</th>
|
||||
<th>{{__('messages.reusable.location')}}</th>
|
||||
<th>{{__('messages.reusable.actions')}}</th>
|
||||
|
||||
</tr>
|
||||
|
||||
@@ -142,16 +142,16 @@
|
||||
<td>{{$upcomingApp->id}}</td>
|
||||
<td>{{$upcomingApp->user->name}}</td>
|
||||
@if (is_null($upcomingApp->appointment))
|
||||
<td><span class="badge badge-warning"><i class="fa fa-question-circle"></i>Pending Schedule</span></td>
|
||||
<td>None yet</td>
|
||||
<td><span class="badge badge-warning"><i class="fa fa-question-circle"></i>Pending Schedule</span></td>
|
||||
<td><span class="badge badge-warning"><i class="fa fa-question-circle"></i>{{__('messages.application_m.pending_schedule')}}</span></td>
|
||||
<td>{{__('messages.reusable.none_yet')}}</td>
|
||||
<td><span class="badge badge-warning"><i class="fa fa-question-circle"></i>{{__('messages.application_m.pending_int')}}</span></td>
|
||||
@else
|
||||
<td><span class="badge badge-success"><i class="fa fa-check"></i> {{ucfirst(strtolower($upcomingApp->appointment->appointmentStatus))}}</span></td>
|
||||
<td>{{$upcomingApp->appointment->appointmentDate}}</td>
|
||||
<td><span class="badge badge-success"><i class="fa fa-check"></i> {{ucfirst(strtolower($upcomingApp->appointment->appointmentLocation))}}</span></td>
|
||||
@endif
|
||||
<td>
|
||||
<button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{route('showUserApp', ['application' => $upcomingApp->id])}}'"><i class="fa fa-eye"></i> View Details</button>
|
||||
<button type="button" class="btn btn-sm btn-success" onclick="window.location.href='{{route('showUserApp', ['application' => $upcomingApp->id])}}'"><i class="fa fa-eye"></i> {{__('messages.reusable.view_c')}}</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -164,9 +164,8 @@
|
||||
@else
|
||||
|
||||
<x-alert alert-type="danger">
|
||||
<p><i class="fa fa-exclamation-triangle"></i><b>There are no upcoming interviews</b></p>
|
||||
|
||||
Please check other queues down in the application process. Applicants here may have already been interviewed.
|
||||
<p><i class="fa fa-exclamation-triangle"></i><b>{{__('messages.application_m.no_upcoming')}}</b></p>
|
||||
{{__('messages.application_m.no_upcoming_exp')}}
|
||||
</x-alert>
|
||||
|
||||
@endif
|
||||
@@ -183,8 +182,8 @@
|
||||
|
||||
<div class="col text-center">
|
||||
|
||||
<button type="button" class="btn btn-success mr-3" onclick="window.location.href='{{route('staffPendingApps')}}'">View Outstanding Queue</button>
|
||||
<button type="button" class="btn btn-success mr-3" onclick="window.location.href='{{route('peerReview')}}'">View Approval Queue</button>
|
||||
<button type="button" class="btn btn-success mr-3" onclick="window.location.href='{{route('staffPendingApps')}}'">{{__('messages.application_m.view_outstanding_queue')}}</button>
|
||||
<button type="button" class="btn btn-success mr-3" onclick="window.location.href='{{route('peerReview')}}'">{{__('messages.application_m.view_approval_queue')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Profile')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.application_m.title'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Application Management / Outstanding Applications</h4>
|
||||
<h4>{{__('messages.application_m.title')}} / {{__('messages.application_m.outstanding_apps')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
|
||||
<div class="col">
|
||||
<div class="callout callout-info">
|
||||
<p>Seeing no applications? Check with an Administrator to make sure that there are available open positions.</p>
|
||||
<p>Advertising on relevant forums made for this purpose is also a good idea.</p>
|
||||
<p>{{__('messages.application_m.no_outstanding')}}</p>
|
||||
<p>{{__('messages.application_m.no_outstanding_exp')}}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
<div class="card-header">
|
||||
|
||||
<div class="card-title"><h4>Outstanding Applications</h4></div>
|
||||
<div class="card-title"><h4>{{__('messages.application_m.outstanding_apps')}}</h4></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -49,11 +49,11 @@
|
||||
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Applicant Name</th>
|
||||
<th>Status</th>
|
||||
<th>Application Date</th>
|
||||
<th>Last Updated</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.application_m.applicant_name')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
<th>{{__('messages.application_m.application_date')}}</th>
|
||||
<th>{{__('messages.last_updated')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
@@ -66,11 +66,11 @@
|
||||
|
||||
<td>{{$application->id}}</td>
|
||||
<td>{{$application->user->name}}</td>
|
||||
<td><span class="badge badge-warning">{{($application->applicationStatus == 'STAGE_SUBMITTED') ? 'Outstanding' : 'Unknown Status'}}</span></td>
|
||||
<td><span class="badge badge-warning">{{($application->applicationStatus == 'STAGE_SUBMITTED') ? __('messages.application_m.outstanding_sm') : __('messages.application_m.unknown_stat')}}</span></td>
|
||||
<td>{{$application->created_at}}</td>
|
||||
<td>{{$application->updated_at}}</td>
|
||||
<td>
|
||||
<button type="button" class="btn btn-sm btn-warning" onclick="window.location.href='{{route('showUserApp', ['application' => $application->id])}}'"><i class="fas fa-clipboard-check"></i> Review</button>
|
||||
<button type="button" class="btn btn-sm btn-warning" onclick="window.location.href='{{route('showUserApp', ['application' => $application->id])}}'"><i class="fas fa-clipboard-check"></i> {{__('messages.application_r.review')}}</button>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
@@ -83,8 +83,8 @@
|
||||
@else
|
||||
|
||||
<div class="alert alert-warning">
|
||||
<i class="fas fa-exclamation-triangle"></i><b> There are no pending applications</b>
|
||||
<p>It seems like no one new has applied yet. Checkout the interview and approval queues for applications that might have moved up the ladder by now.</p>
|
||||
<i class="fas fa-exclamation-triangle"></i><b> {{__('messages.application_m.no_pending')}}</b>
|
||||
<p>{{__('messages.application_m.no_pending_exp')}}</p>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
<div class="card-footer text-center">
|
||||
|
||||
<button type="button" class="btn btn-success" onclick="window.location.href='{{route('pendingInterview')}}'">View Interview Queue</button>
|
||||
<button type="button" class="btn btn-success" onclick="window.location.href='{{route('pendingInterview')}}'">{{__('messages.application_m.view_interview_queue')}}</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Applications')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.application_m.p_review'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Application Management / Peer Review</h4>
|
||||
<h4>{{__('messages.application_m.title')}} / {{__('messages.application_m.p_review')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -16,12 +16,12 @@
|
||||
|
||||
<div class="callout callout-info">
|
||||
|
||||
<h4>Voting Reminder</h4>
|
||||
<h4>{{__('messages.application_m.voting_reminder.title')}}</h4>
|
||||
|
||||
<p>Applications which gain more than 50% of positive votes are automatically approved after one day.</p>
|
||||
<p>Conversely, applications that do not reach this number are automatically denied.</p>
|
||||
<p>{{__('messages.application_m.voting_reminder.line1')}}</p>
|
||||
<p>{{__('messages.application_m.voting_reminder.line2')}}</p>
|
||||
|
||||
<p>Please note that the vote system can be overriden.</p>
|
||||
<p>{{__('messages.application_m.voting_reminder.line3')}}</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<div class="card-title"><h3>Vote Backlog</h3></div>
|
||||
<div class="card-title"><h3>{{__('messages.v_backlog')}}</h3></div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
@@ -48,10 +48,10 @@
|
||||
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Applicant Name</th>
|
||||
<th>Last Acted On</th>
|
||||
<th>Status</th>
|
||||
<th>Actions</th>
|
||||
<th>{{__('messages.application_m.applicant_name')}}</th>
|
||||
<th>{{__('messages.last_updated')}}</th>
|
||||
<th>{{__('messages.reusable.status')}}</th>
|
||||
<th>{{__('messages.reusable.actions')}}</th>
|
||||
</tr>
|
||||
|
||||
</thead>
|
||||
@@ -64,9 +64,9 @@
|
||||
<td>{{$application->id}}</td>
|
||||
<td>{{$application->user->name}}</td>
|
||||
<td>{{$application->created_at}}</td>
|
||||
<td><span class="badge badge-warning">{{($application->applicationStatus == 'STAGE_PEERAPPROVAL') ? 'Peer Review' : 'Unknown'}}</span></td>
|
||||
<td><span class="badge badge-warning">{{($application->applicationStatus == 'STAGE_PEERAPPROVAL') ? __('messages.application_m.p_review') : __('messages.application_m.unknown_stat')}}</span></td>
|
||||
<td>
|
||||
<button type="button" class="btn btn-info btn-sm" onclick="window.location.href='{{route('showUserApp', ['application' => $application->id])}}'"><i class="far fa-clipboard"></i> Review</button>
|
||||
<button type="button" class="btn btn-info btn-sm" onclick="window.location.href='{{route('showUserApp', ['application' => $application->id])}}'"><i class="far fa-clipboard"></i> {{__('messages.application_r.review')}}</button>
|
||||
</td>
|
||||
|
||||
@endforeach
|
||||
@@ -76,10 +76,9 @@
|
||||
</table>
|
||||
@else
|
||||
<x-alert alert-type="warning">
|
||||
<p class="text-bold"><i class="fa fa-exclamation-triangle"></i> There are no applications pending review</p>
|
||||
<p class="text-bold"><i class="fa fa-exclamation-triangle"></i> {{__('messages.application_m.no_pending_review')}}</p>
|
||||
|
||||
Check the other queues for any applications! Applications will be shown here as soon as their interview is completed.
|
||||
You'll be able to view meeting notes and vote based on your observations.
|
||||
{{__('messages.application_m.no_pending_review_exp')}}
|
||||
</x-alert>
|
||||
@endif
|
||||
|
||||
|
@@ -1,9 +1,9 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network Team Management')
|
||||
@section('title', config('app.name'))
|
||||
|
||||
@section('content_header')
|
||||
<h1>RaspberryNet Teams / Dashboard (<i>At a glance</i>)</h1>
|
||||
<h1>{{config('app.name')}} / {{__('messages.dashboard')}}</h1>
|
||||
@stop
|
||||
|
||||
@section('js')
|
||||
@@ -18,15 +18,15 @@
|
||||
|
||||
@foreach($vacancies as $vacancy)
|
||||
|
||||
<x-modal id="{{ $vacancy->vacancySlug . '-details' }}" modal-label="{{ $vacancy->vacancySlug . '-details-label' }}" modal-title="Vacancy details" include-close-button="true">
|
||||
<x-modal id="{{ $vacancy->vacancySlug . '-details' }}" modal-label="{{ $vacancy->vacancySlug . '-details-label' }}" modal-title="{{__('messages.details_m_title')}}" include-close-button="true">
|
||||
|
||||
@if (is_null($vacancy->vacancyFullDescription))
|
||||
|
||||
<div class="alert alert-warning">
|
||||
|
||||
<h3><i class="fas fa-question-circle"></i> There don't seem to be any details</h3>
|
||||
<h3><i class="fas fa-question-circle"></i> {{__('messages.opening_nodetails')}}</h3>
|
||||
<p>
|
||||
This vacancy does not have any details yet.
|
||||
{{__('messages.opening_nodetails_exp')}}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
{!! $vacancy->vacancyFullDescription !!}
|
||||
<p class="text-sm text-muted">
|
||||
Last updated @ {{ $vacancy->updated_at }}
|
||||
{{__('messages.last_updated')}} @ {{ $vacancy->updated_at }}
|
||||
</p>
|
||||
@endif
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
<div class="text-center">
|
||||
|
||||
<h4>Welcome back, {{ Auth::user()->name }}!</h4>
|
||||
<h4>{{__('messages.welcome_back')}} {{ Auth::user()->name }}!</h4>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -66,9 +66,7 @@
|
||||
|
||||
<div class="col">
|
||||
<div class="alert alert-info">
|
||||
|
||||
<p>Your current application eligibility status: <span class="badge badge-warning">{{($isEligibleForApplication) ? 'Eligibile' : 'Ineligible' }}</span></p>
|
||||
|
||||
<p>{{__('messages.eligibility_status', ['badgeStatus' => '<span class="badge badge-warning"> ' . ($isEligibleForApplication) ? __('messages.eligible') : __('messages.ineligible') .'</span>'])}}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -84,12 +82,12 @@
|
||||
<div class="inner">
|
||||
<h3>{{ $openApplications ?? 0 }}</h3>
|
||||
|
||||
<p>Ongoing Apps</p>
|
||||
<p>{{__('messages.ongoing_apps')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fas fa-sync"></i>
|
||||
</div>
|
||||
<a href="{{ route('showUserApps') }}" class="small-box-footer">Open <i class="fas fa-arrow-circle-right"></i></a>
|
||||
<a href="{{ route('showUserApps') }}" class="small-box-footer">{{__('messages.open')}} <i class="fas fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
@@ -99,12 +97,12 @@
|
||||
<div class="inner">
|
||||
<h3>{{ $deniedApplications ?? 0 }}</h3>
|
||||
|
||||
<p>Denied Apps</p>
|
||||
<p>{{__('messages.denied_apps')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fas fa-times"></i>
|
||||
</div>
|
||||
<a href="{{ route('showUserApps') }}" class="small-box-footer">Open <i class="fas fa-arrow-circle-right"></i></a>
|
||||
<a href="{{ route('showUserApps') }}" class="small-box-footer">{{__('messages.open')}} <i class="fas fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -118,14 +116,14 @@
|
||||
<div class="inner">
|
||||
<h3>{{ $totalUserCount }}</h3>
|
||||
|
||||
<p>Total Users + Staff</p>
|
||||
<p>{{__('messages.users_staff')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fas fa-users"></i>
|
||||
</div>
|
||||
@if (Auth::user()->hasRole('admin'))
|
||||
|
||||
<a href="{{ route('registeredPlayerList') }}" class="small-box-footer">Open <i class="fas fa-arrow-circle-right"></i></a>
|
||||
<a href="{{ route('registeredPlayerList') }}" class="small-box-footer">{{__('messages.open')}} <i class="fas fa-arrow-circle-right"></i></a>
|
||||
|
||||
@endif
|
||||
</div>
|
||||
@@ -137,7 +135,7 @@
|
||||
<div class="inner">
|
||||
<h3>{{ $totalDenied }}</h3>
|
||||
|
||||
<p>Denied applications</p>
|
||||
<p>{{__('messages.denied_apps')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fas fa-user-slash"></i>
|
||||
@@ -151,12 +149,12 @@
|
||||
<div class="inner">
|
||||
<h3>{{ $totalNewApplications }}</h3>
|
||||
|
||||
<p>New applications</p>
|
||||
<p>{{__('messages.new_apps')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fas fa-plus"></i>
|
||||
</div>
|
||||
<a href="{{ route('staffPendingApps') }}" class="small-box-footer">Open <i class="fas fa-arrow-circle-right"></i></a>
|
||||
<a href="{{ route('staffPendingApps') }}" class="small-box-footer">{{__('messages.open')}} <i class="fas fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
@@ -166,12 +164,12 @@
|
||||
<div class="inner">
|
||||
<h3>{{ $totalPeerReview }}</h3>
|
||||
|
||||
<p>Vote backlog</p>
|
||||
<p>{{__('messages.v_backlog')}}</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fas fa-vote-yea"></i>
|
||||
</div>
|
||||
<a href="{{ route('peerReview') }}" class="small-box-footer">Open <i class="fas fa-arrow-circle-right"></i></a>
|
||||
<a href="{{ route('peerReview') }}" class="small-box-footer">{{__('messages.open')}} <i class="fas fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
@@ -185,7 +183,7 @@
|
||||
|
||||
<div class="col text-center">
|
||||
|
||||
<h4>Available ranks</h3>
|
||||
<h4>{{__('messages.ranks')}}</h4>
|
||||
<hr />
|
||||
|
||||
</div>
|
||||
@@ -221,8 +219,8 @@
|
||||
|
||||
<div class="card-footer text-center">
|
||||
|
||||
<button type="button" class="btn btn-primary btn-sm" onclick="window.location.href='{{ route('renderApplicationForm', ['vacancySlug' => $vacancy->vacancySlug]) }}'">Apply</button>
|
||||
<button type="button" class="btn btn-warning btn-sm" onclick="$('#{{ $vacancy->vacancySlug }}-details').modal('show')">Learn More</button>
|
||||
<button type="button" class="btn btn-primary btn-sm" onclick="window.location.href='{{ route('renderApplicationForm', ['vacancySlug' => $vacancy->vacancySlug]) }}'">{{__('messages.txt_apply')}}</button>
|
||||
<button type="button" class="btn btn-warning btn-sm" onclick="$('#{{ $vacancy->vacancySlug }}-details').modal('show')">{{__('messages.txt_learn_more')}}</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -245,7 +243,7 @@
|
||||
<div class="card-header">
|
||||
|
||||
<h4>
|
||||
<i class="fa fa-calendar"></i> Your upcoming interviews (<i>coming soon</i>)
|
||||
<i class="fa fa-calendar"></i> {{__('messages.upcoming')}} (<i>{{__('messages.soon')}}</i>)
|
||||
</h4>
|
||||
|
||||
</div>
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | Applications')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.application_m.int_applications'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>My Account / Applications</h4>
|
||||
<h4>{{__('messages.reusable.my_acc')}} / {{__('messages.application_m.int_applications')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -21,22 +21,21 @@
|
||||
<div class="col">
|
||||
|
||||
<div class="callout callout-warning">
|
||||
<h5>Application Process</h5>
|
||||
<h5>{{__('messages.user.app_process.title')}}</h5>
|
||||
|
||||
<p>Please allow up to three days for your application to be processed. Your application will be reviewed by every team member, and will move up in stages.</p>
|
||||
<p>If an interview is scheduled, you'll need to open your application here and confirm the time, date, and location assigned for you.</p>
|
||||
<p>{{__('messages.user.app_process.line1')}}</p>
|
||||
<p>{{__('messages.user.app_process.line2')}}</p>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<b><i class="fa fa-info-circle"></i> Account Standing</b>
|
||||
<b><i class="fa fa-info-circle"></i> {{__('messages.user.account_standing')}}</b>
|
||||
|
||||
<p>Your account is currently <b>{{($isEligibleForApplication) ? 'eligible' : 'not eligible'}}</b> for application.</p>
|
||||
<p>{{__('messages.user.account_eligibility', ['eligibility' => ($isEligibleForApplication) ? __('messages.eligible') : __('messages.ineligible')])}}</p>
|
||||
|
||||
@if (!$isEligibleForApplication)
|
||||
<p>As of today, there are <b>{{$eligibilityDaysRemaining}} days</b> remaining until you're permitted to submit another application.</p>
|
||||
<p>{{__('messages.user.days_remaining_acc_alt', ['days' => $eligibilityDaysRemaining])}}</p>
|
||||
@endif
|
||||
|
||||
<i class="text-sm">Powered by Carbon</i>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -49,7 +48,7 @@
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">My Ongoing Applications</h3>
|
||||
<h3 class="card-title">{{__('messages.user.my_ongoingapps')}}</h3>
|
||||
</div>
|
||||
<!-- /.card-header -->
|
||||
<div class="card-body p-0"> <!-- move to dedi css -->
|
||||
@@ -60,11 +59,11 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 10px">#</th>
|
||||
<th>Applicant</th>
|
||||
<th>Application Date</th>
|
||||
<th>Last Acted On</th>
|
||||
<th style="width: 40px">Status</th>
|
||||
<th style="width: 40px">Actions</th>
|
||||
<th>{{__('messages.application_m.applicant')}}</th>
|
||||
<th>{{__('messages.application_m.application_date')}}</th>
|
||||
<th>{{__('messages.last_updated')}}</th>
|
||||
<th style="width: 40px">{{__('messages.reusable.status')}}</th>
|
||||
<th style="width: 40px">{{__('messages.reusable.actions')}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -80,36 +79,36 @@
|
||||
@switch($application->applicationStatus)
|
||||
|
||||
@case('STAGE_SUBMITTED')
|
||||
<span class="badge badge-success"><i class="fas fa-paper-plane"></i> Submitted</span>
|
||||
<span class="badge badge-success"><i class="fas fa-paper-plane"></i> {{__('messages.user.submitted')}}</span>
|
||||
@break
|
||||
|
||||
@case('STAGE_PEERAPPROVAL')
|
||||
<span class="badge badge-warning"><i class="fas fa-users"></i> Peer Approval</span>
|
||||
<span class="badge badge-warning"><i class="fas fa-users"></i> {{__('messages.user.peer_approval')}}</span>
|
||||
@break
|
||||
|
||||
@case('STAGE_INTERVIEW')
|
||||
<span class="badge badge-info"><i class="fa fa-microphone-alt"></i> Interview</span>
|
||||
<span class="badge badge-info"><i class="fa fa-microphone-alt"></i> {{__('messages.application_m.interview_p')}}</span>
|
||||
@break
|
||||
|
||||
@case('STAGE_INTERVIEW_SCHEDULED')
|
||||
<span class="badge badge-warning"><i class="fa fa-clock"></i> Interview Scheduled</span>
|
||||
<span class="badge badge-warning"><i class="fa fa-clock"></i> {{__('messages.application_m.interview_s')}}</span>
|
||||
@break
|
||||
|
||||
@case('APPROVED')
|
||||
<span class="badge badge-success"><i class="fa fa-check-double"></i> Approved</span>
|
||||
<span class="badge badge-success"><i class="fa fa-check-double"></i> {{__('messages.application_m.approved')}}</span>
|
||||
@break
|
||||
|
||||
@case('DENIED')
|
||||
<span class="badge badge-danger"><i class="fa fa-ban"></i> <b>Denied</b></span>
|
||||
<span class="badge badge-danger"><i class="fa fa-ban"></i> <b>{{__('messages.application_m.denied')}}</b></span>
|
||||
@break
|
||||
|
||||
@default
|
||||
<span class="badge badge-danger"><i class="fa fa-question"></i> Unknown</span>
|
||||
<span class="badge badge-danger"><i class="fa fa-question"></i> {{__('messages.application_m.unknown_stat')}}</span>
|
||||
@endswitch
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<button type="button" class="btn btn-success" onclick="window.location.href='{{route('showUserApp', ['application' => $application->id])}}'"><i class="fa fa-eye"></i> View</button>
|
||||
<button type="button" class="btn btn-success" onclick="window.location.href='{{route('showUserApp', ['application' => $application->id])}}'"><i class="fa fa-eye"></i> {{__('messages.reusable.view')}}</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -121,8 +120,8 @@
|
||||
@else
|
||||
|
||||
<div class="alert alert-warning">
|
||||
<p><i class="fa fa-info-circle"></i> <b>Nothing to show</b></p>
|
||||
<p>You currently have no applications to display. If you're eligible, you may apply once every month.</p>
|
||||
<p><i class="fa fa-info-circle"></i> <b>{{__('messages.user.nothing_to_show')}}</b></p>
|
||||
<p>{{__('messages.user.nothing_to_show_exp')}}</p>
|
||||
</div>
|
||||
|
||||
@endif
|
||||
@@ -131,7 +130,7 @@
|
||||
|
||||
<div class="card-footer">
|
||||
|
||||
<button type="button" class="btn btn-default mr-2">Back</button>
|
||||
<button type="button" class="btn btn-default mr-2" onclick="window.location.href='{{route('dashboard')}}'">{{__('messages.back')}}</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | User Directory')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.user.directory.title'))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Users / Directory</h4>
|
||||
<h4>{{__('messages.profile.users')}} / {{__('messages.user.directory.directory')}}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
<div class="user-indicator mb-2">
|
||||
|
||||
<span class="badge badge-success">It's you!</span>
|
||||
<span class="badge badge-success">{{__('messages.user.directory.itsyou')}}</span>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
</div>
|
||||
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="window.location.href='{{ route('showSingleProfile', ['user' => $user->id]) }}'"><i class="fa fa-eye"></i> Profile</button>
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="window.location.href='{{ route('showSingleProfile', ['user' => $user->id]) }}'"><i class="fa fa-eye"></i> {{__('messages.profile.profile')}}</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -98,7 +98,7 @@
|
||||
<div class="alert alert-danger">
|
||||
|
||||
<p>
|
||||
You do not have permission to view this page.
|
||||
{{__('messages.component_nopermission')}}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
@@ -1,10 +1,10 @@
|
||||
@extends('adminlte::page')
|
||||
|
||||
@section('title', 'Raspberry Network | ' . $profile->user->name . '\'s profile')
|
||||
@section('title', config('app.name') . ' | ' . __('messages.profile.title', ['name' => $profile->user->name]))
|
||||
|
||||
@section('content_header')
|
||||
|
||||
<h4>Users / Profile / {{ $profile->user->name }}</h4>
|
||||
<h4>{{__('messages.profile.users')}} / {{__('messages.profile.profile')}} / {{ $profile->user->name }}</h4>
|
||||
|
||||
@stop
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
|
||||
<div class="alert alert-danger">
|
||||
|
||||
<span><i class="fa fa-ban"></i> <b>Account banned</b></span>
|
||||
<span><i class="fa fa-ban"></i> <b>{{__('messages.profile.account_banned')}}</b></span>
|
||||
|
||||
<p>This user has been banned by the moderators.</p>
|
||||
<p>{{__('messages.profile.account_banned_exp')}}</p>
|
||||
|
||||
<p>
|
||||
<i class="fas fa-chevron-right"></i> <b>{{$profile->user->bans->reason}}</>
|
||||
@@ -36,20 +36,20 @@
|
||||
|
||||
@if (Auth::user()->hasRole('admin'))
|
||||
|
||||
<x-modal id="banAccountModal" modal-label="banAccount" modal-title="Please confirm" include-close-button="true">
|
||||
<x-modal id="banAccountModal" modal-label="banAccount" modal-title="{{__('messages.reusable.confirm')}}" include-close-button="true">
|
||||
|
||||
<p>Please confirm that you want to ban this user account. You'll need to add a reason and expiration date to confirm this. Bans don't transfer to connected Minecraft networks (yet).</p>
|
||||
<p>{{__('messages.profile.ban_confirm')}}</p>
|
||||
|
||||
<form id="banAccountForm" name="banAccount" method="POST" action="{{route('banUser', ['user' => $profile->user->id])}}">
|
||||
@csrf
|
||||
|
||||
<label for="reason">Reason</label>
|
||||
<input type="string" name="reason" id="reason" class="form-control" placeholder="e.g. Spamming">
|
||||
<label for="reason">{{__('messages.reusable.reason')}}</label>
|
||||
<input type="text" name="reason" id="reason" class="form-control" placeholder="{{__('messages.profile.p_duration_exp')}}">
|
||||
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" name="durationOperand" aria-label="Punishment duration">
|
||||
<input type="text" class="form-control" name="durationOperator" aria-label="{{__('messages.profile.p_duration')}}">
|
||||
<div class="input-group-append">
|
||||
<button id="durationDropdown" class="btn btn-outline-secondary dropdown-toggle duration-btn" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Duration</button>
|
||||
<button id="durationDropdown" class="btn btn-outline-secondary dropdown-toggle duration-btn" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{__('messages.profile.duration')}}</button>
|
||||
<div class="dropdown-menu">
|
||||
<a class="dropdown-item" href="#">Days</a>
|
||||
<a class="dropdown-item" href="#">Weeks</a>
|
||||
@@ -59,30 +59,29 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-muted text-sm">Leave empty for a permanent ban</p>
|
||||
<p class="text-muted text-sm">{{__('messages.profile.leave_empty')}}</p>
|
||||
|
||||
<input id="operator" type="hidden" value="" name="durationOperator" class="duration-operator-fld">
|
||||
<input id="operator" type="hidden" value="" name="durationOperand" class="duration-operator-fld">
|
||||
|
||||
</form>
|
||||
|
||||
<x-slot name="modalFooter">
|
||||
|
||||
<button id="banAccountButton" type="button" class="btn btn-danger"><i class="fa fa-ban"></i> Ban</button>
|
||||
<button id="banAccountButton" type="button" class="btn btn-danger"><i class="fa fa-ban"></i> {{__('messages.profile.ban')}}</button>
|
||||
|
||||
</x-slot>
|
||||
|
||||
</x-modal>
|
||||
|
||||
@if (!Auth::user()->is($profile->user) && $profile->user->isStaffMember())
|
||||
<x-modal id="terminateUser" modal-label="terminateUser" modal-title="Please confirm" include-close-button="true">
|
||||
<x-modal id="terminateUser" modal-label="terminateUser" modal-title="{{__('messages.reusable.confirm')}}" include-close-button="true">
|
||||
|
||||
<p><i class="fa fa-exclamation-triangle"></i> <b>You are about to terminate a staff member</b></p>
|
||||
<p><i class="fa fa-exclamation-triangle"></i> <b>{{__('messages.profile.terminate_notice')}}</b></p>
|
||||
<p>
|
||||
Terminating a staff member will remove their privileges on the team management site and Network.
|
||||
They will be notified of their termination. Make sure to have discussed this with them first.
|
||||
{{__('messages.profile.terminate_notice_warning')}}
|
||||
</p>
|
||||
<p>
|
||||
<b>THIS PROCESS IS IRREVERSIBLE AND IMMEDIATE</b>
|
||||
<b>{{__('messages.profile.terminate_notice_consequence')}}</b>
|
||||
</p>
|
||||
|
||||
|
||||
@@ -91,7 +90,7 @@
|
||||
<form method="POST" action="{{route('terminateStaffMember', ['user' => $profile->user->id])}}" id="terminateUserForm">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
<button type="submit" class="btn btn-warning"><i class="fas fa-exclamation-circle"></i> Confirm</button>
|
||||
<button type="submit" class="btn btn-warning"><i class="fas fa-exclamation-circle"></i> {{__('messages.reusable.confirm')}}</button>
|
||||
|
||||
</form>
|
||||
|
||||
@@ -100,32 +99,32 @@
|
||||
</x-modal>
|
||||
@endif
|
||||
|
||||
<x-modal id="deleteAccount" modal-label="deleteAccount" modal-title="Please confirm" include-close-button="true">
|
||||
<x-modal id="deleteAccount" modal-label="deleteAccount" modal-title="{{__('messages.reusable.confirm')}}" include-close-button="true">
|
||||
|
||||
<p><i class="fa fa-exclamation-triangle"></i><b> WARNING: This is a potentially destructive action!</b></p>
|
||||
<p><i class="fa fa-exclamation-triangle"></i><b> {{__('messages.profile.delete_acc_warn')}}</b></p>
|
||||
|
||||
<p>Deleting a user's account is an irreversible process. Historic and current applications, votes, and profile content, as well as any personally identifiable information will be immediately erased.</p>
|
||||
<p>{{__('messages.profile.delete_acc_consequence')}}</p>
|
||||
|
||||
<form id="deleteAccountForm" method="POST" action={{route('deleteUser', ['user' => $profile->user->id])}}>
|
||||
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
|
||||
<label for="promptConfirm">Type to confirm: "DELETE ACCOUNT"</label>
|
||||
<input type="text" name="confirmPrompt" class="form-control" placeholder="Please type the above">
|
||||
<label for="promptConfirm">{{__('messages.profile.type_to_confirm')}} "DELETE ACCOUNT"</label>
|
||||
<input type="text" name="confirmPrompt" class="form-control" placeholder="{{__('messages.profile.type_placeholder')}}">
|
||||
|
||||
</form>
|
||||
|
||||
<x-slot name="modalFooter">
|
||||
|
||||
<button type="button" class="btn btn-danger" onclick="document.getElementById('deleteAccountForm').submit()"><i class="fa fa-trash"></i> CONFIRM</button>
|
||||
<button type="button" class="btn btn-danger" onclick="document.getElementById('deleteAccountForm').submit()"><i class="fa fa-trash"></i> {{strtoupper(__('messages.reusable.confirm'))}}</button>
|
||||
|
||||
</x-slot>
|
||||
</x-modal>
|
||||
|
||||
<x-modal id="ipInfo" modal-label="ipInfo" modal-title="IP Address Information for {{$ipInfo->ip ?? 'Unknown'}}" include-close-button="true">
|
||||
<x-modal id="ipInfo" modal-label="ipInfo" modal-title="{{__('messages.reusable.ip_info')}} {{$ipInfo->ip ?? 'Unknown'}}" include-close-button="true">
|
||||
|
||||
<h4 class="text-center">Search results</h3>
|
||||
<h4 class="text-center">{{__('messages.profile.search_result')}}</h3>
|
||||
|
||||
@if (!isset($ipInfo->message))
|
||||
|
||||
@@ -134,58 +133,58 @@
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<th>Origin Country</th>
|
||||
<th>{{__('messages.profile.origin_cc')}}</th>
|
||||
<td>{{$ipInfo->country_name ?? 'N/A'}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>State/Province</th>
|
||||
<th>{{__('messages.profile.state_prov')}}</th>
|
||||
<td>{{$ipInfo->state_prov ?? 'None'}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>District (if any)</th>
|
||||
<th>{{__('messages.profile.district')}}</th>
|
||||
<td>{{$ipInfo->district ?? 'N/A'}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>City</th>
|
||||
<th>{{__('messages.profile.city')}}</th>
|
||||
<td>{{$ipInfo->city ?? 'N/A'}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>Zipcode</th>
|
||||
<th>{{__('messages.profile.zipcode')}}</th>
|
||||
<td>{{$ipInfo->zipcode ?? 'N/A'}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>Coordinates</th>
|
||||
<th>{{__('messages.profile.coords')}}</th>
|
||||
<td>{{$ipInfo->latitude ?? 0}}, {{$ipInfo->longitude ?? 0}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>European?</th>
|
||||
<td>{{($ipInfo->is_eu) ? 'Yes' : 'No'}}</td>
|
||||
<th>{{__('messages.profile.european')}}</th>
|
||||
<td>{{($ipInfo->is_eu) ? __('messages.reusable.yes') : __('messages.reusable.no')}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>ISP</th>
|
||||
<th>{{__('messages.profile.isp')}}</th>
|
||||
<td>{{$ipInfo->isp ?? 'N/A'}}</td>
|
||||
</tr>
|
||||
|
||||
|
||||
<tr>
|
||||
<th>Organization (if any)</th>
|
||||
<th>{{__('messages.profile.org')}}</th>
|
||||
<td>{{$ipInfo->organization ?? 'N/A'}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>C. Type</th>
|
||||
<th>{{__('messages.profile.ctype')}}</th>
|
||||
<td>{{$ipInfo->connection_type ?? 'N/A'}}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>Timezone</th>
|
||||
<th>{{__('messages.profile.timezone')}}</th>
|
||||
<td>{{$ipInfo->time_zone->name ?? 'N/A'}}</td>
|
||||
</tr>
|
||||
|
||||
@@ -196,7 +195,7 @@
|
||||
@else
|
||||
<div class="alert alert-danger">
|
||||
|
||||
<i class="fas fa-exclamation-circle"></i> <b>This query returned no results</b>
|
||||
<i class="fas fa-exclamation-circle"></i> <b>{{__('messages.profile.noresults')}}</b>
|
||||
<p>
|
||||
{{$ipInfo->message}}
|
||||
</p>
|
||||
@@ -207,27 +206,27 @@
|
||||
<x-slot name="modalFooter"></x-slot>
|
||||
</x-modal>
|
||||
|
||||
<x-modal id="editUser" modal-label="editUser" modal-title="Edit PII and Roles" include-close-button="true">
|
||||
<x-modal id="editUser" modal-label="editUser" modal-title="{{__('messages.profile.edituser')}}" include-close-button="true">
|
||||
|
||||
<form id="updateUserForm" method="post" action="{{ route('updateUser', ['user' => $profile->user->id]) }}">
|
||||
@csrf
|
||||
@method('PATCH')
|
||||
|
||||
<label for="email">Email address</label>
|
||||
<label for="email">{{__('messages.contactlabel_email')}}</label>
|
||||
<input id="email" type="text" name="email" class="form-control" required value="{{ $profile->user->email }}" />
|
||||
|
||||
<label for="name">Name</label>
|
||||
<label for="name">{{__('messages.contactlabel_name')}}</label>
|
||||
<input id="name" type="text" name="name" class="form-control" required value="{{ $profile->user->name }}" />
|
||||
|
||||
<label for="uuid">Mojang UUID</label>
|
||||
<input id="uuid" type="text" name="uuid" class="form-control" required value="{{ $profile->user->uuid }}" />
|
||||
<p class="text-muted text-sm">
|
||||
<i class="fas fa-exclamation-triangle"></i> Warning! This is a sensitive setting! Changing this could have unintended consequences!
|
||||
<i class="fas fa-exclamation-triangle"></i> {{__('messages.profile.edituser_consequence')}}
|
||||
</p>
|
||||
|
||||
<div class="form-group mt-3">
|
||||
|
||||
<label>Roles</label>
|
||||
<label>{{__('messages.reusable.roles')}}</label>
|
||||
<table class="table table-borderless">
|
||||
<tbody>
|
||||
|
||||
@@ -250,7 +249,7 @@
|
||||
|
||||
<x-slot name="modalFooter">
|
||||
|
||||
<button type="button" class="btn btn-warning" onclick="$('#updateUserForm').submit()"><i class="fa fa-exclamation-cicle"></i> Save changes</button>
|
||||
<button type="button" class="btn btn-warning" onclick="$('#updateUserForm').submit()"><i class="fa fa-exclamation-cicle"></i> {{__('messages.vacancy.save')}}</button>
|
||||
|
||||
</x-slot>
|
||||
|
||||
@@ -291,15 +290,15 @@
|
||||
@endif
|
||||
|
||||
<p class="text-muted">{{$profile->profileShortBio}}</p>
|
||||
<p class="text-muted">Member since {{$since}}</p>
|
||||
<p class="text-muted">{{__('messages.reusable.member_since', ['date' => $since])}}</p>
|
||||
@if (Auth::user()->hasRole('admin'))
|
||||
<button type="button" class="btn btn-sm btn-info" onclick="$('#ipInfo').modal('show')">Lookup {{$profile->user->originalIP}}</button>
|
||||
<button type="button" class="btn btn-sm btn-info" onclick="$('#ipInfo').modal('show')">{{__('messages.reusable.lookup', ['ipAddress' => $profile->user->originalIP])}}</button>
|
||||
@endif
|
||||
|
||||
@if ($profile->user->is(Auth::user()))
|
||||
<button type="button" class="btn btn-sm btn-warning" onclick="window.location.href='{{route('showProfileSettings')}}'"><i class="fas fa-pencil-alt"></i></button>
|
||||
@elseif (Auth::user()->hasRole('admin') && $profile->user->isStaffMember())
|
||||
<button type="button" class="btn btn-sm btn-danger" onclick="$('#terminateUser').modal('show')">Terminate Staff Member</button>
|
||||
<button type="button" class="btn btn-sm btn-danger" onclick="$('#terminateUser').modal('show')">{{__('messages.profile.terminate_txt')}}</button>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
@@ -326,7 +325,7 @@
|
||||
<h5 class="card-header">
|
||||
<a class="collapsed d-block" data-toggle="collapse" href="#collapse-collapsed" aria-expanded="true" aria-controls="collapse-collapsed" id="heading-collapsed">
|
||||
<i class="fa fa-chevron-down pull-right"></i>
|
||||
Account Management (Admin)
|
||||
{{__('messages.profile.acc_management')}}
|
||||
</a>
|
||||
</h5>
|
||||
<div id="collapse-collapsed" class="collapse" aria-labelledby="heading-collapsed">
|
||||
@@ -335,19 +334,19 @@
|
||||
<div class="management-btn text-center">
|
||||
|
||||
@if (!$profile->user->isBanned())
|
||||
<button class="btn btn-danger mb-2" id="banAccountTrigger"><i class="fa fa-ban"></i> Ban Account</button><br>
|
||||
<button class="btn btn-danger mb-2" id="banAccountTrigger"><i class="fa fa-ban"></i> {{__('messages.profile.ban_acc')}}</button><br>
|
||||
@else
|
||||
<form method="post" action="{{route('unbanUser', ['user' => $profile->user->id])}}">
|
||||
|
||||
@method('DELETE')
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-warning mb-2"><i class="fa fa-check"></i> Unban</button>
|
||||
<button type="submit" class="btn btn-warning mb-2"><i class="fa fa-check"></i> {{__('messages.profile.unban_acc')}}</button>
|
||||
|
||||
</form>
|
||||
@endif
|
||||
<button class="btn btn-danger mb-2" onclick="$('#deleteAccount').modal('show')"><i class="fas fa-trash-alt"></i> Delete Account</button><br>
|
||||
<button class="btn btn-danger mb-2" onclick="$('#deleteAccount').modal('show')"><i class="fas fa-trash-alt"></i> {{__('messages.profile.delete_acc')}}</button><br>
|
||||
|
||||
<button class="btn btn-warning mb-2" onclick="$('#editUser').modal('show')"><i class="fas fa-pencil-alt"></i> Edit Account</button><br>
|
||||
<button class="btn btn-warning mb-2" onclick="$('#editUser').modal('show')"><i class="fas fa-pencil-alt"></i> {{__('messages.profile.edit_acc')}}</button><br>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -369,7 +368,7 @@
|
||||
<div class="card-body text-center">
|
||||
|
||||
<a href="https://github.com/{{$github}}" class="pr-2 pl-2"><i class="fab fa-github fa-2x"></i></a>
|
||||
<a href="#" onclick="toastr.info('User\'s Discord tag: {{$discord}}')" class="pr-2 pl-2"><i class="fab fa-discord fa-2x"></i></a>
|
||||
<a href="#" onclick="toastr.info('{{__('messages.profile.discord_tag', ['discordTag' => $discord])}}')" class="pr-2 pl-2"><i class="fab fa-discord fa-2x"></i></a>
|
||||
<a href="https://twitter.com/{{$twitter}}" class="pr-2 pl-2"><i class="fab fa-twitter fa-2x"></i></a>
|
||||
<a href="https://instagram.com/{{$insta}}" class="pr-2 pl-2"><i class="fab fa-instagram fa-2x"></i></a>
|
||||
|
||||
@@ -389,7 +388,7 @@
|
||||
<div class="card">
|
||||
|
||||
<div class="card-header">
|
||||
<h4>About</h4>
|
||||
<h4>{{__('messages.reusable.abt')}}</h4>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user