diff --git a/.env.example b/.env.example
index 8c90451..1f60e7f 100644
--- a/.env.example
+++ b/.env.example
@@ -18,6 +18,9 @@ RECAPTCHA_PRIVATE_KEY=
RECAPTCHA_VERIFY_URL="https://www.google.com/recaptcha/api/siteverify"
# WARNING: Your contact form will be useless if you change this value. Only change this URL if Google updates it.
+IPGEO_API_KEY=""
+IPGEO_API_URL=""
+
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
diff --git a/.idea/hrm-mcserver.iml b/.idea/hrm-mcserver.iml
index 14cc1f9..d77c059 100644
--- a/.idea/hrm-mcserver.iml
+++ b/.idea/hrm-mcserver.iml
@@ -94,10 +94,12 @@
')
+ ->line('Congratulations! Our Staff team has reviewed your application today, and your application has been approved.')
+ ->line('You have just received the Reviewer role, which allows you to view and vote on other applications.')
+ ->line('Your in-game rank should be updated network-wide in the next few minutes, allowing you to perform staff duties.')
+ ->line('Please join a voice channel when possible for your training meeting, if this has been mentioned by your interviewer.')
+ ->line('
')
+ ->line('Good luck and welcome aboard!')
+ ->action('Sign in', url(route('login')))
+ ->line('Thank you!');
+ }
+
+ public function toSlack($notifiable)
+ {
+
+ $url = route('showSingleProfile', ['user' => $notifiable->id]);
+ $roles = implode(', ', $notifiable->roles->pluck('name')->all());
+
+ return (new SlackMessage)
+ ->success()
+ ->content('A user has been approved on the team. Welcome aboard!')
+ ->attachment(function($attachment) use ($notifiable, $url, $roles){
+ $attachment->title('New staff member')
+ ->fields([
+ 'Name' => $notifiable->name,
+ 'Email' => $notifiable->email,
+ 'Roles' => $roles
+ ])
+ ->action('View profile', $url);
+ });
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/ApplicationDenied.php b/app/Notifications/ApplicationDenied.php
new file mode 100644
index 0000000..82993ce
--- /dev/null
+++ b/app/Notifications/ApplicationDenied.php
@@ -0,0 +1,85 @@
+application = $application;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ['mail', 'slack'];
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+
+ return (new MailMessage)
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - ' . $this->application->response->vacancy->vacancyName . ' application denied')
+ ->line('Your most recent application has been denied.')
+ ->line('Our review team denies applications for several reasons, including poor answers.')
+ ->line('Please review your application and try again in 30 days.')
+ ->action('Review application', url(route('showUserApp', ['id' => $this->application->id])))
+ ->line('Better luck next time!');
+ }
+
+
+ public function toSlack($notifiable)
+ {
+ $notifiableName = $notifiable->name;
+
+ return (new SlackMessage)
+ ->error()
+ ->content('An application has just been denied.')
+ ->attachment(function($attachment) use ($notifiableName){
+ $attachment->title('Application denied!')
+ ->content($notifiableName . '\'s application has just been denied. They can try again in 30 days.');
+ });
+
+ }
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/ApplicationMoved.php b/app/Notifications/ApplicationMoved.php
new file mode 100644
index 0000000..0559cc8
--- /dev/null
+++ b/app/Notifications/ApplicationMoved.php
@@ -0,0 +1,64 @@
+from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - Application Updated')
+ ->line('Your most recent application has been moved up a stage.')
+ ->line('This means our team has reviewed it and an interview will be scheduled ASAP.')
+ ->action('Sign in', url(route('login')))
+ ->line('Thank you!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/AppointmentFinished.php b/app/Notifications/AppointmentFinished.php
new file mode 100644
index 0000000..c1e879a
--- /dev/null
+++ b/app/Notifications/AppointmentFinished.php
@@ -0,0 +1,64 @@
+from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - Appointment completed')
+ ->line('Your appointment has been marked as completed!')
+ ->line('Please allow an additional day for your application to be fully processed.')
+ ->action('View applications', url(route('showUserApps')))
+ ->line('Thank you!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/AppointmentScheduled.php b/app/Notifications/AppointmentScheduled.php
new file mode 100644
index 0000000..3ad3f60
--- /dev/null
+++ b/app/Notifications/AppointmentScheduled.php
@@ -0,0 +1,71 @@
+appointment = $appointment;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ['mail'];
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ return (new MailMessage)
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - Interview scheduled')
+ ->line('A voice interview has been scheduled for you @ ' . $this->appointment->appointmentDate . '.')
+ ->line('With the following details: ' . $this->appointment->appointmentDescription)
+ ->line('This meeting will take place @ ' . $this->appointment->appointmentLocation . '. You will receive an email soon with details on how to join this meeting.')
+ ->line('You are expected to show up at least 5 minutes before the scheduled date.')
+ ->action('Sign in', url(route('login')))
+ ->line('Thank you!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/ChangedPassword.php b/app/Notifications/ChangedPassword.php
new file mode 100644
index 0000000..bc4cca5
--- /dev/null
+++ b/app/Notifications/ChangedPassword.php
@@ -0,0 +1,64 @@
+from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - Account password changed')
+ ->line('The password for the account registered to this email address has just been changed.')
+ ->line('If this was not you, please contact an administrator immediately.')
+ ->action('Sign in', url(route('login')))
+ ->line('Thank you!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/EmailChanged.php b/app/Notifications/EmailChanged.php
new file mode 100644
index 0000000..e946102
--- /dev/null
+++ b/app/Notifications/EmailChanged.php
@@ -0,0 +1,63 @@
+from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - Email address changed')
+ ->line('The email address for your account has just been updated, either by you or an administrator.')
+ ->action('Sign in', url(route('login')))
+ ->line('Thank you!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/NewApplicant.php b/app/Notifications/NewApplicant.php
new file mode 100644
index 0000000..8bf34c4
--- /dev/null
+++ b/app/Notifications/NewApplicant.php
@@ -0,0 +1,98 @@
+application = $application;
+ $this->vacancy = $vacancy;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ['slack'];
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ return (new MailMessage)
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - New application')
+ ->line('Someone has just applied for a position. Check it out!')
+ ->line('You are receiving this because you\'re a staff member at ' . config('app.name') . '.')
+ ->action('View Application', url(route('showUserApp', ['id' => $this->application->id])))
+ ->line('Thank you!');
+ }
+
+
+ public function toSlack($notifiable)
+ {
+
+ $vacancyDetails = [];
+ $vacancyDetails['name'] = $this->vacancy->vacancyName;
+ $vacancyDetails['slots'] = $this->vacancy->vacancyCount;
+
+ $url = route('showUserApp', ['id' => $this->application->id]);
+ $applicant = $this->application->user->name;
+
+ return (new SlackMessage)
+ ->success()
+ ->content('Notice: New application coming through. Please review as soon as possible.')
+ ->attachment(function($attachment) use ($vacancyDetails, $url, $applicant){
+ $attachment->title('Application details')
+ ->fields([
+ 'Applied for' => $vacancyDetails['name'],
+ 'Avaiable positions' => $vacancyDetails['slots'],
+ 'Applicant' => $applicant
+ ])
+ ->action('Review application', $url);
+ });
+ }
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/NewComment.php b/app/Notifications/NewComment.php
new file mode 100644
index 0000000..f23a338
--- /dev/null
+++ b/app/Notifications/NewComment.php
@@ -0,0 +1,69 @@
+application = $application;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ['mail'];
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ return (new MailMessage)
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - New comment')
+ ->line('Someone has just posted a new comment on an application you follow.')
+ ->line('You\'re receiving this email because you\'ve voted/commented on this application.')
+ ->action('Check it out', url(route('showUserApp', ['id' => $this->application->id])))
+ ->line('Thank you!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/NewUser.php b/app/Notifications/NewUser.php
new file mode 100644
index 0000000..30ffe1f
--- /dev/null
+++ b/app/Notifications/NewUser.php
@@ -0,0 +1,100 @@
+user = $user;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ($notifiable->isStaffMember())
+ ? ['slack', 'mail']
+ : ['mail'];
+
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ return (new MailMessage)
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - New user')
+ ->line($this->user->name . ' has just registered to our site.')
+ ->line('You are receiving this email because you opted to receive new user notifications.')
+ ->action('View profile', url(route('showSingleProfile', ['user' => $this->user->id])))
+ ->line('Thank you!');
+ }
+
+ public function toSlack($notifiable)
+ {
+ $user = [];
+
+ $user['name'] = $this->user->name;
+ $user['email'] = $this->user->email;
+ $user['username'] = UUID::toUsername($this->user->uuid);
+
+ $date = \Carbon\Carbon::parse($this->user->created_at);
+ $user['created_at'] = $date->englishMonth . ' ' . $date->day . ' ' . $date->year;
+
+ return (new SlackMessage)
+ ->success()
+ ->content('A new user has signed up!')
+ ->attachment(function($attachment) use ($user){
+
+ $attachment->title('User details')
+ ->fields([
+ 'Email address' => $user['email'],
+ 'Name' => $user['name'],
+ 'Minecraft Username' => $user['username'],
+ 'Registration date' => $user['created_at']
+ ]);
+
+ });
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/UserBanned.php b/app/Notifications/UserBanned.php
new file mode 100644
index 0000000..f5d5c4e
--- /dev/null
+++ b/app/Notifications/UserBanned.php
@@ -0,0 +1,71 @@
+user = $user;
+ $this->ban = $ban;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ['mail']; // slack
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ return (new MailMessage)
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->line('Hello, ')
+ ->line('Moderators have just banned user ' . $this->user->name . ' for ' . $this->ban->reason)
+ ->line('This ban will remain in effect until ' . $this->ban->bannedUntil . '.')
+ ->action('View profile', url(route('showSingleProfile', ['user' => $this->user->id])))
+ ->line('Thank you!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Notifications/VacancyClosed.php b/app/Notifications/VacancyClosed.php
new file mode 100644
index 0000000..cddba63
--- /dev/null
+++ b/app/Notifications/VacancyClosed.php
@@ -0,0 +1,68 @@
+vacancy = $vacancy;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ['mail'];
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ return (new MailMessage)
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - Vacancy Closed')
+ ->line('The vacancy ' . $this->vacancy->vacancyName . ', with ' . $this->vacancy->vacancyCount . ' remaining slots, has just been closed.')
+ ->line('Please be aware that this position may be deleted/reopened any time.')
+ ->action('View positions', url(route('showPositions')))
+ ->line('Thank you!');
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php
new file mode 100644
index 0000000..d405ab5
--- /dev/null
+++ b/app/Observers/UserObserver.php
@@ -0,0 +1,116 @@
+ 'Write a one-liner about you here!',
+ 'profileAboutMe' => 'Tell us a bit about you.',
+ 'socialLinks' => '{}',
+ 'userID' => $user->id
+
+ ]);
+ }
+
+ /**
+ * Handle the user "updated" event.
+ *
+ * @param \App\User $user
+ * @return void
+ */
+ public function updated(User $user)
+ {
+ //
+ }
+
+ public function deleting(User $user)
+ {
+ $user->profile()->delete();
+ Log::debug('Referential integrity cleanup: Deleted profile!');
+ $applications = $user->applications;
+
+ if (!$applications->isEmpty())
+ {
+ Log::debug('RIC: Now trying to delete applications and responses...');
+ foreach($applications as $application)
+ {
+ $application->response()->delete();
+ $votes = $application->votes;
+
+ foreach ($votes as $vote)
+ {
+ Log::debug('RIC: Deleting and detaching vote ' . $vote->id);
+ $vote->application()->detach($application->id);
+ $vote->delete();
+ }
+
+ if (!is_null($application->appointment))
+ {
+ Log::debug('RIC: Deleting appointment!');
+ $application->appointment()->delete();
+ }
+
+ if (!$application->comments->isEmpty())
+ {
+ Log::debug('RIC: Deleting comments!');
+ foreach($application->comments as $comment)
+ {
+ $comment->delete();
+ }
+ }
+ Log::debug('RIC: Deleting application ' . $application->id);
+ $application->delete();
+
+ }
+ }
+
+ Log::debug('RIC: Cleanup done!');
+ }
+
+ /**
+ * Handle the user "deleted" event.
+ *
+ * @param \App\User $user
+ * @return void
+ */
+ public function deleted(User $user)
+ {
+ //
+ }
+
+ /**
+ * Handle the user "restored" event.
+ *
+ * @param \App\User $user
+ * @return void
+ */
+ public function restored(User $user)
+ {
+ //
+ }
+
+ /**
+ * Handle the user "force deleted" event.
+ *
+ * @param \App\User $user
+ * @return void
+ */
+ public function forceDeleted(User $user)
+ {
+ //
+ }
+}
diff --git a/app/Policies/ApplicationPolicy.php b/app/Policies/ApplicationPolicy.php
new file mode 100644
index 0000000..267c8c8
--- /dev/null
+++ b/app/Policies/ApplicationPolicy.php
@@ -0,0 +1,33 @@
+is($application->user) && $user->can('applications.view.own') || $user->can('applications.view.all'))
+ {
+ return Response::allow();
+ }
+
+ return Response::deny('You are not authorised to view this application');
+ }
+}
diff --git a/app/Policies/ProfilePolicy.php b/app/Policies/ProfilePolicy.php
index 6ecf133..bd3bc01 100644
--- a/app/Policies/ProfilePolicy.php
+++ b/app/Policies/ProfilePolicy.php
@@ -2,6 +2,7 @@
namespace App\Policies;
+use App\Profile;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -16,6 +17,11 @@ class ProfilePolicy
*/
public function __construct()
{
- //
+
+ }
+
+ public function edit(User $user, Profile $profile)
+ {
+ return $user->is($profile->user);
}
}
diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php
new file mode 100644
index 0000000..8c861bc
--- /dev/null
+++ b/app/Policies/UserPolicy.php
@@ -0,0 +1,41 @@
+is($user) || $authUser->hasRole('admin');
+ }
+
+ public function viewStaff(User $user)
+ {
+ return $user->can('admin.stafflist');
+ }
+
+ public function viewPlayers(User $user)
+ {
+ return $user->can('admin.userlist');
+ }
+
+ public function terminate(User $authUser)
+ {
+ return $authUser->hasRole('admin');
+ }
+}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 526f074..8415cad 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,6 +2,8 @@
namespace App\Providers;
+use App\Observers\UserObserver;
+use App\User;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
@@ -25,5 +27,6 @@ class AppServiceProvider extends ServiceProvider
public function boot()
{
Schema::defaultStringLength(191);
+ User::observe(UserObserver::class);
}
}
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
index 3049068..1479cf6 100644
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -2,6 +2,10 @@
namespace App\Providers;
+use App\Http\Controllers\ProfileController;
+use App\Policies\ProfilePolicy;
+use App\Policies\UserPolicy;
+use App\User;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
@@ -14,6 +18,9 @@ class AuthServiceProvider extends ServiceProvider
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
+ 'App\Application' => 'App\Policies\ApplicationPolicy',
+ ProfileController::class => ProfilePolicy::class,
+ User::class => UserPolicy::class
];
/**
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index aadbf86..b2e8019 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -25,6 +25,9 @@ class EventServiceProvider extends ServiceProvider
],
'App\Events\ApplicationDeniedEvent' => [
'App\Listeners\DenyUser'
+ ],
+ 'App\Events\UserBannedEvent' => [
+ 'App\Listeners\OnUserBanned'
]
];
diff --git a/app/Providers/IPInfoProvider.php b/app/Providers/IPInfoProvider.php
new file mode 100644
index 0000000..3b7150a
--- /dev/null
+++ b/app/Providers/IPInfoProvider.php
@@ -0,0 +1,33 @@
+hasOne('App\Form', 'id', 'responseFormID');
diff --git a/app/UUID/UUID.php b/app/UUID/UUID.php
new file mode 100644
index 0000000..815d958
--- /dev/null
+++ b/app/UUID/UUID.php
@@ -0,0 +1,53 @@
+body(), true);
+
+ return $response[0]['id'];
+ }
+
+ // Note: Caching could simply be assigning the username to it's UUID, however, to make this work, we'd need to loop over all cache items, which would be slighly ineffective
+ public function toUsername($uuid)
+ {
+
+ if (is_null($uuid))
+ {
+ throw new \LogicException('Argument uuid for ' . __METHOD__ . ' cannot be null!');
+ }
+
+ $shortUUID = substr($uuid, 0, 8);
+ $username = Cache::remember('uuid_' . $shortUUID, now()->addDays(30), function() use ($shortUUID, $uuid) {
+
+ $response = json_decode(Http::get(config('general.urls.mojang.session') . '/session/minecraft/profile/' . $uuid)->body(), true);
+
+ Log::debug('Caching ' . $shortUUID . 'for thirty days');
+ return $response['name'];
+
+ });
+
+ return $username;
+
+ }
+
+
+}
diff --git a/app/User.php b/app/User.php
index fca985b..c51084c 100644
--- a/app/User.php
+++ b/app/User.php
@@ -5,10 +5,13 @@ namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
+use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use Notifiable;
+ use HasRoles;
+ //use MustVerifyEmail;
/**
* The attributes that are mass assignable.
@@ -37,6 +40,8 @@ class User extends Authenticatable
'email_verified_at' => 'datetime',
];
+
+//
public function applications()
{
return $this->hasMany('App\Application', 'applicantUserID', 'id');
@@ -52,4 +57,33 @@ class User extends Authenticatable
return $this->hasOne('App\Profile', 'userID', 'id');
}
+ public function bans()
+ {
+ return $this->hasOne('App\Ban', 'userID', 'id');
+ }
+
+ public function comments()
+ {
+ return $this->hasMany('App\Comment', 'authorID', 'id');
+ }
+
+
+
+ public function isBanned()
+ {
+ return !$this->bans()->get()->isEmpty();
+ }
+
+
+ public function isStaffMember()
+ {
+ return $this->hasAnyRole('reviewer', 'admin', 'hiringManager');
+ }
+
+
+
+ public function routeNotificationForSlack($notification)
+ {
+ return config('slack.webhook.integrationURL');
+ }
}
diff --git a/composer.json b/composer.json
index 6add0c8..3c5fd2c 100644
--- a/composer.json
+++ b/composer.json
@@ -10,15 +10,18 @@
"require": {
"php": "^7.2.5",
"ext-json": "*",
+ "arcanedev/log-viewer": "^7.0",
"doctrine/dbal": "^2.10",
"fideloper/proxy": "^4.2",
"fruitcake/laravel-cors": "^1.0",
"guzzlehttp/guzzle": "^6.5",
"jeroennoten/laravel-adminlte": "^3.2",
"laravel/framework": "^7.0",
+ "laravel/slack-notification-channel": "^2.0",
"laravel/tinker": "^2.0",
"laravel/ui": "^2.0",
- "sentry/sentry-laravel": "1.7.1"
+ "sentry/sentry-laravel": "1.7.1",
+ "spatie/laravel-permission": "^3.13"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.3",
diff --git a/composer.lock b/composer.lock
index 44e86bd..ffd5909 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "5b9d99142da24c05a4acf15fc66efdae",
+ "content-hash": "fd14fa762c6ac8136b171abd8437e7d7",
"packages": [
{
"name": "almasaeed2010/adminlte",
- "version": "v3.0.4",
+ "version": "v3.0.5",
"source": {
"type": "git",
"url": "https://github.com/ColorlibHQ/AdminLTE.git",
- "reference": "4723bccf4321f28d9ac8ec4f8c64b785e277ba71"
+ "reference": "6b8b69261f1aacbb4be037c934f3c3652e6dff27"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ColorlibHQ/AdminLTE/zipball/4723bccf4321f28d9ac8ec4f8c64b785e277ba71",
- "reference": "4723bccf4321f28d9ac8ec4f8c64b785e277ba71",
+ "url": "https://api.github.com/repos/ColorlibHQ/AdminLTE/zipball/6b8b69261f1aacbb4be037c934f3c3652e6dff27",
+ "reference": "6b8b69261f1aacbb4be037c934f3c3652e6dff27",
"shasum": ""
},
"type": "library",
@@ -43,7 +43,131 @@
"theme",
"web"
],
- "time": "2020-04-01T23:06:25+00:00"
+ "time": "2020-05-19T20:41:11+00:00"
+ },
+ {
+ "name": "arcanedev/log-viewer",
+ "version": "7.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ARCANEDEV/LogViewer.git",
+ "reference": "fd976c90f19e5f2446f7a2d6eeb6c5705cb67178"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ARCANEDEV/LogViewer/zipball/fd976c90f19e5f2446f7a2d6eeb6c5705cb67178",
+ "reference": "fd976c90f19e5f2446f7a2d6eeb6c5705cb67178",
+ "shasum": ""
+ },
+ "require": {
+ "arcanedev/support": "^7.0",
+ "ext-json": "*",
+ "php": "^7.2.5",
+ "psr/log": "^1.0"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^5.0",
+ "phpunit/phpunit": "^8.0|^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Arcanedev\\LogViewer\\LogViewerServiceProvider",
+ "Arcanedev\\LogViewer\\Providers\\DeferredServicesProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Arcanedev\\LogViewer\\": "src/"
+ },
+ "files": [
+ "helpers.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "ARCANEDEV",
+ "email": "arcanedev.maroc@gmail.com",
+ "homepage": "https://github.com/arcanedev-maroc",
+ "role": "Developer"
+ }
+ ],
+ "description": "Provides a Log Viewer for Laravel 5/6",
+ "homepage": "https://github.com/ARCANEDEV/LogViewer",
+ "keywords": [
+ "arcanedev",
+ "arcanesoft",
+ "laravel",
+ "log",
+ "log viewer",
+ "log-viewer",
+ "logviewer"
+ ],
+ "time": "2020-03-04T08:47:57+00:00"
+ },
+ {
+ "name": "arcanedev/support",
+ "version": "7.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ARCANEDEV/Support.git",
+ "reference": "7e4199d30f04c611ba5d895e663f111c217ff5a3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ARCANEDEV/Support/zipball/7e4199d30f04c611ba5d895e663f111c217ff5a3",
+ "reference": "7e4199d30f04c611ba5d895e663f111c217ff5a3",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/filesystem": "^7.0",
+ "illuminate/support": "^7.0",
+ "php": "^7.2.5"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^5.0",
+ "phpunit/phpunit": "^8.0|^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Arcanedev\\Support\\": "src/"
+ },
+ "files": [
+ "helpers.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "ARCANEDEV",
+ "email": "arcanedev.maroc@gmail.com",
+ "homepage": "https://github.com/arcanedev-maroc"
+ }
+ ],
+ "description": "ARCANEDEV Support Helpers",
+ "homepage": "https://github.com/ARCANEDEV/Support",
+ "keywords": [
+ "arcanedev",
+ "arcanesoft",
+ "laravel",
+ "support"
+ ],
+ "time": "2020-03-12T09:28:19+00:00"
},
{
"name": "asm89/stack-cors",
@@ -285,20 +409,20 @@
},
{
"name": "doctrine/cache",
- "version": "1.10.0",
+ "version": "1.10.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
- "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62"
+ "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62",
- "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
+ "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3",
"shasum": ""
},
"require": {
- "php": "~7.1"
+ "php": "~7.1 || ^8.0"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
@@ -363,7 +487,7 @@
"redis",
"xcache"
],
- "time": "2019-11-29T15:36:20+00:00"
+ "time": "2020-05-27T16:24:54+00:00"
},
{
"name": "doctrine/dbal",
@@ -537,33 +661,37 @@
},
{
"name": "doctrine/inflector",
- "version": "1.3.1",
+ "version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1"
+ "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
- "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210",
+ "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^6.2"
+ "doctrine/coding-standard": "^7.0",
+ "phpstan/phpstan": "^0.11",
+ "phpstan/phpstan-phpunit": "^0.11",
+ "phpstan/phpstan-strict-rules": "^0.11",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
- "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
+ "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -592,32 +720,38 @@
"email": "schmittjoh@gmail.com"
}
],
- "description": "Common String Manipulations with regard to casing and singular/plural rules.",
- "homepage": "http://www.doctrine-project.org",
+ "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+ "homepage": "https://www.doctrine-project.org/projects/inflector.html",
"keywords": [
"inflection",
- "pluralize",
- "singularize",
- "string"
+ "inflector",
+ "lowercase",
+ "manipulation",
+ "php",
+ "plural",
+ "singular",
+ "strings",
+ "uppercase",
+ "words"
],
- "time": "2019-10-30T19:59:35+00:00"
+ "time": "2020-05-29T15:13:26+00:00"
},
{
"name": "doctrine/lexer",
- "version": "1.2.0",
+ "version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
- "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6"
+ "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6",
- "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
+ "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
"shasum": ""
},
"require": {
- "php": "^7.2"
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
@@ -662,7 +796,7 @@
"parser",
"php"
],
- "time": "2019-10-30T14:39:59+00:00"
+ "time": "2020-05-25T17:44:05+00:00"
},
{
"name": "dragonmantank/cron-expression",
@@ -832,16 +966,16 @@
},
{
"name": "fruitcake/laravel-cors",
- "version": "v1.0.5",
+ "version": "v1.0.6",
"source": {
"type": "git",
"url": "https://github.com/fruitcake/laravel-cors.git",
- "reference": "0e0500133dbb6325266133dd72f040617c9cdbd0"
+ "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/0e0500133dbb6325266133dd72f040617c9cdbd0",
- "reference": "0e0500133dbb6325266133dd72f040617c9cdbd0",
+ "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/1d127dbec313e2e227d65e0c483765d8d7559bf6",
+ "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6",
"shasum": ""
},
"require": {
@@ -896,20 +1030,20 @@
"crossdomain",
"laravel"
],
- "time": "2020-03-11T21:05:07+00:00"
+ "time": "2020-04-28T08:47:37+00:00"
},
{
"name": "guzzlehttp/guzzle",
- "version": "6.5.3",
+ "version": "6.5.4",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "aab4ebd862aa7d04f01a4b51849d657db56d882e"
+ "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/aab4ebd862aa7d04f01a4b51849d657db56d882e",
- "reference": "aab4ebd862aa7d04f01a4b51849d657db56d882e",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+ "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
"shasum": ""
},
"require": {
@@ -917,7 +1051,7 @@
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.6.1",
"php": ">=5.5",
- "symfony/polyfill-intl-idn": "^1.11"
+ "symfony/polyfill-intl-idn": "1.17.0"
},
"require-dev": {
"ext-curl": "*",
@@ -963,7 +1097,7 @@
"rest",
"web service"
],
- "time": "2020-04-18T10:38:46+00:00"
+ "time": "2020-05-25T19:35:05+00:00"
},
{
"name": "guzzlehttp/promises",
@@ -1190,16 +1324,16 @@
},
{
"name": "jeroennoten/laravel-adminlte",
- "version": "v3.2.0",
+ "version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/jeroennoten/Laravel-AdminLTE.git",
- "reference": "75a48e498e4db5c998cf2a069a22c22ea907c61b"
+ "reference": "d134acd5d3d7d0276f929a10f3ad1cca1293e080"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jeroennoten/Laravel-AdminLTE/zipball/75a48e498e4db5c998cf2a069a22c22ea907c61b",
- "reference": "75a48e498e4db5c998cf2a069a22c22ea907c61b",
+ "url": "https://api.github.com/repos/jeroennoten/Laravel-AdminLTE/zipball/d134acd5d3d7d0276f929a10f3ad1cca1293e080",
+ "reference": "d134acd5d3d7d0276f929a10f3ad1cca1293e080",
"shasum": ""
},
"require": {
@@ -1208,6 +1342,7 @@
"php": ">=7.2.0"
},
"require-dev": {
+ "orchestra/testbench": ">=4.0",
"phpunit/phpunit": "^8.3"
},
"type": "library",
@@ -1240,31 +1375,31 @@
"administrator",
"laravel"
],
- "time": "2020-04-27T15:26:29+00:00"
+ "time": "2020-06-02T20:07:37+00:00"
},
{
"name": "laravel/framework",
- "version": "v7.8.1",
+ "version": "v7.14.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "cdc6d7e6c744f4d8f7d61102aea9b111550cd297"
+ "reference": "469b7719a8dca40841a74f59f2e9f30f01d3a106"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/cdc6d7e6c744f4d8f7d61102aea9b111550cd297",
- "reference": "cdc6d7e6c744f4d8f7d61102aea9b111550cd297",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/469b7719a8dca40841a74f59f2e9f30f01d3a106",
+ "reference": "469b7719a8dca40841a74f59f2e9f30f01d3a106",
"shasum": ""
},
"require": {
- "doctrine/inflector": "^1.1",
+ "doctrine/inflector": "^1.4|^2.0",
"dragonmantank/cron-expression": "^2.0",
"egulias/email-validator": "^2.1.10",
"ext-json": "*",
"ext-mbstring": "*",
"ext-openssl": "*",
"league/commonmark": "^1.3",
- "league/flysystem": "^1.0.8",
+ "league/flysystem": "^1.0.34",
"monolog/monolog": "^2.0",
"nesbot/carbon": "^2.17",
"opis/closure": "^3.1",
@@ -1279,6 +1414,7 @@
"symfony/http-foundation": "^5.0",
"symfony/http-kernel": "^5.0",
"symfony/mime": "^5.0",
+ "symfony/polyfill-php73": "^1.17",
"symfony/process": "^5.0",
"symfony/routing": "^5.0",
"symfony/var-dumper": "^5.0",
@@ -1289,6 +1425,9 @@
"conflict": {
"tightenco/collect": "<5.5.33"
},
+ "provide": {
+ "psr/container-implementation": "1.0"
+ },
"replace": {
"illuminate/auth": "self.version",
"illuminate/broadcasting": "self.version",
@@ -1392,7 +1531,64 @@
"framework",
"laravel"
],
- "time": "2020-04-24T17:21:56+00:00"
+ "time": "2020-06-02T22:34:18+00:00"
+ },
+ {
+ "name": "laravel/slack-notification-channel",
+ "version": "v2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/slack-notification-channel.git",
+ "reference": "ecc90a70791195d6f5e20b2732a5eb1eb9619d10"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/ecc90a70791195d6f5e20b2732a5eb1eb9619d10",
+ "reference": "ecc90a70791195d6f5e20b2732a5eb1eb9619d10",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/guzzle": "^6.0",
+ "illuminate/notifications": "~5.8.0|^6.0|^7.0",
+ "php": "^7.1.3"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^7.0|^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Illuminate\\Notifications\\SlackChannelServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Illuminate\\Notifications\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Slack Notification Channel for laravel.",
+ "keywords": [
+ "laravel",
+ "notifications",
+ "slack"
+ ],
+ "time": "2019-08-27T14:40:26+00:00"
},
{
"name": "laravel/tinker",
@@ -1460,16 +1656,16 @@
},
{
"name": "laravel/ui",
- "version": "v2.0.1",
+ "version": "v2.0.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/ui.git",
- "reference": "47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83"
+ "reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/ui/zipball/47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83",
- "reference": "47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83",
+ "url": "https://api.github.com/repos/laravel/ui/zipball/15368c5328efb7ce94f35ca750acde9b496ab1b1",
+ "reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1",
"shasum": ""
},
"require": {
@@ -1511,20 +1707,20 @@
"laravel",
"ui"
],
- "time": "2020-03-03T20:16:46+00:00"
+ "time": "2020-04-29T15:06:45+00:00"
},
{
"name": "league/commonmark",
- "version": "1.4.2",
+ "version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "9e780d972185e4f737a03bade0fd34a9e67bbf31"
+ "reference": "412639f7cfbc0b31ad2455b2fe965095f66ae505"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/9e780d972185e4f737a03bade0fd34a9e67bbf31",
- "reference": "9e780d972185e4f737a03bade0fd34a9e67bbf31",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/412639f7cfbc0b31ad2455b2fe965095f66ae505",
+ "reference": "412639f7cfbc0b31ad2455b2fe965095f66ae505",
"shasum": ""
},
"require": {
@@ -1585,20 +1781,20 @@
"md",
"parser"
],
- "time": "2020-04-24T13:39:56+00:00"
+ "time": "2020-05-04T22:15:21+00:00"
},
{
"name": "league/flysystem",
- "version": "1.0.67",
+ "version": "1.0.69",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "5b1f36c75c4bdde981294c2a0ebdb437ee6f275e"
+ "reference": "7106f78428a344bc4f643c233a94e48795f10967"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5b1f36c75c4bdde981294c2a0ebdb437ee6f275e",
- "reference": "5b1f36c75c4bdde981294c2a0ebdb437ee6f275e",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967",
+ "reference": "7106f78428a344bc4f643c233a94e48795f10967",
"shasum": ""
},
"require": {
@@ -1669,24 +1865,24 @@
"sftp",
"storage"
],
- "time": "2020-04-16T13:21:26+00:00"
+ "time": "2020-05-18T15:13:39+00:00"
},
{
"name": "monolog/monolog",
- "version": "2.0.2",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8"
+ "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8",
- "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1",
+ "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1",
"shasum": ""
},
"require": {
- "php": "^7.2",
+ "php": ">=7.2",
"psr/log": "^1.0.1"
},
"provide": {
@@ -1697,11 +1893,11 @@
"doctrine/couchdb": "~1.0@dev",
"elasticsearch/elasticsearch": "^6.0",
"graylog2/gelf-php": "^1.4.2",
- "jakub-onderka/php-parallel-lint": "^0.9",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
+ "php-parallel-lint/php-parallel-lint": "^1.0",
"phpspec/prophecy": "^1.6.1",
- "phpunit/phpunit": "^8.3",
+ "phpunit/phpunit": "^8.5",
"predis/predis": "^1.1",
"rollbar/rollbar": "^1.3",
"ruflin/elastica": ">=0.90 <3.0",
@@ -1750,25 +1946,26 @@
"logging",
"psr-3"
],
- "time": "2019-12-20T14:22:59+00:00"
+ "time": "2020-05-22T08:12:19+00:00"
},
{
"name": "nesbot/carbon",
- "version": "2.32.2",
+ "version": "2.35.0",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc"
+ "reference": "4b9bd835261ef23d36397a46a76b496a458305e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f10e22cf546704fab1db4ad4b9dedbc5c797a0dc",
- "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4b9bd835261ef23d36397a46a76b496a458305e5",
+ "reference": "4b9bd835261ef23d36397a46a76b496a458305e5",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": "^7.1.8 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.0",
"symfony/translation": "^3.4 || ^4.0 || ^5.0"
},
"require-dev": {
@@ -1786,7 +1983,8 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.x-dev"
+ "dev-master": "2.x-dev",
+ "dev-3.x": "3.x-dev"
},
"laravel": {
"providers": [
@@ -1821,20 +2019,20 @@
"datetime",
"time"
],
- "time": "2020-03-31T13:43:19+00:00"
+ "time": "2020-05-24T18:27:52+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v4.4.0",
+ "version": "v4.5.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120"
+ "reference": "53c2753d756f5adb586dca79c2ec0e2654dd9463"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120",
- "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/53c2753d756f5adb586dca79c2ec0e2654dd9463",
+ "reference": "53c2753d756f5adb586dca79c2ec0e2654dd9463",
"shasum": ""
},
"require": {
@@ -1873,20 +2071,20 @@
"parser",
"php"
],
- "time": "2020-04-10T16:34:50+00:00"
+ "time": "2020-06-03T07:24:19+00:00"
},
{
"name": "opis/closure",
- "version": "3.5.1",
+ "version": "3.5.3",
"source": {
"type": "git",
"url": "https://github.com/opis/closure.git",
- "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969"
+ "reference": "cac47092144043d5d676e2e7cf8d0d2f83fc89ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/opis/closure/zipball/93ebc5712cdad8d5f489b500c59d122df2e53969",
- "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969",
+ "url": "https://api.github.com/repos/opis/closure/zipball/cac47092144043d5d676e2e7cf8d0d2f83fc89ca",
+ "reference": "cac47092144043d5d676e2e7cf8d0d2f83fc89ca",
"shasum": ""
},
"require": {
@@ -1934,7 +2132,7 @@
"serialization",
"serialize"
],
- "time": "2019-11-29T22:36:02+00:00"
+ "time": "2020-05-25T09:32:45+00:00"
},
{
"name": "paragonie/random_compat",
@@ -2802,16 +3000,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.10.3",
+ "version": "v0.10.4",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "2bde2fa03e05dff0aee834598b951d6fc7c6fe02"
+ "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2bde2fa03e05dff0aee834598b951d6fc7c6fe02",
- "reference": "2bde2fa03e05dff0aee834598b951d6fc7c6fe02",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560",
+ "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560",
"shasum": ""
},
"require": {
@@ -2870,7 +3068,7 @@
"interactive",
"shell"
],
- "time": "2020-04-07T06:44:48+00:00"
+ "time": "2020-05-03T19:32:03+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -3243,6 +3441,74 @@
],
"time": "2020-04-01T10:30:44+00:00"
},
+ {
+ "name": "spatie/laravel-permission",
+ "version": "3.13.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/laravel-permission.git",
+ "reference": "49b8063fbb9ec52ebef98cc6ec527a80d8853141"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/49b8063fbb9ec52ebef98cc6ec527a80d8853141",
+ "reference": "49b8063fbb9ec52ebef98cc6ec527a80d8853141",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/auth": "^5.8|^6.0|^7.0",
+ "illuminate/container": "^5.8|^6.0|^7.0",
+ "illuminate/contracts": "^5.8|^6.0|^7.0",
+ "illuminate/database": "^5.8|^6.0|^7.0",
+ "php": "^7.2.5"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^3.8|^4.0|^5.0",
+ "phpunit/phpunit": "^8.0|^9.0",
+ "predis/predis": "^1.1"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Spatie\\Permission\\PermissionServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Spatie\\Permission\\": "src"
+ },
+ "files": [
+ "src/helpers.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "Permission handling for Laravel 5.8 and up",
+ "homepage": "https://github.com/spatie/laravel-permission",
+ "keywords": [
+ "acl",
+ "laravel",
+ "permission",
+ "permissions",
+ "rbac",
+ "roles",
+ "security",
+ "spatie"
+ ],
+ "time": "2020-05-20T00:31:29+00:00"
+ },
{
"name": "swiftmailer/swiftmailer",
"version": "v6.2.3",
@@ -3307,26 +3573,29 @@
},
{
"name": "symfony/console",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935"
+ "reference": "00bed125812716d09b163f0727ef33bb49bf3448"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
- "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
+ "url": "https://api.github.com/repos/symfony/console/zipball/00bed125812716d09b163f0727ef33bb49bf3448",
+ "reference": "00bed125812716d09b163f0727ef33bb49bf3448",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
+ "php": ">=7.2.5",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php73": "^1.8",
- "symfony/service-contracts": "^1.1|^2"
+ "symfony/polyfill-php80": "^1.15",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/string": "^5.1"
},
"conflict": {
"symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
"symfony/event-dispatcher": "<4.4",
"symfony/lock": "<4.4",
"symfony/process": "<4.4"
@@ -3352,7 +3621,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3379,29 +3648,29 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2020-03-30T11:42:42+00:00"
+ "time": "2020-05-30T20:35:19+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "5f8d5271303dad260692ba73dfa21777d38e124e"
+ "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/5f8d5271303dad260692ba73dfa21777d38e124e",
- "reference": "5f8d5271303dad260692ba73dfa21777d38e124e",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/e544e24472d4c97b2d11ade7caacd446727c6bf9",
+ "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9",
"shasum": ""
},
"require": {
- "php": "^7.2.5"
+ "php": ">=7.2.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3432,35 +3701,83 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2020-03-27T16:56:45+00:00"
+ "time": "2020-05-20T17:43:50+00:00"
},
{
- "name": "symfony/error-handler",
- "version": "v5.0.7",
+ "name": "symfony/deprecation-contracts",
+ "version": "v2.1.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/error-handler.git",
- "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4"
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/949ffc17c3ac3a9f8e6232220e2da33913c04ea4",
- "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337",
+ "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "time": "2020-05-27T08:34:37+00:00"
+ },
+ {
+ "name": "symfony/error-handler",
+ "version": "v5.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/error-handler.git",
+ "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896",
+ "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
"psr/log": "^1.0",
+ "symfony/polyfill-php80": "^1.15",
"symfony/var-dumper": "^4.4|^5.0"
},
"require-dev": {
+ "symfony/deprecation-contracts": "^2.1",
"symfony/http-kernel": "^4.4|^5.0",
"symfony/serializer": "^4.4|^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3487,25 +3804,27 @@
],
"description": "Symfony ErrorHandler Component",
"homepage": "https://symfony.com",
- "time": "2020-03-30T14:14:32+00:00"
+ "time": "2020-05-30T20:35:19+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc"
+ "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc",
- "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc0d059e2e997e79ca34125a52f3e33de4424ac7",
+ "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
- "symfony/event-dispatcher-contracts": "^2"
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1",
+ "symfony/event-dispatcher-contracts": "^2",
+ "symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/dependency-injection": "<4.4"
@@ -3530,7 +3849,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3557,24 +3876,24 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2020-03-27T16:56:45+00:00"
+ "time": "2020-05-20T17:43:50+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v2.0.1",
+ "version": "v2.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "af23c2584d4577d54661c434446fb8fbed6025dd"
+ "reference": "405952c4e90941a17e52ef7489a2bd94870bb290"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd",
- "reference": "af23c2584d4577d54661c434446fb8fbed6025dd",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290",
+ "reference": "405952c4e90941a17e52ef7489a2bd94870bb290",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
+ "php": ">=7.2.5",
"psr/event-dispatcher": "^1"
},
"suggest": {
@@ -3583,7 +3902,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
@@ -3615,29 +3934,29 @@
"interoperability",
"standards"
],
- "time": "2019-11-18T17:27:11+00:00"
+ "time": "2020-05-20T17:43:50+00:00"
},
{
"name": "symfony/finder",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d"
+ "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d",
- "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187",
+ "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187",
"shasum": ""
},
"require": {
- "php": "^7.2.5"
+ "php": ">=7.2.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3664,35 +3983,41 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2020-03-27T16:56:45+00:00"
+ "time": "2020-05-20T17:43:50+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6"
+ "reference": "e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/26fb006a2c7b6cdd23d52157b05f8414ffa417b6",
- "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa",
+ "reference": "e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
- "symfony/mime": "^4.4|^5.0",
- "symfony/polyfill-mbstring": "~1.1"
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1",
+ "symfony/polyfill-mbstring": "~1.1",
+ "symfony/polyfill-php80": "^1.15"
},
"require-dev": {
"predis/predis": "~1.0",
- "symfony/expression-language": "^4.4|^5.0"
+ "symfony/cache": "^4.4|^5.0",
+ "symfony/expression-language": "^4.4|^5.0",
+ "symfony/mime": "^4.4|^5.0"
+ },
+ "suggest": {
+ "symfony/mime": "To use the file extension guesser"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3719,35 +4044,38 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2020-03-30T14:14:32+00:00"
+ "time": "2020-05-24T12:18:07+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "ad574c55d451127cab1c45b4ac51bf283e340cf0"
+ "reference": "75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ad574c55d451127cab1c45b4ac51bf283e340cf0",
- "reference": "ad574c55d451127cab1c45b4ac51bf283e340cf0",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c",
+ "reference": "75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
+ "php": ">=7.2.5",
"psr/log": "~1.0",
+ "symfony/deprecation-contracts": "^2.1",
"symfony/error-handler": "^4.4|^5.0",
"symfony/event-dispatcher": "^5.0",
"symfony/http-foundation": "^4.4|^5.0",
"symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-php73": "^1.9"
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/browser-kit": "<4.4",
"symfony/cache": "<5.0",
"symfony/config": "<5.0",
+ "symfony/console": "<4.4",
"symfony/dependency-injection": "<4.4",
"symfony/doctrine-bridge": "<5.0",
"symfony/form": "<5.0",
@@ -3788,7 +4116,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3815,26 +4143,27 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2020-03-30T15:04:59+00:00"
+ "time": "2020-05-31T06:14:18+00:00"
},
{
"name": "symfony/mime",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "481b7d6da88922fb1e0d86a943987722b08f3955"
+ "reference": "56261f89385f9d13cf843a5101ac72131190bc91"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/481b7d6da88922fb1e0d86a943987722b08f3955",
- "reference": "481b7d6da88922fb1e0d86a943987722b08f3955",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/56261f89385f9d13cf843a5101ac72131190bc91",
+ "reference": "56261f89385f9d13cf843a5101ac72131190bc91",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
+ "php": ">=7.2.5",
"symfony/polyfill-intl-idn": "^1.10",
- "symfony/polyfill-mbstring": "^1.0"
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/mailer": "<4.4"
@@ -3846,7 +4175,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3877,29 +4206,31 @@
"mime",
"mime-type"
],
- "time": "2020-03-27T16:56:45+00:00"
+ "time": "2020-05-25T12:33:44+00:00"
},
{
"name": "symfony/options-resolver",
- "version": "v5.0.8",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1"
+ "reference": "663f5dd5e14057d1954fe721f9709d35837f2447"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3707e3caeff2b797c0bfaadd5eba723dd44e6bf1",
- "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/663f5dd5e14057d1954fe721f9709d35837f2447",
+ "reference": "663f5dd5e14057d1954fe721f9709d35837f2447",
"shasum": ""
},
"require": {
- "php": "^7.2.5"
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1",
+ "symfony/polyfill-php80": "^1.15"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -3931,20 +4262,20 @@
"configuration",
"options"
],
- "time": "2020-04-06T10:40:56+00:00"
+ "time": "2020-05-23T13:08:13+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.15.0",
+ "version": "v1.17.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14"
+ "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
- "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
+ "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
"shasum": ""
},
"require": {
@@ -3956,7 +4287,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.15-dev"
+ "dev-master": "1.17-dev"
}
},
"autoload": {
@@ -3989,20 +4320,20 @@
"polyfill",
"portable"
],
- "time": "2020-02-27T09:26:54+00:00"
+ "time": "2020-05-12T16:14:59+00:00"
},
{
"name": "symfony/polyfill-iconv",
- "version": "v1.15.0",
+ "version": "v1.17.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
- "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8"
+ "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ad6d62792bfbcfc385dd34b424d4fcf9712a32c8",
- "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8",
+ "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424",
+ "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424",
"shasum": ""
},
"require": {
@@ -4014,7 +4345,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.15-dev"
+ "dev-master": "1.17-dev"
}
},
"autoload": {
@@ -4048,20 +4379,80 @@
"portable",
"shim"
],
- "time": "2020-03-09T19:04:49+00:00"
+ "time": "2020-05-12T16:47:27+00:00"
},
{
- "name": "symfony/polyfill-intl-idn",
- "version": "v1.15.0",
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.17.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf"
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf",
- "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e094b0770f7833fdf257e6ba4775be4e258230b2",
+ "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2020-05-12T16:47:27+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-idn",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
+ "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+ "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
"shasum": ""
},
"require": {
@@ -4075,7 +4466,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.15-dev"
+ "dev-master": "1.17-dev"
}
},
"autoload": {
@@ -4110,20 +4501,83 @@
"portable",
"shim"
],
- "time": "2020-03-09T19:04:49+00:00"
+ "time": "2020-05-12T16:47:27+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.15.0",
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.17.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac"
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
- "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/1357b1d168eb7f68ad6a134838e46b0b159444a9",
+ "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2020-05-12T16:14:59+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
+ "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
"shasum": ""
},
"require": {
@@ -4135,7 +4589,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.15-dev"
+ "dev-master": "1.17-dev"
}
},
"autoload": {
@@ -4169,20 +4623,20 @@
"portable",
"shim"
],
- "time": "2020-03-09T19:04:49+00:00"
+ "time": "2020-05-12T16:47:27+00:00"
},
{
"name": "symfony/polyfill-php72",
- "version": "v1.15.0",
+ "version": "v1.17.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "37b0976c78b94856543260ce09b460a7bc852747"
+ "reference": "f048e612a3905f34931127360bdd2def19a5e582"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747",
- "reference": "37b0976c78b94856543260ce09b460a7bc852747",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
+ "reference": "f048e612a3905f34931127360bdd2def19a5e582",
"shasum": ""
},
"require": {
@@ -4191,7 +4645,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.15-dev"
+ "dev-master": "1.17-dev"
}
},
"autoload": {
@@ -4224,20 +4678,20 @@
"portable",
"shim"
],
- "time": "2020-02-27T09:26:54+00:00"
+ "time": "2020-05-12T16:47:27+00:00"
},
{
"name": "symfony/polyfill-php73",
- "version": "v1.15.0",
+ "version": "v1.17.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7"
+ "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
- "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc",
+ "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc",
"shasum": ""
},
"require": {
@@ -4246,7 +4700,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.15-dev"
+ "dev-master": "1.17-dev"
}
},
"autoload": {
@@ -4282,7 +4736,69 @@
"portable",
"shim"
],
- "time": "2020-02-27T09:26:54+00:00"
+ "time": "2020-05-12T16:47:27+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/5e30b2799bc1ad68f7feb62b60a73743589438dd",
+ "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2020-05-12T16:47:27+00:00"
},
{
"name": "symfony/polyfill-uuid",
@@ -4345,25 +4861,26 @@
},
{
"name": "symfony/process",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e"
+ "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e",
- "reference": "c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e",
+ "url": "https://api.github.com/repos/symfony/process/zipball/7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1",
+ "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1",
"shasum": ""
},
"require": {
- "php": "^7.2.5"
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.15"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -4390,24 +4907,26 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2020-03-27T16:56:45+00:00"
+ "time": "2020-05-30T20:35:19+00:00"
},
{
"name": "symfony/routing",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "d98a95d0a684caba47a47c1c50c602a669dc973b"
+ "reference": "95cf30145b26c758d6d832aa2d0de3128978d556"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/d98a95d0a684caba47a47c1c50c602a669dc973b",
- "reference": "d98a95d0a684caba47a47c1c50c602a669dc973b",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/95cf30145b26c758d6d832aa2d0de3128978d556",
+ "reference": "95cf30145b26c758d6d832aa2d0de3128978d556",
"shasum": ""
},
"require": {
- "php": "^7.2.5"
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1",
+ "symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/config": "<5.0",
@@ -4433,7 +4952,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -4466,24 +4985,24 @@
"uri",
"url"
],
- "time": "2020-03-30T11:42:42+00:00"
+ "time": "2020-05-30T20:35:19+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v2.0.1",
+ "version": "v2.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "144c5e51266b281231e947b51223ba14acf1a749"
+ "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
- "reference": "144c5e51266b281231e947b51223ba14acf1a749",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b",
+ "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
+ "php": ">=7.2.5",
"psr/container": "^1.0"
},
"suggest": {
@@ -4492,7 +5011,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
@@ -4524,25 +5043,97 @@
"interoperability",
"standards"
],
- "time": "2019-11-18T17:27:11+00:00"
+ "time": "2020-05-20T17:43:50+00:00"
},
{
- "name": "symfony/translation",
- "version": "v5.0.7",
+ "name": "symfony/string",
+ "version": "v5.1.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/translation.git",
- "reference": "99b831770e10807dca0979518e2c89edffef5978"
+ "url": "https://github.com/symfony/string.git",
+ "reference": "90c2a5103f07feb19069379f3abdcdbacc7753a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/99b831770e10807dca0979518e2c89edffef5978",
- "reference": "99b831770e10807dca0979518e2c89edffef5978",
+ "url": "https://api.github.com/repos/symfony/string/zipball/90c2a5103f07feb19069379f3abdcdbacc7753a9",
+ "reference": "90c2a5103f07feb19069379f3abdcdbacc7753a9",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
"symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "~1.15"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^4.4|^5.0",
+ "symfony/http-client": "^4.4|^5.0",
+ "symfony/translation-contracts": "^1.1|^2",
+ "symfony/var-exporter": "^4.4|^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "files": [
+ "Resources/functions.php"
+ ],
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony String component",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "time": "2020-05-20T17:43:50+00:00"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v5.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2",
+ "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.15",
"symfony/translation-contracts": "^2"
},
"conflict": {
@@ -4574,7 +5165,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -4601,24 +5192,24 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2020-03-27T16:56:45+00:00"
+ "time": "2020-05-30T20:35:19+00:00"
},
{
"name": "symfony/translation-contracts",
- "version": "v2.0.1",
+ "version": "v2.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed"
+ "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed",
- "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e",
+ "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e",
"shasum": ""
},
"require": {
- "php": "^7.2.5"
+ "php": ">=7.2.5"
},
"suggest": {
"symfony/translation-implementation": ""
@@ -4626,7 +5217,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
@@ -4658,25 +5249,26 @@
"interoperability",
"standards"
],
- "time": "2019-11-18T17:27:11+00:00"
+ "time": "2020-05-20T17:43:50+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v5.0.7",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "f74a126acd701392eef2492a17228d42552c86b5"
+ "reference": "46a942903059b0b05e601f00eb64179e05578c0f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f74a126acd701392eef2492a17228d42552c86b5",
- "reference": "f74a126acd701392eef2492a17228d42552c86b5",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/46a942903059b0b05e601f00eb64179e05578c0f",
+ "reference": "46a942903059b0b05e601f00eb64179e05578c0f",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
- "symfony/polyfill-mbstring": "~1.0"
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.15"
},
"conflict": {
"phpunit/phpunit": "<5.4.3",
@@ -4699,7 +5291,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -4733,7 +5325,7 @@
"debug",
"dump"
],
- "time": "2020-03-27T16:56:45+00:00"
+ "time": "2020-05-30T20:35:19+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -4786,20 +5378,20 @@
},
{
"name": "vlucas/phpdotenv",
- "version": "v4.1.4",
+ "version": "v4.1.6",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "feb6dad5ae24b1380827aee1629b730080fde500"
+ "reference": "0b32505d67c1abbfa829283c86bfc0642a661bf6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/feb6dad5ae24b1380827aee1629b730080fde500",
- "reference": "feb6dad5ae24b1380827aee1629b730080fde500",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0b32505d67c1abbfa829283c86bfc0642a661bf6",
+ "reference": "0b32505d67c1abbfa829283c86bfc0642a661bf6",
"shasum": ""
},
"require": {
- "php": "^5.5.9 || ^7.0",
+ "php": "^5.5.9 || ^7.0 || ^8.0",
"phpoption/phpoption": "^1.7.2",
"symfony/polyfill-ctype": "^1.9"
},
@@ -4846,20 +5438,20 @@
"env",
"environment"
],
- "time": "2020-04-12T15:20:09+00:00"
+ "time": "2020-05-23T09:43:32+00:00"
},
{
"name": "voku/portable-ascii",
- "version": "1.4.10",
+ "version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/voku/portable-ascii.git",
- "reference": "240e93829a5f985fab0984a6e55ae5e26b78a334"
+ "reference": "e7f9bd5deff09a57318f9b900ab33a05acfcf4d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/voku/portable-ascii/zipball/240e93829a5f985fab0984a6e55ae5e26b78a334",
- "reference": "240e93829a5f985fab0984a6e55ae5e26b78a334",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/e7f9bd5deff09a57318f9b900ab33a05acfcf4d3",
+ "reference": "e7f9bd5deff09a57318f9b900ab33a05acfcf4d3",
"shasum": ""
},
"require": {
@@ -4874,8 +5466,7 @@
"type": "library",
"autoload": {
"psr-4": {
- "voku\\": "src/voku/",
- "voku\\tests\\": "tests/"
+ "voku\\": "src/voku/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4895,7 +5486,7 @@
"clean",
"php"
],
- "time": "2020-03-13T01:23:26+00:00"
+ "time": "2020-05-26T06:40:44+00:00"
}
],
"packages-dev": [
@@ -4969,20 +5560,20 @@
},
{
"name": "doctrine/instantiator",
- "version": "1.3.0",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
- "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
+ "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
- "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+ "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
@@ -5021,7 +5612,7 @@
"constructor",
"instantiate"
],
- "time": "2019-10-21T16:45:58+00:00"
+ "time": "2020-05-29T17:27:14+00:00"
},
{
"name": "facade/flare-client-php",
@@ -5079,16 +5670,16 @@
},
{
"name": "facade/ignition",
- "version": "2.0.2",
+ "version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/facade/ignition.git",
- "reference": "67f1677954ad33ca6b77f2c41cf43a58624f27fc"
+ "reference": "5261c488a1e8a7c3ebdf6a4037c34f5ddeb33922"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/facade/ignition/zipball/67f1677954ad33ca6b77f2c41cf43a58624f27fc",
- "reference": "67f1677954ad33ca6b77f2c41cf43a58624f27fc",
+ "url": "https://api.github.com/repos/facade/ignition/zipball/5261c488a1e8a7c3ebdf6a4037c34f5ddeb33922",
+ "reference": "5261c488a1e8a7c3ebdf6a4037c34f5ddeb33922",
"shasum": ""
},
"require": {
@@ -5097,7 +5688,7 @@
"facade/flare-client-php": "^1.0",
"facade/ignition-contracts": "^1.0",
"filp/whoops": "^2.4",
- "illuminate/support": "^7.0",
+ "illuminate/support": "^7.0|^8.0",
"monolog/monolog": "^2.0",
"php": "^7.2.5",
"scrivo/highlight.php": "^9.15",
@@ -5146,7 +5737,7 @@
"laravel",
"page"
],
- "time": "2020-03-18T19:20:44+00:00"
+ "time": "2020-06-01T09:04:48+00:00"
},
{
"name": "facade/ignition-contracts",
@@ -5194,16 +5785,16 @@
},
{
"name": "filp/whoops",
- "version": "2.7.1",
+ "version": "2.7.2",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130"
+ "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130",
- "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/17d0d3f266c8f925ebd035cd36f83cf802b47d4a",
+ "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a",
"shasum": ""
},
"require": {
@@ -5251,7 +5842,7 @@
"throwable",
"whoops"
],
- "time": "2020-01-15T10:00:00+00:00"
+ "time": "2020-05-05T12:28:07+00:00"
},
{
"name": "fzaninotto/faker",
@@ -5414,30 +6005,33 @@
},
{
"name": "mockery/mockery",
- "version": "1.3.1",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
- "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be"
+ "reference": "6c6a7c533469873deacf998237e7649fc6b36223"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
- "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/6c6a7c533469873deacf998237e7649fc6b36223",
+ "reference": "6c6a7c533469873deacf998237e7649fc6b36223",
"shasum": ""
},
"require": {
"hamcrest/hamcrest-php": "~2.0",
"lib-pcre": ">=7.0",
- "php": ">=5.6.0"
+ "php": "^7.3.0"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<8.0"
},
"require-dev": {
- "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0"
+ "phpunit/phpunit": "^8.0.0 || ^9.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "1.4.x-dev"
}
},
"autoload": {
@@ -5475,7 +6069,7 @@
"test double",
"testing"
],
- "time": "2019-12-26T09:49:15+00:00"
+ "time": "2020-05-19T14:25:16+00:00"
},
{
"name": "myclabs/deep-copy",
@@ -6162,16 +6756,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "8.5.4",
+ "version": "8.5.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "8474e22d7d642f665084ba5ec780626cbd1efd23"
+ "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8474e22d7d642f665084ba5ec780626cbd1efd23",
- "reference": "8474e22d7d642f665084ba5ec780626cbd1efd23",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/63dda3b212a0025d380a745f91bdb4d8c985adb7",
+ "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7",
"shasum": ""
},
"require": {
@@ -6241,7 +6835,7 @@
"testing",
"xunit"
],
- "time": "2020-04-23T04:39:42+00:00"
+ "time": "2020-05-22T13:51:52+00:00"
},
{
"name": "scrivo/highlight.php",
@@ -6929,21 +7523,22 @@
},
{
"name": "symfony/debug",
- "version": "v4.4.8",
+ "version": "v4.4.9",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "346636d2cae417992ecfd761979b2ab98b339a45"
+ "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/346636d2cae417992ecfd761979b2ab98b339a45",
- "reference": "346636d2cae417992ecfd761979b2ab98b339a45",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/28f92d08bb6d1fddf8158e02c194ad43870007e6",
+ "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
- "psr/log": "~1.0"
+ "php": ">=7.1.3",
+ "psr/log": "~1.0",
+ "symfony/polyfill-php80": "^1.15"
},
"conflict": {
"symfony/http-kernel": "<3.4"
@@ -6981,7 +7576,7 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2020-03-27T16:54:36+00:00"
+ "time": "2020-05-24T08:33:35+00:00"
},
{
"name": "theseer/tokenizer",
diff --git a/config/adminlte.php b/config/adminlte.php
index c940108..dc4d3bb 100644
--- a/config/adminlte.php
+++ b/config/adminlte.php
@@ -45,12 +45,12 @@ return [
|
*/
- 'logo' => 'AdminLTE',
- 'logo_img' => 'vendor/adminlte/dist/img/AdminLTELogo.png',
+ 'logo' => 'RaspberryNet Staff',
+ 'logo_img' => 'https://www.raspberrypi.org/app/uploads/2020/05/Raspberry-Pi-OS-downloads-image-150x150-1.png',
'logo_img_class' => 'brand-image img-circle elevation-3',
'logo_img_xl' => null,
'logo_img_xl_class' => 'brand-image-xs',
- 'logo_img_alt' => 'AdminLTE',
+ 'logo_img_alt' => 'Raspberry Network Staff Temporary Logo',
/*
|--------------------------------------------------------------------------
@@ -208,10 +208,14 @@ return [
*/
'menu' => [
- 'Applications',
+ [
+ 'header' => 'Applications',
+ 'can' => 'applications.view.own'
+ ],
[
'text' => 'My Applications',
'icon' => 'fas fa-fw fa-list-ul',
+ 'can' => 'applications.view.own',
'submenu' => [
[
'text' => 'Current Applications',
@@ -232,36 +236,54 @@ return [
'icon' => 'fas fa-user-circle',
'url' => '/profile/settings/account'
],
- 'Application Management',
+ [
+ 'header' => 'Application Management',
+ 'can' => ['applications.view.all', 'applications.vote']
+ ],
[
'text' => 'Outstanding Applications',
'url' => '/applications/staff/outstanding',
- 'icon' => 'far fa-folder-open'
+ 'icon' => 'far fa-folder-open',
+ 'can' => 'applications.view.all'
],
[
'text' => 'Interview Queue',
'url' => '/applications/staff/pending-interview',
- 'icon' => 'fas fa-fw fa-microphone-alt'
+ 'icon' => 'fas fa-fw fa-microphone-alt',
+ 'can' => 'applications.view.all'
],
[
'text' => 'Peer Approval Queue',
'url' => '/applications/staff/peer-review',
- 'icon' => 'fas fa-fw fa-search'
+ 'icon' => 'fas fa-fw fa-search',
+ 'can' => 'applications.view.all'
+ ],
+ [
+ 'header' => 'Administration',
+ 'can' => [ // may need to be modified
+ 'admin.hiring.*',
+ 'admin.userlist',
+ 'admin.stafflist',
+ 'admin.hiring.*',
+ 'admin.notificationsettings.*'
+ ]
],
- 'Administration',
[
'text' => 'Staff Members',
'icon' => 'fas fa-fw fa-users',
- 'url' => '/hr/staff-members'
+ 'url' => '/hr/staff-members',
+ 'can' => 'admin.stafflist'
],
[ // players who haven't been promoted yet
'text' => 'Registered Players',
'icon' => 'fas fa-fw fa-user-friends',
- 'url' => '/hr/players'
+ 'url' => '/hr/players',
+ 'can' => 'admin.userlist'
],
[
'text' => 'Hiring Management',
'icon' => 'far fa-calendar-plus',
+ 'can' => 'admin.hiring.*',
'submenu' => [
[
'text' => 'Open Positions',
@@ -289,23 +311,27 @@ return [
[
'text' => 'App Settings',
'icon' => 'fas fa-fw fa-cog',
+ 'can' => 'admin.notificationsettings',
'submenu' => [
[
'text' => 'Global Notification Settings',
'icon' => 'far fa-bell',
- 'url' => '/admin/notifications'
+ 'url' => '/admin/notifications',
+ 'can' => 'admin.notificationsettings.edit'
],
[
'text' => 'Developer Tools',
'icon' => 'fas fa-code',
- 'url' => '/admin/devtools'
- ]
+ 'url' => '/admin/devtools',
+ 'can' => 'admin.developertools.use'
+ ]
]
],
[
- 'text' => 'Activity Logs',
- 'url' => '/admin/logs',
- 'icon' => 'fas fa-clipboard-list'
+ 'text' => 'System Logs',
+ 'url' => '/admin/maintenance/system-logs',
+ 'icon' => 'fas fa-clipboard-list',
+ 'can' => 'admin.maintenance.logs.view'
]
],
diff --git a/config/app.php b/config/app.php
index f096c29..7b466ca 100644
--- a/config/app.php
+++ b/config/app.php
@@ -171,6 +171,8 @@ return [
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
+ App\Providers\UUIDConversionProvider::class,
+ App\Providers\IPInfoProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
@@ -227,6 +229,8 @@ return [
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
+ 'UUID' => App\Facades\UUID::class,
+ 'IP' => App\Facades\IP::class
],
diff --git a/config/general.php b/config/general.php
index a1943ad..7749c97 100644
--- a/config/general.php
+++ b/config/general.php
@@ -8,9 +8,20 @@ return [
'mojang' => [
'statuscheck' => env('MOJANG_STATUS_URL') ?? 'https://status.mojang.com/check',
- 'api' => env('MOJANG_API_URL') ?? ' https://api.mojang.com'
+ 'api' => env('MOJANG_API_URL') ?? ' https://api.mojang.com',
+ 'session' => env('MOJANG_SESSIONAPI_URL') ?? 'https://sessionserver.mojang.com'
+ ],
+ 'ipapi' => [
+ 'ipcheck' => env('IPGEO_API_URL') ?? 'https://api.ipgeolocation.io/ipgeo'
]
+ ],
+ 'keys' => [
+
+ 'ipapi' => [
+ 'apikey' => env('IPGEO_API_KEY')
+ ]
+
]
];
diff --git a/config/log-viewer.php b/config/log-viewer.php
new file mode 100644
index 0000000..b0532ba
--- /dev/null
+++ b/config/log-viewer.php
@@ -0,0 +1,141 @@
+ storage_path('logs'),
+
+ /* -----------------------------------------------------------------
+ | Log files pattern
+ | -----------------------------------------------------------------
+ */
+
+ 'pattern' => [
+ 'prefix' => Filesystem::PATTERN_PREFIX, // 'laravel-'
+ 'date' => Filesystem::PATTERN_DATE, // '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
+ 'extension' => Filesystem::PATTERN_EXTENSION, // '.log'
+ ],
+
+ /* -----------------------------------------------------------------
+ | Locale
+ | -----------------------------------------------------------------
+ | Supported locales :
+ | 'auto', 'ar', 'bg', 'de', 'en', 'es', 'et', 'fa', 'fr', 'hu', 'hy', 'id', 'it', 'ja', 'ko', 'nl',
+ | 'pl', 'pt-BR', 'ro', 'ru', 'sv', 'th', 'tr', 'zh-TW', 'zh'
+ */
+
+ 'locale' => 'auto',
+
+ /* -----------------------------------------------------------------
+ | Theme
+ | -----------------------------------------------------------------
+ | Supported themes :
+ | 'bootstrap-3', 'bootstrap-4'
+ | Make your own theme by adding a folder to the views directory and specifying it here.
+ */
+
+ 'theme' => 'bootstrap-4',
+
+ /* -----------------------------------------------------------------
+ | Route settings
+ | -----------------------------------------------------------------
+ */
+
+ 'route' => [
+ 'enabled' => true,
+
+ 'attributes' => [
+ 'prefix' => 'admin/maintenance/system-logs',
+
+ 'middleware' => env('ARCANEDEV_LOGVIEWER_MIDDLEWARE') ? explode(',', env('ARCANEDEV_LOGVIEWER_MIDDLEWARE')) : null,
+ ],
+ ],
+
+ /* -----------------------------------------------------------------
+ | Log entries per page
+ | -----------------------------------------------------------------
+ | This defines how many logs & entries are displayed per page.
+ */
+
+ 'per-page' => 30,
+
+ /* -----------------------------------------------------------------
+ | Download settings
+ | -----------------------------------------------------------------
+ */
+
+ 'download' => [
+ 'prefix' => 'rpnetlog-',
+
+ 'extension' => 'log',
+ ],
+
+ /* -----------------------------------------------------------------
+ | Menu settings
+ | -----------------------------------------------------------------
+ */
+
+ 'menu' => [
+ 'filter-route' => 'log-viewer::logs.filter',
+
+ 'icons-enabled' => true,
+ ],
+
+ /* -----------------------------------------------------------------
+ | Icons
+ | -----------------------------------------------------------------
+ */
+
+ 'icons' => [
+ /**
+ * Font awesome >= 4.3
+ * http://fontawesome.io/icons/
+ */
+ 'all' => 'fa fa-fw fa-list', // http://fontawesome.io/icon/list/
+ 'emergency' => 'fa fa-fw fa-bug', // http://fontawesome.io/icon/bug/
+ 'alert' => 'fa fa-fw fa-bullhorn', // http://fontawesome.io/icon/bullhorn/
+ 'critical' => 'fa fa-fw fa-heartbeat', // http://fontawesome.io/icon/heartbeat/
+ 'error' => 'fa fa-fw fa-times-circle', // http://fontawesome.io/icon/times-circle/
+ 'warning' => 'fa fa-fw fa-exclamation-triangle', // http://fontawesome.io/icon/exclamation-triangle/
+ 'notice' => 'fa fa-fw fa-exclamation-circle', // http://fontawesome.io/icon/exclamation-circle/
+ 'info' => 'fa fa-fw fa-info-circle', // http://fontawesome.io/icon/info-circle/
+ 'debug' => 'fa fa-fw fa-life-ring', // http://fontawesome.io/icon/life-ring/
+ ],
+
+ /* -----------------------------------------------------------------
+ | Colors
+ | -----------------------------------------------------------------
+ */
+
+ 'colors' => [
+ 'levels' => [
+ 'empty' => '#D1D1D1',
+ 'all' => '#8A8A8A',
+ 'emergency' => '#B71C1C',
+ 'alert' => '#D32F2F',
+ 'critical' => '#F44336',
+ 'error' => '#FF5722',
+ 'warning' => '#FF9100',
+ 'notice' => '#4CAF50',
+ 'info' => '#1976D2',
+ 'debug' => '#90CAF9',
+ ],
+ ],
+
+ /* -----------------------------------------------------------------
+ | Strings to highlight in stack trace
+ | -----------------------------------------------------------------
+ */
+
+ 'highlight' => [
+ '^#\d+',
+ '^Stack trace:',
+ ],
+
+];
diff --git a/config/notification.php b/config/notification.php
new file mode 100644
index 0000000..8f3da66
--- /dev/null
+++ b/config/notification.php
@@ -0,0 +1,12 @@
+ [
+
+ 'address' => 'teams@spacejewel-hosting.com',
+ 'name' => 'RaspberryNet Teams'
+
+ ]
+
+];
diff --git a/config/permission.php b/config/permission.php
new file mode 100644
index 0000000..d4a7764
--- /dev/null
+++ b/config/permission.php
@@ -0,0 +1,143 @@
+ [
+
+ /*
+ * When using the "HasPermissions" trait from this package, we need to know which
+ * Eloquent model should be used to retrieve your permissions. Of course, it
+ * is often just the "Permission" model but you may use whatever you like.
+ *
+ * The model you want to use as a Permission model needs to implement the
+ * `Spatie\Permission\Contracts\Permission` contract.
+ */
+
+ 'permission' => Spatie\Permission\Models\Permission::class,
+
+ /*
+ * When using the "HasRoles" trait from this package, we need to know which
+ * Eloquent model should be used to retrieve your roles. Of course, it
+ * is often just the "Role" model but you may use whatever you like.
+ *
+ * The model you want to use as a Role model needs to implement the
+ * `Spatie\Permission\Contracts\Role` contract.
+ */
+
+ 'role' => Spatie\Permission\Models\Role::class,
+
+ ],
+
+ 'table_names' => [
+
+ /*
+ * When using the "HasRoles" trait from this package, we need to know which
+ * table should be used to retrieve your roles. We have chosen a basic
+ * default value but you may easily change it to any table you like.
+ */
+
+ 'roles' => 'roles',
+
+ /*
+ * When using the "HasPermissions" trait from this package, we need to know which
+ * table should be used to retrieve your permissions. We have chosen a basic
+ * default value but you may easily change it to any table you like.
+ */
+
+ 'permissions' => 'permissions',
+
+ /*
+ * When using the "HasPermissions" trait from this package, we need to know which
+ * table should be used to retrieve your models permissions. We have chosen a
+ * basic default value but you may easily change it to any table you like.
+ */
+
+ 'model_has_permissions' => 'model_has_permissions',
+
+ /*
+ * When using the "HasRoles" trait from this package, we need to know which
+ * table should be used to retrieve your models roles. We have chosen a
+ * basic default value but you may easily change it to any table you like.
+ */
+
+ 'model_has_roles' => 'model_has_roles',
+
+ /*
+ * When using the "HasRoles" trait from this package, we need to know which
+ * table should be used to retrieve your roles permissions. We have chosen a
+ * basic default value but you may easily change it to any table you like.
+ */
+
+ 'role_has_permissions' => 'role_has_permissions',
+ ],
+
+ 'column_names' => [
+
+ /*
+ * Change this if you want to name the related model primary key other than
+ * `model_id`.
+ *
+ * For example, this would be nice if your primary keys are all UUIDs. In
+ * that case, name this `model_uuid`.
+ */
+
+ 'model_morph_key' => 'model_id',
+ ],
+
+ /*
+ * When set to true, the required permission names are added to the exception
+ * message. This could be considered an information leak in some contexts, so
+ * the default setting is false here for optimum safety.
+ */
+
+ 'display_permission_in_exception' => false,
+
+ /*
+ * When set to true, the required role names are added to the exception
+ * message. This could be considered an information leak in some contexts, so
+ * the default setting is false here for optimum safety.
+ */
+
+ 'display_role_in_exception' => false,
+
+ /*
+ * By default wildcard permission lookups are disabled.
+ */
+
+ 'enable_wildcard_permission' => true,
+
+ 'cache' => [
+
+ /*
+ * By default all permissions are cached for 24 hours to speed up performance.
+ * When permissions or roles are updated the cache is flushed automatically.
+ */
+
+ 'expiration_time' => \DateInterval::createFromDateString('24 hours'),
+
+ /*
+ * The cache key used to store all permissions.
+ */
+
+ 'key' => 'spatie.permission.cache',
+
+ /*
+ * When checking for a permission against a model by passing a Permission
+ * instance to the check, this key determines what attribute on the
+ * Permissions model is used to cache against.
+ *
+ * Ideally, this should match your preferred way of checking permissions, eg:
+ * `$user->can('view-posts')` would be 'name'.
+ */
+
+ 'model_key' => 'name',
+
+ /*
+ * You may optionally indicate a specific cache driver to use for permission and
+ * role caching using any of the `store` drivers listed in the cache.php config
+ * file. Using 'default' here means to use the `default` set in cache.php.
+ */
+
+ 'store' => 'default',
+ ],
+];
diff --git a/config/slack.php b/config/slack.php
new file mode 100644
index 0000000..2651cc4
--- /dev/null
+++ b/config/slack.php
@@ -0,0 +1,12 @@
+ [
+
+ 'integrationURL' => env('SLACK_INTEGRATION_WEBHOOK')
+
+ ]
+
+
+];
diff --git a/database/migrations/2020_04_29_022245_create_profiles_table.php b/database/migrations/2020_04_29_022245_create_profiles_table.php
index 17d195e..b3ac735 100644
--- a/database/migrations/2020_04_29_022245_create_profiles_table.php
+++ b/database/migrations/2020_04_29_022245_create_profiles_table.php
@@ -27,8 +27,7 @@ class CreateProfilesTable extends Migration
$table->foreign('userID')
->references('id')
- ->on('users')
- ->onDelete('cascade');
+ ->on('users');
});
}
diff --git a/database/migrations/2020_04_29_022402_create_applications_table.php b/database/migrations/2020_04_29_022402_create_applications_table.php
index 2bb439a..3074f8e 100644
--- a/database/migrations/2020_04_29_022402_create_applications_table.php
+++ b/database/migrations/2020_04_29_022402_create_applications_table.php
@@ -31,6 +31,10 @@ class CreateApplicationsTable extends Migration
'DENIED'
])->default('STAGE_SUBMITTED');
$table->timestamps();
+
+ $table->foreign('applicantUserID')
+ ->references('id')
+ ->on('users');
});
}
diff --git a/database/migrations/2020_04_29_022421_create_votes_table.php b/database/migrations/2020_04_29_022421_create_votes_table.php
index 6c72fc6..9062e22 100644
--- a/database/migrations/2020_04_29_022421_create_votes_table.php
+++ b/database/migrations/2020_04_29_022421_create_votes_table.php
@@ -22,7 +22,9 @@ class CreateVotesTable extends Migration
]);
$table->timestamps();
- $table->foreign('userID')->references('id')->on('users');
+ $table->foreign('userID')
+ ->references('id')
+ ->on('users');
});
}
diff --git a/database/migrations/2020_04_29_022442_create_appointments_table.php b/database/migrations/2020_04_29_022442_create_appointments_table.php
index f59ec51..77cce6e 100644
--- a/database/migrations/2020_04_29_022442_create_appointments_table.php
+++ b/database/migrations/2020_04_29_022442_create_appointments_table.php
@@ -32,6 +32,10 @@ class CreateAppointmentsTable extends Migration
$table->boolean('userAccepted')->default(false);
$table->longText('meetingNotes')->nullable();
$table->timestamps();
+
+ $table->foreign('applicationID')
+ ->references('id')
+ ->on('applications');
});
}
diff --git a/database/migrations/2020_04_29_022542_create_vacancies_table.php b/database/migrations/2020_04_29_022542_create_vacancies_table.php
index b14c0cd..dfa3aa0 100644
--- a/database/migrations/2020_04_29_022542_create_vacancies_table.php
+++ b/database/migrations/2020_04_29_022542_create_vacancies_table.php
@@ -23,7 +23,10 @@ class CreateVacanciesTable extends Migration
$table->integer('vacancyCount')->default(3);
$table->timestamps();
- $table->foreign('vacancyFormID')->references('id')->on('forms');
+ $table->foreign('vacancyFormID')
+ ->references('id')
+ ->on('forms');
+
});
}
diff --git a/database/migrations/2020_04_29_023647_create_staff_profiles_table.php b/database/migrations/2020_04_29_023647_create_staff_profiles_table.php
index 38302f6..352dbca 100644
--- a/database/migrations/2020_04_29_023647_create_staff_profiles_table.php
+++ b/database/migrations/2020_04_29_023647_create_staff_profiles_table.php
@@ -21,6 +21,10 @@ class CreateStaffProfilesTable extends Migration
$table->dateTime('resignationDate')->nullable();
$table->text('memberNotes')->nullable();
$table->timestamps();
+
+ $table->foreign('userID')
+ ->references('id')
+ ->on('users');
});
}
diff --git a/database/migrations/2020_04_29_030107_create_responses_table.php b/database/migrations/2020_04_29_030107_create_responses_table.php
index acd549d..35ea926 100644
--- a/database/migrations/2020_04_29_030107_create_responses_table.php
+++ b/database/migrations/2020_04_29_030107_create_responses_table.php
@@ -18,6 +18,12 @@ class CreateResponsesTable extends Migration
$table->bigInteger('responseFormID')->unsigned();
$table->longText('responseData');
$table->timestamps();
+
+ // A better way would be to link responses directly to vacancies, that subsquently have a form
+ $table->foreign('responseFormID')
+ ->references('id')
+ ->on('forms');
+
});
}
diff --git a/database/migrations/2020_05_14_004542_change_form_structure_length.php b/database/migrations/2020_05_14_004542_change_form_structure_length.php
index e8bc79f..9ba0006 100644
--- a/database/migrations/2020_05_14_004542_change_form_structure_length.php
+++ b/database/migrations/2020_05_14_004542_change_form_structure_length.php
@@ -25,8 +25,5 @@ class ChangeFormStructureLength extends Migration
*/
public function down()
{
- Schema::table('forms', function (Blueprint $schema){
- $schema->string('formStructure')->change();
- });
}
}
diff --git a/database/migrations/2020_05_29_234431_create_permission_tables.php b/database/migrations/2020_05_29_234431_create_permission_tables.php
new file mode 100644
index 0000000..3f9448d
--- /dev/null
+++ b/database/migrations/2020_05_29_234431_create_permission_tables.php
@@ -0,0 +1,110 @@
+bigIncrements('id');
+ $table->string('name');
+ $table->string('guard_name');
+ $table->timestamps();
+ });
+
+ Schema::create($tableNames['roles'], function (Blueprint $table) {
+ $table->bigIncrements('id');
+ $table->string('name');
+ $table->string('guard_name');
+ $table->timestamps();
+ });
+
+ Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames) {
+ $table->unsignedBigInteger('permission_id');
+
+ $table->string('model_type');
+ $table->unsignedBigInteger($columnNames['model_morph_key']);
+ $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');
+
+ $table->foreign('permission_id')
+ ->references('id')
+ ->on($tableNames['permissions'])
+ ->onDelete('cascade');
+
+ $table->primary(['permission_id', $columnNames['model_morph_key'], 'model_type'],
+ 'model_has_permissions_permission_model_type_primary');
+ });
+
+ Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames) {
+ $table->unsignedBigInteger('role_id');
+
+ $table->string('model_type');
+ $table->unsignedBigInteger($columnNames['model_morph_key']);
+ $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');
+
+ $table->foreign('role_id')
+ ->references('id')
+ ->on($tableNames['roles'])
+ ->onDelete('cascade');
+
+ $table->primary(['role_id', $columnNames['model_morph_key'], 'model_type'],
+ 'model_has_roles_role_model_type_primary');
+ });
+
+ Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
+ $table->unsignedBigInteger('permission_id');
+ $table->unsignedBigInteger('role_id');
+
+ $table->foreign('permission_id')
+ ->references('id')
+ ->on($tableNames['permissions'])
+ ->onDelete('cascade');
+
+ $table->foreign('role_id')
+ ->references('id')
+ ->on($tableNames['roles'])
+ ->onDelete('cascade');
+
+ $table->primary(['permission_id', 'role_id'], 'role_has_permissions_permission_id_role_id_primary');
+ });
+
+ app('cache')
+ ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
+ ->forget(config('permission.cache.key'));
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ $tableNames = config('permission.table_names');
+
+ if (empty($tableNames)) {
+ throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');
+ }
+
+ Schema::drop($tableNames['role_has_permissions']);
+ Schema::drop($tableNames['model_has_roles']);
+ Schema::drop($tableNames['model_has_permissions']);
+ Schema::drop($tableNames['roles']);
+ Schema::drop($tableNames['permissions']);
+ }
+}
diff --git a/database/migrations/2020_06_08_153602_create_bans_table.php b/database/migrations/2020_06_08_153602_create_bans_table.php
new file mode 100644
index 0000000..7674c17
--- /dev/null
+++ b/database/migrations/2020_06_08_153602_create_bans_table.php
@@ -0,0 +1,41 @@
+id();
+ $table->bigInteger('userID')->unsigned();
+ $table->string('reason');
+ $table->timestamp('bannedUntil')->nullable();
+ $table->string('userAgent');
+ $table->bigInteger('authorUserID');
+ $table->timestamps();
+
+ $table->foreign('userID')
+ ->references('id')
+ ->on('users');
+
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('bans');
+ }
+}
diff --git a/database/migrations/2020_06_20_210255_create_comments_table.php b/database/migrations/2020_06_20_210255_create_comments_table.php
new file mode 100644
index 0000000..501254f
--- /dev/null
+++ b/database/migrations/2020_06_20_210255_create_comments_table.php
@@ -0,0 +1,44 @@
+id();
+ $table->bigInteger('authorID')->unsigned();
+ $table->bigInteger('applicationID')->unsigned();
+ $table->mediumText('text');
+ $table->timestamps();
+
+ $table->foreign('authorID')
+ ->references('id')
+ ->on('users');
+
+ $table->foreign('applicationID')
+ ->references('id')
+ ->on('applications');
+ });
+
+
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('comments');
+ }
+}
diff --git a/database/migrations/2020_06_25_093708_create_jobs_table.php b/database/migrations/2020_06_25_093708_create_jobs_table.php
new file mode 100644
index 0000000..1be9e8a
--- /dev/null
+++ b/database/migrations/2020_06_25_093708_create_jobs_table.php
@@ -0,0 +1,36 @@
+bigIncrements('id');
+ $table->string('queue')->index();
+ $table->longText('payload');
+ $table->unsignedTinyInteger('attempts');
+ $table->unsignedInteger('reserved_at')->nullable();
+ $table->unsignedInteger('available_at');
+ $table->unsignedInteger('created_at');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('jobs');
+ }
+}
diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php
index 237dfc5..6bb36da 100644
--- a/database/seeds/DatabaseSeeder.php
+++ b/database/seeds/DatabaseSeeder.php
@@ -11,6 +11,7 @@ class DatabaseSeeder extends Seeder
*/
public function run()
{
- // $this->call(UserSeeder::class);
+ $this->call(PermissionSeeder::class);
+ $this->call(UserSeeder::class);
}
}
diff --git a/database/seeds/PermissionSeeder.php b/database/seeds/PermissionSeeder.php
new file mode 100644
index 0000000..2fde5f4
--- /dev/null
+++ b/database/seeds/PermissionSeeder.php
@@ -0,0 +1,98 @@
+forgetCachedPermissions();
+
+ //
+ $user = Role::create(
+ [
+ 'name' => 'user'
+ ]
+ );
+
+ $reviewer = Role::create(
+ [
+ 'name' => 'reviewer'
+ ]
+ );
+
+ $hiringManager = Role::create(
+ [
+ 'name' => 'hiringManager'
+ ]
+ );
+
+ $admin = Role::create([
+ 'name' => 'admin'
+ ]);
+
+ // Spatie wildcard permissions (same concept of MC permissions)
+
+ Permission::create(['name' => 'applications.submit']);
+ Permission::create(['name' => 'applications.stages.deny']);
+ Permission::create(['name' => 'applications.stages.approve']);
+ Permission::create(['name' => 'applications.view.all']);
+ Permission::create(['name' => 'applications.view.own']);
+ Permission::create(['name' => 'applications.vote']);
+ Permission::create(['name' => 'appointments.schedule']);
+ Permission::create(['name' => 'appointments.schedule.edit']);
+ Permission::create(['name' => 'appointments.schedule.cancel']);
+ Permission::create(['name' => 'applications.*']);
+ Permission::create(['name' => 'appointments.*']);
+
+ Permission::create(['name' => 'profiles.view.others']);
+ Permission::create(['name' => 'profiles.edit.others']);
+
+ Permission::create(['name' => 'admin.userlist']);
+ Permission::create(['name' => 'admin.stafflist']);
+ Permission::create(['name' => 'admin.hiring.forms']);
+ Permission::create(['name' => 'admin.hiring.formbuilder']);
+ Permission::create(['name' => 'admin.hiring.vacancy']);
+ Permission::create(['name' => 'admin.hiring.vacancy.edit,delete']);
+ Permission::create(['name' => 'admin.notificationsettings']);
+ Permission::create(['name' => 'admin.notificationsettings.edit']);
+ Permission::create(['name' => 'admin.hiring.*']);
+ Permission::create(['name' => 'admin.notificationsettings.*']);
+ Permission::create(['name' => 'admin.maintenance.logs.view']);
+
+
+ Permission::create(['name' => 'admin.developertools.use']);
+
+ $user->givePermissionTo([
+ 'applications.submit',
+ 'applications.view.own',
+ 'profiles.view.others'
+ ]);
+
+ // Able to view applications and vote on them once they reach the right stage, but not approve applications up to said stage
+ $reviewer->givePermissionTo([
+ 'applications.view.all',
+ 'applications.vote'
+ ]);
+
+ $hiringManager->givePermissionTo('appointments.*', 'applications.*', 'admin.hiring.*');
+
+ $admin->givePermissionTo([
+ 'appointments.*',
+ 'admin.userlist',
+ 'admin.stafflist',
+ 'admin.hiring.*',
+ 'admin.notificationsettings.*',
+ 'profiles.view.others',
+ 'profiles.edit.others',
+ 'admin.maintenance.logs.view'
+ ]);
+ }
+}
diff --git a/database/seeds/UserSeeder.php b/database/seeds/UserSeeder.php
new file mode 100644
index 0000000..8ba2603
--- /dev/null
+++ b/database/seeds/UserSeeder.php
@@ -0,0 +1,146 @@
+ 'd2b321b56ff1445db9d7794701983cad',
+ 'name' => 'Robot 1',
+ 'email' => 'tester1@example.com',
+ 'username' => 'tester1',
+ 'originalIP' => '99.18.146.235',
+ 'password' => Hash::make('password')
+ ],
+ [
+ 'uuid' => 'ab22b5da02644953ace969fce85c0819',
+ 'name' => 'Robot 2',
+ 'email' => 'tester2@example.com',
+ 'username' => 'tester2',
+ 'originalIP' => '141.239.229.53',
+ 'password' => Hash::make('password')
+ ],
+ [
+ 'uuid' => 'df38e6bf762944d3a600ded59a693ad1',
+ 'name' => 'Robot 3',
+ 'email' => 'tester3@example.com',
+ 'username' => 'tester3',
+ 'originalIP' => '25.63.20.97',
+ 'password' => Hash::make('password')
+ ],
+ [
+ 'uuid' => '689e446484824f6bad5064e3df0aaa96',
+ 'name' => 'Robot 4',
+ 'email' => 'tester4@example.com',
+ 'username' => 'tester4',
+ 'originalIP' => '220.105.223.142',
+ 'password' => Hash::make('password')
+ ],
+ [
+ 'uuid' => '172391f917bf418ab1c40ebc041ed5ba',
+ 'name' => 'Robot 5',
+ 'email' => 'tester5@example.com',
+ 'username' => 'tester5',
+ 'originalIP' => '224.66.76.60',
+ 'password' => Hash::make('password')
+ ],
+ [
+ 'uuid' => '371f34dcce2a4457bf385ab9417a2345',
+ 'name' => 'Robot 6',
+ 'email' => 'tester6@example.com',
+ 'username' => 'tester6',
+ 'originalIP' => '97.113.131.0',
+ 'password' => Hash::make('password')
+ ],
+ [
+ 'uuid' => '89aa5222855542bebe7a7780248ef5f9',
+ 'name' => 'Robot 7',
+ 'email' => 'tester7@example.com',
+ 'username' => 'tester7',
+ 'originalIP' => '15.160.137.222',
+ 'password' => Hash::make('password')
+ ],
+
+ ];
+
+ $regularUsers = [
+
+ [
+ 'uuid' => '20f69f47e72f463493b5b91d1c05452f',
+ 'name' => 'User 1',
+ 'email' => 'user1@example.com',
+ 'username' => 'user1',
+ 'originalIP' => '253.25.237.78',
+ 'password' => Hash::make('password')
+ ],
+ [
+ 'uuid' => '5f900018241e4aaba7883f2d5c5c2357',
+ 'name' => 'User 2',
+ 'email' => 'user2@example.com',
+ 'username' => 'user2',
+ 'originalIP' => '82.92.156.176',
+ 'password' => Hash::make('password')
+ ],
+ [
+ 'uuid' => 'ba9780c3270745c6840eaabe1bf8aa14',
+ 'name' => 'User 3',
+ 'email' => 'user3@example.com',
+ 'username' => 'user3',
+ 'originalIP' => '224.123.129.17',
+ 'password' => Hash::make('password')
+ ]
+
+ ];
+
+ foreach ($regularUsers as $regularUser)
+ {
+ $user = User::create($regularUser);
+ Profile::create([
+ 'profileShortBio' => 'Random data ' . rand(0,1000),
+ 'profileAboutMe' => 'Random data ' . rand(0, 1000),
+ 'socialLinks' => "[]", // empty json set, not an array
+ 'avatarPreference' => 'gravatar',
+ 'userID' => $user->id
+ ]);
+ }
+
+ foreach($staffUsers as $staffUser)
+ {
+ $user = User::create($staffUser);
+ Profile::create([
+ 'profileShortBio' => 'Random data ' . rand(0,1000),
+ 'profileAboutMe' => 'Random data ' . rand(0, 1000),
+ 'socialLinks' => "[]",
+ 'avatarPreference' => 'gravatar',
+ 'userID' => $user->id
+ ]);
+
+ }
+
+ User::create([
+ 'uuid' => '6102256abd284dd7b68e4c96ef313734',
+ 'name' => 'Admin',
+ 'email' => 'admin@example.com',
+ 'username' => 'admin',
+ 'originalIP' => '192.168.1.2',
+ 'password' => Hash::make('password')
+ ]);
+
+ foreach (User::all() as $user)
+ {
+ $user->assignRole('reviewer', 'user');
+ }
+ }
+}
diff --git a/public/css/comments.css b/public/css/comments.css
new file mode 100644
index 0000000..82c42c7
--- /dev/null
+++ b/public/css/comments.css
@@ -0,0 +1,38 @@
+blockquote {
+ background: #f9f9f9;
+ border-left: 10px solid #ccc;
+ margin: 1.5em 10px;
+ padding: 0.5em 10px;
+ quotes: "\201C""\201D""\2018""\2019";
+}
+blockquote:before {
+ color: #ccc;
+ content: open-quote;
+ font-size: 4em;
+ line-height: 0.1em;
+ margin-right: 0.25em;
+ vertical-align: -0.4em;
+}
+blockquote p {
+ display: inline;
+}
+
+.comment {
+ border-radius: 30px;
+}
+
+.comment-header {
+ border: none;
+}
+
+.comment-footer {
+
+ border: none;
+
+}
+
+.commenter {
+ font-size: large;
+ color: darkgrey;
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/public/css/picker.css b/public/css/picker.css
new file mode 100644
index 0000000..dd15890
--- /dev/null
+++ b/public/css/picker.css
@@ -0,0 +1,3 @@
+.flatpickr-calendar.open {
+ z-index: 10000;
+}
\ No newline at end of file
diff --git a/public/js/app.js b/public/js/app.js
index 911ec26..fd12914 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -86,12198 +86,6 @@
/************************************************************************/
/******/ ({
-/***/ "./node_modules/@fullcalendar/core/main.esm.js":
-/*!*****************************************************!*\
- !*** ./node_modules/@fullcalendar/core/main.esm.js ***!
- \*****************************************************/
-/*! exports provided: Calendar, Component, ComponentContext, DateComponent, DateEnv, DateProfileGenerator, DayHeader, DaySeries, DayTable, ElementDragging, ElementScrollController, EmitterMixin, EventApi, FgEventRenderer, FillRenderer, Interaction, Mixin, NamedTimeZoneImpl, PositionCache, ScrollComponent, ScrollController, Slicer, Splitter, Theme, View, WindowScrollController, addDays, addDurations, addMs, addWeeks, allowContextMenu, allowSelection, appendToElement, applyAll, applyMutationToEventStore, applyStyle, applyStyleProp, asRoughMinutes, asRoughMs, asRoughSeconds, buildGotoAnchorHtml, buildSegCompareObj, capitaliseFirstLetter, combineEventUis, compareByFieldSpec, compareByFieldSpecs, compareNumbers, compensateScroll, computeClippingRect, computeEdges, computeEventDraggable, computeEventEndResizable, computeEventStartResizable, computeFallbackHeaderFormat, computeHeightAndMargins, computeInnerRect, computeRect, computeVisibleDayRange, config, constrainPoint, createDuration, createElement, createEmptyEventStore, createEventInstance, createFormatter, createPlugin, cssToStr, debounce, diffDates, diffDayAndTime, diffDays, diffPoints, diffWeeks, diffWholeDays, diffWholeWeeks, disableCursor, distributeHeight, elementClosest, elementMatches, enableCursor, eventTupleToStore, filterEventStoreDefs, filterHash, findChildren, findElements, flexibleCompare, forceClassName, formatDate, formatIsoTimeString, formatRange, getAllDayHtml, getClippingParents, getDayClasses, getElSeg, getRectCenter, getRelevantEvents, globalDefaults, greatestDurationDenominator, hasBgRendering, htmlEscape, htmlToElement, insertAfterElement, interactionSettingsStore, interactionSettingsToStore, intersectRanges, intersectRects, isArraysEqual, isDateSpansEqual, isInt, isInteractionValid, isMultiDayRange, isPropsEqual, isPropsValid, isSingleDay, isValidDate, listenBySelector, mapHash, matchCellWidths, memoize, memoizeOutput, memoizeRendering, mergeEventStores, multiplyDuration, padStart, parseBusinessHours, parseDragMeta, parseEventDef, parseFieldSpecs, parseMarker, pointInsideRect, prependToElement, preventContextMenu, preventDefault, preventSelection, processScopedUiProps, rangeContainsMarker, rangeContainsRange, rangesEqual, rangesIntersect, refineProps, removeElement, removeExact, renderDateCell, requestJson, sliceEventStore, startOfDay, subtractInnerElHeight, translateRect, uncompensateScroll, undistributeHeight, unpromisify, version, whenTransitionDone, wholeDivideDurations */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Calendar", function() { return Calendar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComponentContext", function() { return ComponentContext; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateComponent", function() { return DateComponent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateEnv", function() { return DateEnv; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateProfileGenerator", function() { return DateProfileGenerator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayHeader", function() { return DayHeader; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DaySeries", function() { return DaySeries; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayTable", function() { return DayTable; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ElementDragging", function() { return ElementDragging; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ElementScrollController", function() { return ElementScrollController; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmitterMixin", function() { return EmitterMixin; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventApi", function() { return EventApi; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FgEventRenderer", function() { return FgEventRenderer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FillRenderer", function() { return FillRenderer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Interaction", function() { return Interaction; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Mixin", function() { return Mixin; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NamedTimeZoneImpl", function() { return NamedTimeZoneImpl; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PositionCache", function() { return PositionCache; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScrollComponent", function() { return ScrollComponent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScrollController", function() { return ScrollController; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Slicer", function() { return Slicer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Splitter", function() { return Splitter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Theme", function() { return Theme; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "View", function() { return View; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WindowScrollController", function() { return WindowScrollController; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addDays", function() { return addDays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addDurations", function() { return addDurations; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMs", function() { return addMs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addWeeks", function() { return addWeeks; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "allowContextMenu", function() { return allowContextMenu; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "allowSelection", function() { return allowSelection; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appendToElement", function() { return appendToElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyAll", function() { return applyAll; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyMutationToEventStore", function() { return applyMutationToEventStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyStyle", function() { return applyStyle; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyStyleProp", function() { return applyStyleProp; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asRoughMinutes", function() { return asRoughMinutes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asRoughMs", function() { return asRoughMs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asRoughSeconds", function() { return asRoughSeconds; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildGotoAnchorHtml", function() { return buildGotoAnchorHtml; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildSegCompareObj", function() { return buildSegCompareObj; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "capitaliseFirstLetter", function() { return capitaliseFirstLetter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineEventUis", function() { return combineEventUis; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "compareByFieldSpec", function() { return compareByFieldSpec; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "compareByFieldSpecs", function() { return compareByFieldSpecs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "compareNumbers", function() { return compareNumbers; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "compensateScroll", function() { return compensateScroll; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeClippingRect", function() { return computeClippingRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeEdges", function() { return computeEdges; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeEventDraggable", function() { return computeEventDraggable; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeEventEndResizable", function() { return computeEventEndResizable; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeEventStartResizable", function() { return computeEventStartResizable; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeFallbackHeaderFormat", function() { return computeFallbackHeaderFormat; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeHeightAndMargins", function() { return computeHeightAndMargins; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeInnerRect", function() { return computeInnerRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeRect", function() { return computeRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeVisibleDayRange", function() { return computeVisibleDayRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "constrainPoint", function() { return constrainPoint; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDuration", function() { return createDuration; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return createElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEmptyEventStore", function() { return createEmptyEventStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEventInstance", function() { return createEventInstance; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createFormatter", function() { return createFormatter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createPlugin", function() { return createPlugin; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cssToStr", function() { return cssToStr; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return debounce; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffDates", function() { return diffDates; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffDayAndTime", function() { return diffDayAndTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffDays", function() { return diffDays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffPoints", function() { return diffPoints; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffWeeks", function() { return diffWeeks; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffWholeDays", function() { return diffWholeDays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffWholeWeeks", function() { return diffWholeWeeks; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disableCursor", function() { return disableCursor; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distributeHeight", function() { return distributeHeight; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementClosest", function() { return elementClosest; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementMatches", function() { return elementMatches; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "enableCursor", function() { return enableCursor; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eventTupleToStore", function() { return eventTupleToStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterEventStoreDefs", function() { return filterEventStoreDefs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterHash", function() { return filterHash; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findChildren", function() { return findChildren; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findElements", function() { return findElements; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "flexibleCompare", function() { return flexibleCompare; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forceClassName", function() { return forceClassName; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatDate", function() { return formatDate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatIsoTimeString", function() { return formatIsoTimeString; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatRange", function() { return formatRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAllDayHtml", function() { return getAllDayHtml; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClippingParents", function() { return getClippingParents; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDayClasses", function() { return getDayClasses; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElSeg", function() { return getElSeg; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRectCenter", function() { return getRectCenter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRelevantEvents", function() { return getRelevantEvents; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "globalDefaults", function() { return globalDefaults; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "greatestDurationDenominator", function() { return greatestDurationDenominator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasBgRendering", function() { return hasBgRendering; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlEscape", function() { return htmlEscape; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlToElement", function() { return htmlToElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertAfterElement", function() { return insertAfterElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interactionSettingsStore", function() { return interactionSettingsStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interactionSettingsToStore", function() { return interactionSettingsToStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "intersectRanges", function() { return intersectRanges; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "intersectRects", function() { return intersectRects; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArraysEqual", function() { return isArraysEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDateSpansEqual", function() { return isDateSpansEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInt", function() { return isInt; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInteractionValid", function() { return isInteractionValid; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isMultiDayRange", function() { return isMultiDayRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPropsEqual", function() { return isPropsEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPropsValid", function() { return isPropsValid; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSingleDay", function() { return isSingleDay; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isValidDate", function() { return isValidDate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "listenBySelector", function() { return listenBySelector; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapHash", function() { return mapHash; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "matchCellWidths", function() { return matchCellWidths; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "memoize", function() { return memoize; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "memoizeOutput", function() { return memoizeOutput; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "memoizeRendering", function() { return memoizeRendering; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeEventStores", function() { return mergeEventStores; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multiplyDuration", function() { return multiplyDuration; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "padStart", function() { return padStart; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseBusinessHours", function() { return parseBusinessHours; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseDragMeta", function() { return parseDragMeta; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseEventDef", function() { return parseEventDef; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseFieldSpecs", function() { return parseFieldSpecs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseMarker", function() { return parse; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pointInsideRect", function() { return pointInsideRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prependToElement", function() { return prependToElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preventContextMenu", function() { return preventContextMenu; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preventDefault", function() { return preventDefault; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preventSelection", function() { return preventSelection; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "processScopedUiProps", function() { return processScopedUiProps; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangeContainsMarker", function() { return rangeContainsMarker; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangeContainsRange", function() { return rangeContainsRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangesEqual", function() { return rangesEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangesIntersect", function() { return rangesIntersect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "refineProps", function() { return refineProps; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeElement", function() { return removeElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeExact", function() { return removeExact; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderDateCell", function() { return renderDateCell; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "requestJson", function() { return requestJson; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sliceEventStore", function() { return sliceEventStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startOfDay", function() { return startOfDay; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subtractInnerElHeight", function() { return subtractInnerElHeight; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translateRect", function() { return translateRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uncompensateScroll", function() { return uncompensateScroll; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "undistributeHeight", function() { return undistributeHeight; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unpromisify", function() { return unpromisify; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "version", function() { return version; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenTransitionDone", function() { return whenTransitionDone; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wholeDivideDurations", function() { return wholeDivideDurations; });
-/*!
-FullCalendar Core Package v4.4.0
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-// Creating
-// ----------------------------------------------------------------------------------------------------------------
-var elementPropHash = {
- className: true,
- colSpan: true,
- rowSpan: true
-};
-var containerTagHash = {
- '
' + - ' |
' + - ' |
' + - ' |
' +
- (options.allDaySlot ?
- '' +
- ' ' : - '') + - ' | ' +
- '
{{$comment->user->name}} ● {{Carbon\Carbon::parse($comment->created_at)->diffForHumans()}} + +