diff --git a/.editorconfig b/.editorconfig
old mode 100644
new mode 100755
diff --git a/.env.example b/.env.example
old mode 100644
new mode 100755
index f897c91..c3e43fb
--- a/.env.example
+++ b/.env.example
@@ -4,13 +4,27 @@ APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
APP_LOGO="https://www.raspberrypi.org/app/uploads/2020/05/Raspberry-Pi-OS-downloads-image-150x150-1.png"
+APP_AUTH_BANNER=""
APP_SITEHOMEPAGE=""
-# This can be your main homepage, other than this site itself
+API_PREFIX="api"
-LOG_CHANNEL=stack
+# The auth banner is a relative path
+
+# Hides IP addresses
+HIDE_IPS=false
+
+# Disables certain features for security purposes while running an open authentication system
+# Enable only for demonostration purposes
+DEMO_MODE=false
+
+# Forces ssl connections even if the environment is set to "local".
+# Void if env is production.
+NONPROD_FORCE_SECURE=false
+
+LOG_CHANNEL=daily
DB_CONNECTION=mysql
-DB_HOST=127.0.0.1
+DB_HOST=z
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
@@ -29,7 +43,7 @@ IPGEO_API_URL="https://api.ipgeolocation.io/ipgeo"
ARCANEDEV_LOGVIEWER_MIDDLEWARE=web,auth,can:admin.maintenance.logs.view
-RELEASE=staffmanagement@0.6.1
+RELEASE=0.6.2
SLACK_INTEGRATION_WEBHOOK=
@@ -62,6 +76,10 @@ PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
+
+BEAMS_INSTANCE_ID=
+BEAMS_SECRET_KEY=
+
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/.gitattributes b/.gitattributes
old mode 100644
new mode 100755
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
old mode 100644
new mode 100755
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
old mode 100644
new mode 100755
diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/.idea/hrm-mcserver.iml b/.idea/hrm-mcserver.iml
deleted file mode 100644
index bb20d72..0000000
--- a/.idea/hrm-mcserver.iml
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/laravel-plugin.xml b/.idea/laravel-plugin.xml
deleted file mode 100644
index 5aae25d..0000000
--- a/.idea/laravel-plugin.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 28a804d..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 1a22200..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/php.xml b/.idea/php.xml
deleted file mode 100644
index afaedbf..0000000
--- a/.idea/php.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml
deleted file mode 100644
index 4f8104c..0000000
--- a/.idea/phpunit.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.phive/phars.xml b/.phive/phars.xml
deleted file mode 100644
index c7b7b0f..0000000
--- a/.phive/phars.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/.styleci.yml b/.styleci.yml
old mode 100644
new mode 100755
index 1db61d9..d534ee6
--- a/.styleci.yml
+++ b/.styleci.yml
@@ -1,13 +1,13 @@
-php:
- preset: laravel
- disabled:
- - unused_use
- finder:
- not-name:
- - index.php
- - server.php
-js:
- finder:
- not-name:
- - webpack.mix.js
-css: true
+risky: false
+version: 7
+preset: recommended
+finder:
+ exclude:
+ - "modules"
+ - "node_modules"
+ - "storage"
+ - "vendor"
+ name: "*.php"
+ not-name:
+ - "*.blade.php"
+ - "_ide_helper.php"
diff --git a/.vscode/launch.json b/.vscode/launch.json
deleted file mode 100644
index 612eaac..0000000
--- a/.vscode/launch.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- // Use IntelliSense to learn about possible attributes.
- // Hover to view descriptions of existing attributes.
- // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
- "version": "0.2.0",
- "configurations": [
- {
- "name": "Listen for XDebug",
- "type": "php",
- "request": "launch",
- "port": 9000
- },
- {
- "name": "Launch currently open script",
- "type": "php",
- "request": "launch",
- "program": "${file}",
- "cwd": "${fileDirname}",
- "port": 9000
- }
- ]
-}
\ No newline at end of file
diff --git a/CODEOWNERS b/CODEOWNERS
new file mode 100755
index 0000000..37c210a
--- /dev/null
+++ b/CODEOWNERS
@@ -0,0 +1 @@
+* @miguel456
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
old mode 100644
new mode 100755
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/Procfile b/Procfile
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
index 50e85d4..582845d
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-# RB Recruiter v 0.6.2 [](https://crowdin.com/project/raspberry-staff-manager)
+# RB Recruiter v 0.7.1 [](https://crowdin.com/project/raspberry-staff-manager) [](https://betteruptime.com/?utm_source=status_badge)
## The quick and pain-free form management solution for communities
Have you ever gotten tired of managing your Minecraft server/network's applications through Discord (or anything else) and having to scroll through hundreds of new messages just to find that one applicant's username?
@@ -24,7 +24,7 @@ Wish you had a better application managemet strategy? Well, then Raspberry Teams
- Termination - Has a staff member met their untimely demise? Terminate them. This will strip their permissions and roles.
- Controllable permissions - Every user has permissions! Control who has access to what (You can skip the application process and add staff members directly here).
- Ban system - Having trouble with pesky spammers? Ban them! This will publicly shame their profile and keep them from signing up or logging in.
- - Notifications: Notifies slack and email primarily
+ - Notifications: Notifies slack and email primarily (Slack notifications currently broken)
And many more features!
@@ -42,11 +42,13 @@ Many other features are currently planned for this app, such as:
# Technical overview
Tech stack:
- - [Laravel 7](https://laravel.com/)
- - Eloquent ORM
- - AdminLTE / Bootstrap 4
- - jQuery / Plain Javascript
- - vueJS (in the future)
+ - [Laravel 8](https://laravel.com/)
+ - [Eloquent ORM](https://laravel.com/docs/5.0/eloquent)
+ - [AdminLTE](https://adminlte.io/) /
+ - [Bootstrap 4](https://getbootstrap.com/docs/4.0/getting-started/introduction/)
+ - [jQuery](https://jquery.com/)
+ - [Bootstrap 4](https://getbootstrap.com/)
+ - [Icons by FontAwesome](https://fontawesome.com/)
# Stability
@@ -63,13 +65,12 @@ Tech stack:
# Software Requirements
- ``composer`` (min version: 1.8.4)
- ``npm`` (tested w/ v 5.8.0)
- - ``php`` (required PHP 7 or newer - lower versions unsupported!)
+ - ``php`` (required PHP 8 or newer - lower versions unsupported!)
# PHP Extension Requirements
- JSON
- Curl (highly recommended)
- - Image Magick (imagick) for 2FA support
# Installation
diff --git a/SECURITY.md b/SECURITY.md
old mode 100644
new mode 100755
index b900798..17c6d58
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -1,6 +1,6 @@
# Security Policy
-## Supported Versions
+## Supported Software Versions
The following versions are currently supported:
@@ -8,12 +8,107 @@ The following versions are currently supported:
| ------- | ------------------ |
| 0.1.x | :x: |
| 0.5.x | :x: |
-| 0.6.x | :white_check_mark: |
+| 0.6.x | :x: |
+| 0.7.0 | :x: |
+| 0.7.1 | :white_check_mark: |
+
+## Supported PHP Versions
+
+| Version | Supported |
+| ------- | ------------------ |
+| 5.x | :x: |
+| 7.0 | :x: |
+| 7.1 | :x: |
+| 7.2 | :x: |
+| 7.3 | :x: |
+| 7.4 | :white_check_mark: |
+| 8.0 | :white_check_mark: |
+
+
+## Supported Operating Systems
+
+| Name | Supported |
+| ------- | ------------------ |
+| Windows NT | :x: |
+| MacOS | Docker only |
+| Ubuntu 22.10 | :white_check_mark: |
+| Other Linux distros | :white_check_mark: |
+
## Reporting a Vulnerability
-To securely report a vulnerability, you may send me an email directly containing the details of said vulnerability: ``me@nogueira.codes``.
+If you found a critical vunlerability, please do not use the Issues tab to report it.
-You may optionally encrypt your message with my [public PGP key](http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x48DF709E7405702B).
+Instead, please forward an encrypted vulnerability report to ``security@webvokestudio.pt``, so that we have time to open a security advisory and work on a fix.
+Unencrypted reports will be ignored.
-Use this free [online encryption tool](https://www.igolder.com/pgp/encryption/) if you don't know how to use PGP on your desktop.
+Use this public PGP key to encrypt your message:
+
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
+
+ mQINBF/NUL8BEAC7njBq5IbB80qS8rGaAw+DM9wCTiZBiZu0oLXh6oW/E6NOKX5D
+ Gd8tcW2auqcO1syBUnla4E8t+3fuJQtee3lgszLKRKACYOqZPIYNBUHbw3VBNhNZ
+ WESbKh9JxlLJql6fHMfpr3wcTCxLwFGcRln1EPKAMBsxB0YJDeorXuoCTY4+NhGM
+ 8O2aS8Tbq+HxSkhz1p0DdOuaM9C/kQJkOth6sdsBiBE/OsyzPK/yti91WM9fB/Fg
+ QuYyzFD5OL6H+PKPas/4ndIfXSnSCeqm4gScUBeLReeqQd0o96ALSnOxMz9Qit4j
+ BYhKxfZnAFiKWeBPZEJY12cu2gv3plkdE89mqJveRUCQ+dfVX471iCW+/YSRGU83
+ 9PG2a1Dalsx46lScHm2RlrXFhUhpVND0y7VBHpKiUJCoykhGbIAr429dITBw7jGa
+ FAKpJgm2wWRAHeokrQ9l+NTUosTwRoYeWF1tKElKT1sjF5zuWFxOekzGXBtzcSUH
+ HQrUfzOQTMUciSZ4CjZjDNL1yYEwUOTr4IzNOj/jmKCo/Dbsix9V1LbTPjK8vP4l
+ jwLOL2dG0jpQRd5FRBWPukpF6LS25vQv0bMRZdsCfh/eOlMldfdiGpx8fN6dkxvm
+ H0TBdZklp3U91u+ooVIeF3Q1NWmB/tvNJOfFnerHOpDBTy/q5fpT6QaMkwARAQAB
+ tH5NaWd1ZWwgTm9ndWVpcmEgKElnbm9yZSBhbGwgbXkgb3RoZXIga2V5cyB1bmRl
+ ciBteSBuYW1lIGFuZCBlbWFpbCAobG9zdCB0aGUgcHJpdmF0ZSBrZXlzKS4pIDxt
+ aWd1ZWw0NTZAc3BhY2VqZXdlbC1ob3N0aW5nLmNvbT6JAlQEEwEKAD4WIQStTNAz
+ Se1uoPMcdjTkUwCM6Yt4igUCX81QvwIbLwUJC0c1AAULCQgHAgYVCgkICwIEFgID
+ AQIeAQIXgAAKCRDkUwCM6Yt4ikBCD/9sPlUItGT1tlFgdSdbLdPsdcb/lpK269zH
+ 0OoMSSKGKNL6RAY2R6++qdBRCC9jdzQFtJO7epYB/mWXnZqYcWemTwaKEW5eHr5E
+ BFQuSiRREbNLkzCAWWqqaQnCuve4q9DXsWd5NiHcrmNgnSY6Zk6y+GdpQNyzEshf
+ aCcnkaySIFgV33DDsa6s4zUDZulQbmeg1mfwyP0tv+CZ6Bbk72DxX/A10x00ddv1
+ arGuLfctIydEcG7mAeAZBeCJEucpFuQbaWybZS2RX3/e6LCOWnt/ZHjqcFln36yq
+ 9GIx28BnElkpxwDV66R0EUpm3cxZ3Kv7bDqm5E2ZzCybOF+a8y3d15qIyrSHvGdr
+ skVBmRi2zLxCYBEcTocHH0rG6UNTk55wvqMepAnnp12XMQoqCrmw9zUv92qAv+01
+ lMv9H1AM8jUdkk5H+SgZYFcPL5/4cBEc/ylRKIuiNcKZAfppjdVnslXsgahmQSep
+ PgcWPwwOujqYLfn/FPKRQuH1GUuNv0UzO6KUQy0gWkDYKrnks4n6lNWXiZY/HU+W
+ KCgSWRCICHW8JJ8dg97vk6IurtqpG/LUMb/E3mAzPNIyuhK2r1wGOsb83iVIvF5M
+ 3KyAFhaqiwnudt7UXYN3A1we+rm/y/nBNx0GUuC8VJaLz1p9zqEiT1an0vivC92x
+ m/jSicdIprkCDQRfzVC/ARAAq/tqXnL7JSt3ZaePLP86hE0gOK8mY1F5X9sRQCDT
+ adqyfnwNIzXGhUFfSdIO2LKnrdZUFXZG4YeK6JG0fu8KdELs+2UlIx0KAokrwfK3
+ zWHITN6+lvSz3ubVQMYCEgUK9eEPwa/XnhL4vEd61kMdM5OxYsBXQYlraWLJ0rOf
+ ANQEXb0vm0c4RsO8IubOJT7jxPkgfLesIB7i3O3/Hptc54WHs97p22/Y6oNk42UV
+ cJB/k3kqTCzfBzDcpmF9RyxpfEDUJAn9QWcxH2UC3kHpr9N5Hfv3Kh3bjaGukzn4
+ sO+fmukqBTsW7cIMO7slbcsCVJN7QC2GcocgjGHXWVF1Gg234exTX7aDBGNq7TeY
+ h1N/3lVeZom6ANtA3aOO55NuaXI9IGiW7lNnYcTJkTu3eUnfTpg/FkqdSzOpBOFZ
+ Gyltjf8pMK0vQXbajov5j/wE/bz2eOPKwyJc0u3B/JqfE/EbPnx5dng7/mgv+x7u
+ GSMOvovc4SrSZoDp5IWDk1L5s2CHNB88rziPFLB0Tkr6N9MnEWhv4wL7wfNdQ00s
+ xJpGlrc0nSdGUmHFCExRUb7VIJ0Yfjsj3Xy4PCBXsDTYWusAbp+rbFycRMlGiANj
+ cQYGbEYMyUqL2upg7kKzrFW45TyGpkE1QHkm0Od7JxGqgfiie+tcG+EUQKBMJsIN
+ tLMAEQEAAYkEcgQYAQoAJhYhBK1M0DNJ7W6g8xx2NORTAIzpi3iKBQJfzVC/Ahsu
+ BQkLRzUAAkAJEORTAIzpi3iKwXQgBBkBCgAdFiEEqncyNKRovrMCcN8NLPYbglMW
+ xqAFAl/NUL8ACgkQLPYbglMWxqBmHhAApxjJmpdifzI23AdRAcO4oChE6ho0a85+
+ nGXr0qPMySb6/1GiYML3WKNzK02wS7V8A1VlnYvdd3SdmJh9qhH4NAgs4SXxpenp
+ hEw48M+h7LHJlqkrftHC540eyNlyVyN31kNhibhFrF5eZ9BcIwERrAR4MClG1gwI
+ bJqiAk5wlYP6YmJHVI+4DKjN+dMCn301hXUCTPoAdHfKTztMe9qhmbgZcyeOkZOr
+ Ya/7D1AqEaQhfcfOL4mBUdH86GVw9o58Ock7baQHoYlIrwgvW4qRvBjT+mQueHld
+ J0v/GQM6widHe3vt3HL4vI4vTzoscl8MY4u8YCmvkWGh343G6Ei7m+cQ19GrHSOR
+ 8rMZjHbYaNHstscBJDVx19EZaGc/AV6w38MdkiXbKyyKkZuvAqWkgs+NFRE7lBtI
+ mNp40aakYNwnn0RP6Wz2LYRWcP5Zm79cUb8++CYK8h5Y5j53tlM8ihF58UhKL6rg
+ zEk5vYoJzmswO9nA9nNnPscZhZUwfE1x8SVtOOhr8IFlJ3Kh2BpTXJbmqwj71Y6x
+ pfP6GG4UmPzfLi64ZkvYU1l7nyxlbvJXd8LzBs5oofROiIYKQkrSMEZvPb8XUVNs
+ cMz434hQFPtwkygjtpA1Io+bx1BV4wtnQ1GsaK2m32hacfF7OvL8iYq92uF//NUm
+ mhxeh5Jso+/G9xAAqOBen92oFOrg3P+EkmIPRqvcgy4I3Tb22PaB3tGP4+iXpalc
+ ocMVDzVOLM2pwMwnffnecGv3UotJWdz/80CG8juuwOLXOIsOVAdEbKIXGknwLGyZ
+ V04+nBQLm+qKhLFigakx43Rmte7Fn3tydlJ+61DHBYtUF8/QRPw/1YN5ybXuZrTj
+ ci6zUfHxuUczlr8GQhXDy95yvtGlqsGB1roIiCB4Ld7PV3S3YK8+4AjuNFqMQ/+K
+ KNMsGWFzkXf8NPLe/AneVARsX0f2bV0YYcHYWQCZjrEyKrMcNYuK6uj4Z1Xmwn7f
+ 0gE3kjTPuG562jpHHElWHcZI40uNnYf0DBRyTQWLGqOuAVCDrg8+/gITBW98M3jd
+ OuPu5RQmtIkF9BFDYl3pdbzJ/4j+StAnRuZMjSSi17okRHFJEL3FZ2LdBim073ra
+ BCU+tufFOQUtR47mOuIjmRDI0GXjGcs1BcovaVViGisjwB0CSSLgnYIjZH6xsrA1
+ ICc0bSNBvYpXewPGDQ8AO1k4lNtedDOY/sXr4o9xZVic5eOA740PPrEozpftV1wK
+ UBxa9dXTy9qaZhcw/x38zVyJTLg4I5sOmG24u/ZPqOblEKyQwFdU4gLyF5CRGwDy
+ 5LmGVc1bTDL8SQXkRG4L/DZVbqgBxBKNonkbnJV2VpjzecfA3O8rHS+uAlQ=
+ =hbUK
+ -----END PGP PUBLIC KEY BLOCK-----
+
+
+You may use [this tool](https://sela.io/pgp-en/) to encrypt your message.
diff --git a/app/Absence.php b/app/Absence.php
new file mode 100755
index 0000000..2043b52
--- /dev/null
+++ b/app/Absence.php
@@ -0,0 +1,125 @@
+belongsTo('App\User', 'requesterID', 'id');
+ }
+
+
+ /**
+ * Determines whether this model can be setApproved(), setDeclined() or setCancelled()
+ *
+ * @param bool $toCancel Switch the check to cancellability check
+ * @return bool
+ */
+ public function isActionable(bool $toCancel = false): bool
+ {
+ if ($toCancel)
+ {
+ return in_array($this->getRawOriginal('status'), ['PENDING', 'APPROVED']);
+ }
+
+ return $this->getRawOriginal('status') == 'PENDING';
+ }
+
+
+ /**
+ * Sets the Absence's status as approved
+ *
+ * @return Absence
+ * @throws AbsenceNotActionableException
+ */
+ public function setApproved(): Absence
+ {
+ if ($this->isActionable())
+ {
+ return tap($this)->update([
+ 'status' => 'APPROVED'
+ ]);
+ }
+
+ throw new AbsenceNotActionableException('This absence is not actionable!');
+ }
+
+
+ /**
+ * Sets the absence's status as declined
+ *
+ * @return Absence
+ * @throws AbsenceNotActionableException
+ */
+ public function setDeclined(): Absence
+ {
+ if ($this->isActionable()) {
+ return tap($this)->update([
+ 'status' => 'DECLINED'
+ ]);
+ }
+
+ throw new AbsenceNotActionableException('This absence is not actionable!');
+ }
+
+
+ /**
+ * Sets the absence's status as cancelled
+ *
+ * @return Absence
+ * @throws AbsenceNotActionableException Thrown when the switch to this status would be invalid
+ */
+ public function setCancelled(): Absence
+ {
+ if ($this->isActionable(true)) {
+ return tap($this)->update([
+ 'status' => 'CANCELLED'
+ ]);
+ }
+
+ throw new AbsenceNotActionableException('This absence is not actionable!');
+ }
+
+ /**
+ * Sets the absence's status as ended
+ *
+ * @return Absence
+ */
+ public function setEnded(): Absence
+ {
+ return tap($this)->update([
+ 'status' => 'ENDED'
+ ]);
+ }
+
+
+ // Look out when retrieving this value;
+ //If you need the unaltered version of it, either adapt to its formatting or call getRawOriginal()
+ protected function status(): Attribute {
+ return Attribute::make(
+ get: fn($value) => ucfirst(strtolower($value))
+ );
+ }
+
+}
+
diff --git a/app/Application.php b/app/Application.php
old mode 100644
new mode 100755
index f1066d8..5aa958a
--- a/app/Application.php
+++ b/app/Application.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
@@ -10,12 +29,14 @@ class Application extends Model
'applicantUserID',
'applicantFormResponseID',
- 'applicationStatus'
+ 'applicationStatus',
];
-
-
+ public function oneoffApplicant()
+ {
+ return $this->hasOne('App\OneoffApplicant', 'application_id', 'id');
+ }
public function user()
{
@@ -37,7 +58,6 @@ class Application extends Model
return $this->belongsToMany('App\Vote', 'votes_has_application');
}
-
public function comments()
{
return $this->hasMany('App\Comment', 'applicationID', 'id');
@@ -46,8 +66,15 @@ class Application extends Model
public function setStatus($status)
{
return $this->update([
- 'applicationStatus' => $status
+ 'applicationStatus' => $status,
]);
-
}
+
+
+ public function isOneoff()
+ {
+ return $this->user->id == 1; // ID 1 is always the ghost
+ }
+
+
}
diff --git a/app/Appointment.php b/app/Appointment.php
old mode 100644
new mode 100755
index d62e39a..a87c02f
--- a/app/Appointment.php
+++ b/app/Appointment.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
@@ -13,19 +32,19 @@ class Appointment extends Model
'appointmentStatus',
'appointmentLocation',
'meetingNotes',
- 'userAccepted'
+ 'userAccepted',
];
public function application()
{
- // FIXME: Possible bug here, where laravel looks for the wrong column in the applications table.
+ // FIXME: Possible bug here, where laravel looks for the wrong column in the applications table.
return $this->belongsTo('App\Application', 'id', 'applicationID');
}
public function setStatus($status)
{
$this->update([
- 'appointmentStatus' => $status
+ 'appointmentStatus' => $status,
]);
}
}
diff --git a/app/Ban.php b/app/Ban.php
old mode 100644
new mode 100755
index c1a6e90..f4c2dfb
--- a/app/Ban.php
+++ b/app/Ban.php
@@ -1,29 +1,46 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
class Ban extends Model
{
-
public $fillable = [
'userID',
'reason',
'bannedUntil',
- 'userAgent',
- 'authorUserID'
+ 'isPermanent',
+ 'authorUserID',
];
public $dates = [
- 'bannedUntil'
+ 'suspendedUntil',
];
public function user()
{
return $this->belongsTo('App\User', 'userID', 'id');
}
-
}
diff --git a/app/Comment.php b/app/Comment.php
old mode 100644
new mode 100755
index c8dc8cc..ea4092b
--- a/app/Comment.php
+++ b/app/Comment.php
@@ -1,16 +1,34 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
-
protected $fillable = [
'authorID',
'applicationID',
- 'text'
+ 'text',
];
public function application()
@@ -22,5 +40,4 @@ class Comment extends Model
{
return $this->belongsTo('App\User', 'authorID', 'id');
}
-
}
diff --git a/app/Console/Commands/CountVotes.php b/app/Console/Commands/CountVotes.php
old mode 100644
new mode 100755
index a2a7c6d..af0c549
--- a/app/Console/Commands/CountVotes.php
+++ b/app/Console/Commands/CountVotes.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Console\Commands;
use App\Application;
@@ -43,28 +62,23 @@ class CountVotes extends Command
$eligibleApps = Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get();
$pbar = $this->output->createProgressBar($eligibleApps->count());
- if($eligibleApps->isEmpty())
- {
+ if ($eligibleApps->isEmpty()) {
$this->error('𐄂 There are no applications that need to be processed.');
return false;
}
- foreach ($eligibleApps as $application)
- {
+ foreach ($eligibleApps as $application) {
$votes = $application->votes;
$voteCount = $application->votes->count();
$positiveVotes = 0;
$negativeVotes = 0;
- if ($voteCount > 5)
- {
- $this->info('Counting votes for application ID ' . $application->id);
- foreach ($votes as $vote)
- {
- switch ($vote->allowedVoteType)
- {
+ if ($voteCount > 5) {
+ $this->info('Counting votes for application ID '.$application->id);
+ foreach ($votes as $vote) {
+ switch ($vote->allowedVoteType) {
case 'VOTE_APPROVE':
$positiveVotes++;
break;
@@ -74,7 +88,7 @@ class CountVotes extends Command
}
}
- $this->info('Total votes for application ID ' . $application->id . ': ' . $voteCount);
+ $this->info('Total votes for application ID '.$application->id.': '.$voteCount);
$this->info('Calculating criteria...');
$negativeVotePercent = floor(($negativeVotes / $voteCount) * 100);
$positiveVotePercent = floor(($positiveVotes / $voteCount) * 100);
@@ -83,54 +97,42 @@ class CountVotes extends Command
$this->table([
'% of approval votes',
- '% of denial votes'
+ '% of denial votes',
], [ // array of arrays, e.g. rows
[
- $positiveVotePercent . "%",
- $negativeVotePercent . "%"
- ]
+ $positiveVotePercent.'%',
+ $negativeVotePercent.'%',
+ ],
]);
- if ($pollResult)
- {
- $this->info('✓ Dispatched promotion event for applicant ' . $application->user->name);
- if (!$this->option('dryrun'))
- {
- $application->response->vacancy->vacancyCount -= 1;
- $application->response->vacancy->save();
+ if ($pollResult) {
+ $this->info('✓ Dispatched promotion event for applicant '.$application->user->name);
+ if (! $this->option('dryrun')) {
+ $application->response->vacancy->decrease();
event(new ApplicationApprovedEvent(Application::find($application->id)));
- }
- else
- {
+ } else {
$this->warn('Dry run: Event won\'t be dispatched');
}
$pbar->advance();
-
- }
- else {
-
- if (!$this->option('dryrun'))
- {
+ } else {
+ if (! $this->option('dryrun')) {
event(new ApplicationDeniedEvent(Application::find($application->id)));
- }
- else {
+ } else {
$this->warn('Dry run: Event won\'t be dispatched');
}
$pbar->advance();
- $this->error('𐄂 Applicant ' . $application->user->name . ' does not meet vote criteria (Majority)');
+ $this->error('𐄂 Applicant '.$application->user->name.' does not meet vote criteria (Majority)');
}
+ } else {
+ $this->warn('Application ID'.$application->id.' did not have enough votes for processing (min 5)');
}
- else
- {
- $this->warn("Application ID" . $application->id . " did not have enough votes for processing (min 5)");
- }
-
}
$pbar->finish();
+
return true;
}
}
diff --git a/app/Console/Commands/CreateUser.php b/app/Console/Commands/CreateUser.php
new file mode 100755
index 0000000..eb98a8d
--- /dev/null
+++ b/app/Console/Commands/CreateUser.php
@@ -0,0 +1,140 @@
+.
+ */
+
+namespace App\Console\Commands;
+
+use App\Facades\UUID;
+use App\Profile;
+use App\User;
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\Hash;
+
+class CreateUser extends Command
+{
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'users:create';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Creates an application user. Seeding the database is for testing environments, so use this command in production for your first admin user.';
+
+ /**
+ * Create a new command instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Execute the console command.
+ *
+ * @return int
+ */
+ public function handle()
+ {
+ do {
+ if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
+ system('cls');
+ } else {
+ system('clear');
+ }
+
+ $this->info('Welcome to the user account creation wizard. If you just installed the application, we recommend you create your first admin user here. If you don\'t, you won\'t gain admin privileges after creating an account in the web interface.');
+ $this->info('We\'ll ask some questions to get you started.');
+
+ $username = $this->ask('Username');
+ do {
+ $password = $this->secret('Password');
+ $password_confirm = $this->secret('Confirm Password');
+
+ if ($password === $password_confirm) {
+ $password = Hash::make($password);
+ $matches = true;
+ } else {
+ $this->error('Password doesn\'t match. Please try again.');
+ $matches = false;
+ }
+ } while (! $matches);
+
+ $email = $this->ask('E-mail address');
+ $name = $this->ask('First/Last Name');
+
+ do {
+ try {
+ $uuid = UUID::toUUID($this->ask('Minecraft username (Must be a valid Premium account)'));
+ } catch (\InvalidArgumentException $e) {
+ $this->error($e->getMessage());
+ $hasError = true;
+ }
+
+ if (isset($hasError)) {
+ $continue = true;
+ } else {
+ $continue = false;
+ }
+ unset($hasError);
+ } while ($continue);
+
+ $this->info('Please check if these details are correct: ');
+ $this->info('Username: '.$username);
+ $this->info('Email: '.$email);
+ $this->info('Name: '.$name);
+ } while (! $this->confirm('Create user now? You can go back to correct any details.'));
+
+ $user = User::create([
+ 'uuid' => $uuid,
+ 'name' => $name,
+ 'email' => $email,
+ 'username' => $username,
+ 'originalIP' => '127.0.0.1',
+ 'password' => $password,
+ ]);
+
+ if ($user) {
+ $user->assignRole('admin', 'reviewer', 'user', 'hiringManager');
+ Profile::create([
+ 'profileShortBio' => 'Random data '.rand(0, 1000),
+ 'profileAboutMe' => 'Random data '.rand(0, 1000),
+ 'socialLinks' => '[]',
+ 'avatarPreference' => 'gravatar',
+ 'userID' => $user->id,
+ ]);
+
+ $this->info('Account created! You may now login at '.route('login').'. Enjoy the app!');
+
+ return 0;
+ } else {
+ $this->error('There was an unknown problem creating the user. There might have been errors above. Please try again.');
+
+ return 1;
+ }
+ }
+}
diff --git a/app/Console/Commands/Install.php b/app/Console/Commands/Install.php
old mode 100644
new mode 100755
diff --git a/app/Console/Commands/MakeFile.php b/app/Console/Commands/MakeFile.php
new file mode 100755
index 0000000..5d3cf40
--- /dev/null
+++ b/app/Console/Commands/MakeFile.php
@@ -0,0 +1,82 @@
+.
+ */
+
+namespace App\Console\Commands;
+
+use Faker\Factory;
+use Faker\Generator;
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\Storage;
+
+class MakeFile extends Command
+{
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'files:make {count : How many test files to generate}';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Generates test files for the TeamFile model. Use in conjunction with it\'s factory.';
+
+ /**
+ * The faker instance used to obtain dummy text.
+ *
+ * @var Generator
+ */
+ private $faker;
+
+ /**
+ * Create a new command instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ $this->faker = Factory::create();
+
+ parent::__construct();
+ }
+
+ /**
+ * Execute the console command.
+ *
+ * @return int
+ */
+ public function handle()
+ {
+ $count = $this->argument('count');
+ $this->info('Creating '.$this->argument('count').' files!');
+
+ for ($max = 1; $max < $count; $max++) {
+ Storage::disk('local')->put('factory_files/testfile_'.rand(0, 5000).'.txt', $this->faker->paragraphs(40, true));
+ }
+
+ $this->info('Finished creating files! They will be randomly picked by the factory.');
+
+ return 0;
+ }
+}
diff --git a/app/Console/Commands/SetEnv.php b/app/Console/Commands/SetEnv.php
old mode 100644
new mode 100755
index 9125ffa..3c49403
--- a/app/Console/Commands/SetEnv.php
+++ b/app/Console/Commands/SetEnv.php
@@ -1,9 +1,28 @@
.
+ */
+
namespace App\Console\Commands;
-use Illuminate\Console\Command;
use GeoSot\EnvEditor\Facades\EnvEditor;
+use Illuminate\Console\Command;
class SetEnv extends Command
{
@@ -37,20 +56,16 @@ class SetEnv extends Command
*/
public function handle()
{
- $path = base_path('/.env');
- $key = $this->argument('key');
- $value = $this->argument('value');
+ $path = base_path('/.env');
+ $key = $this->argument('key');
+ $value = $this->argument('value');
+ if (file_exists($path)) {
+ EnvEditor::editKey($key, $value);
+ } else {
+ $this->error('Cannot update a file that doesn\'t exist! Please create .env first.');
-
- if (file_exists($path))
- {
- EnvEditor::editKey($key, $value);
- }
- else
- {
- $this->error('Cannot update a file that doesn\'t exist! Please create .env first.');
- return false;
- }
+ return false;
+ }
}
}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
old mode 100644
new mode 100755
index fdf4d00..a447643
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -1,10 +1,29 @@
.
+ */
+
namespace App\Console;
+use App\Jobs\ProcessDueSuspensions;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
-use App\Jobs\CleanBans;
class Kernel extends ConsoleKernel
{
@@ -31,9 +50,10 @@ class Kernel extends ConsoleKernel
->daily();
// Production value: Every day
- $schedule->job(new CleanBans)
+ $schedule->job(new ProcessDueSuspensions)
->daily();
// Production value: Every day
+ // Development value: Every minute
}
/**
diff --git a/app/CustomFacades/IP.php b/app/CustomFacades/IP.php
old mode 100644
new mode 100755
index 2b04064..8474b80
--- a/app/CustomFacades/IP.php
+++ b/app/CustomFacades/IP.php
@@ -1,12 +1,49 @@
.
+ */
+
namespace App\CustomFacades;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
+use Illuminate\Support\Facades\Log;
class IP
{
+ // Central source of truth for all operations that deal with IP addresses.
+ // For views, this is in a service provider, and is shared with all of them
+ /**
+ * Determines whether you should collect/display IP addresses in the app.
+ * @return bool Whether you should collect/display IPs, in the context in which this is called
+ */
+ public function shouldCollect(): bool
+ {
+ // should collect or display IPs?
+
+ if (config('demo.is_enabled') || config('app.hide_ips'))
+ {
+ return false; // do not collect!
+ }
+
+ return true;
+ }
/**
* Looks up information on a specified IP address. Caches results automatically.
@@ -15,23 +52,25 @@ class IP
*/
public function lookup(string $IP): object
{
-
- $params = [
- 'apiKey' => config('general.keys.ipapi.apikey'),
- 'ip' => $IP
- ];
-
- // TODO: Maybe unwrap this? Methods are chained here
-
- return json_decode(Cache::remember($IP, 3600, function() use ($IP)
- {
- return Http::get(config('general.urls.ipapi.ipcheck'), [
+ $params = [
'apiKey' => config('general.keys.ipapi.apikey'),
- 'ip' => $IP
- ])->body();
- }));
+ 'ip' => $IP,
+ ];
+
+ if ($this->shouldCollect()) {
+ return json_decode(Cache::remember($IP, 3600, function () use ($IP) {
+ return Http::get(config('general.urls.ipapi.ipcheck'), [
+ 'apiKey' => config('general.keys.ipapi.apikey'),
+ 'ip' => $IP,
+ ])->body();
+ }));
+
+ }
+
+ return new class {
+ public $message = "This feature is disabled.";
+ };
}
-
}
diff --git a/app/Events/ApplicationApprovedEvent.php b/app/Events/ApplicationApprovedEvent.php
old mode 100644
new mode 100755
index 4bb005c..066d83c
--- a/app/Events/ApplicationApprovedEvent.php
+++ b/app/Events/ApplicationApprovedEvent.php
@@ -1,13 +1,28 @@
.
+ */
+
namespace App\Events;
use App\Application;
-use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
-use Illuminate\Broadcasting\PresenceChannel;
-use Illuminate\Broadcasting\PrivateChannel;
-use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
@@ -26,6 +41,4 @@ class ApplicationApprovedEvent
{
$this->application = $application;
}
-
-
}
diff --git a/app/Events/ApplicationDeniedEvent.php b/app/Events/ApplicationDeniedEvent.php
old mode 100644
new mode 100755
index fb84a57..48951a3
--- a/app/Events/ApplicationDeniedEvent.php
+++ b/app/Events/ApplicationDeniedEvent.php
@@ -1,13 +1,28 @@
.
+ */
+
namespace App\Events;
use App\Application;
-use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
-use Illuminate\Broadcasting\PresenceChannel;
-use Illuminate\Broadcasting\PrivateChannel;
-use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
@@ -26,5 +41,4 @@ class ApplicationDeniedEvent
{
$this->application = $application;
}
-
}
diff --git a/app/Events/NewApplicationEvent.php b/app/Events/NewApplicationEvent.php
old mode 100644
new mode 100755
index bb67787..867ab50
--- a/app/Events/NewApplicationEvent.php
+++ b/app/Events/NewApplicationEvent.php
@@ -1,12 +1,28 @@
.
+ */
+
namespace App\Events;
-use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
-use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
-use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
diff --git a/app/Events/UserBannedEvent.php b/app/Events/UserBannedEvent.php
old mode 100644
new mode 100755
index 92addbf..05902ad
--- a/app/Events/UserBannedEvent.php
+++ b/app/Events/UserBannedEvent.php
@@ -1,23 +1,36 @@
.
+ */
+
namespace App\Events;
-use Illuminate\Broadcasting\Channel;
+use App\Ban;
+use App\User;
use Illuminate\Broadcasting\InteractsWithSockets;
-use Illuminate\Broadcasting\PresenceChannel;
-use Illuminate\Broadcasting\PrivateChannel;
-use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
-use App\User;
-use App\Ban;
-
class UserBannedEvent
{
use Dispatchable, InteractsWithSockets, SerializesModels;
-
public $user;
public $ban;
@@ -32,5 +45,4 @@ class UserBannedEvent
$this->user = $user;
$this->ban = $ban;
}
-
}
diff --git a/app/Exceptions/AbsenceNotActionableException.php b/app/Exceptions/AbsenceNotActionableException.php
new file mode 100755
index 0000000..0f42c85
--- /dev/null
+++ b/app/Exceptions/AbsenceNotActionableException.php
@@ -0,0 +1,10 @@
+.
+ */
+
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
diff --git a/app/Exceptions/IncompleteApplicationException.php b/app/Exceptions/IncompleteApplicationException.php
new file mode 100755
index 0000000..14966fc
--- /dev/null
+++ b/app/Exceptions/IncompleteApplicationException.php
@@ -0,0 +1,10 @@
+.
+ */
+
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class ContextAwareValidation extends Facade
{
-
- protected static function getFacadeAccessor()
- {
- return 'contextAwareValidator';
- }
-
+ // FIXME: Change to a binding key for L9
+ protected static function getFacadeAccessor()
+ {
+ return 'contextAwareValidator';
+ }
}
diff --git a/app/Facades/DigitalStorageHelper.php b/app/Facades/DigitalStorageHelper.php
new file mode 100755
index 0000000..0ebdee0
--- /dev/null
+++ b/app/Facades/DigitalStorageHelper.php
@@ -0,0 +1,17 @@
+.
+ */
+
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
diff --git a/app/Facades/JSON.php b/app/Facades/JSON.php
new file mode 100755
index 0000000..ec06d71
--- /dev/null
+++ b/app/Facades/JSON.php
@@ -0,0 +1,17 @@
+.
+ */
namespace App\Facades;
-use \Illuminate\Support\Facades\Facade;
+
+use Illuminate\Support\Facades\Facade;
class Options extends Facade
{
diff --git a/app/Facades/UUID.php b/app/Facades/UUID.php
old mode 100644
new mode 100755
index 18699ee..b26e3a3
--- a/app/Facades/UUID.php
+++ b/app/Facades/UUID.php
@@ -1,13 +1,32 @@
.
+ */
+
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
-class UUID extends Facade
+class UUID extends Facade
{
protected static function getFacadeAccessor()
{
return 'uuidConversionFacade';
}
-}
\ No newline at end of file
+}
diff --git a/app/Form.php b/app/Form.php
old mode 100644
new mode 100755
index dc64af2..80220fc
--- a/app/Form.php
+++ b/app/Form.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
@@ -10,7 +29,7 @@ class Form extends Model
'formName',
'formStructure',
- 'formStatus'
+ 'formStatus',
];
diff --git a/app/Helpers/ContextAwareValidator.php b/app/Helpers/ContextAwareValidator.php
old mode 100644
new mode 100755
index f2ffb55..6257255
--- a/app/Helpers/ContextAwareValidator.php
+++ b/app/Helpers/ContextAwareValidator.php
@@ -1,138 +1,141 @@
.
+ */
+
namespace App\Helpers;
-use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Validator;
class ContextAwareValidator
{
-
/**
- * The excludedNames array will make the validator ignore any of these names when including names into the rules.
- * @var array
- */
+ * The excludedNames array will make the validator ignore any of these names when including names into the rules.
+ * @var array
+ */
private $excludedNames = [
- '_token',
- '_method',
- 'formName'
+ '_token',
+ '_method',
+ 'formName',
];
-
/**
- * Utility wrapper for json_encode.
- *
- * @param array $value The array to be converted.
- * @return string The JSON representation of $value
- */
- private function encode(array $value) : string
+ * Utility wrapper for json_encode.
+ *
+ * @param array $value The array to be converted.
+ * @return string The JSON representation of $value
+ */
+ private function encode(array $value): string
{
- return json_encode($value);
+ return json_encode($value);
}
/**
- * The getValidator() method will take an array of fields from the request body, iterates through them,
- * and dynamically adds validation rules for them. Depending on parameters, it may or may not generate
- * a form structure for rendering purposes.
- *
- * This method is mostly meant by internal use by means of static proxies (Facades), in order to reduce code repetition;
- * Using it outside it's directed scope may cause unexpected results; For instance, the method expects inputs to be in array format, e.g. myFieldNameID1[],
- * myFieldNameID2[], and so on and so forth.
- *
- * This isn't checked by the code yet, but if you're implementing it this way in the HTML markup, make sure it's consistent (e.g. use a loop).
- *
- * P.S This method automatically ignores the CSRF token for validation.
- *
- * @param array $fields The request form fields
- * @param bool $generateStructure Whether to incldue a JSON-ready form structure for rendering
- * @param bool $includeFormName Whether to include formName in the list of validation rules
- * @return Validator|Collection A validator instance you can use to check for validity, or a Collection with a validator and structure (validator, structure)
- */
+ * The getValidator() method will take an array of fields from the request body, iterates through them,
+ * and dynamically adds validation rules for them. Depending on parameters, it may or may not generate
+ * a form structure for rendering purposes.
+ *
+ * This method is mostly meant by internal use by means of static proxies (Facades), in order to reduce code repetition;
+ * Using it outside it's directed scope may cause unexpected results; For instance, the method expects inputs to be in array format, e.g. myFieldNameID1[],
+ * myFieldNameID2[], and so on and so forth.
+ *
+ * This isn't checked by the code yet, but if you're implementing it this way in the HTML markup, make sure it's consistent (e.g. use a loop).
+ *
+ * P.S This method automatically ignores the CSRF token for validation.
+ *
+ * @param array $fields The request form fields
+ * @param bool $generateStructure Whether to incldue a JSON-ready form structure for rendering
+ * @param bool $includeFormName Whether to include formName in the list of validation rules
+ * @return Validator|Collection A validator instance you can use to check for validity, or a Collection with a validator and structure (validator, structure)
+ */
public function getValidator(array $fields, bool $generateStructure = false, bool $includeFormName = false)
{
$formStructure = [];
$validator = [];
- if ($includeFormName)
- {
- $validator['formName'] = 'required|string|max:100';
- }
+ if ($includeFormName) {
+ $validator['formName'] = 'required|string';
+ }
- foreach ($fields as $fieldName => $field)
- {
- if(!in_array($fieldName, $this->excludedNames))
- {
- $validator[$fieldName . ".0"] = 'required|string';
- $validator[$fieldName . ".1"] = 'required|string';
+ foreach ($fields as $fieldName => $field) {
+ if (! in_array($fieldName, $this->excludedNames)) {
+ $validator[$fieldName.'.0'] = 'required|string';
+ $validator[$fieldName.'.1'] = 'required|string';
- if ($generateStructure)
- {
+ if ($generateStructure) {
$formStructure['fields'][$fieldName]['title'] = $field[0];
$formStructure['fields'][$fieldName]['type'] = $field[1];
- }
+ }
+ }
+ }
- }
- }
+ $validatorInstance = Validator::make($fields, $validator);
- $validatorInstance = Validator::make($fields, $validator);
-
- return ($generateStructure) ?
+ return ($generateStructure) ?
collect([
- 'validator' => $validatorInstance,
- 'structure' => $this->encode($formStructure)
+ 'validator' => $validatorInstance,
+ 'structure' => $this->encode($formStructure),
])
: $validatorInstance;
-
-
}
/**
- * The getResponseValidator method is similar to the getValidator method; It basically takes
- * an array of fields from a previous form (that probably went through the other method) and adds validation
- * to the field names.
- *
- * Also generates the storable response structure if you tell it to.
- *
- * @param array $fields The received fields
- * @param array $formStructure The form structure - You must supply this if you want the response structure
- * @param bool $generateResponseStructure Whether to generate the response structure
- * @return Validator|Collection A collection or a validator, depending on the args. Will return validatior if only fields are supplied.
- */
+ * The getResponseValidator method is similar to the getValidator method; It basically takes
+ * an array of fields from a previous form (that probably went through the other method) and adds validation
+ * to the field names.
+ *
+ * Also generates the storable response structure if you tell it to.
+ *
+ * @param array $fields The received fields
+ * @param array $formStructure The form structure - You must supply this if you want the response structure
+ * @param bool $generateResponseStructure Whether to generate the response structure
+ * @return Validator|Collection A collection or a validator, depending on the args. Will return validatior if only fields are supplied.
+ */
public function getResponseValidator(array $fields, array $formStructure = [], bool $generateResponseStructure = true)
{
+ $responseStructure = [];
+ $validator = [];
- $responseStructure = [];
- $validator = [];
+ if (empty($formStructure) && $generateResponseStructure) {
+ throw new \InvalidArgumentException('Illegal combination of arguments supplied! Please check the method\'s documentation.');
+ }
- if (empty($formStructure) && $generateResponseStructure)
- {
- throw new \InvalidArgumentException('Illegal combination of arguments supplied! Please check the method\'s documentation.');
- }
+ foreach ($fields as $fieldName => $value) {
+ if (! in_array($fieldName, $this->excludedNames)) {
+ $validator[$fieldName] = 'required|string';
- foreach($fields as $fieldName => $value)
- {
- if(!in_array($fieldName, $this->excludedNames))
- {
- $validator[$fieldName] = 'required|string';
+ if ($generateResponseStructure) {
+ $responseStructure['responses'][$fieldName]['type'] = $formStructure['fields'][$fieldName]['type'] ?? 'Unavailable';
+ $responseStructure['responses'][$fieldName]['title'] = $formStructure['fields'][$fieldName]['title'];
+ $responseStructure['responses'][$fieldName]['response'] = $value;
+ }
+ }
+ }
- if ($generateResponseStructure)
- {
- $responseStructure['responses'][$fieldName]['type'] = $formStructure['fields'][$fieldName]['type'] ?? 'Unavailable';
- $responseStructure['responses'][$fieldName]['title'] = $formStructure['fields'][$fieldName]['title'];
- $responseStructure['responses'][$fieldName]['response'] = $value;
- }
- }
- }
+ $validatorInstance = Validator::make($fields, $validator);
- $validatorInstance = Validator::make($fields, $validator);
-
- return ($generateResponseStructure) ?
+ return ($generateResponseStructure) ?
collect([
- 'validator' => $validatorInstance,
- 'responseStructure' => $this->encode($responseStructure)
+ 'validator' => $validatorInstance,
+ 'responseStructure' => $this->encode($responseStructure),
])
: $validatorInstance;
-
}
-
}
diff --git a/app/Helpers/DigitalStorageHelper.php b/app/Helpers/DigitalStorageHelper.php
new file mode 100755
index 0000000..24637bc
--- /dev/null
+++ b/app/Helpers/DigitalStorageHelper.php
@@ -0,0 +1,107 @@
+value = $value;
+ return $this;
+ }
+
+
+ /**
+ * Converts the digital storage value to kilobytes.
+ *
+ * @return float|int
+ */
+ public function toKilobytes(): float
+ {
+ return $this->value / 1000;
+ }
+
+
+ /**
+ * Converts the digital storage value to megabytes.
+ *
+ * @return float|int
+ */
+ public function toMegabytes(): float
+ {
+ return $this->value / (1 * pow(10, 6)); // 1 times 10 to the power of 6
+ }
+
+
+ /**
+ * Convert the digital storage value to gigabytes. Might be an approximation
+ *
+ * @return float
+ */
+ public function toGigabytes(): float
+ {
+ return $this->value / (1 * pow(10, 9));
+ }
+
+
+ /**
+ * Convert the digital storage value to terabytes.
+ *
+ * @return float
+ */
+ public function toTerabytes(): float
+ {
+ return $this->value / (1 * pow(10, 12));
+ }
+
+
+ /**
+ * Format the digital storage value to one of the units: b, kb, mb, gb and tb.
+ * The method has been adapted to use both MiB and MB values.
+ *
+ * @param int $precision The rounding precision
+ * @param bool $si Use international system units. Defaults to false
+ * @return string The human readable digital storage value, in either, for instance, MB or MiB
+ * @see https://stackoverflow.com/a/2510459/11540218 StackOverflow question regarding unit conversion
+ * @since 7.3.23
+ */
+ public function formatBytes($precision = 2, $si = false): string
+ {
+ $units = ['B', 'KiB', 'MiB', 'GiB', 'TiB'];
+ if ($si)
+ $units = ['B', 'KB', 'MB', 'GB', 'TB'];
+
+ $bytes = max($this->value, 0);
+ $pow = floor(($bytes ? log($bytes) : 0) / log(($si) ? 1000 : 1024));
+ $pow = min($pow, count($units) - 1);
+
+ $bytes /= pow(($si) ? 1000 : 1024, $pow);
+
+ return round($bytes, $precision) . ' ' . $units[$pow];
+ }
+
+}
diff --git a/app/Helpers/JSON.php b/app/Helpers/JSON.php
new file mode 100755
index 0000000..334fb34
--- /dev/null
+++ b/app/Helpers/JSON.php
@@ -0,0 +1,142 @@
+type = $type;
+ return $this;
+ }
+
+ /**
+ * @param mixed $additional
+ */
+ public function setAdditional($additional)
+ {
+ $this->additional = $additional;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAdditional()
+ {
+ return $this->additional;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * @param mixed $status
+ * @return JSON
+ */
+ public function setStatus($status)
+ {
+ $this->status = $status;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMessage()
+ {
+ return $this->message;
+ }
+
+ /**
+ * @param mixed $message
+ * @return JSON
+ */
+ public function setMessage($message)
+ {
+ $this->message = $message;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getCode()
+ {
+ return $this->code;
+ }
+
+ /**
+ * @param mixed $code
+ * @return JSON
+ */
+ public function setCode($code)
+ {
+ $this->code = $code;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getData()
+ {
+ return $this->data;
+ }
+
+ /**
+ * @param mixed $data
+ * @return JSON
+ */
+ public function setData($data)
+ {
+ $this->data = $data;
+ return $this;
+ }
+
+ public function build($headers = [])
+ {
+ // Uses the same structure as model resources, for consistency when they aren't used.
+ $response = [
+ 'data' => $this->getData(),
+ 'meta' => [
+ 'status' => $this->getStatus(),
+ 'message' => $this->getMessage(),
+ ]
+ ];
+
+ if (!empty($this->additional))
+ {
+ foreach($this->additional as $additionalKeyName => $key)
+ {
+ $response[$additionalKeyName] = $key;
+ }
+ }
+ return response($response, $this->getCode(), $headers);
+ }
+
+}
diff --git a/app/Helpers/Options.php b/app/Helpers/Options.php
old mode 100644
new mode 100755
index 13c416d..a1b35e8
--- a/app/Helpers/Options.php
+++ b/app/Helpers/Options.php
@@ -1,43 +1,88 @@
.
+ */
namespace App\Helpers;
+use App\Exceptions\EmptyOptionsException;
+use App\Exceptions\OptionNotFoundException;
use App\Options as Option;
+use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
+/**
+ * The options class. A simple wrapper around the model. Could be a repository, but we're not using that design pattern just yet
+ */
class Options
{
+ /**
+ * Returns an assortment of settings found in the mentioned category
+ *
+ * @param $category The category
+ * @return Collection The settings in this category
+ */
+ public function getCategory(string $category): Collection
+ {
+ $options = Option::where('option_category', $category)->get();
+ if ($options->isEmpty())
+ {
+ throw new EmptyOptionsException('There are no options in category ' . $category);
+ }
+ return $options;
+ }
+
+
public function getOption(string $option): string
{
$value = Cache::get($option);
- if (is_null($value))
- {
- Log::debug('Option ' . $option . 'not found in cache, refreshing from database');
- $value = Option::where('option_name', $option)->first();
- if (is_null($value))
- throw new \Exception('This option does not exist.');
- Cache::put($option, $value);
- Cache::put($option . '_desc', 'Undefined description');
+ if (is_null($value)) {
+ Log::debug('Option '.$option.'not found in cache, refreshing from database');
+ $value = Option::where('option_name', $option)->first();
+ if (is_null($value)) {
+ throw new OptionNotFoundException('This option does not exist.');
+ }
+ Cache::put($option, $value->option_value);
+ Cache::put($option.'_desc', 'Undefined description');
+
+ return $value->option_value;
}
- return $value->option_value;
+ return $value;
}
- public function setOption(string $option, string $value, string $description)
+ // Null categories are settings without categories and will appear ungrouped
+ public function setOption(string $option, string $value, string $description, string $category = null)
{
- Option::create([
- 'option_name' => $option,
- 'option_value' => $value,
- 'friendly_name' => $description
- ]);
+ Option::create([
+ 'option_name' => $option,
+ 'option_value' => $value,
+ 'friendly_name' => $description,
+ 'option_category' => $category
+ ]);
- Cache::put($option, $value, now()->addDay());
- Cache::put($option . '_desc', $description, now()->addDay());
+ Cache::put($option, $value, now()->addDay());
+ Cache::put($option.'_desc', $description, now()->addDay());
}
public function pullOption($option): array
@@ -48,7 +93,7 @@ class Options
// putMany is overkill here
return [
Cache::pull($option),
- Cache::pull($option . '_desc')
+ Cache::pull($option.'_desc'),
];
}
@@ -56,14 +101,13 @@ class Options
{
$dbOption = Option::where('option_name', $option);
- if ($dbOption->first())
- {
+ if ($dbOption->first()) {
$dbOptionInstance = Option::find($dbOption->first()->id);
Cache::forget($option);
Log::debug('Changing db configuration option', [
'old_value' => $dbOptionInstance->option_value,
- 'new_value' => $newValue
+ 'new_value' => $newValue,
]);
$dbOptionInstance->option_value = $newValue;
@@ -71,24 +115,20 @@ class Options
Log::debug('New db configuration option saved',
[
- 'option' => $dbOptionInstance->option_value
+ 'option' => $dbOptionInstance->option_value,
]);
Cache::put('option_name', $newValue, now()->addDay());
- }
- else
- {
- throw new \Exception('This option does not exist.');
+ } else {
+ throw new OptionNotFoundException('This option does not exist.');
}
}
-
public function optionExists(string $option): bool
{
$dbOption = Option::where('option_name', $option)->first();
$locallyCachedOption = Cache::get($option);
- return !is_null($dbOption) || !is_null($locallyCachedOption);
+ return ! is_null($dbOption) || ! is_null($locallyCachedOption);
}
-
}
diff --git a/app/Http/Controllers/AbsenceController.php b/app/Http/Controllers/AbsenceController.php
new file mode 100755
index 0000000..56ec868
--- /dev/null
+++ b/app/Http/Controllers/AbsenceController.php
@@ -0,0 +1,234 @@
+id)->get();
+
+ foreach ($absences as $absence) {
+
+ // Or we could adjust the query (using a model scope) to only return valid absences;
+ // If there are any, refuse to store more, but this approach also works
+ // A model scope that only returns cancelled, declined and ended absences could also be implemented for future use
+ if (in_array($absence->getRawOriginal('status'), ['PENDING', 'APPROVED']))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Display a listing of absences.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function index()
+ {
+ $this->authorize('viewAny', Absence::class);
+
+ return view('dashboard.absences.index')
+ ->with('absences', Absence::paginate(6));
+ }
+
+
+ /**
+ * Display a listing of absences belonging to the current user.
+ *
+ * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
+ * @throws \Illuminate\Auth\Access\AuthorizationException
+ */
+ public function showUserAbsences()
+ {
+ $this->authorize('viewOwn', Absence::class);
+
+ // We can't paginate on the relationship found on the user model
+ $absences = Absence::where('requesterID', Auth::user()->id)->paginate(6);
+
+ return view('dashboard.absences.own')
+ ->with('absences', $absences);
+
+ }
+
+
+
+ /**
+ * Show the form for creating a new absence request.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function create()
+ {
+ $this->authorize('create', Absence::class);
+
+ return view('dashboard.absences.create')
+ ->with('activeRequest', $this->hasActiveRequest(Auth::user()));
+ }
+
+ /**
+ * Store a newly created request in storage.
+ *
+ * @param \App\Http\Requests\StoreAbsenceRequest $request
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function store(StoreAbsenceRequest $request)
+ {
+ $this->authorize('create', Absence::class);
+
+ if ($this->hasActiveRequest(Auth::user())) {
+ return redirect()
+ ->back()
+ ->with('error', __('You already have an active request. Cancel it or let it expire first.'));
+ }
+
+
+ $absence = Absence::create([
+ 'requesterID' => Auth::user()->id,
+ 'start' => $request->start_date,
+ 'predicted_end' => $request->predicted_end,
+ 'available_assist' => $request->available_assist == "on",
+ 'reason' => $request->reason,
+ 'status' => 'PENDING',
+ ]);
+
+ return redirect()
+ ->to(route('absences.show', ['absence' => $absence->id]))
+ ->with('success', 'Absence request submitted for approval. You will receive email confirmation shortly.');
+ }
+
+ /**
+ * Display the specified absence request.
+ *
+ * @param \App\Absence $absence
+ */
+ public function show(Absence $absence)
+ {
+ $this->authorize('view', $absence);
+
+ return view('dashboard.absences.view')
+ ->with([
+ 'absence' => $absence,
+ 'totalDays' => Carbon::parse($absence->start)->diffInDays($absence->predicted_end)
+ ]);
+ }
+
+ /**
+ * Approve the specified absence.
+ *
+ * @param Absence $absence
+ * @return RedirectResponse
+ * @throws \Illuminate\Auth\Access\AuthorizationException
+ */
+ public function approveAbsence(Absence $absence): RedirectResponse
+ {
+ $this->authorize('approve', $absence);
+
+ try
+ {
+ $absence->setApproved();
+ }
+ catch (AbsenceNotActionableException $notActionableException)
+ {
+ return redirect()
+ ->back()
+ ->with('error', $notActionableException->getMessage());
+ }
+
+ return redirect()
+ ->back()
+ ->with('success', __('Absence request successfully approved. It will automatically transition to "Ended" on its predicted end date.'));
+ }
+
+
+ /**
+ * Decline the specified absence.
+ *
+ * @param Absence $absence
+ * @return RedirectResponse
+ * @throws \Illuminate\Auth\Access\AuthorizationException
+ */
+ public function declineAbsence(Absence $absence): RedirectResponse
+ {
+ $this->authorize('decline', $absence);
+
+ try
+ {
+ $absence->setDeclined();
+ } catch (AbsenceNotActionableException $notActionableException)
+ {
+ return redirect()
+ ->back()
+ ->with('error', $notActionableException->getMessage());
+ }
+
+ return redirect()
+ ->back()
+ ->with('success', __('Absence request successfully declined.'));
+ }
+
+
+ /**
+ * Cancel the specified absence.
+ *
+ * @param Absence $absence
+ * @return \Illuminate\Http\RedirectResponse
+ * @throws \Illuminate\Auth\Access\AuthorizationException
+ */
+ public function cancelAbsence(Absence $absence): \Illuminate\Http\RedirectResponse
+ {
+ $this->authorize('cancel', $absence);
+
+ try
+ {
+ $absence->setCancelled();
+ }
+ catch (AbsenceNotActionableException $notActionableException)
+ {
+ return redirect()
+ ->back()
+ ->with('error', $notActionableException->getMessage());
+ }
+
+ return redirect()
+ ->back()
+ ->with('success', __('Absence request successfully cancelled.'));
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param \App\Absence $absence
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function destroy(Absence $absence)
+ {
+ $this->authorize('delete', $absence);
+
+ if ($absence->delete()) {
+ return redirect()
+ ->to(route('absences.index'))
+ ->with('success', __('Absence request deleted.'));
+ }
+ }
+}
diff --git a/app/Http/Controllers/ApplicationController.php b/app/Http/Controllers/ApplicationController.php
old mode 100644
new mode 100755
index bcedc0a..822020b
--- a/app/Http/Controllers/ApplicationController.php
+++ b/app/Http/Controllers/ApplicationController.php
@@ -1,59 +1,58 @@
.
+ */
+
namespace App\Http\Controllers;
use App\Application;
-
-use App\Response;
-use App\Vacancy;
-use App\User;
-
-use App\Events\ApplicationDeniedEvent;
-use App\Notifications\NewApplicant;
-use App\Notifications\ApplicationMoved;
-
+use App\Exceptions\ApplicationNotFoundException;
+use App\Exceptions\IncompleteApplicationException;
+use App\Exceptions\UnavailableApplicationException;
+use App\Exceptions\VacancyNotFoundException;
+use App\Facades\IP;
+use App\Services\ApplicationService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Validator;
-use Illuminate\Support\Facades\App;
-use Illuminate\Support\Facades\Log;
-
-use ContextAwareValidator;
class ApplicationController extends Controller
{
- private function canVote($votes)
- {
- $allvotes = collect([]);
+ private $applicationService;
- foreach ($votes as $vote)
- {
- if ($vote->userID == Auth::user()->id)
- {
- $allvotes->push($vote);
- }
- }
+ public function __construct(ApplicationService $applicationService) {
- return ($allvotes->count() == 1) ? false : true;
+ $this->applicationService = $applicationService;
}
-
public function showUserApps()
{
-
return view('dashboard.user.applications')
->with('applications', Auth::user()->applications);
}
-
public function showUserApp(Request $request, Application $application)
{
$this->authorize('view', $application);
- if (!is_null($application))
- {
+ if (!is_null($application)) {
return view('dashboard.user.viewapp')
->with(
[
@@ -62,210 +61,88 @@ class ApplicationController extends Controller
'structuredResponses' => json_decode($application->response->responseData, true),
'formStructure' => $application->response->form,
'vacancy' => $application->response->vacancy,
- 'canVote' => $this->canVote($application->votes)
+ 'canVote' => $this->applicationService->canVote($application->votes),
]
);
- }
- else
- {
- $request->session()->flash('error', 'The application you requested could not be found.');
+ } else {
+ $request->session()->flash('error', __('The application you requested could not be found.'));
}
return redirect()->back();
+
}
-
-
- public function showAllApps()
+ public function showAllApps(Request $request)
{
$this->authorize('viewAny', Application::class);
return view('dashboard.appmanagement.all')
- ->with('applications', Application::paginate(6));
+ ->with('applications', Application::orderBy('applicationStatus', 'ASC')->paginate(6));
+
}
- public function showAllPendingApps()
+ public function renderApplicationForm($vacancySlug)
{
- $this->authorize('viewAny', Application::class);
-
- return view('dashboard.appmanagement.outstandingapps')
- ->with('applications', Application::where('applicationStatus', 'STAGE_SUBMITTED')->get());
- }
-
-
- public function showPendingInterview()
- {
- $this->authorize('viewAny', Application::class);
- $applications = Application::with('appointment', 'user')->get();
- $count = 0;
-
- $pendingInterviews = collect([]);
- $upcomingInterviews = collect([]);
-
-
- foreach ($applications as $application)
- {
- if (!is_null($application->appointment) && $application->appointment->appointmentStatus == 'CONCLUDED')
- {
- $count =+ 1;
- }
-
- switch ($application->applicationStatus)
- {
- case 'STAGE_INTERVIEW':
- $upcomingInterviews->push($application);
-
- break;
-
- case 'STAGE_INTERVIEW_SCHEDULED':
- $pendingInterviews->push($application);
-
- break;
- }
-
+ try {
+ return $this->applicationService->renderForm($vacancySlug);
}
-
- return view('dashboard.appmanagement.interview')
- ->with([
- 'finishedCount' => $count,
- 'applications' => $pendingInterviews,
- 'upcomingApplications' => $upcomingInterviews
- ]);
- }
-
-
-
- public function showPeerReview()
- {
- $this->authorize('viewAny', Application::class);
- return view('dashboard.appmanagement.peerreview')
- ->with('applications', Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get());
-
- }
-
-
-
- public function renderApplicationForm(Request $request, $vacancySlug)
- {
- // FIXME: Get rid of references to first(), this is a wonky query
- $vacancyWithForm = Vacancy::with('forms')->where('vacancySlug', $vacancySlug)->get();
-
- $firstVacancy = $vacancyWithForm->first();
-
- if (!$vacancyWithForm->isEmpty() && $firstVacancy->vacancyCount !== 0 && $firstVacancy->vacancyStatus == 'OPEN')
- {
-
- return view('dashboard.application-rendering.apply')
- ->with([
-
- 'vacancy' => $vacancyWithForm->first(),
- 'preprocessedForm' => json_decode($vacancyWithForm->first()->forms->formStructure, true)
-
- ]);
+ catch (ApplicationNotFoundException $ex) {
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
}
- else
- {
- abort(404, 'The application you\'re looking for could not be found or it is currently unavailable.');
- }
-
}
-
-
public function saveApplicationAnswers(Request $request, $vacancySlug)
{
- $vacancy = Vacancy::with('forms')->where('vacancySlug', $vacancySlug)->get();
+ try {
- if ($vacancy->first()->vacancyCount == 0 || $vacancy->first()->vacancyStatus !== 'OPEN')
- {
+ $this->applicationService->fillForm(Auth::user(), $request->all(), $vacancySlug);
- $request->session()->flash('error', 'This application is unavailable.');
- return redirect()->back();
+ } catch (VacancyNotFoundException | IncompleteApplicationException | UnavailableApplicationException $e) {
+ return redirect()
+ ->back()
+ ->with('error', $e->getMessage());
}
- Log::info('Processing new application!');
-
- $formStructure = json_decode($vacancy->first()->forms->formStructure, true);
- $responseValidation = ContextAwareValidator::getResponseValidator($request->all(), $formStructure);
-
- Log::info('Built response & validator structure!');
-
- if (!$responseValidation->get('validator')->fails())
- {
- $response = Response::create([
- 'responseFormID' => $vacancy->first()->forms->id,
- 'associatedVacancyID' => $vacancy->first()->id, // Since a form can be used by multiple vacancies, we can only know which specific vacancy this response ties to by using a vacancy ID
- 'responseData' => $responseValidation->get('responseStructure')
- ]);
-
- Log::info('Registered form response for user ' . Auth::user()->name . ' for vacancy ' . $vacancy->first()->vacancyName);
-
- $application = Application::create([
- 'applicantUserID' => Auth::user()->id,
- 'applicantFormResponseID' => $response->id,
- 'applicationStatus' => 'STAGE_SUBMITTED',
- ]);
-
- Log::info('Submitted application for user ' . Auth::user()->name . ' with response ID' . $response->id);
-
- foreach(User::all() as $user)
- {
- if ($user->hasRole('admin'))
- {
- $user->notify((new NewApplicant($application, $vacancy->first()))->delay(now()->addSeconds(10)));
- }
- }
-
- $request->session()->flash('success', 'Thank you for your application! It will be reviewed as soon as possible.');
- return redirect()->to(route('showUserApps'));
- }
- else
- {
- Log::warning('Application form for ' . Auth::user()->name . ' contained errors, resetting!');
- $request->session()->flash('error', 'There are one or more errors in your application. Please make sure none of your fields are empty, since they are all required.');
-
- }
-
- return redirect()->back();
+ return redirect()
+ ->to(route('showUserApps'))
+ ->with('success', __('Thank you! Your application has been processed and our team will get to it shortly.'));
}
public function updateApplicationStatus(Request $request, Application $application, $newStatus)
{
+ $messageIsError = false;
$this->authorize('update', Application::class);
- switch ($newStatus)
+ try {
+ $status = $this->applicationService->updateStatus($application, $newStatus);
+ } catch (\LogicException $ex)
{
- case 'deny':
-
- event(new ApplicationDeniedEvent($application));
- break;
-
- case 'interview':
- Log::info('User ' . Auth::user()->name . ' has moved application ID ' . $application->id . 'to interview stage');
- $request->session()->flash('success', 'Application moved to interview stage! (:');
- $application->setStatus('STAGE_INTERVIEW');
-
- $application->user->notify(new ApplicationMoved());
- break;
-
- default:
- $request->session()->flash('error', 'There are no suitable statuses to update to. Do not mess with the URL.');
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
}
- return redirect()->back();
+ return redirect()
+ ->back()
+ ->with('success', $status);
}
+ /**
+ * @throws \Illuminate\Auth\Access\AuthorizationException
+ * @throws \Exception
+ */
public function delete(Request $request, Application $application)
{
+ $this->authorize('delete', $application);
+ $this->applicationService->delete($application);
- $this->authorize('delete', $application);
- $application->delete(); // observers will run, cleaning it up
-
- $request->session()->flash('success', 'Application deleted. Comments, appointments and responses have also been deleted.');
- return redirect()->back();
+ return redirect()
+ ->back()
+ ->with('success', __('Application deleted. Comments, appointments and responses have also been deleted.'));
}
-
}
diff --git a/app/Http/Controllers/AppointmentController.php b/app/Http/Controllers/AppointmentController.php
old mode 100644
new mode 100755
index 8ed2722..2a8f19b
--- a/app/Http/Controllers/AppointmentController.php
+++ b/app/Http/Controllers/AppointmentController.php
@@ -1,94 +1,124 @@
.
+ */
+
namespace App\Http\Controllers;
use App\Application;
-use App\Http\Requests\SaveNotesRequest;
-use Carbon\Carbon;
-use Illuminate\Http\Request;
use App\Appointment;
-use App\Notifications\ApplicationMoved;
-use App\Notifications\AppointmentScheduled;
-use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Log;
+use App\Exceptions\InvalidAppointmentException;
+use App\Exceptions\InvalidAppointmentStatusException;
+use App\Http\Requests\CancelAppointmentRequest;
+use App\Http\Requests\SaveNotesRequest;
+use App\Services\AppointmentService;
+use App\Services\MeetingNoteService;
+use Carbon\Carbon;
+use Illuminate\Auth\Access\AuthorizationException;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
class AppointmentController extends Controller
{
- private $allowedPlatforms = [
- 'ZOOM',
- 'DISCORD',
- 'SKYPE',
- 'MEET',
- 'TEAMSPEAK'
+ private $appointmentService;
+ private $meetingNoteService;
- ];
- public function saveAppointment(Request $request, Application $application)
+ public function __construct(AppointmentService $appointmentService, MeetingNoteService $meetingNoteService) {
+
+ $this->appointmentService = $appointmentService;
+ $this->meetingNoteService = $meetingNoteService;
+ }
+
+ public function saveAppointment(Request $request, Application $application): RedirectResponse
{
$this->authorize('create', Appointment::class);
+
$appointmentDate = Carbon::parse($request->appointmentDateTime);
+ $this->appointmentService->createAppointment($application, $appointmentDate, $request->appointmentDescription, $request->appointmentLocation);
- $appointment = Appointment::create([
- 'appointmentDescription' => $request->appointmentDescription,
- 'appointmentDate' => $appointmentDate->toDateTimeString(),
- 'applicationID' => $application->id,
- 'appointmentLocation' => (in_array($request->appointmentLocation, $this->allowedPlatforms)) ? $request->appointmentLocation : 'DISCORD',
- ]);
- $application->setStatus('STAGE_INTERVIEW_SCHEDULED');
-
-
- Log::info('User ' . Auth::user()->name . ' has scheduled an appointment with ' . $application->user->name . ' for application ID' . $application->id, [
- 'datetime' => $appointmentDate->toDateTimeString(),
- 'scheduled' => now()
- ]);
-
- $application->user->notify(new AppointmentScheduled($appointment));
- $request->session()->flash('success', 'Appointment successfully scheduled @ ' . $appointmentDate->toDateTimeString());
-
-
- return redirect()->back();
+ return redirect()
+ ->back()
+ ->with('success',__('Appointment successfully scheduled @ :appointmentTime', ['appointmentTime', $appointmentDate->toDateTimeString()]));
}
- public function updateAppointment(Request $request, Application $application, $status)
+ /**
+ * @throws AuthorizationException
+ */
+ public function updateAppointment(Application $application, string $status): RedirectResponse
{
- $this->authorize('update', $application->appointment);
+ $this->authorize('update', $application->appointment);
- $validStatuses = [
- 'SCHEDULED',
- 'CONCLUDED'
- ];
+ try {
+ $this->appointmentService->updateAppointment($application, $status);
- // NOTE: This is a little confusing, refactor
- $application->appointment->appointmentStatus = (in_array($status, $validStatuses)) ? strtoupper($status) : 'SCHEDULED';
- $application->appointment->save();
+ return redirect()
+ ->back()
+ ->with('success', __("Interview finished! Staff members can now vote on it."));
- $application->setStatus('STAGE_PEERAPPROVAL');
- $application->user->notify(new ApplicationMoved());
-
-
- $request->session()->flash('success', 'Interview finished! Staff members can now vote on it.');
- return redirect()->back();
+ }
+ catch (InvalidAppointmentStatusException $ex) {
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
+ }
}
- // also updates
+ public function deleteAppointment(CancelAppointmentRequest $request, Application $application)
+ {
+ $this->authorize('update', $application->appointment);
+
+ try {
+
+ $this->appointmentService->deleteAppointment($application, $request->reason);
+
+ return redirect()
+ ->back()
+ ->with('success', __('Appointment cancelled.'));
+
+ }
+ catch (\Exception $ex) {
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
+ }
+
+
+ }
+
+
+
public function saveNotes(SaveNotesRequest $request, Application $application)
{
- if (!is_null($application))
- {
- $application->load('appointment');
+ try {
- $application->appointment->meetingNotes = $request->noteText;
- $application->appointment->save();
+ $this->meetingNoteService->addToApplication($application, $request->noteText);
- $request->session()->flash('success', 'Meeting notes have been saved.');
+ return redirect()
+ ->back()
+ ->with('success', 'Saved notes.');
+
+ } catch (InvalidAppointmentException $ex) {
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
}
- else
- {
- $request->session()->flash('error', 'There\'s no appointment to save notes to!');
- }
-
- return redirect()->back();
}
-
}
diff --git a/app/Http/Controllers/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Auth/ConfirmPasswordController.php
old mode 100644
new mode 100755
index 71a9592..10760cc
--- a/app/Http/Controllers/Auth/ConfirmPasswordController.php
+++ b/app/Http/Controllers/Auth/ConfirmPasswordController.php
@@ -1,9 +1,27 @@
.
+ */
+
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
-use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php
old mode 100644
new mode 100755
index 465c39c..2ddd570
--- a/app/Http/Controllers/Auth/ForgotPasswordController.php
+++ b/app/Http/Controllers/Auth/ForgotPasswordController.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php
old mode 100644
new mode 100755
index 47413e2..e9f81a1
--- a/app/Http/Controllers/Auth/LoginController.php
+++ b/app/Http/Controllers/Auth/LoginController.php
@@ -1,12 +1,33 @@
.
+ */
+
namespace App\Http\Controllers\Auth;
-use App\User;
use App\Http\Controllers\Controller;
-use App\Providers\RouteServiceProvider;
+use App\User;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Log;
+use App\Facades\IP;
+use Laravel\Socialite\Facades\Socialite;
class LoginController extends Controller
{
@@ -48,22 +69,38 @@ class LoginController extends Controller
{
$user = User::where('email', $request->email)->first();
- if ($user)
- {
+ if ($user) {
$isBanned = $user->isBanned();
- if ($isBanned)
- {
+ if ($isBanned) {
return false;
- }
- else
- {
+ } else {
return $this->originalAttemptLogin($request);
}
}
return $this->originalAttemptLogin($request);
-
}
+ public function authenticated(Request $request, User $user)
+ {
+ if (IP::shouldCollect()) {
+ if ($user->originalIP !== $request->ip())
+ {
+ Log::alert('User IP address changed from last login. Updating.', [
+ 'prev' => $user->originalIP,
+ 'new' => $request->ip()
+ ]);
+ $user->originalIP = $request->ip();
+ $user->save();
+ }
+ }
+ }
+ public function discordRedirect() {
+ return Socialite::driver('discord')->redirect();
+ }
+
+ public function discordCallback() {
+ // TODO;
+ }
}
diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php
old mode 100644
new mode 100755
index c6b3364..e02398d
--- a/app/Http/Controllers/Auth/RegisterController.php
+++ b/app/Http/Controllers/Auth/RegisterController.php
@@ -1,15 +1,34 @@
.
+ */
+
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Profile;
-use App\Providers\RouteServiceProvider;
use App\User;
+use App\Facades\Options;
+use App\Facades\IP;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
-use function GuzzleHttp\Psr7\str;
class RegisterController extends Controller
{
@@ -47,10 +66,8 @@ class RegisterController extends Controller
{
$users = User::where('originalIP', \request()->ip())->get();
- foreach($users as $user)
- {
- if ($user && $user->isBanned())
- {
+ foreach ($users as $user) {
+ if ($user && $user->isBanned()) {
abort(403, 'You do not have permission to access this page.');
}
}
@@ -66,13 +83,32 @@ class RegisterController extends Controller
*/
protected function validator(array $data)
{
+ $password = ['required', 'string', 'confirmed'];
+
+ switch (Options::getOption('pw_security_policy'))
+ { // this could be better structured, switch doesn't feel right
+ case 'off':
+ $password = ['required', 'string', 'confirmed'];
+ break;
+ case 'low':
+ $password = ['required', 'string', 'min:10', 'confirmed'];
+ break;
+
+ case 'medium':
+ $password = ['required', 'string', 'confirmed', 'regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[#?!@$%^&*-]).{12,}$/'];
+ break;
+
+ case 'high':
+ $password = ['required', 'string', 'confirmed', 'regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{20,}$/'];
+ }
+
return Validator::make($data, [
- 'uuid' => ['required', 'string', 'unique:users', 'min:32', 'max:32'],
+ 'uuid' => (Options::getOption('requireGameLicense') && Options::getOption('currentGame') == 'MINECRAFT') ? ['required', 'string', 'unique:users', 'min:32', 'max:32'] : ['nullable', 'string'],
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
- 'password' => ['required', 'string', 'min:10', 'confirmed', 'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$/'],
+ 'password' => $password,
], [
- 'uuid.required' => 'Please enter a valid (and Premium) Minecraft username! We do not support cracked users.'
+ 'uuid.required' => 'Please enter a valid (and Premium) Minecraft username! We do not support cracked users.',
]);
}
@@ -84,19 +120,16 @@ class RegisterController extends Controller
*/
protected function create(array $data)
{
-
$user = User::create([
- 'uuid' => $data['uuid'],
+ 'uuid' => $data['uuid'] ?? "disabled",
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
- 'originalIP' => request()->ip()
+ 'originalIP' => IP::shouldCollect() ? request()->ip() : '0.0.0.0',
]);
- // It's not the registration controller's concern to create a profile for the user,
- // so this code has been moved to it's respective observer, following the separation of concerns pattern.
-
$user->assignRole('user');
+
return $user;
}
}
diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php
old mode 100644
new mode 100755
index 6c0c13a..bbf75a7
--- a/app/Http/Controllers/Auth/ResetPasswordController.php
+++ b/app/Http/Controllers/Auth/ResetPasswordController.php
@@ -1,9 +1,27 @@
.
+ */
+
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
-use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
diff --git a/app/Http/Controllers/Auth/TwofaController.php b/app/Http/Controllers/Auth/TwofaController.php
old mode 100644
new mode 100755
index a3ecac9..d8bad0e
--- a/app/Http/Controllers/Auth/TwofaController.php
+++ b/app/Http/Controllers/Auth/TwofaController.php
@@ -1,16 +1,32 @@
.
+ */
+
namespace App\Http\Controllers\Auth;
-use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Traits\AuthenticatesTwoFactor;
class TwofaController extends Controller
{
- use AuthenticatesTwoFactor;
-
-
- protected $redirectTo = '/dashboard';
+ use AuthenticatesTwoFactor;
+ protected $redirectTo = '/dashboard';
}
diff --git a/app/Http/Controllers/Auth/VerificationController.php b/app/Http/Controllers/Auth/VerificationController.php
old mode 100644
new mode 100755
index 482a167..74be54b
--- a/app/Http/Controllers/Auth/VerificationController.php
+++ b/app/Http/Controllers/Auth/VerificationController.php
@@ -1,9 +1,27 @@
.
+ */
+
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
-use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
diff --git a/app/Http/Controllers/BanController.php b/app/Http/Controllers/BanController.php
old mode 100644
new mode 100755
index 3ae2a42..97075d3
--- a/app/Http/Controllers/BanController.php
+++ b/app/Http/Controllers/BanController.php
@@ -1,92 +1,86 @@
.
+ */
+
namespace App\Http\Controllers;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
use App\Ban;
-use App\User;
use App\Events\UserBannedEvent;
use App\Http\Requests\BanUserRequest;
+use App\Services\AccountSuspensionService;
+use App\User;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
class BanController extends Controller
{
+ protected $suspensionService;
+
+ public function __construct(AccountSuspensionService $suspensionService)
+ {
+ // Inject the service via DI
+ $this->suspensionService = $suspensionService;
+ }
+
public function insert(BanUserRequest $request, User $user)
{
+ if (config('demo.is_enabled')) {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
$this->authorize('create', [Ban::class, $user]);
- if (is_null($user->bans))
- {
- $reason = $request->reason;
- $duration = strtolower($request->durationOperator);
- $durationOperand = $request->durationOperand;
+ if (!$this->suspensionService->isSuspended($user)) {
- $expiryDate = now();
+ $this->suspensionService->suspend($request->reason, $request->duration, $user, $request->suspensionType);
+ $request->session()->flash('success', __('Account suspended.'));
- if (!empty($duration))
- {
- switch($duration)
- {
- case 'days':
- $expiryDate->addDays($durationOperand);
- break;
+ } else {
- case 'weeks':
- $expiryDate->addWeeks($durationOperand);
- break;
-
- case 'months':
- $expiryDate->addMonths($durationOperand);
- break;
-
- case 'years':
- $expiryDate->addYears($durationOperand);
- break;
- }
- }
- else
- {
- // Essentially permanent
- $expiryDate->addYears(5);
- }
-
- $ban = Ban::create([
- 'userID' => $user->id,
- 'reason' => $reason,
- 'bannedUntil' => $expiryDate->format('Y-m-d H:i:s'),
- 'userAgent' => "Unknown",
- 'authorUserID' => Auth::user()->id
- ]);
-
- event(new UserBannedEvent($user, $ban));
- $request->session()->flash('success', 'User banned successfully! Ban ID: #' . $ban->id);
-
- }
- else
- {
- $request->session()->flash('error', 'User already banned!');
+ $request->session()->flash('error', __('Account already suspended!'));
}
return redirect()->back();
}
-
public function delete(Request $request, User $user)
{
+ if (config('demo.is_enabled')) {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
$this->authorize('delete', $user->bans);
- if (!is_null($user->bans))
- {
- $user->bans->delete();
- $request->session()->flash('success', 'User unbanned successfully!');
- }
- else
- {
- $request->session()->flash('error', 'This user isn\'t banned!');
+ if ($this->suspensionService->isSuspended($user)) {
+
+ $this->suspensionService->unsuspend($user);
+ $request->session()->flash('success', __('Account unsuspended successfully!'));
+
+ } else {
+ $request->session()->flash('error', __('This account isn\'t suspended!'));
}
return redirect()->back();
diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php
old mode 100644
new mode 100755
index 09d2aa2..609c0e3
--- a/app/Http/Controllers/CommentController.php
+++ b/app/Http/Controllers/CommentController.php
@@ -1,57 +1,62 @@
.
+ */
+
namespace App\Http\Controllers;
+use App\Application;
+use App\Comment;
+use App\Http\Requests\NewCommentRequest;
+use App\Services\CommentService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
-use App\Http\Requests\NewCommentRequest;
-
-use App\Comment;
-use App\Application;
-use App\Notifications\NewComment;
-use App\User;
class CommentController extends Controller
{
+ private $commentService;
- public function index()
- {
- //
+ public function __construct(CommentService $commentService) {
+ $this->commentService = $commentService;
}
public function insert(NewCommentRequest $request, Application $application)
{
$this->authorize('create', Comment::class);
+ $comment = $this->commentService->addComment($application, $request->comment);
- $comment = Comment::create([
- 'authorID' => Auth::user()->id,
- 'applicationID' => $application->id,
- 'text' => $request->comment
- ]);
-
- if ($comment)
- {
-
- $request->session()->flash('success', 'Comment posted! (:');
- }
- else
- {
- $request->session()->flash('error', 'Something went wrong while posting your comment!');
+ if ($comment) {
+ $request->session()->flash('success', __('Comment posted!'));
+ } else {
+ $request->session()->flash('error', __('Something went wrong while posting your comment!'));
}
return redirect()->back();
-
}
public function delete(Request $request, Comment $comment)
{
$this->authorize('delete', $comment);
+ $this->commentService->deleteComment($comment);
- $comment->delete();
- $request->session()->flash('success', 'Comment deleted!');
-
- return redirect()->back();
-
+ return redirect()
+ ->back()
+ ->with('success', __('Comment deleted!'));
}
-
}
diff --git a/app/Http/Controllers/ContactController.php b/app/Http/Controllers/ContactController.php
old mode 100644
new mode 100755
index 7a2923f..b081aee
--- a/app/Http/Controllers/ContactController.php
+++ b/app/Http/Controllers/ContactController.php
@@ -1,65 +1,63 @@
.
+ */
+
namespace App\Http\Controllers;
-use Illuminate\Http\Request;
-use GuzzleHttp;
+use App\Exceptions\FailedCaptchaException;
use App\Notifications\NewContact;
-use Illuminate\Support\Facades\Http;
-
+use App\Services\ContactService;
use App\User;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Http;
class ContactController extends Controller
{
-
protected $users;
+ private $contactService;
- public function __construct(User $users)
+ public function __construct(User $users, ContactService $contactService)
{
+ $this->contactService = $contactService;
$this->users = $users;
}
-
public function create(Request $request)
{
- $name = $request->name;
- $email = $request->email;
- $subject = $request->subject;
- $msg = $request->msg;
+ try {
- $challenge = $request->input('captcha');
+ $email = $request->email;
+ $msg = $request->msg;
+ $challenge = $request->input('captcha');
- // TODO: now: add middleware for this verification, move to invisible captcha
- $verifyrequest = Http::asForm()->post(config('recaptcha.verify.apiurl'), [
- 'secret' => config('recaptcha.keys.secret'),
- 'response' => $challenge,
- 'remoteip' => $request->ip()
- ]);
+ $this->contactService->sendMessage($request->ip(), $msg, $email, $challenge);
+ return redirect()
+ ->back()
+ ->with('success',__('Message sent successfully! We usually respond within 48 hours.'));
- $response = json_decode($verifyrequest->getBody(), true);
-
- if (!$response['success'])
- {
- $request->session()->flash('error', 'Beep beep boop... Robot? Submission failed.');
- return redirect()->back();
+ } catch (FailedCaptchaException $ex) {
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
}
-
-
- foreach(User::all() as $user)
- {
- if ($user->hasRole('admin'))
- {
- $user->notify(new NewContact(collect([
- 'message' => $msg,
- 'ip' => $request->ip(),
- 'email' => $email
- ])));
- }
- }
-
- $request->session()->flash('success', 'Message sent successfully! We usually respond within 48 hours.');
- return redirect()->back();
}
}
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
old mode 100644
new mode 100755
index a0a2a8a..5f92f69
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php
old mode 100644
new mode 100755
index d397d89..cb946e1
--- a/app/Http/Controllers/DashboardController.php
+++ b/app/Http/Controllers/DashboardController.php
@@ -1,31 +1,61 @@
.
+ */
+
namespace App\Http\Controllers;
-use Illuminate\Http\Request;
-use App\Vacancy;
-use App\User;
-use App\Ban;
use App\Application;
+use App\User;
+use App\Vacancy;
+use Illuminate\Support\Facades\Auth;
class DashboardController extends Controller
{
+ // Note: The dashboard doesn't need a service because it doesn't contain any significant business logic
public function index()
{
$totalPeerReview = Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get()->count();
$totalNewApplications = Application::where('applicationStatus', 'STAGE_SUBMITTED')->get()->count();
$totalDenied = Application::where('applicationStatus', 'DENIED')->get()->count();
+ $vacancies = Vacancy::where('vacancyStatus', '<>', 'CLOSED')->get();
+
+ $totalDeniedSingle = Application::where([
+ ['applicationStatus', '=', 'DENIED'],
+ ['applicantUserID', '=', Auth::user()->id]
+ ])->get();
+
+ $totalNewSingle = Application::where([
+ ['applicationStatus', '=', 'STAGE_SUBMITTED'],
+ ['applicantUserID', '=', Auth::user()->id]
+ ])->get();
return view('dashboard.dashboard')
->with([
- 'vacancies' => Vacancy::all(),
- 'totalUserCount' => User::all()->count(),
- 'totalDenied' => $totalDenied,
- 'totalPeerReview' => $totalPeerReview,
- 'totalNewApplications' => $totalNewApplications
+ 'vacancies' => $vacancies,
+ 'totalUserCount' => User::all()->count(),
+ 'totalDenied' => $totalDenied,
+ 'totalPeerReview' => $totalPeerReview,
+ 'totalNewApplications' => $totalNewApplications,
+ 'totalNewSingle' => $totalNewSingle->count(),
+ 'totalDeniedSingle' => $totalDeniedSingle->count()
]);
-
}
-
}
diff --git a/app/Http/Controllers/DevToolsController.php b/app/Http/Controllers/DevToolsController.php
old mode 100644
new mode 100755
index 5c82d26..cd33d7d
--- a/app/Http/Controllers/DevToolsController.php
+++ b/app/Http/Controllers/DevToolsController.php
@@ -1,48 +1,108 @@
.
+ */
+
namespace App\Http\Controllers;
use App\Application;
use App\Events\ApplicationApprovedEvent;
+use App\Events\ApplicationDeniedEvent;
+use App\Services\AccountSuspensionService;
use Illuminate\Http\Request;
-
+use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Auth;
class DevToolsController extends Controller
{
-
- // The use case for Laravel's gate and/or validation Requests is so tiny here that a full-blown policy would be overkill.
- protected function isolatedAuthorise()
- {
- if (!Auth::user()->can('admin.developertools.use'))
- {
- abort(403, 'You\'re not authorized to access this page.');
- }
+ public function __construct() {
+ //
}
- public function index()
- {
- $this->isolatedAuthorise();
+ private function singleAuthorise() {
+ if (! Auth::user()->can('admin.developertools.use')) {
+ abort(403, __('You\'re not authorized to access this page.'));
+ }
+ }
+
+ public function index() {
+ $this->singleAuthorise();
+
return view('dashboard.administration.devtools')
- ->with('applications', Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get());
+ ->with('applications', Application::where('applicationStatus', 'STAGE_PEERAPPROVAL')->get())
+ ->with('rejectApplications', Application::all());
}
- public function forceVoteCount(Request $request)
- {
- $this->isolatedAuthorise();
+ /**
+ * Force an application to be approved.
+ */
+ public function forceApprovalEvent(Request $request) {
+ $this->singleAuthorise();
$application = Application::find($request->application);
- if (!is_null($application))
- {
- event(new ApplicationApprovedEvent($application));
+ event(new ApplicationApprovedEvent($application));
- $request->session()->flash('success', 'Event dispatched! Please check the debug logs for more info');
- }
- else
- {
- $request->session()->flash('error', 'Application doesn\'t exist!');
+ return redirect()
+ ->back()
+ ->with('success', __('Event dispatched; Candidate approval sequence initiated.'));
+ }
+
+ /**
+ * Force an application to be rejected.
+ */
+ public function forceRejectionEvent(Request $request)
+ {
+ $this->singleAuthorise();
+ $application = Application::findOrFail($request->application);
+
+ event(new ApplicationDeniedEvent($application));
+
+ return redirect()
+ ->back()
+ ->with('success', __('Event dispatched; Candidate rejection sequence initiated.'));
+ }
+
+ public function evaluateVotes() {
+
+ $this->singleAuthorise();
+
+ $code = Artisan::call("votes:evaluate");
+
+ return redirect()
+ ->back()
+ ->with('success', 'Ran vote evaluation logic, with exit code ' . $code);
+
+ }
+
+ public function purgeSuspensions(AccountSuspensionService $service) {
+
+ $this->singleAuthorise();
+
+ if ($service->purgeExpired()) {
+ return redirect()
+ ->back()
+ ->with('success', 'Force purged all expired suspensions.');
}
- return redirect()->back();
+ return redirect()
+ ->back()
+ ->with('error', 'There were no expired suspensions (or no suspensions at all) to purge.');
+
}
}
diff --git a/app/Http/Controllers/FormController.php b/app/Http/Controllers/FormController.php
old mode 100644
new mode 100755
index 27d40dd..366475f
--- a/app/Http/Controllers/FormController.php
+++ b/app/Http/Controllers/FormController.php
@@ -1,16 +1,40 @@
.
+ */
+
namespace App\Http\Controllers;
+use App\Exceptions\EmptyFormException;
+use App\Exceptions\FormHasConstraintsException;
use App\Form;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Validator;
-use Illuminate\Support\Facades\Auth;
-
+use App\Services\FormManagementService;
use ContextAwareValidator;
+use Illuminate\Http\Request;
class FormController extends Controller
{
+ private $formService;
+
+ public function __construct(FormManagementService $formService) {
+ $this->formService = $formService;
+ }
public function index()
{
@@ -24,61 +48,52 @@ class FormController extends Controller
public function showFormBuilder()
{
$this->authorize('viewFormbuilder', Form::class);
+
return view('dashboard.administration.formbuilder');
}
public function saveForm(Request $request)
{
-
- $this->authorize('create', Form::class);
- $fields = $request->all();
-
- $contextValidation = ContextAwareValidator::getValidator($fields, true, true);
-
- if (!$contextValidation->get('validator')->fails())
+ try {
+ $form = $this->formService->addForm($request->all());
+ }
+ catch (EmptyFormException $ex)
{
- $storableFormStructure = $contextValidation->get('structure');
-
- Form::create(
- [
- 'formName' => $fields['formName'],
- 'formStructure' => $storableFormStructure,
- 'formStatus' => 'ACTIVE'
- ]
- );
-
- $request->session()->flash('success', 'Form created! You can now link this form to a vacancy.');
- return redirect()->to(route('showForms'));
+ return redirect()
+ ->back()
+ ->with('exception', $ex->getMessage());
}
- $request->session()->flash('errors', $contextValidation->get('validator')->errors()->getMessages());
- return redirect()->back();
+ // Form is boolean or array
+ if ($form)
+ {
+ return redirect()
+ ->back()
+ ->with('success', __('Form created!'));
+ }
+
+ return redirect()
+ ->back()
+ ->with('errors', $form);
}
public function destroy(Request $request, Form $form)
{
$this->authorize('delete', $form);
- $deletable = true;
+ try {
+ $this->formService->deleteForm($form);
+ return redirect()
+ ->back()
+ ->with('success', __('Form deleted successfuly'));
+
+ } catch (FormHasConstraintsException $ex) {
+
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
- if (!is_null($form) && !is_null($form->vacancies) && $form->vacancies->count() !== 0 || !is_null($form->responses))
- {
- $deletable = false;
}
-
- if ($deletable)
- {
- $form->delete();
-
- $request->session()->flash('success', 'Form deleted successfully.');
- }
- else
- {
- $request->session()->flash('error', 'You cannot delete this form because it\'s tied to one or more applications and ranks, or because it doesn\'t exist.');
- }
-
- return redirect()->back();
-
}
public function preview(Request $request, Form $form)
@@ -93,9 +108,9 @@ class FormController extends Controller
public function edit(Request $request, Form $form)
{
- $this->authorize('update', $form);
+ $this->authorize('update', $form);
- return view('dashboard.administration.editform')
+ return view('dashboard.administration.editform')
->with('formStructure', json_decode($form->formStructure, true))
->with('title', $form->formName)
->with('formID', $form->id);
@@ -103,29 +118,16 @@ class FormController extends Controller
public function update(Request $request, Form $form)
{
- $this->authorize('update', $form);
+ $this->authorize('update', $form);
+ $updatedForm = $this->formService->updateForm($form, $request->all());
- $contextValidation = ContextAwareValidator::getValidator($request->all(), true);
- $this->authorize('update', $form);
-
-
- if (!$contextValidation->get('validator')->fails())
- {
- // Add the new structure into the form. New, subsquent fields will be identified by the "new" prefix
- // This prefix doesn't actually change the app's behavior when it receives applications.
- // Additionally, old applications won't of course display new and updated fields, because we can't travel into the past and get data for them
- $form->formStructure = $contextValidation->get('structure');
- $form->save();
-
- $request->session()->flash('success', 'Hooray! Your form was updated. New applications for it\'s vacancy will use it.');
- }
- else
- {
- $request->session()->flash('errors', $contextValidation->get('validator')->errors()->getMessages());
- }
-
- return redirect()->to(route('previewForm', ['form' => $form->id]));
+ if ($updatedForm instanceof Form) {
+ return redirect()->to(route('previewForm', ['form' => $updatedForm->id]));
+ }
+ // array of errors
+ return redirect()
+ ->back()
+ ->with('errors', $updatedForm);
}
-
}
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
old mode 100644
new mode 100755
index 1afc222..f79d199
--- a/app/Http/Controllers/HomeController.php
+++ b/app/Http/Controllers/HomeController.php
@@ -1,13 +1,32 @@
.
+ */
+
namespace App\Http\Controllers;
use App\Vacancy;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\DB;
class HomeController extends Controller
{
+ // doesn't need a service, because it doesn't contain major logic.
+
/**
* Show the application dashboard.
*
@@ -15,13 +34,18 @@ class HomeController extends Controller
*/
public function index()
{
-
$positions = Vacancy::where('vacancyStatus', 'OPEN')
->where('vacancyCount', '<>', 0)
->get();
-
return view('home')
->with('positions', $positions);
}
+
+ public function pageGiveaway()
+ {
+
+ return view('giveaway');
+
+ }
}
diff --git a/app/Http/Controllers/OptionsController.php b/app/Http/Controllers/OptionsController.php
old mode 100644
new mode 100755
index c76a57c..10b03e7
--- a/app/Http/Controllers/OptionsController.php
+++ b/app/Http/Controllers/OptionsController.php
@@ -1,16 +1,45 @@
.
+ */
+
namespace App\Http\Controllers;
+use App\Exceptions\InvalidGamePreferenceException;
+use App\Exceptions\OptionNotFoundException;
use App\Facades\Options;
use App\Options as Option;
-
+use App\Services\ConfigurationService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class OptionsController extends Controller
{
+ private $configurationService;
+
+ public function __construct(ConfigurationService $configurationService) {
+
+ $this->configurationService = $configurationService;
+
+ }
+
/**
* Display a listing of the resource.
*
@@ -18,60 +47,59 @@ class OptionsController extends Controller
*/
public function index()
{
- // TODO: Obtain this from the facade
- $options = Option::all();
-
-
+ // TODO: Replace with settings package
return view('dashboard.administration.settings')
- ->with('options', $options);
+ ->with([
+ 'options' => Options::getCategory('notifications'),
+ 'security' => [ // We could use the method above, but we need to set these names here for greater control in the template. This would nto be feasible for many options, we'd need to use a loop and the category method.
+ 'secPolicy' => Options::getOption('pw_security_policy'),
+ 'graceperiod' => Options::getOption('graceperiod'),
+ 'pwExpiry' => Options::getOption('password_expiry'),
+ 'requiresPMC' => Options::getOption('requireGameLicense'),
+ 'enforce2fa' => Options::getOption('force2fa')
+ ],
+ 'currentGame' => Options::getOption('currentGame')
+ ]);
}
- public function saveSettings(Request $request)
- {
- if (Auth::user()->can('admin.settings.edit'))
- {
- Log::debug('Updating application options', [
- 'ip' => $request->ip(),
- 'ua' => $request->userAgent(),
- 'username' => Auth::user()->username
- ]);
- foreach($request->all() as $optionName => $option)
- {
- try
- {
- Log::debug('Going through option ' . $optionName);
- if (Options::optionExists($optionName))
- {
- Log::debug('Option exists, updating to new values', [
- 'opt' => $optionName,
- 'new_value' => $option
- ]);
- Options::changeOption($optionName, $option);
- }
- }
- catch(\Exception $ex)
- {
- Log::error('Unable to update options!', [
- 'msg' => $ex->getMessage(),
- 'trace' => $ex->getTraceAsString()
- ]);
- report($ex);
+ public function saveSettings(Request $request): \Illuminate\Http\RedirectResponse
+ {
+ try {
- $errorCond = true;
- $request->session()->flash('error', 'An error occurred while trying to save settings: ' . $ex->getMessage());
- }
- }
+ if (Auth::user()->can('admin.settings.edit')) {
+ $this->configurationService->saveConfiguration($request->all());
- if (!isset($errorCond))
- {
- $request->session()->flash('success', 'Settings saved successfully!');
- }
- }
- else
- {
- $request->session()->flash('error', 'You do not have permission to update this resource.');
- }
+ return redirect()
+ ->back()
+ ->with('success', __('Options updated successfully!'));
+ }
- return redirect()->back();
- }
+ } catch (OptionNotFoundException | \Exception $ex) {
+
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
+
+ }
+
+ return redirect()
+ ->back()
+ ->with('error', __('You do not have permission to update this resource.'));
+ }
+
+ public function saveGameIntegration(Request $request)
+ {
+ try {
+
+ $this->configurationService->saveGameIntegration($request->gamePref);
+ return redirect()
+ ->back()
+ ->with('success', __('Game preference updated.'));
+
+ } catch (InvalidGamePreferenceException $ex) {
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
+ }
+ }
}
diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php
old mode 100644
new mode 100755
index 0fc063d..d77b028
--- a/app/Http/Controllers/ProfileController.php
+++ b/app/Http/Controllers/ProfileController.php
@@ -1,12 +1,30 @@
.
+ */
+
namespace App\Http\Controllers;
-use App\Http\Requests\ProfileSave;
-use Illuminate\Support\Facades\Log;
-use App\Profile;
-use App\User;
use App\Facades\IP;
+use App\Http\Requests\ProfileSave;
+use App\Services\ProfileService;
+use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@@ -14,18 +32,22 @@ use Spatie\Permission\Models\Role;
class ProfileController extends Controller
{
+ private $profileService;
- public function index()
- {
+ public function __construct(ProfileService $profileService) {
+ $this->profileService = $profileService;
+ }
- return view('dashboard.user.directory')
+ public function index()
+ {
+ return view('dashboard.user.directory')
->with('users', User::with('profile', 'bans')->paginate(9));
- }
+ }
public function showProfile()
{
-
- $socialLinks = Auth::user()->profile->socialLinks ?? "[]";
+ // TODO: Come up with cleaner social media solution, e.g. social media object
+ $socialLinks = Auth::user()->profile->socialLinks ?? '[]';
$socialMediaProfiles = json_decode($socialLinks, true);
return view('dashboard.user.profile.userprofile')
@@ -36,13 +58,10 @@ class ProfileController extends Controller
'insta' => $socialMediaProfiles['links']['insta'] ?? 'UpdateMe',
'discord' => $socialMediaProfiles['links']['discord'] ?? 'UpdateMe#12345',
]);
-
}
- // Route model binding
- public function showSingleProfile(Request $request, User $user)
+ public function showSingleProfile(User $user)
{
-
$socialMediaProfiles = json_decode($user->profile->socialLinks, true);
$createdDate = Carbon::parse($user->created_at);
@@ -51,21 +70,26 @@ class ProfileController extends Controller
$roleList = [];
-
- foreach($systemRoles as $role)
- {
- if (in_array($role, $userRoles))
- {
- $roleList[$role] = true;
- }
- else
- {
- $roleList[$role] = false;
- }
+ foreach ($systemRoles as $role) {
+ if (in_array($role, $userRoles)) {
+ $roleList[$role] = true;
+ } else {
+ $roleList[$role] = false;
+ }
}
- if (Auth::user()->is($user) || Auth::user()->can('profiles.view.others'))
+ $suspensionInfo = null;
+ if ($user->isBanned())
{
+ $suspensionInfo = [
+
+ 'isPermanent' => $user->bans->isPermanent,
+ 'reason' => $user->bans->reason,
+ 'bannedUntil' => $user->bans->bannedUntil
+ ];
+ }
+
+ if (Auth::user()->is($user) || Auth::user()->can('profiles.view.others')) {
return view('dashboard.user.profile.displayprofile')
->with([
'profile' => $user->profile,
@@ -73,55 +97,21 @@ class ProfileController extends Controller
'twitter' => $socialMediaProfiles['links']['twitter'] ?? 'UpdateMe',
'insta' => $socialMediaProfiles['links']['insta'] ?? 'UpdateMe',
'discord' => $socialMediaProfiles['links']['discord'] ?? 'UpdateMe#12345',
- 'since' => $createdDate->englishMonth . " " . $createdDate->year,
+ 'since' => $createdDate->englishMonth.' '.$createdDate->year,
'ipInfo' => IP::lookup($user->originalIP),
- 'roles' => $roleList
+ 'roles' => $roleList,
+ 'suspensionInfo' => $suspensionInfo
]);
+ } else {
+ abort(403, __('You cannot view someone else\'s profile.'));
}
- else
- {
- abort(403, 'You cannot view someone else\'s profile.');
- }
-
}
public function saveProfile(ProfileSave $request)
{
- $profile = User::find(Auth::user()->id)->profile;
- $social = [];
-
- if (!is_null($profile))
- {
- switch ($request->avatarPref)
- {
- case 'MOJANG':
- $avatarPref = 'crafatar';
-
- break;
- case 'GRAVATAR':
- $avatarPref = strtolower($request->avatarPref);
-
- break;
- }
-
- $social['links']['github'] = $request->socialGithub;
- $social['links']['twitter'] = $request->socialTwitter;
- $social['links']['insta'] = $request->socialInsta;
- $social['links']['discord'] = $request->socialDiscord;
-
- $profile->profileShortBio = $request->shortBio;
- $profile->profileAboutMe = $request->aboutMe;
- $profile->avatarPreference = $avatarPref;
- $profile->socialLinks = json_encode($social);
-
- $newProfile = $profile->save();
-
- $request->session()->flash('success', 'Profile settings saved successfully.');
-
- }
-
- return redirect()->back();
-
+ $this->profileService->updateProfile(Auth::user()->id, $request);
+ return redirect()
+ ->back()
+ ->with('success', __('Profile updated.'));
}
-
}
diff --git a/app/Http/Controllers/ResponseController.php b/app/Http/Controllers/ResponseController.php
deleted file mode 100644
index 64037c9..0000000
--- a/app/Http/Controllers/ResponseController.php
+++ /dev/null
@@ -1,10 +0,0 @@
-securityService = $securityService;
+ }
+
+ public function save(SaveSecuritySettings $request)
+ {
+ $this->securityService->save($request->secPolicy, [
+ 'graceperiod' => $request->graceperiod,
+ 'pwExpiry' => $request->pwExpiry,
+ 'enforce2fa' => $request->enforce2fa,
+ 'requirePMC' => $request->requirePMC
+ ]);
+
+ return redirect()
+ ->back()
+ ->with('success', __('Settings saved.'));
+
+ }
+}
diff --git a/app/Http/Controllers/StaffProfileController.php b/app/Http/Controllers/StaffProfileController.php
deleted file mode 100644
index b20d4d1..0000000
--- a/app/Http/Controllers/StaffProfileController.php
+++ /dev/null
@@ -1,10 +0,0 @@
-.
+ */
+
+namespace App\Http\Controllers;
+
+use App\Exceptions\InvalidInviteException;
+use App\Exceptions\PublicTeamInviteException;
+use App\Exceptions\UserAlreadyInvitedException;
+use App\Http\Requests\EditTeamRequest;
+use App\Http\Requests\NewTeamRequest;
+use App\Http\Requests\SendInviteRequest;
+use App\Mail\InviteToTeam;
+use App\Services\TeamService;
+use App\Team;
+use App\User;
+use App\Vacancy;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Mail;
+use Mpociot\Teamwork\Exceptions\UserNotInTeamException;
+use Mpociot\Teamwork\Facades\Teamwork;
+use Mpociot\Teamwork\TeamInvite;
+
+class TeamController extends Controller
+{
+ private $teamService;
+
+ public function __construct(TeamService $teamService) {
+ $this->teamService = $teamService;
+ }
+
+ /**
+ * Display a listing of the resource.
+ *
+ */
+ public function index()
+ {
+ $this->authorize('index', Team::class);
+
+ $teams = Team::with('users.roles')->get();
+
+ return view('dashboard.teams.teams')
+ ->with('teams', $teams);
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param NewTeamRequest $request
+ * @return RedirectResponse
+ * @throws \Illuminate\Auth\Access\AuthorizationException
+ */
+ public function store(NewTeamRequest $request)
+ {
+ $this->authorize('create', Team::class);
+ $this->teamService->createTeam($request->teamName, Auth::user()->id);
+
+ return redirect()
+ ->back()
+ ->with('success', __('Team successfully created.'));
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param Team $team
+ * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
+ * @throws \Illuminate\Auth\Access\AuthorizationException
+ */
+ public function edit(Team $team)
+ {
+ $this->authorize('update', $team);
+ return view('dashboard.teams.edit-team')
+ ->with([
+ 'team' => $team,
+ 'users' => User::all(),
+ 'vacancies' => Vacancy::with('teams')->get()->all()
+ ]);
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param EditTeamRequest $request
+ * @param Team $team
+ * @return RedirectResponse
+ * @throws \Illuminate\Auth\Access\AuthorizationException
+ */
+ public function update(EditTeamRequest $request, Team $team): RedirectResponse
+ {
+ $this->authorize('update', $team);
+ $team = $this->teamService->updateTeam($team, $request->teamDescription, $request->joinType);
+
+
+ if ($team) {
+ return redirect()
+ ->to(route('teams.index'))
+ ->with('success', __('Team updated.'));
+ }
+
+ return redirect()
+ ->back()
+ ->with('error', __('An error ocurred while trying to update this team.'));
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy($id)
+ {
+ // wip
+ }
+
+ public function invite(SendInviteRequest $request, Team $team): RedirectResponse
+ {
+ $this->authorize('invite', $team);
+
+ try {
+
+ $this->teamService->inviteUser($team, $request->user);
+
+ return redirect()
+ ->back()
+ ->with('success', __('User invited successfully!'));
+
+ } catch (UserAlreadyInvitedException | PublicTeamInviteException $ex) {
+ return redirect()
+ ->back()
+ ->with('error', $ex->getMessage());
+ }
+ }
+
+ public function processInviteAction(Request $request, $action, $token): RedirectResponse
+ {
+ try {
+
+ $this->teamService->processInvite(Auth::user(), $action, $token);
+
+ return redirect()
+ ->to(route('teams.index'))
+ ->with('success', __('Invite processed successfully!'));
+
+ } catch (InvalidInviteException $e) {
+
+ return redirect()
+ ->back()
+ ->with('error', $e->getMessage());
+
+ }
+ }
+
+ public function switchTeam(Request $request, Team $team): RedirectResponse
+ {
+ $this->authorize('switchTeam', $team);
+
+ try {
+ Auth::user()->switchTeam($team);
+
+ $request->session()->flash('success', __('Switched teams! Your team dashboard will now use this context.'));
+ } catch (UserNotInTeamException $ex) {
+ $request->session()->flash('error', __('You can\'t switch to a team you don\'t belong to.'));
+ }
+
+ return redirect()->back();
+ }
+
+ // Since it's a separate form, we shouldn't use the same update method
+ public function assignVacancies(Request $request, Team $team): RedirectResponse
+ {
+ $this->authorize('update', $team);
+ $message = $this->teamService->updateVacancies($team, $request->assocVacancies);
+
+ return redirect()
+ ->back()
+ ->with('success', $message);
+ }
+}
diff --git a/app/Http/Controllers/TeamFileController.php b/app/Http/Controllers/TeamFileController.php
new file mode 100755
index 0000000..30c5994
--- /dev/null
+++ b/app/Http/Controllers/TeamFileController.php
@@ -0,0 +1,141 @@
+fileService = $fileService;
+ }
+
+ /**
+ * Display a listing of the resource.
+ *
+ * @param Request $request
+ */
+ public function index(Request $request)
+ {
+ $this->authorize('index', TeamFile::class);
+
+ if (is_null(Auth::user()->currentTeam))
+ {
+ $request->session()->flash('error', 'Please choose a team before viewing it\'s files.');
+ return redirect()->to(route('teams.index'));
+ }
+
+ return view('dashboard.teams.team-files')
+ ->with('files', TeamFile::with('team', 'uploader')->paginate(6));
+ }
+
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param UploadFileRequest $request
+ * @return RedirectResponse
+ */
+ public function store(UploadFileRequest $request)
+ {
+ $this->authorize('store', TeamFile::class);
+
+ if (config('demo.is_enabled'))
+ {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
+
+ try {
+ $caption = $request->caption;
+ $description = $request->description;
+
+ $this->fileService->addFile($request->file('file'), Auth::user()->id, Auth::user()->currentTeam->id, $caption, $description);
+
+ return redirect()
+ ->back()
+ ->with('success', __('File uploaded successfully.'));
+
+ } catch (FileUploadException $uploadException) {
+
+ return redirect()
+ ->back()
+ ->with('error', $uploadException->getMessage());
+
+ }
+
+ }
+
+
+ public function download(Request $request, TeamFile $teamFile)
+ {
+ $this->authorize('download', TeamFile::class);
+
+ try
+ {
+ return Storage::download($teamFile->fs_location, $teamFile->name);
+ }
+ catch (FileNotFoundException $ex)
+ {
+ $request->session()->flash('error', 'Sorry, but the requested file could not be found in storage. Sometimes, files may be physically deleted by admins, but not from the app\'s database.');
+ return redirect()->back();
+
+ }
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param Request $request
+ * @param \App\TeamFile $teamFile
+ * @return RedirectResponse
+ */
+ public function destroy(Request $request, TeamFile $teamFile)
+ {
+ $this->authorize('delete', $teamFile);
+
+ if (config('demo.is_enabled'))
+ {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
+
+ try
+ {
+ Storage::delete($teamFile->fs_location);
+ $teamFile->delete();
+
+ $request->session()->flash('success', __('File deleted successfully.'));
+ }
+ catch (\Exception $ex)
+ {
+ $request->session()->flash('error', __('There was an error deleting the file: :msg', ['msg' => $ex->getMessage()]));
+ }
+
+ return redirect()->back();
+ }
+}
diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
old mode 100644
new mode 100755
index cb494b6..c94a476
--- a/app/Http/Controllers/UserController.php
+++ b/app/Http/Controllers/UserController.php
@@ -1,95 +1,63 @@
.
+ */
+
namespace App\Http\Controllers;
+use App\Ban;
+use App\Http\Requests\Add2FASecretRequest;
use App\Http\Requests\ChangeEmailRequest;
use App\Http\Requests\ChangePasswordRequest;
-use App\Http\Requests\FlushSessionsRequest;
use App\Http\Requests\DeleteUserRequest;
+use App\Http\Requests\FlushSessionsRequest;
+use App\Http\Requests\Remove2FASecretRequest;
use App\Http\Requests\SearchPlayerRequest;
use App\Http\Requests\UpdateUserRequest;
-use App\Http\Requests\Add2FASecretRequest;
-use App\Http\Requests\Remove2FASecretRequest;
-
+use App\Notifications\ChangedPassword;
+use App\Notifications\EmailChanged;
+use App\Traits\DisablesFeatures;
+use App\Traits\ReceivesAccountTokens;
use App\User;
-use App\Ban;
-
+use Google2FA;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
-use App\Facades\UUID;
-use App\Notifications\EmailChanged;
-use App\Notifications\ChangedPassword;
use Spatie\Permission\Models\Role;
-use Google2FA;
-
class UserController extends Controller
{
+ use ReceivesAccountTokens;
-
- public function showStaffMembers()
- {
- $this->authorize('viewStaff', User::class);
-
- $staffRoles = [
- 'reviewer',
- 'hiringManager',
- 'admin'
- ]; // TODO: Un-hardcode this, move to config/roles.php
- $users = User::with('roles')->get();
- $staffMembers = collect([]);
-
- foreach($users as $user)
- {
- if (empty($user->roles))
- {
- Log::debug($user->role->name);
- Log::debug('Staff list: User without role detected; Ignoring');
- continue;
- }
-
- foreach($user->roles as $role)
- {
- if (in_array($role->name, $staffRoles))
- {
- $staffMembers->push($user);
- continue 2; // Skip directly to the next user instead of comparing more roles for the current user
- }
- }
- }
-
- return view('dashboard.administration.staff-members')
- ->with([
- 'users' => $staffMembers
- ]);
- }
-
- public function showPlayers()
+ public function showUsers()
{
$this->authorize('viewPlayers', User::class);
- $users = User::with('roles')->get();
- $players = collect([]);
-
- foreach($users as $user)
- {
- // TODO: Might be problematic if we don't check if the role is user
- if (count($user->roles) == 1)
- {
- $players->push($user);
- }
- }
-
return view('dashboard.administration.players')
->with([
- 'users' => $players,
- 'bannedUserCount' => Ban::all()->count()
+ 'users' => User::with('roles')->paginate('6'),
+ 'numUsers' => count(User::all()),
+ 'bannedUserCount' => Ban::all()->count(),
]);
}
-
public function showPlayersLike(SearchPlayerRequest $request)
{
$this->authorize('viewPlayers', User::class);
@@ -100,18 +68,18 @@ class UserController extends Controller
->orWhere('email', 'LIKE', "%{$searchTerm}%")
->get();
- if (!$matchingUsers->isEmpty())
- { $request->session()->flash('success', 'There were ' . $matchingUsers->count() . ' user(s) matching your search.');
+ if (! $matchingUsers->isEmpty()) {
+ $request->session()->flash('success', __('There were :usersCount user(s) matching your search.', ['usersCount' => $matchingUsers->count()]));
return view('dashboard.administration.players')
->with([
'users' => $matchingUsers,
- 'bannedUserCount' => Ban::all()->count()
+ 'numUsers' => count(User::all()),
+ 'bannedUserCount' => Ban::all()->count(),
]);
- }
- else
- {
- $request->session()->flash('error', 'Your search term did not return any results.');
+ } else {
+ $request->session()->flash('error', __('Your search term did not return any results.'));
+
return redirect(route('registeredPlayerList'));
}
}
@@ -120,14 +88,10 @@ class UserController extends Controller
{
$QRCode = null;
- if (!$request->user()->has2FA())
- {
- if ($request->session()->has('twofaAttemptFailed'))
- {
+ if (! $request->user()->has2FA()) {
+ if ($request->session()->has('twofaAttemptFailed')) {
$twoFactorSecret = $request->session()->get('current2FA');
- }
- else
- {
+ } else {
$twoFactorSecret = Google2FA::generateSecretKey(32, '');
$request->session()->put('current2FA', $twoFactorSecret);
}
@@ -144,169 +108,177 @@ class UserController extends Controller
->with('twofaQRCode', $QRCode);
}
-
public function flushSessions(FlushSessionsRequest $request)
{
// TODO: Move all log calls to a listener, which binds to an event fired by each significant event, such as this one
// This will allow for other actions to be performed on certain events (like login failed event)
Auth::logoutOtherDevices($request->currentPasswordFlush);
- Log::notice('User ' . Auth::user()->name . ' has logged out other devices in their account',
+ Log::notice('User '.Auth::user()->name.' has logged out other devices in their account',
[
'originIPAddress' => $request->ip(),
'userID' => Auth::user()->id,
- 'timestamp' => now()
+ 'timestamp' => now(),
]);
- $request->session()->flash('success', 'Successfully logged out other devices. Remember to change your password if you think you\'ve been compromised.');
+ $request->session()->flash('success', __('Successfully logged out other devices. Remember to change your password if you think you\'ve been compromised.'));
+
return redirect()->back();
}
public function changePassword(ChangePasswordRequest $request)
{
+ if (config('demo.is_enabled')) {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
$user = User::find(Auth::user()->id);
- if (!is_null($user))
- {
+ if (! is_null($user)) {
$user->password = Hash::make($request->newPassword);
+ $user->password_last_updated = now();
+
$user->save();
- Log::info('User ' . $user->name . ' has changed their password', [
+ Log::info('User '.$user->name.' has changed their password', [
'originIPAddress' => $request->ip(),
'userID' => $user->id,
- 'timestamp' => now()
+ 'timestamp' => now(),
]);
$user->notify(new ChangedPassword());
Auth::logout();
+
return redirect()->back();
}
-
}
public function changeEmail(ChangeEmailRequest $request)
{
+ if (config('demo.is_enabled')) {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
+
$user = User::find(Auth::user()->id);
- if (!is_null($user))
- {
+ if (! is_null($user)) {
$user->email = $request->newEmail;
$user->save();
- Log::notice('User ' . $user->name . ' has just changed their contact email address', [
+ Log::notice('User '.$user->name.' has just changed their contact email address', [
'originIPAddress' => $request->ip(),
'userID' => $user->id,
- 'timestamp' => now()
+ 'timestamp' => now(),
]);
$user->notify(new EmailChanged());
- $request->session()->flash('success', 'Your email address has been changed!');
- }
- else
- {
- $request->session()->flash('error', 'There has been an error whilst trying to update your account. Please contact administrators.');
+ $request->session()->flash('success', __('Your email address has been changed!'));
+ } else {
+ $request->session()->flash('error', __('There has been an error whilst trying to update your account. Please contact administrators.'));
}
return redirect()->back();
-
}
-
-
public function delete(DeleteUserRequest $request, User $user)
{
+ if (config('demo.is_enabled')) {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
$this->authorize('delete', $user);
- if ($request->confirmPrompt == 'DELETE ACCOUNT')
- {
+ if ($request->confirmPrompt == 'DELETE ACCOUNT') {
$user->delete();
- $request->session()->flash('success','User deleted successfully. PII has been erased.');
+ $request->session()->flash('success', __('User deleted successfully.'));
+ } else {
+ $request->session()->flash('error', __('Wrong confirmation text! Try again.'));
}
- else
- {
- $request->session()->flash('error', 'Wrong confirmation text! Try again.');
- }
-
return redirect()->route('registeredPlayerList');
}
public function update(UpdateUserRequest $request, User $user)
{
-
- $this->authorize('adminEdit', $user);
-
- // Mass update would not be possible here without extra code, making route model binding useless
- $user->email = $request->email;
- $user->name = $request->name;
- $user->uuid = $request->uuid;
-
- $existingRoles = Role::all()
- ->pluck('name')
- ->all();
-
- $roleDiff = array_diff($existingRoles, $request->roles);
-
- // Adds roles that were selected. Removes roles that aren't selected if the user has them.
- foreach($roleDiff as $deselectedRole)
- {
- if ($user->hasRole($deselectedRole) && $deselectedRole !== 'user')
- {
- $user->removeRole($deselectedRole);
+ if (config('demo.is_enabled')) {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
}
- }
+ $this->authorize('adminEdit', $user);
- foreach($request->roles as $role)
- {
- if (!$user->hasRole($role))
- {
- $user->assignRole($role);
+ // Mass update would not be possible here without extra code, making route model binding useless
+ $user->email = $request->email;
+ $user->name = $request->name;
+ $user->uuid = $request->uuid;
+
+ $existingRoles = Role::all()
+ ->pluck('name')
+ ->all();
+
+ $roleDiff = array_diff($existingRoles, $request->roles);
+
+ // Adds roles that were selected. Removes roles that aren't selected if the user has them.
+ foreach ($roleDiff as $deselectedRole) {
+ if ($user->hasRole($deselectedRole) && $deselectedRole !== 'user') {
+ $user->removeRole($deselectedRole);
+ }
}
- }
+ foreach ($request->roles as $role) {
+ if (! $user->hasRole($role)) {
+ $user->assignRole($role);
+ }
+ }
- $user->save();
- $request->session()->flash('success', 'User updated successfully!');
-
- return redirect()->back();
+ $user->save();
+ $request->session()->flash('success', __('User updated successfully!'));
+ return redirect()->back();
}
public function add2FASecret(Add2FASecretRequest $request)
{
+ if (config('demo.is_enabled')) {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
+
$currentSecret = $request->session()->get('current2FA');
$isValid = Google2FA::verifyKey($currentSecret, $request->otp);
- if ($isValid)
- {
- $request->user()->twofa_secret = $currentSecret;
- $request->user()->save();
+ if ($isValid) {
+ $request->user()->twofa_secret = $currentSecret;
+ $request->user()->save();
- Log::warning('SECURITY: User activated two-factor authentication', [
- 'initiator' => $request->user()->email,
- 'ip' => $request->ip()
- ]);
+ Log::warning('SECURITY: User activated two-factor authentication', [
+ 'initiator' => $request->user()->email,
+ 'ip' => $request->ip(),
+ ]);
- Google2FA::login();
+ Google2FA::login();
- Log::warning('SECURITY: Started two factor session automatically', [
- 'initiator' => $request->user()->email,
- 'ip' => $request->ip()
- ]);
+ Log::warning('SECURITY: Started two factor session automatically', [
+ 'initiator' => $request->user()->email,
+ 'ip' => $request->ip(),
+ ]);
- $request->session()->forget('current2FA');
+ $request->session()->forget('current2FA');
- if ($request->session()->has('twofaAttemptFailed'))
- $request->session()->forget('twofaAttemptFailed');
+ if ($request->session()->has('twofaAttemptFailed')) {
+ $request->session()->forget('twofaAttemptFailed');
+ }
-
- $request->session()->flash('success', '2FA succesfully enabled! You\'ll now be prompted for an OTP each time you log in.');
- }
- else
- {
- $request->session()->flash('error', 'Incorrect code. Please reopen the 2FA settings panel and try again.');
- $request->session()->put('twofaAttemptFailed', true);
+ $request->session()->flash('success', __('2FA succesfully enabled! You\'ll now be prompted for an OTP each time you log in.'));
+ } else {
+ $request->session()->flash('error', __('Incorrect code. Please reopen the 2FA settings panel and try again.'));
+ $request->session()->put('twofaAttemptFailed', true);
}
return redirect()->back();
@@ -315,43 +287,44 @@ class UserController extends Controller
public function remove2FASecret(Remove2FASecretRequest $request)
{
Log::warning('SECURITY: Disabling two factor authentication (user initiated)', [
- 'initiator' => $request->user()->email,
- 'ip' => $request->ip()
+ 'initiator' => $request->user()->email,
+ 'ip' => $request->ip(),
]);
$request->user()->twofa_secret = null;
$request->user()->save();
- $request->session()->flash('success', 'Two-factor authentication disabled.');
+ $request->session()->flash('success', __('Two-factor authentication disabled.'));
+
return redirect()->back();
}
-
-
-
public function terminate(Request $request, User $user)
{
$this->authorize('terminate', User::class);
+ if (config('demo.is_enabled')) {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
// TODO: move logic to policy
- if (!$user->isStaffMember() || $user->is(Auth::user()))
- {
- $request->session()->flash('error', 'You cannot terminate this user.');
+ if (! $user->isStaffMember() || $user->is(Auth::user())) {
+ $request->session()->flash('error', __('You cannot terminate this user.'));
+
return redirect()->back();
}
- foreach ($user->roles as $role)
- {
- if ($role->name == 'user')
- {
- continue;
- }
+ foreach ($user->roles as $role) {
+ if ($role->name == 'user') {
+ continue;
+ }
- $user->removeRole($role->name);
+ $user->removeRole($role->name);
}
- Log::info('User ' . $user->name . ' has just been demoted.');
- $request->session()->flash('success', 'User terminated successfully.');
+ Log::info('User '.$user->name.' has just been demoted.');
+ $request->session()->flash('success', __('User terminated successfully.'));
//TODO: Dispatch event
return redirect()->back();
diff --git a/app/Http/Controllers/VacancyController.php b/app/Http/Controllers/VacancyController.php
old mode 100644
new mode 100755
index fdb5ce0..6cfc3f5
--- a/app/Http/Controllers/VacancyController.php
+++ b/app/Http/Controllers/VacancyController.php
@@ -1,45 +1,65 @@
.
+ */
+
namespace App\Http\Controllers;
-use App\Http\Requests\VacancyRequest;
-use App\Http\Requests\VacancyEditRequest;
-
-use App\Vacancy;
-use App\User;
+use App\Facades\JSON;
use App\Form;
-
-use App\Notifications\VacancyClosed;
-
+use App\Http\Requests\VacancyEditRequest;
+use App\Http\Requests\VacancyRequest;
+use App\Notifications\VacancyStatusUpdated;
+use App\User;
+use App\Vacancy;
use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Str;
-use Illuminate\Support\Facades\Auth;
-
class VacancyController extends Controller
{
public function index()
{
- $this->authorize('viewAny', Vacancy::class);
+ $this->authorize('viewAny', Vacancy::class);
+
return view('dashboard.administration.positions')
->with([
'forms' => Form::all(),
- 'vacancies' => Vacancy::all()
+ 'vacancies' => Vacancy::all(),
]);
}
public function store(VacancyRequest $request)
{
+ $messageIsError = false;
$this->authorize('create', Vacancy::class);
+
+
+
$form = Form::find($request->vacancyFormID);
- if (!is_null($form))
- {
- /* note: since we can't convert HTML back to Markdown, we'll have to do the converting when the user requests a page,
- * and leave the database with Markdown only so it can be used and edited everywhere.
- * for several vacancies, this would require looping through all of them and replacing MD with HTML, which is obviously not the most clean solution;
- * however, the Model can be configured to return MD instead of HTML on that specific field saving us from looping.
- */
+ if (! is_null($form)) {
+ /* note: since we can't convert HTML back to Markdown, we'll have to do the converting when the user requests a page,
+ * and leave the database with Markdown only so it can be used and edited everywhere.
+ * for several vacancies, this would require looping through all of them and replacing MD with HTML, which is obviously not the most clean solution;
+ * however, the Model can be configured to return MD instead of HTML on that specific field saving us from looping.
+ */
Vacancy::create([
'vacancyName' => $request->vacancyName,
@@ -49,90 +69,94 @@ class VacancyController extends Controller
'permissionGroupName' => $request->permissionGroup,
'discordRoleID' => $request->discordRole,
'vacancyFormID' => $request->vacancyFormID,
- 'vacancyCount' => $request->vacancyCount
+ 'vacancyCount' => $request->vacancyCount,
]);
- $request->session()->flash('success', 'Vacancy successfully opened. It will now show in the home page.');
- }
- else
- {
- $request->session()->flash('error', 'You cannot create a vacancy without a valid form.');
+ $message = __('Vacancy successfully opened. It will now show in the home page.');
+
+ } else {
+ $message = __('You cannot create a vacancy without a valid form.');
+ $messageIsError = true;
}
- return redirect()->back();
-
+ return redirect()
+ ->back()
+ ->with(($messageIsError) ? 'error' : 'success', $message);
}
public function updatePositionAvailability(Request $request, $status, Vacancy $vacancy)
{
-
$this->authorize('update', $vacancy);
- if (!is_null($vacancy))
- {
+ if (! is_null($vacancy)) {
$type = 'success';
- switch ($status)
- {
+ switch ($status) {
case 'open':
$vacancy->open();
- $message = "Position successfully opened!";
+ $message = __('Position successfully opened!');
break;
case 'close':
$vacancy->close();
- $message = "Position successfully closed!";
+ $message = __('Position successfully closed!');
- foreach(User::all() as $user)
- {
- if ($user->isStaffMember())
- {
- $user->notify(new VacancyClosed($vacancy));
- }
- }
break;
default:
- $message = "Please do not tamper with the button's URLs. To report a bug, please contact an administrator.";
+ $message = __("Please do not tamper with the URLs. To report a bug, please contact an administrator.");
$type = 'error';
}
- }
- else
- {
- $message = "The position you're trying to update doesn't exist!";
- $type = "error";
+
+
+ } else {
+ $message = __("The position you're trying to update doesn't exist!");
+ $type = 'error';
}
- $request->session()->flash($type, $message);
- return redirect()->back();
+ if ($type !== 'error') {
+ Notification::send(User::role('reviewer')->get(), new VacancyStatusUpdated($vacancy, $status));
+ }
+
+ return redirect()
+ ->back()
+ ->with($type, $message);
+
}
-
public function edit(Request $request, Vacancy $vacancy)
{
- $this->authorize('update', $vacancy);
+ $this->authorize('update', $vacancy);
+
return view('dashboard.administration.editposition')
->with('vacancy', $vacancy);
}
-
-
public function update(VacancyEditRequest $request, Vacancy $vacancy)
{
- $this->authorize('update', $vacancy);
+ $this->authorize('update', $vacancy);
- $vacancy->vacancyFullDescription = $request->vacancyFullDescription;
- $vacancy->vacancyDescription = $request->vacancyDescription;
- $vacancy->vacancyCount = $request->vacancyCount;
+ $vacancy->vacancyFullDescription = $request->vacancyFullDescription;
+ $vacancy->vacancyDescription = $request->vacancyDescription;
+ $vacancy->vacancyCount = $request->vacancyCount;
- $vacancy->save();
-
- $request->session()->flash('success', 'Vacancy successfully updated.');
- return redirect()->back();
+ $vacancy->save();
+ return redirect()
+ ->back()
+ ->with('success', __('Vacancy successfully updated.'));
}
+ public function delete(Request $request, Vacancy $vacancy)
+ {
+ $this->authorize('delete', $vacancy);
+ $vacancy->delete();
+
+ return redirect()
+ ->back()
+ ->with('success', __('Vacancy deleted. All applications associated with it are now gone too.'));
+ }
}
diff --git a/app/Http/Controllers/VoteController.php b/app/Http/Controllers/VoteController.php
old mode 100644
new mode 100755
index eba3ae1..e2d3bf2
--- a/app/Http/Controllers/VoteController.php
+++ b/app/Http/Controllers/VoteController.php
@@ -1,18 +1,34 @@
.
+ */
+
namespace App\Http\Controllers;
use App\Application;
use App\Http\Requests\VoteRequest;
-use App\Jobs\ProcessVoteList;
use App\Vote;
-use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class VoteController extends Controller
{
-
public function vote(VoteRequest $voteRequest, Application $application)
{
$this->authorize('create', Vote::class);
@@ -23,11 +39,10 @@ class VoteController extends Controller
]);
$vote->application()->attach($application->id);
-
- Log::info('User ' . Auth::user()->name . ' has voted in applicant ' . $application->user->name . '\'s application', [
- 'voteType' => $voteRequest->voteType
+ Log::info('User '.Auth::user()->name.' has voted in applicant '.$application->user->name.'\'s application', [
+ 'voteType' => $voteRequest->voteType,
]);
- $voteRequest->session()->flash('success', 'Your vote has been registered!');
+ $voteRequest->session()->flash('success', __('Your vote has been counted!'));
// Cron job will run command that processes votes
return redirect()->back();
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
old mode 100644
new mode 100755
index 9a2a7f5..634033c
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -1,7 +1,27 @@
.
+ */
+
namespace App\Http;
+use App\Http\Middleware\APIAuthenticationMiddleware;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
@@ -41,6 +61,7 @@ class Kernel extends HttpKernel
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
+ APIAuthenticationMiddleware::class
],
];
@@ -66,10 +87,12 @@ class Kernel extends HttpKernel
'usernameUUID' => \App\Http\Middleware\UsernameUUID::class,
'forcelogout' => \App\Http\Middleware\ForceLogoutMiddleware::class,
'2fa' => \PragmaRX\Google2FALaravel\Middleware::class,
+ 'passwordexpiration' => \App\Http\Middleware\PasswordExpirationMiddleware::class,
+ 'passwordredirect' => \App\Http\Middleware\PasswordExpirationRedirectMiddleware::class,
'localize' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class,
'localizationRedirect' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class,
'localeSessionRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class,
'localeCookieRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleCookieRedirect::class,
- 'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class
+ 'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class,
];
}
diff --git a/app/Http/Middleware/APIAuthenticationMiddleware.php b/app/Http/Middleware/APIAuthenticationMiddleware.php
new file mode 100755
index 0000000..866fd83
--- /dev/null
+++ b/app/Http/Middleware/APIAuthenticationMiddleware.php
@@ -0,0 +1,65 @@
+bearerToken();
+
+ if (!is_null($key))
+ {
+ // we have a valid discriminator
+ $discriminator = Str::before($key, '.');
+ $loneKey = Str::after($key, '.');
+
+ $keyRecord = ApiKey::where('discriminator', $discriminator)->first();
+
+ if ($keyRecord && Hash::check($loneKey, $keyRecord->secret) && $keyRecord->status == 'active')
+ {
+ $keyRecord->last_used = Carbon::now();
+ $keyRecord->save();
+
+ Log::info('Recording API call, see context', [
+ 'uri' => $request->url(),
+ 'name' => Route::currentRouteName(),
+ 'discriminator' => $discriminator,
+ 'ip' => $request->ip()
+ ]);
+
+ return $next($request);
+ }
+
+ return JSON::setResponseType('error')
+ ->setStatus('authfail')
+ ->setMessage('Invalid / Revoked API key.')
+ ->setCode(401)
+ ->build();
+ }
+
+ return JSON::setResponseType('error')
+ ->setStatus('malformed_key')
+ ->setMessage('Missing or malformed API key.')
+ ->setCode(400)
+ ->build();
+
+ }
+}
diff --git a/app/Http/Middleware/ApplicationEligibility.php b/app/Http/Middleware/ApplicationEligibility.php
old mode 100644
new mode 100755
index f091d8e..13cb1da
--- a/app/Http/Middleware/ApplicationEligibility.php
+++ b/app/Http/Middleware/ApplicationEligibility.php
@@ -1,12 +1,31 @@
.
+ */
+
namespace App\Http\Middleware;
use App\Application;
-use Illuminate\Support\Facades\Log;
use Carbon\Carbon;
use Closure;
use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\View;
class ApplicationEligibility
@@ -23,37 +42,29 @@ class ApplicationEligibility
{
$curtime = new Carbon(now());
-
- if (Auth::check())
- {
+ if (Auth::check()) {
$applications = Application::where('applicantUserID', Auth::user()->id)->get();
$eligible = true;
$daysRemaining = 0;
- if (!$applications->isEmpty())
- {
- foreach ($applications as $application)
- {
+ if (! $applications->isEmpty()) {
+ foreach ($applications as $application) {
$appTime = Carbon::parse($application->created_at);
- if ($appTime->isSameMonth($curtime))
- {
-
- Log::warning('Notice: Application ID ' . $application->id . ' was found to be in the same month as today\'s time, making the user ' . Auth::user()->name . ' ineligible for application');
+ if ($appTime->isSameMonth($curtime)) {
+ Log::warning('Notice: Application ID '.$application->id.' was found to be in the same month as today\'s time, making the user '.Auth::user()->name.' ineligible for application');
$eligible = false;
}
}
$allowedTime = Carbon::parse($applications->last()->created_at)->addMonth();
$daysRemaining = $allowedTime->diffInDays(now());
-
}
View::share('isEligibleForApplication', $eligible);
View::share('eligibilityDaysRemaining', $daysRemaining);
}
-
return $next($request);
}
}
diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php
old mode 100644
new mode 100755
index 704089a..af34268
--- a/app/Http/Middleware/Authenticate.php
+++ b/app/Http/Middleware/Authenticate.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
diff --git a/app/Http/Middleware/Bancheck.php b/app/Http/Middleware/Bancheck.php
old mode 100644
new mode 100755
index 0eca7f7..6c8a8ef
--- a/app/Http/Middleware/Bancheck.php
+++ b/app/Http/Middleware/Bancheck.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Middleware;
use Closure;
@@ -20,17 +39,11 @@ class Bancheck
$userIP = $request->ip();
$anonymousUser = User::where('ipAddress', $userIP)->get();
-
- if (Auth::check() && Auth::user()->isBanned())
- {
+ if (Auth::check() && Auth::user()->isBanned()) {
View::share('isBanned', true);
- }
- elseif(!$anonymousUser->isEmpty() && User::find($anonymousUser->id)->isBanned())
- {
+ } elseif (! $anonymousUser->isEmpty() && User::find($anonymousUser->id)->isBanned()) {
View::share('isBanned', true);
- }
- else
- {
+ } else {
View::share('isBanned', false);
}
diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php
old mode 100644
new mode 100755
index 35b9824..c58ffff
--- a/app/Http/Middleware/CheckForMaintenanceMode.php
+++ b/app/Http/Middleware/CheckForMaintenanceMode.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php
old mode 100644
new mode 100755
index 033136a..140dd8d
--- a/app/Http/Middleware/EncryptCookies.php
+++ b/app/Http/Middleware/EncryptCookies.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
diff --git a/app/Http/Middleware/ForceLogoutMiddleware.php b/app/Http/Middleware/ForceLogoutMiddleware.php
old mode 100644
new mode 100755
index 551c287..b3b2baa
--- a/app/Http/Middleware/ForceLogoutMiddleware.php
+++ b/app/Http/Middleware/ForceLogoutMiddleware.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Middleware;
use Closure;
@@ -16,11 +35,11 @@ class ForceLogoutMiddleware
*/
public function handle($request, Closure $next)
{
- if (Auth::user()->isBanned())
- {
+ if (Auth::user()->isBanned()) {
Auth::logout();
- $request->session()->flash('error', 'Error: Your session has been forcefully terminated. Please try again in a few days.');
+ $request->session()->flash('error', __('Your account is suspended. You will not be able to login or register until the suspension is lifted.'));
+
return redirect('/');
}
diff --git a/app/Http/Middleware/PasswordExpirationMiddleware.php b/app/Http/Middleware/PasswordExpirationMiddleware.php
new file mode 100755
index 0000000..e76210c
--- /dev/null
+++ b/app/Http/Middleware/PasswordExpirationMiddleware.php
@@ -0,0 +1,40 @@
+password_last_updated)->diffInDays(now());
+ $updateThreshold = Options::getOption('password_expiry');
+
+ if ($updateThreshold !== 0 && $sinceUpdate > $updateThreshold)
+ {
+ session()->put('passwordExpired', true);
+ }
+ else
+ {
+ session()->put('passwordExpired', false);
+ }
+
+ }
+
+ return $next($request);
+ }
+}
diff --git a/app/Http/Middleware/PasswordExpirationRedirectMiddleware.php b/app/Http/Middleware/PasswordExpirationRedirectMiddleware.php
new file mode 100755
index 0000000..b4a687f
--- /dev/null
+++ b/app/Http/Middleware/PasswordExpirationRedirectMiddleware.php
@@ -0,0 +1,28 @@
+.
+ */
+
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php
old mode 100644
new mode 100755
index 5a50e7b..1698610
--- a/app/Http/Middleware/TrimStrings.php
+++ b/app/Http/Middleware/TrimStrings.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php
old mode 100644
new mode 100755
index 085cdb5..938be5d
--- a/app/Http/Middleware/TrustProxies.php
+++ b/app/Http/Middleware/TrustProxies.php
@@ -1,10 +1,30 @@
.
+ */
+
namespace App\Http\Middleware;
-use Fideloper\Proxy\TrustProxies as Middleware;
+use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
+
class TrustProxies extends Middleware
{
/**
@@ -12,12 +32,18 @@ class TrustProxies extends Middleware
*
* @var array|string
*/
- protected $proxies = "*";
+ protected $proxies = '*';
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
- protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;
+ protected $headers =
+ Request::HEADER_X_FORWARDED_FOR |
+ Request::HEADER_X_FORWARDED_HOST |
+ Request::HEADER_X_FORWARDED_PORT |
+ Request::HEADER_X_FORWARDED_PROTO |
+ Request::HEADER_X_FORWARDED_AWS_ELB;
+
}
diff --git a/app/Http/Middleware/UsernameUUID.php b/app/Http/Middleware/UsernameUUID.php
old mode 100644
new mode 100755
index 29a93cf..32c8a8e
--- a/app/Http/Middleware/UsernameUUID.php
+++ b/app/Http/Middleware/UsernameUUID.php
@@ -1,15 +1,33 @@
.
+ */
+
namespace App\Http\Middleware;
-use Closure;
use App\Facades\UUID;
-use Illuminate\Support\Facades\Http;
+use Closure;
class UsernameUUID
{
/**
- * Converts a Minecraft username found in the request body to a UUID
+ * Converts a Minecraft username found in the request body to a UUID.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
@@ -18,23 +36,21 @@ class UsernameUUID
public function handle($request, Closure $next)
{
$input = $request->all();
- if (isset($input['uuid']))
- {
- try
- {
- $username = $input['uuid'];
- $input['uuid'] = UUID::toUUID($username);
- }
- catch(\InvalidArgumentException $iae)
- {
+ if (isset($input['uuid'])) {
+ try {
+ $username = $input['uuid'];
+ $input['uuid'] = UUID::toUUID($username);
+ } catch (\InvalidArgumentException $iae) {
report($iae);
$request->session()->flash('error', $iae->getMessage());
+
return redirect(route('register'));
}
$request->replace($input);
}
+
return $next($request);
}
}
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php
old mode 100644
new mode 100755
index 0c13b85..0b6761a
--- a/app/Http/Middleware/VerifyCsrfToken.php
+++ b/app/Http/Middleware/VerifyCsrfToken.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
diff --git a/app/Http/Requests/Add2FASecretRequest.php b/app/Http/Requests/Add2FASecretRequest.php
old mode 100644
new mode 100755
index 13fa9dd..f1b2ca4
--- a/app/Http/Requests/Add2FASecretRequest.php
+++ b/app/Http/Requests/Add2FASecretRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -13,7 +32,7 @@ class Add2FASecretRequest extends FormRequest
*/
public function authorize()
{
- // current logic only updates currently authenticated user
+ // current logic only updates currently authenticated user
return true;
}
@@ -25,7 +44,7 @@ class Add2FASecretRequest extends FormRequest
public function rules()
{
return [
- 'otp' => 'required|string|min:6|max:6'
+ 'otp' => 'required|string|min:6|max:6',
];
}
}
diff --git a/app/Http/Requests/BanUserRequest.php b/app/Http/Requests/BanUserRequest.php
old mode 100644
new mode 100755
index ba25c34..943bd90
--- a/app/Http/Requests/BanUserRequest.php
+++ b/app/Http/Requests/BanUserRequest.php
@@ -1,11 +1,29 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
-
class BanUserRequest extends FormRequest
{
/**
@@ -27,8 +45,15 @@ class BanUserRequest extends FormRequest
{
return [
'reason' => 'required|string',
- 'durationOperand' => 'nullable|string',
- 'durationOperator' => 'nullable|string'
+ 'suspensionType' => 'required|string',
+ 'duration' => 'required_if:suspensionType,on|nullable|integer',
+ ];
+ }
+
+ public function messages()
+ {
+ return [
+ 'duration.required_if' => __('You must provide a duration if the suspension is temporary.')
];
}
}
diff --git a/app/Http/Requests/CancelAppointmentRequest.php b/app/Http/Requests/CancelAppointmentRequest.php
new file mode 100755
index 0000000..4ba920e
--- /dev/null
+++ b/app/Http/Requests/CancelAppointmentRequest.php
@@ -0,0 +1,30 @@
+ 'string|required'
+ ];
+ }
+}
diff --git a/app/Http/Requests/ChangeEmailRequest.php b/app/Http/Requests/ChangeEmailRequest.php
old mode 100644
new mode 100755
index 128a3eb..e81a473
--- a/app/Http/Requests/ChangeEmailRequest.php
+++ b/app/Http/Requests/ChangeEmailRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -24,8 +43,8 @@ class ChangeEmailRequest extends FormRequest
public function rules()
{
return [
- 'currentPassword' => 'required|password',
- 'newEmail' => 'required|email|unique:users,email'
+ 'currentPassword' => 'required|current_password',
+ 'newEmail' => 'required|email|unique:users,email',
];
}
}
diff --git a/app/Http/Requests/ChangePasswordRequest.php b/app/Http/Requests/ChangePasswordRequest.php
old mode 100644
new mode 100755
index 3feb69b..769dbeb
--- a/app/Http/Requests/ChangePasswordRequest.php
+++ b/app/Http/Requests/ChangePasswordRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -25,7 +44,7 @@ class ChangePasswordRequest extends FormRequest
{
return [
'newPassword' => 'required|string|confirmed',
- 'oldPassword' => 'required|string|password'
+ 'oldPassword' => 'required|string|current_password',
];
}
}
diff --git a/app/Http/Requests/DeleteUserRequest.php b/app/Http/Requests/DeleteUserRequest.php
old mode 100644
new mode 100755
index 924635c..bdaaada
--- a/app/Http/Requests/DeleteUserRequest.php
+++ b/app/Http/Requests/DeleteUserRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -25,7 +44,7 @@ class DeleteUserRequest extends FormRequest
public function rules()
{
return [
- 'confirmPrompt' => 'required|string'
+ 'confirmPrompt' => 'required|string',
];
}
}
diff --git a/app/Http/Requests/EditTeamRequest.php b/app/Http/Requests/EditTeamRequest.php
new file mode 100755
index 0000000..d2ad544
--- /dev/null
+++ b/app/Http/Requests/EditTeamRequest.php
@@ -0,0 +1,50 @@
+.
+ */
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class EditTeamRequest extends FormRequest
+{
+ /**
+ * Determine if the user is authorized to make this request.
+ *
+ * @return bool
+ */
+ public function authorize()
+ {
+ return true;
+ }
+
+ /**
+ * Get the validation rules that apply to the request.
+ *
+ * @return array
+ */
+ public function rules()
+ {
+ return [
+ 'teamDescription' => 'required|string|max:200',
+ 'joinType' => 'required|boolean',
+ ];
+ }
+}
diff --git a/app/Http/Requests/FlushSessionsRequest.php b/app/Http/Requests/FlushSessionsRequest.php
old mode 100644
new mode 100755
index f274ebd..b7d9dc0
--- a/app/Http/Requests/FlushSessionsRequest.php
+++ b/app/Http/Requests/FlushSessionsRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -24,7 +43,7 @@ class FlushSessionsRequest extends FormRequest
public function rules()
{
return [
- 'currentPasswordFlush' => 'required|password'
+ 'currentPasswordFlush' => 'required|current_password',
];
}
}
diff --git a/app/Http/Requests/NewCommentRequest.php b/app/Http/Requests/NewCommentRequest.php
old mode 100644
new mode 100755
index e1470bc..9d05a95
--- a/app/Http/Requests/NewCommentRequest.php
+++ b/app/Http/Requests/NewCommentRequest.php
@@ -1,11 +1,29 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
-
class NewCommentRequest extends FormRequest
{
/**
@@ -27,7 +45,7 @@ class NewCommentRequest extends FormRequest
public function rules()
{
return [
- 'comment' => 'required|string|max:600|min:20'
+ 'comment' => 'required|string|max:600|min:20',
];
}
}
diff --git a/app/Http/Requests/NewTeamRequest.php b/app/Http/Requests/NewTeamRequest.php
new file mode 100755
index 0000000..a4fcb4e
--- /dev/null
+++ b/app/Http/Requests/NewTeamRequest.php
@@ -0,0 +1,49 @@
+.
+ */
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class NewTeamRequest extends FormRequest
+{
+ /**
+ * Determine if the user is authorized to make this request.
+ *
+ * @return bool
+ */
+ public function authorize()
+ {
+ return true;
+ }
+
+ /**
+ * Get the validation rules that apply to the request.
+ *
+ * @return array
+ */
+ public function rules()
+ {
+ return [
+ 'teamName' => 'required|max:200|string',
+ ];
+ }
+}
diff --git a/app/Http/Requests/ProfileSave.php b/app/Http/Requests/ProfileSave.php
old mode 100644
new mode 100755
index 75278be..7d79846
--- a/app/Http/Requests/ProfileSave.php
+++ b/app/Http/Requests/ProfileSave.php
@@ -1,10 +1,28 @@
.
+ */
+
namespace App\Http\Requests;
use App\Profile;
use Illuminate\Foundation\Http\FormRequest;
-use Illuminate\Support\Facades\Auth;
class ProfileSave extends FormRequest
{
@@ -33,7 +51,7 @@ class ProfileSave extends FormRequest
'socialInsta' => 'nullable|string',
'socialTwitter' => 'nullable|string',
'socialDiscord' => 'nullable|string',
- 'socialGithub' => 'nullable|string'
+ 'socialGithub' => 'nullable|string',
];
}
}
diff --git a/app/Http/Requests/Remove2FASecretRequest.php b/app/Http/Requests/Remove2FASecretRequest.php
old mode 100644
new mode 100755
index 6583b93..136d283
--- a/app/Http/Requests/Remove2FASecretRequest.php
+++ b/app/Http/Requests/Remove2FASecretRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -24,8 +43,8 @@ class Remove2FASecretRequest extends FormRequest
public function rules()
{
return [
- 'currentPassword' => 'required|password',
- 'consent' => 'required|accepted'
+ 'currentPassword' => 'required|current_password',
+ 'consent' => 'required|accepted',
];
}
}
diff --git a/app/Http/Requests/SaveNotesRequest.php b/app/Http/Requests/SaveNotesRequest.php
old mode 100644
new mode 100755
index b6dd782..7b89a98
--- a/app/Http/Requests/SaveNotesRequest.php
+++ b/app/Http/Requests/SaveNotesRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -24,7 +43,7 @@ class SaveNotesRequest extends FormRequest
public function rules()
{
return [
- 'noteText' => 'required|string'
+ 'noteText' => 'required|string',
];
}
}
diff --git a/app/Http/Requests/SaveSecuritySettings.php b/app/Http/Requests/SaveSecuritySettings.php
new file mode 100755
index 0000000..245d630
--- /dev/null
+++ b/app/Http/Requests/SaveSecuritySettings.php
@@ -0,0 +1,34 @@
+ 'required|string',
+ 'graceperiod' => 'required|integer',
+ 'pwExpiry' => 'required|integer',
+ 'enforce2fa' => 'required|boolean',
+ 'requirePMC' => 'required|boolean'
+ ];
+ }
+}
diff --git a/app/Http/Requests/SearchPlayerRequest.php b/app/Http/Requests/SearchPlayerRequest.php
old mode 100644
new mode 100755
index 4689a49..23c7e78
--- a/app/Http/Requests/SearchPlayerRequest.php
+++ b/app/Http/Requests/SearchPlayerRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -25,7 +44,7 @@ class SearchPlayerRequest extends FormRequest
public function rules()
{
return [
- 'searchTerm' => 'required|string|max:17' // max user char limit set by Mojang
+ 'searchTerm' => 'required|string|max:17', // max user char limit set by Mojang
];
}
}
diff --git a/app/Http/Requests/SendInviteRequest.php b/app/Http/Requests/SendInviteRequest.php
new file mode 100755
index 0000000..234ed89
--- /dev/null
+++ b/app/Http/Requests/SendInviteRequest.php
@@ -0,0 +1,49 @@
+.
+ */
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class SendInviteRequest extends FormRequest
+{
+ /**
+ * Determine if the user is authorized to make this request.
+ *
+ * @return bool
+ */
+ public function authorize()
+ {
+ return true;
+ }
+
+ /**
+ * Get the validation rules that apply to the request.
+ *
+ * @return array
+ */
+ public function rules()
+ {
+ return [
+ 'user' => 'required|integer',
+ ];
+ }
+}
diff --git a/app/Http/Requests/StoreAbsenceRequest.php b/app/Http/Requests/StoreAbsenceRequest.php
new file mode 100755
index 0000000..77d9355
--- /dev/null
+++ b/app/Http/Requests/StoreAbsenceRequest.php
@@ -0,0 +1,36 @@
+hasPermissionTo('reviewer.requestAbsence');
+ }
+
+ /**
+ * Get the validation rules that apply to the request.
+ *
+ * @return array
+ */
+ public function rules()
+ {
+ return [
+ 'reason' => 'required|string',
+ 'start_date' => 'required|date',
+ 'predicted_end' => 'required|date|after:start_date',
+ 'available_assist' => 'required|string',
+ 'invalidAbsenceAgreement' => 'required|accepted'
+ ];
+ }
+}
diff --git a/app/Http/Requests/UpdateAbsenceRequest.php b/app/Http/Requests/UpdateAbsenceRequest.php
new file mode 100755
index 0000000..643ecc6
--- /dev/null
+++ b/app/Http/Requests/UpdateAbsenceRequest.php
@@ -0,0 +1,30 @@
+.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -28,7 +47,7 @@ class UpdateUserRequest extends FormRequest
'email' => 'required|email',
'name' => 'required|string',
'uuid' => 'required|max:32|min:32',
- 'roles' => 'required_without_all'
+ 'roles' => 'required_without_all',
];
}
}
diff --git a/app/Http/Requests/UploadFileRequest.php b/app/Http/Requests/UploadFileRequest.php
new file mode 100755
index 0000000..46b5ea7
--- /dev/null
+++ b/app/Http/Requests/UploadFileRequest.php
@@ -0,0 +1,32 @@
+ 'required|string|max:100',
+ 'description' => 'required|string|max:800',
+ 'file' => 'required|file|mimes:jpeg,jpg,png,bmp,tiff,docx,doc,odt,ott,xls,xlsx,ods,ots,gif,pdf,mp3,mp4,pptx,ppt,odp,ppsx,pub,psd,svg'
+ ];
+ }
+}
diff --git a/app/Http/Requests/UserDeleteRequest.php b/app/Http/Requests/UserDeleteRequest.php
new file mode 100755
index 0000000..2869d13
--- /dev/null
+++ b/app/Http/Requests/UserDeleteRequest.php
@@ -0,0 +1,57 @@
+.
+ */
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Support\Facades\Auth;
+
+class UserDeleteRequest extends FormRequest
+{
+ /**
+ * Determine if the user is authorized to make this request.
+ *
+ * @return bool
+ */
+ public function authorize()
+ {
+ return true;
+ }
+
+ /**
+ * Get the validation rules that apply to the request.
+ *
+ * @return array
+ */
+ public function rules()
+ {
+ if (Auth::user()->has2FA()) {
+ return [
+ 'currentPassword' => 'required|current_password:web',
+ 'otp' => 'required|integer|max:6',
+ ];
+ }
+
+ return [
+ 'currentPassword' => 'required|current_password:web',
+ ];
+ }
+}
diff --git a/app/Http/Requests/VacancyEditRequest.php b/app/Http/Requests/VacancyEditRequest.php
old mode 100644
new mode 100755
index c7ba958..b9c4c3e
--- a/app/Http/Requests/VacancyEditRequest.php
+++ b/app/Http/Requests/VacancyEditRequest.php
@@ -1,11 +1,29 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
-
class VacancyEditRequest extends FormRequest
{
/**
@@ -28,7 +46,7 @@ class VacancyEditRequest extends FormRequest
return [
'vacancyDescription' => 'required|string',
'vacancyFullDescription' => 'nullable|string',
- 'vacancyCount' => 'required|integer|min:1'
+ 'vacancyCount' => 'required|integer|min:1',
];
}
}
diff --git a/app/Http/Requests/VacancyRequest.php b/app/Http/Requests/VacancyRequest.php
old mode 100644
new mode 100755
index 176610d..07e333c
--- a/app/Http/Requests/VacancyRequest.php
+++ b/app/Http/Requests/VacancyRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -30,7 +49,7 @@ class VacancyRequest extends FormRequest
'permissionGroup' => 'required|string',
'discordRole' => 'required|string',
'vacancyCount' => 'required|integer',
- 'vacancyFormID' => 'required|integer'
+ 'vacancyFormID' => 'required|integer',
];
}
}
diff --git a/app/Http/Requests/VoteRequest.php b/app/Http/Requests/VoteRequest.php
old mode 100644
new mode 100755
index fdcf8c9..67e30a9
--- a/app/Http/Requests/VoteRequest.php
+++ b/app/Http/Requests/VoteRequest.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
@@ -24,7 +43,7 @@ class VoteRequest extends FormRequest
public function rules()
{
return [
- 'voteType' => 'required|string|in:VOTE_DENY,VOTE_APPROVE'
+ 'voteType' => 'required|string|in:VOTE_DENY,VOTE_APPROVE',
];
}
}
diff --git a/app/Http/Resources/ApplicationResource.php b/app/Http/Resources/ApplicationResource.php
new file mode 100755
index 0000000..3994e00
--- /dev/null
+++ b/app/Http/Resources/ApplicationResource.php
@@ -0,0 +1,28 @@
+ $this->id,
+ 'applicationStatus' => $this->applicationStatus,
+ 'applicant' => new UserResource(User::findOrFail($this->applicantUserID)),
+ 'response' => new ResponseResource(Response::findOrFail($this->applicantFormResponseID)),
+ 'created_at' => $this->created_at,
+ 'updated_at' => $this->updated_at
+ ];
+ }
+}
diff --git a/app/Http/Resources/AppointmentResource.php b/app/Http/Resources/AppointmentResource.php
new file mode 100755
index 0000000..4b71947
--- /dev/null
+++ b/app/Http/Resources/AppointmentResource.php
@@ -0,0 +1,19 @@
+ $this->id,
+ 'formName' => $this->formName,
+ 'formStructure' => json_decode($this->formStructure),
+ 'formStatus' => $this->formStatus,
+ 'created_at' => $this->created_at,
+ 'updated_at' => $this->updated_at
+ ];
+ }
+}
diff --git a/app/Http/Resources/OptionResource.php b/app/Http/Resources/OptionResource.php
new file mode 100755
index 0000000..0315068
--- /dev/null
+++ b/app/Http/Resources/OptionResource.php
@@ -0,0 +1,19 @@
+ $this->id,
+ 'form' => new FormResource(Form::findOrFail($this->responseFormID)),
+ 'responseData' => json_decode($this->responseData),
+ 'vacancy' => new VacancyResource(Vacancy::findOrFail($this->associatedVacancyID)),
+ 'created_at' => $this->created_at,
+ 'updated_at' => $this->updated_at
+ ];
+ }
+}
diff --git a/app/Http/Resources/TeamFileResource.php b/app/Http/Resources/TeamFileResource.php
new file mode 100755
index 0000000..efad411
--- /dev/null
+++ b/app/Http/Resources/TeamFileResource.php
@@ -0,0 +1,19 @@
+ $this->id,
+ 'uuid' => $this->uuid,
+ 'name' => $this->name,
+ 'email' => $this->email,
+ 'username' => $this->username,
+ 'created_at' => $this->created_at,
+ 'updated_at' => $this->updated_at,
+ 'current_team_id' => $this->current_team_id
+ ];
+ }
+}
diff --git a/app/Http/Resources/VacancyResource.php b/app/Http/Resources/VacancyResource.php
new file mode 100755
index 0000000..dc87ae1
--- /dev/null
+++ b/app/Http/Resources/VacancyResource.php
@@ -0,0 +1,19 @@
+bans as $ban)
- {
- $bannedUntil = Carbon::parse($ban->bannedUntil);
-
- if ($bannedUntil->equalTo(now()))
- {
- Log::debug('Deleted ban ' . $ban->id . ' belonging to ' . $ban->user->name);
- $ban->delete();
- }
- }
- }
-
- }
-}
diff --git a/app/Jobs/ProcessDueSuspensions.php b/app/Jobs/ProcessDueSuspensions.php
new file mode 100755
index 0000000..ca9e352
--- /dev/null
+++ b/app/Jobs/ProcessDueSuspensions.php
@@ -0,0 +1,58 @@
+.
+ */
+
+namespace App\Jobs;
+
+use App\Ban;
+use App\Services\AccountSuspensionService;
+use Carbon\Carbon;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Support\Facades\Log;
+
+class ProcessDueSuspensions implements ShouldQueue
+{
+ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+ /**
+ * Create a new job instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return void
+ */
+ public function handle(AccountSuspensionService $service)
+ {
+ Log::info('(suspension cleaner) Purging all expired suspension records.');
+
+ $service->purgeExpired();
+ }
+}
diff --git a/app/Listeners/DenyUser.php b/app/Listeners/DenyUser.php
old mode 100644
new mode 100755
index 0670cc3..34095ca
--- a/app/Listeners/DenyUser.php
+++ b/app/Listeners/DenyUser.php
@@ -1,11 +1,28 @@
.
+ */
+
namespace App\Listeners;
use App\Events\ApplicationDeniedEvent;
use App\Notifications\ApplicationDenied;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class DenyUser
@@ -29,9 +46,8 @@ class DenyUser
public function handle(ApplicationDeniedEvent $event)
{
$event->application->setStatus('DENIED');
- Log::info('User ' . $event->application->user->name . ' just had their application denied.');
+ Log::info('User '.$event->application->user->name.' just had their application denied.');
$event->application->user->notify(new ApplicationDenied($event->application));
-
}
}
diff --git a/app/Listeners/LogAuthenticationFailure.php b/app/Listeners/LogAuthenticationFailure.php
old mode 100644
new mode 100755
index afe1fee..15ce404
--- a/app/Listeners/LogAuthenticationFailure.php
+++ b/app/Listeners/LogAuthenticationFailure.php
@@ -1,9 +1,26 @@
.
+ */
+
namespace App\Listeners;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class LogAuthenticationFailure
@@ -27,10 +44,9 @@ class LogAuthenticationFailure
public function handle($event)
{
$targetAccountID = 0;
- $originalIP = "0.0.0.0";
+ $originalIP = '0.0.0.0';
- if (isset($event->user->id))
- {
+ if (isset($event->user->id)) {
$targetAccountID = $event->user->id;
}
diff --git a/app/Listeners/LogAuthenticationSuccess.php b/app/Listeners/LogAuthenticationSuccess.php
old mode 100644
new mode 100755
index 40781d9..7dd3ef3
--- a/app/Listeners/LogAuthenticationSuccess.php
+++ b/app/Listeners/LogAuthenticationSuccess.php
@@ -1,9 +1,26 @@
.
+ */
+
namespace App\Listeners;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class LogAuthenticationSuccess
diff --git a/app/Listeners/OnUserBanned.php b/app/Listeners/OnUserBanned.php
old mode 100644
new mode 100755
index 897a280..804aac5
--- a/app/Listeners/OnUserBanned.php
+++ b/app/Listeners/OnUserBanned.php
@@ -1,15 +1,30 @@
.
+ */
+
namespace App\Listeners;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Queue\InteractsWithQueue;
use App\Events\UserBannedEvent;
use App\Notifications\UserBanned;
-
-use Illuminate\Support\Facades\Log;
-
use App\User;
+use Illuminate\Support\Facades\Log;
class OnUserBanned
{
@@ -31,16 +46,12 @@ class OnUserBanned
*/
public function handle(UserBannedEvent $event)
{
+ Log::warning('User '.$event->user->name.' has just been banned from the site!');
- Log::warning("User " . $event->user->name . " has just been banned from the site!");
-
- foreach(User::all() as $user)
- {
- if ($user->isStaffMember())
- {
- $user->notify((new UserBanned($event->user, $event->ban))->delay(now()->addSeconds(10)));
- }
+ foreach (User::all() as $user) {
+ if ($user->isStaffMember()) {
+ $user->notify((new UserBanned($event->user, $event->ban))->delay(now()->addSeconds(10)));
+ }
}
-
}
}
diff --git a/app/Listeners/OnUserRegistration.php b/app/Listeners/OnUserRegistration.php
old mode 100644
new mode 100755
index 7ab08f9..f2fa814
--- a/app/Listeners/OnUserRegistration.php
+++ b/app/Listeners/OnUserRegistration.php
@@ -1,14 +1,30 @@
.
+ */
+
namespace App\Listeners;
-use Illuminate\Support\Facades\Log;
-use Illuminate\Auth\Events\Registered;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Queue\InteractsWithQueue;
-
-use App\User;
use App\Notifications\NewUser;
+use App\User;
+use Illuminate\Auth\Events\Registered;
+use Illuminate\Support\Facades\Log;
class OnUserRegistration
{
@@ -31,12 +47,10 @@ class OnUserRegistration
public function handle(Registered $event)
{
// TODO: Send push notification to online admins via browser (w/ pusher)
- Log::info('User ' . $event->user->name . ' has just registered for an account.');
+ Log::info('User '.$event->user->name.' has just registered for an account.');
- foreach(User::all() as $user)
- {
- if ($user->hasRole('admin'))
- {
+ foreach (User::all() as $user) {
+ if ($user->hasRole('admin')) {
$user->notify(new NewUser($event->user));
}
}
diff --git a/app/Listeners/PromoteUser.php b/app/Listeners/PromoteUser.php
old mode 100644
new mode 100755
index 62760b0..e53493b
--- a/app/Listeners/PromoteUser.php
+++ b/app/Listeners/PromoteUser.php
@@ -1,13 +1,28 @@
.
+ */
+
namespace App\Listeners;
use App\Events\ApplicationApprovedEvent;
-use App\StaffProfile;
use App\Notifications\ApplicationApproved;
-use Carbon\Carbon;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class PromoteUser
@@ -30,24 +45,12 @@ class PromoteUser
*/
public function handle(ApplicationApprovedEvent $event)
{
+ Log::info('User '.$event->application->user->name . 'has just been promoted (application approved)');
+
$event->application->setStatus('APPROVED');
-
- $staffProfile = StaffProfile::create([
- 'userID' => $event->application->user->id,
- 'approvalDate' => now()->toDateTimeString(),
- 'memberNotes' => 'Approved by staff members. Welcome them to the team!'
- ]);
-
+ $event->application->response->vacancy->decrease();
$event->application->user->assignRole('reviewer');
- Log::info('User ' . $event->application->user->name . ' has just been promoted!', [
- 'newRank' => $event->application->response->vacancy->permissionGroupName,
- 'staffProfileID' => $staffProfile->id
- ]);
-
$event->application->user->notify(new ApplicationApproved($event->application));
- // note: Also notify staff
- // TODO: Also assign new app role based on the permission group name
-
}
}
diff --git a/app/Mail/InviteToTeam.php b/app/Mail/InviteToTeam.php
new file mode 100755
index 0000000..5e2714d
--- /dev/null
+++ b/app/Mail/InviteToTeam.php
@@ -0,0 +1,68 @@
+.
+ */
+
+namespace App\Mail;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+use Mpociot\Teamwork\TeamInvite;
+
+class InviteToTeam extends Mailable
+{
+ use Queueable, SerializesModels;
+
+ public $teamName;
+
+ public $name;
+
+ public $inviterName;
+
+ public $denyToken;
+
+ public $acceptToken;
+
+ /**
+ * Create a new message instance.
+ *
+ * @return void
+ */
+ public function __construct(TeamInvite $invite)
+ {
+ $this->teamName = $invite->team->name;
+ $this->name = $invite->user->name;
+ $this->inviterName = $invite->inviter->name;
+ $this->acceptToken = $invite->accept_token;
+ $this->denyToken = $invite->deny_token;
+ }
+
+ /**
+ * Build the message.
+ *
+ * @return $this
+ */
+ public function build()
+ {
+ return $this
+ ->subject('You have just been invited to '.$this->teamName)
+ ->view('mail.invited-to-team');
+ }
+}
diff --git a/app/Mail/NewContactSubmission.php b/app/Mail/NewContactSubmission.php
old mode 100644
new mode 100755
index 24373f8..15e2cdf
--- a/app/Mail/NewContactSubmission.php
+++ b/app/Mail/NewContactSubmission.php
@@ -1,9 +1,27 @@
.
+ */
+
namespace App\Mail;
use Illuminate\Bus\Queueable;
-use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
diff --git a/app/Mail/UserAccountDeleteConfirmation.php b/app/Mail/UserAccountDeleteConfirmation.php
new file mode 100755
index 0000000..33b021f
--- /dev/null
+++ b/app/Mail/UserAccountDeleteConfirmation.php
@@ -0,0 +1,67 @@
+.
+ */
+
+namespace App\Mail;
+
+use App\User;
+use Illuminate\Bus\Queueable;
+use Illuminate\Mail\Mailable;
+use Illuminate\Queue\SerializesModels;
+
+class UserAccountDeleteConfirmation extends Mailable
+{
+ use Queueable, SerializesModels;
+
+ public $deleteToken;
+
+ public $cancelToken;
+
+ public $originalIP;
+
+ public $name;
+
+ public $userID;
+
+ /**
+ * Create a new message instance.
+ *
+ * @return void
+ */
+ public function __construct(User $user, array $tokens, string $originalIP)
+ {
+ $this->deleteToken = $tokens['delete'];
+ $this->cancelToken = $tokens['cancel'];
+
+ $this->originalIP = $originalIP;
+ $this->name = $user->name;
+ $this->userID = $user->id;
+ }
+
+ /**
+ * Build the message.
+ *
+ * @return $this
+ */
+ public function build()
+ {
+ return $this->view('mail.deleted-account');
+ }
+}
diff --git a/app/Notifications/ApplicationApproved.php b/app/Notifications/ApplicationApproved.php
old mode 100644
new mode 100755
index bfde408..d4c6ca3
--- a/app/Notifications/ApplicationApproved.php
+++ b/app/Notifications/ApplicationApproved.php
@@ -1,21 +1,51 @@
.
+ */
+
namespace App\Notifications;
+use App\Application;
use App\Facades\Options;
use App\Traits\Cancellable;
+use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Notification;
-use App\Application;
class ApplicationApproved extends Notification implements ShouldQueue
{
use Queueable, Cancellable;
- public $application;
+
+ /**
+ * @var Application The application we're notifying about
+ */
+ public Application $application;
+
+
+ /**
+ * @var User The candidate
+ */
+ public User $user;
/**
* Create a new notification instance.
@@ -34,7 +64,7 @@ class ApplicationApproved extends Notification implements ShouldQueue
public function optOut($notifiable)
{
- return Options::getOption('notify_applicant_approved') !== 1;
+ return Options::getOption('notify_applicant_approved') != 1;
}
/**
@@ -45,36 +75,32 @@ class ApplicationApproved extends Notification implements ShouldQueue
*/
public function toMail($notifiable)
{
-
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->from(config('notification.sender.address'), config('notification.sender.name'))
- ->subject(config('app.name') . ' - ' . $this->application->response->vacancy->vacancyName . ' application approved')
- ->line('
')
- ->line('Congratulations! Our Staff team has reviewed your application today, and your application has been approved.')
+ ->subject(config('app.name').' - application approved')
+ ->line('Congratulations! Your most recent application has been approved by the reviewing team.')
->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('You should have received more information about your onboarding process by now.')
->line('Good luck and welcome aboard!')
->action('Sign in', url(route('login')))
- ->line('Thank you!');
+ ->salutation('The team at ' . config('app.name'));
}
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(function ($attachment) use ($notifiable, $url, $roles) {
$attachment->title('New staff member')
->fields([
'Name' => $notifiable->name,
'Email' => $notifiable->email,
- 'Roles' => $roles
+ 'Roles' => $roles,
])
->action('View profile', $url);
});
diff --git a/app/Notifications/ApplicationConfirmed.php b/app/Notifications/ApplicationConfirmed.php
new file mode 100755
index 0000000..33148d2
--- /dev/null
+++ b/app/Notifications/ApplicationConfirmed.php
@@ -0,0 +1,68 @@
+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)
+ ->greeting('Hi ' . $notifiable->name . ',')
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name') . ' - application confirmed')
+ ->line('We\'re writing you to let you know that your recent application with us has been received, and will be processed in 24/48 hours.')
+ ->line('You will receive regular notifications about your application\'s status.')
+ ->action('View active applications', url(route('showUserApps')))
+ ->salutation('The team at ' . config('app.name'));
+ }
+
+ /**
+ * 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
old mode 100644
new mode 100755
index 03a4382..427d75e
--- a/app/Notifications/ApplicationDenied.php
+++ b/app/Notifications/ApplicationDenied.php
@@ -1,19 +1,37 @@
.
+ */
+
namespace App\Notifications;
+use App\Application;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Notification;
-use App\Application;
class ApplicationDenied extends Notification implements ShouldQueue
{
use Queueable;
-
public $application;
/**
@@ -45,31 +63,30 @@ class ApplicationDenied extends Notification implements ShouldQueue
*/
public function toMail($notifiable)
{
-
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->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.')
+ ->subject(config('app.name').' - application denied')
+ ->line('We\'re sorry to inform you that your application with us has been reviewed and declined.')
+ ->line('Our review team denies applications for several reasons, including poor answers, missing information, or lacking qualifications.')
+ ->line('Please review your application and try again later. You can view your account\'s eligibility status in your dashboard.')
->action('Review application', url(route('showUserApp', ['application' => $this->application->id])))
- ->line('Better luck next time!');
+ ->salutation('The team at ' . config('app.name'));
}
-
public function toSlack($notifiable)
{
- $notifiableName = $notifiable->name;
+ $notifiableName = $notifiable->name;
- return (new SlackMessage)
+ return (new SlackMessage)
->error()
->content('An application has just been denied.')
- ->attachment(function($attachment) use ($notifiableName){
+ ->attachment(function ($attachment) use ($notifiableName) {
$attachment->title('Application denied!')
- ->content($notifiableName . '\'s application has just been denied. They can try again in 30 days.');
+ ->content($notifiableName.'\'s application has just been denied. They can try again in 30 days.');
});
-
}
+
/**
* Get the array representation of the notification.
*
diff --git a/app/Notifications/ApplicationMoved.php b/app/Notifications/ApplicationMoved.php
old mode 100644
new mode 100755
index 9598258..b8d8d56
--- a/app/Notifications/ApplicationMoved.php
+++ b/app/Notifications/ApplicationMoved.php
@@ -1,13 +1,33 @@
.
+ */
+
namespace App\Notifications;
+use App\Facades\Options;
+use App\Traits\Cancellable;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
-use App\Traits\Cancellable;
-use App\Facades\Options;
+use Illuminate\Support\Facades\Log;
class ApplicationMoved extends Notification implements ShouldQueue
{
@@ -23,9 +43,21 @@ class ApplicationMoved extends Notification implements ShouldQueue
//
}
+ public function channels()
+ {
+ Log::debug('Application moved notification: channels chosen', [
+ 'channels' => $this->chooseChannelsViaOptions()
+ ]);
+ return $this->chooseChannelsViaOptions();
+ }
+
public function optOut($notifiable)
{
- return Options::getOption('notify_application_status_change') !== 1;
+ Log::debug('Application moved notification: opt out verified', [
+ 'opt-out' => Options::getOption('notify_application_status_change') != 1
+ ]);
+
+ return Options::getOption('notify_application_status_change') != 1;
}
/**
@@ -37,12 +69,13 @@ class ApplicationMoved extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->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.')
+ ->subject(config('app.name').' - application updated')
+ ->line('Your application has been moved to the next step.')
+ ->line('This means our team has reviewed it and an interview will be scheduled soon.')
->action('Sign in', url(route('login')))
- ->line('Thank you!');
+ ->salutation('The team at ' . config('app.name'));
}
/**
diff --git a/app/Notifications/AppointmentCancelled.php b/app/Notifications/AppointmentCancelled.php
new file mode 100755
index 0000000..3bfc80e
--- /dev/null
+++ b/app/Notifications/AppointmentCancelled.php
@@ -0,0 +1,78 @@
+application = $app;
+ $this->reason = $reason;
+ $this->appointmentDate = $appointmentDate;
+ }
+
+ /**
+ * 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)
+ {
+ // TODO: Switch to HTML & Blade.
+
+ return (new MailMessage)
+ ->greeting("Hi " . $notifiable->name . ",")
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name').' - interview cancelled')
+ ->line('The interview that was previously scheduled with you has been cancelled.')
+ ->line('Date and time of the old appointment: '.$this->appointmentDate)
+ ->line('Your appointment was cancelled for the following reason: ' . $this->reason)
+ ->line('A team member may contact you to reschedule within a new timeframe - you may also let us know of a date and time that suits you.')
+ ->line('Your application will likely be declined if you do not reschedule an interview.')
+ ->action('View active applications', url(route('showUserApps')))
+ ->salutation('The team at ' . config('app.name'));
+ }
+
+ /**
+ * 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
old mode 100644
new mode 100755
index c1e879a..a16b2b2
--- a/app/Notifications/AppointmentFinished.php
+++ b/app/Notifications/AppointmentFinished.php
@@ -1,7 +1,27 @@
.
+ */
+
namespace App\Notifications;
+use App\Appointment;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
@@ -11,14 +31,17 @@ class AppointmentFinished extends Notification implements ShouldQueue
{
use Queueable;
+
+ public $appointment;
+
/**
* Create a new notification instance.
*
* @return void
*/
- public function __construct()
+ public function __construct(Appointment $appointment)
{
- //
+ $this->appointment = $appointment;
}
/**
@@ -41,12 +64,14 @@ class AppointmentFinished extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting("Hi " . $notifiable->name . ",")
->from(config('notification.sender.address'), config('notification.sender.name'))
- ->subject(config('app.name') . ' - Appointment completed')
- ->line('Your appointment has been marked as completed!')
+ ->subject(config('app.name').' - appointment completed')
+ ->line('Your appointment, "' . $this->appointment->appointmentDescription . '", 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!');
+ ->salutation('The team at ' . config('app.name'));
+
}
/**
diff --git a/app/Notifications/AppointmentScheduled.php b/app/Notifications/AppointmentScheduled.php
old mode 100644
new mode 100755
index 3ad3f60..74c062d
--- a/app/Notifications/AppointmentScheduled.php
+++ b/app/Notifications/AppointmentScheduled.php
@@ -1,19 +1,36 @@
.
+ */
+
namespace App\Notifications;
+use App\Appointment;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
-use App\Appointment;
-
class AppointmentScheduled extends Notification implements ShouldQueue
{
use Queueable;
-
protected $appointment;
/**
@@ -46,14 +63,14 @@ class AppointmentScheduled extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->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.')
+ ->subject(config('app.name').' - Interview scheduled')
+ ->line('An 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.'.')
->action('Sign in', url(route('login')))
- ->line('Thank you!');
+ ->salutation('The team at ' . config('app.name'));
}
/**
diff --git a/app/Notifications/ChangedPassword.php b/app/Notifications/ChangedPassword.php
old mode 100644
new mode 100755
index bc4cca5..9c6df1f
--- a/app/Notifications/ChangedPassword.php
+++ b/app/Notifications/ChangedPassword.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Notifications;
use Illuminate\Bus\Queueable;
@@ -41,12 +60,13 @@ class ChangedPassword extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->from(config('notification.sender.address'), config('notification.sender.name'))
- ->subject(config('app.name') . ' - Account password changed')
+ ->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!');
+ ->salutation('The team at ' . config('app.name'));
}
/**
diff --git a/app/Notifications/EmailChanged.php b/app/Notifications/EmailChanged.php
old mode 100644
new mode 100755
index e946102..26dbd6c
--- a/app/Notifications/EmailChanged.php
+++ b/app/Notifications/EmailChanged.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Notifications;
use Illuminate\Bus\Queueable;
@@ -41,11 +60,13 @@ class EmailChanged extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->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.')
+ ->subject(config('app.name').' - Email address changed')
+ ->line('The email address for your account has just been updated.')
+ ->line('If this was not you, please change your password immediately. We recommend you also activate multi-factor authentication.')
->action('Sign in', url(route('login')))
- ->line('Thank you!');
+ ->salutation('The team at ' . config('app.name'));
}
/**
diff --git a/app/Notifications/NewApplicant.php b/app/Notifications/NewApplicant.php
old mode 100644
new mode 100755
index 0fdbac9..70b70dd
--- a/app/Notifications/NewApplicant.php
+++ b/app/Notifications/NewApplicant.php
@@ -1,26 +1,42 @@
.
+ */
+
namespace App\Notifications;
+use App\Application;
+use App\Facades\Options;
+use App\Traits\Cancellable;
+use App\Vacancy;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Notification;
-use App\Application;
-use App\Vacancy;
-
-use App\Traits\Cancellable;
-use App\Facades\Options;
class NewApplicant extends Notification implements ShouldQueue
{
use Queueable, Cancellable;
-
protected $application;
-
protected $vacancy;
/**
@@ -36,8 +52,7 @@ class NewApplicant extends Notification implements ShouldQueue
public function channels()
{
- if (Options::getOption('enable_slack_notifications') == 1)
- {
+ if (Options::getOption('enable_slack_notifications') == 1) {
return ['slack'];
}
@@ -46,7 +61,7 @@ class NewApplicant extends Notification implements ShouldQueue
public function optOut($notifiable)
{
- return Options::getOption('notify_new_user') !== 1;
+ return Options::getOption('notify_new_user') != 1;
}
/**
@@ -58,18 +73,17 @@ class NewApplicant extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->from(config('notification.sender.address'), config('notification.sender.name'))
- ->subject(config('app.name') . ' - New application')
+ ->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') . '.')
+ ->line('You are receiving this because you\'re a staff member at '.config('app.name').'.')
->action('View Application', url(route('showUserApp', ['application' => $this->application->id])))
- ->line('Thank you!');
+ ->salutation('The team at ' . config('app.name'));
}
-
public function toSlack($notifiable)
{
-
$vacancyDetails = [];
$vacancyDetails['name'] = $this->vacancy->vacancyName;
$vacancyDetails['slots'] = $this->vacancy->vacancyCount;
@@ -80,16 +94,17 @@ class NewApplicant extends Notification implements ShouldQueue
return (new SlackMessage)
->success()
->content('Notice: New application coming through. Please review as soon as possible.')
- ->attachment(function($attachment) use ($vacancyDetails, $url, $applicant){
+ ->attachment(function ($attachment) use ($vacancyDetails, $url, $applicant) {
$attachment->title('Application details')
->fields([
- 'Applied for' => $vacancyDetails['name'],
- 'Avaiable positions' => $vacancyDetails['slots'],
- 'Applicant' => $applicant
+ 'Applied for' => $vacancyDetails['name'],
+ 'Available positions' => $vacancyDetails['slots'],
+ 'Applicant' => $applicant,
])
->action('Review application', $url);
});
}
+
/**
* Get the array representation of the notification.
*
diff --git a/app/Notifications/NewComment.php b/app/Notifications/NewComment.php
old mode 100644
new mode 100755
index 10c7bfc..571b5a9
--- a/app/Notifications/NewComment.php
+++ b/app/Notifications/NewComment.php
@@ -1,21 +1,39 @@
.
+ */
+
namespace App\Notifications;
+use App\Application;
+use App\Comment;
+use App\Facades\Options;
+use App\Traits\Cancellable;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
-use App\Comment;
-use App\Application;
-use App\Traits\Cancellable;
-use App\Facades\Options;
class NewComment extends Notification implements ShouldQueue
{
use Queueable, Cancellable;
-
protected $application;
/**
@@ -30,7 +48,7 @@ class NewComment extends Notification implements ShouldQueue
public function optOut($notifiable)
{
- return Options::getOption('notify_application_comment') !== 1;
+ return Options::getOption('notify_application_comment') != 1;
}
/**
@@ -42,12 +60,13 @@ class NewComment extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->from(config('notification.sender.address'), config('notification.sender.name'))
- ->subject(config('app.name') . ' - New comment')
+ ->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', ['application' => $this->application->id])))
- ->line('Thank you!');
+ ->salutation('The team at ' . config('app.name'));
}
/**
diff --git a/app/Notifications/NewContact.php b/app/Notifications/NewContact.php
old mode 100644
new mode 100755
index 761f27c..2edba6e
--- a/app/Notifications/NewContact.php
+++ b/app/Notifications/NewContact.php
@@ -1,9 +1,27 @@
.
+ */
+
namespace App\Notifications;
use Illuminate\Bus\Queueable;
-use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Collection;
@@ -44,23 +62,23 @@ class NewContact extends Notification
public function toMail($notifiable)
{
if ($this->message->has([
- 'message',
- 'ip',
- 'email'
- ]))
- {
- return (new MailMessage)
+ 'message',
+ 'ip',
+ 'email',
+ ])) {
+ return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->line('We\'ve received a new contact form submission in the StaffManagement app center.')
->line('This is what they sent: ')
->line('')
->line($this->message->get('message'))
->line('')
- ->line('This message was received from ' . $this->message->get('ip') . ' and submitted by ' . $this->message->get('email') . '.')
+ ->line('This message was received from '.$this->message->get('ip').' and submitted by '.$this->message->get('email').'.')
->action('Sign in', url(route('login')))
- ->line('Thank you!');
+ ->salutation('The team at ' . config('app.name'));
}
- throw new \InvalidArgumentException("Invalid arguments supplied to NewContact!");
+ throw new \InvalidArgumentException('Invalid arguments supplied to NewContact!');
}
/**
diff --git a/app/Notifications/NewUser.php b/app/Notifications/NewUser.php
old mode 100644
new mode 100755
index ec31cd6..a5048bb
--- a/app/Notifications/NewUser.php
+++ b/app/Notifications/NewUser.php
@@ -1,17 +1,35 @@
.
+ */
+
namespace App\Notifications;
+use App\Facades\Options;
+use App\Facades\UUID;
+use App\Traits\Cancellable;
+use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
-use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\SlackMessage;
-
-use App\User;
-use App\Facades\UUID;
-use App\Traits\Cancellable;
-use App\Facades\Options;
+use Illuminate\Notifications\Notification;
class NewUser extends Notification implements ShouldQueue
{
@@ -36,7 +54,7 @@ class NewUser extends Notification implements ShouldQueue
public function optOut($notifiable)
{
- return Options::getOption('notify_new_user') !== 1;
+ return Options::getOption('notify_new_user') != 1;
}
/**
@@ -48,38 +66,37 @@ class NewUser extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->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.')
+ ->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!');
+ ->salutation('The team at ' . config('app.name'));
}
public function toSlack($notifiable)
{
- $user = [];
+ $user = [];
- $user['name'] = $this->user->name;
- $user['email'] = $this->user->email;
- $user['username'] = UUID::toUsername($this->user->uuid);
+ $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;
+ $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(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']
+ 'Email address' => $user['email'],
+ 'Name' => $user['name'],
+ 'Minecraft Username' => $user['username'],
+ 'Registration date' => $user['created_at'],
]);
-
});
}
diff --git a/app/Notifications/UserBanned.php b/app/Notifications/UserBanned.php
old mode 100644
new mode 100755
index f5d5c4e..76f5217
--- a/app/Notifications/UserBanned.php
+++ b/app/Notifications/UserBanned.php
@@ -1,15 +1,33 @@
.
+ */
+
namespace App\Notifications;
+use App\Ban;
+use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
-use App\User;
-use App\Ban;
-
class UserBanned extends Notification implements ShouldQueue
{
use Queueable;
@@ -17,6 +35,7 @@ class UserBanned extends Notification implements ShouldQueue
protected $user;
protected $ban;
+
/**
* Create a new notification instance.
*
@@ -48,12 +67,13 @@ class UserBanned extends Notification implements ShouldQueue
public function toMail($notifiable)
{
return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
->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 . '.')
+ ->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!');
+ ->salutation('The team at ' . config('app.name'));
}
/**
diff --git a/app/Notifications/VacancyClosed.php b/app/Notifications/VacancyClosed.php
deleted file mode 100644
index 8ae85e4..0000000
--- a/app/Notifications/VacancyClosed.php
+++ /dev/null
@@ -1,65 +0,0 @@
-vacancy = $vacancy;
- }
-
- public function optOut($notifiable)
- {
- return Options::getOption('notify_vacancystatus_change') !== 1;
- }
-
- /**
- * 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/Notifications/VacancyStatusUpdated.php b/app/Notifications/VacancyStatusUpdated.php
new file mode 100755
index 0000000..d3c1359
--- /dev/null
+++ b/app/Notifications/VacancyStatusUpdated.php
@@ -0,0 +1,96 @@
+.
+ */
+
+namespace App\Notifications;
+
+use App\Facades\Options;
+use App\Traits\Cancellable;
+use App\Vacancy;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Notifications\Messages\MailMessage;
+use Illuminate\Notifications\Notification;
+use Illuminate\Queue\SerializesModels;
+
+class VacancyStatusUpdated extends Notification implements ShouldQueue
+{
+ use Queueable, SerializesModels, Cancellable;
+
+ protected string $status;
+
+
+ protected Vacancy $vacancy;
+
+ /**
+ * Create a new notification instance.
+ *
+ * @return void
+ */
+ public function __construct(Vacancy $vacancy, $status)
+ {
+ // there's no simpler solution to this for now, but an array works
+ $statusDict = [
+ 'open' => 'opened',
+ 'close' => 'closed'
+ ];
+
+ $this->vacancy = $vacancy;
+ $this->status = $statusDict[$status];
+ }
+
+ public function optOut($notifiable)
+ {
+ return Options::getOption('notify_vacancystatus_change') != 1;
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+
+ return (new MailMessage)
+ ->greeting('Hi ' . $notifiable->name . ',')
+ ->from(config('notification.sender.address'), config('notification.sender.name'))
+ ->subject(config('app.name').' - Vacancy ' . $this->status)
+ ->line('The vacancy '.$this->vacancy->vacancyName.', with '.$this->vacancy->vacancyCount.' remaining slots, has just been ' . $this->status . '.')
+ ->line('Please be aware that this position may be change at any time.')
+ ->line('You are receiving this email because you currently have staff/team member privileges. Depending on your access level, you may not be able to view the list of positions on the backoffice.')
+ ->action('View positions', url(route('showPositions')))
+ ->salutation('The team at ' . config('app.name'));
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ //
+ ];
+ }
+}
diff --git a/app/Observers/ApplicationObserver.php b/app/Observers/ApplicationObserver.php
old mode 100644
new mode 100755
index 8821414..16b6615
--- a/app/Observers/ApplicationObserver.php
+++ b/app/Observers/ApplicationObserver.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Observers;
use App\Application;
@@ -34,24 +53,20 @@ class ApplicationObserver
$application->response()->delete();
$votes = $application->votes;
- foreach ($votes as $vote)
- {
- Log::debug('Referential integrity cleanup: Deleting and detaching vote ' . $vote->id);
+ foreach ($votes as $vote) {
+ Log::debug('Referential integrity cleanup: Deleting and detaching vote '.$vote->id);
$vote->application()->detach($application->id);
$vote->delete();
}
- if (!is_null($application->appointment))
- {
+ if (! is_null($application->appointment)) {
Log::debug('RIC: Deleting appointment!');
$application->appointment()->delete();
}
- if (!$application->comments->isEmpty())
- {
+ if (! $application->comments->isEmpty()) {
Log::debug('RIC: Deleting comments!');
- foreach($application->comments as $comment)
- {
+ foreach ($application->comments as $comment) {
$comment->delete();
}
}
diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php
old mode 100644
new mode 100755
index 38f7660..16d2cdb
--- a/app/Observers/UserObserver.php
+++ b/app/Observers/UserObserver.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Observers;
use App\Profile;
@@ -8,6 +27,11 @@ use Illuminate\Support\Facades\Log;
class UserObserver
{
+ public function __construct()
+ {
+ Log::debug('User observer has been initialised and ready for use!');
+ }
+
/**
* Handle the user "created" event.
*
@@ -21,7 +45,7 @@ class UserObserver
'profileShortBio' => 'Write a one-liner about you here!',
'profileAboutMe' => 'Tell us a bit about you.',
'socialLinks' => '{}',
- 'userID' => $user->id
+ 'userID' => $user->id,
]);
}
@@ -39,20 +63,22 @@ class UserObserver
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)
- {
- // code moved to Application observer, where it gets rid of attached elements individually
- Log::debug('RIC: Deleting application ' . $application->id);
- $application->delete();
+ Log::debug("Deleting observer running");
+ if ($user->isForceDeleting()) {
+ $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) {
+ // code moved to Application observer, where it gets rid of attached elements individually
+ Log::debug('RIC: Deleting application '.$application->id);
+ $application->delete();
+ }
}
+ } else {
+ Log::debug('RIC: Not cleaning up soft deleted models!');
}
Log::debug('RIC: Cleanup done!');
@@ -66,7 +92,6 @@ class UserObserver
*/
public function deleted(User $user)
{
- //
}
/**
@@ -88,6 +113,8 @@ class UserObserver
*/
public function forceDeleted(User $user)
{
- //
+ Log::info('Model has been force deleted', [
+ 'modelID' => $user->id,
+ ]);
}
}
diff --git a/app/Observers/VacancyObserver.php b/app/Observers/VacancyObserver.php
old mode 100644
new mode 100755
index decf1f7..c0752c0
--- a/app/Observers/VacancyObserver.php
+++ b/app/Observers/VacancyObserver.php
@@ -1,9 +1,29 @@
.
+ */
+
namespace App\Observers;
+use App\Application;
use App\Vacancy;
-
+use Illuminate\Support\Facades\Log;
class VacancyObserver
{
@@ -29,6 +49,16 @@ class VacancyObserver
//
}
+ public function deleting(Vacancy $vacancy)
+ {
+ foreach(Application::with('response.vacancy')->get() as $app) {
+ if ($app->response->vacancy->id == $vacancy->id)
+ {
+ $app->delete();
+ }
+ }
+ }
+
/**
* Handle the vacancy "deleted" event.
*
@@ -37,7 +67,7 @@ class VacancyObserver
*/
public function deleted(Vacancy $vacancy)
{
- // TODO: Handle deletion of children's data
+
}
/**
diff --git a/app/OneoffApplicant.php b/app/OneoffApplicant.php
new file mode 100755
index 0000000..9a25c9e
--- /dev/null
+++ b/app/OneoffApplicant.php
@@ -0,0 +1,17 @@
+belongsTo('App\Application', 'id', 'application_id');
+ }
+}
+
diff --git a/app/Options.php b/app/Options.php
old mode 100644
new mode 100755
index e650bbc..895fe88
--- a/app/Options.php
+++ b/app/Options.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
@@ -8,6 +27,6 @@ class Options extends Model
{
public $fillable = [
'option_name',
- 'option_value'
+ 'option_value',
];
}
diff --git a/app/Policies/AbsencePolicy.php b/app/Policies/AbsencePolicy.php
new file mode 100755
index 0000000..7e5c68f
--- /dev/null
+++ b/app/Policies/AbsencePolicy.php
@@ -0,0 +1,126 @@
+hasPermissionTo('admin.viewAllAbsences'))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+
+ public function viewOwn(User $user): bool
+ {
+ if ($user->hasPermissionTo('reviewer.viewAbsence')) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Determine whether the user can view the model.
+ *
+ * @param \App\User $user
+ * @param \App\Absence $absence
+ * @return \Illuminate\Auth\Access\Response|bool
+ */
+ public function view(User $user, Absence $absence)
+ {
+ if ($user->hasPermissionTo('reviewer.viewAbsence') && $user->is($absence->requester) || $user->hasPermissionTo('admin.manageAbsences'))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Determine whether the user can create models.
+ *
+ * @param \App\User $user
+ * @return \Illuminate\Auth\Access\Response|bool
+ */
+ public function create(User $user)
+ {
+ return $user->hasPermissionTo('reviewer.requestAbsence');
+ }
+
+
+ /**
+ * Determine whether the user can approve the absence request
+ *
+ * @param User $user
+ * @param Absence $absence
+ * @return bool
+ */
+ public function approve(User $user, Absence $absence): bool
+ {
+ if ($user->can('admin.manageAbsences') && $user->isNot($absence->requester))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+
+ public function decline(User $user, Absence $absence): bool
+ {
+ if ($user->can('admin.manageAbsences') && $user->isNot($absence->requester))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Determine whether the user can cancel the absence request
+ *
+ * @param User $user
+ * @param Absence $absence
+ * @return bool
+ */
+ public function cancel(User $user, Absence $absence): bool {
+
+ if($user->is($absence->requester) && $user->can('reviewer.withdrawAbsence')) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Determine whether the user can delete the model.
+ *
+ * @param \App\User $user
+ * @param \App\Absence $absence
+ * @return \Illuminate\Auth\Access\Response|bool
+ */
+ public function delete(User $user, Absence $absence)
+ {
+ return $user->hasPermissionTo('admin.manageAbsences');
+ }
+
+
+}
diff --git a/app/Policies/ApiKeyPolicy.php b/app/Policies/ApiKeyPolicy.php
new file mode 100755
index 0000000..eb728bc
--- /dev/null
+++ b/app/Policies/ApiKeyPolicy.php
@@ -0,0 +1,72 @@
+hasRole('admin'))
+ return true;
+
+ return false;
+ }
+
+
+ /**
+ * Determine whether the user can create models.
+ *
+ * @param \App\User $user
+ * @return mixed
+ */
+ public function create(User $user)
+ {
+ if ($user->hasRole('admin'))
+ return true;
+
+ return false;
+ }
+
+ /**
+ * Determine whether the user can update the model.
+ *
+ * @param \App\User $user
+ * @param \App\ApiKey $apiKey
+ * @return mixed
+ */
+ public function update(User $user, ApiKey $apiKey)
+ {
+ if ($user->hasRole('admin'))
+ return true;
+
+ return false;
+ }
+
+ /**
+ * Determine whether the user can delete the model.
+ *
+ * @param \App\User $user
+ * @param \App\ApiKey $apiKey
+ * @return mixed
+ */
+ public function delete(User $user, ApiKey $apiKey)
+ {
+ if ($user->hasRole('admin'))
+ return true;
+
+ return false;
+ }
+
+}
diff --git a/app/Policies/ApplicationPolicy.php b/app/Policies/ApplicationPolicy.php
old mode 100644
new mode 100755
index 07edbca..6c7c2b9
--- a/app/Policies/ApplicationPolicy.php
+++ b/app/Policies/ApplicationPolicy.php
@@ -1,11 +1,30 @@
.
+ */
+
namespace App\Policies;
use App\Application;
-use Illuminate\Auth\Access\Response;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
+use Illuminate\Auth\Access\Response;
class ApplicationPolicy
{
@@ -23,22 +42,20 @@ class ApplicationPolicy
public function viewAny(User $user)
{
- if ($user->can('applications.view.all'))
- {
- return Response::allow();
- }
+ if ($user->can('applications.view.all')) {
+ return Response::allow();
+ }
- return Response::deny('Forbidden');
+ return Response::deny('Forbidden');
}
public function view(User $user, Application $application)
{
- if ($user->is($application->user) && $user->can('applications.view.own') || $user->can('applications.view.all'))
- {
- return Response::allow();
- }
+ if ($user->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');
+ return Response::deny('You are not authorised to view this application');
}
public function update(User $user)
@@ -48,8 +65,6 @@ class ApplicationPolicy
public function delete(User $user, Application $application)
{
-
- return $user->hasRole('admin');
-
+ return $user->hasRole('admin');
}
}
diff --git a/app/Policies/AppointmentPolicy.php b/app/Policies/AppointmentPolicy.php
old mode 100644
new mode 100755
index e541e4c..29a5b50
--- a/app/Policies/AppointmentPolicy.php
+++ b/app/Policies/AppointmentPolicy.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Policies;
use App\Appointment;
diff --git a/app/Policies/BanPolicy.php b/app/Policies/BanPolicy.php
old mode 100644
new mode 100755
index 754458e..0eaa62e
--- a/app/Policies/BanPolicy.php
+++ b/app/Policies/BanPolicy.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Policies;
use App\Ban;
@@ -44,12 +63,13 @@ class BanPolicy
*/
public function create(User $user, User $targetUser)
{
- Log::debug("Authorization check started", [
+ Log::debug('Authorization check started', [
'requiredRoles' => 'admin',
'hasRequiredRole' => $user->hasRole('admin'),
'targetUser' => $targetUser->username,
- 'isCurrentUser' => Auth::user()->is($user)
+ 'isCurrentUser' => Auth::user()->is($user),
]);
+
return $user->hasRole('admin') && $user->isNot($targetUser);
}
diff --git a/app/Policies/CommentPolicy.php b/app/Policies/CommentPolicy.php
old mode 100644
new mode 100755
index 477b445..b9ce668
--- a/app/Policies/CommentPolicy.php
+++ b/app/Policies/CommentPolicy.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Policies;
use App\Comment;
@@ -65,8 +84,7 @@ class CommentPolicy
*/
public function delete(User $user, Comment $comment)
{
- if ($user->is($comment->user) || $user->hasRole('admin'))
- {
+ if ($user->is($comment->user) || $user->hasRole('admin')) {
return true;
}
diff --git a/app/Policies/FormPolicy.php b/app/Policies/FormPolicy.php
old mode 100644
new mode 100755
index c382190..ca6e808
--- a/app/Policies/FormPolicy.php
+++ b/app/Policies/FormPolicy.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Policies;
use App\Form;
@@ -35,8 +54,9 @@ class FormPolicy
public function viewFormbuilder(User $user)
{
- return $user->can('admin.hiring.formbuilder');
+ return $user->can('admin.hiring.formbuilder');
}
+
/**
* Determine whether the user can create models.
*
diff --git a/app/Policies/ProfilePolicy.php b/app/Policies/ProfilePolicy.php
old mode 100644
new mode 100755
index bd3bc01..d19801f
--- a/app/Policies/ProfilePolicy.php
+++ b/app/Policies/ProfilePolicy.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Policies;
use App\Profile;
@@ -17,7 +36,6 @@ class ProfilePolicy
*/
public function __construct()
{
-
}
public function edit(User $user, Profile $profile)
diff --git a/app/Policies/TeamFilePolicy.php b/app/Policies/TeamFilePolicy.php
new file mode 100755
index 0000000..494e34c
--- /dev/null
+++ b/app/Policies/TeamFilePolicy.php
@@ -0,0 +1,42 @@
+hasPermissionTo('teams.files.view');
+ }
+
+ public function store(User $user, Team $team)
+ {
+ return $user->hasPermissionTo('teams.files.upload') || $user->hasTeam($team);
+ }
+
+ public function download(User $user)
+ {
+ return $user->hasPermissionTo('teams.files.download');
+ }
+
+ public function delete(User $user)
+ {
+ return $user->hasPermissionTo('teams.files.delete');
+ }
+}
diff --git a/app/Policies/TeamPolicy.php b/app/Policies/TeamPolicy.php
new file mode 100755
index 0000000..ad135cf
--- /dev/null
+++ b/app/Policies/TeamPolicy.php
@@ -0,0 +1,56 @@
+hasPermissionTo('teams.view');
+ }
+
+ public function create(User $user)
+ {
+ return $user->hasPermissionTo('teams.create');
+ }
+
+ public function update(User $user, Team $team)
+ {
+ // Team owners can update their team regardless of perm.
+ // This perm would let admins change all teams
+ return $user->isOwnerOfTeam($team) || $user->hasPermissionTo('teams.update');
+ }
+
+
+ public function invite(User $user, Team $team)
+ {
+ if (!$team->openJoin && $user->isOwnerOfTeam($team) || !$team->openJoin && $user->hasPermissionTo('teams.invite'))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public function switchTeam(User $user, Team $team): bool
+ {
+ // is the user in the team they're trying to switch to?
+ return $user->hasTeam($team);
+ }
+}
diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php
old mode 100644
new mode 100755
index b98f105..f87838a
--- a/app/Policies/UserPolicy.php
+++ b/app/Policies/UserPolicy.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Policies;
use App\User;
@@ -16,7 +35,6 @@ class UserPolicy
*/
public function __construct()
{
-
}
public function edit(User $authUser, User $user)
@@ -27,7 +45,7 @@ class UserPolicy
// This refers to the admin tools that let staff update more information than users themselves can
public function adminEdit(User $authUser, User $user)
{
- return $authUser->hasRole('admin') && $authUser->isNot($user);
+ return $authUser->hasRole('admin') && $authUser->isNot($user);
}
public function viewStaff(User $user)
@@ -42,11 +60,11 @@ class UserPolicy
public function terminate(User $authUser)
{
- return $authUser->hasRole('admin');
+ return $authUser->hasRole('admin');
}
public function delete(User $authUser, User $subject)
{
- return $authUser->hasRole('admin') && $authUser->isNot($subject);
+ return $authUser->hasRole('admin') && $authUser->isNot($subject);
}
}
diff --git a/app/Policies/VacancyPolicy.php b/app/Policies/VacancyPolicy.php
old mode 100644
new mode 100755
index 7e547f2..9e67fe0
--- a/app/Policies/VacancyPolicy.php
+++ b/app/Policies/VacancyPolicy.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Policies;
use App\User;
@@ -10,6 +29,7 @@ class VacancyPolicy
{
use HandlesAuthorization;
// TODO: Switch to permissions (there are no specific permissions yet)
+
/**
* Determine whether the user can view any models.
*
@@ -65,7 +85,7 @@ class VacancyPolicy
*/
public function delete(User $user, Vacancy $vacancy)
{
- //
+ return $user->hasAnyRole('admin', 'hiringManager');
}
/**
diff --git a/app/Policies/VotePolicy.php b/app/Policies/VotePolicy.php
old mode 100644
new mode 100755
index 9337aa4..570e145
--- a/app/Policies/VotePolicy.php
+++ b/app/Policies/VotePolicy.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Policies;
use App\User;
diff --git a/app/Profile.php b/app/Profile.php
old mode 100644
new mode 100755
index 9a64243..0367189
--- a/app/Profile.php
+++ b/app/Profile.php
@@ -1,19 +1,37 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
-
public $fillable = [
'profileShortBio',
'profileAboutMe',
'avatarPreference',
'socialLinks',
- 'userID'
+ 'userID',
];
@@ -21,5 +39,4 @@ class Profile extends Model
{
return $this->belongsTo('App\User', 'userID', 'id');
}
-
}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
old mode 100644
new mode 100755
index 8d8144e..c383be6
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -1,15 +1,41 @@
.
+ */
+
namespace App\Providers;
+use App\Facades\Options;
use App\Application;
use App\Observers\ApplicationObserver;
use App\Observers\UserObserver;
+use App\Observers\VacancyObserver;
use App\User;
+use App\Vacancy;
+use Illuminate\Pagination\Paginator;
+use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Schema;
+use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use Sentry;
+
class AppServiceProvider extends ServiceProvider
{
/**
@@ -30,14 +56,31 @@ class AppServiceProvider extends ServiceProvider
public function boot()
{
Sentry\init([
- 'release' => env('RELEASE')
+ 'release' => env('RELEASE'),
]);
Schema::defaultStringLength(191);
+ Paginator::useBootstrap();
+ // Register observers
User::observe(UserObserver::class);
Application::observe(ApplicationObserver::class);
+ Vacancy::observe(VacancyObserver::class);
- $this->app['request']->server->set('HTTPS', $this->app->environment() != 'local');
+ $https = ($this->app->environment() != 'local');
+ $collect = true;
+
+ if(config('app.force_secure') && $this->app->environment() != 'production')
+ $https = true;
+
+ if (config('app.hide_ips') || config('demo.is_enabled'))
+ {
+ $collect = false;
+ }
+
+ $this->app['request']->server->set('HTTPS', $https);
+
+ View::share('shouldCollect', $collect);
+ View::share('demoActive', config('demo.is_enabled'));
}
}
diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php
old mode 100644
new mode 100755
index 52563b4..9c6a62d
--- a/app/Providers/AuthServiceProvider.php
+++ b/app/Providers/AuthServiceProvider.php
@@ -1,27 +1,50 @@
.
+ */
+
namespace App\Providers;
-use App\Policies\ProfilePolicy;
-use App\Policies\VacancyPolicy;
-use App\Policies\UserPolicy;
-use App\Policies\BanPolicy;
-use App\Policies\FormPolicy;
-use App\Policies\VotePolicy;
-use App\Policies\ApplicationPolicy;
-use App\Policies\AppointmentPolicy;
-
-use App\User;
-use App\Form;
-use App\Vote;
-use App\Vacancy;
+use App\Absence;
+use App\ApiKey;
use App\Application;
use App\Appointment;
use App\Ban;
-
-
+use App\Form;
+use App\Policies\AbsencePolicy;
+use App\Policies\ApiKeyPolicy;
+use App\Policies\ApplicationPolicy;
+use App\Policies\AppointmentPolicy;
+use App\Policies\BanPolicy;
+use App\Policies\FormPolicy;
+use App\Policies\ProfilePolicy;
+use App\Policies\TeamFilePolicy;
+use App\Policies\TeamPolicy;
+use App\Policies\UserPolicy;
+use App\Policies\VacancyPolicy;
+use App\Policies\VotePolicy;
+use App\Team;
+use App\TeamFile;
+use App\User;
+use App\Vacancy;
+use App\Vote;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
-use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
@@ -40,7 +63,10 @@ class AuthServiceProvider extends ServiceProvider
'App\Form' => 'App\Policies\FormPolicy',
Vote::class => VotePolicy::class,
Ban::class => BanPolicy::class,
- Appointment::class => AppointmentPolicy::class
+ Appointment::class => AppointmentPolicy::class,
+ Team::class => TeamPolicy::class,
+ TeamFile::class => TeamFilePolicy::class,
+ Absence::class => AbsencePolicy::class
];
/**
diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php
old mode 100644
new mode 100755
index 395c518..f3d62bd
--- a/app/Providers/BroadcastServiceProvider.php
+++ b/app/Providers/BroadcastServiceProvider.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Providers;
use Illuminate\Support\Facades\Broadcast;
diff --git a/app/Providers/ContextAwareValidatorProvider.php b/app/Providers/ContextAwareValidatorProvider.php
old mode 100644
new mode 100755
index 749de88..bc4f309
--- a/app/Providers/ContextAwareValidatorProvider.php
+++ b/app/Providers/ContextAwareValidatorProvider.php
@@ -1,10 +1,28 @@
.
+ */
+
namespace App\Providers;
-use Illuminate\Support\ServiceProvider;
-
use App;
+use Illuminate\Support\ServiceProvider;
class ContextAwareValidatorProvider extends ServiceProvider
{
@@ -25,10 +43,8 @@ class ContextAwareValidatorProvider extends ServiceProvider
*/
public function boot()
{
- App::bind('contextAwareValidator', function(){
-
- return new App\Helpers\ContextAwareValidator();
-
- });
+ App::bind('contextAwareValidator', function () {
+ return new App\Helpers\ContextAwareValidator();
+ });
}
}
diff --git a/app/Providers/DigitalStorageProvider.php b/app/Providers/DigitalStorageProvider.php
new file mode 100755
index 0000000..fe594ef
--- /dev/null
+++ b/app/Providers/DigitalStorageProvider.php
@@ -0,0 +1,31 @@
+.
+ */
+
namespace App\Providers;
use App\Listeners\LogAuthenticationFailure;
@@ -11,6 +30,8 @@ use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
+use SocialiteProviders\Discord\DiscordExtendSocialite;
+use SocialiteProviders\Manager\SocialiteWasCalled;
class EventServiceProvider extends ServiceProvider
{
@@ -22,23 +43,27 @@ class EventServiceProvider extends ServiceProvider
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
- OnUserRegistration::class
+ OnUserRegistration::class,
],
Failed::class => [
- LogAuthenticationFailure::class
+ LogAuthenticationFailure::class,
],
Login::class => [
- LogAuthenticationSuccess::class
+ LogAuthenticationSuccess::class,
+ ],
+ SocialiteWasCalled::class => [
+ // ... other providers
+ DiscordExtendSocialite::class.'@handle',
],
'App\Events\ApplicationApprovedEvent' => [
- 'App\Listeners\PromoteUser'
+ 'App\Listeners\PromoteUser',
],
'App\Events\ApplicationDeniedEvent' => [
- 'App\Listeners\DenyUser'
+ 'App\Listeners\DenyUser',
],
'App\Events\UserBannedEvent' => [
- 'App\Listeners\OnUserBanned'
- ]
+ 'App\Listeners\OnUserBanned',
+ ],
];
/**
@@ -48,7 +73,6 @@ class EventServiceProvider extends ServiceProvider
*/
public function boot()
{
-
parent::boot();
//
diff --git a/app/Providers/IPInfoProvider.php b/app/Providers/IPInfoProvider.php
old mode 100644
new mode 100755
index 3b7150a..5ebe6f8
--- a/app/Providers/IPInfoProvider.php
+++ b/app/Providers/IPInfoProvider.php
@@ -1,9 +1,28 @@
.
+ */
+
namespace App\Providers;
-use Illuminate\Support\ServiceProvider;
use App;
+use Illuminate\Support\ServiceProvider;
class IPInfoProvider extends ServiceProvider
{
@@ -24,10 +43,8 @@ class IPInfoProvider extends ServiceProvider
*/
public function boot()
{
- App::bind('ipInformationFacade', function(){
-
+ App::bind('ipInformationFacade', function () {
return new App\CustomFacades\IP();
-
});
}
}
diff --git a/app/Providers/JSONProvider.php b/app/Providers/JSONProvider.php
new file mode 100755
index 0000000..b5ef403
--- /dev/null
+++ b/app/Providers/JSONProvider.php
@@ -0,0 +1,32 @@
+body()), now()->addDays(3));
- }
- catch(ConnectException $connectException)
- {
- Log::critical('Could not connect to Mojang servers: Cannot check/refresh status', [
- 'message' => $connectException->getMessage()
- ]);
- }
- }
-
- View::share('mcstatus', json_decode(base64_decode(Cache::get('mojang_status')), true));
- }
-}
diff --git a/app/Providers/OptionsProvider.php b/app/Providers/OptionsProvider.php
old mode 100644
new mode 100755
index 3bc98db..7c70e8e
--- a/app/Providers/OptionsProvider.php
+++ b/app/Providers/OptionsProvider.php
@@ -1,9 +1,28 @@
.
+ */
+
namespace App\Providers;
-use Illuminate\Support\ServiceProvider;
use App;
+use Illuminate\Support\ServiceProvider;
class OptionsProvider extends ServiceProvider
{
@@ -24,7 +43,7 @@ class OptionsProvider extends ServiceProvider
*/
public function boot()
{
- App::bind('smOptions', function (){
+ App::bind('smOptions', function () {
return new App\Helpers\Options();
});
}
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
old mode 100644
new mode 100755
index 1235909..1c5f6b7
--- a/app/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
@@ -7,15 +26,6 @@ use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
- /**
- * This namespace is applied to your controller routes.
- *
- * In addition, it is set as the URL generator's root namespace.
- *
- * @var string
- */
- protected $namespace = 'App\Http\Controllers';
-
/**
* The path to the "home" route for your application.
*
@@ -59,7 +69,6 @@ class RouteServiceProvider extends ServiceProvider
protected function mapWebRoutes()
{
Route::middleware('web')
- ->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
diff --git a/app/Providers/UUIDConversionProvider.php b/app/Providers/UUIDConversionProvider.php
old mode 100644
new mode 100755
index 6ce7fad..7f26d6b
--- a/app/Providers/UUIDConversionProvider.php
+++ b/app/Providers/UUIDConversionProvider.php
@@ -1,9 +1,28 @@
.
+ */
+
namespace App\Providers;
-use Illuminate\Support\ServiceProvider;
use App;
+use Illuminate\Support\ServiceProvider;
class UUIDConversionProvider extends ServiceProvider
{
@@ -24,10 +43,8 @@ class UUIDConversionProvider extends ServiceProvider
*/
public function boot()
{
- App::bind('uuidConversionFacade', function(){
-
+ App::bind('uuidConversionFacade', function () {
return new App\UUID\UUID();
-
});
}
}
diff --git a/app/Response.php b/app/Response.php
old mode 100644
new mode 100755
index 08312ea..dfa96d0
--- a/app/Response.php
+++ b/app/Response.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
@@ -9,10 +28,9 @@ class Response extends Model
public $fillable = [
'responseFormID',
'associatedVacancyID',
- 'responseData'
+ 'responseData',
];
-
public function form()
{
return $this->hasOne('App\Form', 'id', 'responseFormID');
diff --git a/app/Services/AccountSuspensionService.php b/app/Services/AccountSuspensionService.php
new file mode 100755
index 0000000..6676efd
--- /dev/null
+++ b/app/Services/AccountSuspensionService.php
@@ -0,0 +1,106 @@
+ $target->email,
+ 'suspended_by' => Auth::user()->email,
+ 'reason' => $reason
+ ]);
+
+ if ($type == "on") {
+ $expiryDate = now()->addDays($duration);
+ }
+
+ $ban = Ban::create([
+ 'userID' => $target->id,
+ 'reason' => $reason,
+ 'bannedUntil' => ($type == "on") ? $expiryDate->format('Y-m-d H:i:s') : null,
+ 'authorUserID' => Auth::user()->id,
+ 'isPermanent' => ($type == "off") ? true : false
+ ]);
+
+ return $ban;
+ }
+
+ /**
+ * Lifts someone's suspension
+ *
+ * @param User $user The user to unsuspend
+ */
+ public function unsuspend(User $user): void {
+
+ Log::alert("A suspension has just been lifted.", [
+ 'target_email' => $user->email,
+ ]);
+
+ $user->bans->delete();
+ }
+
+ /**
+ * Checks whether a user is suspended
+ *
+ * @param User $user The user to check
+ * @return bool Whether the mentioned user is suspended
+ */
+ public function isSuspended(User $user): bool {
+ return !is_null($user->bans);
+ }
+
+
+ /**
+ * Takes a suspension directly and makes it permanent.
+ *
+ * @param Ban $ban The suspension to make permanent
+ */
+ public function makePermanent(Ban $ban): void {
+
+ Log::alert('A suspension has just been made permanent.', [
+ 'target_email' => $ban->user->email
+ ]);
+
+ $ban->bannedUntil = null;
+ $ban->isPermanent = true;
+
+ $ban->save();
+
+ }
+
+ /**
+ * Purges old, expired suspensions from the database
+ *
+ * @return bool Whether any suspensions were lifted
+ */
+ public function purgeExpired()
+ {
+ // Unban on the last day, not on the exact time (with Carbon::now()).
+ return (bool) Ban::whereDate('bannedUntil', '=', Carbon::today())->delete();
+ }
+
+
+}
diff --git a/app/Services/ApplicationService.php b/app/Services/ApplicationService.php
new file mode 100755
index 0000000..27ef2e9
--- /dev/null
+++ b/app/Services/ApplicationService.php
@@ -0,0 +1,160 @@
+where('vacancySlug', $vacancySlug)->get();
+
+ $firstVacancy = $vacancyWithForm->first();
+
+ if (!$vacancyWithForm->isEmpty() && $firstVacancy->vacancyCount !== 0 && $firstVacancy->vacancyStatus == 'OPEN') {
+ return view('dashboard.application-rendering.apply')
+ ->with([
+ 'vacancy' => $vacancyWithForm->first(),
+ 'preprocessedForm' => json_decode($vacancyWithForm->first()->forms->formStructure, true),
+ ]);
+ } else {
+
+ throw new ApplicationNotFoundException('The application you\'re looking for could not be found or it is currently unavailable.', 404);
+
+ }
+ }
+
+ /**
+ * Fills a vacancy's form with submitted data.
+ *
+ * @throws UnavailableApplicationException Thrown when the application has no vacancies or is closed
+ * @throws VacancyNotFoundException Thrown when the associated vacancy is not found
+ * @throws IncompleteApplicationException Thrown when there are missing fields
+ */
+ public function fillForm(User $applicant, array $formData, $vacancySlug): bool
+ {
+ $vacancy = Vacancy::with('forms')->where('vacancySlug', $vacancySlug)->get();
+
+ if ($vacancy->isEmpty()) {
+
+ throw new VacancyNotFoundException('This vacancy doesn\'t exist; Please use the proper buttons to apply to one.', 404);
+
+ }
+
+ if ($vacancy->first()->vacancyCount == 0 || $vacancy->first()->vacancyStatus !== 'OPEN') {
+
+ throw new UnavailableApplicationException("This application is unavailable.");
+ }
+
+ Log::info('Processing new application!');
+
+ $formStructure = json_decode($vacancy->first()->forms->formStructure, true);
+ $responseValidation = ContextAwareValidator::getResponseValidator($formData, $formStructure);
+
+
+ Log::info('Built response & validator structure!');
+
+ if (!$responseValidation->get('validator')->fails()) {
+ $response = Response::create([
+ 'responseFormID' => $vacancy->first()->forms->id,
+ 'associatedVacancyID' => $vacancy->first()->id, // Since a form can be used by multiple vacancies, we can only know which specific vacancy this response ties to by using a vacancy ID
+ 'responseData' => $responseValidation->get('responseStructure'),
+ ]);
+
+ Log::info('Registered form response!', [
+ 'applicant' => $applicant->name,
+ 'vacancy' => $vacancy->first()->vacancyName
+ ]);
+
+ $application = Application::create([
+ 'applicantUserID' => $applicant->id,
+ 'applicantFormResponseID' => $response->id,
+ 'applicationStatus' => 'STAGE_SUBMITTED',
+ ]);
+
+ Log::info('Submitted an application!', [
+ 'responseID' => $response->id,
+ 'applicant' => $applicant->name
+ ]);
+
+ foreach (User::all() as $user) {
+ if ($user->hasRole('admin')) {
+ $user->notify((new NewApplicant($application, $vacancy->first())));
+ }
+ }
+ $application->user->notify(new ApplicationConfirmed($application));
+
+ return true;
+
+ }
+
+ Log::warning('Application form for ' . $applicant->name . ' contained errors, resetting!');
+
+ throw new IncompleteApplicationException('There are one or more errors in your application. Please make sure none of your fields are empty, since they are all required.');
+ }
+
+ public function updateStatus(Application $application, $newStatus)
+ {
+ switch ($newStatus) {
+ case 'deny':
+
+ event(new ApplicationDeniedEvent($application));
+ $message = __("Application denied successfully.");
+
+ break;
+
+ case 'interview':
+ Log::info(' Moved application ID ' . $application->id . 'to interview stage!');
+ $message = __('Application moved to interview stage!');
+
+ $application->setStatus('STAGE_INTERVIEW');
+ $application->user->notify(new ApplicationMoved());
+
+ break;
+
+ default:
+ throw new \LogicException("Wrong status parameter. Please notify a developer.");
+ }
+
+ return $message;
+ }
+
+ /**
+ * @throws \Exception
+ */
+ public function delete(Application $application): ?bool
+ {
+ return $application->delete();
+ }
+
+
+ public function canVote($votes): bool
+ {
+ $allvotes = collect([]);
+
+ foreach ($votes as $vote) {
+ if ($vote->userID == Auth::user()->id) {
+ $allvotes->push($vote);
+ }
+ }
+
+ return !(($allvotes->count() == 1));
+ }
+}
diff --git a/app/Services/AppointmentService.php b/app/Services/AppointmentService.php
new file mode 100755
index 0000000..9e976f4
--- /dev/null
+++ b/app/Services/AppointmentService.php
@@ -0,0 +1,126 @@
+ $appointmentDescription,
+ 'appointmentDate' => $appointmentDate->toDateTimeString(),
+ 'applicationID' => $application->id,
+ 'appointmentLocation' => (in_array($appointmentLocation, $this->allowedPlatforms)) ? $appointmentLocation : 'DISCORD',
+ ]);
+ $application->setStatus('STAGE_INTERVIEW_SCHEDULED');
+
+ Log::info('User '.Auth::user()->name.' has scheduled an appointment with '.$application->user->name.' for application ID'.$application->id, [
+ 'datetime' => $appointmentDate->toDateTimeString(),
+ 'scheduled' => now(),
+ ]);
+
+ $application->user->notify(new AppointmentScheduled($appointment));
+
+
+ return true;
+ }
+
+
+ /**
+ * Cancels an appointment for the provided application.
+ *
+ * @param Application $application The target application.
+ * @param string $reason The reason for cancelling the appointment.
+ * @throws \Exception Thrown when there's no appointment to cancel
+ */
+ public function deleteAppointment(Application $application, string $reason): bool
+ {
+ if (!empty($application->appointment))
+ {
+ $application->user->notify(new AppointmentCancelled($application, Carbon::parse($application->appointment->appointmentDate), $reason));
+ $application->appointment->delete();
+
+ $application->setStatus('STAGE_INTERVIEW');
+
+ Log::info('An interview appointment has just been cancelled.', [
+ 'actor' => Auth::user()->name,
+ 'applicant' => $application->user->name,
+ 'reason' => $reason
+ ]);
+
+ return true;
+ }
+
+ throw new \Exception("This application doesn't have an appointment!");
+
+ }
+
+ /**
+ * Updates the appointment with the new $status.
+ * It also sets the application's status to peer approval.
+ *
+ * Set $updateApplication to false to only update its status
+ *
+ * @throws InvalidAppointmentStatusException
+ */
+ public function updateAppointment(Application $application, $status, $updateApplication = true)
+ {
+ if ($status == 'SCHEDULED' || $status == 'concluded')
+ {
+ $application->appointment->appointmentStatus = strtoupper($status);
+ $application->appointment->save();
+
+ if ($updateApplication)
+ {
+ $application->setStatus('STAGE_PEERAPPROVAL');
+ $application->user->notify(new AppointmentFinished($application->appointment));
+ }
+ }
+ else
+ {
+ throw new InvalidAppointmentStatusException("Invalid appointment status!");
+ }
+
+ }
+
+ /**
+ * @return string[]
+ */
+ public function getAllowedPlatforms(): array
+ {
+ return $this->allowedPlatforms;
+ }
+
+}
diff --git a/app/Services/CommentService.php b/app/Services/CommentService.php
new file mode 100755
index 0000000..545d3d5
--- /dev/null
+++ b/app/Services/CommentService.php
@@ -0,0 +1,27 @@
+ Auth::user()->id,
+ 'applicationID' => $application->id,
+ 'text' => $comment,
+ ]);
+ }
+
+ public function deleteComment(Comment $comment): ?bool
+ {
+ return $comment->delete();
+ }
+
+}
diff --git a/app/Services/ConfigurationService.php b/app/Services/ConfigurationService.php
new file mode 100755
index 0000000..249a24d
--- /dev/null
+++ b/app/Services/ConfigurationService.php
@@ -0,0 +1,75 @@
+ $option) {
+ try {
+
+ Log::debug('Going through option '.$optionName);
+ if (Options::optionExists($optionName)) {
+ Log::debug('Option exists, updating to new values', [
+ 'opt' => $optionName,
+ 'new_value' => $option,
+ ]);
+ Options::changeOption($optionName, $option);
+ }
+
+ } catch (\Exception $ex) {
+
+ Log::error('Unable to update options!', [
+ 'msg' => $ex->getMessage(),
+ 'trace' => $ex->getTraceAsString(),
+ ]);
+
+ // Let service caller handle this without failing here
+ throw $ex;
+ }
+ }
+ }
+
+ /**
+ * Saves the chosen game integration
+ *
+ * @throws InvalidGamePreferenceException
+ * @returns bool
+ */
+ public function saveGameIntegration($gamePreference): bool
+ {
+
+ // TODO: Find solution to dynamically support games
+
+ $supportedGames = [
+ 'RUST',
+ 'MINECRAFT',
+ 'SE',
+ 'GMOD'
+ ];
+
+ if (!is_null($gamePreference) && in_array($gamePreference, $supportedGames))
+ {
+ Options::changeOption('currentGame', $gamePreference);
+ return true;
+ }
+
+ throw new InvalidGamePreferenceException("Unsupported game " . $gamePreference);
+ }
+
+}
diff --git a/app/Services/ContactService.php b/app/Services/ContactService.php
new file mode 100755
index 0000000..86c7938
--- /dev/null
+++ b/app/Services/ContactService.php
@@ -0,0 +1,47 @@
+post(config('recaptcha.verify.apiurl'), [
+ 'secret' => config('recaptcha.keys.secret'),
+ 'response' => $challenge,
+ 'remoteip' => $ipAddress,
+ ]);
+
+ $response = json_decode($verifyrequest->getBody(), true);
+
+ if (! $response['success']) {
+ throw new FailedCaptchaException('Beep beep boop... Robot? Submission failed.');
+ }
+
+ foreach (User::all() as $user) {
+ if ($user->hasRole('admin')) {
+ $user->notify(new NewContact(collect([
+ 'message' => $message,
+ 'ip' => $ipAddress,
+ 'email' => $email,
+ ])));
+ }
+ }
+ }
+
+
+}
diff --git a/app/Services/DemoService.php b/app/Services/DemoService.php
new file mode 100755
index 0000000..969de1d
--- /dev/null
+++ b/app/Services/DemoService.php
@@ -0,0 +1,11 @@
+get('validator')->fails()) {
+ $storableFormStructure = $contextValidation->get('structure');
+
+ Form::create(
+ [
+ 'formName' => $fields['formName'],
+ 'formStructure' => $storableFormStructure,
+ 'formStatus' => 'ACTIVE',
+ ]
+ );
+ return true;
+ }
+ return $contextValidation->get('validator')->errors()->getMessages();
+ }
+
+ public function deleteForm(Form $form) {
+
+ $deletable = true;
+
+ if (! is_null($form) && ! is_null($form->vacancies) && $form->vacancies->count() !== 0 || ! is_null($form->responses)) {
+ $deletable = false;
+ }
+
+ if ($deletable) {
+
+ $form->delete();
+ return true;
+
+ } else {
+
+ throw new FormHasConstraintsException(__('You cannot delete this form because it\'s tied to one or more applications and ranks, or because it doesn\'t exist.'));
+
+ }
+ }
+
+ public function updateForm(Form $form, $fields) {
+
+ $contextValidation = ContextAwareValidator::getValidator($fields, true);
+
+ if (! $contextValidation->get('validator')->fails()) {
+ // Add the new structure into the form. New, subsquent fields will be identified by the "new" prefix
+ // This prefix doesn't actually change the app's behavior when it receives applications.
+ // Additionally, old applications won't of course display new and updated fields, because we can't travel into the past and get data for them
+ $form->formStructure = $contextValidation->get('structure');
+ $form->save();
+
+ return $form;
+
+ } else {
+ return $contextValidation->get('validator')->errors()->getMessages();
+ }
+ }
+
+}
diff --git a/app/Services/MeetingNoteService.php b/app/Services/MeetingNoteService.php
new file mode 100755
index 0000000..e1136e9
--- /dev/null
+++ b/app/Services/MeetingNoteService.php
@@ -0,0 +1,36 @@
+load('appointment');
+
+ $application->appointment->meetingNotes = $noteText;
+ $application->appointment->save();
+
+ return true;
+
+ } else {
+ throw new InvalidAppointmentException('There\'s no appointment to save notes to!');
+ }
+
+ }
+
+}
diff --git a/app/Services/ProfileService.php b/app/Services/ProfileService.php
new file mode 100755
index 0000000..438527b
--- /dev/null
+++ b/app/Services/ProfileService.php
@@ -0,0 +1,50 @@
+profile;
+ $social = [];
+
+ if (! is_null($profile)) {
+ switch ($request->avatarPref) {
+ case 'MOJANG':
+ $avatarPref = 'crafatar';
+
+ break;
+ case 'GRAVATAR':
+ $avatarPref = strtolower($request->avatarPref);
+
+ break;
+ }
+
+ $social['links']['github'] = $request->socialGithub;
+ $social['links']['twitter'] = $request->socialTwitter;
+ $social['links']['insta'] = $request->socialInsta;
+ $social['links']['discord'] = $request->socialDiscord;
+
+ $profile->profileShortBio = $request->shortBio;
+ $profile->profileAboutMe = $request->aboutMe;
+ $profile->avatarPreference = $avatarPref;
+ $profile->socialLinks = json_encode($social);
+
+ return $profile->save();
+ }
+
+ throw new ProfileNotFoundException("This profile does not exist.");
+ }
+
+}
diff --git a/app/Services/SecuritySettingsService.php b/app/Services/SecuritySettingsService.php
new file mode 100755
index 0000000..1f84477
--- /dev/null
+++ b/app/Services/SecuritySettingsService.php
@@ -0,0 +1,54 @@
+ $policy
+ ]);
+ }
+ else
+ {
+ Log::debug('[WARN] Ignoring bogus policy', [
+ 'avaliable' => $validPolicies,
+ 'given' => $policy
+ ]);
+ }
+
+ Options::changeOption('graceperiod', $options['graceperiod']);
+ Options::changeOption('password_expiry', $options['pwExpiry']);
+ Options::changeOption('force2fa', $options['enforce2fa']);
+ Options::changeOption('requireGameLicense', $options['requirePMC']);
+
+ return true;
+
+ }
+
+}
diff --git a/app/Services/TeamFileService.php b/app/Services/TeamFileService.php
new file mode 100755
index 0000000..c94719c
--- /dev/null
+++ b/app/Services/TeamFileService.php
@@ -0,0 +1,42 @@
+store('uploads');
+ $originalFileName = $upload->getClientOriginalName();
+ $originalFileExtension = $upload->extension();
+ $originalFileSize = $upload->getSize();
+
+ $fileEntry = TeamFile::create([
+ 'uploaded_by' => $uploader,
+ 'team_id' => $team,
+ 'name' => $originalFileName,
+ 'caption' => $caption,
+ 'description' => $description,
+ 'fs_location' => $file,
+ 'extension' => $originalFileExtension,
+ 'size' => $originalFileSize
+ ]);
+
+ if ($fileEntry && !is_bool($file))
+ {
+ return $fileEntry;
+ }
+
+ throw new FileUploadException("There was an unknown error whilst trying to upload your file.");
+
+ }
+
+}
diff --git a/app/Services/TeamService.php b/app/Services/TeamService.php
new file mode 100755
index 0000000..9e7c8c0
--- /dev/null
+++ b/app/Services/TeamService.php
@@ -0,0 +1,165 @@
+ $teamName,
+ 'owner_id' => $ownerID,
+ ]);
+
+ Auth::user()->teams()->attach($team->id);
+
+ return $team;
+ }
+
+ public function updateTeam(Team $team, $teamDescription, $joinType): bool
+ {
+
+ $team->description = $teamDescription;
+ $team->openJoin = $joinType;
+
+ return $team->save();
+ }
+
+ /**
+ * Invites a user to a $team.
+ *
+ * @throws PublicTeamInviteException Thrown when trying to invite a user to a public team
+ * @throws UserAlreadyInvitedException Thrown when a user is already invited
+ */
+ public function inviteUser(Team $team, $userID): bool
+ {
+
+ $user = User::findOrFail($userID);
+
+ if (! $team->openJoin) {
+ if (! Teamwork::hasPendingInvite($user->email, $team)) {
+ Teamwork::inviteToTeam($user, $team, function (TeamInvite $invite) use ($user) {
+ Mail::to($user)->send(new InviteToTeam($invite));
+ });
+ return true;
+ } else {
+ throw new UserAlreadyInvitedException('This user has already been invited.');
+ }
+ } else {
+ throw new PublicTeamInviteException('You can\'t invite users to public teams.');
+ }
+
+ }
+
+ /**
+ * Accepts or denies a user invite
+ *
+ * @param Authenticatable $user
+ * @param $action
+ * @param $token
+ * @return bool True on success or exception on failure
+ * @throws InvalidInviteException Thrown when the invite code / url is invalid
+ */
+ public function processInvite(Authenticatable $user, $action, $token): bool {
+
+ switch ($action) {
+ case 'accept':
+
+ $invite = Teamwork::getInviteFromAcceptToken($token);
+
+ if ($invite && $invite->user->is($user)) {
+ Teamwork::acceptInvite($invite);
+
+ } else {
+
+ throw new InvalidInviteException('Invalid or expired invite URL.');
+ }
+
+ break;
+
+ case 'deny':
+
+ $invite = Teamwork::getInviteFromDenyToken($token);
+
+ if ($invite && $invite->user->is($user)) {
+
+ Teamwork::denyInvite($invite);
+
+ } else {
+
+ throw new InvalidInviteException('Invalid or expired invite URL.');
+ }
+
+ break;
+
+ default:
+ throw new InvalidInviteException('Sorry, but the invite URL you followed was malformed.');
+ }
+
+ return true;
+
+ }
+
+
+ /**
+ * @param Team $team
+ * @param $associatedVacancies
+ * @return string The success message, exception/bool if error
+ */
+ public function updateVacancies(Team $team, $associatedVacancies): string
+ {
+
+ // P.S. To future developers
+ // This method gave me a lot of trouble lol. It's hard to write code when you're half asleep.
+ // There may be an n+1 query in the view and I don't think there's a way to avoid that without writing a lot of extra code.
+
+ $requestVacancies = $associatedVacancies;
+ $currentVacancies = $team->vacancies->pluck('id')->all();
+
+ if (is_null($requestVacancies)) {
+ foreach ($team->vacancies as $vacancy) {
+ $team->vacancies()->detach($vacancy->id);
+ }
+
+ return 'Removed all vacancy associations.';
+ }
+
+ $vacancyDiff = array_diff($requestVacancies, $currentVacancies);
+ $deselectedDiff = array_diff($currentVacancies, $requestVacancies);
+
+ if (! empty($vacancyDiff) || ! empty($deselectedDiff)) {
+ foreach ($vacancyDiff as $selectedVacancy) {
+ $team->vacancies()->attach($selectedVacancy);
+ }
+
+ foreach ($deselectedDiff as $deselectedVacancy) {
+ $team->vacancies()->detach($deselectedVacancy);
+ }
+ } else {
+ $team->vacancies()->attach($requestVacancies);
+ }
+ return 'Assignments changed successfully.';
+ }
+}
diff --git a/app/Services/VacancyApplicationService.php b/app/Services/VacancyApplicationService.php
new file mode 100755
index 0000000..c1fbddc
--- /dev/null
+++ b/app/Services/VacancyApplicationService.php
@@ -0,0 +1,47 @@
+.
+ */
+
+namespace App\Services;
+
+use App\Application;
+use App\Vacancy;
+
+class VacancyApplicationService
+{
+ /**
+ * Finds all applications associated with $model.
+ *
+ * @param Vacancy $model The model you want to search through.
+ * @return Illuminate\Support\Collection A collection of applications
+ */
+ public function findApplications(Vacancy $model)
+ {
+ $applications = collect([]);
+
+ foreach (Application::all() as $application) {
+ if ($application->response->vacancy->id == $model->id) {
+ $applications->push($application);
+ }
+ }
+
+ return $applications;
+ }
+}
diff --git a/app/StaffProfile.php b/app/StaffProfile.php
deleted file mode 100644
index 8d6cfba..0000000
--- a/app/StaffProfile.php
+++ /dev/null
@@ -1,18 +0,0 @@
-.
+ */
+
+namespace App;
+
+use Mpociot\Teamwork\TeamworkTeam;
+
+class Team extends TeamworkTeam
+{
+ public $fillable = [
+ 'owner_id',
+ 'name',
+ 'description',
+ 'openJoin',
+ ];
+
+ public function vacancies()
+ {
+ return $this->belongsToMany('App\Vacancy', 'team_has_vacancy');
+ }
+
+
+
+ public function files()
+ {
+ return $this->hasMany('App\TeamFile', 'team_id');
+ }
+}
diff --git a/app/TeamFile.php b/app/TeamFile.php
new file mode 100755
index 0000000..8a5fedb
--- /dev/null
+++ b/app/TeamFile.php
@@ -0,0 +1,41 @@
+belongsTo('App\User', 'uploaded_by', 'id');
+ }
+
+ public function team()
+ {
+ return $this->belongsTo('App\Team');
+ }
+
+
+ public function getSizeAttribute($value)
+ {
+ return DigitalStorageHelper::setValue($value)->formatBytes(2, true);
+ }
+}
diff --git a/app/Traits/AuthenticatesTwoFactor.php b/app/Traits/AuthenticatesTwoFactor.php
old mode 100644
new mode 100755
index 4b6ab31..9a36d51
--- a/app/Traits/AuthenticatesTwoFactor.php
+++ b/app/Traits/AuthenticatesTwoFactor.php
@@ -1,40 +1,54 @@
.
+ */
+
namespace App\Traits;
-use Google2FA;
use App\Http\Requests\Add2FASecretRequest;
+use Google2FA;
use Illuminate\Support\Facades\Log;
-
trait AuthenticatesTwoFactor
{
-
public function verify2FA(Add2FASecretRequest $request)
{
$isValid = Google2FA::verifyKey($request->user()->twofa_secret, $request->otp);
- if ($isValid)
- {
- Google2FA::login();
+ if ($isValid) {
+ Google2FA::login();
- Log::info('SECURITY (postauth): One-time password verification succeeded', [
- 'initiator' => $request->user()->email,
- 'ip' => $request->ip()
- ]);
+ Log::info('SECURITY (postauth): One-time password verification succeeded', [
+ 'initiator' => $request->user()->email,
+ 'ip' => $request->ip(),
+ ]);
- return redirect()->to($this->redirectTo);
- }
- else
- {
- Log::warning('SECURITY (preauth): One-time password verification failed', [
- 'initiator' => $request->user()->email,
- 'ip' => $request->ip()
- ]);
+ return redirect()->to($this->redirectTo);
+ } else {
+ Log::warning('SECURITY (preauth): One-time password verification failed', [
+ 'initiator' => $request->user()->email,
+ 'ip' => $request->ip(),
+ ]);
- $request->session()->flash('error', 'Your one time password is invalid.');
- return redirect()->back();
+ $request->session()->flash('error', 'Your one time password is invalid.');
+
+ return redirect()->back();
}
}
-
}
diff --git a/app/Traits/Cancellable.php b/app/Traits/Cancellable.php
old mode 100644
new mode 100755
index cbccb67..1139202
--- a/app/Traits/Cancellable.php
+++ b/app/Traits/Cancellable.php
@@ -1,26 +1,44 @@
.
+ */
namespace App\Traits;
-
use App\Facades\Options;
+use Illuminate\Support\Facades\Log;
trait Cancellable
{
-
public function chooseChannelsViaOptions()
{
$channels = [];
-
- if (Options::getOption('enable_slack_notifications') == 1)
- {
+ // FIXME: This is not letting Slack and Email work at the same time
+ if (Options::getOption('enable_slack_notifications') == 1) {
array_push($channels, 'slack');
+ } elseif (Options::getOption('enable_email_notifications') == 1) {
+ array_push($channels, 'mail');
}
- elseif(Options::getOption('enable_email_notifications') == 1)
- {
- array_push($channels, 'email');
- }
+
+ Log::debug('Cancellable: current channels list', [
+ 'channels' => $channels
+ ]);
return $channels;
}
@@ -32,18 +50,15 @@ trait Cancellable
public function via($notifiable)
{
- if ($this->optOut($notifiable))
- {
+ if ($this->optOut($notifiable)) {
return [];
}
return $this->channels();
}
-
public function optOut($notifiable)
{
return false;
}
-
}
diff --git a/app/Traits/HandlesAccountTokens.php b/app/Traits/HandlesAccountTokens.php
new file mode 100755
index 0000000..965e54a
--- /dev/null
+++ b/app/Traits/HandlesAccountTokens.php
@@ -0,0 +1,62 @@
+.
+ */
+
+namespace App\Traits;
+
+use Illuminate\Support\Facades\Hash;
+
+trait HandlesAccountTokens
+{
+ public function generateAccountTokens()
+ {
+ $deleteToken = bin2hex(openssl_random_pseudo_bytes(32));
+ $cancelToken = bin2hex(openssl_random_pseudo_bytes(32));
+
+ $tokens = [
+
+ 'delete' => Hash::make($deleteToken),
+ 'cancel' => Hash::make($cancelToken),
+
+ ];
+
+ $this->account_tokens = json_encode($tokens);
+ $this->save();
+
+ return [
+
+ 'delete' => $deleteToken,
+ 'cancel' => $cancelToken,
+ ];
+ }
+
+ public function verifyAccountToken(string $token, string $type): bool
+ {
+ $tokens = json_decode($this->account_tokens);
+
+ if ($type == 'deleteToken') {
+ return Hash::check($token, $tokens->delete);
+ } elseif ($type == 'cancelToken') {
+ return Hash::check($token, $tokens->cancel);
+ }
+
+ return false;
+ }
+}
diff --git a/app/Traits/ReceivesAccountTokens.php b/app/Traits/ReceivesAccountTokens.php
new file mode 100755
index 0000000..7ed9de3
--- /dev/null
+++ b/app/Traits/ReceivesAccountTokens.php
@@ -0,0 +1,113 @@
+.
+ */
+
+namespace App\Traits;
+
+use App\Http\Requests\UserDeleteRequest;
+use App\Mail\UserAccountDeleteConfirmation;
+use App\User;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Mail;
+
+trait ReceivesAccountTokens
+{
+ public function userDelete(UserDeleteRequest $request)
+ {
+ //Fixme: TEMPORARY, PLEASE REMOVE UNTIL FIXED OR DURING DEVELOPMENT
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+
+ if (config('demo.is_enabled'))
+ {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
+
+ // a little verbose
+ $user = User::find(Auth::user()->id);
+ $tokens = $user->generateAccountTokens();
+
+ Mail::to($user)->send(new UserAccountDeleteConfirmation($user, $tokens, $request->ip()));
+
+ $user->delete();
+ Auth::logout();
+
+ $request->session()->flash('success', __('Please check your email to finish deleting your account.'));
+
+ return redirect()->to('/');
+ }
+
+ public function processDeleteConfirmation(Request $request, $ID, $action, $token)
+ {
+ if (config('demo.is_enabled'))
+ {
+ return redirect()
+ ->back()
+ ->with('error', 'This feature is disabled');
+ }
+
+ // We can't rely on Laravel's route model injection, because it'll ignore soft-deleted models,
+ // so we have to use a special scope to find them ourselves.
+ $user = User::withTrashed()->findOrFail($ID);
+ $email = $user->email;
+
+ switch ($action) {
+ case 'confirm':
+
+ if ($user->verifyAccountToken($token, 'deleteToken')) {
+ Log::info('SECURITY: User deleted account!', [
+
+ 'confirmDeleteToken' => $token,
+ 'ipAddress' => $request->ip(),
+ 'email' => $user->email,
+
+ ]);
+
+ $user->forceDelete();
+
+ $request->session()->flash('success', __('Account permanently deleted. Thank you for using our service.'));
+
+ return redirect()->to('/');
+ }
+
+ break;
+
+ case 'cancel':
+
+ if ($user->verifyAccountToken($token, 'cancelToken')) {
+ $user->restore();
+ $request->session()->flash('success', __('Account deletion cancelled! You may now login.'));
+
+ return redirect()->to(route('login'));
+ }
+
+ break;
+
+ default:
+
+ abort(404, __('The page you were trying to access may not exist or may be expired.'));
+ }
+ }
+}
diff --git a/app/UUID/UUID.php b/app/UUID/UUID.php
old mode 100644
new mode 100755
index cee10d1..9a7ab32
--- a/app/UUID/UUID.php
+++ b/app/UUID/UUID.php
@@ -1,59 +1,59 @@
.
+ */
namespace App\UUID;
-use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
class UUID
{
-
// Caching would not be needed here since this method won't be used in pages that loop over a collection of usernames.
- public function toUUID($username)
+ public function toUUID(string $username)
{
- if (is_null($username))
- {
- throw new \LogicException('Argument username for ' . __METHOD__ . ' cannot be null!');
- }
-
- $response = json_decode(Http::post(trim(config('general.urls.mojang.api')) . '/profiles/minecraft', [
- $username
+ $response = json_decode(Http::post(trim(config('general.urls.mojang.api')).'/profiles/minecraft', [
+ $username,
])->body(), true);
- if (isset($response[0]))
- {
- return $response[0]['id'];
-
+ if (isset($response[0])) {
+ return $response[0]['id'];
}
- throw new \InvalidArgumentException("You must supply a valid, premium Minecraft account to sign up.");
+ throw new \InvalidArgumentException('You must supply a valid, premium Minecraft account to sign up.');
}
// 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)
+ public function toUsername(string $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(trim(config('general.urls.mojang.session')).'/session/minecraft/profile/'.$uuid)->body(), true);
- $shortUUID = substr($uuid, 0, 8);
- $username = Cache::remember('uuid_' . $shortUUID, now()->addDays(30), function() use ($shortUUID, $uuid) {
+ Log::debug('Caching '.$shortUUID.'for thirty days');
- $response = json_decode(Http::get(trim(config('general.urls.mojang.session')) . '/session/minecraft/profile/' . $uuid)->body(), true);
-
- Log::debug('Caching ' . $shortUUID . 'for thirty days');
return $response['name'];
+ });
- });
-
- return $username;
-
+ return $username;
}
-
-
}
diff --git a/app/User.php b/app/User.php
old mode 100644
new mode 100755
index 06f555f..752c47b
--- a/app/User.php
+++ b/app/User.php
@@ -1,16 +1,37 @@
.
+ */
+
namespace App;
+use App\Traits\HandlesAccountTokens;
use Illuminate\Contracts\Auth\MustVerifyEmail;
+use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
+use Mpociot\Teamwork\Traits\UserHasTeams;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable implements MustVerifyEmail
{
- use Notifiable;
- use HasRoles;
+ use UserHasTeams, Notifiable, HasRoles, SoftDeletes, HandlesAccountTokens;
/**
* The attributes that are mass assignable.
@@ -18,7 +39,7 @@ class User extends Authenticatable implements MustVerifyEmail
* @var array
*/
protected $fillable = [
- 'name', 'email', 'password', 'originalIP', 'username', 'uuid', 'dob'
+ 'name', 'email', 'password', 'originalIP', 'username', 'uuid', 'dob',
];
/**
@@ -39,8 +60,8 @@ class User extends Authenticatable implements MustVerifyEmail
'email_verified_at' => 'datetime',
];
+ // RELATIONSHIPS
-//
public function applications()
{
return $this->hasMany('App\Application', 'applicantUserID', 'id');
@@ -66,14 +87,24 @@ class User extends Authenticatable implements MustVerifyEmail
return $this->hasMany('App\Comment', 'authorID', 'id');
}
-
- public function isBanned()
+ public function files()
{
- return !$this->bans()->get()->isEmpty();
+ return $this->hasMany('App\TeamFile', 'uploaded_by');
+ }
+
+ public function absences()
+ {
+ return $this->hasMany('App\Absence', 'requesterID');
}
+ // UTILITY LOGIC
+
+ public function isBanned()
+ {
+ return ! $this->bans()->get()->isEmpty();
+ }
public function isStaffMember()
{
@@ -82,13 +113,27 @@ class User extends Authenticatable implements MustVerifyEmail
public function has2FA()
{
- return !is_null($this->twofa_secret);
+ return ! is_null($this->twofa_secret);
}
+ public function hasTeam($team): bool
+ {
+ if ($team instanceof Team || is_int($team))
+ {
+ return $this->teams->contains($team);
+ }
+ else
+ {
+ /**
+ * In PHP 8, we can just use union types and let PHP enforce this for us.
+ */
+ throw new \InvalidArgumentException('Please pass either a Team object or an integer identifying a Team.');
+ }
+ }
public function routeNotificationForSlack($notification)
{
- return config('slack.webhook.integrationURL');
+ return config('slack.webhook.integrationURL');
}
}
diff --git a/app/Vacancy.php b/app/Vacancy.php
old mode 100644
new mode 100755
index 1a84996..0223f06
--- a/app/Vacancy.php
+++ b/app/Vacancy.php
@@ -1,16 +1,36 @@
.
+ */
+
namespace App;
+use GrahamCampbell\Markdown\Facades\Markdown;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
-
-use GrahamCampbell\Markdown\Facades\Markdown;
-
+use Mpociot\Teamwork\Traits\UsedByTeams;
class Vacancy extends Model
{
+ //use UsedByTeams;
+
public $fillable = [
'permissionGroupName',
@@ -21,29 +41,30 @@ class Vacancy extends Model
'vacancyFormID',
'vacancyCount',
'vacancyStatus',
- 'vacancySlug'
+ 'vacancySlug',
+ 'team_id',
];
-
/**
- * Get the HTML variant of the vacancyFullDescription attribute.
- *
- * @param string $value The original value
- * @return string
- */
+ * Get the HTML variant of the vacancyFullDescription attribute.
+ *
+ * @param string $value The original value
+ * @return string
+ */
public function getVacancyFullDescriptionAttribute($value)
{
- if (!is_null($value))
- {
- return Markdown::convertToHTML($value);
- }
- else
- {
- return null;
+ if (! is_null($value)) {
+ return Markdown::convertToHTML($value);
+ } else {
+ return null;
}
}
+ public function teams()
+ {
+ return $this->belongsToMany('App\Team', 'team_has_vacancy');
+ }
public function forms()
{
@@ -53,20 +74,57 @@ class Vacancy extends Model
public function open()
{
$this->update([
- 'vacancyStatus' => 'OPEN'
+ 'vacancyStatus' => 'OPEN',
]);
- Log::info("Vacancies: Vacancy " . $this->id . " (" . $this->vacancyName . ") opened by " . Auth::user()->name);
+ Log::info('Vacancies: Vacancy '.$this->id.' ('.$this->vacancyName.') opened by '.Auth::user()->name);
}
public function close()
{
$this->update([
- 'vacancyStatus' => 'CLOSED'
+ 'vacancyStatus' => 'CLOSED',
]);
- Log::warning("Vacancies: Vacancy " . $this->id . " (" . $this->vacancyName . ") closed by " . Auth::user()->name);
-
+ Log::warning('Vacancies: Vacancy '.$this->id.' ('.$this->vacancyName.') closed by '.Auth::user()->name);
}
+ public function decrease()
+ {
+ if ($this->vacancyCount !== 0)
+ {
+ $this->update([
+ 'vacancyCount' => $this->vacancyCount - 1
+ ]);
+
+ Log::info('Vacancies: Decreased vacancy slots by one.', [
+ 'vacancyId' => $this->id,
+ 'vacancyName' => $this->vacancyName
+ ]);
+ }
+ }
+
+ /**
+ * Check if the Modal is attached to the $checkingTeam Model.
+ *
+ * @param Team $checkingTeam The mdoel you want to check against
+ * @return bool Whether the models are attached
+ */
+ public function hasTeam(Team $checkingTeam): bool
+ {
+ $myTeams = $this->teams;
+
+ if (empty($myTeams)) {
+ // no associated teams
+ return false;
+ }
+
+ foreach ($myTeams as $team) {
+ if ($team->id === $checkingTeam->id) {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
diff --git a/app/View/Components/AccountStatus.php b/app/View/Components/AccountStatus.php
new file mode 100755
index 0000000..0c6bf6f
--- /dev/null
+++ b/app/View/Components/AccountStatus.php
@@ -0,0 +1,31 @@
+user = User::findOrFail($userId);
+ }
+
+ /**
+ * Get the view / contents that represent the component.
+ *
+ * @return \Illuminate\Contracts\View\View|\Closure|string
+ */
+ public function render()
+ {
+ return view('components.account-status');
+ }
+}
diff --git a/app/View/Components/Alert.php b/app/View/Components/Alert.php
old mode 100644
new mode 100755
index 04b5f3c..a7586df
--- a/app/View/Components/Alert.php
+++ b/app/View/Components/Alert.php
@@ -1,26 +1,50 @@
.
+ */
+
namespace App\View\Components;
use Illuminate\View\Component;
class Alert extends Component
{
-
- public $alertType;
-
- public $extraStyling;
+ public
+ $alertType,
+ $extraStyling,
+ $title,
+ $icon;
/**
* Create a new component instance.
*
- * @param $alertType
- * @param string $extraStyling
+ * @param string $alertType The color the alert should have.
+ * @param string $title The alert's title
+ * @param string $icon The alert's icon, placed before the title
+ * @param string $extraStyling Any extra CSS classes to add
*/
- public function __construct($alertType, $extraStyling = '')
+ public function __construct(string $alertType, string $title = '', string $icon = '', string $extraStyling = '')
{
$this->alertType = $alertType;
$this->extraStyling = $extraStyling;
+ $this->icon = $icon;
+ $this->title = $title;
}
/**
diff --git a/app/View/Components/Button.php b/app/View/Components/Button.php
new file mode 100755
index 0000000..71761c1
--- /dev/null
+++ b/app/View/Components/Button.php
@@ -0,0 +1,40 @@
+link = $link;
+ $this->disabled = $disabled;
+ $this->type = $type;
+ $this->target = $target;
+ $this->size = $size;
+ $this->color = $color;
+ $this->id = $id;
+ $this->icon = $icon;
+ }
+
+ /**
+ * Get the view / contents that represent the component.
+ *
+ * @return \Illuminate\Contracts\View\View|\Closure|string
+ */
+ public function render()
+ {
+ return view('components.button');
+ }
+}
diff --git a/app/View/Components/Card.php b/app/View/Components/Card.php
old mode 100644
new mode 100755
index 6a5a953..ee20d0d
--- a/app/View/Components/Card.php
+++ b/app/View/Components/Card.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\View\Components;
use Illuminate\View\Component;
@@ -8,14 +27,10 @@ class Card extends Component
{
public $id;
-
public $cardTitle;
-
-
public $footerStyle;
-
/**
* Create a new component instance.
*
diff --git a/app/View/Components/Form.php b/app/View/Components/Form.php
old mode 100644
new mode 100755
index 06e868d..821ea5d
--- a/app/View/Components/Form.php
+++ b/app/View/Components/Form.php
@@ -1,16 +1,34 @@
.
+ */
+
namespace App\View\Components;
use Illuminate\View\Component;
class Form extends Component
{
-
public $formFields;
-
public $disableFields = false;
+
/**
* Create a new component instance.
*
@@ -18,7 +36,7 @@ class Form extends Component
*/
public function __construct($disableFields = false)
{
- $this->disableFields = $disableFields;
+ $this->disableFields = $disableFields;
}
/**
diff --git a/app/View/Components/GlobalErrors.php b/app/View/Components/GlobalErrors.php
old mode 100644
new mode 100755
index ab130be..5360e13
--- a/app/View/Components/GlobalErrors.php
+++ b/app/View/Components/GlobalErrors.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\View\Components;
use Illuminate\View\Component;
diff --git a/app/View/Components/Modal.php b/app/View/Components/Modal.php
old mode 100644
new mode 100755
index 4ab43d3..fd23b3f
--- a/app/View/Components/Modal.php
+++ b/app/View/Components/Modal.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\View\Components;
use Illuminate\View\Component;
@@ -8,13 +27,10 @@ class Modal extends Component
{
public $id;
-
public $modalLabel;
-
public $modalTitle;
-
public $includeCloseButton;
/**
diff --git a/app/View/Components/NoPermission.php b/app/View/Components/NoPermission.php
old mode 100644
new mode 100755
index 6da51a1..f55f30a
--- a/app/View/Components/NoPermission.php
+++ b/app/View/Components/NoPermission.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App\View\Components;
use Illuminate\View\Component;
@@ -9,6 +28,7 @@ class NoPermission extends Component
public $type;
public $inDashboard;
+
/**
* Create a new component instance.
*
@@ -16,9 +36,9 @@ class NoPermission extends Component
*/
public function __construct($type, $inDashboard = true)
{
- $this->type = $type;
+ $this->type = $type;
- $this->inDashboard = $inDashboard;
+ $this->inDashboard = $inDashboard;
}
/**
diff --git a/app/Vote.php b/app/Vote.php
old mode 100644
new mode 100755
index 6a89b21..74a5aa0
--- a/app/Vote.php
+++ b/app/Vote.php
@@ -1,5 +1,24 @@
.
+ */
+
namespace App;
use Illuminate\Database\Eloquent\Model;
@@ -14,7 +33,7 @@ class Vote extends Model
];
public $touches = [
- 'application'
+ 'application',
];
public function user()
diff --git a/artisan b/artisan
old mode 100644
new mode 100755
diff --git a/bootstrap/app.php b/bootstrap/app.php
old mode 100644
new mode 100755
index 037e17d..c89db0b
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -1,15 +1,23 @@
.
+ */
$app = new Illuminate\Foundation\Application(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
diff --git a/composer.json b/composer.json
old mode 100644
new mode 100755
index 6e7374b..3fcc595
--- a/composer.json
+++ b/composer.json
@@ -8,33 +8,37 @@
],
"license": "MIT",
"require": {
- "php": "^7.2.5",
- "ext-imagick": "*",
+ "php": "^8.0",
"ext-json": "*",
- "arcanedev/log-viewer": "^7.0",
+ "arcanedev/log-viewer": "^9.0.0",
"doctrine/dbal": "^2.10",
- "fideloper/proxy": "^4.2",
- "fruitcake/laravel-cors": "^1.0",
- "geo-sot/laravel-env-editor": "^0.9.9",
- "graham-campbell/markdown": "^12.0",
- "guzzlehttp/guzzle": "^6.5",
+ "fruitcake/laravel-cors": "^2.1",
+ "geo-sot/laravel-env-editor": "^1.1.0",
+ "graham-campbell/markdown": "14.0.x-dev",
+ "guzzlehttp/guzzle": "^7.0.1",
"jeroennoten/laravel-adminlte": "^3.2",
- "laravel/framework": "^7.0",
+ "laravel-notification-channels/discord": "^1.3",
+ "laravel-notification-channels/pusher-push-notifications": "^3.0",
+ "laravel/framework": "^9.0",
"laravel/slack-notification-channel": "^2.0",
+ "laravel/socialite": "^5.2",
"laravel/tinker": "^2.0",
- "laravel/ui": "^2.0",
- "mcamara/laravel-localization": "^1.5",
+ "laravel/ui": "^3.0",
+ "mcamara/laravel-localization": "^1.7",
+ "mpociot/teamwork": "^7.0",
"pragmarx/google2fa-laravel": "^1.3",
- "sentry/sentry-laravel": "1.7.1",
- "spatie/laravel-permission": "^3.13"
+ "sentry/sentry-laravel": "2.11.*",
+ "socialiteproviders/discord": "^4.1",
+ "spatie/laravel-permission": "^5.5"
},
"require-dev": {
+ "ext-xdebug": "*",
"barryvdh/laravel-debugbar": "^3.3",
- "facade/ignition": "^2.0",
- "fzaninotto/faker": "^1.9.1",
+ "fakerphp/faker": "^1.19",
"mockery/mockery": "^1.3.1",
- "nunomaduro/collision": "^4.1",
- "phpunit/phpunit": "^8.5"
+ "nunomaduro/collision": "^6.1",
+ "phpunit/phpunit": "^9.3",
+ "spatie/laravel-ignition": "^1.0"
},
"config": {
"optimize-autoloader": true,
@@ -48,12 +52,10 @@
},
"autoload": {
"psr-4": {
- "App\\": "app/"
- },
- "classmap": [
- "database/seeds",
- "database/factories"
- ]
+ "App\\": "app/",
+ "Database\\Factories\\": "database/factories/",
+ "Database\\Seeders\\": "database/seeders/"
+ }
},
"autoload-dev": {
"psr-4": {
diff --git a/composer.lock b/composer.lock
old mode 100644
new mode 100755
index 4f7d9d4..4fba88e
--- 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": "7a6e859cac39fc7ff3a85d5e4d1219e1",
+ "content-hash": "5236a1e4db7f680486ecae2886a46354",
"packages": [
{
"name": "almasaeed2010/adminlte",
- "version": "v3.0.5",
+ "version": "v3.2.0",
"source": {
"type": "git",
"url": "https://github.com/ColorlibHQ/AdminLTE.git",
- "reference": "6b8b69261f1aacbb4be037c934f3c3652e6dff27"
+ "reference": "bd4d9c72931f1dd28601b6bfb387554a381ad540"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ColorlibHQ/AdminLTE/zipball/6b8b69261f1aacbb4be037c934f3c3652e6dff27",
- "reference": "6b8b69261f1aacbb4be037c934f3c3652e6dff27",
+ "url": "https://api.github.com/repos/ColorlibHQ/AdminLTE/zipball/bd4d9c72931f1dd28601b6bfb387554a381ad540",
+ "reference": "bd4d9c72931f1dd28601b6bfb387554a381ad540",
"shasum": ""
},
"type": "library",
@@ -31,7 +31,7 @@
}
],
"description": "AdminLTE - admin control panel and dashboard that's based on Bootstrap 4",
- "homepage": "http://adminlte.io/",
+ "homepage": "https://adminlte.io/",
"keywords": [
"JS",
"admin",
@@ -43,34 +43,43 @@
"theme",
"web"
],
- "time": "2020-05-19T20:41:11+00:00"
+ "support": {
+ "issues": "https://github.com/ColorlibHQ/AdminLTE/issues",
+ "source": "https://github.com/ColorlibHQ/AdminLTE/tree/v3.2.0"
+ },
+ "time": "2022-02-07T20:33:09+00:00"
},
{
"name": "arcanedev/log-viewer",
- "version": "7.0.0",
+ "version": "9.0.0",
"source": {
"type": "git",
"url": "https://github.com/ARCANEDEV/LogViewer.git",
- "reference": "fd976c90f19e5f2446f7a2d6eeb6c5705cb67178"
+ "reference": "ba0c14ef65c93fae6745ff0607a14d83d39e3faa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ARCANEDEV/LogViewer/zipball/fd976c90f19e5f2446f7a2d6eeb6c5705cb67178",
- "reference": "fd976c90f19e5f2446f7a2d6eeb6c5705cb67178",
+ "url": "https://api.github.com/repos/ARCANEDEV/LogViewer/zipball/ba0c14ef65c93fae6745ff0607a14d83d39e3faa",
+ "reference": "ba0c14ef65c93fae6745ff0607a14d83d39e3faa",
"shasum": ""
},
"require": {
- "arcanedev/support": "^7.0",
+ "arcanedev/support": "^9.0",
"ext-json": "*",
- "php": "^7.2.5",
- "psr/log": "^1.0"
+ "php": "^8.0",
+ "psr/log": "^1.0|^2.0|^3.0"
},
"require-dev": {
- "orchestra/testbench": "^5.0",
- "phpunit/phpunit": "^8.0|^9.0"
+ "laravel/framework": "^9.0",
+ "mockery/mockery": "^1.4.4",
+ "orchestra/testbench-core": "^7.0",
+ "phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
+ "branch-alias": {
+ "dev-develop": "10.x-dev"
+ },
"laravel": {
"providers": [
"Arcanedev\\LogViewer\\LogViewerServiceProvider",
@@ -79,12 +88,12 @@
}
},
"autoload": {
- "psr-4": {
- "Arcanedev\\LogViewer\\": "src/"
- },
"files": [
"helpers.php"
- ]
+ ],
+ "psr-4": {
+ "Arcanedev\\LogViewer\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -98,7 +107,7 @@
"role": "Developer"
}
],
- "description": "Provides a Log Viewer for Laravel 5/6",
+ "description": "Provides a Log Viewer for Laravel",
"homepage": "https://github.com/ARCANEDEV/LogViewer",
"keywords": [
"arcanedev",
@@ -109,44 +118,49 @@
"log-viewer",
"logviewer"
],
- "time": "2020-03-04T08:47:57+00:00"
+ "support": {
+ "issues": "https://github.com/ARCANEDEV/LogViewer/issues",
+ "source": "https://github.com/ARCANEDEV/LogViewer/tree/9.0.0"
+ },
+ "time": "2022-02-10T21:20:19+00:00"
},
{
"name": "arcanedev/support",
- "version": "7.1.2",
+ "version": "9.0.0",
"source": {
"type": "git",
"url": "https://github.com/ARCANEDEV/Support.git",
- "reference": "7e4199d30f04c611ba5d895e663f111c217ff5a3"
+ "reference": "046d87b2d638cd0687b4ba06991947df2422970d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ARCANEDEV/Support/zipball/7e4199d30f04c611ba5d895e663f111c217ff5a3",
- "reference": "7e4199d30f04c611ba5d895e663f111c217ff5a3",
+ "url": "https://api.github.com/repos/ARCANEDEV/Support/zipball/046d87b2d638cd0687b4ba06991947df2422970d",
+ "reference": "046d87b2d638cd0687b4ba06991947df2422970d",
"shasum": ""
},
"require": {
- "illuminate/filesystem": "^7.0",
- "illuminate/support": "^7.0",
- "php": "^7.2.5"
+ "illuminate/contracts": "^9.0",
+ "illuminate/support": "^9.0",
+ "php": "^8.0.2"
},
"require-dev": {
- "orchestra/testbench": "^5.0",
- "phpunit/phpunit": "^8.0|^9.0"
+ "laravel/framework": "^9.0",
+ "orchestra/testbench-core": "^7.0",
+ "phpunit/phpunit": "^9.5.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "7.x-dev"
+ "dev-develop": "10.x-dev"
}
},
"autoload": {
- "psr-4": {
- "Arcanedev\\Support\\": "src/"
- },
"files": [
"helpers.php"
- ]
+ ],
+ "psr-4": {
+ "Arcanedev\\Support\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -167,82 +181,35 @@
"laravel",
"support"
],
- "time": "2020-03-12T09:28:19+00:00"
- },
- {
- "name": "asm89/stack-cors",
- "version": "1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/asm89/stack-cors.git",
- "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08"
+ "support": {
+ "issues": "https://github.com/ARCANEDEV/Support/issues",
+ "source": "https://github.com/ARCANEDEV/Support/tree/9.0.0"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08",
- "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.9",
- "symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0",
- "symfony/http-kernel": "~2.7|~3.0|~4.0|~5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^5.0 || ^4.8.10",
- "squizlabs/php_codesniffer": "^2.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Asm89\\Stack\\": "src/Asm89/Stack/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Alexander",
- "email": "iam.asm89@gmail.com"
- }
- ],
- "description": "Cross-origin resource sharing library and stack middleware",
- "homepage": "https://github.com/asm89/stack-cors",
- "keywords": [
- "cors",
- "stack"
- ],
- "time": "2019-12-24T22:41:47+00:00"
+ "time": "2022-02-10T19:52:50+00:00"
},
{
"name": "bacon/bacon-qr-code",
- "version": "2.0.2",
+ "version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/Bacon/BaconQrCode.git",
- "reference": "add6d9ff97336b62f95a3b94f75cea4e085465b2"
+ "reference": "0069435e2a01a57193b25790f105a5d3168653c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/add6d9ff97336b62f95a3b94f75cea4e085465b2",
- "reference": "add6d9ff97336b62f95a3b94f75cea4e085465b2",
+ "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/0069435e2a01a57193b25790f105a5d3168653c1",
+ "reference": "0069435e2a01a57193b25790f105a5d3168653c1",
"shasum": ""
},
"require": {
- "dasprid/enum": "^1.0",
+ "dasprid/enum": "^1.0.3",
"ext-iconv": "*",
- "php": "^7.1"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "phly/keep-a-changelog": "^1.4",
+ "phly/keep-a-changelog": "^2.1",
"phpunit/phpunit": "^7 | ^8 | ^9",
+ "spatie/phpunit-snapshot-assertions": "^4.2.9",
"squizlabs/php_codesniffer": "^3.4"
},
"suggest": {
@@ -268,7 +235,11 @@
],
"description": "BaconQrCode is a QR code generator for PHP.",
"homepage": "https://github.com/Bacon/BaconQrCode",
- "time": "2020-07-30T16:40:58+00:00"
+ "support": {
+ "issues": "https://github.com/Bacon/BaconQrCode/issues",
+ "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.6"
+ },
+ "time": "2022-02-04T20:16:05+00:00"
},
{
"name": "brick/math",
@@ -314,6 +285,10 @@
"brick",
"math"
],
+ "support": {
+ "issues": "https://github.com/brick/math/issues",
+ "source": "https://github.com/brick/math/tree/0.9.3"
+ },
"funding": [
{
"url": "https://github.com/BenMorel",
@@ -328,32 +303,32 @@
},
{
"name": "clue/stream-filter",
- "version": "v1.4.1",
+ "version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/clue/stream-filter.git",
- "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71"
+ "reference": "d6169430c7731d8509da7aecd0af756a5747b78e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/clue/stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
- "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
+ "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e",
+ "reference": "d6169430c7731d8509da7aecd0af756a5747b78e",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
- "phpunit/phpunit": "^5.0 || ^4.8"
+ "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
- "psr-4": {
- "Clue\\StreamFilter\\": "src/"
- },
"files": [
"src/functions_include.php"
- ]
+ ],
+ "psr-4": {
+ "Clue\\StreamFilter\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -362,7 +337,7 @@
"authors": [
{
"name": "Christian Lück",
- "email": "christian@lueck.tv"
+ "email": "christian@clue.engineering"
}
],
"description": "A simple and modern approach to stream filtering in PHP",
@@ -376,6 +351,10 @@
"stream_filter_append",
"stream_filter_register"
],
+ "support": {
+ "issues": "https://github.com/clue/stream-filter/issues",
+ "source": "https://github.com/clue/stream-filter/tree/v1.6.0"
+ },
"funding": [
{
"url": "https://clue.engineering/support",
@@ -386,89 +365,20 @@
"type": "github"
}
],
- "time": "2019-04-09T12:31:48+00:00"
- },
- {
- "name": "composer/package-versions-deprecated",
- "version": "1.11.99",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/package-versions-deprecated.git",
- "reference": "c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855",
- "reference": "c8c9aa8a14cc3d3bec86d0a8c3fa52ea79936855",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.1.0 || ^2.0",
- "php": "^7 || ^8"
- },
- "replace": {
- "ocramius/package-versions": "1.11.99"
- },
- "require-dev": {
- "composer/composer": "^1.9.3 || ^2.0@dev",
- "ext-zip": "^1.13",
- "phpunit/phpunit": "^6.5 || ^7"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "PackageVersions\\Installer",
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PackageVersions\\": "src/PackageVersions"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be"
- }
- ],
- "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2020-08-25T05:50:16+00:00"
+ "time": "2022-02-21T13:15:14+00:00"
},
{
"name": "dasprid/enum",
- "version": "1.0.2",
+ "version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/DASPRiD/Enum.git",
- "reference": "6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07"
+ "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07",
- "reference": "6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07",
+ "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2",
+ "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2",
"shasum": ""
},
"require-dev": {
@@ -498,53 +408,99 @@
"enum",
"map"
],
- "time": "2020-07-30T16:37:13+00:00"
+ "support": {
+ "issues": "https://github.com/DASPRiD/Enum/issues",
+ "source": "https://github.com/DASPRiD/Enum/tree/1.0.3"
+ },
+ "time": "2020-10-02T16:03:48+00:00"
},
{
- "name": "dnoegel/php-xdg-base-dir",
- "version": "v0.1.1",
+ "name": "dflydev/dot-access-data",
+ "version": "v3.0.1",
"source": {
"type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
+ "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+ "reference": "0992cc19268b259a39e86f296da5f0677841f42c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+ "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c",
+ "reference": "0992cc19268b259a39e86f296da5f0677841f42c",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
+ "phpstan/phpstan": "^0.12.42",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
+ "scrutinizer/ocular": "1.6.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "vimeo/psalm": "^3.14"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "XdgBaseDir\\": "src/"
+ "Dflydev\\DotAccessData\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "implementation of xdg base directory specification for php",
- "time": "2019-12-04T15:06:13+00:00"
+ "authors": [
+ {
+ "name": "Dragonfly Development Inc.",
+ "email": "info@dflydev.com",
+ "homepage": "http://dflydev.com"
+ },
+ {
+ "name": "Beau Simensen",
+ "email": "beau@dflydev.com",
+ "homepage": "http://beausimensen.com"
+ },
+ {
+ "name": "Carlos Frutos",
+ "email": "carlos@kiwing.it",
+ "homepage": "https://github.com/cfrutos"
+ },
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com"
+ }
+ ],
+ "description": "Given a deep data structure, access data by dot notation.",
+ "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+ "keywords": [
+ "access",
+ "data",
+ "dot",
+ "notation"
+ ],
+ "support": {
+ "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
+ "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1"
+ },
+ "time": "2021-08-13T13:06:58+00:00"
},
{
"name": "doctrine/cache",
- "version": "1.10.2",
+ "version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
- "reference": "13e3381b25847283a91948d04640543941309727"
+ "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727",
- "reference": "13e3381b25847283a91948d04640543941309727",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce",
+ "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce",
"shasum": ""
},
"require": {
@@ -555,20 +511,19 @@
},
"require-dev": {
"alcaeus/mongo-php-adapter": "^1.1",
- "doctrine/coding-standard": "^6.0",
+ "cache/integration-tests": "dev-master",
+ "doctrine/coding-standard": "^8.0",
"mongodb/mongodb": "^1.1",
- "phpunit/phpunit": "^7.0",
- "predis/predis": "~1.0"
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
+ "predis/predis": "~1.0",
+ "psr/cache": "^1.0 || ^2.0 || ^3.0",
+ "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev",
+ "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev"
},
"suggest": {
"alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.9.x-dev"
- }
- },
"autoload": {
"psr-4": {
"Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
@@ -613,6 +568,10 @@
"redis",
"xcache"
],
+ "support": {
+ "issues": "https://github.com/doctrine/cache/issues",
+ "source": "https://github.com/doctrine/cache/tree/2.1.1"
+ },
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
@@ -627,37 +586,39 @@
"type": "tidelift"
}
],
- "time": "2020-07-07T18:54:01+00:00"
+ "time": "2021-07-17T14:49:29+00:00"
},
{
"name": "doctrine/dbal",
- "version": "2.10.3",
+ "version": "2.13.7",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "03ca23afc2ee062f5d3e32426ad37c34a4770dcf"
+ "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/03ca23afc2ee062f5d3e32426ad37c34a4770dcf",
- "reference": "03ca23afc2ee062f5d3e32426ad37c34a4770dcf",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/6e22f6012b42d7932674857989fcf184e9e9b1c3",
+ "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3",
"shasum": ""
},
"require": {
- "doctrine/cache": "^1.0",
+ "doctrine/cache": "^1.0|^2.0",
+ "doctrine/deprecations": "^0.5.3",
"doctrine/event-manager": "^1.0",
"ext-pdo": "*",
- "php": "^7.2"
+ "php": "^7.1 || ^8"
},
"require-dev": {
- "doctrine/coding-standard": "^8.1",
- "jetbrains/phpstorm-stubs": "^2019.1",
- "nikic/php-parser": "^4.4",
- "phpstan/phpstan": "^0.12.40",
- "phpunit/phpunit": "^8.5.5",
- "psalm/plugin-phpunit": "^0.10.0",
+ "doctrine/coding-standard": "9.0.0",
+ "jetbrains/phpstorm-stubs": "2021.1",
+ "phpstan/phpstan": "1.3.0",
+ "phpunit/phpunit": "^7.5.20|^8.5|9.5.11",
+ "psalm/plugin-phpunit": "0.16.1",
+ "squizlabs/php_codesniffer": "3.6.2",
+ "symfony/cache": "^4.4",
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
- "vimeo/psalm": "^3.14.2"
+ "vimeo/psalm": "4.16.1"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@@ -666,12 +627,6 @@
"bin/doctrine-dbal"
],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.10.x-dev",
- "dev-develop": "3.0.x-dev"
- }
- },
"autoload": {
"psr-4": {
"Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
@@ -722,6 +677,10 @@
"sqlserver",
"sqlsrv"
],
+ "support": {
+ "issues": "https://github.com/doctrine/dbal/issues",
+ "source": "https://github.com/doctrine/dbal/tree/2.13.7"
+ },
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
@@ -736,7 +695,50 @@
"type": "tidelift"
}
],
- "time": "2020-09-02T01:35:42+00:00"
+ "time": "2022-01-06T09:08:04+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "v0.5.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "9504165960a1f83cc1480e2be1dd0a0478561314"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314",
+ "reference": "9504165960a1f83cc1480e2be1dd0a0478561314",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^6.0|^7.0|^8.0",
+ "phpunit/phpunit": "^7.0|^8.0|^9.0",
+ "psr/log": "^1.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/v0.5.3"
+ },
+ "time": "2021-03-21T12:59:47+00:00"
},
{
"name": "doctrine/event-manager",
@@ -812,6 +814,10 @@
"event system",
"events"
],
+ "support": {
+ "issues": "https://github.com/doctrine/event-manager/issues",
+ "source": "https://github.com/doctrine/event-manager/tree/1.1.x"
+ },
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
@@ -899,6 +905,10 @@
"uppercase",
"words"
],
+ "support": {
+ "issues": "https://github.com/doctrine/inflector/issues",
+ "source": "https://github.com/doctrine/inflector/tree/2.0.4"
+ },
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
@@ -917,32 +927,28 @@
},
{
"name": "doctrine/lexer",
- "version": "1.2.1",
+ "version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
- "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
+ "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
- "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c",
+ "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^6.0",
- "phpstan/phpstan": "^0.11.8",
- "phpunit/phpunit": "^8.2"
+ "doctrine/coding-standard": "^9.0",
+ "phpstan/phpstan": "1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.11"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
"autoload": {
"psr-4": {
"Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
@@ -975,6 +981,10 @@
"parser",
"php"
],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/1.2.2"
+ },
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
@@ -989,34 +999,36 @@
"type": "tidelift"
}
],
- "time": "2020-05-25T17:44:05+00:00"
+ "time": "2022-01-12T08:27:12+00:00"
},
{
"name": "dragonmantank/cron-expression",
- "version": "v2.3.1",
+ "version": "v3.3.1",
"source": {
"type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2"
+ "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2",
- "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa",
+ "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa",
"shasum": ""
},
"require": {
- "php": "^7.0|^8.0"
+ "php": "^7.2|^8.0",
+ "webmozart/assert": "^1.0"
+ },
+ "replace": {
+ "mtdowling/cron-expression": "^1.0"
},
"require-dev": {
- "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0"
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-webmozart-assert": "^1.0",
+ "phpunit/phpunit": "^7.0|^8.0|^9.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
"autoload": {
"psr-4": {
"Cron\\": "src/Cron/"
@@ -1027,11 +1039,6 @@
"MIT"
],
"authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
{
"name": "Chris Tankersley",
"email": "chris@ctankersley.com",
@@ -1043,37 +1050,41 @@
"cron",
"schedule"
],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1"
+ },
"funding": [
{
"url": "https://github.com/dragonmantank",
"type": "github"
}
],
- "time": "2020-10-13T00:52:37+00:00"
+ "time": "2022-01-18T15:43:28+00:00"
},
{
"name": "egulias/email-validator",
- "version": "2.1.25",
+ "version": "3.1.2",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
+ "reference": "ee0db30118f661fb166bcffbf5d82032df484697"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
- "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697",
+ "reference": "ee0db30118f661fb166bcffbf5d82032df484697",
"shasum": ""
},
"require": {
- "doctrine/lexer": "^1.0.1",
- "php": ">=5.5",
- "symfony/polyfill-intl-idn": "^1.10"
+ "doctrine/lexer": "^1.2",
+ "php": ">=7.2",
+ "symfony/polyfill-intl-idn": "^1.15"
},
"require-dev": {
- "dominicsayers/isemail": "^3.0.7",
- "phpunit/phpunit": "^4.8.36|^7.5.15",
- "satooshi/php-coveralls": "^1.0.1"
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpunit/phpunit": "^8.5.8|^9.3.3",
+ "vimeo/psalm": "^4"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
@@ -1081,7 +1092,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.1.x-dev"
+ "dev-master": "3.0.x-dev"
}
},
"autoload": {
@@ -1107,101 +1118,105 @@
"validation",
"validator"
],
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/3.1.2"
+ },
"funding": [
{
"url": "https://github.com/egulias",
"type": "github"
}
],
- "time": "2020-12-29T14:50:06+00:00"
+ "time": "2021-10-11T09:18:27+00:00"
},
{
- "name": "fideloper/proxy",
- "version": "4.4.0",
+ "name": "firebase/php-jwt",
+ "version": "v5.5.1",
"source": {
"type": "git",
- "url": "https://github.com/fideloper/TrustedProxy.git",
- "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8"
+ "url": "https://github.com/firebase/php-jwt.git",
+ "reference": "83b609028194aa042ea33b5af2d41a7427de80e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8",
- "reference": "9beebf48a1c344ed67c1d36bb1b8709db7c3c1a8",
+ "url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6",
+ "reference": "83b609028194aa042ea33b5af2d41a7427de80e6",
"shasum": ""
},
"require": {
- "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0",
- "php": ">=5.4.0"
+ "php": ">=5.3.0"
},
"require-dev": {
- "illuminate/http": "^5.0|^6.0|^7.0|^8.0",
- "mockery/mockery": "^1.0",
- "phpunit/phpunit": "^6.0"
+ "phpunit/phpunit": ">=4.8 <=9"
+ },
+ "suggest": {
+ "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
},
"type": "library",
- "extra": {
- "laravel": {
- "providers": [
- "Fideloper\\Proxy\\TrustedProxyServiceProvider"
- ]
- }
- },
"autoload": {
"psr-4": {
- "Fideloper\\Proxy\\": "src/"
+ "Firebase\\JWT\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Chris Fidao",
- "email": "fideloper@gmail.com"
+ "name": "Neuman Vong",
+ "email": "neuman+pear@twilio.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Anant Narayanan",
+ "email": "anant@php.net",
+ "role": "Developer"
}
],
- "description": "Set trusted proxies for Laravel",
+ "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
+ "homepage": "https://github.com/firebase/php-jwt",
"keywords": [
- "load balancing",
- "proxy",
- "trusted proxy"
+ "jwt",
+ "php"
],
- "time": "2020-06-23T01:36:47+00:00"
+ "support": {
+ "issues": "https://github.com/firebase/php-jwt/issues",
+ "source": "https://github.com/firebase/php-jwt/tree/v5.5.1"
+ },
+ "time": "2021-11-08T20:18:51+00:00"
},
{
"name": "fruitcake/laravel-cors",
- "version": "v1.0.6",
+ "version": "v2.1.0",
"source": {
"type": "git",
"url": "https://github.com/fruitcake/laravel-cors.git",
- "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6"
+ "reference": "361d71f00a0eea8b74da26ae75d0d207c53aa5b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/1d127dbec313e2e227d65e0c483765d8d7559bf6",
- "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6",
+ "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/361d71f00a0eea8b74da26ae75d0d207c53aa5b3",
+ "reference": "361d71f00a0eea8b74da26ae75d0d207c53aa5b3",
"shasum": ""
},
"require": {
- "asm89/stack-cors": "^1.3",
- "illuminate/contracts": "^5.5|^6.0|^7.0|^8.0",
- "illuminate/support": "^5.5|^6.0|^7.0|^8.0",
- "php": ">=7",
- "symfony/http-foundation": "^3.3|^4.0|^5.0",
- "symfony/http-kernel": "^3.3|^4.0|^5.0"
+ "fruitcake/php-cors": "^1",
+ "illuminate/contracts": "^6|^7|^8|^9",
+ "illuminate/support": "^6|^7|^8|^9",
+ "php": ">=7.2"
},
"require-dev": {
- "laravel/framework": "^5.5|^6.0|^7.0|^8.0",
- "orchestra/testbench": "^3.5|^4.0|^5.0|^6.0",
- "phpro/grumphp": "^0.16|^0.17",
- "phpunit/phpunit": "^6.0|^7.0|^8.0",
+ "laravel/framework": "^6|^7.24|^8",
+ "orchestra/testbench-dusk": "^4|^5|^6|^7",
+ "phpunit/phpunit": "^6|^7|^8|^9",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "2.1-dev"
},
"laravel": {
"providers": [
@@ -1235,40 +1250,118 @@
"crossdomain",
"laravel"
],
+ "support": {
+ "issues": "https://github.com/fruitcake/laravel-cors/issues",
+ "source": "https://github.com/fruitcake/laravel-cors/tree/v2.1.0"
+ },
"funding": [
+ {
+ "url": "https://fruitcake.nl",
+ "type": "custom"
+ },
{
"url": "https://github.com/barryvdh",
"type": "github"
}
],
- "time": "2020-04-28T08:47:37+00:00"
+ "time": "2022-02-19T14:17:28+00:00"
},
{
- "name": "geo-sot/laravel-env-editor",
- "version": "v0.9.9",
+ "name": "fruitcake/php-cors",
+ "version": "v1.2.0",
"source": {
"type": "git",
- "url": "https://github.com/GeoSot/Laravel-EnvEditor.git",
- "reference": "e828d3d3310890286d0b53045de9381187258605"
+ "url": "https://github.com/fruitcake/php-cors.git",
+ "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GeoSot/Laravel-EnvEditor/zipball/e828d3d3310890286d0b53045de9381187258605",
- "reference": "e828d3d3310890286d0b53045de9381187258605",
+ "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e",
+ "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e",
"shasum": ""
},
"require": {
- "laravel/framework": "~5.5.0|~5.6.0|~5.7.0|~5.8.0|~6.0|~7.0",
- "php": "^7.1"
+ "php": "^7.4|^8.0",
+ "symfony/http-foundation": "^4.4|^5.4|^6"
},
"require-dev": {
- "orchestra/testbench": "^3"
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^9",
+ "squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.9.*-dev"
+ "dev-main": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Fruitcake\\Cors\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fruitcake",
+ "homepage": "https://fruitcake.nl"
},
+ {
+ "name": "Barryvdh",
+ "email": "barryvdh@gmail.com"
+ }
+ ],
+ "description": "Cross-origin resource sharing library for the Symfony HttpFoundation",
+ "homepage": "https://github.com/fruitcake/php-cors",
+ "keywords": [
+ "cors",
+ "laravel",
+ "symfony"
+ ],
+ "support": {
+ "issues": "https://github.com/fruitcake/php-cors/issues",
+ "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://fruitcake.nl",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/barryvdh",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-20T15:07:15+00:00"
+ },
+ {
+ "name": "geo-sot/laravel-env-editor",
+ "version": "v1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GeoSot/Laravel-EnvEditor.git",
+ "reference": "d519594fcbc5dd9d35d47d56a96aae17f12c685f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GeoSot/Laravel-EnvEditor/zipball/d519594fcbc5dd9d35d47d56a96aae17f12c685f",
+ "reference": "d519594fcbc5dd9d35d47d56a96aae17f12c685f",
+ "shasum": ""
+ },
+ "require": {
+ "laravel/framework": ">=8",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.4",
+ "nunomaduro/larastan": "^1.0",
+ "orchestra/testbench": "^6"
+ },
+ "type": "library",
+ "extra": {
"laravel": {
"providers": [
"GeoSot\\EnvEditor\\ServiceProvider"
@@ -1293,47 +1386,49 @@
"email": "geo.sotis@gmail.com"
}
],
- "description": "A laravel Package that Supports .Env File editing and backup ",
+ "description": "A laravel Package that supports .Env File, editing and backup ",
"keywords": [
"EnvEditor",
"geo-sot",
"laravel",
"laravel-env-editor"
],
- "time": "2020-04-17T23:33:36+00:00"
+ "support": {
+ "issues": "https://github.com/GeoSot/Laravel-EnvEditor/issues",
+ "source": "https://github.com/GeoSot/Laravel-EnvEditor/tree/v1.1.0"
+ },
+ "time": "2022-01-25T17:13:30+00:00"
},
{
"name": "graham-campbell/markdown",
- "version": "v12.0.2",
+ "version": "14.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Laravel-Markdown.git",
- "reference": "584eb9f24004238b80ee98b6e7be82f0933554dd"
+ "reference": "e31023678538fafeb53b6d351e69e6e8dd7ac31e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/584eb9f24004238b80ee98b6e7be82f0933554dd",
- "reference": "584eb9f24004238b80ee98b6e7be82f0933554dd",
+ "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/e31023678538fafeb53b6d351e69e6e8dd7ac31e",
+ "reference": "e31023678538fafeb53b6d351e69e6e8dd7ac31e",
"shasum": ""
},
"require": {
- "illuminate/contracts": "^6.0|^7.0",
- "illuminate/support": "^6.0|^7.0",
- "illuminate/view": "^6.0|^7.0",
- "league/commonmark": "^1.3",
- "php": "^7.2.5"
+ "illuminate/contracts": "^8.75 || ^9.0",
+ "illuminate/filesystem": "^8.75 || ^9.0",
+ "illuminate/support": "^8.75 || ^9.0",
+ "illuminate/view": "^8.75 || ^9.0",
+ "league/commonmark": "^2.2",
+ "php": "^7.4.15 || ^8.0.2"
},
"require-dev": {
"graham-campbell/analyzer": "^3.0",
- "graham-campbell/testbench": "^5.4",
- "mockery/mockery": "^1.3.1",
- "phpunit/phpunit": "^8.5|^9.0"
+ "graham-campbell/testbench": "^5.7",
+ "mockery/mockery": "^1.5",
+ "phpunit/phpunit": "^9.5"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "12.0-dev"
- },
"laravel": {
"providers": [
"GrahamCampbell\\Markdown\\MarkdownServiceProvider"
@@ -1352,7 +1447,8 @@
"authors": [
{
"name": "Graham Campbell",
- "email": "graham@alt-three.com"
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
}
],
"description": "Markdown Is A CommonMark Wrapper For Laravel",
@@ -1367,6 +1463,10 @@
"laravel",
"markdown"
],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Laravel-Markdown/issues",
+ "source": "https://github.com/GrahamCampbell/Laravel-Markdown/tree/14.0"
+ },
"funding": [
{
"url": "https://github.com/GrahamCampbell",
@@ -1377,99 +1477,218 @@
"type": "tidelift"
}
],
- "time": "2020-04-14T16:14:52+00:00"
+ "time": "2022-01-24T16:21:25+00:00"
},
{
- "name": "guzzlehttp/guzzle",
- "version": "6.5.5",
+ "name": "graham-campbell/result-type",
+ "version": "v1.0.4",
"source": {
"type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e"
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
+ "reference": "0690bde05318336c7221785f2a932467f98b64ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
- "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca",
+ "reference": "0690bde05318336c7221785f2a932467f98b64ca",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "guzzlehttp/promises": "^1.0",
- "guzzlehttp/psr7": "^1.6.1",
- "php": ">=5.5",
- "symfony/polyfill-intl-idn": "^1.17.0"
+ "php": "^7.0 || ^8.0",
+ "phpoption/phpoption": "^1.8"
},
"require-dev": {
- "ext-curl": "*",
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
- "psr/log": "^1.1"
- },
- "suggest": {
- "psr/log": "Required for using the Log middleware"
+ "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "6.5-dev"
- }
- },
"autoload": {
"psr-4": {
- "GuzzleHttp\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
+ "GrahamCampbell\\ResultType\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "An Implementation Of The Result Type",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Result Type",
+ "Result-Type",
+ "result"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-21T21:41:47+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79",
+ "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5",
+ "guzzlehttp/psr7": "^1.8.3 || ^2.1",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "ext-curl": "*",
+ "php-http/client-integration-tests": "^3.0",
+ "phpunit/phpunit": "^8.5.5 || ^9.3.5",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.4-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle is a PHP HTTP client library",
- "homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
+ "psr-18",
+ "psr-7",
"rest",
"web service"
],
- "time": "2020-06-16T21:01:06+00:00"
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-12-06T18:43:05+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "v1.3.1",
+ "version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+ "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
+ "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
"shasum": ""
},
"require": {
- "php": ">=5.5.0"
+ "php": ">=5.5"
},
"require-dev": {
- "phpunit/phpunit": "^4.0"
+ "symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4-dev"
+ "dev-master": "1.5-dev"
}
},
"autoload": {
@@ -1485,74 +1704,133 @@
"MIT"
],
"authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
- "time": "2016-12-20T10:07:11+00:00"
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/1.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-22T20:56:57+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "1.6.1",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
+ "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
- "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72",
+ "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72",
"shasum": ""
},
"require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0",
- "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0",
+ "ralouphie/getallheaders": "^3.0"
},
"provide": {
+ "psr/http-factory-implementation": "1.0",
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "ext-zlib": "*",
- "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.8 || ^9.3.10"
},
"suggest": {
- "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
{
"name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
@@ -1566,32 +1844,54 @@
"uri",
"url"
],
- "time": "2019-07-01T23:21:34+00:00"
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-06T17:43:30+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
- "version": "1.0.0",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/http-interop/http-factory-guzzle.git",
- "reference": "34861658efb9899a6618cef03de46e2a52c80fc0"
+ "reference": "8f06e92b95405216b237521cc64c804dd44c4a81"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/34861658efb9899a6618cef03de46e2a52c80fc0",
- "reference": "34861658efb9899a6618cef03de46e2a52c80fc0",
+ "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81",
+ "reference": "8f06e92b95405216b237521cc64c804dd44c4a81",
"shasum": ""
},
"require": {
- "guzzlehttp/psr7": "^1.4.2",
+ "guzzlehttp/psr7": "^1.7||^2.0",
+ "php": ">=7.3",
"psr/http-factory": "^1.0"
},
"provide": {
"psr/http-factory-implementation": "^1.0"
},
"require-dev": {
- "http-interop/http-factory-tests": "^0.5",
- "phpunit/phpunit": "^6.5"
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^9.5"
+ },
+ "suggest": {
+ "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0"
},
"type": "library",
"autoload": {
@@ -1616,28 +1916,36 @@
"psr-17",
"psr-7"
],
- "time": "2018-07-31T19:32:56+00:00"
+ "support": {
+ "issues": "https://github.com/http-interop/http-factory-guzzle/issues",
+ "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0"
+ },
+ "time": "2021-07-21T13:50:14+00:00"
},
{
"name": "jean85/pretty-package-versions",
- "version": "1.5.0",
+ "version": "2.0.5",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
- "reference": "e9f4324e88b8664be386d90cf60fbc202e1f7fc9"
+ "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/e9f4324e88b8664be386d90cf60fbc202e1f7fc9",
- "reference": "e9f4324e88b8664be386d90cf60fbc202e1f7fc9",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af",
+ "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af",
"shasum": ""
},
"require": {
- "composer/package-versions-deprecated": "^1.8.0",
- "php": "^7.0"
+ "composer-runtime-api": "^2.0.0",
+ "php": "^7.1|^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^6.0"
+ "friendsofphp/php-cs-fixer": "^2.17",
+ "jean85/composer-provided-replaced-stub-package": "^1.0",
+ "phpstan/phpstan": "^0.12.66",
+ "phpunit/phpunit": "^7.5|^8.5|^9.4",
+ "vimeo/psalm": "^4.3"
},
"type": "library",
"extra": {
@@ -1660,31 +1968,35 @@
"email": "alessandro.lai85@gmail.com"
}
],
- "description": "A wrapper for ocramius/package-versions to get pretty versions strings",
+ "description": "A library to get pretty versions strings of installed dependencies",
"keywords": [
"composer",
"package",
"release",
"versions"
],
- "time": "2020-06-23T06:23:06+00:00"
+ "support": {
+ "issues": "https://github.com/Jean85/pretty-package-versions/issues",
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5"
+ },
+ "time": "2021-10-08T21:21:46+00:00"
},
{
"name": "jeroennoten/laravel-adminlte",
- "version": "v3.4.4",
+ "version": "v3.8.0",
"source": {
"type": "git",
"url": "https://github.com/jeroennoten/Laravel-AdminLTE.git",
- "reference": "496e7cb3a770fcf05e78627d1b3cb0f3e4c865f3"
+ "reference": "5ba9fcebbdd889e4d05fdcfba927ffe1335f91ee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jeroennoten/Laravel-AdminLTE/zipball/496e7cb3a770fcf05e78627d1b3cb0f3e4c865f3",
- "reference": "496e7cb3a770fcf05e78627d1b3cb0f3e4c865f3",
+ "url": "https://api.github.com/repos/jeroennoten/Laravel-AdminLTE/zipball/5ba9fcebbdd889e4d05fdcfba927ffe1335f91ee",
+ "reference": "5ba9fcebbdd889e4d05fdcfba927ffe1335f91ee",
"shasum": ""
},
"require": {
- "almasaeed2010/adminlte": "^3.0",
+ "almasaeed2010/adminlte": "3.2.*",
"laravel/framework": ">=6.0",
"php": ">=7.2.0"
},
@@ -1722,64 +2034,218 @@
"administrator",
"laravel"
],
- "time": "2020-07-17T17:35:17+00:00"
+ "support": {
+ "issues": "https://github.com/jeroennoten/Laravel-AdminLTE/issues",
+ "source": "https://github.com/jeroennoten/Laravel-AdminLTE/tree/v3.8.0"
+ },
+ "time": "2022-02-10T17:50:18+00:00"
},
{
- "name": "laravel/framework",
- "version": "v7.30.6",
+ "name": "laravel-notification-channels/discord",
+ "version": "v1.3.0",
"source": {
"type": "git",
- "url": "https://github.com/laravel/framework.git",
- "reference": "ecdafad1dda3c790af186a6d18479ea4757ef9ee"
+ "url": "https://github.com/laravel-notification-channels/discord.git",
+ "reference": "e6526cd0903b51abe39d3a80b6b1f60c391598e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/ecdafad1dda3c790af186a6d18479ea4757ef9ee",
- "reference": "ecdafad1dda3c790af186a6d18479ea4757ef9ee",
+ "url": "https://api.github.com/repos/laravel-notification-channels/discord/zipball/e6526cd0903b51abe39d3a80b6b1f60c391598e1",
+ "reference": "e6526cd0903b51abe39d3a80b6b1f60c391598e1",
"shasum": ""
},
"require": {
- "doctrine/inflector": "^1.4|^2.0",
- "dragonmantank/cron-expression": "^2.3.1",
- "egulias/email-validator": "^2.1.10",
"ext-json": "*",
+ "guzzlehttp/guzzle": "^6.3 || ^7.0",
+ "illuminate/console": "^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "illuminate/notifications": "^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "illuminate/queue": "^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "php": "^7.2|^8.0",
+ "textalk/websocket": "^1.2"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.3.3",
+ "orchestra/testbench": "^5.0 || ^6.0 || ^7.0",
+ "phpunit/phpunit": "^8.5 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "NotificationChannels\\Discord\\DiscordServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "NotificationChannels\\Discord\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Cody Scott",
+ "email": "cs475x@icloud.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Laravel notification driver for Discord.",
+ "homepage": "https://github.com/laravel-notification-channels/discord",
+ "keywords": [
+ "channel",
+ "discord",
+ "driver",
+ "laravel",
+ "notification"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel-notification-channels/discord/issues",
+ "source": "https://github.com/laravel-notification-channels/discord/tree/v1.3.0"
+ },
+ "time": "2022-02-13T23:55:52+00:00"
+ },
+ {
+ "name": "laravel-notification-channels/pusher-push-notifications",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel-notification-channels/pusher-push-notifications.git",
+ "reference": "a3bfe644808768ba89745c8d8f74d280bddd0688"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel-notification-channels/pusher-push-notifications/zipball/a3bfe644808768ba89745c8d8f74d280bddd0688",
+ "reference": "a3bfe644808768ba89745c8d8f74d280bddd0688",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/events": "~7.0 || ~8.0 || ~9.0",
+ "illuminate/notifications": "~7.0 || ~8.0 || ~9.0",
+ "illuminate/queue": "~7.0 || ~8.0 || ~9.0",
+ "illuminate/support": "~7.0 || ~8.0 || ~9.0",
+ "php": ">=7.4",
+ "pusher/pusher-push-notifications": "^1.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.3",
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "NotificationChannels\\PusherPushNotifications\\PusherPushNotificationsServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "NotificationChannels\\PusherPushNotifications\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mohamed Said",
+ "email": "themsaid@gmail.com",
+ "homepage": "https://themsaid.com"
+ },
+ {
+ "name": "Marcel Pociot",
+ "email": "hello@marcelpociot.com",
+ "homepage": "http://marcelpociot.com"
+ },
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://spatie.be"
+ },
+ {
+ "name": "Sebastian De Deyne",
+ "email": "sebastian@spatie.be",
+ "homepage": "https://sebastiandedeyne.com"
+ }
+ ],
+ "description": "Pusher native Push Notifications driver.",
+ "homepage": "https://github.com/LaravelNotificationChannels/pusher-push-notifications",
+ "keywords": [
+ "laravel",
+ "notifications",
+ "pusher",
+ "pusher-push-notifications"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel-notification-channels/pusher-push-notifications/issues",
+ "source": "https://github.com/laravel-notification-channels/pusher-push-notifications/tree/3.0.0"
+ },
+ "time": "2022-02-07T00:09:50+00:00"
+ },
+ {
+ "name": "laravel/framework",
+ "version": "v9.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/framework.git",
+ "reference": "13372872bed31ae75df8709b9de5cde01d50646e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/13372872bed31ae75df8709b9de5cde01d50646e",
+ "reference": "13372872bed31ae75df8709b9de5cde01d50646e",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/inflector": "^2.0",
+ "dragonmantank/cron-expression": "^3.1",
+ "egulias/email-validator": "^3.1",
"ext-mbstring": "*",
"ext-openssl": "*",
- "league/commonmark": "^1.3",
- "league/flysystem": "^1.1",
+ "fruitcake/php-cors": "^1.2",
+ "laravel/serializable-closure": "^1.0",
+ "league/commonmark": "^2.2",
+ "league/flysystem": "^3.0",
"monolog/monolog": "^2.0",
- "nesbot/carbon": "^2.31",
- "opis/closure": "^3.6",
- "php": "^7.2.5|^8.0",
- "psr/container": "^1.0",
- "psr/simple-cache": "^1.0",
- "ramsey/uuid": "^3.7|^4.0",
- "swiftmailer/swiftmailer": "^6.0",
- "symfony/console": "^5.0",
- "symfony/error-handler": "^5.0",
- "symfony/finder": "^5.0",
- "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",
+ "nesbot/carbon": "^2.53.1",
+ "php": "^8.0.2",
+ "psr/container": "^1.1.1|^2.0.1",
+ "psr/log": "^1.0|^2.0|^3.0",
+ "psr/simple-cache": "^1.0|^2.0|^3.0",
+ "ramsey/uuid": "^4.2.2",
+ "symfony/console": "^6.0",
+ "symfony/error-handler": "^6.0",
+ "symfony/finder": "^6.0",
+ "symfony/http-foundation": "^6.0",
+ "symfony/http-kernel": "^6.0",
+ "symfony/mailer": "^6.0",
+ "symfony/mime": "^6.0",
+ "symfony/process": "^6.0",
+ "symfony/routing": "^6.0",
+ "symfony/var-dumper": "^6.0",
"tijsverkoyen/css-to-inline-styles": "^2.2.2",
- "vlucas/phpdotenv": "^4.0",
- "voku/portable-ascii": "^1.4.8"
+ "vlucas/phpdotenv": "^5.4.1",
+ "voku/portable-ascii": "^2.0"
},
"conflict": {
"tightenco/collect": "<5.5.33"
},
"provide": {
- "psr/container-implementation": "1.0"
+ "psr/container-implementation": "1.1|2.0",
+ "psr/simple-cache-implementation": "1.0|2.0|3.0"
},
"replace": {
"illuminate/auth": "self.version",
"illuminate/broadcasting": "self.version",
"illuminate/bus": "self.version",
"illuminate/cache": "self.version",
+ "illuminate/collections": "self.version",
+ "illuminate/conditionable": "self.version",
"illuminate/config": "self.version",
"illuminate/console": "self.version",
"illuminate/container": "self.version",
@@ -1792,6 +2258,7 @@
"illuminate/hashing": "self.version",
"illuminate/http": "self.version",
"illuminate/log": "self.version",
+ "illuminate/macroable": "self.version",
"illuminate/mail": "self.version",
"illuminate/notifications": "self.version",
"illuminate/pagination": "self.version",
@@ -1807,22 +2274,27 @@
"illuminate/view": "self.version"
},
"require-dev": {
- "aws/aws-sdk-php": "^3.155",
- "doctrine/dbal": "^2.6",
- "filp/whoops": "^2.8",
- "guzzlehttp/guzzle": "^6.3.1|^7.0.1",
- "league/flysystem-cached-adapter": "^1.0",
- "mockery/mockery": "~1.3.3|^1.4.2",
- "moontoast/math": "^1.1",
- "orchestra/testbench-core": "^5.8",
+ "aws/aws-sdk-php": "^3.198.1",
+ "doctrine/dbal": "^2.13.3|^3.1.4",
+ "fakerphp/faker": "^1.9.2",
+ "guzzlehttp/guzzle": "^7.2",
+ "league/flysystem-aws-s3-v3": "^3.0",
+ "league/flysystem-ftp": "^3.0",
+ "league/flysystem-sftp-v3": "^3.0",
+ "mockery/mockery": "^1.4.4",
+ "orchestra/testbench-core": "^7.1",
"pda/pheanstalk": "^4.0",
- "phpunit/phpunit": "^8.4|^9.3.3",
- "predis/predis": "^1.1.1",
- "symfony/cache": "^5.0"
+ "phpstan/phpstan": "^1.0",
+ "phpunit/phpunit": "^9.5.8",
+ "predis/predis": "^1.1.9",
+ "symfony/cache": "^6.0"
},
"suggest": {
- "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).",
- "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).",
+ "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).",
+ "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.198.1).",
+ "brianium/paratest": "Required to run tests in parallel (^6.0).",
+ "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
+ "ext-bcmath": "Required to use the multiple_of validation rule.",
"ext-ftp": "Required to use the Flysystem FTP driver.",
"ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
"ext-memcached": "Required to use the memcache cache driver.",
@@ -1830,38 +2302,46 @@
"ext-posix": "Required to use all features of the queue worker.",
"ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).",
"fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
- "filp/whoops": "Required for friendly error pages in development (^2.8).",
- "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).",
+ "filp/whoops": "Required for friendly error pages in development (^2.14.3).",
+ "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.2).",
"laravel/tinker": "Required to use the tinker console command (^2.0).",
- "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
- "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
- "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
- "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).",
- "moontoast/math": "Required to use ordered UUIDs (^1.1).",
+ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).",
+ "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).",
+ "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).",
+ "mockery/mockery": "Required to use mocking (^1.4.4).",
"nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
"pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
- "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).",
- "predis/predis": "Required to use the predis connector (^1.1.2).",
+ "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).",
+ "predis/predis": "Required to use the predis connector (^1.1.9).",
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
- "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).",
- "symfony/cache": "Required to PSR-6 cache bridge (^5.0).",
- "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).",
- "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).",
- "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)."
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
+ "symfony/cache": "Required to PSR-6 cache bridge (^6.0).",
+ "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).",
+ "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).",
+ "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).",
+ "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).",
+ "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "7.x-dev"
+ "dev-master": "9.x-dev"
}
},
"autoload": {
"files": [
+ "src/Illuminate/Collections/helpers.php",
+ "src/Illuminate/Events/functions.php",
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Support/helpers.php"
],
"psr-4": {
- "Illuminate\\": "src/Illuminate/"
+ "Illuminate\\": "src/Illuminate/",
+ "Illuminate\\Support\\": [
+ "src/Illuminate/Macroable/",
+ "src/Illuminate/Collections/",
+ "src/Illuminate/Conditionable/"
+ ]
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1880,26 +2360,89 @@
"framework",
"laravel"
],
- "time": "2021-12-07T14:56:47+00:00"
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2022-02-22T15:30:23+00:00"
},
{
- "name": "laravel/slack-notification-channel",
- "version": "v2.2.0",
+ "name": "laravel/serializable-closure",
+ "version": "v1.1.1",
"source": {
"type": "git",
- "url": "https://github.com/laravel/slack-notification-channel.git",
- "reference": "98e0fe5c8dda645e6af914285af7b742e167462a"
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/98e0fe5c8dda645e6af914285af7b742e167462a",
- "reference": "98e0fe5c8dda645e6af914285af7b742e167462a",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e",
+ "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "pestphp/pest": "^1.18",
+ "phpstan/phpstan": "^0.12.98",
+ "symfony/var-dumper": "^5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": [
+ "closure",
+ "laravel",
+ "serializable"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "time": "2022-02-11T19:23:53+00:00"
+ },
+ {
+ "name": "laravel/slack-notification-channel",
+ "version": "v2.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/slack-notification-channel.git",
+ "reference": "060617a31562c88656c95c5971a36989122d4b53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/060617a31562c88656c95c5971a36989122d4b53",
+ "reference": "060617a31562c88656c95c5971a36989122d4b53",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "^6.0|^7.0",
- "illuminate/notifications": "~5.8.0|^6.0|^7.0|^8.0",
- "php": "^7.1.3"
+ "illuminate/notifications": "~5.8.0|^6.0|^7.0|^8.0|^9.0",
+ "php": "^7.1.3|^8.0"
},
"require-dev": {
"mockery/mockery": "^1.0",
@@ -1937,36 +2480,109 @@
"notifications",
"slack"
],
- "time": "2020-08-25T18:21:34+00:00"
+ "support": {
+ "issues": "https://github.com/laravel/slack-notification-channel/issues",
+ "source": "https://github.com/laravel/slack-notification-channel/tree/v2.4.0"
+ },
+ "time": "2022-01-12T18:07:54+00:00"
},
{
- "name": "laravel/tinker",
- "version": "v2.4.2",
+ "name": "laravel/socialite",
+ "version": "v5.5.1",
"source": {
"type": "git",
- "url": "https://github.com/laravel/tinker.git",
- "reference": "58424c24e8aec31c3a3ac54eb3adb15e8a0a067b"
+ "url": "https://github.com/laravel/socialite.git",
+ "reference": "9b96dfd69e9c1de69c23205cb390550bc71c357e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/58424c24e8aec31c3a3ac54eb3adb15e8a0a067b",
- "reference": "58424c24e8aec31c3a3ac54eb3adb15e8a0a067b",
+ "url": "https://api.github.com/repos/laravel/socialite/zipball/9b96dfd69e9c1de69c23205cb390550bc71c357e",
+ "reference": "9b96dfd69e9c1de69c23205cb390550bc71c357e",
"shasum": ""
},
"require": {
- "illuminate/console": "^6.0|^7.0|^8.0",
- "illuminate/contracts": "^6.0|^7.0|^8.0",
- "illuminate/support": "^6.0|^7.0|^8.0",
- "php": "^7.2",
- "psy/psysh": "^0.10.3",
- "symfony/var-dumper": "^4.3|^5.0"
+ "ext-json": "*",
+ "guzzlehttp/guzzle": "^6.0|^7.0",
+ "illuminate/http": "^6.0|^7.0|^8.0|^9.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0",
+ "league/oauth1-client": "^1.0",
+ "php": "^7.2|^8.0"
},
"require-dev": {
- "mockery/mockery": "^1.3.1",
- "phpunit/phpunit": "^8.4|^9.0"
+ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
+ "mockery/mockery": "^1.0",
+ "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
+ "phpunit/phpunit": "^8.0|^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Socialite\\SocialiteServiceProvider"
+ ],
+ "aliases": {
+ "Socialite": "Laravel\\Socialite\\Facades\\Socialite"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Socialite\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "laravel",
+ "oauth"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/socialite/issues",
+ "source": "https://github.com/laravel/socialite"
+ },
+ "time": "2022-02-07T16:08:19+00:00"
+ },
+ {
+ "name": "laravel/tinker",
+ "version": "v2.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/tinker.git",
+ "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/5f2f9815b7631b9f586a3de7933c25f9327d4073",
+ "reference": "5f2f9815b7631b9f586a3de7933c25f9327d4073",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "^6.0|^7.0|^8.0|^9.0",
+ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0",
+ "php": "^7.2.5|^8.0",
+ "psy/psysh": "^0.10.4|^0.11.1",
+ "symfony/var-dumper": "^4.3.4|^5.0|^6.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.3|^1.4.2",
+ "phpunit/phpunit": "^8.5.8|^9.3.3"
},
"suggest": {
- "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0)."
+ "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)."
},
"type": "library",
"extra": {
@@ -2001,34 +2617,41 @@
"laravel",
"psysh"
],
- "time": "2020-08-11T19:28:08+00:00"
+ "support": {
+ "issues": "https://github.com/laravel/tinker/issues",
+ "source": "https://github.com/laravel/tinker/tree/v2.7.0"
+ },
+ "time": "2022-01-10T08:52:49+00:00"
},
{
"name": "laravel/ui",
- "version": "v2.2.0",
+ "version": "v3.4.5",
"source": {
"type": "git",
"url": "https://github.com/laravel/ui.git",
- "reference": "fb1404f04ece6eee128e3fb750d3a1e064238b33"
+ "reference": "f11d295de1508c5bb56206a620b00b6616de414c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/ui/zipball/fb1404f04ece6eee128e3fb750d3a1e064238b33",
- "reference": "fb1404f04ece6eee128e3fb750d3a1e064238b33",
+ "url": "https://api.github.com/repos/laravel/ui/zipball/f11d295de1508c5bb56206a620b00b6616de414c",
+ "reference": "f11d295de1508c5bb56206a620b00b6616de414c",
"shasum": ""
},
"require": {
- "illuminate/console": "^7.0|^8.0",
- "illuminate/filesystem": "^7.0|^8.0",
- "illuminate/support": "^7.0|^8.0",
- "php": "^7.2.5"
+ "illuminate/console": "^8.42|^9.0",
+ "illuminate/filesystem": "^8.42|^9.0",
+ "illuminate/support": "^8.82|^9.0",
+ "illuminate/validation": "^8.42|^9.0",
+ "php": "^7.3|^8.0"
},
"require-dev": {
- "mockery/mockery": "^1.0",
- "phpunit/phpunit": "^8.0|^9.0"
+ "orchestra/testbench": "^6.23|^7.0"
},
"type": "library",
"extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ },
"laravel": {
"providers": [
"Laravel\\Ui\\UiServiceProvider"
@@ -2056,46 +2679,59 @@
"laravel",
"ui"
],
- "time": "2020-08-25T18:30:43+00:00"
+ "support": {
+ "source": "https://github.com/laravel/ui/tree/v3.4.5"
+ },
+ "time": "2022-02-21T14:59:16+00:00"
},
{
"name": "league/commonmark",
- "version": "1.6.6",
+ "version": "2.2.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf"
+ "reference": "13d7751377732637814f0cda0e3f6d3243f9f769"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c4228d11e30d7493c6836d20872f9582d8ba6dcf",
- "reference": "c4228d11e30d7493c6836d20872f9582d8ba6dcf",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/13d7751377732637814f0cda0e3f6d3243f9f769",
+ "reference": "13d7751377732637814f0cda0e3f6d3243f9f769",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "php": "^7.1 || ^8.0"
- },
- "conflict": {
- "scrutinizer/ocular": "1.7.*"
+ "league/config": "^1.1.1",
+ "php": "^7.4 || ^8.0",
+ "psr/event-dispatcher": "^1.0",
+ "symfony/deprecation-contracts": "^2.1 || ^3.0",
+ "symfony/polyfill-php80": "^1.15"
},
"require-dev": {
- "cebe/markdown": "~1.0",
- "commonmark/commonmark.js": "0.29.2",
- "erusev/parsedown": "~1.0",
+ "cebe/markdown": "^1.0",
+ "commonmark/cmark": "0.30.0",
+ "commonmark/commonmark.js": "0.30.0",
+ "composer/package-versions-deprecated": "^1.8",
+ "erusev/parsedown": "^1.0",
"ext-json": "*",
"github/gfm": "0.29.0",
- "michelf/php-markdown": "~1.4",
- "mikehaertl/php-shellcommand": "^1.4",
- "phpstan/phpstan": "^0.12.90",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2",
- "scrutinizer/ocular": "^1.5",
- "symfony/finder": "^4.2"
+ "michelf/php-markdown": "^1.4",
+ "phpstan/phpstan": "^0.12.88 || ^1.0.0",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "symfony/finder": "^5.3",
+ "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
+ },
+ "suggest": {
+ "symfony/yaml": "v2.3+ required if using the Front Matter extension"
},
- "bin": [
- "bin/commonmark"
- ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.3-dev"
+ }
+ },
"autoload": {
"psr-4": {
"League\\CommonMark\\": "src"
@@ -2113,7 +2749,7 @@
"role": "Lead Developer"
}
],
- "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
+ "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
"homepage": "https://commonmark.thephpleague.com",
"keywords": [
"commonmark",
@@ -2125,11 +2761,14 @@
"md",
"parser"
],
+ "support": {
+ "docs": "https://commonmark.thephpleague.com/",
+ "forum": "https://github.com/thephpleague/commonmark/discussions",
+ "issues": "https://github.com/thephpleague/commonmark/issues",
+ "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+ "source": "https://github.com/thephpleague/commonmark"
+ },
"funding": [
- {
- "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark",
- "type": "custom"
- },
{
"url": "https://www.colinodell.com/sponsor",
"type": "custom"
@@ -2142,67 +2781,138 @@
"url": "https://github.com/colinodell",
"type": "github"
},
- {
- "url": "https://www.patreon.com/colinodell",
- "type": "patreon"
- },
{
"url": "https://tidelift.com/funding/github/packagist/league/commonmark",
"type": "tidelift"
}
],
- "time": "2021-07-17T17:13:23+00:00"
+ "time": "2022-02-13T15:00:57+00:00"
},
{
- "name": "league/flysystem",
- "version": "1.1.9",
+ "name": "league/config",
+ "version": "v1.1.1",
"source": {
"type": "git",
- "url": "https://github.com/thephpleague/flysystem.git",
- "reference": "094defdb4a7001845300334e7c1ee2335925ef99"
+ "url": "https://github.com/thephpleague/config.git",
+ "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99",
- "reference": "094defdb4a7001845300334e7c1ee2335925ef99",
+ "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e",
+ "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e",
"shasum": ""
},
"require": {
- "ext-fileinfo": "*",
- "league/mime-type-detection": "^1.3",
- "php": "^7.2.5 || ^8.0"
- },
- "conflict": {
- "league/flysystem-sftp": "<1.0.6"
+ "dflydev/dot-access-data": "^3.0.1",
+ "nette/schema": "^1.2",
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
- "phpspec/prophecy": "^1.11.1",
- "phpunit/phpunit": "^8.5.8"
- },
- "suggest": {
- "ext-ftp": "Allows you to use FTP server storage",
- "ext-openssl": "Allows you to use FTPS server storage",
- "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
- "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
- "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
- "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
- "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
- "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
- "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
- "league/flysystem-webdav": "Allows you to use WebDAV storage",
- "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
- "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
- "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
+ "phpstan/phpstan": "^0.12.90",
+ "phpunit/phpunit": "^9.5.5",
+ "scrutinizer/ocular": "^1.8.1",
+ "unleashedtech/php-coding-standard": "^3.1",
+ "vimeo/psalm": "^4.7.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1-dev"
+ "dev-main": "1.2-dev"
}
},
"autoload": {
"psr-4": {
- "League\\Flysystem\\": "src/"
+ "League\\Config\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Define configuration arrays with strict schemas and access values with dot notation",
+ "homepage": "https://config.thephpleague.com",
+ "keywords": [
+ "array",
+ "config",
+ "configuration",
+ "dot",
+ "dot-access",
+ "nested",
+ "schema"
+ ],
+ "support": {
+ "docs": "https://config.thephpleague.com/",
+ "issues": "https://github.com/thephpleague/config/issues",
+ "rss": "https://github.com/thephpleague/config/releases.atom",
+ "source": "https://github.com/thephpleague/config"
+ },
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ }
+ ],
+ "time": "2021-08-14T12:15:32+00:00"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "3.0.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "fb0801a60b7f9ea4188f01c25cb48aed26db7fb6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/fb0801a60b7f9ea4188f01c25cb48aed26db7fb6",
+ "reference": "fb0801a60b7f9ea4188f01c25cb48aed26db7fb6",
+ "shasum": ""
+ },
+ "require": {
+ "league/mime-type-detection": "^1.0.0",
+ "php": "^8.0.2"
+ },
+ "conflict": {
+ "guzzlehttp/guzzle": "<7.0",
+ "guzzlehttp/ringphp": "<1.1.1",
+ "symfony/http-client": "<5.2"
+ },
+ "require-dev": {
+ "async-aws/s3": "^1.5",
+ "async-aws/simple-s3": "^1.0",
+ "aws/aws-sdk-php": "^3.198.1",
+ "composer/semver": "^3.0",
+ "ext-fileinfo": "*",
+ "ext-ftp": "*",
+ "ext-zip": "*",
+ "friendsofphp/php-cs-fixer": "^3.5",
+ "google/cloud-storage": "^1.23",
+ "microsoft/azure-storage-blob": "^1.1",
+ "phpseclib/phpseclib": "^2.0",
+ "phpstan/phpstan": "^0.12.26",
+ "phpunit/phpunit": "^9.5.11",
+ "sabre/dav": "^4.3.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2212,36 +2922,42 @@
"authors": [
{
"name": "Frank de Jonge",
- "email": "info@frenky.net"
+ "email": "info@frankdejonge.nl"
}
],
- "description": "Filesystem abstraction: Many filesystems, one API.",
+ "description": "File storage abstraction for PHP",
"keywords": [
- "Cloud Files",
"WebDAV",
- "abstraction",
"aws",
"cloud",
- "copy.com",
- "dropbox",
- "file systems",
+ "file",
"files",
"filesystem",
"filesystems",
"ftp",
- "rackspace",
- "remote",
"s3",
"sftp",
"storage"
],
+ "support": {
+ "issues": "https://github.com/thephpleague/flysystem/issues",
+ "source": "https://github.com/thephpleague/flysystem/tree/3.0.9"
+ },
"funding": [
{
"url": "https://offset.earth/frankdejonge",
- "type": "other"
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/frankdejonge",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
+ "type": "tidelift"
}
],
- "time": "2021-12-09T09:40:50+00:00"
+ "time": "2022-02-22T07:37:40+00:00"
},
{
"name": "league/mime-type-detection",
@@ -2283,6 +2999,10 @@
}
],
"description": "Mime-type detection for Flysystem",
+ "support": {
+ "issues": "https://github.com/thephpleague/mime-type-detection/issues",
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.9.0"
+ },
"funding": [
{
"url": "https://github.com/frankdejonge",
@@ -2296,21 +3016,97 @@
"time": "2021-11-21T11:48:40+00:00"
},
{
- "name": "mcamara/laravel-localization",
- "version": "1.5.0",
+ "name": "league/oauth1-client",
+ "version": "v1.10.0",
"source": {
"type": "git",
- "url": "https://github.com/mcamara/laravel-localization.git",
- "reference": "13a51715f8e066b0bfb637fd9065d7496c3579ec"
+ "url": "https://github.com/thephpleague/oauth1-client.git",
+ "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/13a51715f8e066b0bfb637fd9065d7496c3579ec",
- "reference": "13a51715f8e066b0bfb637fd9065d7496c3579ec",
+ "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/88dd16b0cff68eb9167bfc849707d2c40ad91ddc",
+ "reference": "88dd16b0cff68eb9167bfc849707d2c40ad91ddc",
"shasum": ""
},
"require": {
- "laravel/framework": "~5.2.0||~5.3.0||~5.4.0||~5.5.0||~5.6.0||~5.7.0||~5.8.0||^6.0||^7.0",
+ "ext-json": "*",
+ "ext-openssl": "*",
+ "guzzlehttp/guzzle": "^6.0|^7.0",
+ "guzzlehttp/psr7": "^1.7|^2.0",
+ "php": ">=7.1||>=8.0"
+ },
+ "require-dev": {
+ "ext-simplexml": "*",
+ "friendsofphp/php-cs-fixer": "^2.17",
+ "mockery/mockery": "^1.3.3",
+ "phpstan/phpstan": "^0.12.42",
+ "phpunit/phpunit": "^7.5||9.5"
+ },
+ "suggest": {
+ "ext-simplexml": "For decoding XML-based responses."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev",
+ "dev-develop": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\OAuth1\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ben Corlett",
+ "email": "bencorlett@me.com",
+ "homepage": "http://www.webcomm.com.au",
+ "role": "Developer"
+ }
+ ],
+ "description": "OAuth 1.0 Client Library",
+ "keywords": [
+ "Authentication",
+ "SSO",
+ "authorization",
+ "bitbucket",
+ "identity",
+ "idp",
+ "oauth",
+ "oauth1",
+ "single sign on",
+ "trello",
+ "tumblr",
+ "twitter"
+ ],
+ "support": {
+ "issues": "https://github.com/thephpleague/oauth1-client/issues",
+ "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.0"
+ },
+ "time": "2021-08-15T23:05:49+00:00"
+ },
+ {
+ "name": "mcamara/laravel-localization",
+ "version": "v1.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mcamara/laravel-localization.git",
+ "reference": "27565315c585e90d8d93aa06afd49d6a5992fe5a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/27565315c585e90d8d93aa06afd49d6a5992fe5a",
+ "reference": "27565315c585e90d8d93aa06afd49d6a5992fe5a",
+ "shasum": ""
+ },
+ "require": {
+ "laravel/framework": "~5.2.0||~5.3.0||~5.4.0||~5.5.0||~5.6.0||~5.7.0||~5.8.0||^6.0||^7.0||^8.0||^9.0",
"php": ">=7.1.0"
},
"require-dev": {
@@ -2355,6 +3151,10 @@
"localization",
"php"
],
+ "support": {
+ "issues": "https://github.com/mcamara/laravel-localization/issues",
+ "source": "https://github.com/mcamara/laravel-localization/tree/v1.7.0"
+ },
"funding": [
{
"url": "https://github.com/iwasherefirst2",
@@ -2365,7 +3165,7 @@
"type": "github"
}
],
- "time": "2020-03-05T15:19:05+00:00"
+ "time": "2022-01-26T10:27:45+00:00"
},
{
"name": "monolog/monolog",
@@ -2450,6 +3250,10 @@
"logging",
"psr-3"
],
+ "support": {
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/2.3.5"
+ },
"funding": [
{
"url": "https://github.com/Seldaek",
@@ -2463,17 +3267,83 @@
"time": "2021-10-01T21:08:31+00:00"
},
{
- "name": "nesbot/carbon",
- "version": "2.55.2",
+ "name": "mpociot/teamwork",
+ "version": "7.0.0",
"source": {
"type": "git",
- "url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2"
+ "url": "https://github.com/mpociot/teamwork.git",
+ "reference": "261debfee8382be6570f9bbb6f3fea936eadb676"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8c2a18ce3e67c34efc1b29f64fe61304368259a2",
- "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2",
+ "url": "https://api.github.com/repos/mpociot/teamwork/zipball/261debfee8382be6570f9bbb6f3fea936eadb676",
+ "reference": "261debfee8382be6570f9bbb6f3fea936eadb676",
+ "shasum": ""
+ },
+ "require": {
+ "laravel/framework": "^6.0|^7.0|^8.0|^9.0",
+ "php": "^7.2.5|^8.0"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^2.10",
+ "illuminate/database": "^6.0|^7.0|^8.0|^9.0",
+ "mockery/mockery": "^1.3.3",
+ "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Mpociot\\Teamwork\\TeamworkServiceProvider"
+ ],
+ "aliases": {
+ "Teamwork": "Mpociot\\Teamwork\\Facades\\Teamwork"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Mpociot\\Teamwork\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marcel Pociot",
+ "email": "m.pociot@gmail.com"
+ },
+ {
+ "name": "Oliver Kaufmann",
+ "email": "okaufmann91@gmail.com"
+ }
+ ],
+ "description": "User to Team associations for the Laravel 5 Framework",
+ "homepage": "http://github.com/mpociot/teamwork",
+ "keywords": [
+ "Invite",
+ "Teams"
+ ],
+ "support": {
+ "issues": "https://github.com/mpociot/teamwork/issues",
+ "source": "https://github.com/mpociot/teamwork"
+ },
+ "time": "2022-02-16T22:36:43+00:00"
+ },
+ {
+ "name": "nesbot/carbon",
+ "version": "2.57.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/briannesbitt/Carbon.git",
+ "reference": "4a54375c21eea4811dbd1149fe6b246517554e78"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78",
+ "reference": "4a54375c21eea4811dbd1149fe6b246517554e78",
"shasum": ""
},
"require": {
@@ -2490,7 +3360,7 @@
"kylekatarnls/multi-tester": "^2.0",
"phpmd/phpmd": "^2.9",
"phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^0.12.54",
+ "phpstan/phpstan": "^0.12.54 || ^1.0",
"phpunit/phpunit": "^7.5.20 || ^8.5.14",
"squizlabs/php_codesniffer": "^3.4"
},
@@ -2541,6 +3411,11 @@
"datetime",
"time"
],
+ "support": {
+ "docs": "https://carbon.nesbot.com/docs",
+ "issues": "https://github.com/briannesbitt/Carbon/issues",
+ "source": "https://github.com/briannesbitt/Carbon"
+ },
"funding": [
{
"url": "https://opencollective.com/Carbon",
@@ -2551,20 +3426,167 @@
"type": "tidelift"
}
],
- "time": "2021-12-03T14:59:52+00:00"
+ "time": "2022-02-13T18:13:33+00:00"
},
{
- "name": "nikic/php-parser",
- "version": "v4.9.1",
+ "name": "nette/schema",
+ "version": "v1.2.2",
"source": {
"type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "88e519766fc58bd46b8265561fb79b54e2e00b28"
+ "url": "https://github.com/nette/schema.git",
+ "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/88e519766fc58bd46b8265561fb79b54e2e00b28",
- "reference": "88e519766fc58bd46b8265561fb79b54e2e00b28",
+ "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df",
+ "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df",
+ "shasum": ""
+ },
+ "require": {
+ "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0",
+ "php": ">=7.1 <8.2"
+ },
+ "require-dev": {
+ "nette/tester": "^2.3 || ^2.4",
+ "phpstan/phpstan-nette": "^0.12",
+ "tracy/tracy": "^2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "📐 Nette Schema: validating data structures against a given Schema.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "config",
+ "nette"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/schema/issues",
+ "source": "https://github.com/nette/schema/tree/v1.2.2"
+ },
+ "time": "2021-10-15T11:40:02+00:00"
+ },
+ {
+ "name": "nette/utils",
+ "version": "v3.2.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/utils.git",
+ "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99",
+ "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2 <8.2"
+ },
+ "conflict": {
+ "nette/di": "<3.0.6"
+ },
+ "require-dev": {
+ "nette/tester": "~2.0",
+ "phpstan/phpstan": "^1.0",
+ "tracy/tracy": "^2.3"
+ },
+ "suggest": {
+ "ext-gd": "to use Image",
+ "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+ "ext-json": "to use Nette\\Utils\\Json",
+ "ext-mbstring": "to use Strings::lower() etc...",
+ "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()",
+ "ext-xml": "to use Strings::length() etc. when mbstring is not available"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "array",
+ "core",
+ "datetime",
+ "images",
+ "json",
+ "nette",
+ "paginator",
+ "password",
+ "slugify",
+ "string",
+ "unicode",
+ "utf-8",
+ "utility",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/utils/issues",
+ "source": "https://github.com/nette/utils/tree/v3.2.7"
+ },
+ "time": "2022-01-24T11:29:14+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.13.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
+ "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
"shasum": ""
},
"require": {
@@ -2603,42 +3625,52 @@
"parser",
"php"
],
- "time": "2020-08-30T16:15:20+00:00"
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
+ },
+ "time": "2021-11-30T19:35:32+00:00"
},
{
- "name": "opis/closure",
- "version": "3.6.2",
+ "name": "nyholm/psr7",
+ "version": "1.5.0",
"source": {
"type": "git",
- "url": "https://github.com/opis/closure.git",
- "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6"
+ "url": "https://github.com/Nyholm/psr7.git",
+ "reference": "1461e07a0f2a975a52082ca3b769ca912b816226"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6",
- "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6",
+ "url": "https://api.github.com/repos/Nyholm/psr7/zipball/1461e07a0f2a975a52082ca3b769ca912b816226",
+ "reference": "1461e07a0f2a975a52082ca3b769ca912b816226",
"shasum": ""
},
"require": {
- "php": "^5.4 || ^7.0 || ^8.0"
+ "php": ">=7.1",
+ "php-http/message-factory": "^1.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
},
"require-dev": {
- "jeremeamia/superclosure": "^2.0",
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ "http-interop/http-factory-tests": "^0.9",
+ "php-http/psr7-integration-tests": "^1.0",
+ "phpunit/phpunit": "^7.5 || 8.5 || 9.4",
+ "symfony/error-handler": "^4.4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.6.x-dev"
+ "dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
- "Opis\\Closure\\": "src/"
- },
- "files": [
- "functions.php"
- ]
+ "Nyholm\\Psr7\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2646,46 +3678,56 @@
],
"authors": [
{
- "name": "Marius Sarca",
- "email": "marius.sarca@gmail.com"
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com"
},
{
- "name": "Sorin Sarca",
- "email": "sarca_sorin@hotmail.com"
+ "name": "Martijn van der Ven",
+ "email": "martijn@vanderven.se"
}
],
- "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
- "homepage": "https://opis.io/closure",
+ "description": "A fast PHP7 implementation of PSR-7",
+ "homepage": "https://tnyholm.se",
"keywords": [
- "anonymous functions",
- "closure",
- "function",
- "serializable",
- "serialization",
- "serialize"
+ "psr-17",
+ "psr-7"
],
- "time": "2021-04-09T13:42:10+00:00"
+ "support": {
+ "issues": "https://github.com/Nyholm/psr7/issues",
+ "source": "https://github.com/Nyholm/psr7/tree/1.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Zegnat",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nyholm",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-02T18:37:57+00:00"
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.3.0",
+ "version": "v2.5.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2"
+ "reference": "9229e15f2e6ba772f0c55dd6986c563b937170a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2",
- "reference": "47a1cedd2e4d52688eb8c96469c05ebc8fd28fa2",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/9229e15f2e6ba772f0c55dd6986c563b937170a8",
+ "reference": "9229e15f2e6ba772f0c55dd6986c563b937170a8",
"shasum": ""
},
"require": {
"php": "^7|^8"
},
"require-dev": {
- "phpunit/phpunit": "^6|^7",
- "vimeo/psalm": "^1|^2|^3"
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
},
"type": "library",
"autoload": {
@@ -2726,65 +3768,25 @@
"hex2bin",
"rfc4648"
],
- "time": "2019-11-06T19:20:29+00:00"
- },
- {
- "name": "paragonie/random_compat",
- "version": "v9.99.100",
- "source": {
- "type": "git",
- "url": "https://github.com/paragonie/random_compat.git",
- "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "source": "https://github.com/paragonie/constant_time_encoding"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
- "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
- "shasum": ""
- },
- "require": {
- "php": ">= 7"
- },
- "require-dev": {
- "phpunit/phpunit": "4.*|5.*",
- "vimeo/psalm": "^1"
- },
- "suggest": {
- "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
- },
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com",
- "homepage": "https://paragonie.com"
- }
- ],
- "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
- "keywords": [
- "csprng",
- "polyfill",
- "pseudorandom",
- "random"
- ],
- "time": "2020-10-15T08:29:30+00:00"
+ "time": "2022-01-17T05:32:27+00:00"
},
{
"name": "php-http/client-common",
- "version": "2.3.0",
+ "version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/client-common.git",
- "reference": "e37e46c610c87519753135fb893111798c69076a"
+ "reference": "d135751167d57e27c74de674d6a30cef2dc8e054"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/client-common/zipball/e37e46c610c87519753135fb893111798c69076a",
- "reference": "e37e46c610c87519753135fb893111798c69076a",
+ "url": "https://api.github.com/repos/php-http/client-common/zipball/d135751167d57e27c74de674d6a30cef2dc8e054",
+ "reference": "d135751167d57e27c74de674d6a30cef2dc8e054",
"shasum": ""
},
"require": {
@@ -2795,14 +3797,14 @@
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
- "symfony/options-resolver": "^2.6 || ^3.4.20 || ~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0",
+ "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0",
"symfony/polyfill-php80": "^1.17"
},
"require-dev": {
"doctrine/instantiator": "^1.1",
"guzzlehttp/psr7": "^1.4",
"nyholm/psr7": "^1.2",
- "phpspec/phpspec": "^5.1 || ^6.0",
+ "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
"phpspec/prophecy": "^1.10.2",
"phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
},
@@ -2842,20 +3844,24 @@
"http",
"httplug"
],
- "time": "2020-07-21T10:04:13+00:00"
+ "support": {
+ "issues": "https://github.com/php-http/client-common/issues",
+ "source": "https://github.com/php-http/client-common/tree/2.5.0"
+ },
+ "time": "2021-11-26T15:01:24+00:00"
},
{
"name": "php-http/discovery",
- "version": "1.9.1",
+ "version": "1.14.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
- "reference": "64a18cc891957e05d91910b3c717d6bd11fbede9"
+ "reference": "de90ab2b41d7d61609f504e031339776bc8c7223"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/discovery/zipball/64a18cc891957e05d91910b3c717d6bd11fbede9",
- "reference": "64a18cc891957e05d91910b3c717d6bd11fbede9",
+ "url": "https://api.github.com/repos/php-http/discovery/zipball/de90ab2b41d7d61609f504e031339776bc8c7223",
+ "reference": "de90ab2b41d7d61609f504e031339776bc8c7223",
"shasum": ""
},
"require": {
@@ -2872,8 +3878,7 @@
"puli/composer-plugin": "1.0.0-beta10"
},
"suggest": {
- "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories",
- "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details."
+ "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories"
},
"type": "library",
"extra": {
@@ -2907,83 +3912,24 @@
"message",
"psr7"
],
- "time": "2020-07-13T15:44:45+00:00"
- },
- {
- "name": "php-http/guzzle6-adapter",
- "version": "v2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-http/guzzle6-adapter.git",
- "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f"
+ "support": {
+ "issues": "https://github.com/php-http/discovery/issues",
+ "source": "https://github.com/php-http/discovery/tree/1.14.1"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/6074a4b1f4d5c21061b70bab3b8ad484282fe31f",
- "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f",
- "shasum": ""
- },
- "require": {
- "guzzlehttp/guzzle": "^6.0",
- "php": "^7.1",
- "php-http/httplug": "^2.0",
- "psr/http-client": "^1.0"
- },
- "provide": {
- "php-http/async-client-implementation": "1.0",
- "php-http/client-implementation": "1.0",
- "psr/http-client-implementation": "1.0"
- },
- "require-dev": {
- "ext-curl": "*",
- "php-http/client-integration-tests": "^2.0",
- "phpunit/phpunit": "^7.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Http\\Adapter\\Guzzle6\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com"
- },
- {
- "name": "David de Boer",
- "email": "david@ddeboer.nl"
- }
- ],
- "description": "Guzzle 6 HTTP Adapter",
- "homepage": "http://httplug.io",
- "keywords": [
- "Guzzle",
- "http"
- ],
- "time": "2018-12-16T14:44:03+00:00"
+ "time": "2021-09-18T07:57:46+00:00"
},
{
"name": "php-http/httplug",
- "version": "2.2.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
- "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9"
+ "reference": "f640739f80dfa1152533976e3c112477f69274eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/httplug/zipball/191a0a1b41ed026b717421931f8d3bd2514ffbf9",
- "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9",
+ "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb",
+ "reference": "f640739f80dfa1152533976e3c112477f69274eb",
"shasum": ""
},
"require": {
@@ -3028,25 +3974,29 @@
"client",
"http"
],
- "time": "2020-07-13T15:43:23+00:00"
+ "support": {
+ "issues": "https://github.com/php-http/httplug/issues",
+ "source": "https://github.com/php-http/httplug/tree/2.3.0"
+ },
+ "time": "2022-02-21T09:52:22+00:00"
},
{
"name": "php-http/message",
- "version": "1.9.0",
+ "version": "1.13.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
- "reference": "2c7256e3c1aba0bfca70f099810f1c7712e00945"
+ "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/message/zipball/2c7256e3c1aba0bfca70f099810f1c7712e00945",
- "reference": "2c7256e3c1aba0bfca70f099810f1c7712e00945",
+ "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361",
+ "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361",
"shasum": ""
},
"require": {
- "clue/stream-filter": "^1.4.1",
- "php": "^7.1",
+ "clue/stream-filter": "^1.5",
+ "php": "^7.1 || ^8.0",
"php-http/message-factory": "^1.0.2",
"psr/http-message": "^1.0"
},
@@ -3054,35 +4004,32 @@
"php-http/message-factory-implementation": "1.0"
},
"require-dev": {
- "akeneo/phpspec-skip-example-extension": "^1.0",
- "coduo/phpspec-data-provider-extension": "^1.0",
- "ergebnis/composer-normalize": "^2.1",
+ "ergebnis/composer-normalize": "^2.6",
"ext-zlib": "*",
"guzzlehttp/psr7": "^1.0",
- "henrikbjorn/phpspec-code-coverage": "^1.0",
- "phpspec/phpspec": "^2.4",
- "slim/slim": "^3.0",
- "zendframework/zend-diactoros": "^1.0"
+ "laminas/laminas-diactoros": "^2.0",
+ "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
+ "slim/slim": "^3.0"
},
"suggest": {
"ext-zlib": "Used with compressor/decompressor streams",
"guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories",
- "slim/slim": "Used with Slim Framework PSR-7 implementation",
- "zendframework/zend-diactoros": "Used with Diactoros Factories"
+ "laminas/laminas-diactoros": "Used with Diactoros Factories",
+ "slim/slim": "Used with Slim Framework PSR-7 implementation"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.8-dev"
+ "dev-master": "1.10-dev"
}
},
"autoload": {
- "psr-4": {
- "Http\\Message\\": "src/"
- },
"files": [
"src/filters.php"
- ]
+ ],
+ "psr-4": {
+ "Http\\Message\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -3101,7 +4048,11 @@
"message",
"psr-7"
],
- "time": "2020-08-17T06:33:14+00:00"
+ "support": {
+ "issues": "https://github.com/php-http/message/issues",
+ "source": "https://github.com/php-http/message/tree/1.13.0"
+ },
+ "time": "2022-02-11T13:41:14+00:00"
},
{
"name": "php-http/message-factory",
@@ -3151,6 +4102,10 @@
"stream",
"uri"
],
+ "support": {
+ "issues": "https://github.com/php-http/message-factory/issues",
+ "source": "https://github.com/php-http/message-factory/tree/master"
+ },
"time": "2015-12-19T14:08:53+00:00"
},
{
@@ -3204,6 +4159,10 @@
"keywords": [
"promise"
],
+ "support": {
+ "issues": "https://github.com/php-http/promise/issues",
+ "source": "https://github.com/php-http/promise/tree/1.1.0"
+ },
"time": "2020-07-07T09:29:14+00:00"
},
{
@@ -3261,6 +4220,10 @@
"php",
"type"
],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.8.1"
+ },
"funding": [
{
"url": "https://github.com/GrahamCampbell",
@@ -3319,29 +4282,33 @@
"Two Factor Authentication",
"google2fa"
],
+ "support": {
+ "issues": "https://github.com/antonioribeiro/google2fa/issues",
+ "source": "https://github.com/antonioribeiro/google2fa/tree/8.0.0"
+ },
"time": "2020-04-05T10:47:18+00:00"
},
{
"name": "pragmarx/google2fa-laravel",
- "version": "v1.3.3",
+ "version": "v1.4.1",
"source": {
"type": "git",
"url": "https://github.com/antonioribeiro/google2fa-laravel.git",
- "reference": "ed6e0a9ea1519550688ffb5afb4919204e46ecea"
+ "reference": "f9014fd7ea36a1f7fffa233109cf59b209469647"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/antonioribeiro/google2fa-laravel/zipball/ed6e0a9ea1519550688ffb5afb4919204e46ecea",
- "reference": "ed6e0a9ea1519550688ffb5afb4919204e46ecea",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa-laravel/zipball/f9014fd7ea36a1f7fffa233109cf59b209469647",
+ "reference": "f9014fd7ea36a1f7fffa233109cf59b209469647",
"shasum": ""
},
"require": {
- "laravel/framework": ">=5.4.36",
+ "laravel/framework": ">=5.4.36|^8.0",
"php": ">=7.0",
"pragmarx/google2fa-qrcode": "^1.0"
},
"require-dev": {
- "orchestra/testbench": "3.4.*|3.5.*|3.6.*|3.7.*|4.*",
+ "orchestra/testbench": "3.4.*|3.5.*|3.6.*|3.7.*|4.*|5.*|6.*",
"phpunit/phpunit": "~5|~6|~7|~8"
},
"suggest": {
@@ -3390,7 +4357,11 @@
"google2fa",
"laravel"
],
- "time": "2020-04-05T17:39:30+00:00"
+ "support": {
+ "issues": "https://github.com/antonioribeiro/google2fa-laravel/issues",
+ "source": "https://github.com/antonioribeiro/google2fa-laravel/tree/v1.4.1"
+ },
+ "time": "2020-09-20T21:01:48+00:00"
},
{
"name": "pragmarx/google2fa-qrcode",
@@ -3448,26 +4419,35 @@
"qr code",
"qrcode"
],
+ "support": {
+ "issues": "https://github.com/antonioribeiro/google2fa-qrcode/issues",
+ "source": "https://github.com/antonioribeiro/google2fa-qrcode/tree/master"
+ },
"time": "2019-03-20T16:42:58+00:00"
},
{
"name": "psr/container",
- "version": "1.1.1",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
"shasum": ""
},
"require": {
- "php": ">=7.2.0"
+ "php": ">=7.4.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
@@ -3492,7 +4472,11 @@
"container-interop",
"psr"
],
- "time": "2021-03-05T17:36:06+00:00"
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
+ },
+ "time": "2021-11-05T16:47:00+00:00"
},
{
"name": "psr/event-dispatcher",
@@ -3538,6 +4522,10 @@
"psr",
"psr-14"
],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
"time": "2019-01-08T18:20:26+00:00"
},
{
@@ -3587,6 +4575,9 @@
"psr",
"psr-18"
],
+ "support": {
+ "source": "https://github.com/php-fig/http-client/tree/master"
+ },
"time": "2020-06-29T06:28:15+00:00"
},
{
@@ -3639,6 +4630,9 @@
"request",
"response"
],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/master"
+ },
"time": "2019-04-30T12:38:16+00:00"
},
{
@@ -3689,34 +4683,37 @@
"request",
"response"
],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/master"
+ },
"time": "2016-08-06T14:39:51+00:00"
},
{
"name": "psr/log",
- "version": "1.1.4",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
+ "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1.x-dev"
+ "dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
- "Psr\\Log\\": "Psr/Log/"
+ "Psr\\Log\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -3736,29 +4733,32 @@
"psr",
"psr-3"
],
- "time": "2021-05-03T11:20:27+00:00"
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/3.0.0"
+ },
+ "time": "2021-07-14T16:46:02+00:00"
},
{
"name": "psr/simple-cache",
- "version": "1.0.1",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/simple-cache.git",
- "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
- "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "3.0.x-dev"
}
},
"autoload": {
@@ -3773,7 +4773,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interfaces for simple caching",
@@ -3784,34 +4784,36 @@
"psr-16",
"simple-cache"
],
- "time": "2017-10-23T01:57:42+00:00"
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
+ },
+ "time": "2021-10-29T13:26:27+00:00"
},
{
"name": "psy/psysh",
- "version": "v0.10.4",
+ "version": "v0.11.1",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560"
+ "reference": "570292577277f06f590635381a7f761a6cf4f026"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560",
- "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/570292577277f06f590635381a7f761a6cf4f026",
+ "reference": "570292577277f06f590635381a7f761a6cf4f026",
"shasum": ""
},
"require": {
- "dnoegel/php-xdg-base-dir": "0.1.*",
"ext-json": "*",
"ext-tokenizer": "*",
- "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
- "php": "^8.0 || ^7.0 || ^5.5.9",
- "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
- "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
+ "nikic/php-parser": "^4.0 || ^3.1",
+ "php": "^8.0 || ^7.0.8",
+ "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4",
+ "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.2",
- "hoa/console": "3.17.*"
+ "hoa/console": "3.17.05.02"
},
"suggest": {
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
@@ -3826,7 +4828,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.10.x-dev"
+ "dev-main": "0.11.x-dev"
}
},
"autoload": {
@@ -3856,7 +4858,51 @@
"interactive",
"shell"
],
- "time": "2020-05-03T19:32:03+00:00"
+ "support": {
+ "issues": "https://github.com/bobthecow/psysh/issues",
+ "source": "https://github.com/bobthecow/psysh/tree/v0.11.1"
+ },
+ "time": "2022-01-03T13:58:38+00:00"
+ },
+ {
+ "name": "pusher/pusher-push-notifications",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pusher/push-notifications-php.git",
+ "reference": "c8926f956ba4f7e681b4261220efd77f008a131d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pusher/push-notifications-php/zipball/c8926f956ba4f7e681b4261220efd77f008a131d",
+ "reference": "c8926f956ba4f7e681b4261220efd77f008a131d",
+ "shasum": ""
+ },
+ "require": {
+ "firebase/php-jwt": "^5.0",
+ "guzzlehttp/guzzle": "~6.0 || ~7.0",
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "doctrine/instantiator": "1.0.5",
+ "phpunit/phpunit": "~5.7.0",
+ "symfony/yaml": "~3.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Pusher\\PushNotifications\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "support": {
+ "issues": "https://github.com/pusher/push-notifications-php/issues",
+ "source": "https://github.com/pusher/push-notifications-php/tree/1.1.2"
+ },
+ "time": "2020-10-23T09:37:07+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -3896,6 +4942,10 @@
}
],
"description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
"time": "2019-03-08T08:55:37+00:00"
},
{
@@ -3961,6 +5011,10 @@
"queue",
"set"
],
+ "support": {
+ "issues": "https://github.com/ramsey/collection/issues",
+ "source": "https://github.com/ramsey/collection/tree/1.2.2"
+ },
"funding": [
{
"url": "https://github.com/ramsey",
@@ -4055,6 +5109,10 @@
"identifier",
"uuid"
],
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "source": "https://github.com/ramsey/uuid/tree/4.2.3"
+ },
"funding": [
{
"url": "https://github.com/ramsey",
@@ -4069,22 +5127,22 @@
},
{
"name": "sentry/sdk",
- "version": "2.1.0",
+ "version": "3.1.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php-sdk.git",
- "reference": "18921af9c2777517ef9fb480845c22a98554d6af"
+ "reference": "2de7de3233293f80d1e244bd950adb2121a3731c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/18921af9c2777517ef9fb480845c22a98554d6af",
- "reference": "18921af9c2777517ef9fb480845c22a98554d6af",
+ "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/2de7de3233293f80d1e244bd950adb2121a3731c",
+ "reference": "2de7de3233293f80d1e244bd950adb2121a3731c",
"shasum": ""
},
"require": {
"http-interop/http-factory-guzzle": "^1.0",
- "php-http/guzzle6-adapter": "^1.1|^2.0",
- "sentry/sentry": "^2.3"
+ "sentry/sentry": "^3.1",
+ "symfony/http-client": "^4.3|^5.0|^6.0"
},
"type": "metapackage",
"notification-url": "https://packagist.org/downloads/",
@@ -4097,30 +5155,53 @@
"email": "accounts@sentry.io"
}
],
- "description": "This is a metapackage shipping sentry/sentry with a recommended http client.",
- "time": "2020-01-08T19:16:29+00:00"
+ "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.",
+ "homepage": "http://sentry.io",
+ "keywords": [
+ "crash-reporting",
+ "crash-reports",
+ "error-handler",
+ "error-monitoring",
+ "log",
+ "logging",
+ "sentry"
+ ],
+ "support": {
+ "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://sentry.io/",
+ "type": "custom"
+ },
+ {
+ "url": "https://sentry.io/pricing/",
+ "type": "custom"
+ }
+ ],
+ "time": "2021-11-30T11:54:41+00:00"
},
{
"name": "sentry/sentry",
- "version": "2.4.3",
+ "version": "3.3.7",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
- "reference": "89fd1f91657b33ec9139f33f8a201eb086276103"
+ "reference": "32e5415803ff0349ccb5e5b5e77b016320762786"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/89fd1f91657b33ec9139f33f8a201eb086276103",
- "reference": "89fd1f91657b33ec9139f33f8a201eb086276103",
+ "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/32e5415803ff0349ccb5e5b5e77b016320762786",
+ "reference": "32e5415803ff0349ccb5e5b5e77b016320762786",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
- "guzzlehttp/promises": "^1.3",
- "guzzlehttp/psr7": "^1.6",
- "jean85/pretty-package-versions": "^1.2",
- "php": "^7.1",
+ "guzzlehttp/promises": "^1.4",
+ "guzzlehttp/psr7": "^1.7|^2.0",
+ "jean85/pretty-package-versions": "^1.5|^2.0.4",
+ "php": "^7.2|^8.0",
"php-http/async-client-implementation": "^1.0",
"php-http/client-common": "^1.5|^2.0",
"php-http/discovery": "^1.6.1",
@@ -4128,8 +5209,9 @@
"php-http/message": "^1.5",
"psr/http-factory": "^1.0",
"psr/http-message-implementation": "^1.0",
- "psr/log": "^1.0",
- "symfony/options-resolver": "^2.7|^3.0|^4.0|^5.0",
+ "psr/log": "^1.0|^2.0|^3.0",
+ "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0",
+ "symfony/polyfill-php80": "^1.17",
"symfony/polyfill-uuid": "^1.13.1"
},
"conflict": {
@@ -4137,15 +5219,18 @@
"raven/raven": "*"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^2.16",
+ "friendsofphp/php-cs-fixer": "^2.19|3.4.*",
+ "http-interop/http-factory-guzzle": "^1.0",
"monolog/monolog": "^1.3|^2.0",
+ "nikic/php-parser": "^4.10.3",
"php-http/mock-client": "^1.3",
+ "phpbench/phpbench": "^1.0",
"phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^7.5.18",
- "symfony/phpunit-bridge": "^4.3|^5.0",
- "vimeo/psalm": "^3.4"
+ "phpstan/phpstan": "^1.3",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^8.5.14|^9.4",
+ "symfony/phpunit-bridge": "^5.2|^6.0",
+ "vimeo/psalm": "^4.17"
},
"suggest": {
"monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
@@ -4153,7 +5238,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.4-dev"
+ "dev-master": "3.3.x-dev"
}
},
"autoload": {
@@ -4185,6 +5270,10 @@
"logging",
"sentry"
],
+ "support": {
+ "issues": "https://github.com/getsentry/sentry-php/issues",
+ "source": "https://github.com/getsentry/sentry-php/tree/3.3.7"
+ },
"funding": [
{
"url": "https://sentry.io/",
@@ -4195,42 +5284,50 @@
"type": "custom"
}
],
- "time": "2020-08-13T10:54:32+00:00"
+ "time": "2022-01-19T08:46:27+00:00"
},
{
"name": "sentry/sentry-laravel",
- "version": "1.7.1",
+ "version": "2.11.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-laravel.git",
- "reference": "8ec4695c5c6fa28d952c0f361e02997e84920354"
+ "reference": "183866ec5dc367efe4d5aa22906860e837aa6685"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/8ec4695c5c6fa28d952c0f361e02997e84920354",
- "reference": "8ec4695c5c6fa28d952c0f361e02997e84920354",
+ "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/183866ec5dc367efe4d5aa22906860e837aa6685",
+ "reference": "183866ec5dc367efe4d5aa22906860e837aa6685",
"shasum": ""
},
"require": {
- "illuminate/support": "5.0 - 5.8 | ^6.0 | ^7.0",
- "php": "^7.1",
- "sentry/sdk": "^2.1"
+ "illuminate/support": "5.0 - 5.8 | ^6.0 | ^7.0 | ^8.0 | ^9.0",
+ "nyholm/psr7": "^1.0",
+ "php": "^7.2 | ^8.0",
+ "sentry/sdk": "^3.1",
+ "sentry/sentry": "^3.3",
+ "symfony/psr-http-message-bridge": "^1.0 | ^2.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "2.14.*",
- "laravel/framework": "^6.0",
- "orchestra/testbench": "^3.9",
- "phpunit/phpunit": "^8.0"
+ "friendsofphp/php-cs-fixer": "2.18.*",
+ "laravel/framework": "5.0 - 5.8 | ^6.0 | ^7.0 | ^8.0 | ^9.0",
+ "mockery/mockery": "^1.3",
+ "orchestra/testbench": "3.1 - 3.8 | ^4.7 | ^5.1 | ^6.0 | ^7.0",
+ "phpunit/phpunit": "^5.7 | ^6.5 | ^7.5 | ^8.4 | ^9.3"
+ },
+ "suggest": {
+ "zendframework/zend-diactoros": "When using Laravel >=5.1 - <=6.9 this package can help get more accurate request info, not used on Laravel >=6.10 anymore (https://laravel.com/docs/5.8/requests#psr7-requests)"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev",
+ "dev-master": "2.x-dev",
"dev-0.x": "0.x-dev"
},
"laravel": {
"providers": [
- "Sentry\\Laravel\\ServiceProvider"
+ "Sentry\\Laravel\\ServiceProvider",
+ "Sentry\\Laravel\\Tracing\\ServiceProvider"
],
"aliases": {
"Sentry": "Sentry\\Laravel\\Facade"
@@ -4264,6 +5361,10 @@
"logging",
"sentry"
],
+ "support": {
+ "issues": "https://github.com/getsentry/sentry-laravel/issues",
+ "source": "https://github.com/getsentry/sentry-laravel/tree/2.11.1"
+ },
"funding": [
{
"url": "https://sentry.io/",
@@ -4274,32 +5375,147 @@
"type": "custom"
}
],
- "time": "2020-04-01T10:30:44+00:00"
+ "time": "2022-02-14T20:00:19+00:00"
},
{
- "name": "spatie/laravel-permission",
- "version": "3.16.0",
+ "name": "socialiteproviders/discord",
+ "version": "4.1.1",
"source": {
"type": "git",
- "url": "https://github.com/spatie/laravel-permission.git",
- "reference": "c5082ee84e0d128896b4a6864a8502d8c5f1df08"
+ "url": "https://github.com/SocialiteProviders/Discord.git",
+ "reference": "c6eddeb07ace7473e82d02d4db852dfacf5ef574"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/c5082ee84e0d128896b4a6864a8502d8c5f1df08",
- "reference": "c5082ee84e0d128896b4a6864a8502d8c5f1df08",
+ "url": "https://api.github.com/repos/SocialiteProviders/Discord/zipball/c6eddeb07ace7473e82d02d4db852dfacf5ef574",
+ "reference": "c6eddeb07ace7473e82d02d4db852dfacf5ef574",
"shasum": ""
},
"require": {
- "illuminate/auth": "^5.8|^6.0|^7.0|^8.0",
- "illuminate/container": "^5.8|^6.0|^7.0|^8.0",
- "illuminate/contracts": "^5.8|^6.0|^7.0|^8.0",
- "illuminate/database": "^5.8|^6.0|^7.0|^8.0",
- "php": "^7.2.5"
+ "ext-json": "*",
+ "php": "^7.2 || ^8.0",
+ "socialiteproviders/manager": "~4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "SocialiteProviders\\Discord\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christopher Eklund",
+ "email": "eklundchristopher@gmail.com"
+ }
+ ],
+ "description": "Discord OAuth2 Provider for Laravel Socialite",
+ "support": {
+ "source": "https://github.com/SocialiteProviders/Discord/tree/4.1.1"
+ },
+ "time": "2021-01-05T22:03:58+00:00"
+ },
+ {
+ "name": "socialiteproviders/manager",
+ "version": "v4.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/SocialiteProviders/Manager.git",
+ "reference": "4e63afbd26dc45ff263591de2a0970436a6a0bf9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/4e63afbd26dc45ff263591de2a0970436a6a0bf9",
+ "reference": "4e63afbd26dc45ff263591de2a0970436a6a0bf9",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "laravel/socialite": "~4.0 || ~5.0",
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "orchestra/testbench": "^3.8|^4.0|^5.0|^6.0",
- "phpunit/phpunit": "^8.0|^9.0",
+ "mockery/mockery": "^1.2",
+ "phpunit/phpunit": "^6.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "SocialiteProviders\\Manager\\ServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SocialiteProviders\\Manager\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Andy Wendt",
+ "email": "andy@awendt.com"
+ },
+ {
+ "name": "Anton Komarev",
+ "email": "a.komarev@cybercog.su"
+ },
+ {
+ "name": "Miguel Piedrafita",
+ "email": "soy@miguelpiedrafita.com"
+ },
+ {
+ "name": "atymic",
+ "email": "atymicq@gmail.com",
+ "homepage": "https://atymic.dev"
+ }
+ ],
+ "description": "Easily add new or override built-in providers in Laravel Socialite.",
+ "homepage": "https://socialiteproviders.com",
+ "keywords": [
+ "laravel",
+ "manager",
+ "oauth",
+ "providers",
+ "socialite"
+ ],
+ "support": {
+ "issues": "https://github.com/socialiteproviders/manager/issues",
+ "source": "https://github.com/socialiteproviders/manager"
+ },
+ "time": "2022-01-23T22:40:23+00:00"
+ },
+ {
+ "name": "spatie/laravel-permission",
+ "version": "5.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/laravel-permission.git",
+ "reference": "6a3ed627cee28a552b5176c172ae0abc5eb30925"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/6a3ed627cee28a552b5176c172ae0abc5eb30925",
+ "reference": "6a3ed627cee28a552b5176c172ae0abc5eb30925",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/auth": "^7.0|^8.0|^9.0",
+ "illuminate/container": "^7.0|^8.0|^9.0",
+ "illuminate/contracts": "^7.0|^8.0|^9.0",
+ "illuminate/database": "^7.0|^8.0|^9.0",
+ "php": "^7.3|^8.0|^8.1"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^5.0|^6.0|^7.0",
+ "phpunit/phpunit": "^9.4",
"predis/predis": "^1.1"
},
"type": "library",
@@ -4308,15 +5524,19 @@
"providers": [
"Spatie\\Permission\\PermissionServiceProvider"
]
+ },
+ "branch-alias": {
+ "dev-main": "5.x-dev",
+ "dev-master": "5.x-dev"
}
},
"autoload": {
- "psr-4": {
- "Spatie\\Permission\\": "src"
- },
"files": [
"src/helpers.php"
- ]
+ ],
+ "psr-4": {
+ "Spatie\\Permission\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4330,7 +5550,7 @@
"role": "Developer"
}
],
- "description": "Permission handling for Laravel 5.8 and up",
+ "description": "Permission handling for Laravel 6.0 and up",
"homepage": "https://github.com/spatie/laravel-permission",
"keywords": [
"acl",
@@ -4342,128 +5562,56 @@
"security",
"spatie"
],
+ "support": {
+ "issues": "https://github.com/spatie/laravel-permission/issues",
+ "source": "https://github.com/spatie/laravel-permission/tree/5.5.0"
+ },
"funding": [
{
- "url": "https://spatie.be/open-source/support-us",
- "type": "custom"
- }
- ],
- "time": "2020-08-18T17:14:06+00:00"
- },
- {
- "name": "swiftmailer/swiftmailer",
- "version": "v6.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/swiftmailer/swiftmailer.git",
- "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c",
- "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c",
- "shasum": ""
- },
- "require": {
- "egulias/email-validator": "^2.0|^3.1",
- "php": ">=7.0.0",
- "symfony/polyfill-iconv": "^1.0",
- "symfony/polyfill-intl-idn": "^1.10",
- "symfony/polyfill-mbstring": "^1.0"
- },
- "require-dev": {
- "mockery/mockery": "^1.0",
- "symfony/phpunit-bridge": "^4.4|^5.4"
- },
- "suggest": {
- "ext-intl": "Needed to support internationalized email addresses"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "6.2-dev"
- }
- },
- "autoload": {
- "files": [
- "lib/swift_required.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Chris Corbyn"
- },
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- }
- ],
- "description": "Swiftmailer, free feature-rich PHP mailer",
- "homepage": "https://swiftmailer.symfony.com",
- "keywords": [
- "email",
- "mail",
- "mailer"
- ],
- "funding": [
- {
- "url": "https://github.com/fabpot",
+ "url": "https://github.com/spatie",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer",
- "type": "tidelift"
}
],
- "abandoned": "symfony/mailer",
- "time": "2021-10-18T15:26:12+00:00"
+ "time": "2022-01-11T15:06:21+00:00"
},
{
"name": "symfony/console",
- "version": "v5.4.1",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4"
+ "reference": "22e8efd019c3270c4f79376234a3f8752cd25490"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4",
- "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4",
+ "url": "https://api.github.com/repos/symfony/console/zipball/22e8efd019c3270c4f79376234a3f8752cd25490",
+ "reference": "22e8efd019c3270c4f79376234a3f8752cd25490",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
+ "php": ">=8.0.2",
"symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.9",
- "symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.1|^2|^3",
- "symfony/string": "^5.1|^6.0"
+ "symfony/string": "^5.4|^6.0"
},
"conflict": {
- "psr/log": ">=3",
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
+ "symfony/dependency-injection": "<5.4",
+ "symfony/dotenv": "<5.4",
+ "symfony/event-dispatcher": "<5.4",
+ "symfony/lock": "<5.4",
+ "symfony/process": "<5.4"
},
"provide": {
- "psr/log-implementation": "1.0|2.0"
+ "psr/log-implementation": "1.0|2.0|3.0"
},
"require-dev": {
- "psr/log": "^1|^2",
- "symfony/config": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
- "symfony/lock": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^5.4|^6.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/event-dispatcher": "^5.4|^6.0",
+ "symfony/lock": "^5.4|^6.0",
+ "symfony/process": "^5.4|^6.0",
+ "symfony/var-dumper": "^5.4|^6.0"
},
"suggest": {
"psr/log": "For using the console logger",
@@ -4502,6 +5650,9 @@
"console",
"terminal"
],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -4516,25 +5667,24 @@
"type": "tidelift"
}
],
- "time": "2021-12-09T11:22:43+00:00"
+ "time": "2022-01-26T17:23:29+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v5.4.0",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc"
+ "reference": "1955d595c12c111629cc814d3f2a2ff13580508a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/44b933f98bb4b5220d10bed9ce5662f8c2d13dcc",
- "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/1955d595c12c111629cc814d3f2a2ff13580508a",
+ "reference": "1955d595c12c111629cc814d3f2a2ff13580508a",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.0.2"
},
"type": "library",
"autoload": {
@@ -4565,6 +5715,9 @@
],
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -4579,29 +5732,29 @@
"type": "tidelift"
}
],
- "time": "2021-09-09T08:06:01+00:00"
+ "time": "2022-01-02T09:55:41+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v2.5.0",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
+ "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
- "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced",
+ "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.0.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.5-dev"
+ "dev-main": "3.0-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -4629,6 +5782,9 @@
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -4643,31 +5799,31 @@
"type": "tidelift"
}
],
- "time": "2021-07-12T14:48:14+00:00"
+ "time": "2021-11-01T23:48:49+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v5.4.1",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9"
+ "reference": "20343b3bad7ebafa38138ddcb97290a24722b57b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/1e3cb3565af49cd5f93e5787500134500a29f0d9",
- "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/20343b3bad7ebafa38138ddcb97290a24722b57b",
+ "reference": "20343b3bad7ebafa38138ddcb97290a24722b57b",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.0.2",
"psr/log": "^1|^2|^3",
- "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ "symfony/var-dumper": "^5.4|^6.0"
},
"require-dev": {
"symfony/deprecation-contracts": "^2.1|^3",
- "symfony/http-kernel": "^4.4|^5.0|^6.0",
- "symfony/serializer": "^4.4|^5.0|^6.0"
+ "symfony/http-kernel": "^5.4|^6.0",
+ "symfony/serializer": "^5.4|^6.0"
},
"bin": [
"Resources/bin/patch-type-declarations"
@@ -4697,6 +5853,9 @@
],
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/error-handler/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -4711,44 +5870,42 @@
"type": "tidelift"
}
],
- "time": "2021-12-01T15:04:08+00:00"
+ "time": "2022-01-02T09:55:41+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v5.4.0",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb"
+ "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/27d39ae126352b9fa3be5e196ccf4617897be3eb",
- "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934",
+ "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/event-dispatcher-contracts": "^2|^3",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.0.2",
+ "symfony/event-dispatcher-contracts": "^2|^3"
},
"conflict": {
- "symfony/dependency-injection": "<4.4"
+ "symfony/dependency-injection": "<5.4"
},
"provide": {
"psr/event-dispatcher-implementation": "1.0",
- "symfony/event-dispatcher-implementation": "2.0"
+ "symfony/event-dispatcher-implementation": "2.0|3.0"
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/expression-language": "^4.4|^5.0|^6.0",
- "symfony/http-foundation": "^4.4|^5.0|^6.0",
+ "symfony/config": "^5.4|^6.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/error-handler": "^5.4|^6.0",
+ "symfony/expression-language": "^5.4|^6.0",
+ "symfony/http-foundation": "^5.4|^6.0",
"symfony/service-contracts": "^1.1|^2|^3",
- "symfony/stopwatch": "^4.4|^5.0|^6.0"
+ "symfony/stopwatch": "^5.4|^6.0"
},
"suggest": {
"symfony/dependency-injection": "",
@@ -4779,6 +5936,9 @@
],
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -4793,24 +5953,24 @@
"type": "tidelift"
}
],
- "time": "2021-11-23T10:19:22+00:00"
+ "time": "2022-01-02T09:55:41+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
- "version": "v2.5.0",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a"
+ "reference": "aa5422287b75594b90ee9cd807caf8f0df491385"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a",
- "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385",
+ "reference": "aa5422287b75594b90ee9cd807caf8f0df491385",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.0.2",
"psr/event-dispatcher": "^1"
},
"suggest": {
@@ -4819,7 +5979,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.5-dev"
+ "dev-main": "3.0-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -4855,6 +6015,9 @@
"interoperability",
"standards"
],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -4869,26 +6032,24 @@
"type": "tidelift"
}
],
- "time": "2021-07-12T14:48:14+00:00"
+ "time": "2021-07-15T12:33:35+00:00"
},
{
"name": "symfony/finder",
- "version": "v5.4.0",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590"
+ "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590",
- "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/8661b74dbabc23223f38c9b99d3f8ade71170430",
+ "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.0.2"
},
"type": "library",
"autoload": {
@@ -4915,6 +6076,9 @@
],
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -4929,33 +6093,194 @@
"type": "tidelift"
}
],
- "time": "2021-11-28T15:25:38+00:00"
+ "time": "2022-01-26T17:23:29+00:00"
},
{
- "name": "symfony/http-foundation",
- "version": "v5.4.1",
+ "name": "symfony/http-client",
+ "version": "v6.0.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/http-foundation.git",
- "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c"
+ "url": "https://github.com/symfony/http-client.git",
+ "reference": "45b95017f6a20d564584bdee6a376c9a79caa316"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5dad3780023a707f4c24beac7d57aead85c1ce3c",
- "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/45b95017f6a20d564584bdee6a376c9a79caa316",
+ "reference": "45b95017f6a20d564584bdee6a376c9a79caa316",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.0.2",
+ "psr/log": "^1|^2|^3",
+ "symfony/http-client-contracts": "^3",
+ "symfony/service-contracts": "^1.0|^2|^3"
+ },
+ "provide": {
+ "php-http/async-client-implementation": "*",
+ "php-http/client-implementation": "*",
+ "psr/http-client-implementation": "1.0",
+ "symfony/http-client-implementation": "3.0"
+ },
+ "require-dev": {
+ "amphp/amp": "^2.5",
+ "amphp/http-client": "^4.2.1",
+ "amphp/http-tunnel": "^1.0",
+ "amphp/socket": "^1.1",
+ "guzzlehttp/promises": "^1.4",
+ "nyholm/psr7": "^1.0",
+ "php-http/httplug": "^1.0|^2.0",
+ "psr/http-client": "^1.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/http-kernel": "^5.4|^6.0",
+ "symfony/process": "^5.4|^6.0",
+ "symfony/stopwatch": "^5.4|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpClient\\": ""
+ },
+ "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": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-client/tree/v6.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-22T06:58:00+00:00"
+ },
+ {
+ "name": "symfony/http-client-contracts",
+ "version": "v3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-client-contracts.git",
+ "reference": "265f03fed057044a8e4dc159aa33596d0f48ed3f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/265f03fed057044a8e4dc159aa33596d0f48ed3f",
+ "reference": "265f03fed057044a8e4dc159aa33596d0f48ed3f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.2"
+ },
+ "suggest": {
+ "symfony/http-client-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\HttpClient\\": ""
+ }
+ },
+ "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": "Generic abstractions related to HTTP clients",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/http-client-contracts/tree/v3.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-03T13:44:55+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v6.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "ad157299ced81a637fade1efcadd688d6deba5c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ad157299ced81a637fade1efcadd688d6deba5c1",
+ "reference": "ad157299ced81a637fade1efcadd688d6deba5c1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-mbstring": "~1.1",
- "symfony/polyfill-php80": "^1.16"
+ "symfony/polyfill-mbstring": "~1.1"
},
"require-dev": {
"predis/predis": "~1.0",
- "symfony/cache": "^4.4|^5.0|^6.0",
- "symfony/expression-language": "^4.4|^5.0|^6.0",
- "symfony/mime": "^4.4|^5.0|^6.0"
+ "symfony/cache": "^5.4|^6.0",
+ "symfony/expression-language": "^5.4|^6.0",
+ "symfony/mime": "^5.4|^6.0"
},
"suggest": {
"symfony/mime": "To use the file extension guesser"
@@ -4985,6 +6310,9 @@
],
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-foundation/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -4999,67 +6327,64 @@
"type": "tidelift"
}
],
- "time": "2021-12-09T12:46:57+00:00"
+ "time": "2022-01-02T09:55:41+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v5.4.1",
+ "version": "v6.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "2bdace75c9d6a6eec7e318801b7dc87a72375052"
+ "reference": "9dce179ce52b0f4f669c07fd5e465e5d809a5d3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2bdace75c9d6a6eec7e318801b7dc87a72375052",
- "reference": "2bdace75c9d6a6eec7e318801b7dc87a72375052",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9dce179ce52b0f4f669c07fd5e465e5d809a5d3b",
+ "reference": "9dce179ce52b0f4f669c07fd5e465e5d809a5d3b",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/log": "^1|^2",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/event-dispatcher": "^5.0|^6.0",
- "symfony/http-foundation": "^5.3.7|^6.0",
- "symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-php73": "^1.9",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.0.2",
+ "psr/log": "^1|^2|^3",
+ "symfony/error-handler": "^5.4|^6.0",
+ "symfony/event-dispatcher": "^5.4|^6.0",
+ "symfony/http-foundation": "^5.4|^6.0",
+ "symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"symfony/browser-kit": "<5.4",
- "symfony/cache": "<5.0",
- "symfony/config": "<5.0",
- "symfony/console": "<4.4",
- "symfony/dependency-injection": "<5.3",
- "symfony/doctrine-bridge": "<5.0",
- "symfony/form": "<5.0",
- "symfony/http-client": "<5.0",
- "symfony/mailer": "<5.0",
- "symfony/messenger": "<5.0",
- "symfony/translation": "<5.0",
- "symfony/twig-bridge": "<5.0",
- "symfony/validator": "<5.0",
+ "symfony/cache": "<5.4",
+ "symfony/config": "<5.4",
+ "symfony/console": "<5.4",
+ "symfony/dependency-injection": "<5.4",
+ "symfony/doctrine-bridge": "<5.4",
+ "symfony/form": "<5.4",
+ "symfony/http-client": "<5.4",
+ "symfony/mailer": "<5.4",
+ "symfony/messenger": "<5.4",
+ "symfony/translation": "<5.4",
+ "symfony/twig-bridge": "<5.4",
+ "symfony/validator": "<5.4",
"twig/twig": "<2.13"
},
"provide": {
- "psr/log-implementation": "1.0|2.0"
+ "psr/log-implementation": "1.0|2.0|3.0"
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
"symfony/browser-kit": "^5.4|^6.0",
- "symfony/config": "^5.0|^6.0",
- "symfony/console": "^4.4|^5.0|^6.0",
- "symfony/css-selector": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^5.3|^6.0",
- "symfony/dom-crawler": "^4.4|^5.0|^6.0",
- "symfony/expression-language": "^4.4|^5.0|^6.0",
- "symfony/finder": "^4.4|^5.0|^6.0",
+ "symfony/config": "^5.4|^6.0",
+ "symfony/console": "^5.4|^6.0",
+ "symfony/css-selector": "^5.4|^6.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/dom-crawler": "^5.4|^6.0",
+ "symfony/expression-language": "^5.4|^6.0",
+ "symfony/finder": "^5.4|^6.0",
"symfony/http-client-contracts": "^1.1|^2|^3",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/routing": "^4.4|^5.0|^6.0",
- "symfony/stopwatch": "^4.4|^5.0|^6.0",
- "symfony/translation": "^4.4|^5.0|^6.0",
+ "symfony/process": "^5.4|^6.0",
+ "symfony/routing": "^5.4|^6.0",
+ "symfony/stopwatch": "^5.4|^6.0",
+ "symfony/translation": "^5.4|^6.0",
"symfony/translation-contracts": "^1.1|^2|^3",
"twig/twig": "^2.13|^3.0.4"
},
@@ -5094,6 +6419,9 @@
],
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-kernel/tree/v6.0.4"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5108,39 +6436,114 @@
"type": "tidelift"
}
],
- "time": "2021-12-09T13:36:09+00:00"
+ "time": "2022-01-29T18:12:46+00:00"
},
{
- "name": "symfony/mime",
- "version": "v5.2.1",
+ "name": "symfony/mailer",
+ "version": "v6.0.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/mime.git",
- "reference": "de97005aef7426ba008c46ba840fc301df577ada"
+ "url": "https://github.com/symfony/mailer.git",
+ "reference": "d958befe7dbee9d2b2157ef6dfa9b103efa94f82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/de97005aef7426ba008c46ba840fc301df577ada",
- "reference": "de97005aef7426ba008c46ba840fc301df577ada",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/d958befe7dbee9d2b2157ef6dfa9b103efa94f82",
+ "reference": "d958befe7dbee9d2b2157ef6dfa9b103efa94f82",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-intl-idn": "^1.10",
- "symfony/polyfill-mbstring": "^1.0",
- "symfony/polyfill-php80": "^1.15"
+ "egulias/email-validator": "^2.1.10|^3",
+ "php": ">=8.0.2",
+ "psr/event-dispatcher": "^1",
+ "psr/log": "^1|^2|^3",
+ "symfony/event-dispatcher": "^5.4|^6.0",
+ "symfony/mime": "^5.4|^6.0",
+ "symfony/service-contracts": "^1.1|^2|^3"
},
"conflict": {
- "symfony/mailer": "<4.4"
+ "symfony/http-kernel": "<5.4"
},
"require-dev": {
- "egulias/email-validator": "^2.1.10",
+ "symfony/http-client-contracts": "^1.1|^2|^3",
+ "symfony/messenger": "^5.4|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mailer\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Helps sending emails",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/mailer/tree/v6.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:55:41+00:00"
+ },
+ {
+ "name": "symfony/mime",
+ "version": "v6.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mime.git",
+ "reference": "2cd9601efd040e56f43360daa68f3c6b0534923a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/2cd9601efd040e56f43360daa68f3c6b0534923a",
+ "reference": "2cd9601efd040e56f43360daa68f3c6b0534923a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.2",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "phpdocumentor/reflection-docblock": "<3.2.2",
+ "phpdocumentor/type-resolver": "<1.4.0",
+ "symfony/mailer": "<5.4"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1",
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/property-access": "^4.4|^5.1",
- "symfony/property-info": "^4.4|^5.1",
- "symfony/serializer": "^5.2"
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/property-access": "^5.4|^6.0",
+ "symfony/property-info": "^5.4|^6.0",
+ "symfony/serializer": "^5.4|^6.0"
},
"type": "library",
"autoload": {
@@ -5165,12 +6568,15 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "A library to manipulate MIME messages",
+ "description": "Allows manipulating MIME messages",
"homepage": "https://symfony.com",
"keywords": [
"mime",
"mime-type"
],
+ "support": {
+ "source": "https://github.com/symfony/mime/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5185,33 +6591,27 @@
"type": "tidelift"
}
],
- "time": "2020-12-09T18:54:12+00:00"
+ "time": "2022-01-02T09:55:41+00:00"
},
{
"name": "symfony/options-resolver",
- "version": "v5.1.5",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "9ff59517938f88d90b6e65311fef08faa640f681"
+ "reference": "51f7006670febe4cbcbae177cbffe93ff833250d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9ff59517938f88d90b6e65311fef08faa640f681",
- "reference": "9ff59517938f88d90b6e65311fef08faa640f681",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/51f7006670febe4cbcbae177cbffe93ff833250d",
+ "reference": "51f7006670febe4cbcbae177cbffe93ff833250d",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-php80": "^1.15"
+ "php": ">=8.0.2",
+ "symfony/deprecation-contracts": "^2.1|^3"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.1-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\OptionsResolver\\": ""
@@ -5234,13 +6634,16 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony OptionsResolver Component",
+ "description": "Provides an improved replacement for the array_replace PHP function",
"homepage": "https://symfony.com",
"keywords": [
"config",
"configuration",
"options"
],
+ "support": {
+ "source": "https://github.com/symfony/options-resolver/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5255,25 +6658,28 @@
"type": "tidelift"
}
],
- "time": "2020-07-12T12:58:00+00:00"
+ "time": "2022-01-02T09:55:41+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.23.0",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
+ "reference": "30885182c981ab175d4d034db0f6f469898070ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
- "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
+ "reference": "30885182c981ab175d4d034db0f6f469898070ab",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
+ "provide": {
+ "ext-ctype": "*"
+ },
"suggest": {
"ext-ctype": "For best performance"
},
@@ -5317,6 +6723,9 @@
"polyfill",
"portable"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5331,97 +6740,20 @@
"type": "tidelift"
}
],
- "time": "2021-02-19T12:13:01+00:00"
- },
- {
- "name": "symfony/polyfill-iconv",
- "version": "v1.23.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-iconv.git",
- "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933",
- "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-iconv": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Iconv\\": ""
- },
- "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 the Iconv extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "iconv",
- "polyfill",
- "portable",
- "shim"
- ],
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-05-27T09:27:20+00:00"
+ "time": "2021-10-20T20:35:02+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.23.1",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "16880ba9c5ebe3642d1995ab866db29270b36535"
+ "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535",
- "reference": "16880ba9c5ebe3642d1995ab866db29270b36535",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
+ "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
"shasum": ""
},
"require": {
@@ -5441,12 +6773,12 @@
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -5472,6 +6804,9 @@
"portable",
"shim"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5486,20 +6821,20 @@
"type": "tidelift"
}
],
- "time": "2021-05-27T12:26:48+00:00"
+ "time": "2021-11-23T21:10:46+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.23.0",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65"
+ "reference": "749045c69efb97c70d25d7463abba812e91f3a44"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65",
- "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
+ "reference": "749045c69efb97c70d25d7463abba812e91f3a44",
"shasum": ""
},
"require": {
@@ -5521,12 +6856,12 @@
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Idn\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -5556,6 +6891,9 @@
"portable",
"shim"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5570,11 +6908,11 @@
"type": "tidelift"
}
],
- "time": "2021-05-27T09:27:20+00:00"
+ "time": "2021-09-14T14:02:44+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.23.0",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -5603,12 +6941,12 @@
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
"files": [
"bootstrap.php"
],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
"classmap": [
"Resources/stubs"
]
@@ -5637,6 +6975,9 @@
"portable",
"shim"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5655,21 +6996,24 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.23.1",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
+ "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
- "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
+ "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
+ "provide": {
+ "ext-mbstring": "*"
+ },
"suggest": {
"ext-mbstring": "For best performance"
},
@@ -5684,12 +7028,12 @@
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -5714,6 +7058,9 @@
"portable",
"shim"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5728,11 +7075,11 @@
"type": "tidelift"
}
],
- "time": "2021-05-27T12:26:48+00:00"
+ "time": "2021-11-30T18:21:41+00:00"
},
{
"name": "symfony/polyfill-php72",
- "version": "v1.23.0",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
@@ -5758,12 +7105,12 @@
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -5787,6 +7134,9 @@
"portable",
"shim"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5803,94 +7153,18 @@
],
"time": "2021-05-27T09:17:38+00:00"
},
- {
- "name": "symfony/polyfill-php73",
- "version": "v1.23.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
- "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
- "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 backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-19T12:13:01+00:00"
- },
{
"name": "symfony/polyfill-php80",
- "version": "v1.23.1",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
+ "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
- "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
+ "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
"shasum": ""
},
"require": {
@@ -5907,12 +7181,12 @@
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
"files": [
"bootstrap.php"
],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
"classmap": [
"Resources/stubs"
]
@@ -5943,6 +7217,9 @@
"portable",
"shim"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -5957,20 +7234,20 @@
"type": "tidelift"
}
],
- "time": "2021-07-28T13:41:28+00:00"
+ "time": "2021-09-13T13:58:33+00:00"
},
{
"name": "symfony/polyfill-php81",
- "version": "v1.23.0",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "e66119f3de95efc359483f810c4c3e6436279436"
+ "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436",
- "reference": "e66119f3de95efc359483f810c4c3e6436279436",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
+ "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
"shasum": ""
},
"require": {
@@ -5987,12 +7264,12 @@
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
"files": [
"bootstrap.php"
],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php81\\": ""
+ },
"classmap": [
"Resources/stubs"
]
@@ -6002,6 +7279,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
@@ -6019,6 +7300,9 @@
"portable",
"shim"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6033,25 +7317,27 @@
"type": "tidelift"
}
],
- "time": "2021-05-21T13:25:03+00:00"
+ "time": "2021-09-13T13:58:11+00:00"
},
{
"name": "symfony/polyfill-uuid",
- "version": "v1.18.1",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
- "reference": "da48e2cccd323e48c16c26481bf5800f6ab1c49d"
+ "reference": "7529922412d23ac44413d0f308861d50cf68d3ee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/da48e2cccd323e48c16c26481bf5800f6ab1c49d",
- "reference": "da48e2cccd323e48c16c26481bf5800f6ab1c49d",
+ "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/7529922412d23ac44413d0f308861d50cf68d3ee",
+ "reference": "7529922412d23ac44413d0f308861d50cf68d3ee",
"shasum": ""
},
"require": {
- "paragonie/random_compat": "~1.0|~2.0|~9.99",
- "php": ">=5.3.3"
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-uuid": "*"
},
"suggest": {
"ext-uuid": "For best performance"
@@ -6059,7 +7345,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.18-dev"
+ "dev-main": "1.23-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -6067,12 +7353,12 @@
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Uuid\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Uuid\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -6096,6 +7382,9 @@
"portable",
"uuid"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.24.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6110,25 +7399,24 @@
"type": "tidelift"
}
],
- "time": "2020-07-14T12:35:20+00:00"
+ "time": "2021-10-20T20:35:02+00:00"
},
{
"name": "symfony/process",
- "version": "v5.4.0",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "5be20b3830f726e019162b26223110c8f47cf274"
+ "reference": "298ed357274c1868c20a0061df256a1250a6c4af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274",
- "reference": "5be20b3830f726e019162b26223110c8f47cf274",
+ "url": "https://api.github.com/repos/symfony/process/zipball/298ed357274c1868c20a0061df256a1250a6c4af",
+ "reference": "298ed357274c1868c20a0061df256a1250a6c4af",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.0.2"
},
"type": "library",
"autoload": {
@@ -6155,6 +7443,9 @@
],
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6169,41 +7460,127 @@
"type": "tidelift"
}
],
- "time": "2021-11-28T15:25:38+00:00"
+ "time": "2022-01-26T17:23:29+00:00"
},
{
- "name": "symfony/routing",
- "version": "v5.4.0",
+ "name": "symfony/psr-http-message-bridge",
+ "version": "v2.1.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/routing.git",
- "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1"
+ "url": "https://github.com/symfony/psr-http-message-bridge.git",
+ "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/9eeae93c32ca86746e5d38f3679e9569981038b1",
- "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1",
+ "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34",
+ "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=7.1",
+ "psr/http-message": "^1.0",
+ "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "nyholm/psr7": "^1.1",
+ "psr/log": "^1.1 || ^2 || ^3",
+ "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0",
+ "symfony/config": "^4.4 || ^5.0 || ^6.0",
+ "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0",
+ "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0",
+ "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0",
+ "symfony/phpunit-bridge": "^5.4@dev || ^6.0"
+ },
+ "suggest": {
+ "nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
+ },
+ "type": "symfony-bridge",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Bridge\\PsrHttpMessage\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "PSR HTTP message bridge",
+ "homepage": "http://symfony.com",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr-17",
+ "psr-7"
+ ],
+ "support": {
+ "issues": "https://github.com/symfony/psr-http-message-bridge/issues",
+ "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-11-05T13:13:39+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v6.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/routing.git",
+ "reference": "b1debdf7a40e6bc7eee0f363ab9dd667fe04f099"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/b1debdf7a40e6bc7eee0f363ab9dd667fe04f099",
+ "reference": "b1debdf7a40e6bc7eee0f363ab9dd667fe04f099",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.2"
},
"conflict": {
"doctrine/annotations": "<1.12",
- "symfony/config": "<5.3",
- "symfony/dependency-injection": "<4.4",
- "symfony/yaml": "<4.4"
+ "symfony/config": "<5.4",
+ "symfony/dependency-injection": "<5.4",
+ "symfony/yaml": "<5.4"
},
"require-dev": {
"doctrine/annotations": "^1.12",
"psr/log": "^1|^2|^3",
- "symfony/config": "^5.3|^6.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/expression-language": "^4.4|^5.0|^6.0",
- "symfony/http-foundation": "^4.4|^5.0|^6.0",
- "symfony/yaml": "^4.4|^5.0|^6.0"
+ "symfony/config": "^5.4|^6.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/expression-language": "^5.4|^6.0",
+ "symfony/http-foundation": "^5.4|^6.0",
+ "symfony/yaml": "^5.4|^6.0"
},
"suggest": {
"symfony/config": "For using the all-in-one router or any loader",
@@ -6242,6 +7619,9 @@
"uri",
"url"
],
+ "support": {
+ "source": "https://github.com/symfony/routing/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6256,26 +7636,25 @@
"type": "tidelift"
}
],
- "time": "2021-11-23T10:19:22+00:00"
+ "time": "2022-01-02T09:55:41+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v2.5.0",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
+ "reference": "36715ebf9fb9db73db0cb24263c79077c6fe8603"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
- "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/36715ebf9fb9db73db0cb24263c79077c6fe8603",
+ "reference": "36715ebf9fb9db73db0cb24263c79077c6fe8603",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1",
- "symfony/deprecation-contracts": "^2.1"
+ "php": ">=8.0.2",
+ "psr/container": "^2.0"
},
"conflict": {
"ext-psr": "<1.1|>=2"
@@ -6286,7 +7665,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.5-dev"
+ "dev-main": "3.0-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -6322,6 +7701,9 @@
"interoperability",
"standards"
],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v3.0.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6336,38 +7718,37 @@
"type": "tidelift"
}
],
- "time": "2021-11-04T16:48:04+00:00"
+ "time": "2021-11-04T17:53:12+00:00"
},
{
"name": "symfony/string",
- "version": "v5.4.0",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d"
+ "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d",
- "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d",
+ "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2",
+ "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.0.2",
"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"
+ "symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
- "symfony/translation-contracts": ">=3.0"
+ "symfony/translation-contracts": "<2.0"
},
"require-dev": {
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/http-client": "^4.4|^5.0|^6.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0|^6.0"
+ "symfony/error-handler": "^5.4|^6.0",
+ "symfony/http-client": "^5.4|^6.0",
+ "symfony/translation-contracts": "^2.0|^3.0",
+ "symfony/var-exporter": "^5.4|^6.0"
},
"type": "library",
"autoload": {
@@ -6405,6 +7786,9 @@
"utf-8",
"utf8"
],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6419,52 +7803,50 @@
"type": "tidelift"
}
],
- "time": "2021-11-24T10:02:00+00:00"
+ "time": "2022-01-02T09:55:41+00:00"
},
{
"name": "symfony/translation",
- "version": "v5.4.1",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "8c82cd35ed861236138d5ae1c78c0c7ebcd62107"
+ "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/8c82cd35ed861236138d5ae1c78c0c7ebcd62107",
- "reference": "8c82cd35ed861236138d5ae1c78c0c7ebcd62107",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d",
+ "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
+ "php": ">=8.0.2",
"symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.16",
- "symfony/translation-contracts": "^2.3"
+ "symfony/translation-contracts": "^2.3|^3.0"
},
"conflict": {
- "symfony/config": "<4.4",
- "symfony/console": "<5.3",
- "symfony/dependency-injection": "<5.0",
- "symfony/http-kernel": "<5.0",
- "symfony/twig-bundle": "<5.0",
- "symfony/yaml": "<4.4"
+ "symfony/config": "<5.4",
+ "symfony/console": "<5.4",
+ "symfony/dependency-injection": "<5.4",
+ "symfony/http-kernel": "<5.4",
+ "symfony/twig-bundle": "<5.4",
+ "symfony/yaml": "<5.4"
},
"provide": {
- "symfony/translation-implementation": "2.3"
+ "symfony/translation-implementation": "2.3|3.0"
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/config": "^5.4|^6.0",
"symfony/console": "^5.4|^6.0",
- "symfony/dependency-injection": "^5.0|^6.0",
- "symfony/finder": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^5.4|^6.0",
+ "symfony/finder": "^5.4|^6.0",
"symfony/http-client-contracts": "^1.1|^2.0|^3.0",
- "symfony/http-kernel": "^5.0|^6.0",
- "symfony/intl": "^4.4|^5.0|^6.0",
+ "symfony/http-kernel": "^5.4|^6.0",
+ "symfony/intl": "^5.4|^6.0",
"symfony/polyfill-intl-icu": "^1.21",
"symfony/service-contracts": "^1.1.2|^2|^3",
- "symfony/yaml": "^4.4|^5.0|^6.0"
+ "symfony/yaml": "^5.4|^6.0"
},
"suggest": {
"psr/log-implementation": "To use logging capability in translator",
@@ -6499,6 +7881,9 @@
],
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/translation/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6513,24 +7898,24 @@
"type": "tidelift"
}
],
- "time": "2021-12-05T20:33:52+00:00"
+ "time": "2022-01-07T00:29:03+00:00"
},
{
"name": "symfony/translation-contracts",
- "version": "v2.5.0",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e"
+ "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e",
- "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77",
+ "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77",
"shasum": ""
},
"require": {
- "php": ">=7.2.5"
+ "php": ">=8.0.2"
},
"suggest": {
"symfony/translation-implementation": ""
@@ -6538,7 +7923,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.5-dev"
+ "dev-main": "3.0-dev"
},
"thanks": {
"name": "symfony/contracts",
@@ -6574,6 +7959,9 @@
"interoperability",
"standards"
],
+ "support": {
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6588,36 +7976,35 @@
"type": "tidelift"
}
],
- "time": "2021-08-17T14:20:01+00:00"
+ "time": "2021-09-07T12:43:40+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v5.4.1",
+ "version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc"
+ "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2366ac8d8abe0c077844613c1a4f0c0a9f522dcc",
- "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7b701676fc64f9ef11f9b4870f16b48f66be4834",
+ "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.0.2",
+ "symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
"phpunit/phpunit": "<5.4.3",
- "symfony/console": "<4.4"
+ "symfony/console": "<5.4"
},
"require-dev": {
"ext-iconv": "*",
- "symfony/console": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/uid": "^5.1|^6.0",
+ "symfony/console": "^5.4|^6.0",
+ "symfony/process": "^5.4|^6.0",
+ "symfony/uid": "^5.4|^6.0",
"twig/twig": "^2.13|^3.0.4"
},
"suggest": {
@@ -6660,6 +8047,9 @@
"debug",
"dump"
],
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v6.0.3"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -6674,7 +8064,56 @@
"type": "tidelift"
}
],
- "time": "2021-12-01T15:04:08+00:00"
+ "time": "2022-01-17T16:30:44+00:00"
+ },
+ {
+ "name": "textalk/websocket",
+ "version": "1.5.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Textalk/websocket-php.git",
+ "reference": "846542f82658132cd36acb7a7e8ce0f03960c295"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/846542f82658132cd36acb7a7e8ce0f03960c295",
+ "reference": "846542f82658132cd36acb7a7e8ce0f03960c295",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 | ^8.0",
+ "psr/log": "^1 | ^2 | ^3"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.0",
+ "phpunit/phpunit": "^8.0|^9.0",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "WebSocket\\": "lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "ISC"
+ ],
+ "authors": [
+ {
+ "name": "Fredrik Liljegren"
+ },
+ {
+ "name": "Sören Jensen",
+ "email": "soren@abicart.se"
+ }
+ ],
+ "description": "WebSocket client and server",
+ "support": {
+ "issues": "https://github.com/Textalk/websocket-php/issues",
+ "source": "https://github.com/Textalk/websocket-php/tree/1.5.5"
+ },
+ "time": "2021-08-07T10:21:40+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -6723,41 +8162,47 @@
],
"description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+ "support": {
+ "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4"
+ },
"time": "2021-12-08T09:12:39+00:00"
},
{
"name": "vlucas/phpdotenv",
- "version": "v4.2.2",
+ "version": "v5.4.1",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "77e974614d2ead521f18069dccc571696f52b8dc"
+ "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/77e974614d2ead521f18069dccc571696f52b8dc",
- "reference": "77e974614d2ead521f18069dccc571696f52b8dc",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f",
+ "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f",
"shasum": ""
},
"require": {
- "php": "^5.5.9 || ^7.0 || ^8.0",
- "phpoption/phpoption": "^1.7.3",
- "symfony/polyfill-ctype": "^1.17"
+ "ext-pcre": "*",
+ "graham-campbell/result-type": "^1.0.2",
+ "php": "^7.1.3 || ^8.0",
+ "phpoption/phpoption": "^1.8",
+ "symfony/polyfill-ctype": "^1.23",
+ "symfony/polyfill-mbstring": "^1.23.1",
+ "symfony/polyfill-php80": "^1.23.1"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.4.1",
"ext-filter": "*",
- "ext-pcre": "*",
- "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21"
+ "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10"
},
"suggest": {
- "ext-filter": "Required to use the boolean validator.",
- "ext-pcre": "Required to use most of the library."
+ "ext-filter": "Required to use the boolean validator."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.2-dev"
+ "dev-master": "5.4-dev"
}
},
"autoload": {
@@ -6787,6 +8232,10 @@
"env",
"environment"
],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1"
+ },
"funding": [
{
"url": "https://github.com/GrahamCampbell",
@@ -6797,20 +8246,20 @@
"type": "tidelift"
}
],
- "time": "2021-12-12T23:07:53+00:00"
+ "time": "2021-12-12T23:22:04+00:00"
},
{
"name": "voku/portable-ascii",
- "version": "1.5.6",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/voku/portable-ascii.git",
- "reference": "80953678b19901e5165c56752d087fc11526017c"
+ "reference": "9bd89e83cecdf8c37b64909454249eaed98b2c89"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c",
- "reference": "80953678b19901e5165c56752d087fc11526017c",
+ "url": "https://api.github.com/repos/voku/portable-ascii/zipball/9bd89e83cecdf8c37b64909454249eaed98b2c89",
+ "reference": "9bd89e83cecdf8c37b64909454249eaed98b2c89",
"shasum": ""
},
"require": {
@@ -6845,6 +8294,10 @@
"clean",
"php"
],
+ "support": {
+ "issues": "https://github.com/voku/portable-ascii/issues",
+ "source": "https://github.com/voku/portable-ascii/tree/2.0.0"
+ },
"funding": [
{
"url": "https://www.paypal.me/moelleken",
@@ -6867,58 +8320,118 @@
"type": "tidelift"
}
],
- "time": "2020-11-12T00:07:28+00:00"
+ "time": "2022-01-24T18:59:03+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.13"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.10.0"
+ },
+ "time": "2021-03-09T10:59:23+00:00"
}
],
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
- "version": "v3.4.2",
+ "version": "v3.6.7",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac"
+ "reference": "b96f9820aaf1ff9afe945207883149e1c7afb298"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/91ee8b3acf0d72a4937f4855bd245acbda9910ac",
- "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/b96f9820aaf1ff9afe945207883149e1c7afb298",
+ "reference": "b96f9820aaf1ff9afe945207883149e1c7afb298",
"shasum": ""
},
"require": {
- "illuminate/routing": "^5.5|^6|^7",
- "illuminate/session": "^5.5|^6|^7",
- "illuminate/support": "^5.5|^6|^7",
- "maximebf/debugbar": "^1.16.3",
- "php": ">=7.0",
- "symfony/debug": "^3|^4|^5",
- "symfony/finder": "^3|^4|^5"
+ "illuminate/routing": "^6|^7|^8|^9",
+ "illuminate/session": "^6|^7|^8|^9",
+ "illuminate/support": "^6|^7|^8|^9",
+ "maximebf/debugbar": "^1.17.2",
+ "php": ">=7.2",
+ "symfony/debug": "^4.3|^5|^6",
+ "symfony/finder": "^4.3|^5|^6"
},
"require-dev": {
- "orchestra/testbench": "^3.5|^4.0|^5.0",
- "phpunit/phpunit": "^6.0|^7.0|^8.5|^9.0"
+ "mockery/mockery": "^1.3.3",
+ "orchestra/testbench-dusk": "^4|^5|^6|^7",
+ "phpunit/phpunit": "^8.5|^9.0",
+ "squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.2-dev"
+ "dev-master": "3.6-dev"
},
"laravel": {
"providers": [
"Barryvdh\\Debugbar\\ServiceProvider"
],
"aliases": {
- "Debugbar": "Barryvdh\\Debugbar\\Facade"
+ "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar"
}
}
},
"autoload": {
- "psr-4": {
- "Barryvdh\\Debugbar\\": "src/"
- },
"files": [
"src/helpers.php"
- ]
+ ],
+ "psr-4": {
+ "Barryvdh\\Debugbar\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -6938,46 +8451,49 @@
"profiler",
"webprofiler"
],
+ "support": {
+ "issues": "https://github.com/barryvdh/laravel-debugbar/issues",
+ "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.6.7"
+ },
"funding": [
+ {
+ "url": "https://fruitcake.nl",
+ "type": "custom"
+ },
{
"url": "https://github.com/barryvdh",
"type": "github"
}
],
- "time": "2020-08-30T07:08:17+00:00"
+ "time": "2022-02-09T07:52:32+00:00"
},
{
"name": "doctrine/instantiator",
- "version": "1.3.1",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
- "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
+ "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
- "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
+ "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^6.0",
+ "doctrine/coding-standard": "^8.0",
"ext-pdo": "*",
"ext-phar": "*",
- "phpbench/phpbench": "^0.13",
- "phpstan/phpstan-phpunit": "^0.11",
- "phpstan/phpstan-shim": "^0.11",
- "phpunit/phpunit": "^7.0"
+ "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
"autoload": {
"psr-4": {
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
@@ -6991,7 +8507,7 @@
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
- "homepage": "http://ocramius.github.com/"
+ "homepage": "https://ocramius.github.io/"
}
],
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
@@ -7000,6 +8516,10 @@
"constructor",
"instantiate"
],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
+ },
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
@@ -7014,140 +8534,7 @@
"type": "tidelift"
}
],
- "time": "2020-05-29T17:27:14+00:00"
- },
- {
- "name": "facade/flare-client-php",
- "version": "1.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/facade/flare-client-php.git",
- "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/facade/flare-client-php/zipball/b2adf1512755637d0cef4f7d1b54301325ac78ed",
- "reference": "b2adf1512755637d0cef4f7d1b54301325ac78ed",
- "shasum": ""
- },
- "require": {
- "facade/ignition-contracts": "~1.0",
- "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0",
- "php": "^7.1|^8.0",
- "symfony/http-foundation": "^3.3|^4.1|^5.0",
- "symfony/mime": "^3.4|^4.0|^5.1",
- "symfony/var-dumper": "^3.4|^4.0|^5.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.14",
- "phpunit/phpunit": "^7.5.16",
- "spatie/phpunit-snapshot-assertions": "^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Facade\\FlareClient\\": "src"
- },
- "files": [
- "src/helpers.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Send PHP errors to Flare",
- "homepage": "https://github.com/facade/flare-client-php",
- "keywords": [
- "exception",
- "facade",
- "flare",
- "reporting"
- ],
- "funding": [
- {
- "url": "https://github.com/spatie",
- "type": "github"
- }
- ],
- "time": "2021-09-13T12:16:46+00:00"
- },
- {
- "name": "facade/ignition",
- "version": "2.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/facade/ignition.git",
- "reference": "2179568bdfddfa56c90c845a0be1a0b52adbf52a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/facade/ignition/zipball/2179568bdfddfa56c90c845a0be1a0b52adbf52a",
- "reference": "2179568bdfddfa56c90c845a0be1a0b52adbf52a",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-mbstring": "*",
- "facade/flare-client-php": "^1.0",
- "facade/ignition-contracts": "^1.0",
- "filp/whoops": "^2.4",
- "illuminate/support": "^7.0|^8.0",
- "monolog/monolog": "^2.0",
- "php": "^7.2.5",
- "scrivo/highlight.php": "^9.15",
- "symfony/console": "^5.0",
- "symfony/var-dumper": "^5.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.14",
- "mockery/mockery": "^1.3",
- "orchestra/testbench": "^5.0|^6.0",
- "psalm/plugin-laravel": "^1.2"
- },
- "suggest": {
- "laravel/telescope": "^3.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- },
- "laravel": {
- "providers": [
- "Facade\\Ignition\\IgnitionServiceProvider"
- ],
- "aliases": {
- "Flare": "Facade\\Ignition\\Facades\\Flare"
- }
- }
- },
- "autoload": {
- "psr-4": {
- "Facade\\Ignition\\": "src"
- },
- "files": [
- "src/helpers.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A beautiful error page for Laravel applications.",
- "homepage": "https://github.com/facade/ignition",
- "keywords": [
- "error",
- "flare",
- "laravel",
- "page"
- ],
- "time": "2021-03-08T13:56:01+00:00"
+ "time": "2020-11-10T18:47:58+00:00"
},
{
"name": "facade/ignition-contracts",
@@ -7196,20 +8583,91 @@
"flare",
"ignition"
],
+ "support": {
+ "issues": "https://github.com/facade/ignition-contracts/issues",
+ "source": "https://github.com/facade/ignition-contracts/tree/1.0.2"
+ },
"time": "2020-10-16T08:27:54+00:00"
},
{
- "name": "filp/whoops",
- "version": "2.14.4",
+ "name": "fakerphp/faker",
+ "version": "v1.19.0",
"source": {
"type": "git",
- "url": "https://github.com/filp/whoops.git",
- "reference": "f056f1fe935d9ed86e698905a957334029899895"
+ "url": "https://github.com/FakerPHP/Faker.git",
+ "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/f056f1fe935d9ed86e698905a957334029899895",
- "reference": "f056f1fe935d9ed86e698905a957334029899895",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75",
+ "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "conflict": {
+ "fzaninotto/faker": "*"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "doctrine/persistence": "^1.3 || ^2.0",
+ "ext-intl": "*",
+ "symfony/phpunit-bridge": "^4.4 || ^5.2"
+ },
+ "suggest": {
+ "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+ "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+ "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+ "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+ "ext-mbstring": "Required for multibyte Unicode string functionality."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "v1.19-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "support": {
+ "issues": "https://github.com/FakerPHP/Faker/issues",
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0"
+ },
+ "time": "2022-02-02T17:38:57+00:00"
+ },
+ {
+ "name": "filp/whoops",
+ "version": "2.14.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filp/whoops.git",
+ "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+ "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
"shasum": ""
},
"require": {
@@ -7257,64 +8715,17 @@
"throwable",
"whoops"
],
+ "support": {
+ "issues": "https://github.com/filp/whoops/issues",
+ "source": "https://github.com/filp/whoops/tree/2.14.5"
+ },
"funding": [
{
"url": "https://github.com/denis-sokolov",
"type": "github"
}
],
- "time": "2021-10-03T12:00:00+00:00"
- },
- {
- "name": "fzaninotto/faker",
- "version": "v1.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/fzaninotto/Faker.git",
- "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f",
- "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.3 || ^7.0"
- },
- "require-dev": {
- "ext-intl": "*",
- "phpunit/phpunit": "^4.8.35 || ^5.7",
- "squizlabs/php_codesniffer": "^2.9.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.9-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Faker\\": "src/Faker/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "François Zaninotto"
- }
- ],
- "description": "Faker is a PHP library that generates fake data for you.",
- "keywords": [
- "data",
- "faker",
- "fixtures"
- ],
- "abandoned": true,
- "time": "2019-12-12T13:22:17+00:00"
+ "time": "2022-01-07T12:00:00+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -7361,29 +8772,34 @@
"keywords": [
"test"
],
+ "support": {
+ "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+ },
"time": "2020-07-09T08:09:16+00:00"
},
{
"name": "maximebf/debugbar",
- "version": "v1.16.3",
+ "version": "v1.18.0",
"source": {
"type": "git",
"url": "https://github.com/maximebf/php-debugbar.git",
- "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372"
+ "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/1a1605b8e9bacb34cc0c6278206d699772e1d372",
- "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372",
+ "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6",
+ "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6",
"shasum": ""
},
"require": {
- "php": "^7.1",
- "psr/log": "^1.0",
- "symfony/var-dumper": "^2.6|^3|^4|^5"
+ "php": "^7.1|^8",
+ "psr/log": "^1|^2|^3",
+ "symfony/var-dumper": "^2.6|^3|^4|^5|^6"
},
"require-dev": {
- "phpunit/phpunit": "^5"
+ "phpunit/phpunit": "^7.5.20 || ^9.4.2",
+ "twig/twig": "^1.38|^2.7|^3.0"
},
"suggest": {
"kriswallsmith/assetic": "The best way to manage assets",
@@ -7393,7 +8809,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.16-dev"
+ "dev-master": "1.17-dev"
}
},
"autoload": {
@@ -7422,20 +8838,24 @@
"debug",
"debugbar"
],
- "time": "2020-05-06T07:06:27+00:00"
+ "support": {
+ "issues": "https://github.com/maximebf/php-debugbar/issues",
+ "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.0"
+ },
+ "time": "2021-12-27T18:49:48+00:00"
},
{
"name": "mockery/mockery",
- "version": "1.4.2",
+ "version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
- "reference": "20cab678faed06fac225193be281ea0fddb43b93"
+ "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93",
- "reference": "20cab678faed06fac225193be281ea0fddb43b93",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
+ "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac",
"shasum": ""
},
"require": {
@@ -7490,20 +8910,24 @@
"test double",
"testing"
],
- "time": "2020-08-11T18:10:13+00:00"
+ "support": {
+ "issues": "https://github.com/mockery/mockery/issues",
+ "source": "https://github.com/mockery/mockery/tree/1.5.0"
+ },
+ "time": "2022-01-20T13:18:17+00:00"
},
{
"name": "myclabs/deep-copy",
- "version": "1.10.1",
+ "version": "1.10.2",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
+ "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
- "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
+ "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
"shasum": ""
},
"require": {
@@ -7519,12 +8943,12 @@
},
"type": "library",
"autoload": {
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- },
"files": [
"src/DeepCopy/deep_copy.php"
- ]
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -7538,48 +8962,51 @@
"object",
"object graph"
],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
+ },
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
"type": "tidelift"
}
],
- "time": "2020-06-29T13:22:24+00:00"
+ "time": "2020-11-13T09:40:50+00:00"
},
{
"name": "nunomaduro/collision",
- "version": "v4.2.0",
+ "version": "v6.1.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "d50490417eded97be300a92cd7df7badc37a9018"
+ "reference": "df09e21a5e5d5a7d51a8b9ecd44d3dd150d97fec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/d50490417eded97be300a92cd7df7badc37a9018",
- "reference": "d50490417eded97be300a92cd7df7badc37a9018",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/df09e21a5e5d5a7d51a8b9ecd44d3dd150d97fec",
+ "reference": "df09e21a5e5d5a7d51a8b9ecd44d3dd150d97fec",
"shasum": ""
},
"require": {
- "facade/ignition-contracts": "^1.0",
- "filp/whoops": "^2.4",
- "php": "^7.2.5",
- "symfony/console": "^5.0"
+ "facade/ignition-contracts": "^1.0.2",
+ "filp/whoops": "^2.14.5",
+ "php": "^8.0.0",
+ "symfony/console": "^6.0.2"
},
"require-dev": {
- "facade/ignition": "^2.0",
- "fideloper/proxy": "^4.2",
- "friendsofphp/php-cs-fixer": "^2.16",
- "fruitcake/laravel-cors": "^1.0",
- "laravel/framework": "^7.0",
- "laravel/tinker": "^2.0",
- "nunomaduro/larastan": "^0.5",
- "orchestra/testbench": "^5.0",
- "phpstan/phpstan": "^0.12.3",
- "phpunit/phpunit": "^8.5.1 || ^9.0"
+ "brianium/paratest": "^6.4.1",
+ "laravel/framework": "^9.0",
+ "nunomaduro/larastan": "^1.0.2",
+ "nunomaduro/mock-final-classes": "^1.1.0",
+ "orchestra/testbench": "^7.0.0",
+ "phpunit/phpunit": "^9.5.11"
},
"type": "library",
"extra": {
+ "branch-alias": {
+ "dev-develop": "6.x-dev"
+ },
"laravel": {
"providers": [
"NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
@@ -7614,9 +9041,13 @@
"php",
"symfony"
],
+ "support": {
+ "issues": "https://github.com/nunomaduro/collision/issues",
+ "source": "https://github.com/nunomaduro/collision"
+ },
"funding": [
{
- "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L",
+ "url": "https://www.paypal.com/paypalme/enunomaduro",
"type": "custom"
},
{
@@ -7628,32 +9059,33 @@
"type": "patreon"
}
],
- "time": "2020-04-04T19:56:08+00:00"
+ "time": "2022-01-18T17:49:08+00:00"
},
{
"name": "phar-io/manifest",
- "version": "1.0.3",
+ "version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
- "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
- "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
+ "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-phar": "*",
- "phar-io/version": "^2.0",
- "php": "^5.6 || ^7.0"
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
@@ -7683,24 +9115,28 @@
}
],
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "time": "2018-07-08T19:23:20+00:00"
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ },
+ "time": "2021-07-20T11:28:43+00:00"
},
{
"name": "phar-io/version",
- "version": "2.0.1",
+ "version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/phar-io/version.git",
- "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
- "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
"shasum": ""
},
"require": {
- "php": "^5.6 || ^7.0"
+ "php": "^7.2 || ^8.0"
},
"type": "library",
"autoload": {
@@ -7730,7 +9166,11 @@
}
],
"description": "Library for handling version information and constraints",
- "time": "2018-07-08T19:19:57+00:00"
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@@ -7779,20 +9219,24 @@
"reflection",
"static analysis"
],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+ },
"time": "2020-06-27T09:03:43+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.2.1",
+ "version": "5.3.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44"
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d870572532cd70bc3fab58f2e23ad423c8404c44",
- "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
+ "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
"shasum": ""
},
"require": {
@@ -7803,7 +9247,8 @@
"webmozart/assert": "^1.9.1"
},
"require-dev": {
- "mockery/mockery": "~1.3.2"
+ "mockery/mockery": "~1.3.2",
+ "psalm/phar": "^4.8"
},
"type": "library",
"extra": {
@@ -7831,20 +9276,24 @@
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "time": "2020-08-15T11:14:08+00:00"
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+ },
+ "time": "2021-10-19T17:43:47+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.3.0",
+ "version": "1.6.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "e878a14a65245fbe78f8080eba03b47c3b705651"
+ "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651",
- "reference": "e878a14a65245fbe78f8080eba03b47c3b705651",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
+ "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
"shasum": ""
},
"require": {
@@ -7852,7 +9301,8 @@
"phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
- "ext-tokenizer": "*"
+ "ext-tokenizer": "*",
+ "psalm/phar": "^4.8"
},
"type": "library",
"extra": {
@@ -7876,37 +9326,41 @@
}
],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "time": "2020-06-27T10:12:23+00:00"
+ "support": {
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
+ },
+ "time": "2022-01-04T19:58:01+00:00"
},
{
"name": "phpspec/prophecy",
- "version": "1.11.1",
+ "version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160"
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160",
- "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.2",
- "php": "^7.2",
- "phpdocumentor/reflection-docblock": "^5.0",
+ "php": "^7.2 || ~8.0, <8.2",
+ "phpdocumentor/reflection-docblock": "^5.2",
"sebastian/comparator": "^3.0 || ^4.0",
"sebastian/recursion-context": "^3.0 || ^4.0"
},
"require-dev": {
- "phpspec/phpspec": "^6.0",
- "phpunit/phpunit": "^8.0"
+ "phpspec/phpspec": "^6.0 || ^7.0",
+ "phpunit/phpunit": "^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.11.x-dev"
+ "dev-master": "1.x-dev"
}
},
"autoload": {
@@ -7939,44 +9393,52 @@
"spy",
"stub"
],
- "time": "2020-07-08T12:44:21+00:00"
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
+ },
+ "time": "2021-12-08T12:19:24+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "7.0.10",
+ "version": "9.2.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf"
+ "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf",
- "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/665a1ac0a763c51afc30d6d130dac0813092b17f",
+ "reference": "665a1ac0a763c51afc30d6d130dac0813092b17f",
"shasum": ""
},
"require": {
"ext-dom": "*",
+ "ext-libxml": "*",
"ext-xmlwriter": "*",
- "php": "^7.2",
- "phpunit/php-file-iterator": "^2.0.2",
- "phpunit/php-text-template": "^1.2.1",
- "phpunit/php-token-stream": "^3.1.1",
- "sebastian/code-unit-reverse-lookup": "^1.0.1",
- "sebastian/environment": "^4.2.2",
- "sebastian/version": "^2.0.1",
- "theseer/tokenizer": "^1.1.3"
+ "nikic/php-parser": "^4.13.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
},
"require-dev": {
- "phpunit/phpunit": "^8.2.2"
+ "phpunit/phpunit": "^9.3"
},
"suggest": {
- "ext-xdebug": "^2.7.2"
+ "ext-pcov": "*",
+ "ext-xdebug": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "7.0-dev"
+ "dev-master": "9.2-dev"
}
},
"autoload": {
@@ -8002,32 +9464,42 @@
"testing",
"xunit"
],
- "time": "2019-11-20T13:55:58+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.11"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-18T12:46:09+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "2.0.2",
+ "version": "3.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "050bedf145a257b1ff02746c31894800e5122946"
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
- "reference": "050bedf145a257b1ff02746c31894800e5122946",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^7.1"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
@@ -8052,26 +9524,107 @@
"filesystem",
"iterator"
],
- "time": "2018-09-13T20:33:42+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:48:52+00:00"
},
{
- "name": "phpunit/php-text-template",
- "version": "1.2.1",
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
"autoload": {
"classmap": [
"src/"
@@ -8093,32 +9646,42 @@
"keywords": [
"template"
],
- "time": "2015-06-21T13:50:34+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "2.1.2",
+ "version": "5.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "1038454804406b0b5f5f520358e78c1c2f71501e"
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e",
- "reference": "1038454804406b0b5f5f520358e78c1c2f71501e",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^7.0"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.1-dev"
+ "dev-master": "5.0-dev"
}
},
"autoload": {
@@ -8142,106 +9705,69 @@
"keywords": [
"timer"
],
- "time": "2019-06-07T04:22:29+00:00"
- },
- {
- "name": "phpunit/php-token-stream",
- "version": "3.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff",
- "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": "^7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
+ "funding": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
}
],
- "description": "Wrapper around PHP's tokenizer extension.",
- "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
- "keywords": [
- "tokenizer"
- ],
- "abandoned": true,
- "time": "2019-09-17T06:23:10+00:00"
+ "time": "2020-10-26T13:16:10+00:00"
},
{
"name": "phpunit/phpunit",
- "version": "8.5.8",
+ "version": "9.5.14",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997"
+ "reference": "1883687169c017d6ae37c58883ca3994cfc34189"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34c18baa6a44f1d1fbf0338907139e9dce95b997",
- "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1883687169c017d6ae37c58883ca3994cfc34189",
+ "reference": "1883687169c017d6ae37c58883ca3994cfc34189",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.2.0",
+ "doctrine/instantiator": "^1.3.1",
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.9.1",
- "phar-io/manifest": "^1.0.3",
- "phar-io/version": "^2.0.1",
- "php": "^7.2",
- "phpspec/prophecy": "^1.8.1",
- "phpunit/php-code-coverage": "^7.0.7",
- "phpunit/php-file-iterator": "^2.0.2",
- "phpunit/php-text-template": "^1.2.1",
- "phpunit/php-timer": "^2.1.2",
- "sebastian/comparator": "^3.0.2",
- "sebastian/diff": "^3.0.2",
- "sebastian/environment": "^4.2.2",
- "sebastian/exporter": "^3.1.1",
- "sebastian/global-state": "^3.0.0",
- "sebastian/object-enumerator": "^3.0.3",
- "sebastian/resource-operations": "^2.0.1",
- "sebastian/type": "^1.1.3",
- "sebastian/version": "^2.0.1"
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpspec/prophecy": "^1.12.1",
+ "phpunit/php-code-coverage": "^9.2.7",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.5",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.3",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^2.3.4",
+ "sebastian/version": "^3.0.2"
},
"require-dev": {
- "ext-pdo": "*"
+ "ext-pdo": "*",
+ "phpspec/prophecy-phpunit": "^2.0.1"
},
"suggest": {
"ext-soap": "*",
- "ext-xdebug": "*",
- "phpunit/php-invoker": "^2.0.0"
+ "ext-xdebug": "*"
},
"bin": [
"phpunit"
@@ -8249,10 +9775,13 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "8.5-dev"
+ "dev-master": "9.5-dev"
}
},
"autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
"classmap": [
"src/"
]
@@ -8275,9 +9804,13 @@
"testing",
"xunit"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.14"
+ },
"funding": [
{
- "url": "https://phpunit.de/donate.html",
+ "url": "https://phpunit.de/sponsors.html",
"type": "custom"
},
{
@@ -8285,43 +9818,37 @@
"type": "github"
}
],
- "time": "2020-06-22T07:06:58+00:00"
+ "time": "2022-02-18T12:54:07+00:00"
},
{
- "name": "scrivo/highlight.php",
- "version": "v9.18.1.8",
+ "name": "sebastian/cli-parser",
+ "version": "1.0.1",
"source": {
"type": "git",
- "url": "https://github.com/scrivo/highlight.php.git",
- "reference": "6d5049cd2578e19a06adbb6ac77879089be1e3f9"
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/6d5049cd2578e19a06adbb6ac77879089be1e3f9",
- "reference": "6d5049cd2578e19a06adbb6ac77879089be1e3f9",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "php": ">=5.4"
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^4.8|^5.7",
- "sabberworm/php-css-parser": "^8.3",
- "symfony/finder": "^2.8|^3.4",
- "symfony/var-dumper": "^2.8|^3.4"
- },
- "suggest": {
- "ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
"autoload": {
- "psr-0": {
- "Highlight\\": "",
- "HighlightUtilities\\": ""
- },
- "files": [
- "HighlightUtilities/functions.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -8330,61 +9857,105 @@
],
"authors": [
{
- "name": "Geert Bergman",
- "homepage": "http://www.scrivo.org/",
- "role": "Project Author"
- },
- {
- "name": "Vladimir Jimenez",
- "homepage": "https://allejo.io",
- "role": "Maintainer"
- },
- {
- "name": "Martin Folkers",
- "homepage": "https://twobrain.io",
- "role": "Contributor"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js",
- "keywords": [
- "code",
- "highlight",
- "highlight.js",
- "highlight.php",
- "syntax"
- ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ },
"funding": [
{
- "url": "https://github.com/allejo",
+ "url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
- "time": "2021-10-24T00:28:14+00:00"
+ "time": "2020-09-28T06:08:49+00:00"
},
{
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "1.0.1",
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
- "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
"shasum": ""
},
"require": {
- "php": "^5.6 || ^7.0"
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^5.7 || ^6.0"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
}
},
"autoload": {
@@ -8404,34 +9975,44 @@
],
"description": "Looks up which function or method a line of code belongs to",
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "time": "2017-03-04T06:30:41+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
},
{
"name": "sebastian/comparator",
- "version": "3.0.2",
+ "version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
- "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
+ "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
"shasum": ""
},
"require": {
- "php": "^7.1",
- "sebastian/diff": "^3.0",
- "sebastian/exporter": "^3.1"
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
},
"require-dev": {
- "phpunit/phpunit": "^7.1"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "4.0-dev"
}
},
"autoload": {
@@ -8444,6 +10025,10 @@
"BSD-3-Clause"
],
"authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
@@ -8455,10 +10040,6 @@
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
}
],
"description": "Provides the functionality to compare PHP values for equality",
@@ -8468,33 +10049,43 @@
"compare",
"equality"
],
- "time": "2018-07-12T15:12:46+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T15:49:45+00:00"
},
{
- "name": "sebastian/diff",
- "version": "3.0.2",
+ "name": "sebastian/complexity",
+ "version": "2.0.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29"
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
- "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
+ "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "nikic/php-parser": "^4.7",
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^7.5 || ^8.0",
- "symfony/process": "^2 || ^3.3 || ^4"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "2.0-dev"
}
},
"autoload": {
@@ -8508,12 +10099,69 @@
],
"authors": [
{
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- },
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T15:52:27+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
}
],
"description": "Diff implementation",
@@ -8524,27 +10172,37 @@
"unidiff",
"unified diff"
],
- "time": "2019-02-04T06:01:07+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:10:38+00:00"
},
{
"name": "sebastian/environment",
- "version": "4.2.3",
+ "version": "5.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368"
+ "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
- "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
+ "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^7.5"
+ "phpunit/phpunit": "^9.3"
},
"suggest": {
"ext-posix": "*"
@@ -8552,7 +10210,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.2-dev"
+ "dev-master": "5.1-dev"
}
},
"autoload": {
@@ -8577,34 +10235,44 @@
"environment",
"hhvm"
],
- "time": "2019-11-20T08:46:58+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:52:38+00:00"
},
{
"name": "sebastian/exporter",
- "version": "3.1.2",
+ "version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
- "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
"shasum": ""
},
"require": {
- "php": "^7.0",
- "sebastian/recursion-context": "^3.0"
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
},
"require-dev": {
"ext-mbstring": "*",
- "phpunit/phpunit": "^6.0"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.1.x-dev"
+ "dev-master": "4.0-dev"
}
},
"autoload": {
@@ -8639,35 +10307,45 @@
}
],
"description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
"keywords": [
"export",
"exporter"
],
- "time": "2019-09-14T09:02:43+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-11-11T14:18:36+00:00"
},
{
"name": "sebastian/global-state",
- "version": "3.0.0",
+ "version": "5.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4"
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
- "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
"shasum": ""
},
"require": {
- "php": "^7.2",
- "sebastian/object-reflector": "^1.1.1",
- "sebastian/recursion-context": "^3.0"
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
},
"require-dev": {
"ext-dom": "*",
- "phpunit/phpunit": "^8.0"
+ "phpunit/phpunit": "^9.3"
},
"suggest": {
"ext-uopz": "*"
@@ -8675,7 +10353,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "5.0-dev"
}
},
"autoload": {
@@ -8698,34 +10376,101 @@
"keywords": [
"global state"
],
- "time": "2019-02-01T05:30:01+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-14T08:28:10+00:00"
},
{
- "name": "sebastian/object-enumerator",
- "version": "3.0.3",
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.3",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
- "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
"shasum": ""
},
"require": {
- "php": "^7.0",
- "sebastian/object-reflector": "^1.1.1",
- "sebastian/recursion-context": "^3.0"
+ "nikic/php-parser": "^4.6",
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^6.0"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0.x-dev"
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-28T06:42:11+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
}
},
"autoload": {
@@ -8745,122 +10490,37 @@
],
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "time": "2017-08-03T12:35:26+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
},
{
"name": "sebastian/object-reflector",
- "version": "1.1.1",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "773f97c67f28de00d397be301821b06708fca0be"
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
- "reference": "773f97c67f28de00d397be301821b06708fca0be",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
"shasum": ""
},
"require": {
- "php": "^7.0"
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
- "time": "2017-03-29T09:07:27+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
- "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
- "shasum": ""
- },
- "require": {
- "php": "^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2017-03-03T06:23:57+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
- "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
- "shasum": ""
- },
- "require": {
- "php": "^7.1"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
@@ -8883,34 +10543,162 @@
"email": "sebastian@phpunit.de"
}
],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "time": "2018-10-04T04:07:39+00:00"
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
},
{
- "name": "sebastian/type",
- "version": "1.1.3",
+ "name": "sebastian/recursion-context",
+ "version": "4.0.4",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3"
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3",
- "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
"shasum": ""
},
"require": {
- "php": "^7.2"
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^8.2"
+ "phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1-dev"
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:17:30+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:45:17+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "2.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
}
},
"autoload": {
@@ -8931,29 +10719,39 @@
],
"description": "Collection of value objects that represent the types of the PHP type system",
"homepage": "https://github.com/sebastianbergmann/type",
- "time": "2019-07-02T08:10:15+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-06-15T12:49:02+00:00"
},
{
"name": "sebastian/version",
- "version": "2.0.1",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
"shasum": ""
},
"require": {
- "php": ">=5.6"
+ "php": ">=7.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
@@ -8974,26 +10772,319 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
- "time": "2016-10-03T07:35:21+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
},
{
- "name": "symfony/debug",
- "version": "v4.4.13",
+ "name": "spatie/backtrace",
+ "version": "1.2.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/debug.git",
- "reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e"
+ "url": "https://github.com/spatie/backtrace.git",
+ "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e",
- "reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e",
+ "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b",
+ "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "ext-json": "*",
+ "phpunit/phpunit": "^9.3",
+ "symfony/var-dumper": "^5.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\Backtrace\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van de Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "A better backtrace",
+ "homepage": "https://github.com/spatie/backtrace",
+ "keywords": [
+ "Backtrace",
+ "spatie"
+ ],
+ "support": {
+ "issues": "https://github.com/spatie/backtrace/issues",
+ "source": "https://github.com/spatie/backtrace/tree/1.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/spatie",
+ "type": "github"
+ },
+ {
+ "url": "https://spatie.be/open-source/support-us",
+ "type": "other"
+ }
+ ],
+ "time": "2021-11-09T10:57:15+00:00"
+ },
+ {
+ "name": "spatie/flare-client-php",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/flare-client-php.git",
+ "reference": "5d48e00716e3bab813cafffe223bc85c5732a410"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5d48e00716e3bab813cafffe223bc85c5732a410",
+ "reference": "5d48e00716e3bab813cafffe223bc85c5732a410",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/pipeline": "^8.0|^9.0",
+ "php": "^8.0",
+ "spatie/backtrace": "^1.2",
+ "symfony/http-foundation": "^5.0|^6.0",
+ "symfony/mime": "^5.2|^6.0",
+ "symfony/process": "^5.2|^6.0",
+ "symfony/var-dumper": "^5.2|^6.0"
+ },
+ "require-dev": {
+ "dms/phpunit-arraysubset-asserts": "^0.3.0",
+ "pestphp/pest": "^1.20",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "spatie/phpunit-snapshot-assertions": "^4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Spatie\\FlareClient\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Send PHP errors to Flare",
+ "homepage": "https://github.com/spatie/flare-client-php",
+ "keywords": [
+ "exception",
+ "flare",
+ "reporting",
+ "spatie"
+ ],
+ "support": {
+ "issues": "https://github.com/spatie/flare-client-php/issues",
+ "source": "https://github.com/spatie/flare-client-php/tree/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-16T16:14:24+00:00"
+ },
+ {
+ "name": "spatie/ignition",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/ignition.git",
+ "reference": "6b7bb804f4834b080f5ac941f6ac6800a485011e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/ignition/zipball/6b7bb804f4834b080f5ac941f6ac6800a485011e",
+ "reference": "6b7bb804f4834b080f5ac941f6ac6800a485011e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "monolog/monolog": "^2.0",
+ "php": "^8.0",
+ "spatie/flare-client-php": "^1.0",
+ "symfony/console": "^5.4|^6.0",
+ "symfony/var-dumper": "^5.4|^6.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.4",
+ "pestphp/pest": "^1.20",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "spatie/ray": "^1.32",
+ "symfony/process": "^5.4|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\Ignition\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Spatie",
+ "email": "info@spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "A beautiful error page for PHP applications.",
+ "homepage": "https://flareapp.io/ignition",
+ "keywords": [
+ "error",
+ "flare",
+ "laravel",
+ "page"
+ ],
+ "support": {
+ "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction",
+ "forum": "https://twitter.com/flareappio",
+ "issues": "https://github.com/spatie/ignition/issues",
+ "source": "https://github.com/spatie/ignition"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-17T21:40:47+00:00"
+ },
+ {
+ "name": "spatie/laravel-ignition",
+ "version": "1.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/laravel-ignition.git",
+ "reference": "d349854331789aba9205fd755e0c1d1934ef1463"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/d349854331789aba9205fd755e0c1d1934ef1463",
+ "reference": "d349854331789aba9205fd755e0c1d1934ef1463",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "illuminate/support": "^8.77|^9.0",
+ "monolog/monolog": "^2.3",
+ "php": "^8.0",
+ "spatie/flare-client-php": "^1.0.1",
+ "spatie/ignition": "^1.0",
+ "symfony/console": "^5.0|^6.0",
+ "symfony/var-dumper": "^5.0|^6.0"
+ },
+ "require-dev": {
+ "filp/whoops": "^2.14",
+ "livewire/livewire": "^2.8|dev-develop",
+ "mockery/mockery": "^1.4",
+ "nunomaduro/larastan": "^1.0",
+ "orchestra/testbench": "^6.23|^7.0",
+ "pestphp/pest": "^1.20",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "spatie/laravel-ray": "^1.27"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Spatie\\LaravelIgnition\\IgnitionServiceProvider"
+ ],
+ "aliases": {
+ "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Spatie\\LaravelIgnition\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Spatie",
+ "email": "info@spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "A beautiful error page for Laravel applications.",
+ "homepage": "https://flareapp.io/ignition",
+ "keywords": [
+ "error",
+ "flare",
+ "laravel",
+ "page"
+ ],
+ "support": {
+ "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction",
+ "forum": "https://twitter.com/flareappio",
+ "issues": "https://github.com/spatie/laravel-ignition/issues",
+ "source": "https://github.com/spatie/laravel-ignition"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-15T11:02:15+00:00"
+ },
+ {
+ "name": "symfony/debug",
+ "version": "v4.4.37",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/debug.git",
+ "reference": "5de6c6e7f52b364840e53851c126be4d71e60470"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/5de6c6e7f52b364840e53851c126be4d71e60470",
+ "reference": "5de6c6e7f52b364840e53851c126be4d71e60470",
"shasum": ""
},
"require": {
"php": ">=7.1.3",
- "psr/log": "~1.0",
- "symfony/polyfill-php80": "^1.15"
+ "psr/log": "^1|^2|^3"
},
"conflict": {
"symfony/http-kernel": "<3.4"
@@ -9002,11 +11093,6 @@
"symfony/http-kernel": "^3.4|^4.0|^5.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Debug\\": ""
@@ -9029,8 +11115,11 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Debug Component",
+ "description": "Provides tools to ease debugging PHP code",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/debug/tree/v4.4.37"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
@@ -9045,20 +11134,20 @@
"type": "tidelift"
}
],
- "time": "2020-08-10T07:47:39+00:00"
+ "time": "2022-01-02T09:41:36+00:00"
},
{
"name": "theseer/tokenizer",
- "version": "1.2.0",
+ "version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "75a63c33a8577608444246075ea0af0d052e452a"
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
- "reference": "75a63c33a8577608444246075ea0af0d052e452a",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
"shasum": ""
},
"require": {
@@ -9085,74 +11174,32 @@
}
],
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
+ },
"funding": [
{
"url": "https://github.com/theseer",
"type": "github"
}
],
- "time": "2020-07-12T23:59:07+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
- "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.3 || ^7.0 || ^8.0",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<3.9.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.36 || ^7.5.13"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "time": "2020-07-08T17:02:28+00:00"
+ "time": "2021-07-28T10:34:58+00:00"
}
],
"aliases": [],
"minimum-stability": "dev",
- "stability-flags": [],
+ "stability-flags": {
+ "graham-campbell/markdown": 20
+ },
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": "^7.2.5",
- "ext-imagick": "*",
+ "php": "^8.0",
"ext-json": "*"
},
- "platform-dev": [],
- "plugin-api-version": "1.1.0"
+ "platform-dev": {
+ "ext-xdebug": "*"
+ },
+ "plugin-api-version": "2.1.0"
}
diff --git a/config/adminlte.php b/config/adminlte.php
old mode 100644
new mode 100755
index 9c71a48..f343716
--- a/config/adminlte.php
+++ b/config/adminlte.php
@@ -1,5 +1,24 @@
.
+ */
+
return [
/*
@@ -50,7 +69,7 @@ return [
'logo_img_class' => 'brand-image img-circle elevation-3',
'logo_img_xl' => null,
'logo_img_xl_class' => 'brand-image-xs',
- 'logo_img_alt' => env('APP_NAME') . '\'s Temporary Logo',
+ 'logo_img_alt' => env('APP_NAME').'\'s Temporary Logo',
/*
|--------------------------------------------------------------------------
@@ -211,17 +230,17 @@ return [
[
'text' => 'm_home',
'icon' => 'fas fa-home',
- 'url' => 'dashboard'
+ 'url' => 'dashboard',
],
[
'text' => 'm_directory',
'icon' => 'fas fa-users',
'url' => 'users/directory',
- 'can' => 'profiles.view.others'
+ 'can' => 'profiles.view.others',
],
[
'header' => 'h_applications',
- 'can' => 'applications.view.own'
+ 'can' => 'applications.view.own',
],
[
'text' => 'm_my_applications',
@@ -231,8 +250,8 @@ return [
[
'text' => 'm_curr_applications',
'icon' => 'fas fa-fw fa-check-double',
- 'url' => '/applications/my-applications'
- ]
+ 'url' => '/applications/my-applications',
+ ],
],
],
@@ -242,40 +261,72 @@ return [
[
'text' => 'm_profile_settings',
'url' => '/profile/settings',
- 'icon' => 'fas fa-fw fa-cog'
+ 'icon' => 'fas fa-fw fa-cog',
],
[
'text' => 'm_account_settings',
'icon' => 'fas fa-user-circle',
- 'url' => '/profile/settings/account'
+ 'url' => '/profile/settings/account',
+ ],
+ [
+ 'header' => 'Human Resources',
+ 'can' => 'reviewer.requestAbsence'
+ ],
+ [
+ 'text' => 'Absence Management',
+ 'icon' => 'fas fa-user-clock',
+ 'can' => 'reviewer.requestAbsence',
+ 'submenu' => [
+ [
+ 'text' => 'New request',
+ 'icon' => 'fas fa-plus',
+ 'can' => 'reviewer.requestAbsence',
+ 'route' => 'absences.create'
+ ],
+ [
+ 'text' => 'My requests',
+ 'icon' => 'fas fa-business-time',
+ 'can' => 'reviewer.viewAbsence',
+ 'route' => 'showUserAbsences'
+ ],
+
+ ],
+ ],
+ [
+ 'text' => 'Absence requests',
+ 'icon' => 'fas fa-address-card',
+ 'can' => 'admin.manageAbsences',
+ 'route' => 'absences.index'
],
[
'header' => 'h_app_management',
- 'can' => ['applications.view.all', 'applications.vote']
+ 'can' => ['applications.view.all', 'applications.vote'],
],
[
'text' => 'm_all_apps',
'url' => 'applications/staff/all',
'icon' => 'fas fa-list-ol',
- 'can' => 'applications.view.all'
+ 'can' => 'applications.view.all',
],
[
- 'text' => 'm_outstanding_apps',
- 'url' => '/applications/staff/outstanding',
- 'icon' => 'far fa-folder-open',
- 'can' => 'applications.view.all'
- ],
- [
- 'text' => 'm_interview_queue',
- 'url' => '/applications/staff/pending-interview',
- 'icon' => 'fas fa-fw fa-microphone-alt',
- 'can' => 'applications.view.all'
- ],
- [
- 'text' => 'm_peer_approval',
- 'url' => '/applications/staff/peer-review',
- 'icon' => 'fas fa-fw fa-search',
- 'can' => 'applications.view.all'
+ 'text' => 'Teams',
+ 'icon' => 'fas fa-user-friends',
+ 'url' => 'teams',
+ 'can' => 'teams.view',
+ 'submenu' => [
+ [
+ 'text' => 'Available Teams',
+ 'icon' => 'fas fa-clipboard',
+ 'url' => 'teams',
+ 'can' => 'teams.view'
+ ],
+ [
+ 'text' => 'Files',
+ 'icon' => 'fas fa-file-alt',
+ 'url' => 'team/files',
+ 'can' => 'teams.view'
+ ],
+ ]
],
[
'header' => 'h_admin',
@@ -284,20 +335,14 @@ return [
'admin.userlist',
'admin.stafflist',
'admin.hiring.*',
- 'admin.notificationsettings.*'
- ]
+ 'admin.notificationsettings.*',
+ ],
],
[
- 'text' => 'm_staff_m',
- 'icon' => 'fas fa-fw fa-users',
- 'url' => '/hr/staff-members',
- 'can' => 'admin.stafflist'
- ],
- [ // players who haven't been promoted yet
- 'text' => 'm_reg_players',
+ 'text' => 'Users',
'icon' => 'fas fa-fw fa-user-friends',
- 'url' => '/hr/players',
- 'can' => 'admin.userlist'
+ 'route' => 'registeredPlayerList',
+ 'can' => 'admin.userlist',
],
[
'text' => 'sm_hiring_man',
@@ -307,7 +352,7 @@ return [
[
'text' => 'm_open_pos',
'icon' => 'fas fa-box-open',
- 'url' => '/admin/positions'
+ 'url' => '/admin/positions',
],
[
'text' => 'sm_forms',
@@ -316,16 +361,16 @@ return [
[
'text' => 'sm_all_forms',
'icon' => 'far fa-list-alt',
- 'url' => '/admin/forms'
+ 'url' => '/admin/forms',
],
[
'text' => 'm_form_builder',
'icon' => 'fas fa-fw fa-hammer',
- 'url' => '/admin/forms/builder'
- ]
- ]
- ]
- ]
+ 'url' => '/admin/forms/builder',
+ ],
+ ],
+ ],
+ ],
],
[
'text' => 'sm_app_settings',
@@ -336,22 +381,22 @@ return [
'text' => 'm_global_app_s',
'icon' => 'fas fa-cogs',
'url' => '/admin/settings',
- 'can' => 'admin.settings.view'
+ 'can' => 'admin.settings.view',
],
[
'text' => 'm_devtools',
'icon' => 'fas fa-code',
'url' => '/admin/devtools',
- 'can' => 'admin.developertools.use'
- ]
- ]
+ 'can' => 'admin.developertools.use',
+ ],
+ ],
],
[
'text' => 'm_s_logs',
'url' => '/admin/maintenance/system-logs',
'icon' => 'fas fa-clipboard-list',
- 'can' => 'admin.maintenance.logs.view'
- ]
+ 'can' => 'admin.maintenance.logs.view',
+ ],
],
/*
@@ -417,9 +462,9 @@ return [
[
'type' => 'js',
'asset' => false,
- 'location' => '/js/formbuilder.js'
- ]
- ]
+ 'location' => '/js/formbuilder.js',
+ ],
+ ],
],
[
'name' => 'Select2',
@@ -482,14 +527,14 @@ return [
[
'type' => 'js',
'asset' => false,
- 'location' => 'https://cdn.jsdelivr.net/npm/toastr@2.1.4/toastr.min.js'
+ 'location' => 'https://cdn.jsdelivr.net/npm/toastr@2.1.4/toastr.min.js',
],
[
'type' => 'css',
'asset' => false,
- 'location' => 'https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css'
- ]
- ]
+ 'location' => 'https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css',
+ ],
+ ],
],
[
'name' => 'GlobalTooltip',
@@ -498,47 +543,123 @@ return [
[
'type' => 'js',
'asset' => false,
- 'location' => '/js/globaltooltip.js'
- ]
- ]
+ 'location' => '/js/globaltooltip.js',
+ ],
+ ],
],
[
- 'name' => 'DatePickApp',
+ 'name' => 'Fullcalendar',
'active' => true,
'files' => [
[
'type' => 'js',
'asset' => false,
- 'location' => '/js/datepick.js'
+ 'location' => 'https://cdn.jsdelivr.net/npm/fullcalendar@5.0.1/main.min.js',
+ ],
+ [
+ 'type' => 'css',
+ 'asset' => false,
+ 'location' => 'https://cdn.jsdelivr.net/npm/fullcalendar@5.0.1/main.min.css',
+ ],
+ ],
+ ],
+ [
+ 'name' => 'CheckboxValues',
+ 'active' => true,
+ 'files' => [
+ [
+ 'type' => 'js',
+ 'asset' => false,
+ 'location' => '/js/switches.js',
+ ],
+ ],
+ ],
+ [
+ 'name' => 'AuthCustomisations',
+ 'active' => true,
+ 'files' => [
+ [
+ 'type' => 'css',
+ 'asset' => false,
+ 'location' => '/css/authpages.css',
+ ],
+ ],
+ ],
+ [
+ 'name' => 'BootstrapMultiselectDropdown',
+ 'active' => true,
+ 'files' => [
+ [
+ 'type' => 'js',
+ 'asset' => 'false',
+ 'location' => 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/js/bootstrap-multiselect.min.js',
+ ],
+ [
+ 'type' => 'css',
+ 'asset' => false,
+ 'location' => 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/css/bootstrap-multiselect.css',
+ ],
+ ],
+
+ ],
+ [
+ 'name' => 'BootstrapSwitch',
+ 'active' => true,
+ 'files' => [
+ [
+ 'type' => 'js',
+ 'asset' => false,
+ 'location' => 'https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/js/bootstrap4-toggle.min.js'
+ ],
+ [
+ 'type' => 'css',
+ 'asset' => false,
+ 'location' => 'https://cdn.jsdelivr.net/gh/gitbrent/bootstrap4-toggle@3.6.1/css/bootstrap4-toggle.min.css'
+ ]
+ ]
+ ],
+ [
+ 'name' => 'BootstrapToggleButton',
+ 'active' => true,
+ 'files' => [
+ [
+ 'type' => 'css',
+ 'asset' => false,
+ 'location' => 'https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css',
+ ],
+ [
+ 'type' => 'js',
+ 'asset' => false,
+ 'location' => 'https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js',
+ ],
+ ],
+ ],
+ [
+ 'name' => 'Flatpickr',
+ 'active' => true,
+ 'files' => [
+ [
+ 'type' => 'css',
+ 'asset' => false,
+ 'location' => 'https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css'
+ ],
+ [
+ 'type' => 'js',
+ 'asset' => false,
+ 'location' => 'https://cdn.jsdelivr.net/npm/flatpickr'
]
]
],
[
- 'name' => 'Fullcalendar',
- 'active' => true,
- 'files' => [
- [
- 'type' => 'js',
- 'asset' => false,
- 'location' => 'https://cdn.jsdelivr.net/npm/fullcalendar@5.0.1/main.min.js',
- ],
- [
- 'type' => 'css',
- 'asset' => false,
- 'location' => 'https://cdn.jsdelivr.net/npm/fullcalendar@5.0.1/main.min.css'
+ 'name' => 'Pusher',
+ 'active' => true,
+ 'files' => [
+ [
+ 'type' => 'js',
+ 'asset' => false,
+ 'location' => 'https://js.pusher.com/beams/1.0/push-notifications-cdn.js'
+ ]
]
- ]
- ],
- [
- 'name' => 'AuthCustomisations',
- 'active' => true,
- 'files' => [
- [
- 'type' => 'css',
- 'asset' => false,
- 'location' => '/css/authpages.css'
- ]
- ]
]
],
];
diff --git a/config/api.php b/config/api.php
new file mode 100755
index 0000000..d6e8836
--- /dev/null
+++ b/config/api.php
@@ -0,0 +1,232 @@
+ env('API_STANDARDS_TREE', 'x'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | API Subtype
+ |--------------------------------------------------------------------------
+ |
+ | Your subtype will follow the standards tree you use when used in the
+ | "Accept" header to negotiate the content type and version.
+ |
+ | For example: Accept: application/x.SUBTYPE.v1+json
+ |
+ */
+
+ 'subtype' => env('API_SUBTYPE', ''),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Default API Version
+ |--------------------------------------------------------------------------
+ |
+ | This is the default version when strict mode is disabled and your API
+ | is accessed via a web browser. It's also used as the default version
+ | when generating your APIs documentation.
+ |
+ */
+
+ 'version' => env('API_VERSION', 'v1'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Default API Prefix
+ |--------------------------------------------------------------------------
+ |
+ | A default prefix to use for your API routes so you don't have to
+ | specify it for each group.
+ |
+ */
+
+ 'prefix' => env('API_PREFIX', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Default API Domain
+ |--------------------------------------------------------------------------
+ |
+ | A default domain to use for your API routes so you don't have to
+ | specify it for each group.
+ |
+ */
+
+ 'domain' => env('API_DOMAIN', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Name
+ |--------------------------------------------------------------------------
+ |
+ | When documenting your API using the API Blueprint syntax you can
+ | configure a default name to avoid having to manually specify
+ | one when using the command.
+ |
+ */
+
+ 'name' => env('API_NAME', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Conditional Requests
+ |--------------------------------------------------------------------------
+ |
+ | Globally enable conditional requests so that an ETag header is added to
+ | any successful response. Subsequent requests will perform a check and
+ | will return a 304 Not Modified. This can also be enabled or disabled
+ | on certain groups or routes.
+ |
+ */
+
+ 'conditionalRequest' => env('API_CONDITIONAL_REQUEST', true),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Strict Mode
+ |--------------------------------------------------------------------------
+ |
+ | Enabling strict mode will require clients to send a valid Accept header
+ | with every request. This also voids the default API version, meaning
+ | your API will not be browsable via a web browser.
+ |
+ */
+
+ 'strict' => env('API_STRICT', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Debug Mode
+ |--------------------------------------------------------------------------
+ |
+ | Enabling debug mode will result in error responses caused by thrown
+ | exceptions to have a "debug" key that will be populated with
+ | more detailed information on the exception.
+ |
+ */
+
+ 'debug' => env('API_DEBUG', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Generic Error Format
+ |--------------------------------------------------------------------------
+ |
+ | When some HTTP exceptions are not caught and dealt with the API will
+ | generate a generic error response in the format provided. Any
+ | keys that aren't replaced with corresponding values will be
+ | removed from the final response.
+ |
+ */
+
+ 'errorFormat' => [
+ 'message' => ':message',
+ 'errors' => ':errors',
+ 'code' => ':code',
+ 'status_code' => ':status_code',
+ 'debug' => ':debug',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | API Middleware
+ |--------------------------------------------------------------------------
+ |
+ | Middleware that will be applied globally to all API requests.
+ |
+ */
+
+ 'middleware' => [
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Authentication Providers
+ |--------------------------------------------------------------------------
+ |
+ | The authentication providers that should be used when attempting to
+ | authenticate an incoming API request.
+ |
+ */
+
+ 'auth' => [
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Throttling / Rate Limiting
+ |--------------------------------------------------------------------------
+ |
+ | Consumers of your API can be limited to the amount of requests they can
+ | make. You can create your own throttles or simply change the default
+ | throttles.
+ |
+ */
+
+ 'throttling' => [
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Response Transformer
+ |--------------------------------------------------------------------------
+ |
+ | Responses can be transformed so that they are easier to format. By
+ | default a Fractal transformer will be used to transform any
+ | responses prior to formatting. You can easily replace
+ | this with your own transformer.
+ |
+ */
+
+ 'transformer' => env('API_TRANSFORMER', Dingo\Api\Transformer\Adapter\Fractal::class),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Response Formats
+ |--------------------------------------------------------------------------
+ |
+ | Responses can be returned in multiple formats by registering different
+ | response formatters. You can also customize an existing response
+ | formatter with a number of options to configure its output.
+ |
+ */
+
+ 'defaultFormat' => env('API_DEFAULT_FORMAT', 'json'),
+
+ 'formats' => [
+
+ 'json' => Dingo\Api\Http\Response\Format\Json::class,
+
+ ],
+
+ 'formatsOptions' => [
+
+ 'json' => [
+ 'pretty_print' => env('API_JSON_FORMAT_PRETTY_PRINT_ENABLED', false),
+ 'indent_style' => env('API_JSON_FORMAT_INDENT_STYLE', 'space'),
+ 'indent_size' => env('API_JSON_FORMAT_INDENT_SIZE', 2),
+ ],
+
+ ],
+
+];
diff --git a/config/app.php b/config/app.php
old mode 100644
new mode 100755
index 96e5484..86e1e75
--- a/config/app.php
+++ b/config/app.php
@@ -1,5 +1,24 @@
.
+ */
+
return [
/*
@@ -15,7 +34,6 @@ return [
'name' => env('APP_NAME', 'Laravel'),
-
/*
|--------------------------------------------------------------------------
| Application Homepage
@@ -28,6 +46,54 @@ return [
*/
'sitehomepage' => env('APP_SITEHOMEPAGE', 'https://google.com'),
+
+
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Version
+ |--------------------------------------------------------------------------
+ |
+ | This value is the application's version.
+ | It's used for informational purposes, and it'll be used for an auto-update system
+ | in the near future.
+ | Should always be the latest minor release.
+ |
+ */
+ 'release' => env('RELEASE', '(unknown)'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | SSL for non-production environments
+ |--------------------------------------------------------------------------
+ |
+ | If you're a developer, and need to use SSL locally for testing,
+ | enable this setting.
+ | It forces Laravel to load all assets via HTTPS, even when the environment is
+ | set to "local". This setting is useless in production because it's already enforced.
+ | If you don't enable this when using SSL locally, the pages won't load properly.
+ | If you're a regular user, don't touch this setting.
+ |
+ */
+ 'force_secure' => env('NONPROD_FORCE_SECURE', false),
+
+
+ /*
+ |--------------------------------------------------------------------------
+ | IP address anonymity
+ |--------------------------------------------------------------------------
+ |
+ | RB Recruiter collects IP addresses and stores them in the database in order to
+ | display them to site admins.
+ |
+ | This feature allows you to disable the display and collection of IP addresses,
+ | just like in demo mode, without needing to be in demo mode.
+ |
+ | If enabled, demo mode will override this feature if it's set to false.
+ |
+ */
+ 'hide_ips' => env('HIDE_IPS'),
+
/*
|--------------------------------------------------------------------------
| Application Environment
@@ -192,8 +258,9 @@ return [
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
- \App\Providers\MojangStatusProvider::class,
- \App\Providers\OptionsProvider::class
+ \App\Providers\OptionsProvider::class,
+ App\Providers\DigitalStorageProvider::class,
+ App\Providers\JSONProvider::class,
],
@@ -250,7 +317,8 @@ return [
'IP' => App\Facades\IP::class,
'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class,
'ContextAwareValidator' => App\Facades\ContextAwareValidation::class,
- 'Settings' => App\Facades\Options::class
+ 'Settings' => App\Facades\Options::class,
+ 'JSON' => App\Facades\JSON::class
],
diff --git a/config/auth.php b/config/auth.php
old mode 100644
new mode 100755
index aaf982b..071543c
--- a/config/auth.php
+++ b/config/auth.php
@@ -1,5 +1,24 @@
.
+ */
+
return [
/*
diff --git a/config/broadcasting.php b/config/broadcasting.php
old mode 100644
new mode 100755
index 3bba110..2fa0dee
--- a/config/broadcasting.php
+++ b/config/broadcasting.php
@@ -1,5 +1,24 @@
.
+ */
+
return [
/*
diff --git a/config/cache.php b/config/cache.php
old mode 100644
new mode 100755
index 4f41fdf..475421a
--- a/config/cache.php
+++ b/config/cache.php
@@ -1,5 +1,24 @@
.
+ */
+
use Illuminate\Support\Str;
return [
diff --git a/config/cors.php b/config/cors.php
old mode 100644
new mode 100755
index 558369d..c06d99f
--- a/config/cors.php
+++ b/config/cors.php
@@ -1,5 +1,24 @@
.
+ */
+
return [
/*
diff --git a/config/customization.php b/config/customization.php
new file mode 100755
index 0000000..26b502a
--- /dev/null
+++ b/config/customization.php
@@ -0,0 +1,7 @@
+ env('APP_AUTH_BANNER')
+
+];
diff --git a/config/database.php b/config/database.php
old mode 100644
new mode 100755
index b42d9b3..493e1af
--- a/config/database.php
+++ b/config/database.php
@@ -1,5 +1,24 @@
.
+ */
+
use Illuminate\Support\Str;
return [
diff --git a/config/debugbar.php b/config/debugbar.php
new file mode 100755
index 0000000..87b003e
--- /dev/null
+++ b/config/debugbar.php
@@ -0,0 +1,235 @@
+.
+ */
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Debugbar Settings
+ |--------------------------------------------------------------------------
+ |
+ | Debugbar is enabled by default, when debug is set to true in app.php.
+ | You can override the value by setting enable to true or false instead of null.
+ |
+ | You can provide an array of URI's that must be ignored (eg. 'api/*')
+ |
+ */
+
+ 'enabled' => env('DEBUGBAR_ENABLED', null),
+ 'except' => [
+ 'telescope*',
+ 'horizon*',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Storage settings
+ |--------------------------------------------------------------------------
+ |
+ | DebugBar stores data for session/ajax requests.
+ | You can disable this, so the debugbar stores data in headers/session,
+ | but this can cause problems with large data collectors.
+ | By default, file storage (in the storage folder) is used. Redis and PDO
+ | can also be used. For PDO, run the package migrations first.
+ |
+ */
+ 'storage' => [
+ 'enabled' => true,
+ 'driver' => 'file', // redis, file, pdo, custom
+ 'path' => storage_path('debugbar'), // For file driver
+ 'connection' => null, // Leave null for default connection (Redis/PDO)
+ 'provider' => '', // Instance of StorageInterface for custom driver
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Vendors
+ |--------------------------------------------------------------------------
+ |
+ | Vendor files are included by default, but can be set to false.
+ | This can also be set to 'js' or 'css', to only include javascript or css vendor files.
+ | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)
+ | and for js: jquery and and highlight.js
+ | So if you want syntax highlighting, set it to true.
+ | jQuery is set to not conflict with existing jQuery scripts.
+ |
+ */
+
+ 'include_vendors' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Capture Ajax Requests
+ |--------------------------------------------------------------------------
+ |
+ | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors),
+ | you can use this option to disable sending the data through the headers.
+ |
+ | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools.
+ */
+
+ 'capture_ajax' => true,
+ 'add_ajax_timing' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Error Handler for Deprecated warnings
+ |--------------------------------------------------------------------------
+ |
+ | When enabled, the Debugbar shows deprecated warnings for Symfony components
+ | in the Messages tab.
+ |
+ */
+ 'error_handler' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Clockwork integration
+ |--------------------------------------------------------------------------
+ |
+ | The Debugbar can emulate the Clockwork headers, so you can use the Chrome
+ | Extension, without the server-side code. It uses Debugbar collectors instead.
+ |
+ */
+ 'clockwork' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | DataCollectors
+ |--------------------------------------------------------------------------
+ |
+ | Enable/disable DataCollectors
+ |
+ */
+
+ 'collectors' => [
+ 'phpinfo' => true, // Php version
+ 'messages' => true, // Messages
+ 'time' => true, // Time Datalogger
+ 'memory' => true, // Memory usage
+ 'exceptions' => true, // Exception displayer
+ 'log' => true, // Logs from Monolog (merged in messages if enabled)
+ 'db' => true, // Show database (PDO) queries and bindings
+ 'views' => true, // Views with their data
+ 'route' => true, // Current route information
+ 'auth' => false, // Display Laravel authentication status
+ 'gate' => true, // Display Laravel Gate checks
+ 'session' => true, // Display session data
+ 'symfony_request' => true, // Only one can be enabled..
+ 'mail' => true, // Catch mail messages
+ 'laravel' => false, // Laravel version and environment
+ 'events' => false, // All events fired
+ 'default_request' => false, // Regular or special Symfony request logger
+ 'logs' => false, // Add the latest log messages
+ 'files' => false, // Show the included files
+ 'config' => false, // Display config settings
+ 'cache' => false, // Display cache events
+ 'models' => true, // Display models
+ 'livewire' => true, // Display Livewire (when available)
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Extra options
+ |--------------------------------------------------------------------------
+ |
+ | Configure some DataCollectors
+ |
+ */
+
+ 'options' => [
+ 'auth' => [
+ 'show_name' => true, // Also show the users name/email in the debugbar
+ ],
+ 'db' => [
+ 'with_params' => true, // Render SQL with the parameters substituted
+ 'backtrace' => true, // Use a backtrace to find the origin of the query in your files.
+ 'backtrace_exclude_paths' => [], // Paths to exclude from backtrace. (in addition to defaults)
+ 'timeline' => false, // Add the queries to the timeline
+ 'explain' => [ // Show EXPLAIN output on queries
+ 'enabled' => false,
+ 'types' => ['SELECT'], // Deprecated setting, is always only SELECT
+ ],
+ 'hints' => false, // Show hints for common mistakes
+ 'show_copy' => false, // Show copy button next to the query
+ ],
+ 'mail' => [
+ 'full_log' => false,
+ ],
+ 'views' => [
+ 'data' => false, //Note: Can slow down the application, because the data can be quite large..
+ ],
+ 'route' => [
+ 'label' => true, // show complete route on bar
+ ],
+ 'logs' => [
+ 'file' => null,
+ ],
+ 'cache' => [
+ 'values' => true, // collect cache values
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Inject Debugbar in Response
+ |--------------------------------------------------------------------------
+ |
+ | Usually, the debugbar is added just before