From d15c0cb12f03c5d41959502ae8e67661fd8d6640 Mon Sep 17 00:00:00 2001 From: Miguel Nogueira Date: Sat, 30 May 2020 00:20:39 +0100 Subject: [PATCH] Major changes - Vote system now finished --- .env.example | 2 + .idea/hrm-mcserver.iml | 17 + .idea/php.xml | 17 + app/Application.php | 7 + app/Console/Commands/CountVotes.php | 133 ++ app/Console/Kernel.php | 4 + app/Events/ApplicationApprovedEvent.php | 31 + app/Events/ApplicationDeniedEvent.php | 30 + app/Exceptions/Handler.php | 4 + .../Controllers/ApplicationController.php | 20 +- .../Controllers/AppointmentController.php | 20 + app/Http/Controllers/DevToolsController.php | 34 + app/Http/Controllers/VoteController.php | 36 +- app/Http/Requests/SaveNotesRequest.php | 30 + app/Http/Requests/VoteRequest.php | 30 + app/Listeners/DenyUser.php | 35 + app/Listeners/PromoteUser.php | 48 + app/Providers/EventServiceProvider.php | 7 + app/Providers/MojangStatusProvider.php | 14 +- app/StaffProfile.php | 10 +- app/User.php | 6 + app/Vote.php | 21 +- composer.json | 3 +- composer.lock | 1081 ++++++++++++++++- config/adminlte.php | 5 + config/sentry.php | 24 + public/css/viewapplication.css | 3 +- .../administration/devtools.blade.php | 75 ++ .../appmanagement/peerreview.blade.php | 2 - .../views/dashboard/user/viewapp.blade.php | 41 +- routes/web.php | 18 +- storage/debugbar/.gitignore | 0 32 files changed, 1791 insertions(+), 17 deletions(-) create mode 100644 app/Console/Commands/CountVotes.php create mode 100644 app/Events/ApplicationApprovedEvent.php create mode 100644 app/Events/ApplicationDeniedEvent.php create mode 100644 app/Http/Controllers/DevToolsController.php create mode 100644 app/Http/Requests/SaveNotesRequest.php create mode 100644 app/Http/Requests/VoteRequest.php create mode 100644 app/Listeners/DenyUser.php create mode 100644 app/Listeners/PromoteUser.php create mode 100644 config/sentry.php create mode 100644 resources/views/dashboard/administration/devtools.blade.php mode change 100644 => 100755 storage/debugbar/.gitignore diff --git a/.env.example b/.env.example index 6a4c486..8c90451 100644 --- a/.env.example +++ b/.env.example @@ -49,3 +49,5 @@ PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +SENTRY_LARAVEL_DSN= diff --git a/.idea/hrm-mcserver.iml b/.idea/hrm-mcserver.iml index 8cb37a3..14cc1f9 100644 --- a/.idea/hrm-mcserver.iml +++ b/.idea/hrm-mcserver.iml @@ -9,6 +9,7 @@ + @@ -30,6 +31,8 @@ + + @@ -44,8 +47,16 @@ + + + + + + + + @@ -59,6 +70,8 @@ + + @@ -79,6 +92,8 @@ + + @@ -90,12 +105,14 @@ + + diff --git a/.idea/php.xml b/.idea/php.xml index 86821a7..0aa2ae5 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -104,6 +104,23 @@ + + + + + + + + + + + + + + + + + diff --git a/app/Application.php b/app/Application.php index 53558da..027c7a0 100644 --- a/app/Application.php +++ b/app/Application.php @@ -14,6 +14,7 @@ class Application extends Model ]; + public function user() { return $this->belongsTo('App\User', 'applicantUserID', 'id'); @@ -29,10 +30,16 @@ class Application extends Model return $this->hasOne('App\Appointment', 'applicationID', 'id'); } + public function votes() + { + return $this->belongsToMany('App\Vote', 'votes_has_application'); + } + public function setStatus($status) { return $this->update([ 'applicationStatus' => $status ]); + } } diff --git a/app/Console/Commands/CountVotes.php b/app/Console/Commands/CountVotes.php new file mode 100644 index 0000000..e46c465 --- /dev/null +++ b/app/Console/Commands/CountVotes.php @@ -0,0 +1,133 @@ +get(); + $pbar = $this->output->createProgressBar($eligibleApps->count()); + + if($eligibleApps->isEmpty()) + { + $this->error('𐄂 There are no applications that need to be processed.'); + + return false; + } + + foreach ($eligibleApps as $application) + { + $votes = $application->votes; + $voteCount = $application->votes->count(); + + $positiveVotes = 0; + $negativeVotes = 0; + + if ($voteCount > 5) + { + $this->info('Counting votes for application ID ' . $application->id); + foreach ($votes as $vote) + { + switch ($vote->allowedVoteType) + { + case 'VOTE_APPROVE': + $positiveVotes++; + break; + case 'VOTE_DENY': + $negativeVotes++; + break; + } + } + + $this->info('Total votes for application ID ' . $application->id . ': ' . $voteCount); + $this->info('Calculating criteria...'); + $negativeVotePercent = floor(($negativeVotes / $voteCount) * 100); + $positiveVotePercent = floor(($positiveVotes / $voteCount) * 100); + + $pollResult = $positiveVotePercent > $negativeVotePercent; + + $this->table([ + '% of approval votes', + '% of denial votes' + ], [ // array of arrays, e.g. rows + [ + $positiveVotePercent . "%", + $negativeVotePercent . "%" + ] + ]); + + if ($pollResult) + { + $this->info('✓ Dispatched promotion event for applicant ' . $application->user->name); + if (!$this->option('dryrun')) + { + event(new ApplicationApprovedEvent(Application::find($application->id))); + } + else + { + $this->warn('Dry run: Event won\'t be dispatched'); + } + + $pbar->advance(); + + } + else { + + if (!$this->option('dryrun')) + { + event(new ApplicationDeniedEvent(Application::find($application->id))); + } + else { + $this->warn('Dry run: Event won\'t be dispatched'); + } + + $pbar->advance(); + $this->error('𐄂 Applicant ' . $application->user->name . ' does not meet vote criteria (Majority)'); + } + } + else + { + $this->warn("Application ID" . $application->id . " did not have enough votes for processing (min 5)"); + } + + } + + $pbar->finish(); + return true; + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 69914e9..74775a8 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -25,6 +25,10 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { // $schedule->command('inspire')->hourly(); + + $schedule->command('vote:evaluate') + ->everyFiveMinutes(); + // Production value: Every day } /** diff --git a/app/Events/ApplicationApprovedEvent.php b/app/Events/ApplicationApprovedEvent.php new file mode 100644 index 0000000..4bb005c --- /dev/null +++ b/app/Events/ApplicationApprovedEvent.php @@ -0,0 +1,31 @@ +application = $application; + } + + +} diff --git a/app/Events/ApplicationDeniedEvent.php b/app/Events/ApplicationDeniedEvent.php new file mode 100644 index 0000000..fb84a57 --- /dev/null +++ b/app/Events/ApplicationDeniedEvent.php @@ -0,0 +1,30 @@ +application = $application; + } + +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 59c585d..ff35bfd 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -36,6 +36,10 @@ class Handler extends ExceptionHandler */ public function report(Throwable $exception) { + if (app()->bound('sentry') && $this->shouldReport($exception)) { + app('sentry')->captureException($exception); + } + parent::report($exception); } diff --git a/app/Http/Controllers/ApplicationController.php b/app/Http/Controllers/ApplicationController.php index 080d43e..2827a6b 100644 --- a/app/Http/Controllers/ApplicationController.php +++ b/app/Http/Controllers/ApplicationController.php @@ -13,6 +13,22 @@ use Illuminate\Support\Facades\Validator; class ApplicationController extends Controller { + private function canVote($votes) + { + $allvotes = collect([]); + + foreach ($votes as $vote) + { + if ($vote->userID == Auth::user()->id) + { + Log::debug('Match'); + $allvotes->push($vote); + + } + } + + return $allvotes->count() == 1; + } public function showUserApps() { @@ -33,7 +49,8 @@ class ApplicationController extends Controller 'application' => $application, 'structuredResponses' => json_decode($application->response->responseData, true), 'formStructure' => $application->response->form, - 'vacancy' => $application->response->vacancy + 'vacancy' => $application->response->vacancy, + 'canVote' => $this->canVote($application->votes) ] ); } @@ -96,6 +113,7 @@ class ApplicationController extends Controller { return view('dashboard.appmanagement.peerreview') ->with('applications', Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get()); + } public function renderApplicationForm(Request $request, $vacancySlug) diff --git a/app/Http/Controllers/AppointmentController.php b/app/Http/Controllers/AppointmentController.php index 2348a7a..fe522db 100644 --- a/app/Http/Controllers/AppointmentController.php +++ b/app/Http/Controllers/AppointmentController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Application; +use App\Http\Requests\SaveNotesRequest; use Carbon\Carbon; use Illuminate\Http\Request; use App\Appointment; @@ -84,5 +85,24 @@ class AppointmentController extends Controller return redirect()->back(); } + // also updates + public function saveNotes(SaveNotesRequest $request, $applicationID) + { + $application = Application::find($applicationID); + + if (!is_null($application)) + { + $application->appointment->meetingNotes = $request->noteText; + $application->appointment->save(); + + $request->session()->flash('success', 'Meeting notes have been saved.'); + } + else + { + $request->session()->flash('error', 'Sanity check failed: There\'s no appointment to save notes to!'); + } + + return redirect()->back(); + } } diff --git a/app/Http/Controllers/DevToolsController.php b/app/Http/Controllers/DevToolsController.php new file mode 100644 index 0000000..ecac0e3 --- /dev/null +++ b/app/Http/Controllers/DevToolsController.php @@ -0,0 +1,34 @@ +with('applications', Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get()); + } + + public function forceVoteCount(Request $request) + { + $application = Application::find($request->application); + + if (!is_null($application)) + { + event(new ApplicationApprovedEvent($application)); + + $request->session()->flash('success', 'Event dispatched! Please check the debug logs for more info'); + } + else + { + $request->session()->flash('error', 'Application doesn\'t exist!'); + } + + return redirect()->back(); + } +} diff --git a/app/Http/Controllers/VoteController.php b/app/Http/Controllers/VoteController.php index 6d117b8..56fcb6d 100644 --- a/app/Http/Controllers/VoteController.php +++ b/app/Http/Controllers/VoteController.php @@ -2,9 +2,43 @@ namespace App\Http\Controllers; +use App\Application; +use App\Http\Requests\VoteRequest; +use App\Jobs\ProcessVoteList; +use App\Vote; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; class VoteController extends Controller { - // + + public function vote(VoteRequest $voteRequest, $applicationID) + { + $application = Application::find($applicationID); + + if (!is_null($application)) + { + $vote = Vote::create([ + 'userID' => Auth::user()->id, + 'allowedVoteType' => $voteRequest->voteType, + ]); + + $vote->application()->attach($applicationID); + + Log::info('User ' . Auth::user()->name . ' has voted in applicant ' . $application->user->name . '\'s application', [ + 'voteType' => $voteRequest->voteType + ]); + + $voteRequest->session()->flash('success', 'Your vote has been registered! You will now be notified about the outcome of this application.'); + } + else + { + $voteRequest->session()->flash('error', 'Can\t vote a non existant application!'); + } + + // Cron job will run command that processes votes + + return redirect()->back(); + } } diff --git a/app/Http/Requests/SaveNotesRequest.php b/app/Http/Requests/SaveNotesRequest.php new file mode 100644 index 0000000..b6dd782 --- /dev/null +++ b/app/Http/Requests/SaveNotesRequest.php @@ -0,0 +1,30 @@ + 'required|string' + ]; + } +} diff --git a/app/Http/Requests/VoteRequest.php b/app/Http/Requests/VoteRequest.php new file mode 100644 index 0000000..fdcf8c9 --- /dev/null +++ b/app/Http/Requests/VoteRequest.php @@ -0,0 +1,30 @@ + 'required|string|in:VOTE_DENY,VOTE_APPROVE' + ]; + } +} diff --git a/app/Listeners/DenyUser.php b/app/Listeners/DenyUser.php new file mode 100644 index 0000000..1615828 --- /dev/null +++ b/app/Listeners/DenyUser.php @@ -0,0 +1,35 @@ +application->setStatus('DENIED'); + Log::info('User ' . $event->application->user->name . ' just had their application denied.'); + + // Also dispatch other notifications + } +} diff --git a/app/Listeners/PromoteUser.php b/app/Listeners/PromoteUser.php new file mode 100644 index 0000000..f5fd2f4 --- /dev/null +++ b/app/Listeners/PromoteUser.php @@ -0,0 +1,48 @@ +application->setStatus('APPROVED'); + + $staffProfile = StaffProfile::create([ + 'userID' => $event->application->user->id, + 'approvalDate' => now()->toDateTimeString(), + 'memberNotes' => 'Approved by staff members. Welcome them to the team!' + ]); + + Log::info('User ' . $event->application->user->name . ' has just been promoted!', [ + 'newRank' => $event->application->response->vacancy->permissionGroupName, + 'staffProfileID' => $staffProfile->id + ]); + // TODO: Dispatch alert email and notifications for the user and staff members + // TODO: Also assign new app role based on the permission group name + + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 693b9b5..aadbf86 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -20,6 +20,12 @@ class EventServiceProvider extends ServiceProvider SendEmailVerificationNotification::class, OnUserRegistration::class ], + 'App\Events\ApplicationApprovedEvent' => [ + 'App\Listeners\PromoteUser' + ], + 'App\Events\ApplicationDeniedEvent' => [ + 'App\Listeners\DenyUser' + ] ]; /** @@ -29,6 +35,7 @@ class EventServiceProvider extends ServiceProvider */ public function boot() { + parent::boot(); // diff --git a/app/Providers/MojangStatusProvider.php b/app/Providers/MojangStatusProvider.php index 4a83e79..3fe4dc1 100644 --- a/app/Providers/MojangStatusProvider.php +++ b/app/Providers/MojangStatusProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use GuzzleHttp\Exception\ConnectException; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; @@ -32,8 +33,17 @@ class MojangStatusProvider extends ServiceProvider { Log::info("Mojang Status Provider: Mojang Status not found in the cache; Sending new request."); - $mcstatus = Http::get(config('general.urls.mojang.statuscheck')); - Cache::put('mojang_status', base64_encode($mcstatus->body()), now()->addMinutes(60)); + try + { + $mcstatus = Http::get(config('general.urls.mojang.statuscheck')); + Cache::put('mojang_status', base64_encode($mcstatus->body()), now()->addDays(3)); + } + catch(ConnectException $connectException) + { + Log::critical('Could not connect to Mojang servers: Cannot check/refresh status', [ + 'message' => $connectException->getMessage() + ]); + } } View::share('mcstatus', json_decode(base64_decode(Cache::get('mojang_status')), true)); diff --git a/app/StaffProfile.php b/app/StaffProfile.php index 5fbd774..8d6cfba 100644 --- a/app/StaffProfile.php +++ b/app/StaffProfile.php @@ -6,5 +6,13 @@ use Illuminate\Database\Eloquent\Model; class StaffProfile extends Model { - // + public $fillable = [ + + 'userID', + 'approvalDate', + 'terminationDate', + 'resignationDate', + 'memberNotes' + + ]; } diff --git a/app/User.php b/app/User.php index cc30701..fca985b 100644 --- a/app/User.php +++ b/app/User.php @@ -42,8 +42,14 @@ class User extends Authenticatable return $this->hasMany('App\Application', 'applicantUserID', 'id'); } + public function votes() + { + return $this->hasMany('App\Vote', 'userID', 'id'); + } + public function profile() { return $this->hasOne('App\Profile', 'userID', 'id'); } + } diff --git a/app/Vote.php b/app/Vote.php index 3d665fe..6a89b21 100644 --- a/app/Vote.php +++ b/app/Vote.php @@ -6,5 +6,24 @@ use Illuminate\Database\Eloquent\Model; class Vote extends Model { - // + public $fillable = [ + + 'userID', + 'allowedVoteType', + + ]; + + public $touches = [ + 'application' + ]; + + public function user() + { + return $this->belongsTo('App\User', 'id', 'userID'); + } + + public function application() + { + return $this->belongsToMany('App\Application', 'votes_has_application'); + } } diff --git a/composer.json b/composer.json index daa28cf..6add0c8 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,8 @@ "jeroennoten/laravel-adminlte": "^3.2", "laravel/framework": "^7.0", "laravel/tinker": "^2.0", - "laravel/ui": "^2.0" + "laravel/ui": "^2.0", + "sentry/sentry-laravel": "1.7.1" }, "require-dev": { "barryvdh/laravel-debugbar": "^3.3", diff --git a/composer.lock b/composer.lock index ac835bd..44e86bd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b3d0a8de9243f3a0b000acad7cb092b4", + "content-hash": "5b9d99142da24c05a4acf15fc66efdae", "packages": [ { "name": "almasaeed2010/adminlte", @@ -143,6 +143,113 @@ ], "time": "2020-04-15T15:59:35+00:00" }, + { + "name": "clue/stream-filter", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/clue/php-stream-filter.git", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\StreamFilter\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "time": "2019-04-09T12:31:48+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "98df7f1b293c0550bd5b1ce6b60b59bdda23aa47" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/98df7f1b293c0550bd5b1ce6b60b59bdda23aa47", + "reference": "98df7f1b293c0550bd5b1ce6b60b59bdda23aa47", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7" + }, + "replace": { + "ocramius/package-versions": "1.2 - 1.8.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "time": "2020-04-23T11:49:37+00:00" + }, { "name": "dnoegel/php-xdg-base-dir", "version": "v0.1.1", @@ -980,6 +1087,107 @@ ], "time": "2019-07-01T23:21:34+00:00" }, + { + "name": "http-interop/http-factory-guzzle", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/http-interop/http-factory-guzzle.git", + "reference": "34861658efb9899a6618cef03de46e2a52c80fc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/34861658efb9899a6618cef03de46e2a52c80fc0", + "reference": "34861658efb9899a6618cef03de46e2a52c80fc0", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.4.2", + "psr/http-factory": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.5", + "phpunit/phpunit": "^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Factory\\Guzzle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "An HTTP Factory using Guzzle PSR7", + "keywords": [ + "factory", + "http", + "psr-17", + "psr-7" + ], + "time": "2018-07-31T19:32:56+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "e3517fb11b67e798239354fe8213927d012ad8f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/e3517fb11b67e798239354fe8213927d012ad8f9", + "reference": "e3517fb11b67e798239354fe8213927d012ad8f9", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.8.0", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A wrapper for ocramius/package-versions to get pretty versions strings", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "time": "2020-04-24T14:19:45+00:00" + }, { "name": "jeroennoten/laravel-adminlte", "version": "v3.2.0", @@ -1728,6 +1936,474 @@ ], "time": "2019-11-29T22:36:02+00:00" }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "a8b29678d61556f45d6236b1667db16d998ceec5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/a8b29678d61556f45d6236b1667db16d998ceec5", + "reference": "a8b29678d61556f45d6236b1667db16d998ceec5", + "shasum": "" + }, + "require": { + "php": "^7.1", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", + "symfony/options-resolver": " ^3.4.20 || ~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "phpspec/phpspec": "^5.1", + "phpspec/prophecy": "^1.8", + "sebastian/comparator": "^3.0" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "time": "2019-11-18T08:58:18+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.7.4", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82dbef649ccffd8e4f22e1953c3a5265992b83c0", + "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "conflict": { + "nyholm/psr7": "<1.0" + }, + "require-dev": { + "akeneo/phpspec-skip-example-extension": "^4.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1", + "puli/composer-plugin": "1.0.0-beta10" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", + "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" + ], + "time": "2020-01-03T11:25:47+00:00" + }, + { + "name": "php-http/guzzle6-adapter", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/6074a4b1f4d5c21061b70bab3b8ad484282fe31f", + "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1", + "php-http/httplug": "^2.0", + "psr/http-client": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/client-integration-tests": "^2.0", + "phpunit/phpunit": "^7.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle6\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2018-12-16T14:44:03+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "72d2b129a48f0490d55b7f89be0d6aa0597ffb06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/72d2b129a48f0490d55b7f89be0d6aa0597ffb06", + "reference": "72d2b129a48f0490d55b7f89be0d6aa0597ffb06", + "shasum": "" + }, + "require": { + "php": "^7.0", + "php-http/promise": "^1.0", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^4.3.4|^5.0|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "time": "2019-12-27T10:07:11+00:00" + }, + { + "name": "php-http/message", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/ce8f43ac1e294b54aabf5808515c3554a19c1e1c", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.4", + "php": "^7.1", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "akeneo/phpspec-skip-example-extension": "^1.0", + "coduo/phpspec-data-provider-extension": "^1.0", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4", + "slim/slim": "^3.0", + "zendframework/zend-diactoros": "^1.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation", + "zendframework/zend-diactoros": "Used with Diactoros Factories" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + }, + "files": [ + "src/filters.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "time": "2019-08-05T06:55:08+00:00" + }, + { + "name": "php-http/message-factory", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "time": "2015-12-19T14:08:53+00:00" + }, + { + "name": "php-http/promise", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "shasum": "" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" + }, { "name": "phpoption/phpoption", "version": "1.7.3", @@ -1878,6 +2554,107 @@ ], "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "496a823ef742b632934724bf769560c2a5c7c44e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/496a823ef742b632934724bf769560c2a5c7c44e", + "reference": "496a823ef742b632934724bf769560c2a5c7c44e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "time": "2018-10-30T23:29:13+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -2277,6 +3054,195 @@ ], "time": "2020-03-29T20:13:32+00:00" }, + { + "name": "sentry/sdk", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php-sdk.git", + "reference": "18921af9c2777517ef9fb480845c22a98554d6af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/18921af9c2777517ef9fb480845c22a98554d6af", + "reference": "18921af9c2777517ef9fb480845c22a98554d6af", + "shasum": "" + }, + "require": { + "http-interop/http-factory-guzzle": "^1.0", + "php-http/guzzle6-adapter": "^1.1|^2.0", + "sentry/sentry": "^2.3" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "This is a metapackage shipping sentry/sentry with a recommended http client.", + "time": "2020-01-08T19:16:29+00:00" + }, + { + "name": "sentry/sentry", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "e44561875e0d724bac3d9cdb705bf58847acd425" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/e44561875e0d724bac3d9cdb705bf58847acd425", + "reference": "e44561875e0d724bac3d9cdb705bf58847acd425", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/promises": "^1.3", + "guzzlehttp/psr7": "^1.6", + "jean85/pretty-package-versions": "^1.2", + "php": "^7.1", + "php-http/async-client-implementation": "^1.0", + "php-http/client-common": "^1.5|^2.0", + "php-http/discovery": "^1.6.1", + "php-http/httplug": "^1.1|^2.0", + "php-http/message": "^1.5", + "psr/http-factory": "^1.0", + "psr/http-message-implementation": "^1.0", + "psr/log": "^1.0", + "symfony/options-resolver": "^2.7|^3.0|^4.0|^5.0", + "symfony/polyfill-uuid": "^1.13.1" + }, + "conflict": { + "php-http/client-common": "1.8.0", + "raven/raven": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "monolog/monolog": "^1.3|^2.0", + "php-http/mock-client": "^1.3", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.5.18", + "symfony/phpunit-bridge": "^4.3|^5.0", + "vimeo/psalm": "^3.4" + }, + "suggest": { + "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Sentry\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "A PHP SDK for Sentry (http://sentry.io)", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], + "time": "2020-05-20T20:49:38+00:00" + }, + { + "name": "sentry/sentry-laravel", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-laravel.git", + "reference": "8ec4695c5c6fa28d952c0f361e02997e84920354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/8ec4695c5c6fa28d952c0f361e02997e84920354", + "reference": "8ec4695c5c6fa28d952c0f361e02997e84920354", + "shasum": "" + }, + "require": { + "illuminate/support": "5.0 - 5.8 | ^6.0 | ^7.0", + "php": "^7.1", + "sentry/sdk": "^2.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.14.*", + "laravel/framework": "^6.0", + "orchestra/testbench": "^3.9", + "phpunit/phpunit": "^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev", + "dev-0.x": "0.x-dev" + }, + "laravel": { + "providers": [ + "Sentry\\Laravel\\ServiceProvider" + ], + "aliases": { + "Sentry": "Sentry\\Laravel\\Facade" + } + } + }, + "autoload": { + "psr-0": { + "Sentry\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "Laravel SDK for Sentry (https://sentry.io)", + "homepage": "https://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "laravel", + "log", + "logging", + "sentry" + ], + "time": "2020-04-01T10:30:44+00:00" + }, { "name": "swiftmailer/swiftmailer", "version": "v6.2.3", @@ -2913,6 +3879,60 @@ ], "time": "2020-03-27T16:56:45+00:00" }, + { + "name": "symfony/options-resolver", + "version": "v5.0.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3707e3caeff2b797c0bfaadd5eba723dd44e6bf1", + "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2020-04-06T10:40:56+00:00" + }, { "name": "symfony/polyfill-ctype", "version": "v1.15.0", @@ -3264,6 +4284,65 @@ ], "time": "2020-02-27T09:26:54+00:00" }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "6dbf0269e8aeab8253a5059c51c1760fb4034e87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/6dbf0269e8aeab8253a5059c51c1760fb4034e87", + "reference": "6dbf0269e8aeab8253a5059c51c1760fb4034e87", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "time": "2020-05-12T16:47:27+00:00" + }, { "name": "symfony/process", "version": "v5.0.7", diff --git a/config/adminlte.php b/config/adminlte.php index 9c3e856..c940108 100644 --- a/config/adminlte.php +++ b/config/adminlte.php @@ -294,6 +294,11 @@ return [ 'text' => 'Global Notification Settings', 'icon' => 'far fa-bell', 'url' => '/admin/notifications' + ], + [ + 'text' => 'Developer Tools', + 'icon' => 'fas fa-code', + 'url' => '/admin/devtools' ] ] ], diff --git a/config/sentry.php b/config/sentry.php new file mode 100644 index 0000000..4d9ef4d --- /dev/null +++ b/config/sentry.php @@ -0,0 +1,24 @@ + env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), + + // capture release as git sha + // 'release' => trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')), + + 'breadcrumbs' => [ + // Capture Laravel logs in breadcrumbs + 'logs' => true, + + // Capture SQL queries in breadcrumbs + 'sql_queries' => true, + + // Capture bindings on SQL queries logged in breadcrumbs + 'sql_bindings' => true, + + // Capture queue job information in breadcrumbs + 'queue_info' => true, + ], + +]; diff --git a/public/css/viewapplication.css b/public/css/viewapplication.css index 82943e2..d94e1a9 100644 --- a/public/css/viewapplication.css +++ b/public/css/viewapplication.css @@ -1,6 +1,5 @@ -.footer-button { +.footer-buttons { display: inline-block; white-space: nowrap; - margin-right: 10px; } diff --git a/resources/views/dashboard/administration/devtools.blade.php b/resources/views/dashboard/administration/devtools.blade.php new file mode 100644 index 0000000..f07e7c3 --- /dev/null +++ b/resources/views/dashboard/administration/devtools.blade.php @@ -0,0 +1,75 @@ +@extends('adminlte::page') + +@section('title', 'Raspberry Network | Developer Options') + +@section('content_header') + +

Administration / Developer Tools

+ +@stop + +@section('js') + +@stop + +@section('content') + + + +

Please choose an application to force re-evaluation

+
+ @csrf + + +
+ + + + + +
+ +
+
+ +
+ + Warning: Do not use these options if you don't know what you're doing, even if you have access to this page. + +
+ +
+
+ +
+ +
+ + + + + + + + + + + + + + +
+ +
+ +@stop diff --git a/resources/views/dashboard/appmanagement/peerreview.blade.php b/resources/views/dashboard/appmanagement/peerreview.blade.php index 56a6480..236d23c 100644 --- a/resources/views/dashboard/appmanagement/peerreview.blade.php +++ b/resources/views/dashboard/appmanagement/peerreview.blade.php @@ -67,8 +67,6 @@ {{($application->applicationStatus == 'STAGE_PEERAPPROVAL') ? 'Peer Review' : 'Unknown'}} - - @endforeach diff --git a/resources/views/dashboard/user/viewapp.blade.php b/resources/views/dashboard/user/viewapp.blade.php index c7f441a..af69239 100644 --- a/resources/views/dashboard/user/viewapp.blade.php +++ b/resources/views/dashboard/user/viewapp.blade.php @@ -22,10 +22,30 @@ + @if (!$canVote) + + @endif + @stop @section('content') + + +
+ @csrf + @method('PATCH') + +
+

Last updated @ {{$application->appointment->updated_at}}

+ + + + +
+

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.

@@ -246,7 +266,8 @@ - + + @@ -270,10 +291,22 @@ - - + @if($canVote) - +
+ @csrf + + +
+
+ @csrf + + +
+ + @endif + +
diff --git a/routes/web.php b/routes/web.php index 80af550..11b383e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,7 +12,6 @@ use Illuminate\Support\Facades\Route; | contains the "web" middleware group. Now create something great! | */ - Route::group(['prefix' => 'auth', 'middleware' => ['usernameUUID']], function (){ Auth::routes(); @@ -38,9 +37,14 @@ Route::group(['middleware' => 'auth'], function(){ ->name('showUserApps') ->middleware('eligibility'); + Route::get('/view/{id}', 'ApplicationController@showUserApp') ->name('showUserApp'); + Route::patch('/notes/save/{applicationID}', 'AppointmentController@saveNotes') + ->name('saveNotes'); + + Route::patch('/update/{id}/{newStatus}', 'ApplicationController@updateApplicationStatus') ->name('updateApplicationStatus'); @@ -54,6 +58,10 @@ Route::group(['middleware' => 'auth'], function(){ ->name('pendingInterview'); + Route::post('{id}/staff/vote', 'VoteController@vote') + ->name('voteApplication'); + + }); Route::group(['prefix' => 'appointments'], function (){ @@ -137,6 +145,14 @@ Route::group(['middleware' => 'auth'], function(){ Route::get('forms', 'FormController@index') ->name('showForms'); + + Route::get('devtools', 'DevToolsController@index') + ->name('devTools'); + + // we could use route model binding + Route::post('devtools/vote-evaluation/force', 'DevToolsController@forceVoteCount') + ->name('devToolsForceVoteCount'); + }); }); diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore old mode 100644 new mode 100755