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
+
+
+
+ Dispatch event now
+
+
+
+
+
+
+
+
+
+ Warning: Do not use these options if you don't know what you're doing, even if you have access to this page.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Force Vote Evaluation
+
+
+
+
+
+
+
+
+
+
+@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'}}
Review
- Vote: Approve
- Vote: Deny
@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')
+
+
+
+ Last updated @ {{$application->appointment->updated_at}}
+
+
+ Save & Close
+
+
+
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 @@
View Meeting Notes
- Cancel Interview
+
+ Accept Meeting
@@ -270,10 +291,22 @@
- Vote: Approve Applicant
- Vote: Deny Applicant
+ @if($canVote)
- Meeting Notes
+
+ @csrf
+
+ Vote: Approve Applicant
+
+
+ @csrf
+
+ Vote: Deny Applicant
+
+
+ @endif
+
+ Meeting Notes
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