diff --git a/.editorconfig b/.editorconfig
index a45bfa8c4b4..52065f8fe26 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -11,5 +11,5 @@ indent_style = space
indent_size = 4
trim_trailing_whitespace = true
-[{package.json,*.yml}]
+[{*.json,*.yml}]
indent_size = 2
diff --git a/.env.example b/.env.example
index f0a39f8ad31..0ed277fe832 100644
--- a/.env.example
+++ b/.env.example
@@ -1,7 +1,9 @@
APP_ENV=production
APP_DEBUG=false
APP_URL=http://localhost
+APP_TIMEZONE=UTC
APP_KEY=
+DEBUGBAR_ENABLED=false
DB_DRIVER=mysql
DB_HOST=localhost
@@ -38,3 +40,5 @@ GITHUB_TOKEN=null
NEXMO_KEY=null
NEXMO_SECRET=null
NEXMO_SMS_FROM=Cachet
+
+TRUSTED_PROXIES=
diff --git a/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
similarity index 100%
rename from CODE_OF_CONDUCT.md
rename to .github/CODE_OF_CONDUCT.md
diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md
similarity index 52%
rename from CONTRIBUTING.md
rename to .github/CONTRIBUTING.md
index 6c1dc480a46..ccf9365d7aa 100644
--- a/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,14 +1,20 @@
# Contribution Guidelines
-## Creating issues
+## Thank you
-We track feature requests and bug reports on the [issue tracker](https://github.com/cachethq/Cachet/issues). Please send support requests to our support email; [support@alt-three.com](mailto:support@alt-three.com?subject=Cachet Support).
+Firstly, thank you for taking an interest in Cachet and for reading this guide.
+
+## Creating issues
+
+We track feature requests and bug reports on the [issue tracker](https://github.com/cachethq/Cachet/issues). Please send support requests to our support email; [support@alt-three.com](mailto:support@alt-three.com?subject=Cachet%20Support).
**Always be respectful.** Organisation members reserve the right to lock topics if they feel necessary.
## Languages
-Please submit non-English translations to the [Cachet CrowdIn](https://translate.cachethq.io) project. This makes syncing translations much easier.
+This project accepts **English translations** only. Translations will be updated automatically through the [CrowdIn](https://translate.cachethq.io) integration.
+
+Please submit alternative translations to the [Cachet CrowdIn](https://translate.cachethq.io) project. CrowdIn will automatically send a Pull Request with your updates in.
## Coding Standards
@@ -32,19 +38,31 @@ If you're feeling adventurous, you can become a Git & GitHub master with the [Gi
You should also make use of the [.editorconfig](/.editorconfig) file found within the root of the repository. It'll make sure that your editor is setup with the same file settings.
----
+## Ways to help:
+
+Start by becoming familiar with Cachet. If you're already using Cachet, that's a great head start. If not, check out the latest [demo](https://dev.cachethq.io) and have a play. You can also download and install Cachet locally to familiarise yourself that way.
+
+You don't have to be a developer to help improve Cachet, infact there are lots of ways that you can help us.
+
+### Spread the word
-## Contributing as a non-developer/non-designer
+There are a lot of people who don't know about Cachet or what a status page is and how important it can be. [Tweet about Cachet](https://twitter.com/CachetHQ). Write blog posts about your success (or failures, we're not perfect) with Cachet and share what you took away from it.
+
+### Help with Documentation
+
+Cachet is in use around the world. Cachet speaks multiple languages. Our documentation doesn't and can be hard to understand for non-English speaking people. Documentation should be easy to understand and we need your help to make this possible. Check out [CachetHQ/Docs](https://github.com/CachetHQ/Docs) to contribute to our documentation.
+
+### As a non-developer/non-designer
We're always looking for new [translations](#translations).
Of course bug reports, feature requests and [documentation](https://docs.cachethq.io) are always appreciated.
-## Contributing as a designer
+### As a designer
As Cachet gains new features, the design and ideas that were once a perfect fit need updating and in some cases designing from scratch. This is where you come in! Fancy giving Cachet a lick of paint? Sweet!
-You'll need to install Node.js, Bower and Gulp.
+You'll need to install Node.js with NPM or Yarn.
To get started you can do the following:
@@ -56,14 +74,21 @@ If you're making a lot of changes, you'll find that running `npm run watch` will
When you're happy with your changes, please run `npm run prod` to minify the assets.
-## Contributing as a developer
+### As a developer
Built using [Laravel](https://laravel.com).
We use these extra dependencies to develop Cachet:
- Node.js
-- Gulp
+- NPM or Yarn
+- Composer
- Git
Once cloned to your local machine, you'll need some demo data! Run `php artisan cachet:seed` to get the demo installation ready for action.
+
+### #YOLO JUST SUBMIT A PR
+
+_A great idea taken from https://github.com/metabase/metabase/blob/master/docs/contributing.md#yolo-just-submit-a-pr._
+
+> If you come up with something really cool, and want to share it with us, just submit a PR. If it hasn't gone through the above process, we probably won't merge it as is, but if it's compelling, we're more than willing to help you via code review, design review and generally OCD nitpicking so that it fits into the rest of our codebase.
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 00000000000..cb0cea613ce
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,5 @@
+# These are supported funding model platforms
+
+github:
+ - jbrooksuk
+ - cachethq
diff --git a/.gitignore b/.gitignore
index 2a41229267d..96cbe1660fd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@ Homestead.json
Homestead.yaml
npm-debug.log
.env
+package-lock.json
diff --git a/.travis.yml b/.travis.yml
index 16c2c44c332..8d0b77fd695 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,16 +1,38 @@
language: php
-
+dist: trusty
sudo: false
-php:
- - 5.6
- - 7.0
- - 7.1
+branches:
+ except:
+ - l10n_2.3
+ - l10n_2.4
before_install:
- cp .env.example .env
- - phpenv config-rm xdebug.ini
-install: travis_retry composer install --no-interaction --no-suggest
+install:
+ - travis_retry composer install --no-interaction --no-suggest
-script: vendor/bin/paratest -p 4 --max-batch-size 256
+jobs:
+ include:
+# - stage: Security check
+# script:
+# - phpenv config-rm xdebug.ini || true
+# - wget https://get.sensiolabs.org/security-checker.phar
+# - php security-checker.phar security:check ./composer.lock
+# php: 7.1
+ - stage: Unit tests
+ script:
+ - phpenv config-rm xdebug.ini || true
+ - vendor/bin/phpunit
+ php: 7.1
+ - stage: Unit tests
+ script:
+ - phpenv config-rm xdebug.ini || true
+ - vendor/bin/phpunit
+ php: 7.2
+ - stage: Unit tests
+ script:
+ - phpenv config-rm xdebug.ini || true
+ - vendor/bin/phpunit
+ php: 7.3
diff --git a/LICENSE b/LICENSE
index e791c2d7b7b..43fbc47b55c 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,12 +1,9 @@
-Copyright (c) 2015-2017 Alt Three Services Limited.
-All rights reserved.
+The MIT License (MIT)
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+Copyright (c) James Brooks
- 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
- 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
- 3. Neither the name of the Cachet nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
index fb7835afa5d..3df32eda11e 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,19 @@
-
-
-
-
-
-
-
+
+
+
+
-Cachet is a beautiful and powerful open source status page system.
+Cachet, the open-source status page system.
+
+## Cachet 3.x Announcement
-## Community
+We are shifting our attention and resources to Cachet 3.x and will no longer be supporting the 2.x version.
-You can now [join our Slack community!](http://cachethq-slack.herokuapp.com)
+For more information on the Cachet rebuild and our plans for 3.x, you can read the announcement [here](https://github.com/CachetHQ/Cachet/discussions/4342).
-## Overview
+## Features
- List your service components
- Report incidents
@@ -28,10 +27,10 @@ You can now [join our Slack community!](http://cachethq-slack.herokuapp.com)
## Requirements
-- PHP 5.6.4+ or newer
-- HTTP server with PHP support (eg: Apache, Nginx, Caddy)
+- PHP 7.1.3 – 7.3
+- HTTP server with PHP support (e.g.: Apache, Nginx, Caddy)
- [Composer](https://getcomposer.org)
-- A supported database: MySQL, PostgreSQL or SQLite
+- A supported database: MariaDB, MySQL, PostgreSQL or SQLite
## Installation, Upgrades and Documentation
@@ -39,35 +38,19 @@ You can find documentation at [https://docs.cachethq.io](https://docs.cachethq.i
Here are some useful quick links:
-- [Installing Cachet](https://docs.cachethq.io/docs/installing-cachet)
-- [Getting started with Docker](https://docs.cachethq.io/docs/get-started-with-docker)
+- [Installing Cachet](https://docs.cachethq.io/installation/)
+- [Getting started with Docker](https://docs.cachethq.io/installation/docker)
### Demo
-To test out the demo, you may login to the [Dashboard](https://demo.cachethq.io/dashboard) with the following:
+To test out the demo, you can log in to the [Cachet dashboard](https://demo.cachethq.io/dashboard) with the following credentials:
-- **Username:** `test` or `test@test.com`
+- **Username:** `test` or `test@example.com`
- **Password:** `test123`
-> The demo resets every 30 minutes.
-
-### v2.4 Demo
-
-To test out the demo, you may login to the [Dashboard](https://dev.cachethq.io/dashboard) with the following:
-
-- **Username:** `test` or `test@test.com`
-- **Password:** `test123`
-
-> The demo resets every 30 minutes.
-
-## Translate Cachet
-
-If you'd like to contribute translations, please check out our [CrowdIn project](https://crowdin.com/project/cachet).
-
-## Professional Installation Service
-
-We offer a professional installation service. To find out more, email us at [support@alt-three.com](mailto:support@alt-three.com?Cachet%20Installation)
+> **Note**
+> The demo will automatically reset every 30 minutes.
## Security Vulnerabilities
-If you discover a security vulnerability within Cachet, please send an e-mail to us at support@alt-three.com. We handle all security vulnerabilities on a case-by-case basis.
+If you discover a security vulnerability within Cachet, please send an e-mail to [support@cachethq.io](mailto:support@cachethq.io?Cachet%20Security%20Vulnerability). All security vulnerabilities are reviewed on a case-by-case basis.
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 00000000000..5459a341d89
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,17 @@
+# Security Policy
+
+**PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY, [SEE BELOW](#reporting-a-vulnerability).**
+
+## Supported Versions
+
+Use this section to tell people about which versions of your project are
+currently being supported with security updates.
+
+| Version | Supported |
+| ------- | ------------------ |
+| 2.4 | :white_check_mark: |
+| < 2.4 | :x: |
+
+## Reporting a Vulnerability
+
+If you discover a security vulnerability within Cachet, please email James Brooks at james@cachethq.io. All security vulnerabilities will be promptly addressed.
diff --git a/VERSION b/VERSION
index a724a9cd909..005119baaa0 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.4.0-dev
+2.4.1
diff --git a/app/Bus/Commands/Component/CreateComponentCommand.php b/app/Bus/Commands/Component/CreateComponentCommand.php
index 78b47bc223b..4244f42cbc6 100644
--- a/app/Bus/Commands/Component/CreateComponentCommand.php
+++ b/app/Bus/Commands/Component/CreateComponentCommand.php
@@ -74,6 +74,13 @@ final class CreateComponentCommand
*/
public $meta;
+ /**
+ * Tags string.
+ *
+ * @var string
+ */
+ public $tags;
+
/**
* The validation rules.
*
@@ -81,30 +88,32 @@ final class CreateComponentCommand
*/
public $rules = [
'name' => 'required|string',
- 'description' => 'required|string',
+ 'description' => 'nullable|string',
'status' => 'required|int|min:0|max:4',
'link' => 'nullable|url',
'order' => 'nullable|int',
'group_id' => 'nullable|int',
'enabled' => 'nullable|bool',
'meta' => 'nullable|array',
+ 'tags' => 'nullable|string',
];
/**
* Create a new add component command instance.
*
- * @param string $name
- * @param string $description
- * @param int $status
- * @param string $link
- * @param int $order
- * @param int $group_id
- * @param bool $enabled
- * @param array|null $meta
+ * @param string $name
+ * @param string $description
+ * @param int $status
+ * @param string $link
+ * @param int $order
+ * @param int $group_id
+ * @param bool $enabled
+ * @param array|null $meta
+ * @param string|null $tags
*
* @return void
*/
- public function __construct($name, $description, $status, $link, $order, $group_id, $enabled, $meta)
+ public function __construct($name, $description, $status, $link, $order, $group_id, $enabled, $meta, $tags = null)
{
$this->name = $name;
$this->description = $description;
@@ -114,5 +123,6 @@ public function __construct($name, $description, $status, $link, $order, $group_
$this->group_id = $group_id;
$this->enabled = $enabled;
$this->meta = $meta;
+ $this->tags = $tags;
}
}
diff --git a/app/Bus/Commands/Component/UpdateComponentCommand.php b/app/Bus/Commands/Component/UpdateComponentCommand.php
index 525030946bc..9909339754c 100644
--- a/app/Bus/Commands/Component/UpdateComponentCommand.php
+++ b/app/Bus/Commands/Component/UpdateComponentCommand.php
@@ -25,49 +25,49 @@ final class UpdateComponentCommand
/**
* The component name.
*
- * @var string
+ * @var string|null
*/
public $name;
/**
* The component description.
*
- * @var string
+ * @var string|null
*/
public $description;
/**
* The component status.
*
- * @var int
+ * @var int|null
*/
public $status;
/**
* The component link.
*
- * @var string
+ * @var string|null
*/
public $link;
/**
* The component order.
*
- * @var int
+ * @var int|null
*/
public $order;
/**
* The component group.
*
- * @var int
+ * @var int|null
*/
public $group_id;
/**
* Is the component enabled?
*
- * @var bool
+ * @var bool|null
*/
public $enabled;
@@ -78,6 +78,13 @@ final class UpdateComponentCommand
*/
public $meta;
+ /**
+ * The tags.
+ *
+ * @var string|null
+ */
+ public $tags;
+
/**
* If this is true, we won't notify subscribers of the change.
*
@@ -106,19 +113,20 @@ final class UpdateComponentCommand
* Create a new update component command instance.
*
* @param \CachetHQ\Cachet\Models\Component $component
- * @param string $name
- * @param string $description
- * @param int $status
- * @param string $link
- * @param int $order
- * @param int $group_id
- * @param bool $enabled
+ * @param string|null $name
+ * @param string|null $description
+ * @param int|null $status
+ * @param string|null $link
+ * @param int|null $order
+ * @param int|null $group_id
+ * @param bool|null $enabled
* @param array|null $meta
+ * @param string|null $tags
* @param bool $silent
*
* @return void
*/
- public function __construct(Component $component, $name, $description, $status, $link, $order, $group_id, $enabled, $meta, $silent)
+ public function __construct(Component $component, $name = null, $description = null, $status = null, $link = null, $order = null, $group_id = null, $enabled = null, $meta = null, $tags = null, $silent = null)
{
$this->component = $component;
$this->name = $name;
@@ -129,6 +137,8 @@ public function __construct(Component $component, $name, $description, $status,
$this->group_id = $group_id;
$this->enabled = $enabled;
$this->meta = $meta;
+ $this->tags = $tags;
$this->silent = $silent;
+ $this->tags = $tags;
}
}
diff --git a/app/Bus/Commands/Incident/CreateIncidentCommand.php b/app/Bus/Commands/Incident/CreateIncidentCommand.php
index dde666b76a9..4f94f2f890d 100644
--- a/app/Bus/Commands/Incident/CreateIncidentCommand.php
+++ b/app/Bus/Commands/Incident/CreateIncidentCommand.php
@@ -140,7 +140,7 @@ final class CreateIncidentCommand
*
* @return void
*/
- public function __construct($name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $occurred_at, $template, array $template_vars = [], $meta = [])
+ public function __construct($name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $occurred_at, $template, array $template_vars = [], array $meta = [])
{
$this->name = $name;
$this->status = $status;
diff --git a/app/Bus/Commands/Incident/UpdateIncidentCommand.php b/app/Bus/Commands/Incident/UpdateIncidentCommand.php
index 36036e6d963..1328b37ca91 100644
--- a/app/Bus/Commands/Incident/UpdateIncidentCommand.php
+++ b/app/Bus/Commands/Incident/UpdateIncidentCommand.php
@@ -106,6 +106,13 @@ final class UpdateIncidentCommand
*/
public $template_vars;
+ /**
+ * Meta key/value pairs.
+ *
+ * @var array
+ */
+ public $meta = [];
+
/**
* The validation rules.
*
@@ -122,6 +129,7 @@ final class UpdateIncidentCommand
'stickied' => 'nullable|bool',
'occurred_at' => 'nullable|string',
'template' => 'nullable|string',
+ 'meta' => 'nullable|array',
];
/**
@@ -139,10 +147,11 @@ final class UpdateIncidentCommand
* @param string|null $occurred_at
* @param string|null $template
* @param array $template_vars
+ * @param array $meta
*
* @return void
*/
- public function __construct(Incident $incident, $name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $occurred_at, $template, array $template_vars = [])
+ public function __construct(Incident $incident, $name, $status, $message, $visible, $component_id, $component_status, $notify, $stickied, $occurred_at, $template, array $template_vars = [], array $meta = [])
{
$this->incident = $incident;
$this->name = $name;
@@ -156,5 +165,6 @@ public function __construct(Incident $incident, $name, $status, $message, $visib
$this->occurred_at = $occurred_at;
$this->template = $template;
$this->template_vars = $template_vars;
+ $this->meta = $meta;
}
}
diff --git a/app/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommand.php b/app/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommand.php
index 048465b8f8d..caa65a75797 100644
--- a/app/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommand.php
+++ b/app/Bus/Commands/IncidentUpdate/CreateIncidentUpdateCommand.php
@@ -41,7 +41,19 @@ final class CreateIncidentUpdateCommand
* @var string
*/
public $message;
+ /**
+ * The incident component.
+ *
+ * @var int
+ */
+ public $component_id;
+ /**
+ * The component status.
+ *
+ * @var int
+ */
+ public $component_status;
/**
* The user.
*
@@ -55,10 +67,12 @@ final class CreateIncidentUpdateCommand
* @var string[]
*/
public $rules = [
- 'incident' => 'required',
- 'status' => 'required|int|min:1|max:4',
- 'message' => 'required|string',
- 'user' => 'required',
+ 'incident' => 'required',
+ 'status' => 'required|int|min:1|max:4',
+ 'message' => 'required|string',
+ 'component_id' => 'nullable|required_with:component_status|int',
+ 'component_status' => 'nullable|required_with:component_id|int|min:0|max:4',
+ 'user' => 'required',
];
/**
@@ -71,11 +85,13 @@ final class CreateIncidentUpdateCommand
*
* @return void
*/
- public function __construct(Incident $incident, $status, $message, User $user)
+ public function __construct(Incident $incident, $status, $message, $component_id, $component_status, User $user)
{
$this->incident = $incident;
$this->status = $status;
$this->message = $message;
+ $this->component_id = $component_id;
+ $this->component_status = $component_status;
$this->user = $user;
}
}
diff --git a/app/Bus/Commands/Schedule/CreateScheduleCommand.php b/app/Bus/Commands/Schedule/CreateScheduleCommand.php
index ebeec0d839f..d40d68df148 100644
--- a/app/Bus/Commands/Schedule/CreateScheduleCommand.php
+++ b/app/Bus/Commands/Schedule/CreateScheduleCommand.php
@@ -60,6 +60,13 @@ final class CreateScheduleCommand
*/
public $components;
+ /**
+ * Whether to notify that the incident was reported.
+ *
+ * @var bool
+ */
+ public $notify;
+
/**
* The validation rules.
*
@@ -72,6 +79,7 @@ final class CreateScheduleCommand
'scheduled_at' => 'required|string',
'completed_at' => 'nullable|string',
'components' => 'nullable|array',
+ 'notify' => 'nullable|bool',
];
/**
@@ -83,10 +91,11 @@ final class CreateScheduleCommand
* @param string $scheduled_at
* @param string $completed_at
* @param array $components
+ * @param bool $notify
*
* @return void
*/
- public function __construct($name, $message, $status, $scheduled_at, $completed_at, array $components = [])
+ public function __construct($name, $message, $status, $scheduled_at, $completed_at, $components, $notify)
{
$this->name = $name;
$this->message = $message;
@@ -94,5 +103,6 @@ public function __construct($name, $message, $status, $scheduled_at, $completed_
$this->scheduled_at = $scheduled_at;
$this->completed_at = $completed_at;
$this->components = $components;
+ $this->notify = $notify;
}
}
diff --git a/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php b/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php
index 1e1ecb4ee8e..2438658d71b 100644
--- a/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php
+++ b/app/Bus/Events/Schedule/ScheduleWasCreatedEvent.php
@@ -36,18 +36,27 @@ final class ScheduleWasCreatedEvent implements ActionInterface, ScheduleEventInt
*/
public $schedule;
+ /**
+ * Whether to notify that the incident was reported.
+ *
+ * @var bool
+ */
+ public $notify;
+
/**
* Create a new schedule was created event instance.
*
* @param \CachetHQ\Cachet\Models\User $user
* @param \CachetHQ\Cachet\Models\Schedule $schedule
+ * @param bool notify
*
* @return void
*/
- public function __construct(User $user, Schedule $schedule)
+ public function __construct(User $user, Schedule $schedule, $notify = false)
{
$this->user = $user;
$this->schedule = $schedule;
+ $this->notify = $notify;
}
/**
diff --git a/app/Bus/Events/User/UserWasInvitedEvent.php b/app/Bus/Events/User/UserWasInvitedEvent.php
index 529efce0a81..c2a65db9c18 100644
--- a/app/Bus/Events/User/UserWasInvitedEvent.php
+++ b/app/Bus/Events/User/UserWasInvitedEvent.php
@@ -16,7 +16,7 @@
/**
* This is the user was invited event class.
*
- * @author Joseph Cohen
+ * @author Joseph Cohen
* @author Graham Campbell
* @author James Brooks
*/
diff --git a/app/Bus/Handlers/Commands/Component/CreateComponentCommandHandler.php b/app/Bus/Handlers/Commands/Component/CreateComponentCommandHandler.php
index 7cc941e0eb4..867f49fbeaa 100644
--- a/app/Bus/Handlers/Commands/Component/CreateComponentCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Component/CreateComponentCommandHandler.php
@@ -53,6 +53,15 @@ public function handle(CreateComponentCommand $command)
{
$component = Component::create($this->filter($command));
+ // Sync the tags into the component.
+ if ($command->tags) {
+ collect(preg_split('/ ?, ?/', $command->tags))->filter()->map(function ($tag) {
+ return trim($tag);
+ })->pipe(function ($tags) use ($component) {
+ $component->attachTags($tags);
+ });
+ }
+
event(new ComponentWasCreatedEvent($this->auth->user(), $component));
return $component;
@@ -61,7 +70,7 @@ public function handle(CreateComponentCommand $command)
/**
* Filter the command data.
*
- * @param \CachetHQ\Cachet\Bus\Commands\Incident\CreateComponentCommand $command
+ * @param \CachetHQ\Cachet\Bus\Commands\Component\CreateComponentCommand $command
*
* @return array
*/
diff --git a/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php b/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php
index 736ff23cce4..f0ad1e44faa 100644
--- a/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Component/UpdateComponentCommandHandler.php
@@ -50,10 +50,21 @@ public function handle(UpdateComponentCommand $command)
$component = $command->component;
$originalStatus = $component->status;
- event(new ComponentStatusWasChangedEvent($this->auth->user(), $component, $originalStatus, $command->status, $command->silent));
+ if ($command->status && (int) $originalStatus !== (int) $command->status) {
+ event(new ComponentStatusWasChangedEvent($this->auth->user(), $component, $originalStatus, $command->status, $command->silent));
+ }
$component->update($this->filter($command));
+ // Sync the tags into the component.
+ if ($command->tags) {
+ collect(preg_split('/ ?, ?/', $command->tags))->filter()->map(function ($tag) {
+ return trim($tag);
+ })->pipe(function ($tags) use ($component) {
+ $component->syncTags($tags);
+ });
+ }
+
event(new ComponentWasUpdatedEvent($this->auth->user(), $component));
return $component;
@@ -62,7 +73,7 @@ public function handle(UpdateComponentCommand $command)
/**
* Filter the command data.
*
- * @param \CachetHQ\Cachet\Bus\Commands\Incident\UpdateComponentCommand $command
+ * @param \CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand $command
*
* @return array
*/
diff --git a/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php b/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php
index 4504d905cac..2b3bcf77b8b 100644
--- a/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Incident/CreateIncidentCommandHandler.php
@@ -15,6 +15,7 @@
use CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand;
use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasCreatedEvent;
use CachetHQ\Cachet\Bus\Exceptions\Incident\InvalidIncidentTimestampException;
+use CachetHQ\Cachet\Bus\Handlers\Traits\StoresMeta;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\Incident;
use CachetHQ\Cachet\Models\IncidentTemplate;
@@ -22,8 +23,8 @@
use CachetHQ\Cachet\Services\Dates\DateFactory;
use Carbon\Carbon;
use Illuminate\Contracts\Auth\Guard;
-use Twig_Environment;
-use Twig_Loader_Array;
+use Twig\Environment as Twig_Environment;
+use Twig\Loader\ArrayLoader as Twig_Loader_Array;
/**
* This is the create incident command handler.
@@ -32,6 +33,8 @@
*/
class CreateIncidentCommandHandler
{
+ use StoresMeta;
+
/**
* The authentication guard instance.
*
@@ -46,6 +49,8 @@ class CreateIncidentCommandHandler
*/
protected $dates;
+ protected $twigConfig;
+
/**
* Create a new create incident command handler instance.
*
@@ -58,6 +63,8 @@ public function __construct(Guard $auth, DateFactory $dates)
{
$this->auth = $auth;
$this->dates = $dates;
+
+ $this->twigConfig = config('cachet.twig');
}
/**
@@ -70,6 +77,7 @@ public function __construct(Guard $auth, DateFactory $dates)
public function handle(CreateIncidentCommand $command)
{
$data = [
+ 'user_id' => $this->auth->user()->id,
'name' => $command->name,
'status' => $command->status,
'visible' => $command->visible,
@@ -103,19 +111,12 @@ public function handle(CreateIncidentCommand $command)
// Store any meta?
if ($meta = $command->meta) {
- foreach ($meta as $key => $value) {
- Meta::create([
- 'key' => $key,
- 'value' => $value,
- 'meta_type' => 'incidents',
- 'meta_id' => $incident->id,
- ]);
- }
+ $this->storeMeta($command->meta, 'incidents', $incident->id);
}
// Update the component.
if ($component = Component::find($command->component_id)) {
- dispatch(new UpdateComponentCommand(
+ execute(new UpdateComponentCommand(
Component::find($command->component_id),
null,
null,
@@ -125,7 +126,8 @@ public function handle(CreateIncidentCommand $command)
null,
null,
null,
- false
+ null,
+ true // Silent mode
));
}
@@ -134,6 +136,37 @@ public function handle(CreateIncidentCommand $command)
return $incident;
}
+ protected function sandboxedTwigTemplateData(string $templateData)
+ {
+ if (!$templateData) {
+ return '';
+ }
+
+ $policy = new \Twig\Sandbox\SecurityPolicy(
+ $this->twigConfig['tags'],
+ $this->twigConfig['filters'],
+ $this->twigConfig['methods'],
+ $this->twigConfig['props'],
+ $this->twigConfig['functions']
+ );
+
+ $sandbox = new \Twig\Extension\SandboxExtension($policy);
+
+ $templateBasicLoader = new Twig_Loader_Array([
+ 'firstStageLoader' => $templateData,
+ ]);
+
+ $sandBoxBasicLoader = new Twig_Loader_Array([
+ 'secondStageLoader' => '{% sandbox %}{% include "firstStageLoader" %} {% endsandbox %}',
+ ]);
+
+ $hardenedLoader = new \Twig\Loader\ChainLoader([$templateBasicLoader, $sandBoxBasicLoader]);
+ $twig = new Twig_Environment($hardenedLoader);
+ $twig->addExtension($sandbox);
+
+ return $twig;
+ }
+
/**
* Compiles an incident template into an incident message.
*
@@ -144,8 +177,7 @@ public function handle(CreateIncidentCommand $command)
*/
protected function parseTemplate(IncidentTemplate $template, CreateIncidentCommand $command)
{
- $env = new Twig_Environment(new Twig_Loader_Array([]));
- $template = $env->createTemplate($template->template);
+ $template = $this->sandboxedTwigTemplateData($template->template);
$vars = array_merge($command->template_vars, [
'incident' => [
@@ -161,6 +193,6 @@ protected function parseTemplate(IncidentTemplate $template, CreateIncidentComma
],
]);
- return $template->render($vars);
+ return $template->render('secondStageLoader', $vars);
}
}
diff --git a/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php b/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php
index 00bf9f8d3ac..c8592025383 100644
--- a/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Incident/UpdateIncidentCommandHandler.php
@@ -15,13 +15,12 @@
use CachetHQ\Cachet\Bus\Commands\Incident\UpdateIncidentCommand;
use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasUpdatedEvent;
use CachetHQ\Cachet\Bus\Exceptions\Incident\InvalidIncidentTimestampException;
+use CachetHQ\Cachet\Bus\Handlers\Traits\StoresMeta;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\Incident;
use CachetHQ\Cachet\Models\IncidentTemplate;
use CachetHQ\Cachet\Services\Dates\DateFactory;
use Illuminate\Contracts\Auth\Guard;
-use Twig_Environment;
-use Twig_Loader_Array;
/**
* This is the update incident command handler.
@@ -30,6 +29,8 @@
*/
class UpdateIncidentCommandHandler
{
+ use StoresMeta;
+
/**
* The authentication guard instance.
*
@@ -44,6 +45,11 @@ class UpdateIncidentCommandHandler
*/
protected $dates;
+ /**
+ * Twig configuration array.
+ */
+ protected $twigConfig;
+
/**
* Create a new update incident command handler instance.
*
@@ -56,6 +62,8 @@ public function __construct(Guard $auth, DateFactory $dates)
{
$this->auth = $auth;
$this->dates = $dates;
+
+ $this->twigConfig = $twigConfig = config('cachet.twig');
}
/**
@@ -86,9 +94,14 @@ public function handle(UpdateIncidentCommand $command)
// Rather than making lots of updates, just fill and save.
$incident->save();
+ // Store any meta?
+ if ($meta = $command->meta) {
+ $this->storeMeta($command->meta, 'incidents', $incident->id);
+ }
+
// Update the component.
if ($component = Component::find($command->component_id)) {
- dispatch(new UpdateComponentCommand(
+ execute(new UpdateComponentCommand(
Component::find($command->component_id),
null,
null,
@@ -98,7 +111,8 @@ public function handle(UpdateIncidentCommand $command)
null,
null,
null,
- false
+ null,
+ true // Silent mode
));
}
@@ -132,6 +146,32 @@ protected function filter(UpdateIncidentCommand $command)
});
}
+ protected function sandboxedTwigTemplateData(string $templateData)
+ {
+ $policy = new \Twig\Sandbox\SecurityPolicy(
+ $this->twigConfig['tags'],
+ $this->twigConfig['filters'],
+ $this->twigConfig['methods'],
+ $this->twigConfig['props'],
+ $this->twigConfig['functions']
+ );
+ $sandbox = new \Twig\Extension\SandboxExtension($policy);
+
+ $templateBasicLoader = new \Twig\Loader\ArrayLoader([
+ 'firstStageLoader' => $templateData,
+ ]);
+
+ $sandBoxBasicLoader = new \Twig\Loader\ArrayLoader([
+ 'secondStageLoader' => '{% sandbox %}{% include "firstStageLoader" %} {% endsandbox %}',
+ ]);
+
+ $hardenedLoader = new \Twig\Loader\ChainLoader([$templateBasicLoader, $sandBoxBasicLoader]);
+ $twig = new \Twig\Environment($hardenedLoader);
+ $twig->addExtension($sandbox);
+
+ return $twig;
+ }
+
/**
* Compiles an incident template into an incident message.
*
@@ -142,8 +182,7 @@ protected function filter(UpdateIncidentCommand $command)
*/
protected function parseTemplate(IncidentTemplate $template, UpdateIncidentCommand $command)
{
- $env = new Twig_Environment(new Twig_Loader_Array([]));
- $template = $env->createTemplate($template->template);
+ $template = $this->sandboxedTwigTemplateData($template->template);
$vars = array_merge($command->template_vars, [
'incident' => [
@@ -159,6 +198,6 @@ protected function parseTemplate(IncidentTemplate $template, UpdateIncidentComma
],
]);
- return $template->render($vars);
+ return $template->render('secondStageLoader', $vars);
}
}
diff --git a/app/Bus/Handlers/Commands/IncidentUpdate/CreateIncidentUpdateCommandHandler.php b/app/Bus/Handlers/Commands/IncidentUpdate/CreateIncidentUpdateCommandHandler.php
index 09fe9d9b104..20dd2c84a93 100644
--- a/app/Bus/Handlers/Commands/IncidentUpdate/CreateIncidentUpdateCommandHandler.php
+++ b/app/Bus/Handlers/Commands/IncidentUpdate/CreateIncidentUpdateCommandHandler.php
@@ -63,7 +63,7 @@ public function handle(CreateIncidentUpdateCommand $command)
$update = IncidentUpdate::create($data);
// Update the original incident with the new status.
- dispatch(new UpdateIncidentCommand(
+ execute(new UpdateIncidentCommand(
$command->incident,
null,
$command->status,
diff --git a/app/Bus/Handlers/Commands/Invite/ClaimInviteCommandHandler.php b/app/Bus/Handlers/Commands/Invite/ClaimInviteCommandHandler.php
index 6499eae8ad1..bd2603bebbd 100644
--- a/app/Bus/Handlers/Commands/Invite/ClaimInviteCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Invite/ClaimInviteCommandHandler.php
@@ -20,7 +20,7 @@ class ClaimInviteCommandHandler
/**
* Handle the claim invite command.
*
- * @param \CachetHQ\Cachet\Bus\Commands\User\ClaimInviteCommand $command
+ * @param \CachetHQ\Cachet\Bus\Commands\Invite\ClaimInviteCommand $command
*
* @return void
*/
diff --git a/app/Bus/Handlers/Commands/Metric/CreateMetricPointCommandHandler.php b/app/Bus/Handlers/Commands/Metric/CreateMetricPointCommandHandler.php
index 4e065de715f..8fdbe1ca21c 100644
--- a/app/Bus/Handlers/Commands/Metric/CreateMetricPointCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Metric/CreateMetricPointCommandHandler.php
@@ -79,7 +79,7 @@ public function handle(CreateMetricPointCommand $command)
*/
protected function findOrCreatePoint(CreateMetricPointCommand $command)
{
- $buffer = Carbon::now()->subMinutes($command->metric->threshold);
+ $buffer = Carbon::now()->subMinutes($command->metric->threshold - 1)->startOfMinute();
if ($point = MetricPoint::where('metric_id', '=', $command->metric->id)->where('value', '=', $command->value)->where('created_at', '>=', $buffer)->first()) {
return $point;
diff --git a/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php b/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php
index 23de4933836..9069eadb9c0 100644
--- a/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Schedule/CreateScheduleCommandHandler.php
@@ -66,8 +66,7 @@ public function handle(CreateScheduleCommand $command)
{
try {
$schedule = Schedule::create($this->filter($command));
-
- event(new ScheduleWasCreatedEvent($this->auth->user(), $schedule));
+ event(new ScheduleWasCreatedEvent($this->auth->user(), $schedule, (bool) $command->notify));
} catch (InvalidArgumentException $e) {
throw new ValidationException(new MessageBag([$e->getMessage()]));
}
@@ -96,6 +95,7 @@ protected function filter(CreateScheduleCommand $command)
'status' => $command->status,
'scheduled_at' => $scheduledAt,
'completed_at' => $completedAt,
+ 'notify' => $command->notify,
];
$availableParams = array_filter($params, function ($val) {
diff --git a/app/Bus/Handlers/Commands/Subscriber/SubscribeSubscriberCommandHandler.php b/app/Bus/Handlers/Commands/Subscriber/SubscribeSubscriberCommandHandler.php
index 6a9839c7285..1dde43da4a8 100644
--- a/app/Bus/Handlers/Commands/Subscriber/SubscribeSubscriberCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Subscriber/SubscribeSubscriberCommandHandler.php
@@ -58,7 +58,7 @@ public function handle(SubscribeSubscriberCommand $command)
});
if ($command->verified) {
- dispatch(new VerifySubscriberCommand($subscriber));
+ execute(new VerifySubscriberCommand($subscriber));
} else {
$subscriber->notify(new VerifySubscriptionNotification());
}
diff --git a/app/Bus/Handlers/Commands/Subscriber/UpdateSubscriberSubscriptionCommandHandler.php b/app/Bus/Handlers/Commands/Subscriber/UpdateSubscriberSubscriptionCommandHandler.php
index 24a7d27f567..5e8a1dd5a8c 100644
--- a/app/Bus/Handlers/Commands/Subscriber/UpdateSubscriberSubscriptionCommandHandler.php
+++ b/app/Bus/Handlers/Commands/Subscriber/UpdateSubscriberSubscriptionCommandHandler.php
@@ -36,7 +36,7 @@ public function handle(UpdateSubscriberSubscriptionCommand $command)
$subscriber = $command->subscriber;
$subscriptions = $command->subscriptions ?: [];
- $components = Component::all();
+ $components = Component::enabled()->get();
$updateSubscriptions = $components->filter(function ($item) use ($subscriptions) {
return in_array($item->id, $subscriptions);
diff --git a/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php b/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php
index 33c77fb2961..6ecdbfca3a0 100644
--- a/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php
+++ b/app/Bus/Handlers/Events/Component/SendComponentUpdateEmailNotificationHandler.php
@@ -12,12 +12,20 @@
namespace CachetHQ\Cachet\Bus\Handlers\Events\Component;
use CachetHQ\Cachet\Bus\Events\Component\ComponentStatusWasChangedEvent;
+use CachetHQ\Cachet\Integrations\Contracts\System;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\Subscriber;
use CachetHQ\Cachet\Notifications\Component\ComponentStatusChangedNotification;
class SendComponentUpdateEmailNotificationHandler
{
+ /**
+ * The system instance.
+ *
+ * @var \CachetHQ\Cachet\Integrations\Contracts\System
+ */
+ protected $system;
+
/**
* The subscriber instance.
*
@@ -32,8 +40,9 @@ class SendComponentUpdateEmailNotificationHandler
*
* @return void
*/
- public function __construct(Subscriber $subscriber)
+ public function __construct(System $system, Subscriber $subscriber)
{
+ $this->system = $system;
$this->subscriber = $subscriber;
}
@@ -48,8 +57,8 @@ public function handle(ComponentStatusWasChangedEvent $event)
{
$component = $event->component;
- // If we're silent, then don't send this.
- if ($event->silent) {
+ // If we're silent or the notifications are suppressed don't send this.
+ if ($event->silent || !$this->system->canNotifySubscribers()) {
return;
}
diff --git a/app/Bus/Handlers/Events/Incident/SendIncidentEmailNotificationHandler.php b/app/Bus/Handlers/Events/Incident/SendIncidentEmailNotificationHandler.php
index b85b8fc865e..d30916d10de 100644
--- a/app/Bus/Handlers/Events/Incident/SendIncidentEmailNotificationHandler.php
+++ b/app/Bus/Handlers/Events/Incident/SendIncidentEmailNotificationHandler.php
@@ -12,11 +12,19 @@
namespace CachetHQ\Cachet\Bus\Handlers\Events\Incident;
use CachetHQ\Cachet\Bus\Events\Incident\IncidentWasCreatedEvent;
+use CachetHQ\Cachet\Integrations\Contracts\System;
use CachetHQ\Cachet\Models\Subscriber;
use CachetHQ\Cachet\Notifications\Incident\NewIncidentNotification;
class SendIncidentEmailNotificationHandler
{
+ /**
+ * The system instance.
+ *
+ * @var \CachetHQ\Cachet\Integrations\Contracts\System
+ */
+ protected $system;
+
/**
* The subscriber instance.
*
@@ -27,12 +35,14 @@ class SendIncidentEmailNotificationHandler
/**
* Create a new send incident email notification handler.
*
- * @param \CachetHQ\Cachet\Models\Subscriber $subscriber
+ * @param \CachetHQ\Cachet\Integrations\Contracts\System $system
+ * @param \CachetHQ\Cachet\Models\Subscriber $subscriber
*
* @return void
*/
- public function __construct(Subscriber $subscriber)
+ public function __construct(System $system, Subscriber $subscriber)
{
+ $this->system = $system;
$this->subscriber = $subscriber;
}
@@ -47,7 +57,7 @@ public function handle(IncidentWasCreatedEvent $event)
{
$incident = $event->incident;
- if (!$event->notify) {
+ if (!$event->notify || !$this->system->canNotifySubscribers()) {
return false;
}
diff --git a/app/Bus/Handlers/Events/IncidentUpdate/SendIncidentUpdateEmailNotificationHandler.php b/app/Bus/Handlers/Events/IncidentUpdate/SendIncidentUpdateEmailNotificationHandler.php
index 7b392200758..447604816e4 100644
--- a/app/Bus/Handlers/Events/IncidentUpdate/SendIncidentUpdateEmailNotificationHandler.php
+++ b/app/Bus/Handlers/Events/IncidentUpdate/SendIncidentUpdateEmailNotificationHandler.php
@@ -12,11 +12,19 @@
namespace CachetHQ\Cachet\Bus\Handlers\Events\IncidentUpdate;
use CachetHQ\Cachet\Bus\Events\IncidentUpdate\IncidentUpdateWasReportedEvent;
+use CachetHQ\Cachet\Integrations\Contracts\System;
use CachetHQ\Cachet\Models\Subscriber;
use CachetHQ\Cachet\Notifications\IncidentUpdate\IncidentUpdatedNotification;
class SendIncidentUpdateEmailNotificationHandler
{
+ /**
+ * The system instance.
+ *
+ * @var \CachetHQ\Cachet\Integrations\Contracts\System
+ */
+ protected $system;
+
/**
* The subscriber instance.
*
@@ -27,12 +35,14 @@ class SendIncidentUpdateEmailNotificationHandler
/**
* Create a new send incident email notification handler.
*
- * @param \CachetHQ\Cachet\Models\Subscriber $subscriber
+ * @param \CachetHQ\Cachet\Integrations\Contracts\System $system
+ * @param \CachetHQ\Cachet\Models\Subscriber $subscriber
*
* @return void
*/
- public function __construct(Subscriber $subscriber)
+ public function __construct(System $system, Subscriber $subscriber)
{
+ $this->system = $system;
$this->subscriber = $subscriber;
}
@@ -48,8 +58,8 @@ public function handle(IncidentUpdateWasReportedEvent $event)
$update = $event->update;
$incident = $update->incident;
- // Only send emails for public incidents.
- if (!$incident->visible) {
+ // Only send emails for public incidents while the system is not under scheduled maintenance.
+ if (!$incident->visible || !$this->system->canNotifySubscribers()) {
return;
}
diff --git a/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php b/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php
index 11e6b377034..84e9db31d61 100644
--- a/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php
+++ b/app/Bus/Handlers/Events/Schedule/SendScheduleEmailNotificationHandler.php
@@ -51,6 +51,9 @@ public function __construct(Subscriber $subscriber)
public function handle(ScheduleEventInterface $event)
{
$schedule = $event->schedule;
+ if (!$event->notify) {
+ return false;
+ }
// First notify all global subscribers.
$globalSubscribers = $this->subscriber->isVerified()->isGlobal()->get()->each(function ($subscriber) use ($schedule) {
diff --git a/app/Bus/Handlers/Jobs/System/SendBeaconJobHandler.php b/app/Bus/Handlers/Jobs/System/SendBeaconJobHandler.php
index 0d3025dc665..da0eb87d1bb 100644
--- a/app/Bus/Handlers/Jobs/System/SendBeaconJobHandler.php
+++ b/app/Bus/Handlers/Jobs/System/SendBeaconJobHandler.php
@@ -44,7 +44,7 @@ public function __construct(Beacon $beacon)
/**
* Handle the send beacon job.
*
- * @param \CachetHQ\Cachet\Bus\Jobs\SendBeaconJob $job
+ * @param \CachetHQ\Cachet\Bus\Jobs\System\SendBeaconJob $job
*
* @return void
*/
diff --git a/app/Bus/Handlers/Traits/StoresMeta.php b/app/Bus/Handlers/Traits/StoresMeta.php
new file mode 100644
index 00000000000..e5272ba51b4
--- /dev/null
+++ b/app/Bus/Handlers/Traits/StoresMeta.php
@@ -0,0 +1,81 @@
+ $value) {
+ $modelInstance = call_user_func(
+ [$metaModel, 'firstOrNew'],
+ [
+ 'key' => $key,
+ 'meta_type' => $metaType,
+ 'meta_id' => $metaId,
+ ]
+ );
+
+ $value = $this->removeEmptyValues($value);
+ if (!empty($value)) {
+ $modelInstance->setAttribute('value', $value);
+ $modelInstance->save();
+ continue;
+ }
+
+ // The value is empty, remove the row
+ if ($modelInstance->exists) {
+ $modelInstance->delete();
+ }
+ }
+ }
+
+ /**
+ * Determine if a Value is empty.
+ *
+ * @param mixed $values
+ *
+ * @return array|mixed
+ */
+ protected function removeEmptyValues($values)
+ {
+ if (!is_array($values)) {
+ return empty($values) ? null : $values;
+ }
+
+ foreach ($values as $key => $value) {
+ if (!empty($value)) {
+ continue;
+ }
+ unset($values[$key]);
+ }
+
+ return $values;
+ }
+}
diff --git a/app/Composers/AppComposer.php b/app/Composers/AppComposer.php
index 5776e456e82..822b30f2615 100644
--- a/app/Composers/AppComposer.php
+++ b/app/Composers/AppComposer.php
@@ -61,7 +61,13 @@ public function __construct(DateFactory $dates, Repository $config)
*/
public function compose(View $view)
{
- $view->withAboutApp(Markdown::convertToHtml($this->config->get('setting.app_about')));
+ if ($this->config->get('setting.app_about')) {
+ $about = Markdown::convertToHtml($this->config->get('setting.app_about'));
+ } else {
+ $about = '';
+ }
+
+ $view->withAboutApp($about);
$view->withAppAnalytics($this->config->get('setting.app_analytics'));
$view->withAppAnalyticsGoSquared($this->config->get('setting.app_analytics_gs'));
$view->withAppAnalyticsPiwikUrl($this->config->get('setting.app_analytics_piwik_url'));
diff --git a/app/Composers/Modules/ComponentsComposer.php b/app/Composers/ComponentsComposer.php
similarity index 93%
rename from app/Composers/Modules/ComponentsComposer.php
rename to app/Composers/ComponentsComposer.php
index 10555c21d88..1fac9423df7 100644
--- a/app/Composers/Modules/ComponentsComposer.php
+++ b/app/Composers/ComponentsComposer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Composers\Modules;
+namespace CachetHQ\Cachet\Composers;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\ComponentGroup;
@@ -53,7 +53,7 @@ public function __construct(Guard $guard)
public function compose(View $view)
{
$componentGroups = $this->getVisibleGroupedComponents();
- $ungroupedComponents = Component::ungrouped()->get();
+ $ungroupedComponents = Component::ungrouped()->orderBy('status', 'desc')->get();
$view->withComponentGroups($componentGroups)
->withUngroupedComponents($ungroupedComponents);
diff --git a/app/Composers/CurrentUserComposer.php b/app/Composers/CurrentUserComposer.php
index f7f8c35df94..d7afe3b9603 100644
--- a/app/Composers/CurrentUserComposer.php
+++ b/app/Composers/CurrentUserComposer.php
@@ -13,6 +13,7 @@
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Auth;
+use McCool\LaravelAutoPresenter\Facades\AutoPresenter;
/**
* This is the current user composer class.
@@ -32,6 +33,6 @@ class CurrentUserComposer
*/
public function compose(View $view)
{
- $view->withCurrentUser(Auth::user());
+ $view->withCurrentUser(AutoPresenter::decorate(Auth::user()));
}
}
diff --git a/app/Composers/DashboardComposer.php b/app/Composers/DashboardComposer.php
index 1bbdf3eae06..c5ccef937ce 100644
--- a/app/Composers/DashboardComposer.php
+++ b/app/Composers/DashboardComposer.php
@@ -26,6 +26,69 @@
*/
class DashboardComposer
{
+ /**
+ * The component count.
+ *
+ * @var int
+ */
+ protected $componentCount;
+
+ /**
+ * The incident count.
+ *
+ * @var int
+ */
+ protected $incidentCount;
+
+ /**
+ * The incident template count.
+ *
+ * @var int
+ */
+ protected $incidentTemplateCount;
+
+ /**
+ * The schedule count.
+ *
+ * @var int
+ */
+ protected $scheduleCount;
+
+ /**
+ * The subscriber count.
+ *
+ * @var int
+ */
+ protected $subscriberCount;
+
+ /**
+ * Create a new dashboard composer instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ if (is_null($this->componentCount)) {
+ $this->componentCount = Component::count();
+ }
+
+ if (is_null($this->incidentCount)) {
+ $this->incidentCount = Incident::count();
+ }
+
+ if (is_null($this->incidentTemplateCount)) {
+ $this->incidentTemplateCount = IncidentTemplate::count();
+ }
+
+ if (is_null($this->scheduleCount)) {
+ $this->scheduleCount = Schedule::count();
+ }
+
+ if (is_null($this->subscriberCount)) {
+ $this->subscriberCount = Subscriber::isVerified()->count();
+ }
+ }
+
/**
* Bind data to the view.
*
@@ -35,11 +98,11 @@ class DashboardComposer
*/
public function compose(View $view)
{
- $view->withComponentCount(Component::count());
- $view->withIncidentCount(Incident::count());
- $view->withIncidentTemplateCount(IncidentTemplate::count());
- $view->withScheduleCount(Schedule::count());
- $view->withSubscriberCount(Subscriber::isVerified()->count());
+ $view->withComponentCount($this->componentCount);
+ $view->withIncidentCount($this->incidentCount);
+ $view->withIncidentTemplateCount($this->incidentTemplateCount);
+ $view->withScheduleCount($this->scheduleCount);
+ $view->withSubscriberCount($this->subscriberCount);
$view->withIsWriteable(is_writable(app()->bootstrapPath().'/cachet'));
}
}
diff --git a/app/Composers/Modules/MetricsComposer.php b/app/Composers/MetricsComposer.php
similarity index 97%
rename from app/Composers/Modules/MetricsComposer.php
rename to app/Composers/MetricsComposer.php
index ba49156a916..e6e32e9f7f1 100644
--- a/app/Composers/Modules/MetricsComposer.php
+++ b/app/Composers/MetricsComposer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Composers\Modules;
+namespace CachetHQ\Cachet\Composers;
use CachetHQ\Cachet\Models\Metric;
use Illuminate\Contracts\Auth\Guard;
diff --git a/app/Composers/ModuleComposer.php b/app/Composers/ModuleComposer.php
deleted file mode 100644
index b31af2950e4..00000000000
--- a/app/Composers/ModuleComposer.php
+++ /dev/null
@@ -1,77 +0,0 @@
-
- * @author James Brooks
- */
-class ModuleComposer
-{
- /**
- * The application instance.
- *
- * @var \Illuminate\Contracts\Foundation\Application
- */
- protected $app;
-
- /**
- * The modules manager instance.
- *
- * @var \CachetHQ\Cachet\Services\Modules\Manager
- */
- protected $manager;
-
- /**
- * Create a new modules composer.
- *
- * @param \Illuminate\Contracts\Foundation\Application $app
- * @param \CachetHQ\Cachet\Services\Modules\Manager $manager
- *
- * @return void
- */
- public function __construct(Application $app, Manager $manager)
- {
- $this->app = $app;
- $this->manager = $manager;
- }
-
- /**
- * Bind data to the view.
- *
- * @param \Illuminate\Contracts\View\View $view
- *
- * @return void
- */
- public function compose(View $view)
- {
- $key = $view->getName();
-
- $view->with('view', $key);
-
- $modules = "view.modules: {$key}";
- $groups = "view.groups: {$key}";
-
- $modules = $this->app->bound($modules) ? $this->app[$modules] : [];
- $groups = $this->app->bound($groups) ? $this->app[$groups] : [];
-
- $modules = $this->manager->groupModules($modules, $groups);
-
- $view->withModules($modules);
- }
-}
diff --git a/app/Composers/Modules/ScheduledComposer.php b/app/Composers/ScheduledComposer.php
similarity index 83%
rename from app/Composers/Modules/ScheduledComposer.php
rename to app/Composers/ScheduledComposer.php
index 642984f5d2f..0e65b4a8924 100644
--- a/app/Composers/Modules/ScheduledComposer.php
+++ b/app/Composers/ScheduledComposer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Composers\Modules;
+namespace CachetHQ\Cachet\Composers;
use CachetHQ\Cachet\Models\Schedule;
use Illuminate\Contracts\View\View;
@@ -31,7 +31,7 @@ class ScheduledComposer
*/
public function compose(View $view)
{
- $scheduledMaintenance = Schedule::futureSchedules()->orderBy('scheduled_at')->get();
+ $scheduledMaintenance = Schedule::uncompleted()->orderBy('scheduled_at')->get();
$view->withScheduledMaintenance($scheduledMaintenance);
}
diff --git a/app/Composers/Modules/StatusComposer.php b/app/Composers/StatusComposer.php
similarity index 80%
rename from app/Composers/Modules/StatusComposer.php
rename to app/Composers/StatusComposer.php
index 6449bfe5da8..6b953343e9a 100644
--- a/app/Composers/Modules/StatusComposer.php
+++ b/app/Composers/StatusComposer.php
@@ -9,10 +9,11 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Composers\Modules;
+namespace CachetHQ\Cachet\Composers;
use CachetHQ\Cachet\Integrations\Contracts\System;
use Illuminate\Contracts\View\View;
+use Illuminate\Support\Arr;
/**
* This is the status composer.
@@ -50,6 +51,9 @@ public function __construct(System $system)
*/
public function compose(View $view)
{
- $view->with($this->system->getStatus());
+ $status = $this->system->getStatus();
+
+ $view->withSystemStatus(Arr::get($status, 'system_status'));
+ $view->withSystemMessage(Arr::get($status, 'system_message'));
}
}
diff --git a/app/Composers/Modules/StickiedComposer.php b/app/Composers/StickiedComposer.php
similarity index 96%
rename from app/Composers/Modules/StickiedComposer.php
rename to app/Composers/StickiedComposer.php
index 880458ab991..82e357f395e 100644
--- a/app/Composers/Modules/StickiedComposer.php
+++ b/app/Composers/StickiedComposer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Composers\Modules;
+namespace CachetHQ\Cachet\Composers;
use CachetHQ\Cachet\Models\Incident;
use CachetHQ\Cachet\Services\Dates\DateFactory;
diff --git a/app/Composers/Modules/TimelineComposer.php b/app/Composers/TimelineComposer.php
similarity index 93%
rename from app/Composers/Modules/TimelineComposer.php
rename to app/Composers/TimelineComposer.php
index 7064a00ccbd..0206a2dc722 100644
--- a/app/Composers/Modules/TimelineComposer.php
+++ b/app/Composers/TimelineComposer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Composers\Modules;
+namespace CachetHQ\Cachet\Composers;
use Illuminate\Contracts\View\View;
diff --git a/app/Composers/TimezoneLocaleComposer.php b/app/Composers/TimezoneLocaleComposer.php
index 36bf71d94f8..5e3712d8e58 100644
--- a/app/Composers/TimezoneLocaleComposer.php
+++ b/app/Composers/TimezoneLocaleComposer.php
@@ -15,6 +15,7 @@
use DateTimeZone;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Contracts\View\View;
+use Illuminate\Support\Arr;
/**
* This is the timezone locale composer class.
@@ -58,7 +59,7 @@ public function compose(View $view)
$langs = array_map(function ($lang) use ($enabledLangs) {
$locale = basename($lang);
- return [$locale => array_get($enabledLangs, $locale, [
+ return [$locale => Arr::get($enabledLangs, $locale, [
'name' => $locale,
'subset' => null,
])];
diff --git a/app/Console/Commands/AppResetCommand.php b/app/Console/Commands/AppResetCommand.php
new file mode 100644
index 00000000000..3add76aa5c6
--- /dev/null
+++ b/app/Console/Commands/AppResetCommand.php
@@ -0,0 +1,76 @@
+
+ */
+class AppResetCommand extends Command
+{
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'app:reset';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Resets and installs the application';
+
+ /**
+ * The events instance.
+ *
+ * @var \Illuminate\Contracts\Events\Dispatcher
+ */
+ protected $events;
+
+ /**
+ * Create a new command instance.
+ *
+ * @return void
+ */
+ public function __construct(Dispatcher $events)
+ {
+ $this->events = $events;
+
+ parent::__construct();
+ }
+
+ /**
+ * Execute the console command.
+ *
+ * @return mixed
+ */
+ public function handle()
+ {
+ $this->events->fire('command.resetting', $this);
+ $this->events->fire('command.generatekey', $this);
+ $this->events->fire('command.cacheconfig', $this);
+ $this->events->fire('command.cacheroutes', $this);
+ $this->events->fire('command.publishvendors', $this);
+ $this->events->fire('command.resetmigrations', $this);
+ $this->events->fire('command.runmigrations', $this);
+ $this->events->fire('command.runseeding', $this);
+ $this->events->fire('command.updatecache', $this);
+ $this->events->fire('command.extrastuff', $this);
+ $this->events->fire('command.reset', $this);
+ }
+}
diff --git a/app/Console/Commands/AppUpdateCommand.php b/app/Console/Commands/AppUpdateCommand.php
new file mode 100644
index 00000000000..1aa4bd975eb
--- /dev/null
+++ b/app/Console/Commands/AppUpdateCommand.php
@@ -0,0 +1,73 @@
+
+ */
+class AppUpdateCommand extends Command
+{
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'app:update';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Updates the application';
+
+ /**
+ * The events instance.
+ *
+ * @var \Illuminate\Contracts\Events\Dispatcher
+ */
+ protected $events;
+
+ /**
+ * Create a new command instance.
+ *
+ * @return void
+ */
+ public function __construct(Dispatcher $events)
+ {
+ $this->events = $events;
+
+ parent::__construct();
+ }
+
+ /**
+ * Execute the console command.
+ *
+ * @return mixed
+ */
+ public function handle()
+ {
+ $this->events->fire('command.updating', $this);
+ $this->events->fire('command.cacheconfig', $this);
+ $this->events->fire('command.cacheroutes', $this);
+ $this->events->fire('command.publishvendors', $this);
+ $this->events->fire('command.runmigrations', $this);
+ $this->events->fire('command.updatecache', $this);
+ $this->events->fire('command.extrastuff', $this);
+ $this->events->fire('command.updated', $this);
+ }
+}
diff --git a/app/Console/Commands/BeaconCommand.php b/app/Console/Commands/BeaconCommand.php
index 5045f642cce..27cad3f0684 100644
--- a/app/Console/Commands/BeaconCommand.php
+++ b/app/Console/Commands/BeaconCommand.php
@@ -40,7 +40,7 @@ class BeaconCommand extends Command
*
* @return void
*/
- public function fire()
+ public function handle()
{
dispatch(new SendBeaconJob());
}
diff --git a/app/Console/Commands/DemoMetricPointSeederCommand.php b/app/Console/Commands/DemoMetricPointSeederCommand.php
index ed754b16966..d4e16235849 100644
--- a/app/Console/Commands/DemoMetricPointSeederCommand.php
+++ b/app/Console/Commands/DemoMetricPointSeederCommand.php
@@ -12,8 +12,6 @@
namespace CachetHQ\Cachet\Console\Commands;
use CachetHQ\Cachet\Models\MetricPoint;
-use DateInterval;
-use DateTime;
use Illuminate\Console\Command;
use Illuminate\Console\ConfirmableTrait;
use Symfony\Component\Console\Input\InputOption;
@@ -46,7 +44,7 @@ class DemoMetricPointSeederCommand extends Command
*
* @return void
*/
- public function fire()
+ public function handle()
{
if (!$this->confirmToProceed()) {
return;
@@ -66,16 +64,26 @@ protected function seedMetricPoints()
{
MetricPoint::truncate();
- // Generate 11 hours of metric points
- for ($i = 0; $i < 11; $i++) {
- $metricTime = (new DateTime())->sub(new DateInterval('PT'.$i.'H'));
+ $points = [];
- MetricPoint::create([
- 'metric_id' => 1,
- 'value' => random_int(1, 10),
- 'created_at' => $metricTime,
- 'updated_at' => $metricTime,
- ]);
+ // Generate 24 hours of metric points
+ for ($i = 0; $i <= 23; $i++) {
+ for ($j = 0; $j <= 59; $j++) {
+ $this->info("{$i}:{$j}");
+
+ $pointTime = date("Y-m-d {$i}:{$j}:00");
+
+ $points[] = [
+ 'metric_id' => 1,
+ 'value' => random_int(1, 10),
+ 'created_at' => $pointTime,
+ 'updated_at' => $pointTime,
+ ];
+ }
+ }
+
+ foreach (array_chunk($points, 100) as $chunk) {
+ MetricPoint::insert($chunk);
}
}
diff --git a/app/Console/Commands/DemoSeederCommand.php b/app/Console/Commands/DemoSeederCommand.php
index 4aeb730095d..3d496ca0667 100644
--- a/app/Console/Commands/DemoSeederCommand.php
+++ b/app/Console/Commands/DemoSeederCommand.php
@@ -79,12 +79,13 @@ public function __construct(Repository $settings)
*
* @return void
*/
- public function fire()
+ public function handle()
{
if (!$this->confirmToProceed()) {
return;
}
+ $this->seedUsers();
$this->seedActions();
$this->seedComponentGroups();
$this->seedComponents();
@@ -95,7 +96,6 @@ public function fire()
$this->seedSchedules();
$this->seedSettings();
$this->seedSubscribers();
- $this->seedUsers();
$this->info('Database seeded with demo data successfully!');
}
@@ -124,7 +124,7 @@ protected function seedComponentGroups()
'collapsed' => 0,
'visible' => ComponentGroup::VISIBLE_AUTHENTICATED,
], [
- 'name' => 'Alt Three',
+ 'name' => 'Services',
'order' => 2,
'collapsed' => 1,
'visible' => ComponentGroup::VISIBLE_GUEST,
@@ -168,26 +168,26 @@ protected function seedComponents()
'group_id' => 1,
'link' => 'https://cachethq.io',
], [
- 'name' => 'Blog',
- 'description' => 'The Alt Three Blog.',
+ 'name' => 'Laravel Artisan Cheatsheet',
+ 'description' => 'A searchable, bookmarkable cheatsheet for Laravel\'s Artisan commands.',
'status' => 1,
'order' => 0,
'group_id' => 2,
- 'link' => 'https://blog.alt-three.com',
+ 'link' => 'https://artisan.page',
], [
- 'name' => 'StyleCI',
- 'description' => 'The PHP Coding Style Service.',
+ 'name' => 'Checkmango',
+ 'description' => 'The Full-Stack A/B Testing Platform',
'status' => 1,
'order' => 1,
'group_id' => 2,
- 'link' => 'https://styleci.io',
+ 'link' => 'https://checkmango.com',
], [
'name' => 'GitHub',
'description' => '',
'status' => 1,
'order' => 0,
'group_id' => 0,
- 'link' => 'https://github.com/CachetHQ/Cachet',
+ 'link' => 'https://github.com/cachethq/cachet',
],
];
@@ -223,6 +223,7 @@ protected function seedIncidents()
'component_id' => 0,
'visible' => 1,
'stickied' => false,
+ 'user_id' => 1,
'occurred_at' => Carbon::now(),
],
[
@@ -232,6 +233,7 @@ protected function seedIncidents()
'component_id' => 0,
'visible' => 1,
'stickied' => false,
+ 'user_id' => 1,
'occurred_at' => Carbon::now(),
],
];
@@ -396,21 +398,18 @@ protected function seedSettings()
], [
'key' => 'app_refresh_rate',
'value' => '0',
- ], [
- 'key' => 'app_analytics',
- 'value' => 'UA-58442674-3',
- ], [
- 'key' => 'app_analytics_gs',
- 'value' => 'GSN-712462-P',
], [
'key' => 'display_graphs',
'value' => '1',
], [
'key' => 'app_about',
- 'value' => 'This is the demo instance of [Cachet](https://cachethq.io?ref=demo). The open source status page system, for everyone. An [Alt Three](https://alt-three.com) product.',
+ 'value' => 'This is the demo instance of [Cachet](https://cachethq.io?ref=demo). The open-source status page system, for everyone. 3.x is coming soon! [Read the announcement](https://github.com/cachethq/cachet/discussions/4342).',
], [
'key' => 'enable_subscribers',
'value' => '0',
+ ], [
+ 'key' => 'header',
+ 'value' => '',
],
];
@@ -442,7 +441,7 @@ protected function seedUsers()
[
'username' => 'test',
'password' => 'test123',
- 'email' => 'test@test.com',
+ 'email' => 'test@example.com',
'level' => User::LEVEL_ADMIN,
'api_key' => '9yMHsdioQosnyVK4iCVR',
],
diff --git a/app/Console/Commands/InstallCommand.php b/app/Console/Commands/InstallCommand.php
index c9df46e0f49..7c71cbc0de2 100644
--- a/app/Console/Commands/InstallCommand.php
+++ b/app/Console/Commands/InstallCommand.php
@@ -11,9 +11,12 @@
namespace CachetHQ\Cachet\Console\Commands;
+use CachetHQ\Cachet\Models\User;
use Dotenv\Dotenv;
use Dotenv\Exception\InvalidPathException;
use Illuminate\Console\Command;
+use Illuminate\Contracts\Console\Kernel;
+use Illuminate\Contracts\Events\Dispatcher;
/**
* This is the install command class.
@@ -36,25 +39,55 @@ class InstallCommand extends Command
*/
protected $description = 'Install Cachet';
+ /**
+ * The events instance.
+ *
+ * @var \Illuminate\Contracts\Events\Dispatcher
+ */
+ protected $events;
+
+ /**
+ * Create a new command instance.
+ *
+ * @param Dispatcher $events
+ */
+ public function __construct(Dispatcher $events)
+ {
+ $this->events = $events;
+
+ parent::__construct();
+ }
+
/**
* Execute the console command.
*
* @return void
*/
- public function fire()
+ public function handle()
{
- if (!$this->confirm('Do you want to install Cachet?')) {
- $this->line('Installation aborted. Goodbye!');
-
- return;
+ if ($this->confirm('Do you want to configure Cachet before installing?')) {
+ $this->configureEnvironmentFile();
+ $this->configureKey();
+ $this->configureDatabase();
+ $this->configureDrivers();
+ $this->configureMail();
+ $this->configureCachet();
+ $this->configureUser();
}
- $this->configureEnvironmentFile();
- $this->configureKey();
- $this->configureDatabase();
- $this->configureDrivers();
- $this->configureMail();
- $this->configureCachet();
+ $this->line('Installing Cachet...');
+
+ $this->events->fire('command.installing', $this);
+ $this->events->fire('command.generatekey', $this);
+ $this->events->fire('command.cacheconfig', $this);
+ $this->events->fire('command.cacheroutes', $this);
+ $this->events->fire('command.publishvendors', $this);
+ $this->events->fire('command.runmigrations', $this);
+ $this->events->fire('command.runseeding', $this);
+ $this->events->fire('command.updatecache', $this);
+ $this->events->fire('command.linkstorage', $this);
+ $this->events->fire('command.extrastuff', $this);
+ $this->events->fire('command.installed', $this);
$this->info('Cachet is installed ⚡');
}
@@ -110,7 +143,7 @@ protected function configureDatabase(array $default = [])
$config['DB_DRIVER'] = $this->choice('Which database driver do you want to use?', [
'mysql' => 'MySQL',
- 'postgresql' => 'PostgreSQL',
+ 'pgsql' => 'PostgreSQL',
'sqlite' => 'SQLite',
], $config['DB_DRIVER']);
@@ -118,6 +151,9 @@ protected function configureDatabase(array $default = [])
$config['DB_DATABASE'] = $this->ask('Please provide the full path to your SQLite file.', $config['DB_DATABASE']);
} else {
$config['DB_HOST'] = $this->ask("What is the host of your {$config['DB_DRIVER']} database?", $config['DB_HOST']);
+ if ($config['DB_HOST'] === 'localhost' && $config['DB_DRIVER'] === 'mysql') {
+ $this->warn("Using 'localhost' will result in the usage of a local unix socket. Use 127.0.0.1 if you want to connect over TCP");
+ }
$config['DB_DATABASE'] = $this->ask('What is the name of the database that Cachet should use?', $config['DB_DATABASE']);
@@ -125,6 +161,7 @@ protected function configureDatabase(array $default = [])
$config['DB_PASSWORD'] = $this->secret('What password should we connect with?', $config['DB_PASSWORD']);
+ $config['DB_PORT'] = $config['DB_DRIVER'] === 'mysql' ? 3306 : 5432;
if ($this->confirm('Is your database listening on a non-standard port number?')) {
$config['DB_PORT'] = $this->anticipate('What port number is your database using?', [3306, 5432], $config['DB_PORT']);
}
@@ -279,10 +316,13 @@ protected function configureMail(array $config = [])
/**
* Configure Cachet.
*
+ * @param array $config
+ *
* @return void
*/
- protected function configureCachet()
+ protected function configureCachet(array $config = [])
{
+ $config = [];
if ($this->confirm('Do you wish to use Cachet Beacon?')) {
$config['CACHET_BEACON'] = 'true';
}
@@ -297,6 +337,33 @@ protected function configureCachet()
}
}
+ /**
+ * Configure the first user.
+ *
+ * @return void
+ */
+ protected function configureUser()
+ {
+ if (!$this->confirm('Do you want to create an admin user?')) {
+ return;
+ }
+
+ // We need to refresh the config to get access to the newly connected database.
+ $this->getFreshConfiguration();
+
+ // Now we need to install the application.
+ // $this->call('cachet:install');
+
+ $user = [
+ 'username' => $this->ask('Please enter your username'),
+ 'email' => $this->ask('Please enter your email'),
+ 'password' => $this->secret('Please enter your password'),
+ 'level' => User::LEVEL_ADMIN,
+ ];
+
+ User::create($user);
+ }
+
/**
* Configure the redis connection.
*
@@ -337,6 +404,17 @@ protected function formatConfigsTable(array $config)
$this->table(['Setting', 'Value'], $configRows);
}
+ /**
+ * Boot a fresh copy of the application configuration.
+ *
+ * @return void
+ */
+ protected function getFreshConfiguration()
+ {
+ $app = require $this->laravel->bootstrapPath().'/app.php';
+ $app->make(Kernel::class)->bootstrap();
+ }
+
/**
* Writes to the .env file with given parameters.
*
@@ -357,11 +435,12 @@ protected function writeEnv($key, $value)
$envKey = strtoupper($key);
$envValue = env($envKey) ?: 'null';
- file_put_contents($path, str_replace(
- "{$envKey}={$envValue}",
- "{$envKey}={$value}",
- file_get_contents($path)
- ));
+ $envFileContents = file_get_contents($path);
+ $envFileContents = str_replace("{$envKey}={$envValue}", "{$envKey}={$value}", $envFileContents, $count);
+ if ($count < 1 && $envValue === 'null') {
+ $envFileContents = str_replace("{$envKey}=", "{$envKey}={$value}", $envFileContents);
+ }
+ file_put_contents($path, $envFileContents);
} catch (InvalidPathException $e) {
throw $e;
}
diff --git a/app/Console/Commands/VersionCommand.php b/app/Console/Commands/VersionCommand.php
index b18209dd0fe..e093fe7a07f 100644
--- a/app/Console/Commands/VersionCommand.php
+++ b/app/Console/Commands/VersionCommand.php
@@ -39,7 +39,7 @@ class VersionCommand extends Command
*
* @return void
*/
- public function fire()
+ public function handle()
{
$this->info('Cachet '.CACHET_VERSION.' is installed ⚡');
}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 9a203840c3c..12bc4a2ab21 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -11,6 +11,8 @@
namespace CachetHQ\Cachet\Console;
+use CachetHQ\Cachet\Console\Commands\AppResetCommand;
+use CachetHQ\Cachet\Console\Commands\AppUpdateCommand;
use CachetHQ\Cachet\Console\Commands\BeaconCommand;
use CachetHQ\Cachet\Console\Commands\DemoMetricPointSeederCommand;
use CachetHQ\Cachet\Console\Commands\DemoSeederCommand;
@@ -34,6 +36,8 @@ class Kernel extends ConsoleKernel
* @var array
*/
protected $commands = [
+ AppResetCommand::class,
+ AppUpdateCommand::class,
BeaconCommand::class,
DemoMetricPointSeederCommand::class,
DemoSeederCommand::class,
diff --git a/app/Foundation/Exceptions/Displayers/JsonValidationDisplayer.php b/app/Exceptions/Displayers/JsonValidationDisplayer.php
similarity index 90%
rename from app/Foundation/Exceptions/Displayers/JsonValidationDisplayer.php
rename to app/Exceptions/Displayers/JsonValidationDisplayer.php
index 02fd20ad3cb..bb3d0c5014e 100644
--- a/app/Foundation/Exceptions/Displayers/JsonValidationDisplayer.php
+++ b/app/Exceptions/Displayers/JsonValidationDisplayer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Exceptions\Displayers;
+namespace CachetHQ\Cachet\Exceptions\Displayers;
use AltThree\Validator\ValidationException;
use Exception;
@@ -29,7 +29,7 @@ class JsonValidationDisplayer extends JsonDisplayer implements DisplayerInterfac
*
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function display(Exception $exception, $id, $code, array $headers)
+ public function display(Exception $exception, string $id, int $code, array $headers)
{
$info = $this->info->generate($exception, $id, 400);
@@ -47,7 +47,7 @@ public function display(Exception $exception, $id, $code, array $headers)
*
* @return bool
*/
- public function canDisplay(Exception $original, Exception $transformed, $code)
+ public function canDisplay(Exception $original, Exception $transformed, int $code)
{
return $transformed instanceof ValidationException;
}
diff --git a/app/Foundation/Exceptions/Displayers/MaintenanceDisplayer.php b/app/Exceptions/Displayers/MaintenanceDisplayer.php
similarity index 93%
rename from app/Foundation/Exceptions/Displayers/MaintenanceDisplayer.php
rename to app/Exceptions/Displayers/MaintenanceDisplayer.php
index 77c583f7a00..20b4a16d5e7 100644
--- a/app/Foundation/Exceptions/Displayers/MaintenanceDisplayer.php
+++ b/app/Exceptions/Displayers/MaintenanceDisplayer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Exceptions\Displayers;
+namespace CachetHQ\Cachet\Exceptions\Displayers;
use Exception;
use GrahamCampbell\Exceptions\Displayers\DisplayerInterface;
@@ -53,7 +53,7 @@ public function __construct(Factory $view)
*
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function display(Exception $exception, $id, $code, array $headers)
+ public function display(Exception $exception, string $id, int $code, array $headers)
{
return new Response($this->render(), $code, array_merge($headers, ['Content-Type' => $this->contentType()]));
}
@@ -87,7 +87,7 @@ public function contentType()
*
* @return bool
*/
- public function canDisplay(Exception $original, Exception $transformed, $code)
+ public function canDisplay(Exception $original, Exception $transformed, int $code)
{
return $transformed instanceof MaintenanceModeException;
}
diff --git a/app/Foundation/Exceptions/Displayers/RedirectDisplayer.php b/app/Exceptions/Displayers/RedirectDisplayer.php
similarity index 92%
rename from app/Foundation/Exceptions/Displayers/RedirectDisplayer.php
rename to app/Exceptions/Displayers/RedirectDisplayer.php
index 147a2c97618..7a1670cbf77 100644
--- a/app/Foundation/Exceptions/Displayers/RedirectDisplayer.php
+++ b/app/Exceptions/Displayers/RedirectDisplayer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Exceptions\Displayers;
+namespace CachetHQ\Cachet\Exceptions\Displayers;
use Exception;
use GrahamCampbell\Exceptions\Displayers\DisplayerInterface;
@@ -47,7 +47,7 @@ public function __construct(Request $request)
*
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function display(Exception $exception, $id, $code, array $headers)
+ public function display(Exception $exception, string $id, int $code, array $headers)
{
return redirect()->guest('auth/login');
}
@@ -71,7 +71,7 @@ public function contentType()
*
* @return bool
*/
- public function canDisplay(Exception $original, Exception $transformed, $code)
+ public function canDisplay(Exception $original, Exception $transformed, int $code)
{
$redirect = $transformed instanceof HttpExceptionInterface && $transformed->getStatusCode() === 401;
diff --git a/app/Exceptions/Displayers/SettingsDisplayer.php b/app/Exceptions/Displayers/SettingsDisplayer.php
new file mode 100644
index 00000000000..d3a76d0408a
--- /dev/null
+++ b/app/Exceptions/Displayers/SettingsDisplayer.php
@@ -0,0 +1,88 @@
+request = $request;
+ }
+
+ /**
+ * Get the error response associated with the given exception.
+ *
+ * @param \Exception $exception
+ * @param string $id
+ * @param int $code
+ * @param string[] $headers
+ *
+ * @return \Symfony\Component\HttpFoundation\Response
+ */
+ public function display(Exception $exception, string $id, int $code, array $headers)
+ {
+ return cachet_redirect('setup');
+ }
+
+ /**
+ * Get the supported content type.
+ *
+ * @return string
+ */
+ public function contentType()
+ {
+ return 'text/html';
+ }
+
+ /**
+ * Can we display the exception?
+ *
+ * @param \Exception $original
+ * @param \Exception $transformed
+ * @param int $code
+ *
+ * @return bool
+ */
+ public function canDisplay(Exception $original, Exception $transformed, int $code)
+ {
+ return ($transformed instanceof ReadException) && !$this->request->is('setup*');
+ }
+
+ /**
+ * Do we provide verbose information about the exception?
+ *
+ * @return bool
+ */
+ public function isVerbose()
+ {
+ return false;
+ }
+}
diff --git a/app/Foundation/Exceptions/Displayers/ThrottleDisplayer.php b/app/Exceptions/Displayers/ThrottleDisplayer.php
similarity index 87%
rename from app/Foundation/Exceptions/Displayers/ThrottleDisplayer.php
rename to app/Exceptions/Displayers/ThrottleDisplayer.php
index f36871db921..5f1907c7d7d 100644
--- a/app/Foundation/Exceptions/Displayers/ThrottleDisplayer.php
+++ b/app/Exceptions/Displayers/ThrottleDisplayer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Exceptions\Displayers;
+namespace CachetHQ\Cachet\Exceptions\Displayers;
use Exception;
use GrahamCampbell\Exceptions\Displayers\DisplayerInterface;
@@ -47,9 +47,9 @@ public function __construct(Request $request)
*
* @return \Symfony\Component\HttpFoundation\Response
*/
- public function display(Exception $exception, $id, $code, array $headers)
+ public function display(Exception $exception, string $id, int $code, array $headers)
{
- return redirect()->route('auth.login')->withError(trans('forms.login.rate-limit'));
+ return cachet_redirect('auth.login')->withError(trans('forms.login.rate-limit'));
}
/**
@@ -71,7 +71,7 @@ public function contentType()
*
* @return bool
*/
- public function canDisplay(Exception $original, Exception $transformed, $code)
+ public function canDisplay(Exception $original, Exception $transformed, int $code)
{
return $transformed instanceof TooManyRequestsHttpException && $this->request->is('auth*');
}
diff --git a/app/Foundation/Exceptions/Filters/ApiFilter.php b/app/Exceptions/Filters/ApiFilter.php
similarity index 84%
rename from app/Foundation/Exceptions/Filters/ApiFilter.php
rename to app/Exceptions/Filters/ApiFilter.php
index e824de2a495..8d12e4dbffc 100644
--- a/app/Foundation/Exceptions/Filters/ApiFilter.php
+++ b/app/Exceptions/Filters/ApiFilter.php
@@ -9,10 +9,11 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Exceptions\Filters;
+namespace CachetHQ\Cachet\Exceptions\Filters;
use Exception;
use Illuminate\Http\Request;
+use Illuminate\Support\Str;
class ApiFilter
{
@@ -27,11 +28,11 @@ class ApiFilter
*
* @return \GrahamCampbell\Exceptions\Displayers\DisplayerInterface[]
*/
- public function filter(array $displayers, Request $request, Exception $original, Exception $transformed, $code)
+ public function filter(array $displayers, Request $request, Exception $original, Exception $transformed, int $code)
{
if ($request->is('api*')) {
foreach ($displayers as $index => $displayer) {
- if (!str_contains($displayer->contentType(), 'application/')) {
+ if (!Str::contains($displayer->contentType(), 'application/')) {
unset($displayers[$index]);
}
}
diff --git a/app/Foundation/Exceptions/Transformers/BusTransformer.php b/app/Exceptions/Transformers/BusTransformer.php
similarity index 93%
rename from app/Foundation/Exceptions/Transformers/BusTransformer.php
rename to app/Exceptions/Transformers/BusTransformer.php
index 6ffd879a2e9..be0b2fe5cb1 100644
--- a/app/Foundation/Exceptions/Transformers/BusTransformer.php
+++ b/app/Exceptions/Transformers/BusTransformer.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Exceptions\Transformers;
+namespace CachetHQ\Cachet\Exceptions\Transformers;
use CachetHQ\Cachet\Bus\Exceptions\ExceptionInterface;
use Exception;
diff --git a/app/Foundation/Providers/ModuleServiceProvider.php b/app/Foundation/Providers/ModuleServiceProvider.php
deleted file mode 100644
index b4181c6141e..00000000000
--- a/app/Foundation/Providers/ModuleServiceProvider.php
+++ /dev/null
@@ -1,95 +0,0 @@
- [
- ['group' => 'messages', 'partial' => 'partials.modules.messages'],
- ['group' => 'status', 'partial' => 'partials.modules.status'],
- ['group' => 'components', 'partial' => 'partials.modules.components'],
- ['group' => 'metrics', 'partial' => 'partials.modules.metrics'],
- ['group' => 'stickied', 'partial' => 'partials.modules.stickied'],
- ['group' => 'scheduled', 'partial' => 'partials.modules.scheduled'],
- ['group' => 'timeline', 'partial' => 'partials.modules.timeline'],
- ],
- ];
-
- /**
- * The group definitions.
- *
- * @var array
- */
- protected $groups = [
- 'index' => [
- 'messages' => 10000,
- 'status' => 20000,
- 'components' => 30000,
- 'metrics' => 40000,
- 'scheduled' => 50000,
- 'stickied' => 60000,
- 'timeline' => 70000,
- ],
- ];
-
- /**
- * Boot the service provider.
- *
- * @param \Illuminate\View\Compilers\BladeCompiler $blade
- */
- public function boot(BladeCompiler $blade)
- {
- $blade->directive('modules', function ($group) {
- return sprintf(
- 'call(\'%s@%s\', [
- \'factory\' => $__env,
- \'data\' => array_except(get_defined_vars(), array(\'__data\', \'__path\')),
- \'modules\' => $modules,
- \'group\' => %s,
- ]); ?>',
- ModulesRenderer::class,
- 'renderModules',
- empty($group) ? 'null' : $group
- );
- });
- }
-
- /**
- * Register the service provider.
- *
- * @return void
- */
- public function register()
- {
- foreach ($this->modules as $key => $modules) {
- $this->app->singleton("view.modules: {$key}", function () use ($modules) {
- return $modules;
- });
- }
-
- foreach ($this->groups as $key => $groups) {
- $this->app->singleton("view.groups: {$key}", function () use ($groups) {
- return $groups;
- });
- }
- }
-}
diff --git a/app/Http/Controllers/Api/ComponentController.php b/app/Http/Controllers/Api/ComponentController.php
index 2717d626f7c..9bda7b09cb5 100644
--- a/app/Http/Controllers/Api/ComponentController.php
+++ b/app/Http/Controllers/Api/ComponentController.php
@@ -15,7 +15,6 @@
use CachetHQ\Cachet\Bus\Commands\Component\RemoveComponentCommand;
use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand;
use CachetHQ\Cachet\Models\Component;
-use CachetHQ\Cachet\Models\Tag;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Database\QueryException;
@@ -37,6 +36,10 @@ public function index()
$components = Component::enabled();
}
+ if ($tags = Binput::get('tags')) {
+ $components->withAnyTags($tags);
+ }
+
$components->search(Binput::except(['sort', 'order', 'per_page']));
if ($sortBy = Binput::get('sort')) {
@@ -70,7 +73,7 @@ public function show(Component $component)
public function store()
{
try {
- $component = dispatch(new CreateComponentCommand(
+ $component = execute(new CreateComponentCommand(
Binput::get('name'),
Binput::get('description'),
Binput::get('status'),
@@ -78,26 +81,13 @@ public function store()
Binput::get('order'),
Binput::get('group_id'),
(bool) Binput::get('enabled', true),
- Binput::get('meta', null)
+ Binput::get('meta'),
+ Binput::get('tags')
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
- if (Binput::has('tags')) {
- // The component was added successfully, so now let's deal with the tags.
- $tags = preg_split('/ ?, ?/', Binput::get('tags'));
-
- // For every tag, do we need to create it?
- $componentTags = array_map(function ($taggable) use ($component) {
- return Tag::firstOrCreate([
- 'name' => $taggable,
- ])->id;
- }, $tags);
-
- $component->tags()->sync($componentTags);
- }
-
return $this->item($component);
}
@@ -111,7 +101,7 @@ public function store()
public function update(Component $component)
{
try {
- dispatch(new UpdateComponentCommand(
+ execute(new UpdateComponentCommand(
$component,
Binput::get('name'),
Binput::get('description'),
@@ -119,25 +109,15 @@ public function update(Component $component)
Binput::get('link'),
Binput::get('order'),
Binput::get('group_id'),
- (bool) Binput::get('enabled', true),
- Binput::get('meta', null),
+ Binput::get('enabled', $component->enabled),
+ Binput::get('meta'),
+ Binput::get('tags'),
(bool) Binput::get('silent', false)
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
- if (Binput::has('tags')) {
- $tags = preg_split('/ ?, ?/', Binput::get('tags'));
-
- // For every tag, do we need to create it?
- $componentTags = array_map(function ($taggable) use ($component) {
- return Tag::firstOrCreate(['name' => $taggable])->id;
- }, $tags);
-
- $component->tags()->sync($componentTags);
- }
-
return $this->item($component);
}
@@ -150,7 +130,7 @@ public function update(Component $component)
*/
public function destroy(Component $component)
{
- dispatch(new RemoveComponentCommand($component));
+ execute(new RemoveComponentCommand($component));
return $this->noContent();
}
diff --git a/app/Http/Controllers/Api/ComponentGroupController.php b/app/Http/Controllers/Api/ComponentGroupController.php
index 7e7c65a7c40..957106e101d 100644
--- a/app/Http/Controllers/Api/ComponentGroupController.php
+++ b/app/Http/Controllers/Api/ComponentGroupController.php
@@ -92,7 +92,7 @@ public function show(ComponentGroup $group)
public function store()
{
try {
- $group = dispatch(new CreateComponentGroupCommand(
+ $group = execute(new CreateComponentGroupCommand(
Binput::get('name'),
Binput::get('order', 0),
Binput::get('collapsed', 0),
@@ -115,7 +115,7 @@ public function store()
public function update(ComponentGroup $group)
{
try {
- $group = dispatch(new UpdateComponentGroupCommand(
+ $group = execute(new UpdateComponentGroupCommand(
$group,
Binput::get('name'),
Binput::get('order'),
@@ -138,7 +138,7 @@ public function update(ComponentGroup $group)
*/
public function destroy(ComponentGroup $group)
{
- dispatch(new RemoveComponentGroupCommand($group));
+ execute(new RemoveComponentGroupCommand($group));
return $this->noContent();
}
diff --git a/app/Http/Controllers/Api/GeneralController.php b/app/Http/Controllers/Api/GeneralController.php
index 9fb36d964aa..23ba1fa4485 100644
--- a/app/Http/Controllers/Api/GeneralController.php
+++ b/app/Http/Controllers/Api/GeneralController.php
@@ -17,7 +17,7 @@
/**
* This is the general api controller.
*
- * @author James Brooks
+ * @author James Brooks
*/
class GeneralController extends AbstractApiController
{
diff --git a/app/Http/Controllers/Api/IncidentController.php b/app/Http/Controllers/Api/IncidentController.php
index 718be542650..cd705519f58 100644
--- a/app/Http/Controllers/Api/IncidentController.php
+++ b/app/Http/Controllers/Api/IncidentController.php
@@ -67,15 +67,15 @@ public function show(Incident $incident)
public function store()
{
try {
- $incident = dispatch(new CreateIncidentCommand(
+ $incident = execute(new CreateIncidentCommand(
Binput::get('name'),
Binput::get('status'),
Binput::get('message', null, false, false),
- Binput::get('visible', true),
+ (bool) Binput::get('visible', true),
Binput::get('component_id'),
Binput::get('component_status'),
- Binput::get('notify', true),
- Binput::get('stickied', false),
+ (bool) Binput::get('notify', true),
+ (bool) Binput::get('stickied', false),
Binput::get('occurred_at'),
Binput::get('template'),
Binput::get('vars', []),
@@ -98,16 +98,16 @@ public function store()
public function update(Incident $incident)
{
try {
- $incident = dispatch(new UpdateIncidentCommand(
+ $incident = execute(new UpdateIncidentCommand(
$incident,
Binput::get('name'),
Binput::get('status'),
Binput::get('message'),
- Binput::get('visible', true),
+ (bool) Binput::get('visible', true),
Binput::get('component_id'),
Binput::get('component_status'),
- Binput::get('notify', true),
- Binput::get('stickied', false),
+ (bool) Binput::get('notify', true),
+ (bool) Binput::get('stickied', false),
Binput::get('occurred_at'),
Binput::get('template'),
Binput::get('vars', [])
@@ -128,7 +128,7 @@ public function update(Incident $incident)
*/
public function destroy(Incident $incident)
{
- dispatch(new RemoveIncidentCommand($incident));
+ execute(new RemoveIncidentCommand($incident));
return $this->noContent();
}
diff --git a/app/Http/Controllers/Api/IncidentTemplateController.php b/app/Http/Controllers/Api/IncidentTemplateController.php
new file mode 100644
index 00000000000..3f1ba418356
--- /dev/null
+++ b/app/Http/Controllers/Api/IncidentTemplateController.php
@@ -0,0 +1,51 @@
+sort($sortBy, $direction);
+ }
+
+ $templates = $templates->paginate(Binput::get('per_page', 20));
+
+ return $this->paginator($templates, Request::instance());
+ }
+
+ /**
+ * Get a single incident templates.
+ *
+ * @param \CachetHQ\Cachet\Models\IncidentTemplate $incidentTemplate
+ *
+ * @return \Illuminate\Http\JsonResponse
+ */
+ public function show(IncidentTemplate $incidentTemplate)
+ {
+ return $this->item($incidentTemplate);
+ }
+}
diff --git a/app/Http/Controllers/Api/IncidentUpdateController.php b/app/Http/Controllers/Api/IncidentUpdateController.php
index a12bca89c14..0c239a6a431 100644
--- a/app/Http/Controllers/Api/IncidentUpdateController.php
+++ b/app/Http/Controllers/Api/IncidentUpdateController.php
@@ -38,7 +38,7 @@ class IncidentUpdateController extends AbstractApiController
*/
public function index(Incident $incident)
{
- $updates = IncidentUpdate::orderBy('created_at', 'desc');
+ $updates = $incident->updates()->orderBy('created_at', 'desc');
if ($sortBy = Binput::get('sort')) {
$direction = Binput::has('order') && Binput::get('order') == 'desc';
@@ -74,10 +74,12 @@ public function show(Incident $incident, IncidentUpdate $update)
public function store(Incident $incident)
{
try {
- $update = dispatch(new CreateIncidentUpdateCommand(
+ $update = execute(new CreateIncidentUpdateCommand(
$incident,
Binput::get('status'),
Binput::get('message'),
+ Binput::get('component_id'),
+ Binput::get('component_status'),
Auth::user()
));
} catch (QueryException $e) {
@@ -98,7 +100,7 @@ public function store(Incident $incident)
public function update(Incident $incident, IncidentUpdate $update)
{
try {
- $update = dispatch(new UpdateIncidentUpdateCommand(
+ $update = execute(new UpdateIncidentUpdateCommand(
$update,
Binput::get('status'),
Binput::get('message'),
@@ -122,7 +124,7 @@ public function update(Incident $incident, IncidentUpdate $update)
public function destroy(Incident $incident, IncidentUpdate $update)
{
try {
- dispatch(new RemoveIncidentUpdateCommand($update));
+ execute(new RemoveIncidentUpdateCommand($update));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
diff --git a/app/Http/Controllers/Api/MetricController.php b/app/Http/Controllers/Api/MetricController.php
index fd7dbe070e3..4ef2e1e4fd3 100644
--- a/app/Http/Controllers/Api/MetricController.php
+++ b/app/Http/Controllers/Api/MetricController.php
@@ -62,7 +62,7 @@ public function show(Metric $metric)
public function store()
{
try {
- $metric = dispatch(new CreateMetricCommand(
+ $metric = execute(new CreateMetricCommand(
Binput::get('name'),
Binput::get('suffix'),
Binput::get('description'),
@@ -92,7 +92,7 @@ public function store()
public function update(Metric $metric)
{
try {
- $metric = dispatch(new UpdateMetricCommand(
+ $metric = execute(new UpdateMetricCommand(
$metric,
Binput::get('name'),
Binput::get('suffix'),
@@ -122,7 +122,7 @@ public function update(Metric $metric)
*/
public function destroy(Metric $metric)
{
- dispatch(new RemoveMetricCommand($metric));
+ execute(new RemoveMetricCommand($metric));
return $this->noContent();
}
diff --git a/app/Http/Controllers/Api/MetricPointController.php b/app/Http/Controllers/Api/MetricPointController.php
index c5cd6f1f12c..8afb5c59ed1 100644
--- a/app/Http/Controllers/Api/MetricPointController.php
+++ b/app/Http/Controllers/Api/MetricPointController.php
@@ -48,7 +48,7 @@ public function index(Metric $metric, MetricPoint $metricPoint)
public function store(Metric $metric)
{
try {
- $metricPoint = dispatch(new CreateMetricPointCommand(
+ $metricPoint = execute(new CreateMetricPointCommand(
$metric,
Binput::get('value'),
Binput::get('timestamp')
@@ -64,13 +64,13 @@ public function store(Metric $metric)
* Updates a metric point.
*
* @param \CachetHQ\Cachet\Models\Metric $metric
- * @param \CachetHQ\Cachet\Models\MetircPoint $metricPoint
+ * @param \CachetHQ\Cachet\Models\MetricPoint $metricPoint
*
* @return \Illuminate\Http\JsonResponse
*/
public function update(Metric $metric, MetricPoint $metricPoint)
{
- $metricPoint = dispatch(new UpdateMetricPointCommand(
+ $metricPoint = execute(new UpdateMetricPointCommand(
$metricPoint,
$metric,
Binput::get('value'),
@@ -90,7 +90,7 @@ public function update(Metric $metric, MetricPoint $metricPoint)
*/
public function destroy(Metric $metric, MetricPoint $metricPoint)
{
- dispatch(new RemoveMetricPointCommand($metricPoint));
+ execute(new RemoveMetricPointCommand($metricPoint));
return $this->noContent();
}
diff --git a/app/Http/Controllers/Api/ScheduleController.php b/app/Http/Controllers/Api/ScheduleController.php
index 6fe120391b0..c59f46dbd62 100644
--- a/app/Http/Controllers/Api/ScheduleController.php
+++ b/app/Http/Controllers/Api/ScheduleController.php
@@ -34,7 +34,7 @@ class ScheduleController extends AbstractApiController
*/
public function index()
{
- $schedule = Schedule::whereRaw('1 = 1');
+ $schedule = Schedule::query();
if ($sortBy = Binput::get('sort')) {
$direction = Binput::has('order') && Binput::get('order') == 'desc';
@@ -67,13 +67,14 @@ public function show(Schedule $schedule)
public function store()
{
try {
- $schedule = dispatch(new CreateScheduleCommand(
+ $schedule = execute(new CreateScheduleCommand(
Binput::get('name'),
Binput::get('message', null, false, false),
Binput::get('status'),
Binput::get('scheduled_at'),
Binput::get('completed_at'),
- Binput::get('components', [])
+ Binput::get('components', []),
+ Binput::get('notify', false)
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
@@ -92,7 +93,7 @@ public function store()
public function update(Schedule $schedule)
{
try {
- $schedule = dispatch(new UpdateScheduleCommand(
+ $schedule = execute(new UpdateScheduleCommand(
$schedule,
Binput::get('name'),
Binput::get('message'),
@@ -118,7 +119,7 @@ public function update(Schedule $schedule)
public function destroy(Schedule $schedule)
{
try {
- dispatch(new DeleteScheduleCommand($schedule));
+ execute(new DeleteScheduleCommand($schedule));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
diff --git a/app/Http/Controllers/Api/SubscriberController.php b/app/Http/Controllers/Api/SubscriberController.php
index 5a8b1178837..621aa06d70b 100644
--- a/app/Http/Controllers/Api/SubscriberController.php
+++ b/app/Http/Controllers/Api/SubscriberController.php
@@ -50,7 +50,7 @@ public function store()
$verified = Binput::get('verify', app(Repository::class)->get('setting.skip_subscriber_verification'));
try {
- $subscriber = dispatch(new SubscribeSubscriberCommand(Binput::get('email'), $verified, Binput::get('components', null)));
+ $subscriber = execute(new SubscribeSubscriberCommand(Binput::get('email'), $verified, Binput::get('components', null)));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
@@ -67,7 +67,7 @@ public function store()
*/
public function destroy(Subscriber $subscriber)
{
- dispatch(new UnsubscribeSubscriberCommand($subscriber));
+ execute(new UnsubscribeSubscriberCommand($subscriber));
return $this->noContent();
}
diff --git a/app/Http/Controllers/Api/SubscriptionController.php b/app/Http/Controllers/Api/SubscriptionController.php
index a7372d080c4..173a5e0ffc9 100644
--- a/app/Http/Controllers/Api/SubscriptionController.php
+++ b/app/Http/Controllers/Api/SubscriptionController.php
@@ -30,7 +30,7 @@ class SubscriptionController extends AbstractApiController
*/
public function destroy(Subscription $subscription)
{
- dispatch(new UnsubscribeSubscriptionCommand($subscription));
+ execute(new UnsubscribeSubscriptionCommand($subscription));
return $this->noContent();
}
diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php
index 0d8c969d4ea..597b9b51893 100644
--- a/app/Http/Controllers/AuthController.php
+++ b/app/Http/Controllers/AuthController.php
@@ -17,11 +17,12 @@
use CachetHQ\Cachet\Bus\Events\User\UserPassedTwoAuthEvent;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Routing\Controller;
+use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\View;
-use PragmaRX\Google2FA\Vendor\Laravel\Facade as Google2FA;
+use PragmaRX\Google2FA\Google2FA;
class AuthController extends Controller
{
@@ -47,9 +48,9 @@ public function postLogin()
// Login with username or email.
$loginKey = filter_var($loginData['username'], FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
- $loginData[$loginKey] = array_pull($loginData, 'username');
+ $loginData[$loginKey] = Arr::pull($loginData, 'username');
- $rememberUser = array_pull($loginData, 'remember_me') === '1';
+ $rememberUser = Arr::pull($loginData, 'remember_me') === '1';
// Validate login credentials.
if (Auth::validate($loginData)) {
@@ -88,6 +89,10 @@ public function showTwoFactorAuth()
*
* This feels very hacky, but we have to juggle authentication and codes.
*
+ * @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException
+ * @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException
+ * @throws \PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException
+ *
* @return \Illuminate\Http\RedirectResponse
*/
public function postTwoFactor()
@@ -101,7 +106,8 @@ public function postTwoFactor()
$user = Auth::user();
- $valid = Google2FA::verifyKey($user->google_2fa_secret, $code);
+ $google2fa = new Google2FA();
+ $valid = $google2fa->verifyKey($user->google_2fa_secret, $code);
if ($valid) {
event(new UserPassedTwoAuthEvent($user));
diff --git a/app/Http/Controllers/Dashboard/ApiController.php b/app/Http/Controllers/Dashboard/ApiController.php
index 9cc80c4e8e3..4e59a7a40c1 100644
--- a/app/Http/Controllers/Dashboard/ApiController.php
+++ b/app/Http/Controllers/Dashboard/ApiController.php
@@ -36,7 +36,7 @@ class ApiController extends AbstractApiController
public function postUpdateComponent(Component $component)
{
try {
- dispatch(new UpdateComponentCommand(
+ execute(new UpdateComponentCommand(
$component,
$component->name,
$component->description,
@@ -46,7 +46,8 @@ public function postUpdateComponent(Component $component)
$component->group_id,
$component->enabled,
$component->meta,
- false
+ $component->tags,
+ true // Silent mode
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
@@ -68,7 +69,7 @@ public function postUpdateComponentOrder()
try {
$component = Component::find($componentId);
- dispatch(new UpdateComponentCommand(
+ execute(new UpdateComponentCommand(
$component,
$component->name,
$component->description,
@@ -78,7 +79,8 @@ public function postUpdateComponentOrder()
$component->group_id,
$component->enabled,
$component->meta,
- true
+ $component->tags,
+ true // Silent mode
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
@@ -100,7 +102,7 @@ public function postUpdateComponentGroupOrder()
foreach ($groupData as $order => $groupId) {
$group = ComponentGroup::find($groupId);
- dispatch(new UpdateComponentGroupCommand(
+ execute(new UpdateComponentGroupCommand(
$group,
$group->name,
$order + 1,
diff --git a/app/Http/Controllers/Dashboard/ComponentController.php b/app/Http/Controllers/Dashboard/ComponentController.php
index 74948d661f7..c9c8e6792e1 100644
--- a/app/Http/Controllers/Dashboard/ComponentController.php
+++ b/app/Http/Controllers/Dashboard/ComponentController.php
@@ -15,16 +15,17 @@
use CachetHQ\Cachet\Bus\Commands\Component\CreateComponentCommand;
use CachetHQ\Cachet\Bus\Commands\Component\RemoveComponentCommand;
use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand;
-use CachetHQ\Cachet\Bus\Commands\ComponentGroup\CreateComponentGroupCommand;
-use CachetHQ\Cachet\Bus\Commands\ComponentGroup\RemoveComponentGroupCommand;
-use CachetHQ\Cachet\Bus\Commands\ComponentGroup\UpdateComponentGroupCommand;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\ComponentGroup;
-use CachetHQ\Cachet\Models\Tag;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\View;
+/**
+ * This is the component controller class.
+ *
+ * @author James Brooks
+ */
class ComponentController extends Controller
{
/**
@@ -57,8 +58,8 @@ public function __construct()
];
View::share([
- 'sub_menu' => $this->subMenu,
- 'sub_title' => trans_choice('dashboard.components.components', 2),
+ 'subMenu' => $this->subMenu,
+ 'subTitle' => trans_choice('dashboard.components.components', 2),
]);
}
@@ -69,7 +70,7 @@ public function __construct()
*/
public function showComponents()
{
- $components = Component::orderBy('order')->orderBy('created_at')->get();
+ $components = Component::with('group')->orderBy('order')->orderBy('created_at')->get();
$this->subMenu['components']['active'] = true;
@@ -79,21 +80,6 @@ public function showComponents()
->withSubMenu($this->subMenu);
}
- /**
- * Shows the component groups view.
- *
- * @return \Illuminate\View\View
- */
- public function showComponentGroups()
- {
- $this->subMenu['groups']['active'] = true;
-
- return View::make('dashboard.components.groups.index')
- ->withPageTitle(trans_choice('dashboard.components.groups.groups', 2).' - '.trans('dashboard.dashboard'))
- ->withGroups(ComponentGroup::orderBy('order')->get())
- ->withSubMenu($this->subMenu);
- }
-
/**
* Shows the edit component view.
*
@@ -123,10 +109,9 @@ public function showEditComponent(Component $component)
public function updateComponentAction(Component $component)
{
$componentData = Binput::get('component');
- $tags = array_pull($componentData, 'tags');
try {
- $component = dispatch(new UpdateComponentCommand(
+ $component = execute(new UpdateComponentCommand(
$component,
$componentData['name'],
$componentData['description'],
@@ -136,6 +121,7 @@ public function updateComponentAction(Component $component)
$componentData['group_id'],
$componentData['enabled'],
null, // Meta data cannot be supplied through the dashboard yet.
+ $componentData['tags'], // Meta data cannot be supplied through the dashboard yet.
true // Silent since we're not really making changes to the component (this should be optional)
));
} catch (ValidationException $e) {
@@ -145,16 +131,6 @@ public function updateComponentAction(Component $component)
->withErrors($e->getMessageBag());
}
- // The component was added successfully, so now let's deal with the tags.
- $tags = preg_split('/ ?, ?/', $tags);
-
- // For every tag, do we need to create it?
- $componentTags = array_map(function ($taggable) {
- return Tag::firstOrCreate(['name' => $taggable])->id;
- }, $tags);
-
- $component->tags()->sync($componentTags);
-
return cachet_redirect('dashboard.components.edit', [$component->id])
->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.edit.success')));
}
@@ -179,10 +155,9 @@ public function showAddComponent()
public function createComponentAction()
{
$componentData = Binput::get('component');
- $tags = array_pull($componentData, 'tags');
try {
- $component = dispatch(new CreateComponentCommand(
+ $component = execute(new CreateComponentCommand(
$componentData['name'],
$componentData['description'],
$componentData['status'],
@@ -190,7 +165,8 @@ public function createComponentAction()
$componentData['order'],
$componentData['group_id'],
$componentData['enabled'],
- null // Meta data cannot be supplied through the dashboard yet.
+ null, // Meta data cannot be supplied through the dashboard yet.
+ $componentData['tags']
));
} catch (ValidationException $e) {
return cachet_redirect('dashboard.components.create')
@@ -199,16 +175,6 @@ public function createComponentAction()
->withErrors($e->getMessageBag());
}
- // The component was added successfully, so now let's deal with the tags.
- $tags = preg_split('/ ?, ?/', $tags);
-
- // For every tag, do we need to create it?
- $componentTags = array_map(function ($taggable) {
- return Tag::firstOrCreate(['name' => $taggable])->id;
- }, $tags);
-
- $component->tags()->sync($componentTags);
-
return cachet_redirect('dashboard.components')
->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.add.success')));
}
@@ -222,102 +188,9 @@ public function createComponentAction()
*/
public function deleteComponentAction(Component $component)
{
- dispatch(new RemoveComponentCommand($component));
+ execute(new RemoveComponentCommand($component));
return cachet_redirect('dashboard.components')
->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.delete.success')));
}
-
- /**
- * Deletes a given component group.
- *
- * @param \CachetHQ\Cachet\Models\ComponentGroup $group
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function deleteComponentGroupAction(ComponentGroup $group)
- {
- dispatch(new RemoveComponentGroupCommand($group));
-
- return cachet_redirect('dashboard.components.groups')
- ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.delete.success')));
- }
-
- /**
- * Shows the add component group view.
- *
- * @return \Illuminate\View\View
- */
- public function showAddComponentGroup()
- {
- return View::make('dashboard.components.groups.add')
- ->withPageTitle(trans('dashboard.components.groups.add.title').' - '.trans('dashboard.dashboard'));
- }
-
- /**
- * Shows the edit component group view.
- *
- * @param \CachetHQ\Cachet\Models\ComponentGroup $group
- *
- * @return \Illuminate\View\View
- */
- public function showEditComponentGroup(ComponentGroup $group)
- {
- return View::make('dashboard.components.groups.edit')
- ->withPageTitle(trans('dashboard.components.groups.edit.title').' - '.trans('dashboard.dashboard'))
- ->withGroup($group);
- }
-
- /**
- * Creates a new component.
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function postAddComponentGroup()
- {
- try {
- $group = dispatch(new CreateComponentGroupCommand(
- Binput::get('name'),
- Binput::get('order', 0),
- Binput::get('collapsed'),
- Binput::get('visible')
- ));
- } catch (ValidationException $e) {
- return cachet_redirect('dashboard.components.groups.create')
- ->withInput(Binput::all())
- ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.add.failure')))
- ->withErrors($e->getMessageBag());
- }
-
- return cachet_redirect('dashboard.components.groups')
- ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.add.success')));
- }
-
- /**
- * Updates a component group.
- *
- * @param \CachetHQ\Cachet\Models\ComponentGroup $group
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function updateComponentGroupAction(ComponentGroup $group)
- {
- try {
- $group = dispatch(new UpdateComponentGroupCommand(
- $group,
- Binput::get('name'),
- $group->order,
- Binput::get('collapsed'),
- Binput::get('visible')
- ));
- } catch (ValidationException $e) {
- return cachet_redirect('dashboard.components.groups.edit', [$group->id])
- ->withInput(Binput::all())
- ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.edit.failure')))
- ->withErrors($e->getMessageBag());
- }
-
- return cachet_redirect('dashboard.components.groups.edit', [$group->id])
- ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.edit.success')));
- }
}
diff --git a/app/Http/Controllers/Dashboard/ComponentGroupController.php b/app/Http/Controllers/Dashboard/ComponentGroupController.php
new file mode 100644
index 00000000000..ad81afc9f00
--- /dev/null
+++ b/app/Http/Controllers/Dashboard/ComponentGroupController.php
@@ -0,0 +1,173 @@
+
+ */
+class ComponentGroupController extends Controller
+{
+ /**
+ * Array of sub-menu items.
+ *
+ * @var array
+ */
+ protected $subMenu = [];
+
+ /**
+ * Creates a new component controller instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ $this->subMenu = [
+ 'components' => [
+ 'title' => trans('dashboard.components.components'),
+ 'url' => cachet_route('dashboard.components'),
+ 'icon' => 'ion-ios-browsers',
+ 'active' => false,
+ ],
+ 'groups' => [
+ 'title' => trans_choice('dashboard.components.groups.groups', 2),
+ 'url' => cachet_route('dashboard.components.groups'),
+ 'icon' => 'ion-folder',
+ 'active' => false,
+ ],
+ ];
+
+ View::share([
+ 'sub_menu' => $this->subMenu,
+ 'subTitle' => trans_choice('dashboard.components.components', 2),
+ ]);
+ }
+
+ /**
+ * Shows the component groups view.
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showComponentGroups()
+ {
+ $this->subMenu['groups']['active'] = true;
+
+ return View::make('dashboard.components.groups.index')
+ ->withPageTitle(trans_choice('dashboard.components.groups.groups', 2).' - '.trans('dashboard.dashboard'))
+ ->withGroups(ComponentGroup::orderBy('order')->get())
+ ->withSubMenu($this->subMenu);
+ }
+
+ /**
+ * Deletes a given component group.
+ *
+ * @param \CachetHQ\Cachet\Models\ComponentGroup $group
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function deleteComponentGroupAction(ComponentGroup $group)
+ {
+ execute(new RemoveComponentGroupCommand($group));
+
+ return cachet_redirect('dashboard.components.groups')
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.delete.success')));
+ }
+
+ /**
+ * Shows the add component group view.
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showAddComponentGroup()
+ {
+ return View::make('dashboard.components.groups.add')
+ ->withPageTitle(trans('dashboard.components.groups.add.title').' - '.trans('dashboard.dashboard'));
+ }
+
+ /**
+ * Shows the edit component group view.
+ *
+ * @param \CachetHQ\Cachet\Models\ComponentGroup $group
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showEditComponentGroup(ComponentGroup $group)
+ {
+ return View::make('dashboard.components.groups.edit')
+ ->withPageTitle(trans('dashboard.components.groups.edit.title').' - '.trans('dashboard.dashboard'))
+ ->withGroup($group);
+ }
+
+ /**
+ * Creates a new component.
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function postAddComponentGroup()
+ {
+ try {
+ $group = execute(new CreateComponentGroupCommand(
+ Binput::get('name'),
+ Binput::get('order', 0),
+ Binput::get('collapsed'),
+ Binput::get('visible')
+ ));
+ } catch (ValidationException $e) {
+ return cachet_redirect('dashboard.components.groups.create')
+ ->withInput(Binput::all())
+ ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.add.failure')))
+ ->withErrors($e->getMessageBag());
+ }
+
+ return cachet_redirect('dashboard.components.groups')
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.add.success')));
+ }
+
+ /**
+ * Updates a component group.
+ *
+ * @param \CachetHQ\Cachet\Models\ComponentGroup $group
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function updateComponentGroupAction(ComponentGroup $group)
+ {
+ try {
+ $group = execute(new UpdateComponentGroupCommand(
+ $group,
+ Binput::get('name'),
+ $group->order,
+ Binput::get('collapsed'),
+ Binput::get('visible')
+ ));
+ } catch (ValidationException $e) {
+ return cachet_redirect('dashboard.components.groups.edit', [$group->id])
+ ->withInput(Binput::all())
+ ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.components.groups.edit.failure')))
+ ->withErrors($e->getMessageBag());
+ }
+
+ return cachet_redirect('dashboard.components.groups.edit', [$group->id])
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.components.groups.edit.success')));
+ }
+}
diff --git a/app/Http/Controllers/Dashboard/DashboardController.php b/app/Http/Controllers/Dashboard/DashboardController.php
index 835ec22fc8b..2d5281a19e8 100644
--- a/app/Http/Controllers/Dashboard/DashboardController.php
+++ b/app/Http/Controllers/Dashboard/DashboardController.php
@@ -101,12 +101,14 @@ public function showDashboard()
$welcomeUser = !Auth::user()->welcomed;
if ($welcomeUser) {
- dispatch(new WelcomeUserCommand(Auth::user()));
+ execute(new WelcomeUserCommand(Auth::user()));
}
$entries = null;
- if ($feed = $this->feed->latest()) {
- $entries = array_slice($feed->channel->item, 0, 5);
+ if ($feed = $this->feed->latest() !== 1) {
+ if (is_object($feed)) {
+ $entries = array_slice($feed->channel->item, 0, 5);
+ }
}
return View::make('dashboard.index')
diff --git a/app/Http/Controllers/Dashboard/IncidentController.php b/app/Http/Controllers/Dashboard/IncidentController.php
index 9d3be7bcbbd..f5555aa0bb9 100644
--- a/app/Http/Controllers/Dashboard/IncidentController.php
+++ b/app/Http/Controllers/Dashboard/IncidentController.php
@@ -15,7 +15,7 @@
use CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand;
use CachetHQ\Cachet\Bus\Commands\Incident\RemoveIncidentCommand;
use CachetHQ\Cachet\Bus\Commands\Incident\UpdateIncidentCommand;
-use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\CreateIncidentUpdateCommand;
+use CachetHQ\Cachet\Integrations\Contracts\System;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\ComponentGroup;
use CachetHQ\Cachet\Models\Incident;
@@ -46,6 +46,13 @@ class IncidentController extends Controller
*/
protected $auth;
+ /**
+ * The system instance.
+ *
+ * @var \CachetHQ\Cachet\Integrations\Contracts\System
+ */
+ protected $system;
+
/**
* Creates a new incident controller instance.
*
@@ -53,11 +60,12 @@ class IncidentController extends Controller
*
* @return void
*/
- public function __construct(Guard $auth)
+ public function __construct(Guard $auth, System $system)
{
$this->auth = $auth;
+ $this->system = $system;
- View::share('sub_title', trans('dashboard.incidents.title'));
+ View::share('subTitle', trans('dashboard.incidents.title'));
}
/**
@@ -67,7 +75,7 @@ public function __construct(Guard $auth)
*/
public function showIncidents()
{
- $incidents = Incident::orderBy('created_at', 'desc')->get();
+ $incidents = Incident::with('user')->orderBy('created_at', 'desc')->get();
return View::make('dashboard.incidents.index')
->withPageTitle(trans('dashboard.incidents.incidents').' - '.trans('dashboard.dashboard'))
@@ -85,6 +93,7 @@ public function showAddIncident()
->withPageTitle(trans('dashboard.incidents.add.title').' - '.trans('dashboard.dashboard'))
->withComponentsInGroups(ComponentGroup::with('components')->get())
->withComponentsOutGroups(Component::where('group_id', '=', 0)->get())
+ ->withNotificationsEnabled($this->system->canNotifySubscribers())
->withIncidentTemplates(IncidentTemplate::all());
}
@@ -108,7 +117,7 @@ public function showTemplates()
public function createIncidentAction()
{
try {
- $incident = dispatch(new CreateIncidentCommand(
+ $incident = execute(new CreateIncidentCommand(
Binput::get('name'),
Binput::get('status'),
Binput::get('message', null, false, false),
@@ -119,7 +128,8 @@ public function createIncidentAction()
Binput::get('stickied', false),
Binput::get('occurred_at'),
null,
- []
+ [],
+ ['seo' => Binput::get('seo', [])]
));
} catch (ValidationException $e) {
return cachet_redirect('dashboard.incidents.create')
@@ -204,7 +214,7 @@ public function createIncidentTemplateAction()
*/
public function deleteIncidentAction(Incident $incident)
{
- dispatch(new RemoveIncidentCommand($incident));
+ execute(new RemoveIncidentCommand($incident));
return cachet_redirect('dashboard.incidents')
->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.delete.success')));
@@ -223,7 +233,8 @@ public function showEditIncidentAction(Incident $incident)
->withPageTitle(trans('dashboard.incidents.edit.title').' - '.trans('dashboard.dashboard'))
->withIncident($incident)
->withComponentsInGroups(ComponentGroup::with('components')->get())
- ->withComponentsOutGroups(Component::where('group_id', '=', 0)->get());
+ ->withComponentsOutGroups(Component::where('group_id', '=', 0)->get())
+ ->withNotificationsEnabled($this->system->canNotifySubscribers());
}
/**
@@ -236,7 +247,7 @@ public function showEditIncidentAction(Incident $incident)
public function editIncidentAction(Incident $incident)
{
try {
- $incident = dispatch(new UpdateIncidentCommand(
+ $incident = execute(new UpdateIncidentCommand(
$incident,
Binput::get('name'),
Binput::get('status'),
@@ -248,7 +259,8 @@ public function editIncidentAction(Incident $incident)
Binput::get('stickied', false),
Binput::get('occurred_at'),
null,
- []
+ [],
+ ['seo' => Binput::get('seo', [])]
));
} catch (ValidationException $e) {
return cachet_redirect('dashboard.incidents.edit', ['id' => $incident->id])
@@ -285,43 +297,4 @@ public function editTemplateAction(IncidentTemplate $template)
return cachet_redirect('dashboard.templates.edit', ['id' => $template->id])
->withUpdatedTemplate($template);
}
-
- /**
- * Shows the incident update form.
- *
- * @param \CachetHQ\Cachet\Models\Incident $incident
- *
- * @return \Illuminate\View\View
- */
- public function showIncidentUpdateAction(Incident $incident)
- {
- return View::make('dashboard.incidents.update')->withIncident($incident);
- }
-
- /**
- * Creates a new incident update.
- *
- * @param \CachetHQ\Cachet\Models\Incident $incident
- *
- * @return \Illuminate\Http\RedirectResponse
- */
- public function createIncidentUpdateAction(Incident $incident)
- {
- try {
- $incident = dispatch(new CreateIncidentUpdateCommand(
- $incident,
- Binput::get('status'),
- Binput::get('message'),
- $this->auth->user()
- ));
- } catch (ValidationException $e) {
- return cachet_redirect('dashboard.incidents.updates', ['id' => $incident->id])
- ->withInput(Binput::all())
- ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.incidents.templates.edit.failure')))
- ->withErrors($e->getMessageBag());
- }
-
- return cachet_redirect('dashboard.incidents')
- ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.update.success')));
- }
}
diff --git a/app/Http/Controllers/Dashboard/IncidentTemplateController.php b/app/Http/Controllers/Dashboard/IncidentTemplateController.php
new file mode 100644
index 00000000000..853b5b2baec
--- /dev/null
+++ b/app/Http/Controllers/Dashboard/IncidentTemplateController.php
@@ -0,0 +1,161 @@
+
+ */
+class IncidentTemplateController extends Controller
+{
+ /**
+ * Stores the sub-sidebar tree list.
+ *
+ * @var array
+ */
+ protected $subMenu = [];
+
+ /**
+ * The guard instance.
+ *
+ * @var \Illuminate\Contracts\Auth\Guard
+ */
+ protected $auth;
+
+ /**
+ * The system instance.
+ *
+ * @var \CachetHQ\Cachet\Integrations\Contracts\System
+ */
+ protected $system;
+
+ /**
+ * Creates a new incident controller instance.
+ *
+ * @param \Illuminate\Contracts\Auth\Guard $auth
+ *
+ * @return void
+ */
+ public function __construct(Guard $auth, System $system)
+ {
+ $this->auth = $auth;
+ $this->system = $system;
+
+ View::share('sub_title', trans('dashboard.incidents.title'));
+ }
+
+ /**
+ * Shows the incident templates.
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showTemplates()
+ {
+ return View::make('dashboard.templates.index')
+ ->withPageTitle(trans('dashboard.incidents.templates.title').' - '.trans('dashboard.dashboard'))
+ ->withIncidentTemplates(IncidentTemplate::all());
+ }
+
+ /**
+ * Shows the add incident template view.
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showAddIncidentTemplate()
+ {
+ return View::make('dashboard.templates.add')
+ ->withPageTitle(trans('dashboard.incidents.templates.add.title').' - '.trans('dashboard.dashboard'));
+ }
+
+ /**
+ * Shows the edit incident template view.
+ *
+ * @param \CachetHQ\Cachet\Models\IncidentTemplate $template
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showEditTemplateAction(IncidentTemplate $template)
+ {
+ return View::make('dashboard.templates.edit')
+ ->withPageTitle(trans('dashboard.incidents.templates.edit.title').' - '.trans('dashboard.dashboard'))
+ ->withTemplate($template);
+ }
+
+ /**
+ * Deletes an incident template.
+ *
+ * @param \CachetHQ\Cachet\Models\IncidentTemplate $template
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function deleteTemplateAction(IncidentTemplate $template)
+ {
+ $template->delete();
+
+ return cachet_redirect('dashboard.templates')
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.templates.delete.success')));
+ }
+
+ /**
+ * Creates a new incident template.
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function createIncidentTemplateAction()
+ {
+ try {
+ IncidentTemplate::create([
+ 'name' => Binput::get('name'),
+ 'template' => Binput::get('template', null, false, false),
+ ]);
+ } catch (ValidationException $e) {
+ return cachet_redirect('dashboard.templates.create')
+ ->withInput(Binput::all())
+ ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.incidents.templates.add.failure')))
+ ->withErrors($e->getMessageBag());
+ }
+
+ return cachet_redirect('dashboard.templates')
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.templates.add.success')));
+ }
+
+ /**
+ * Edit an incident template.
+ *
+ * @param \CachetHQ\Cachet\Models\IncidentTemplate $template
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function editTemplateAction(IncidentTemplate $template)
+ {
+ try {
+ $template->update(Binput::get('template'));
+ } catch (ValidationException $e) {
+ return cachet_redirect('dashboard.templates.edit', ['id' => $template->id])
+ ->withUpdatedTemplate($template)
+ ->withTemplateErrors($e->getMessageBag()->getErrors());
+ }
+
+ return cachet_redirect('dashboard.templates.edit', ['id' => $template->id])
+ ->withUpdatedTemplate($template);
+ }
+}
diff --git a/app/Http/Controllers/Dashboard/IncidentUpdateController.php b/app/Http/Controllers/Dashboard/IncidentUpdateController.php
new file mode 100644
index 00000000000..092809e374d
--- /dev/null
+++ b/app/Http/Controllers/Dashboard/IncidentUpdateController.php
@@ -0,0 +1,172 @@
+
+ */
+class IncidentUpdateController extends Controller
+{
+ /**
+ * Stores the sub-sidebar tree list.
+ *
+ * @var array
+ */
+ protected $subMenu = [];
+
+ /**
+ * The guard instance.
+ *
+ * @var \Illuminate\Contracts\Auth\Guard
+ */
+ protected $auth;
+
+ /**
+ * The system instance.
+ *
+ * @var \CachetHQ\Cachet\Integrations\Contracts\System
+ */
+ protected $system;
+
+ /**
+ * Creates a new incident controller instance.
+ *
+ * @param \Illuminate\Contracts\Auth\Guard $auth
+ *
+ * @return void
+ */
+ public function __construct(Guard $auth, System $system)
+ {
+ $this->auth = $auth;
+ $this->system = $system;
+
+ View::share('sub_title', trans('dashboard.incidents.title'));
+ }
+
+ /**
+ * Shows the incident update form.
+ *
+ * @param \CachetHQ\Cachet\Models\Incident $incident
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showIncidentUpdates(Incident $incident)
+ {
+ return View::make('dashboard.incidents.updates.index')->withIncident($incident);
+ }
+
+ /**
+ * Shows the incident update form.
+ *
+ * @param \CachetHQ\Cachet\Models\Incident $incident
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showCreateIncidentUpdateAction(Incident $incident)
+ {
+ return View::make('dashboard.incidents.updates.add')
+ ->withIncident($incident)
+ ->withIncidentTemplates(IncidentTemplate::all())
+ ->withNotificationsEnabled($this->system->canNotifySubscribers());
+ }
+
+ /**
+ * Creates a new incident update.
+ *
+ * @param \CachetHQ\Cachet\Models\Incident $incident
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function createIncidentUpdateAction(Incident $incident)
+ {
+ try {
+ $incidentUpdate = execute(new CreateIncidentUpdateCommand(
+ $incident,
+ Binput::get('status'),
+ Binput::get('message'),
+ Binput::get('component_id'),
+ Binput::get('component_status'),
+ $this->auth->user()
+ ));
+ } catch (ValidationException $e) {
+ return cachet_redirect('dashboard.incidents.updates.create', ['id' => $incident->id])
+ ->withInput(Binput::all())
+ ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.incidents.updates.add.failure')))
+ ->withErrors($e->getMessageBag());
+ }
+
+ if ($incident->component) {
+ $incident->component->update(['status' => Binput::get('component_status')]);
+ }
+
+ return cachet_redirect('dashboard.incidents')
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.updates.success')));
+ }
+
+ /**
+ * Shows the edit incident view.
+ *
+ * @param \CachetHQ\Cachet\Models\Incident $incident
+ * @param \CachetHQ\Cachet\Models\IncidentUpdate $incidentUpdate
+ *
+ * @return \Illuminate\View\View
+ */
+ public function showEditIncidentUpdateAction(Incident $incident, IncidentUpdate $incidentUpdate)
+ {
+ return View::make('dashboard.incidents.updates.edit')
+ ->withIncident($incident)
+ ->withUpdate($incidentUpdate)
+ ->withNotificationsEnabled($this->system->canNotifySubscribers());
+ }
+
+ /**
+ * Edit an incident update.
+ *
+ * @param \CachetHQ\Cachet\Models\Incident $incident
+ * @param \CachetHQ\Cachet\Models\IncidentUpdate $incidentUpdate
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function editIncidentUpdateAction(Incident $incident, IncidentUpdate $incidentUpdate)
+ {
+ try {
+ $incidentUpdate = execute(new UpdateIncidentUpdateCommand(
+ $incidentUpdate,
+ Binput::get('status'),
+ Binput::get('message'),
+ $this->auth->user()
+ ));
+ } catch (ValidationException $e) {
+ return cachet_redirect('dashboard.incidents.updates.edit', ['incident' => $incident->id, 'incident_update' => $incidentUpdate->id])
+ ->withInput(Binput::all())
+ ->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('dashboard.incidents.updates.edit.failure')))
+ ->withErrors($e->getMessageBag());
+ }
+
+ return cachet_redirect('dashboard.incidents.updates', ['incident' => $incident->id])
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.incidents.updates.edit.success')));
+ }
+}
diff --git a/app/Http/Controllers/Dashboard/MetricController.php b/app/Http/Controllers/Dashboard/MetricController.php
index 94f8379d2a6..1a0b601c745 100644
--- a/app/Http/Controllers/Dashboard/MetricController.php
+++ b/app/Http/Controllers/Dashboard/MetricController.php
@@ -45,8 +45,7 @@ public function showMetrics()
public function showAddMetric()
{
return View::make('dashboard.metrics.add')
- ->withPageTitle(trans('dashboard.metrics.add.title').' - '.trans('dashboard.dashboard'))
- ->withAcceptableThresholds(Metric::ACCEPTABLE_THRESHOLDS);
+ ->withPageTitle(trans('dashboard.metrics.add.title').' - '.trans('dashboard.dashboard'));
}
/**
@@ -71,7 +70,7 @@ public function createMetricAction()
$metricData = Binput::get('metric');
try {
- dispatch(new CreateMetricCommand(
+ execute(new CreateMetricCommand(
$metricData['name'],
$metricData['suffix'],
$metricData['description'],
@@ -115,7 +114,7 @@ public function showAddMetricPoint()
*/
public function deleteMetricAction(Metric $metric)
{
- dispatch(new RemoveMetricCommand($metric));
+ execute(new RemoveMetricCommand($metric));
return cachet_redirect('dashboard.metrics')
->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.metrics.delete.success')));
@@ -132,8 +131,7 @@ public function showEditMetricAction(Metric $metric)
{
return View::make('dashboard.metrics.edit')
->withPageTitle(trans('dashboard.metrics.edit.title').' - '.trans('dashboard.dashboard'))
- ->withMetric($metric)
- ->withAcceptableThresholds(Metric::ACCEPTABLE_THRESHOLDS);
+ ->withMetric($metric);
}
/**
@@ -146,7 +144,7 @@ public function showEditMetricAction(Metric $metric)
public function editMetricAction(Metric $metric)
{
try {
- dispatch(new UpdateMetricCommand(
+ execute(new UpdateMetricCommand(
$metric,
Binput::get('name', null, false),
Binput::get('suffix', null, false),
diff --git a/app/Http/Controllers/Dashboard/ScheduleController.php b/app/Http/Controllers/Dashboard/ScheduleController.php
index 7bb70953b67..c06216a916f 100644
--- a/app/Http/Controllers/Dashboard/ScheduleController.php
+++ b/app/Http/Controllers/Dashboard/ScheduleController.php
@@ -15,6 +15,7 @@
use CachetHQ\Cachet\Bus\Commands\Schedule\CreateScheduleCommand;
use CachetHQ\Cachet\Bus\Commands\Schedule\DeleteScheduleCommand;
use CachetHQ\Cachet\Bus\Commands\Schedule\UpdateScheduleCommand;
+use CachetHQ\Cachet\Integrations\Contracts\System;
use CachetHQ\Cachet\Models\IncidentTemplate;
use CachetHQ\Cachet\Models\Schedule;
use GrahamCampbell\Binput\Facades\Binput;
@@ -35,14 +36,22 @@ class ScheduleController extends Controller
*/
protected $subMenu = [];
+ /**
+ * The system instance.
+ *
+ * @var \CachetHQ\Cachet\Integrations\Contracts\System
+ */
+ protected $system;
+
/**
* Creates a new schedule controller instance.
*
* @return void
*/
- public function __construct()
+ public function __construct(System $system)
{
- View::share('sub_title', trans('dashboard.schedule.title'));
+ $this->system = $system;
+ View::share('subTitle', trans('dashboard.schedule.title'));
}
/**
@@ -70,7 +79,8 @@ public function showAddSchedule()
return View::make('dashboard.maintenance.add')
->withPageTitle(trans('dashboard.schedule.add.title').' - '.trans('dashboard.dashboard'))
- ->withIncidentTemplates($incidentTemplates);
+ ->withIncidentTemplates($incidentTemplates)
+ ->withNotificationsEnabled($this->system->canNotifySubscribers());
}
/**
@@ -81,13 +91,14 @@ public function showAddSchedule()
public function addScheduleAction()
{
try {
- dispatch(new CreateScheduleCommand(
+ execute(new CreateScheduleCommand(
Binput::get('name'),
Binput::get('message', null, false, false),
Binput::get('status', Schedule::UPCOMING),
Binput::get('scheduled_at'),
Binput::get('completed_at'),
- Binput::get('components', [])
+ Binput::get('components', []),
+ Binput::get('notify', false)
));
} catch (ValidationException $e) {
return cachet_redirect('dashboard.schedule.create')
@@ -127,7 +138,7 @@ public function showEditSchedule(Schedule $schedule)
public function editScheduleAction(Schedule $schedule)
{
try {
- $schedule = dispatch(new UpdateScheduleCommand(
+ $schedule = execute(new UpdateScheduleCommand(
$schedule,
Binput::get('name', null),
Binput::get('message', null),
@@ -156,7 +167,7 @@ public function editScheduleAction(Schedule $schedule)
*/
public function deleteScheduleAction(Schedule $schedule)
{
- dispatch(new DeleteScheduleCommand($schedule));
+ execute(new DeleteScheduleCommand($schedule));
return cachet_redirect('dashboard.schedule')
->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.schedule.delete.success')));
diff --git a/app/Http/Controllers/Dashboard/SettingsController.php b/app/Http/Controllers/Dashboard/SettingsController.php
index 899501b0aa0..f128e22711e 100644
--- a/app/Http/Controllers/Dashboard/SettingsController.php
+++ b/app/Http/Controllers/Dashboard/SettingsController.php
@@ -18,15 +18,17 @@
use CachetHQ\Cachet\Settings\Repository;
use Exception;
use GrahamCampbell\Binput\Facades\Binput;
-use Illuminate\Log\Writer;
use Illuminate\Routing\Controller;
+use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Lang;
+use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Str;
+use Monolog\Handler\SyslogHandler;
class SettingsController extends Controller
{
@@ -114,8 +116,8 @@ public function __construct()
];
View::share([
- 'sub_title' => trans('dashboard.settings.settings'),
- 'sub_menu' => $this->subMenu,
+ 'subTitle' => trans('dashboard.settings.settings'),
+ 'subMenu' => $this->subMenu,
]);
}
@@ -268,13 +270,17 @@ public function showLogView()
{
$this->subMenu['log']['active'] = true;
- $log = app(Writer::class)->getMonolog();
+ $log = Log::getLogger();
- if (file_exists($path = $log->getHandlers()[0]->getUrl())) {
- $logContents = file_get_contents($path);
- } else {
- $logContents = '';
- }
+ $logContents = '';
+
+ collect($log->getHandlers())->reject(function ($handler) {
+ return $handler instanceof SyslogHandler;
+ })->each(function ($handler) use (&$logContents, $log) {
+ if (file_exists($path = $log->getHandlers()[0]->getUrl())) {
+ $logContents = file_get_contents($path);
+ }
+ });
return View::make('dashboard.settings.log')->withLog($logContents)->withSubMenu($this->subMenu);
}
@@ -313,7 +319,7 @@ public function postMail()
{
$config = Binput::get('config');
- dispatch(new UpdateConfigCommand($config));
+ execute(new UpdateConfigCommand($config));
return cachet_redirect('dashboard.settings.mail')
->withInput(Binput::all())
@@ -351,6 +357,14 @@ public function postSettings()
}
}
+ if (isset($parameters['stylesheet'])) {
+ if ($stylesheet = Binput::get('stylesheet', null, false, false)) {
+ $setting->set('stylesheet', $stylesheet);
+ } else {
+ $setting->delete('stylesheet');
+ }
+ }
+
if (Binput::hasFile('app_banner')) {
$this->handleUpdateBanner($setting);
}
@@ -361,6 +375,7 @@ public function postSettings()
'remove_banner',
'header',
'footer',
+ 'stylesheet',
];
try {
@@ -379,6 +394,10 @@ public function postSettings()
Lang::setLocale(Binput::get('app_locale'));
}
+ if (Binput::has('always_authenticate')) {
+ Artisan::call('route:clear');
+ }
+
return Redirect::back()->withSuccess(trans('dashboard.settings.edit.success'));
}
@@ -392,6 +411,7 @@ public function postSettings()
protected function handleUpdateBanner(Repository $setting)
{
$file = Binput::file('app_banner');
+ $redirectUrl = $this->subMenu['theme']['url'];
// Image Validation.
// Image size in bytes.
diff --git a/app/Http/Controllers/Dashboard/SubscriberController.php b/app/Http/Controllers/Dashboard/SubscriberController.php
index e9749996973..17de83eb4a2 100644
--- a/app/Http/Controllers/Dashboard/SubscriberController.php
+++ b/app/Http/Controllers/Dashboard/SubscriberController.php
@@ -31,7 +31,7 @@ public function showSubscribers()
{
return View::make('dashboard.subscribers.index')
->withPageTitle(trans('dashboard.subscribers.subscribers').' - '.trans('dashboard.dashboard'))
- ->withSubscribers(Subscriber::all());
+ ->withSubscribers(Subscriber::with('subscriptions.component')->get());
}
/**
@@ -58,7 +58,7 @@ public function createSubscriberAction()
$subscribers = preg_split("/\r\n|\n|\r/", Binput::get('email'));
foreach ($subscribers as $subscriber) {
- dispatch(new SubscribeSubscriberCommand($subscriber, $verified));
+ execute(new SubscribeSubscriberCommand($subscriber, $verified));
}
} catch (ValidationException $e) {
return cachet_redirect('dashboard.subscribers.create')
@@ -82,7 +82,7 @@ public function createSubscriberAction()
*/
public function deleteSubscriberAction(Subscriber $subscriber)
{
- dispatch(new UnsubscribeSubscriberCommand($subscriber));
+ execute(new UnsubscribeSubscriberCommand($subscriber));
return cachet_redirect('dashboard.subscribers');
}
diff --git a/app/Http/Controllers/Dashboard/TeamController.php b/app/Http/Controllers/Dashboard/TeamController.php
index 6e0d112b305..b762161907f 100644
--- a/app/Http/Controllers/Dashboard/TeamController.php
+++ b/app/Http/Controllers/Dashboard/TeamController.php
@@ -80,7 +80,7 @@ public function showInviteTeamMemberView()
public function postAddUser()
{
try {
- dispatch(new CreateUserCommand(
+ execute(new CreateUserCommand(
Binput::get('username'),
Binput::get('password'),
Binput::get('email'),
@@ -129,7 +129,7 @@ public function postUpdateUser(User $user)
public function postInviteUser()
{
try {
- dispatch(new InviteUserCommand(
+ execute(new InviteUserCommand(
array_unique(array_filter((array) Binput::get('emails')))
));
} catch (ValidationException $e) {
@@ -152,7 +152,7 @@ public function postInviteUser()
*/
public function deleteUser(User $user)
{
- dispatch(new RemoveUserCommand($user));
+ execute(new RemoveUserCommand($user));
return cachet_redirect('dashboard.team')
->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('dashboard.team.delete.success')));
diff --git a/app/Http/Controllers/Dashboard/UserController.php b/app/Http/Controllers/Dashboard/UserController.php
index f9112b1e980..ba01e862b6d 100644
--- a/app/Http/Controllers/Dashboard/UserController.php
+++ b/app/Http/Controllers/Dashboard/UserController.php
@@ -18,9 +18,10 @@
use CachetHQ\Cachet\Models\User;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Routing\Controller;
+use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\View;
-use PragmaRX\Google2FA\Vendor\Laravel\Facade as Google2FA;
+use PragmaRX\Google2FA\Google2FA;
class UserController extends Controller
{
@@ -38,18 +39,22 @@ public function showUser()
/**
* Updates the current user.
*
+ * @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException
+ * @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException
+ *
* @return \Illuminate\View\View
*/
public function postUser()
{
$userData = array_filter(Binput::only(['username', 'email', 'password', 'google2fa']));
- $enable2FA = (bool) array_pull($userData, 'google2fa');
+ $enable2FA = (bool) Arr::pull($userData, 'google2fa');
// Let's enable/disable auth
if ($enable2FA && !Auth::user()->hasTwoFactor) {
event(new UserEnabledTwoAuthEvent(Auth::user()));
- $userData['google_2fa_secret'] = Google2FA::generateSecretKey();
+ $google2fa = new Google2FA();
+ $userData['google_2fa_secret'] = $google2fa->generateSecretKey();
} elseif (!$enable2FA) {
event(new UserDisabledTwoAuthEvent(Auth::user()));
$userData['google_2fa_secret'] = '';
diff --git a/app/Http/Controllers/FeedController.php b/app/Http/Controllers/FeedController.php
deleted file mode 100644
index 1cf96e2b76c..00000000000
--- a/app/Http/Controllers/FeedController.php
+++ /dev/null
@@ -1,117 +0,0 @@
-
- */
-class FeedController extends Controller
-{
- /**
- * Feed facade.
- *
- * @var \Roumen\Feed\Feed
- */
- protected $feed;
-
- /**
- * Create a new feed controller instance.
- *
- * @return void
- */
- public function __construct()
- {
- $this->feed = app('feed');
- $this->feed->title = Config::get('setting.app_name');
- $this->feed->description = trans('cachet.feed');
- $this->feed->link = Str::canonicalize(Config::get('setting.app_domain'));
- $this->feed->ctype = 'text/xml';
- $this->feed->setDateFormat('datetime');
- }
-
- /**
- * Generates an Atom feed of all incidents.
- *
- * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group
- *
- * @return \Illuminate\Http\Response
- */
- public function atomAction(ComponentGroup $group = null)
- {
- return $this->feedAction($group, false);
- }
-
- /**
- * Generates a Rss feed of all incidents.
- *
- * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group
- *
- * @return \Illuminate\Http\Response
- */
- public function rssAction(ComponentGroup $group = null)
- {
- $this->feed->lang = Config::get('setting.app_locale');
-
- return $this->feedAction($group, true);
- }
-
- /**
- * Generates a Rss feed of all incidents.
- *
- * @param \CachetHQ\Cachet\Models\ComponentGroup|null $group
- * @param bool $isRss
- *
- * @return \Illuminate\Http\Response
- */
- private function feedAction(ComponentGroup &$group, $isRss)
- {
- if ($group->exists) {
- $group->components->map(function ($component) use ($isRss) {
- $component->incidents()->visible()->orderBy('occurred_at', 'desc')->get()->map(function ($incident) use ($isRss) {
- $this->feedAddItem($incident, $isRss);
- });
- });
- } else {
- Incident::visible()->orderBy('occurred_at', 'desc')->get()->map(function ($incident) use ($isRss) {
- $this->feedAddItem($incident, $isRss);
- });
- }
-
- return $this->feed->render($isRss ? 'rss' : 'atom');
- }
-
- /**
- * Adds an item to the feed.
- *
- * @param \CachetHQ\Cachet\Models\Incident $incident
- * @param bool $isRss
- */
- private function feedAddItem(Incident $incident, $isRss)
- {
- $this->feed->add(
- $incident->name,
- Config::get('setting.app_name'),
- Str::canonicalize(cachet_route('incident', [$incident->id])),
- $isRss ? $incident->occurred_at->toRssString() : $incident->occurred_at->toAtomString(),
- $isRss ? $incident->message : Markdown::convertToHtml($incident->message)
- );
- }
-}
diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php
index 06d58665fb9..52bf51f7a3b 100644
--- a/app/Http/Controllers/SetupController.php
+++ b/app/Http/Controllers/SetupController.php
@@ -16,6 +16,7 @@
use CachetHQ\Cachet\Settings\Repository;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Routing\Controller;
+use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Request;
@@ -133,18 +134,21 @@ public function __construct()
*/
public function getIndex()
{
- $supportedLanguages = Request::getLanguages();
+ $requestedLanguages = Request::getLanguages();
$userLanguage = Config::get('app.locale');
+ $langs = Config::get('langs');
- foreach ($supportedLanguages as $language) {
+ foreach ($requestedLanguages as $language) {
$language = str_replace('_', '-', $language);
- if (isset($this->langs[$language])) {
+ if (isset($langs[$language])) {
$userLanguage = $language;
break;
}
}
+ app('translator')->setLocale($userLanguage);
+
// Since .env may already be configured, we should show that data!
$cacheConfig = [
'driver' => Config::get('cache.default'),
@@ -194,8 +198,12 @@ public function postStep1()
return $input->env['mail_driver'] === 'smtp';
});
- $v->sometimes(['env.mail_address', 'env.mail_username', 'env.mail_password'], 'required', function ($input) {
- return $input->env['mail_driver'] !== 'log';
+ $v->sometimes(['env.mail_address', 'env.mail_password'], 'required', function ($input) {
+ return !in_array($input->env['mail_driver'], ['log', 'smtp']);
+ });
+
+ $v->sometimes(['env.mail_username'], 'required', function ($input) {
+ return !in_array($input->env['mail_driver'], ['sendmail', 'log']);
});
if ($v->passes()) {
@@ -236,7 +244,7 @@ public function postStep3()
if ($v->passes()) {
// Pull the user details out.
- $userDetails = array_pull($postData, 'user');
+ $userDetails = Arr::pull($postData, 'user');
$user = User::create([
'username' => $userDetails['username'],
@@ -249,16 +257,16 @@ public function postStep3()
$setting = app(Repository::class);
- $settings = array_pull($postData, 'settings');
+ $settings = Arr::pull($postData, 'settings');
foreach ($settings as $settingName => $settingValue) {
$setting->set($settingName, $settingValue);
}
- $envData = array_pull($postData, 'env');
+ $envData = Arr::pull($postData, 'env');
// Write the env to the .env file.
- dispatch(new UpdateConfigCommand($envData));
+ execute(new UpdateConfigCommand($envData));
if (Request::ajax()) {
return Response::json(['status' => 1]);
diff --git a/app/Http/Controllers/SignupController.php b/app/Http/Controllers/SignupController.php
index a506c59fbff..6c7db1522d4 100644
--- a/app/Http/Controllers/SignupController.php
+++ b/app/Http/Controllers/SignupController.php
@@ -69,7 +69,7 @@ public function postSignup($code = null)
}
try {
- dispatch(new SignupUserCommand(
+ execute(new SignupUserCommand(
Binput::get('username'),
Binput::get('password'),
Binput::get('email'),
@@ -82,7 +82,7 @@ public function postSignup($code = null)
->withErrors($e->getMessageBag());
}
- dispatch(new ClaimInviteCommand($invite));
+ execute(new ClaimInviteCommand($invite));
return cachet_redirect('status-page')
->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.signup.success')));
diff --git a/app/Http/Controllers/StatusPageController.php b/app/Http/Controllers/StatusPageController.php
index 07f1194df5c..12766de5af0 100644
--- a/app/Http/Controllers/StatusPageController.php
+++ b/app/Http/Controllers/StatusPageController.php
@@ -11,7 +11,7 @@
namespace CachetHQ\Cachet\Http\Controllers;
-use AltThree\Badger\Facades\Badger;
+use CachetHQ\Badger\Facades\Badger;
use CachetHQ\Cachet\Http\Controllers\Api\AbstractApiController;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\Incident;
@@ -19,7 +19,6 @@
use CachetHQ\Cachet\Models\Schedule;
use CachetHQ\Cachet\Repositories\Metric\MetricRepository;
use CachetHQ\Cachet\Services\Dates\DateFactory;
-use Exception;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
@@ -45,36 +44,70 @@ class StatusPageController extends AbstractApiController
*/
public function showIndex()
{
- $today = Date::now();
- $startDate = Date::now();
-
- // Check if we have another starting date
- if (Binput::has('start_date')) {
- try {
- // If date provided is valid
- $oldDate = Date::createFromFormat('Y-m-d', Binput::get('start_date'));
-
- // If trying to get a future date fallback to today
- if ($today->gt($oldDate)) {
- $startDate = $oldDate;
- }
- } catch (Exception $e) {
- // Fallback to today
+ $onlyDisruptedDays = Config::get('setting.only_disrupted_days');
+ $appIncidentDays = (int) Config::get('setting.app_incident_days', 1);
+
+ $startDate = Date::createFromFormat('Y-m-d', Binput::get('start_date', Date::now()->toDateString()));
+ $endDate = $startDate->copy()->subDays($appIncidentDays);
+
+ $canPageForward = false;
+ $canPageBackward = false;
+ $previousDate = null;
+ $nextDate = null;
+
+ if ($onlyDisruptedDays) {
+ // In this case, start_date GET parameter means the page
+ $page = (int) Binput::get('start_date', 0);
+
+ $allIncidentDays = Incident::where('visible', '>=', (int) !Auth::check())
+ ->select('occurred_at')
+ ->whereBetween('occurred_at', [
+ $endDate->format('Y-m-d').' 00:00:00',
+ $startDate->format('Y-m-d').' 23:59:59',
+ ])
+ ->distinct()
+ ->orderBy('occurred_at', 'desc')
+ ->get()
+ ->map(function (Incident $incident) {
+ return app(DateFactory::class)->make($incident->occurred_at)->toDateString();
+ })->unique()
+ ->values();
+
+ $numIncidentDays = count($allIncidentDays);
+ $numPages = round($numIncidentDays / max($appIncidentDays, 1));
+
+ $selectedDays = $allIncidentDays->slice($page * $appIncidentDays, $appIncidentDays)->all();
+
+ if (count($selectedDays) > 0) {
+ $startDate = Date::createFromFormat('Y-m-d', array_values($selectedDays)[0]);
+ $endDate = Date::createFromFormat('Y-m-d', array_values(array_slice($selectedDays, -1))[0]);
}
+
+ $canPageForward = $page > 0;
+ $canPageBackward = ($page + 1) < $numPages;
+ $previousDate = $page + 1;
+ $nextDate = $page - 1;
+ } else {
+ $date = Date::now();
+
+ $canPageForward = (bool) $startDate->lt($date->sub('1 day'));
+ $canPageBackward = Incident::where('occurred_at', '<', $date->format('Y-m-d'))->count() > 0;
+ $previousDate = $startDate->copy()->subDays($appIncidentDays)->toDateString();
+ $nextDate = $startDate->copy()->addDays($appIncidentDays)->toDateString();
}
- $appIncidentDays = (int) Config::get('setting.app_incident_days', 1);
- $incidentDays = array_pad([], $appIncidentDays, null);
+ $allIncidents = Incident::with('component', 'updates.incident')
+ ->where('visible', '>=', (int) !Auth::check())->whereBetween('occurred_at', [
+ $endDate->format('Y-m-d').' 00:00:00',
+ $startDate->format('Y-m-d').' 23:59:59',
+ ])->orderBy('occurred_at', 'desc')->get()->groupBy(function (Incident $incident) {
+ return app(DateFactory::class)->make($incident->occurred_at)->toDateString();
+ });
- $allIncidents = Incident::where('visible', '>=', (int) !Auth::check())->whereBetween('occurred_at', [
- $startDate->copy()->subDays($appIncidentDays)->format('Y-m-d').' 00:00:00',
- $startDate->format('Y-m-d').' 23:59:59',
- ])->orderBy('occurred_at', 'desc')->get()->groupBy(function (Incident $incident) {
- return app(DateFactory::class)->make($incident->occurred_at)->toDateString();
- });
+ if (!$onlyDisruptedDays) {
+ $incidentDays = array_pad([], $appIncidentDays, null);
- // Add in days that have no incidents
- if (Config::get('setting.only_disrupted_days') === false) {
+ // Add in days that have no incidents
foreach ($incidentDays as $i => $day) {
$date = app(DateFactory::class)->make($startDate)->subDays($i);
@@ -92,10 +125,10 @@ public function showIndex()
return View::make('index')
->withDaysToShow($appIncidentDays)
->withAllIncidents($allIncidents)
- ->withCanPageForward((bool) $today->gt($startDate))
- ->withCanPageBackward(Incident::where('occurred_at', '<', $startDate->format('Y-m-d'))->count() > 0)
- ->withPreviousDate($startDate->copy()->subDays($appIncidentDays)->toDateString())
- ->withNextDate($startDate->copy()->addDays($appIncidentDays)->toDateString());
+ ->withCanPageForward($canPageForward)
+ ->withCanPageBackward($canPageBackward)
+ ->withPreviousDate($previousDate)
+ ->withNextDate($nextDate);
}
/**
@@ -131,14 +164,18 @@ public function showSchedule(Schedule $schedule)
*/
public function getMetrics(Metric $metric)
{
- $type = Binput::get('filter', 'last_hour');
+ $type = Binput::get('filter', AutoPresenter::decorate($metric)->view_name);
$metrics = app(MetricRepository::class);
switch ($type) {
- case 'last_hour': $metricData = $metrics->listPointsLastHour($metric); break;
- case 'today': $metricData = $metrics->listPointsToday($metric); break;
- case 'week': $metricData = $metrics->listPointsForWeek($metric); break;
- case 'month': $metricData = $metrics->listPointsForMonth($metric); break;
+ case 'last_hour': $metricData = $metrics->listPointsLastHour($metric);
+ break;
+ case 'today': $metricData = $metrics->listPointsToday($metric);
+ break;
+ case 'week': $metricData = $metrics->listPointsForWeek($metric);
+ break;
+ case 'month': $metricData = $metrics->listPointsForMonth($metric);
+ break;
default: $metricData = [];
}
@@ -160,10 +197,14 @@ public function showComponentBadge(Component $component)
$component = AutoPresenter::decorate($component);
switch ($component->status_color) {
- case 'reds': $color = Config::get('setting.style_reds', '#FF6F6F'); break;
- case 'blues': $color = Config::get('setting.style_blues', '#3498DB'); break;
- case 'greens': $color = Config::get('setting.style_greens', '#7ED321'); break;
- case 'yellows': $color = Config::get('setting.style_yellows', '#F7CA18'); break;
+ case 'reds': $color = Config::get('setting.style_reds', '#FF6F6F');
+ break;
+ case 'blues': $color = Config::get('setting.style_blues', '#3498DB');
+ break;
+ case 'greens': $color = Config::get('setting.style_greens', '#7ED321');
+ break;
+ case 'yellows': $color = Config::get('setting.style_yellows', '#F7CA18');
+ break;
default: $color = null;
}
diff --git a/app/Http/Controllers/SubscribeController.php b/app/Http/Controllers/SubscribeController.php
index 7ae2cc16b9c..afa866a9610 100644
--- a/app/Http/Controllers/SubscribeController.php
+++ b/app/Http/Controllers/SubscribeController.php
@@ -21,12 +21,14 @@
use CachetHQ\Cachet\Models\ComponentGroup;
use CachetHQ\Cachet\Models\Subscriber;
use CachetHQ\Cachet\Models\Subscription;
+use CachetHQ\Cachet\Notifications\Subscriber\ManageSubscriptionNotification;
use GrahamCampbell\Binput\Facades\Binput;
use GrahamCampbell\Markdown\Facades\Markdown;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\View;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
@@ -80,7 +82,7 @@ public function postSubscribe()
$verified = app(Repository::class)->get('setting.skip_subscriber_verification');
try {
- $subscription = dispatch(new SubscribeSubscriberCommand($email, $verified));
+ $subscription = execute(new SubscribeSubscriberCommand($email, $verified));
} catch (ValidationException $e) {
return cachet_redirect('status-page')
->withInput(Binput::all())
@@ -88,12 +90,16 @@ public function postSubscribe()
->withErrors($e->getMessageBag());
}
- if ($subscription->is_verified) {
- return cachet_redirect('status-page')->withSuccess(trans('cachet.subscriber.email.already-subscribed', ['email' => $email]));
- }
+ // Send the subscriber a link to manage their subscription.
+ $subscription->notify(new ManageSubscriptionNotification());
- return cachet_redirect('subscribe.manage', $subscription->verify_code)
- ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.subscribed')));
+ return redirect()->back()->withSuccess(
+ sprintf(
+ '%s %s',
+ trans('dashboard.notifications.awesome'),
+ trans('cachet.subscriber.email.manage_subscription')
+ )
+ );
}
/**
@@ -116,11 +122,11 @@ public function getVerify($code = null)
}
if (!$subscriber->is_verified) {
- dispatch(new VerifySubscriberCommand($subscriber));
+ execute(new VerifySubscriberCommand($subscriber));
}
- return cachet_redirect('status-page')
- ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.verified')));
+ return redirect()->to(URL::signedRoute(cachet_route_generator('subscribe.manage'), ['code' => $code]))
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.subscribed')));
}
/**
@@ -144,9 +150,9 @@ public function getUnsubscribe($code = null, $subscription = null)
}
if ($subscription) {
- dispatch(new UnsubscribeSubscriptionCommand(Subscription::forSubscriber($subscriber->id)->firstOrFail()));
+ execute(new UnsubscribeSubscriptionCommand(Subscription::forSubscriber($subscriber->id)->firstOrFail()));
} else {
- dispatch(new UnsubscribeSubscriberCommand($subscriber));
+ execute(new UnsubscribeSubscriberCommand($subscriber));
}
return cachet_redirect('status-page')
@@ -204,15 +210,15 @@ public function postManage($code = null)
}
try {
- dispatch(new UpdateSubscriberSubscriptionCommand($subscriber, Binput::get('subscriptions')));
+ execute(new UpdateSubscriberSubscriptionCommand($subscriber, Binput::get('subscriptions')));
} catch (ValidationException $e) {
- return cachet_redirect('subscribe.manage', $subscriber->verify_code)
+ return redirect()->to(URL::signedRoute(cachet_route_generator('subscribe.manage'), ['code' => $subscriber->verify_code]))
->withInput(Binput::all())
->withTitle(sprintf('%s %s', trans('dashboard.notifications.whoops'), trans('cachet.subscriber.email.failure')))
->withErrors($e->getMessageBag());
}
- return cachet_redirect('subscribe.manage', $subscriber->verify_code)
- ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.subscribed')));
+ return redirect()->to(URL::signedRoute(cachet_route_generator('subscribe.manage'), ['code' => $subscriber->verify_code]))
+ ->withSuccess(sprintf('%s %s', trans('dashboard.notifications.awesome'), trans('cachet.subscriber.email.updated-subscribe')));
}
}
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index afb1bd2c3a6..ee7e3b40aa9 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -11,7 +11,23 @@
namespace CachetHQ\Cachet\Http;
+use Barryvdh\Cors\HandleCors;
+use CachetHQ\Cachet\Http\Middleware\Admin;
+use CachetHQ\Cachet\Http\Middleware\ApiAuthentication;
+use CachetHQ\Cachet\Http\Middleware\Authenticate;
+use CachetHQ\Cachet\Http\Middleware\CacheControl;
+use CachetHQ\Cachet\Http\Middleware\Localize;
+use CachetHQ\Cachet\Http\Middleware\ReadyForUse;
+use CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated;
+use CachetHQ\Cachet\Http\Middleware\RemoteUserAuthenticate;
+use CachetHQ\Cachet\Http\Middleware\SetupAlreadyCompleted;
+use CachetHQ\Cachet\Http\Middleware\SubscribersConfigured;
+use CachetHQ\Cachet\Http\Middleware\Throttler;
+use CachetHQ\Cachet\Http\Middleware\TrustProxies;
+use Illuminate\Auth\Middleware\Authorize;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
+use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode;
+use Illuminate\Routing\Middleware\ValidateSignature;
class Kernel extends HttpKernel
{
@@ -21,8 +37,8 @@ class Kernel extends HttpKernel
* @var array
*/
protected $middleware = [
- 'Fideloper\Proxy\TrustProxies',
- 'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
+ TrustProxies::class,
+ CheckForMaintenanceMode::class,
];
/**
@@ -31,15 +47,19 @@ class Kernel extends HttpKernel
* @var array
*/
protected $routeMiddleware = [
- 'admin' => 'CachetHQ\Cachet\Http\Middleware\Admin',
- 'can' => 'Illuminate\Auth\Middleware\Authorize',
- 'auth' => 'CachetHQ\Cachet\Http\Middleware\Authenticate',
- 'auth.api' => 'CachetHQ\Cachet\Http\Middleware\ApiAuthentication',
- 'guest' => 'CachetHQ\Cachet\Http\Middleware\RedirectIfAuthenticated',
- 'localize' => 'CachetHQ\Cachet\Http\Middleware\Localize',
- 'ready' => 'CachetHQ\Cachet\Http\Middleware\ReadyForUse',
- 'setup' => 'CachetHQ\Cachet\Http\Middleware\SetupAlreadyCompleted',
- 'subscribers' => 'CachetHQ\Cachet\Http\Middleware\SubscribersConfigured',
- 'throttle' => 'AltThree\Throttle\ThrottlingMiddleware',
+ 'admin' => Admin::class,
+ 'auth.api' => ApiAuthentication::class,
+ 'auth.remoteuser' => RemoteUserAuthenticate::class,
+ 'auth' => Authenticate::class,
+ 'cache' => CacheControl::class,
+ 'can' => Authorize::class,
+ 'cors' => HandleCors::class,
+ 'guest' => RedirectIfAuthenticated::class,
+ 'localize' => Localize::class,
+ 'ready' => ReadyForUse::class,
+ 'setup' => SetupAlreadyCompleted::class,
+ 'signed' => ValidateSignature::class,
+ 'subscribers' => SubscribersConfigured::class,
+ 'throttle' => Throttler::class,
];
}
diff --git a/app/Http/Middleware/Acceptable.php b/app/Http/Middleware/Acceptable.php
index 7db13506338..97974fa72b6 100644
--- a/app/Http/Middleware/Acceptable.php
+++ b/app/Http/Middleware/Acceptable.php
@@ -18,7 +18,7 @@
/**
* This is the acceptable middleware class.
*
- * @author Graham Campbell
+ * @author Graham Campbell
* @author James Brooks
*/
class Acceptable
diff --git a/app/Http/Middleware/Admin.php b/app/Http/Middleware/Admin.php
index 5c83c82141e..4180c3665d1 100644
--- a/app/Http/Middleware/Admin.php
+++ b/app/Http/Middleware/Admin.php
@@ -20,7 +20,7 @@
* This is the admin middleware class.
*
* @author Joseph Cohen
- * @author Graham Campbell
+ * @author Graham Campbell
* @author James Brooks
*/
class Admin
diff --git a/app/Http/Middleware/ApiAuthentication.php b/app/Http/Middleware/ApiAuthentication.php
index 0ae7a0683aa..c02b6c089c5 100644
--- a/app/Http/Middleware/ApiAuthentication.php
+++ b/app/Http/Middleware/ApiAuthentication.php
@@ -22,7 +22,7 @@
* This is the api authentication middleware class.
*
* @author Joseph Cohen
- * @author Graham Campbell
+ * @author Graham Campbell
* @author James Brooks
*/
class ApiAuthentication
diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php
index 6139df30c20..9b5562cb317 100644
--- a/app/Http/Middleware/Authenticate.php
+++ b/app/Http/Middleware/Authenticate.php
@@ -20,7 +20,7 @@
* This is the authenticate middleware class.
*
* @author Joseph Cohen
- * @author Graham Campbell
+ * @author Graham Campbell
* @author James Brooks
*/
class Authenticate
diff --git a/app/Http/Middleware/CacheControl.php b/app/Http/Middleware/CacheControl.php
new file mode 100644
index 00000000000..fa54dfe094f
--- /dev/null
+++ b/app/Http/Middleware/CacheControl.php
@@ -0,0 +1,37 @@
+header('Cache-Control', 'public,max-age='.$maxAge);
+
+ return $response;
+ }
+}
diff --git a/app/Http/Middleware/Localize.php b/app/Http/Middleware/Localize.php
index 2c65f82b2bc..52469c41515 100644
--- a/app/Http/Middleware/Localize.php
+++ b/app/Http/Middleware/Localize.php
@@ -22,7 +22,7 @@
*
* @author James Brooks
* @author Joseph Cohen
- * @author Graham Campbell
+ * @author Graham Campbell
*/
class Localize
{
diff --git a/app/Http/Middleware/ReadyForUse.php b/app/Http/Middleware/ReadyForUse.php
index 3acfe8d2ec3..11b1afbbb80 100644
--- a/app/Http/Middleware/ReadyForUse.php
+++ b/app/Http/Middleware/ReadyForUse.php
@@ -18,7 +18,7 @@
/**
* This is the ready for use middleware class.
*
- * @author Graham Campbell
+ * @author Graham Campbell
* @author James Brooks
* @author Joseph Cohen
*/
@@ -53,7 +53,7 @@ public function __construct(Repository $settings)
*/
public function handle(Request $request, Closure $next)
{
- if (!$this->settings->get('app_name')) {
+ if (!$request->is('setup*') && !$this->settings->get('app_name')) {
return cachet_redirect('setup');
}
diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php
index 7c85f6689ca..b8c95648544 100644
--- a/app/Http/Middleware/RedirectIfAuthenticated.php
+++ b/app/Http/Middleware/RedirectIfAuthenticated.php
@@ -18,7 +18,7 @@
/**
* This is the redirect if authenticated middleware class.
*
- * @author Graham Campbell
+ * @author Graham Campbell
* @author Joseph Cohen
* @author James Brooks
*/
diff --git a/app/Http/Middleware/RemoteUserAuthenticate.php b/app/Http/Middleware/RemoteUserAuthenticate.php
new file mode 100644
index 00000000000..075c0c4a13a
--- /dev/null
+++ b/app/Http/Middleware/RemoteUserAuthenticate.php
@@ -0,0 +1,53 @@
+auth = $auth;
+ }
+
+ /**
+ * Handle an incoming request.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \Closure $next
+ *
+ * @return mixed
+ */
+ public function handle(Request $request, Closure $next)
+ {
+ if ($remoteUser = $request->server('REMOTE_USER')) {
+ $user = User::where('email', '=', $remoteUser)->first();
+
+ if ($user instanceof User && $this->auth->guest()) {
+ $this->auth->login($user);
+ }
+ }
+
+ return $next($request);
+ }
+}
diff --git a/app/Http/Middleware/SetupAlreadyCompleted.php b/app/Http/Middleware/SetupAlreadyCompleted.php
index 83de0ad206a..e0df0c8f5ed 100644
--- a/app/Http/Middleware/SetupAlreadyCompleted.php
+++ b/app/Http/Middleware/SetupAlreadyCompleted.php
@@ -11,6 +11,7 @@
namespace CachetHQ\Cachet\Http\Middleware;
+use CachetHQ\Cachet\Settings\ReadException;
use CachetHQ\Cachet\Settings\Repository;
use Closure;
use Illuminate\Http\Request;
@@ -18,7 +19,7 @@
/**
* This is the setup already completed middelware class.
*
- * @author Graham Campbell
+ * @author Graham Campbell
* @author James Brooks
* @author Joseph Cohen
*/
@@ -53,8 +54,12 @@ public function __construct(Repository $settings)
*/
public function handle(Request $request, Closure $next)
{
- if ($this->settings->get('app_name')) {
- return cachet_redirect('dashboard');
+ try {
+ if ($this->settings->get('app_name')) {
+ return cachet_redirect('dashboard');
+ }
+ } catch (ReadException $e) {
+ // not setup then!
}
return $next($request);
diff --git a/app/Http/Middleware/SubscribersConfigured.php b/app/Http/Middleware/SubscribersConfigured.php
index a8bc4056fb3..116b20a5717 100644
--- a/app/Http/Middleware/SubscribersConfigured.php
+++ b/app/Http/Middleware/SubscribersConfigured.php
@@ -19,7 +19,7 @@
* This is the subscribers configured middleware class.
*
* @author James Brooks
- * @author Graham Campbell
+ * @author Graham Campbell
*/
class SubscribersConfigured
{
@@ -52,10 +52,6 @@ public function __construct(Repository $config)
*/
public function handle(Request $request, Closure $next)
{
- if (!$this->config->get('setting.enable_subscribers')) {
- return cachet_redirect('status-page');
- }
-
return $next($request);
}
}
diff --git a/app/Http/Middleware/Throttler.php b/app/Http/Middleware/Throttler.php
new file mode 100644
index 00000000000..c8314963388
--- /dev/null
+++ b/app/Http/Middleware/Throttler.php
@@ -0,0 +1,125 @@
+
+ */
+class Throttler
+{
+ /**
+ * The rate limiter instance.
+ *
+ * @var \Illuminate\Cache\RateLimiter
+ */
+ protected $limiter;
+
+ /**
+ * Create a new throttler middleware instance.
+ *
+ * @param \Illuminate\Cache\RateLimiter $limiter
+ *
+ * @return void
+ */
+ public function __construct(RateLimiter $limiter)
+ {
+ $this->limiter = $limiter;
+ }
+
+ /**
+ * Handle an incoming request.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \Closure $next
+ * @param int|string $limit
+ * @param int|string $decay
+ *
+ * @throws \Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException
+ *
+ * @return mixed
+ */
+ public function handle(Request $request, Closure $next, $limit = 60, $decay = 1)
+ {
+ return $this->safeHandle($request, $next, (int) $limit, (int) $decay);
+ }
+
+ /**
+ * Handle an incoming request, with correct types.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \Closure $next
+ * @param int $limit
+ * @param int $decay
+ *
+ * @throws \Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException
+ *
+ * @return mixed
+ */
+ protected function safeHandle(Request $request, Closure $next, int $limit, int $decay)
+ {
+ $key = $request->fingerprint();
+
+ if ($this->limiter->tooManyAttempts($key, $limit, $decay)) {
+ throw $this->buildException($key, $limit);
+ }
+
+ $this->limiter->hit($key, $decay);
+
+ $response = $next($request);
+
+ $response->headers->add($this->getHeaders($key, $limit));
+
+ return $response;
+ }
+
+ /**
+ * Create a too many requests http exception.
+ *
+ * @param string $key
+ * @param int $limit
+ *
+ * @return \Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException
+ */
+ protected function buildException(string $key, int $limit)
+ {
+ $after = $this->limiter->availableIn($key);
+ $exception = new TooManyRequestsHttpException($after, 'Rate limit exceeded.');
+ $exception->setHeaders($this->getHeaders($key, $limit, $after, $exception->getHeaders()));
+
+ return $exception;
+ }
+
+ /**
+ * Get the limit header information.
+ *
+ * @param string $key
+ * @param int $limit
+ * @param int|null $after
+ * @param array $merge
+ *
+ * @return array
+ */
+ protected function getHeaders(string $key, int $limit, int $after = null, array $merge = [])
+ {
+ $remaining = $after === null ? $this->limiter->retriesLeft($key, $limit) : 0;
+ $headers = ['X-RateLimit-Limit' => $limit, 'X-RateLimit-Remaining' => $remaining];
+
+ return array_merge($headers, $merge);
+ }
+}
diff --git a/app/Http/Middleware/Timezone.php b/app/Http/Middleware/Timezone.php
index 40afe9e066a..e0700714af9 100644
--- a/app/Http/Middleware/Timezone.php
+++ b/app/Http/Middleware/Timezone.php
@@ -19,7 +19,7 @@
* This is the timezone middleware class.
*
* @author James Brooks
- * @author Graham Campbell
+ * @author Graham Campbell
*/
class Timezone
{
diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php
new file mode 100644
index 00000000000..83a86c5e6ff
--- /dev/null
+++ b/app/Http/Middleware/TrustProxies.php
@@ -0,0 +1,50 @@
+
+ */
+class TrustProxies extends Middleware
+{
+ /**
+ * The trusted proxies for this application.
+ *
+ * @var array
+ */
+ protected $proxies;
+
+ /**
+ * The headers that should be used to detect proxies.
+ *
+ * @var int
+ */
+ protected $headers = Request::HEADER_X_FORWARDED_ALL;
+
+ /**
+ * Create new trust proxies instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ $proxies = Config::get('trustedproxies.proxies');
+
+ $this->proxies = empty($proxies) ? '*' : explode(',', trim($proxies));
+ }
+}
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php
new file mode 100644
index 00000000000..cfd2fc055a5
--- /dev/null
+++ b/app/Http/Middleware/VerifyCsrfToken.php
@@ -0,0 +1,38 @@
+
+ */
+class VerifyCsrfToken extends Middleware
+{
+ /**
+ * Indicates whether the XSRF-TOKEN cookie should be set on the response.
+ *
+ * @var bool
+ */
+ protected $addHttpCookie = true;
+
+ /**
+ * The URIs that should be excluded from CSRF verification.
+ *
+ * @var array
+ */
+ protected $except = [
+ '/api/*',
+ ];
+}
diff --git a/app/Http/Routes/ApiRoutes.php b/app/Http/Routes/ApiRoutes.php
index 3408123a127..b56902d3635 100644
--- a/app/Http/Routes/ApiRoutes.php
+++ b/app/Http/Routes/ApiRoutes.php
@@ -40,19 +40,18 @@ public function map(Registrar $router)
'namespace' => 'Api',
'prefix' => 'api/v1',
], function (Registrar $router) {
- $router->group(['middleware' => ['auth.api']], function (Registrar $router) {
- $router->get('ping', 'GeneralController@ping');
- $router->get('version', 'GeneralController@version');
- $router->get('status', 'GeneralController@status');
-
+ $router->group(['middleware' => ['auth.api', 'cors']], function (Registrar $router) {
$router->get('components', 'ComponentController@index');
$router->get('components/groups', 'ComponentGroupController@index');
$router->get('components/groups/{component_group}', 'ComponentGroupController@show');
$router->get('components/{component}', 'ComponentController@show');
$router->get('incidents', 'IncidentController@index');
- $router->get('incidents/{incident}', 'IncidentController@show');
+ $router->get('incidents/templates', 'IncidentTemplateController@index');
+ $router->get('incidents/templates/{incident_template}', 'IncidentTemplateController@show');
+
+ $router->get('incidents/{incident}', 'IncidentController@show');
$router->get('incidents/{incident}/updates', 'IncidentUpdateController@index');
$router->get('incidents/{incident}/updates/{update}', 'IncidentUpdateController@show');
diff --git a/app/Http/Routes/FeedRoutes.php b/app/Http/Routes/ApiSystemRoutes.php
similarity index 54%
rename from app/Http/Routes/FeedRoutes.php
rename to app/Http/Routes/ApiSystemRoutes.php
index 2a4f930efd7..92a7aa2e31a 100644
--- a/app/Http/Routes/FeedRoutes.php
+++ b/app/Http/Routes/ApiSystemRoutes.php
@@ -14,21 +14,21 @@
use Illuminate\Contracts\Routing\Registrar;
/**
- * This is the feed routes class.
+ * This is the api routes class.
*
* @author James Brooks
*/
-class FeedRoutes
+class ApiSystemRoutes
{
/**
* Defines if these routes are for the browser.
*
* @var bool
*/
- public static $browser = true;
+ public static $browser = false;
/**
- * Define the status page routes.
+ * Define the api routes for the system status, ping and version.
*
* @param \Illuminate\Contracts\Routing\Registrar $router
*
@@ -37,17 +37,14 @@ class FeedRoutes
public function map(Registrar $router)
{
$router->group([
- 'middleware' => ['ready'],
+ 'namespace' => 'Api',
+ 'prefix' => 'api/v1',
], function (Registrar $router) {
- $router->get('/atom/{component_group?}', [
- 'as' => 'get:feed.atom',
- 'uses' => 'FeedController@atomAction',
- ]);
-
- $router->get('/rss/{component_group?}', [
- 'as' => 'get:feed.rss',
- 'uses' => 'FeedController@rssAction',
- ]);
+ $router->group(['middleware' => ['auth.api']], function (Registrar $router) {
+ $router->get('ping', 'GeneralController@ping');
+ $router->get('version', 'GeneralController@version');
+ $router->get('status', ['uses' => 'GeneralController@status', 'middleware' => ['cache']]);
+ });
});
}
}
diff --git a/app/Http/Routes/Dashboard/ComponentRoutes.php b/app/Http/Routes/Dashboard/ComponentRoutes.php
index ed14f1e1af8..aa7852f827e 100644
--- a/app/Http/Routes/Dashboard/ComponentRoutes.php
+++ b/app/Http/Routes/Dashboard/ComponentRoutes.php
@@ -58,29 +58,29 @@ public function map(Registrar $router)
$router->get('groups', [
'as' => 'get:dashboard.components.groups',
- 'uses' => 'ComponentController@showComponentGroups',
+ 'uses' => 'ComponentGroupController@showComponentGroups',
]);
$router->get('groups/create', [
'as' => 'get:dashboard.components.groups.create',
- 'uses' => 'ComponentController@showAddComponentGroup',
+ 'uses' => 'ComponentGroupController@showAddComponentGroup',
]);
$router->post('groups/create', [
'as' => 'post:dashboard.components.groups.create',
- 'uses' => 'ComponentController@postAddComponentGroup',
+ 'uses' => 'ComponentGroupController@postAddComponentGroup',
]);
$router->get('groups/{component_group}', [
'as' => 'get:dashboard.components.groups.edit',
- 'uses' => 'ComponentController@showEditComponentGroup',
+ 'uses' => 'ComponentGroupController@showEditComponentGroup',
]);
$router->post('groups/{component_group}', [
'as' => 'post:dashboard.components.groups.edit',
- 'uses' => 'ComponentController@updateComponentGroupAction',
+ 'uses' => 'ComponentGroupController@updateComponentGroupAction',
]);
$router->delete('groups/{component_group}', [
'as' => 'delete:dashboard.components.groups.delete',
- 'uses' => 'ComponentController@deleteComponentGroupAction',
+ 'uses' => 'ComponentGroupController@deleteComponentGroupAction',
]);
$router->get('{component}', [
diff --git a/app/Http/Routes/Dashboard/IncidentRoutes.php b/app/Http/Routes/Dashboard/IncidentRoutes.php
index c312bc0862c..4eee1e5e8e7 100644
--- a/app/Http/Routes/Dashboard/IncidentRoutes.php
+++ b/app/Http/Routes/Dashboard/IncidentRoutes.php
@@ -71,11 +71,23 @@ public function map(Registrar $router)
$router->get('{incident}/updates', [
'as' => 'get:dashboard.incidents.updates',
- 'uses' => 'IncidentController@showIncidentUpdateAction',
+ 'uses' => 'IncidentUpdateController@showIncidentUpdates',
]);
- $router->post('{incident}/updates', [
- 'as' => 'post:dashboard.incidents.updates',
- 'uses' => 'IncidentController@createIncidentUpdateAction',
+ $router->get('{incident}/updates/create', [
+ 'as' => 'get:dashboard.incidents.updates.create',
+ 'uses' => 'IncidentUpdateController@showCreateIncidentUpdateAction',
+ ]);
+ $router->post('{incident}/updates/create', [
+ 'as' => 'post:dashboard.incidents.updates.create',
+ 'uses' => 'IncidentUpdateController@createIncidentUpdateAction',
+ ]);
+ $router->get('{incident}/updates/{incident_update}', [
+ 'as' => 'get:dashboard.incidents.updates.edit',
+ 'uses' => 'IncidentUpdateController@showEditIncidentUpdateAction',
+ ]);
+ $router->post('{incident}/updates/{incident_update}', [
+ 'as' => 'post:dashboard.incidents.updates.edit',
+ 'uses' => 'IncidentUpdateController@editIncidentUpdateAction',
]);
});
}
diff --git a/app/Http/Routes/Dashboard/TemplateRoutes.php b/app/Http/Routes/Dashboard/TemplateRoutes.php
index 289f975229b..ee4ed5df269 100644
--- a/app/Http/Routes/Dashboard/TemplateRoutes.php
+++ b/app/Http/Routes/Dashboard/TemplateRoutes.php
@@ -44,29 +44,29 @@ public function map(Registrar $router)
], function (Registrar $router) {
$router->get('/', [
'as' => 'get:dashboard.templates',
- 'uses' => 'IncidentController@showTemplates',
+ 'uses' => 'IncidentTemplateController@showTemplates',
]);
$router->get('create', [
'as' => 'get:dashboard.templates.create',
- 'uses' => 'IncidentController@showAddIncidentTemplate',
+ 'uses' => 'IncidentTemplateController@showAddIncidentTemplate',
]);
$router->post('create', [
'as' => 'post:dashboard.templates.create',
- 'uses' => 'IncidentController@createIncidentTemplateAction',
+ 'uses' => 'IncidentTemplateController@createIncidentTemplateAction',
]);
$router->get('{incident_template}', [
'as' => 'get:dashboard.templates.edit',
- 'uses' => 'IncidentController@showEditTemplateAction',
+ 'uses' => 'IncidentTemplateController@showEditTemplateAction',
]);
$router->post('{incident_template}', [
'as' => 'post:dashboard.templates.edit',
- 'uses' => 'IncidentController@editTemplateAction',
+ 'uses' => 'IncidentTemplateController@editTemplateAction',
]);
$router->delete('{incident_template}', [
'as' => 'delete:dashboard.templates.delete',
- 'uses' => 'IncidentController@deleteTemplateAction',
+ 'uses' => 'IncidentTemplateController@deleteTemplateAction',
]);
});
}
diff --git a/app/Http/Routes/SubscribeRoutes.php b/app/Http/Routes/SubscribeRoutes.php
index e844ba18236..8c5279d43e9 100644
--- a/app/Http/Routes/SubscribeRoutes.php
+++ b/app/Http/Routes/SubscribeRoutes.php
@@ -49,8 +49,9 @@ public function map(Registrar $router)
]);
$router->get('subscribe/manage/{code}', [
- 'as' => 'get:subscribe.manage',
- 'uses' => 'SubscribeController@showManage',
+ 'as' => 'get:subscribe.manage',
+ 'middleware' => ['signed'],
+ 'uses' => 'SubscribeController@showManage',
]);
$router->post('subscribe/manage/{code}', [
'as' => 'post:subscribe.manage',
@@ -58,8 +59,9 @@ public function map(Registrar $router)
]);
$router->get('subscribe/verify/{code}', [
- 'as' => 'get:subscribe.verify',
- 'uses' => 'SubscribeController@getVerify',
+ 'as' => 'get:subscribe.verify',
+ 'middleware' => ['signed'],
+ 'uses' => 'SubscribeController@getVerify',
]);
$router->get('unsubscribe/{code}/{subscription?}', [
diff --git a/app/Integrations/Contracts/System.php b/app/Integrations/Contracts/System.php
index 385ad5015b9..a064e71065f 100644
--- a/app/Integrations/Contracts/System.php
+++ b/app/Integrations/Contracts/System.php
@@ -25,6 +25,13 @@ interface System
*/
public function getStatus();
+ /**
+ * Determine if Cachet is allowed to send notifications to users, subscribers or third party tools.
+ *
+ * @return bool
+ */
+ public function canNotifySubscribers();
+
/**
* Get the cachet version.
*
diff --git a/app/Integrations/Core/Beacon.php b/app/Integrations/Core/Beacon.php
index c9c8b9ac37d..f4a283ab835 100644
--- a/app/Integrations/Core/Beacon.php
+++ b/app/Integrations/Core/Beacon.php
@@ -25,6 +25,7 @@
use Exception;
use GuzzleHttp\Client;
use Illuminate\Contracts\Config\Repository;
+use Illuminate\Support\Str;
/**
* This is the beacon class.
@@ -81,25 +82,20 @@ public function send()
return;
}
- if (!($contactEmail = User::admins()->active()->first()->email)) {
- $contactEmail = null;
- }
-
$setting = app(Setting::class);
if (!$installId = $setting->get('install_id', null)) {
- $installId = sha1(str_random(20));
+ $installId = sha1(Str::random(20));
$setting->set('install_id', $installId);
}
$payload = [
- 'install_id' => $installId,
- 'version' => CACHET_VERSION,
- 'docker' => $this->config->get('cachet.is_docker'),
- 'database' => $this->config->get('database.default'),
- 'contact_email' => $contactEmail,
- 'data' => [
+ 'install_id' => $installId,
+ 'version' => CACHET_VERSION,
+ 'docker' => $this->config->get('cachet.is_docker'),
+ 'database' => $this->config->get('database.default'),
+ 'data' => [
'components' => Component::all()->count(),
'incidents' => Incident::all()->count(),
'metrics' => Metric::all()->count(),
diff --git a/app/Integrations/Core/Feed.php b/app/Integrations/Core/Feed.php
index 824bdb20f05..1ab93c4d02d 100644
--- a/app/Integrations/Core/Feed.php
+++ b/app/Integrations/Core/Feed.php
@@ -28,7 +28,7 @@ class Feed implements FeedContract
*
* @var string
*/
- const URL = 'https://blog.alt-three.com/tag/cachet/rss';
+ const URL = 'https://alt-three.com/tag/cachet/rss';
/**
* The failed status indicator.
diff --git a/app/Integrations/Core/System.php b/app/Integrations/Core/System.php
index ccf5bb0cd68..b1f7183c1e7 100644
--- a/app/Integrations/Core/System.php
+++ b/app/Integrations/Core/System.php
@@ -14,6 +14,7 @@
use CachetHQ\Cachet\Integrations\Contracts\System as SystemContract;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\Incident;
+use CachetHQ\Cachet\Models\Schedule;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Config\Repository;
@@ -63,7 +64,8 @@ public function getStatus()
$totalComponents = Component::enabled()->authenticated($includePrivate)->count();
$majorOutages = Component::enabled()->authenticated($includePrivate)->status(4)->count();
- $isMajorOutage = $totalComponents ? ($majorOutages / $totalComponents) >= 0.5 : false;
+ $majorOutageRate = (int) $this->config->get('setting.major_outage_rate', '50');
+ $isMajorOutage = $totalComponents ? ($majorOutages / $totalComponents) * 100 >= $majorOutageRate : false;
// Default data
$status = [
@@ -102,6 +104,21 @@ public function getStatus()
return $status;
}
+ /**
+ * Determine if Cachet is allowed to send notifications to users, subscribers or third party tools.
+ *
+ * @return bool
+ */
+ public function canNotifySubscribers()
+ {
+ $maintenancePeriods = Schedule::inProgress()->count();
+ if ($maintenancePeriods === 0) {
+ return true;
+ }
+
+ return !$this->config->get('setting.suppress_notifications_in_maintenance');
+ }
+
/**
* Get the cachet version.
*
diff --git a/app/Models/Action.php b/app/Models/Action.php
index 5ff0a3103e8..be9cfcc1de6 100644
--- a/app/Models/Action.php
+++ b/app/Models/Action.php
@@ -24,20 +24,6 @@ class Action extends Model
{
use ValidatingTrait;
- /**
- * A list of methods protected from mass assignment.
- *
- * @var string[]
- */
- protected $guarded = ['_token', '_method'];
-
- /**
- * The relations to eager load on every query.
- *
- * @var string[]
- */
- protected $with = ['user'];
-
/**
* The attributes that should be casted to native types.
*
@@ -52,6 +38,13 @@ class Action extends Model
'description' => 'string',
];
+ /**
+ * A list of methods protected from mass assignment.
+ *
+ * @var string[]
+ */
+ protected $guarded = ['_token', '_method'];
+
/**
* The validation rules.
*
@@ -66,6 +59,13 @@ class Action extends Model
'description' => 'required|string',
];
+ /**
+ * The relations to eager load on every query.
+ *
+ * @var string[]
+ */
+ protected $with = ['user'];
+
/**
* Get the user relation.
*
diff --git a/app/Models/Component.php b/app/Models/Component.php
index 03b611f3b1e..08da7157662 100644
--- a/app/Models/Component.php
+++ b/app/Models/Component.php
@@ -12,6 +12,8 @@
namespace CachetHQ\Cachet\Models;
use AltThree\Validator\ValidatingTrait;
+use CachetHQ\Cachet\Models\Traits\HasMeta;
+use CachetHQ\Cachet\Models\Traits\HasTags;
use CachetHQ\Cachet\Models\Traits\SearchableTrait;
use CachetHQ\Cachet\Models\Traits\SortableTrait;
use CachetHQ\Cachet\Presenters\ComponentPresenter;
@@ -22,7 +24,12 @@
class Component extends Model implements HasPresenter
{
- use SearchableTrait, SoftDeletes, SortableTrait, ValidatingTrait;
+ use HasTags;
+ use HasMeta;
+ use SearchableTrait;
+ use SoftDeletes;
+ use SortableTrait;
+ use ValidatingTrait;
/**
* List of attributes that have default values.
@@ -64,7 +71,6 @@ class Component extends Model implements HasPresenter
'name',
'description',
'status',
- 'tags',
'link',
'order',
'group_id',
@@ -134,26 +140,6 @@ public function incidents()
return $this->hasMany(Incident::class, 'component_id', 'id');
}
- /**
- * Get all of the meta relation.
- *
- * @return \Illuminate\Database\Eloquent\Relations\MorphMany
- */
- public function meta()
- {
- return $this->morphMany(Meta::class, 'meta');
- }
-
- /**
- * Get the tags relation.
- *
- * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
- */
- public function tags()
- {
- return $this->belongsToMany(Tag::class);
- }
-
/**
* Finds all components by status.
*
@@ -250,20 +236,6 @@ public function scopeGrouped(Builder $query)
->groupBy('group_id');
}
- /**
- * Returns all of the tags on this component.
- *
- * @return string
- */
- public function getTagsListAttribute()
- {
- $tags = $this->tags->map(function ($tag) {
- return $tag->name;
- });
-
- return implode(', ', $tags->toArray());
- }
-
/**
* Get the presenter class.
*
diff --git a/app/Models/ComponentGroup.php b/app/Models/ComponentGroup.php
index 6aebc82ccad..f5a8af8ded5 100644
--- a/app/Models/ComponentGroup.php
+++ b/app/Models/ComponentGroup.php
@@ -27,8 +27,9 @@
*/
class ComponentGroup extends Model implements HasPresenter
{
- use SearchableTrait, SortableTrait, ValidatingTrait;
-
+ use SearchableTrait;
+ use SortableTrait;
+ use ValidatingTrait;
/**
* Viewable only authenticated users.
*
diff --git a/app/Models/Incident.php b/app/Models/Incident.php
index 728c6085b47..b1ddb58c06a 100644
--- a/app/Models/Incident.php
+++ b/app/Models/Incident.php
@@ -12,6 +12,8 @@
namespace CachetHQ\Cachet\Models;
use AltThree\Validator\ValidatingTrait;
+use CachetHQ\Cachet\Models\Traits\HasMeta;
+use CachetHQ\Cachet\Models\Traits\HasTags;
use CachetHQ\Cachet\Models\Traits\SearchableTrait;
use CachetHQ\Cachet\Models\Traits\SortableTrait;
use CachetHQ\Cachet\Presenters\IncidentPresenter;
@@ -29,7 +31,12 @@
*/
class Incident extends Model implements HasPresenter
{
- use SearchableTrait, SoftDeletes, SortableTrait, ValidatingTrait;
+ use HasMeta;
+ use HasTags;
+ use SearchableTrait;
+ use SoftDeletes;
+ use SortableTrait;
+ use ValidatingTrait;
/**
* Status for incident being investigated.
@@ -68,16 +75,30 @@ class Incident extends Model implements HasPresenter
'is_resolved',
];
+ /**
+ * The model's attributes.
+ *
+ * @var string[]
+ */
+ protected $attributes = [
+ 'stickied' => false,
+ 'notifications' => false,
+ ];
+
/**
* The attributes that should be casted to native types.
*
* @var string[]
*/
protected $casts = [
- 'visible' => 'int',
- 'stickied' => 'bool',
- 'occurred_at' => 'datetime',
- 'deleted_at' => 'date',
+ 'component_id' => 'int',
+ 'status' => 'int',
+ 'user_id' => 'int',
+ 'visible' => 'int',
+ 'stickied' => 'bool',
+ 'notifications' => 'bool',
+ 'occurred_at' => 'datetime',
+ 'deleted_at' => 'date',
];
/**
@@ -86,11 +107,13 @@ class Incident extends Model implements HasPresenter
* @var string[]
*/
protected $fillable = [
+ 'user_id',
'component_id',
'name',
'status',
'visible',
'stickied',
+ 'notifications',
'message',
'occurred_at',
'created_at',
@@ -103,12 +126,14 @@ class Incident extends Model implements HasPresenter
* @var string[]
*/
public $rules = [
- 'component_id' => 'nullable|int',
- 'name' => 'required|string',
- 'status' => 'required|int',
- 'visible' => 'required|bool',
- 'stickied' => 'required|bool',
- 'message' => 'required|string',
+ 'user_id' => 'nullable|int',
+ 'component_id' => 'nullable|int',
+ 'name' => 'required|string',
+ 'status' => 'required|int',
+ 'visible' => 'required|bool',
+ 'stickied' => 'required|bool',
+ 'notifications' => 'nullable|bool',
+ 'message' => 'required|string',
];
/**
@@ -118,6 +143,7 @@ class Incident extends Model implements HasPresenter
*/
protected $searchable = [
'id',
+ 'user_id',
'component_id',
'name',
'status',
@@ -132,6 +158,7 @@ class Incident extends Model implements HasPresenter
*/
protected $sortable = [
'id',
+ 'user_id',
'name',
'status',
'visible',
@@ -161,23 +188,23 @@ public function component()
}
/**
- * Get all of the meta relation.
+ * Get the updates relation.
*
- * @return \Illuminate\Database\Eloquent\Relations\MorphMany
+ * @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
- public function meta()
+ public function updates()
{
- return $this->morphMany(Meta::class, 'meta');
+ return $this->hasMany(IncidentUpdate::class)->orderBy('created_at', 'desc');
}
/**
- * Get the updates relation.
+ * Get the user relation.
*
- * @return \Illuminate\Database\Eloquent\Relations\HasMany
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
- public function updates()
+ public function user()
{
- return $this->hasMany(IncidentUpdate::class)->orderBy('created_at', 'desc');
+ return $this->belongsTo(User::class);
}
/**
diff --git a/app/Models/IncidentUpdate.php b/app/Models/IncidentUpdate.php
index 207e129edc2..0591a248562 100644
--- a/app/Models/IncidentUpdate.php
+++ b/app/Models/IncidentUpdate.php
@@ -24,7 +24,8 @@
*/
class IncidentUpdate extends Model implements HasPresenter
{
- use SortableTrait, ValidatingTrait;
+ use SortableTrait;
+ use ValidatingTrait;
/**
* The attributes that should be casted to native types.
@@ -83,6 +84,16 @@ public function incident()
return $this->belongsTo(Incident::class);
}
+ /**
+ * Get the user relation.
+ *
+ * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
+ */
+ public function user()
+ {
+ return $this->belongsTo(User::class);
+ }
+
/**
* Get the presenter class.
*
diff --git a/app/Models/Invite.php b/app/Models/Invite.php
index b917b3f1a04..292735c5849 100644
--- a/app/Models/Invite.php
+++ b/app/Models/Invite.php
@@ -13,6 +13,7 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
+use Illuminate\Support\Str;
/**
* This is the invite class.
@@ -51,7 +52,7 @@ public static function boot()
self::creating(function ($invite) {
if (!$invite->code) {
- $invite->code = str_random(20);
+ $invite->code = Str::random(20);
}
});
}
diff --git a/app/Models/Metric.php b/app/Models/Metric.php
index a126ab3742e..c3e6483ecfb 100644
--- a/app/Models/Metric.php
+++ b/app/Models/Metric.php
@@ -13,6 +13,7 @@
use AltThree\Validator\ValidatingTrait;
use AltThree\Validator\ValidationException;
+use CachetHQ\Cachet\Models\Traits\HasMeta;
use CachetHQ\Cachet\Models\Traits\SortableTrait;
use CachetHQ\Cachet\Presenters\MetricPresenter;
use Illuminate\Database\Eloquent\Builder;
@@ -22,7 +23,9 @@
class Metric extends Model implements HasPresenter
{
- use SortableTrait, ValidatingTrait;
+ use HasMeta;
+ use SortableTrait;
+ use ValidatingTrait;
/**
* The calculation type of sum.
@@ -59,13 +62,6 @@ class Metric extends Model implements HasPresenter
*/
const VISIBLE_HIDDEN = 2;
- /**
- * Array of acceptable threshold minutes.
- *
- * @var int[]
- */
- const ACCEPTABLE_THRESHOLDS = [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60];
-
/**
* The model's attributes.
*
@@ -131,7 +127,6 @@ class Metric extends Model implements HasPresenter
'default_value' => 'required|numeric',
'places' => 'required|numeric|between:0,4',
'default_view' => 'required|numeric|between:0,3',
- 'threshold' => 'required|numeric|between:0,10',
'visible' => 'required|numeric|between:0,2',
];
@@ -165,16 +160,6 @@ public static function boot()
});
}
- /**
- * Get all of the meta relation.
- *
- * @return \Illuminate\Database\Eloquent\Relations\MorphMany
- */
- public function meta()
- {
- return $this->morphMany(Meta::class, 'meta');
- }
-
/**
* Get the points relation.
*
@@ -182,7 +167,7 @@ public function meta()
*/
public function points()
{
- return $this->hasMany(MetricPoint::class, 'metric_id', 'id');
+ return $this->hasMany(MetricPoint::class, 'metric_id', 'id')->latest();
}
/**
@@ -194,7 +179,7 @@ public function points()
*/
public function scopeDisplayable(Builder $query)
{
- return $query->where('display_chart', '=', true)->where('visible', '!=', self::VISIBLE_HIDDEN);
+ return $query->where('display_chart', '=', true)->where('visible', '<>', self::VISIBLE_HIDDEN);
}
/**
diff --git a/app/Models/MetricPoint.php b/app/Models/MetricPoint.php
index 89d531013cf..6e64940036a 100644
--- a/app/Models/MetricPoint.php
+++ b/app/Models/MetricPoint.php
@@ -13,13 +13,31 @@
use AltThree\Validator\ValidatingTrait;
use CachetHQ\Cachet\Presenters\MetricPointPresenter;
+use Carbon\Carbon;
+use DateTime;
use Illuminate\Database\Eloquent\Model;
use McCool\LaravelAutoPresenter\HasPresenter;
+/**
+ * This is the metric point model class.
+ *
+ * @author James Brooks
+ * @author Joseph Cohen
+ * @author Graham Campbell
+ */
class MetricPoint extends Model implements HasPresenter
{
use ValidatingTrait;
+ /**
+ * The accessors to append to the model's array form.
+ *
+ * @var string[]
+ */
+ protected $appends = [
+ 'calculated_value',
+ ];
+
/**
* The model's attributes.
*
@@ -73,19 +91,40 @@ public function metric()
}
/**
- * Override the value attribute.
+ * Show the actual calculated value; as per (value * counter).
*
- * @param mixed $value
+ * @return int
+ */
+ public function getCalculatedValueAttribute()
+ {
+ return $this->value * $this->counter;
+ }
+
+ /**
+ * Round the created at value into intervals of 30 seconds.
*
- * @return float
+ * @param string $createdAt
+ *
+ * @return string|void
*/
- public function getActiveValueAttribute($value)
+ public function setCreatedAtAttribute($createdAt)
{
- if ($this->metric->calc_type === Metric::CALC_SUM) {
- return round((float) $value * $this->counter, $this->metric->places);
+ if (!$createdAt) {
+ return;
}
- return round((float) $value, $this->metric->places);
+ if (!$createdAt instanceof DateTime) {
+ $createdAt = Carbon::parse($createdAt);
+ }
+
+ $timestamp = $createdAt->format('U');
+ $timestamp = 30 * round($timestamp / 30);
+
+ $date = Carbon::createFromFormat('U', $timestamp)->toDateTimeString();
+
+ $this->attributes['created_at'] = $date;
+
+ return $date;
}
/**
diff --git a/app/Models/Schedule.php b/app/Models/Schedule.php
index 46b573891f1..93a7e3bbdf0 100644
--- a/app/Models/Schedule.php
+++ b/app/Models/Schedule.php
@@ -12,21 +12,23 @@
namespace CachetHQ\Cachet\Models;
use AltThree\Validator\ValidatingTrait;
+use CachetHQ\Cachet\Models\Traits\HasMeta;
use CachetHQ\Cachet\Models\Traits\SearchableTrait;
use CachetHQ\Cachet\Models\Traits\SortableTrait;
use CachetHQ\Cachet\Presenters\SchedulePresenter;
use Carbon\Carbon;
+use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
use McCool\LaravelAutoPresenter\HasPresenter;
-/**
- * This is the schedule class.
- *
- * @author James Brooks
- */
class Schedule extends Model implements HasPresenter
{
- use SearchableTrait, SortableTrait, ValidatingTrait;
+ use HasMeta;
+ use SearchableTrait;
+ use SoftDeletes;
+ use SortableTrait;
+ use ValidatingTrait;
/**
* The upcoming status.
@@ -142,13 +144,31 @@ public function components()
}
/**
- * Get all of the meta relation.
+ * Scope schedules that are uncompleted.
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
*
- * @return \Illuminate\Database\Eloquent\Relations\MorphMany
+ * @return \Illuminate\Database\Eloquent\Builder
*/
- public function meta()
+ public function scopeUncompleted(Builder $query)
{
- return $this->morphMany(Meta::class, 'meta');
+ return $query->whereIn('status', [self::UPCOMING, self::IN_PROGRESS])->where(function (Builder $query) {
+ return $query->whereNull('completed_at');
+ });
+ }
+
+ /**
+ * Scope schedules that are in progress.
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ *
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeInProgress(Builder $query)
+ {
+ return $query->where('scheduled_at', '<=', Carbon::now())->where('status', '<>', self::COMPLETE)->where(function ($query) {
+ $query->whereNull('completed_at');
+ });
}
/**
@@ -158,21 +178,33 @@ public function meta()
*
* @return \Illuminate\Database\Eloquent\Builder
*/
- public function scopeFutureSchedules($query)
+ public function scopeScheduledInFuture($query)
{
return $query->whereIn('status', [self::UPCOMING, self::IN_PROGRESS])->where('scheduled_at', '>=', Carbon::now());
}
/**
- * Scopes schedules to those in the past.
+ * Scopes schedules to those scheduled in the past.
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ *
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeScheduledInPast($query)
+ {
+ return $query->whereIn('status', [self::UPCOMING, self::IN_PROGRESS])->where('scheduled_at', '<=', Carbon::now());
+ }
+
+ /**
+ * Scopes schedules to those completed in the past.
*
* @param \Illuminate\Database\Eloquent\Builder $query
*
* @return \Illuminate\Database\Eloquent\Builder
*/
- public function scopePastSchedules($query)
+ public function scopeCompletedInPast($query)
{
- return $query->where('status', '<', self::COMPLETE)->where('scheduled_at', '<=', Carbon::now());
+ return $query->where('status', '=', self::COMPLETE)->where('completed_at', '<=', Carbon::now());
}
/**
diff --git a/app/Models/Setting.php b/app/Models/Setting.php
index 0ea02148e12..54ea2b77a13 100644
--- a/app/Models/Setting.php
+++ b/app/Models/Setting.php
@@ -15,6 +15,13 @@
class Setting extends Model
{
+ /**
+ * List of attributes that have default values.
+ *
+ * @var string[]
+ */
+ protected $attributes = ['value' => ''];
+
/**
* The attributes that should be casted to native types.
*
@@ -31,11 +38,4 @@ class Setting extends Model
* @var string[]
*/
protected $fillable = ['name', 'value'];
-
- /**
- * List of attributes that have default values.
- *
- * @var string[]
- */
- protected $attributes = ['value' => ''];
}
diff --git a/app/Models/Subscriber.php b/app/Models/Subscriber.php
index 964a73ebad4..e10a093b16a 100644
--- a/app/Models/Subscriber.php
+++ b/app/Models/Subscriber.php
@@ -12,10 +12,12 @@
namespace CachetHQ\Cachet\Models;
use AltThree\Validator\ValidatingTrait;
+use CachetHQ\Cachet\Models\Traits\HasMeta;
use CachetHQ\Cachet\Presenters\SubscriberPresenter;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
+use Illuminate\Support\Str;
use McCool\LaravelAutoPresenter\HasPresenter;
/**
@@ -27,7 +29,9 @@
*/
class Subscriber extends Model implements HasPresenter
{
- use Notifiable, ValidatingTrait;
+ use HasMeta;
+ use Notifiable;
+ use ValidatingTrait;
/**
* The attributes that should be casted to native types.
@@ -90,16 +94,6 @@ public static function boot()
});
}
- /**
- * Get all of the meta relation.
- *
- * @return \Illuminate\Database\Eloquent\Relations\MorphMany
- */
- public function meta()
- {
- return $this->morphMany(Meta::class, 'meta');
- }
-
/**
* Get the subscriptions relation.
*
@@ -166,7 +160,7 @@ public function getIsVerifiedAttribute()
*/
public static function generateVerifyCode()
{
- return str_random(42);
+ return Str::random(42);
}
/**
diff --git a/app/Models/Tag.php b/app/Models/Tag.php
index f0a18eece27..022ceb8c528 100644
--- a/app/Models/Tag.php
+++ b/app/Models/Tag.php
@@ -55,4 +55,31 @@ public function components()
{
return $this->belongsToMany(Component::class);
}
+
+ /**
+ * @param array|\ArrayAccess $values
+ *
+ * @return \CachetHQ\Cachet\Models\Tag|static
+ */
+ public static function findOrCreate($values)
+ {
+ $tags = collect($values)->map(function ($value) {
+ if ($value instanceof self) {
+ return $value;
+ }
+
+ $tag = static::where('name', '=', $value)->first();
+
+ if (!$tag instanceof self) {
+ $tag = static::create([
+ 'name' => $value,
+ 'slug' => Str::slug($value),
+ ]);
+ }
+
+ return $tag;
+ });
+
+ return is_string($values) ? $tags->first() : $tags;
+ }
}
diff --git a/app/Models/Traits/HasMeta.php b/app/Models/Traits/HasMeta.php
new file mode 100644
index 00000000000..3571cf0a7e6
--- /dev/null
+++ b/app/Models/Traits/HasMeta.php
@@ -0,0 +1,32 @@
+
+ */
+trait HasMeta
+{
+ /**
+ * Get the meta relation.
+ *
+ * @return \Illuminate\Database\Eloquent\Relations\MorphMany
+ */
+ public function meta()
+ {
+ return $this->morphMany(Meta::class, 'meta');
+ }
+}
diff --git a/app/Models/Traits/HasTags.php b/app/Models/Traits/HasTags.php
new file mode 100644
index 00000000000..b707e050ff7
--- /dev/null
+++ b/app/Models/Traits/HasTags.php
@@ -0,0 +1,196 @@
+
+ */
+trait HasTags
+{
+ /**
+ * @var array
+ */
+ protected $queuedTags = [];
+
+ /**
+ * Boot the trait.
+ *
+ * @return void
+ */
+ public static function bootHasTags()
+ {
+ static::created(function (Model $taggableModel) {
+ if (count($taggableModel->queuedTags) > 0) {
+ $taggableModel->attachTags($taggableModel->queuedTags);
+
+ $taggableModel->queuedTags = [];
+ }
+ });
+
+ static::deleted(function (Model $deletedModel) {
+ $tags = $deletedModel->tags()->get();
+
+ $deletedModel->detachTags($tags);
+ });
+ }
+
+ /**
+ * Get the tags relation.
+ *
+ * @return \Illuminate\Database\Eloquent\Relations\MorphToMany
+ */
+ public function tags()
+ {
+ return $this->morphToMany(Tag::class, 'taggable');
+ }
+
+ /**
+ * @param string|array|\ArrayAccess|\CachetHQ\Cachet\Models\Tag $tags
+ */
+ public function setTagsAttribute($tags)
+ {
+ if (!$this->exists) {
+ $this->queuedTags = $tags;
+
+ return;
+ }
+
+ $this->attachTags($tags);
+ }
+
+ /**
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param array|\ArrayAccess $tags
+ *
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeWithAllTags(Builder $query, $tags)
+ {
+ $tags = static::convertToTags($tags);
+
+ $tags->each(function ($tag) use ($query) {
+ $query->whereHas('tags', function (Builder $query) use ($tag) {
+ return $query->where('tags.id', $tag ? $tag->id : 0);
+ });
+ });
+
+ return $query;
+ }
+
+ /**
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param array|\ArrayAccess $tags
+ *
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeWithAnyTags(Builder $query, $tags)
+ {
+ $tags = static::convertToTags($tags);
+
+ return $query->whereHas('tags', function (Builder $query) use ($tags) {
+ $tagIds = collect($tags)->pluck('id');
+
+ $query->whereIn('tags.id', $tagIds);
+ });
+ }
+
+ /**
+ * @param array|\ArrayAccess|\CachetHQ\Cachet\Models\Tag $tags
+ *
+ * @return $this
+ */
+ public function attachTags($tags)
+ {
+ $tags = collect(Tag::findOrCreate($tags));
+
+ $this->tags()->syncWithoutDetaching($tags->pluck('id')->toArray());
+
+ return $this;
+ }
+
+ /**
+ * @param string|\CachetHQ\Cachet\Models\Tag $tag
+ *
+ * @return $this
+ */
+ public function attachTag($tag)
+ {
+ return $this->attachTags([$tag]);
+ }
+
+ /**
+ * @param array|\ArrayAccess $tags
+ *
+ * @return $this
+ */
+ public function detachTags($tags)
+ {
+ $tags = static::convertToTags($tags);
+
+ collect($tags)
+ ->filter()
+ ->each(function (Tag $tag) {
+ $this->tags()->detach($tag);
+ });
+
+ return $this;
+ }
+
+ /**
+ * @param string|\CachetHQ\Cachet\Models\Tag $tag
+ *
+ * @return $this
+ */
+ public function detachTag($tag)
+ {
+ return $this->detachTags([$tag]);
+ }
+
+ /**
+ * @param array|\ArrayAccess $tags
+ *
+ * @return $this
+ */
+ public function syncTags($tags)
+ {
+ $tags = collect(Tag::findOrCreate($tags));
+
+ $this->tags()->sync($tags->pluck('id')->toArray());
+
+ return $this;
+ }
+
+ /**
+ * Convert a list of tags into a collection of \CachetHQ\Cachet\Models\Tag.
+ *
+ * @param array|\ArrayAccess $values
+ *
+ * @return \Illuminate\Support\Collection
+ */
+ protected static function convertToTags($values)
+ {
+ return collect($values)->map(function ($value) {
+ if ($value instanceof Tag) {
+ return $value;
+ }
+
+ return Tag::where('slug', '=', $value)->first();
+ });
+ }
+}
diff --git a/app/Models/User.php b/app/Models/User.php
index 3be0e867b14..7e568bd0510 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -17,6 +17,7 @@
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Hash;
+use Illuminate\Support\Str;
/**
* This is the user model.
@@ -25,8 +26,8 @@
*/
class User extends Authenticatable
{
- use Notifiable, ValidatingTrait;
-
+ use Notifiable;
+ use ValidatingTrait;
/**
* The admin level of user.
*
@@ -162,18 +163,6 @@ public function setPasswordAttribute($password)
return $this;
}
- /**
- * Returns a Gravatar URL for the users email address.
- *
- * @param int $size
- *
- * @return string
- */
- public function getGravatarAttribute($size = 200)
- {
- return sprintf('https://www.gravatar.com/avatar/%s?size=%d', md5(strtolower($this->email)), $size);
- }
-
/**
* Find by api_key, or throw an exception.
*
@@ -198,7 +187,7 @@ public static function findByApiToken($token, $columns = ['*'])
*/
public static function generateApiKey()
{
- return str_random(20);
+ return Str::random(20);
}
/**
diff --git a/app/Notifications/Component/ComponentStatusChangedNotification.php b/app/Notifications/Component/ComponentStatusChangedNotification.php
index dfe5ad8d1ed..02d02d4ac3a 100644
--- a/app/Notifications/Component/ComponentStatusChangedNotification.php
+++ b/app/Notifications/Component/ComponentStatusChangedNotification.php
@@ -84,11 +84,15 @@ public function toMail($notifiable)
]);
return (new MailMessage())
- ->subject(trans('notifications.component.status_update.mail.subject'))
- ->greeting(trans('notifications.component.status_update.mail.subject'))
- ->line($content)
- ->action(trans('notifications.component.status_update.mail.action'), cachet_route('status-page'))
- ->line(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
+ ->subject(trans('notifications.component.status_update.mail.subject'))
+ ->markdown('notifications.component.update', [
+ 'componentName' => $this->component->name,
+ 'content' => $content,
+ 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'),
+ 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code),
+ 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'),
+ 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code),
+ ]);
}
/**
@@ -136,15 +140,15 @@ public function toSlack($notifiable)
return (new SlackMessage())
->$status()
- ->content(trans('notifications.component.status_update.slack.subject'))
+ ->content(trans('notifications.component.status_update.slack.title'))
->attachment(function ($attachment) use ($content, $notifiable) {
$attachment->title($content, cachet_route('status-page'))
->fields(array_filter([
- 'Component' => $this->component->name,
- 'Old Status' => $this->component->human_status,
- 'New Status' => trans("cachet.components.status.{$this->status}"),
- 'Link' => $this->component->link,
- ]))
+ 'Component' => $this->component->name,
+ 'Old Status' => $this->component->human_status,
+ 'New Status' => trans("cachet.components.status.{$this->status}"),
+ 'Link' => $this->component->link,
+ ]))
->footer(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
});
}
diff --git a/app/Notifications/Incident/NewIncidentNotification.php b/app/Notifications/Incident/NewIncidentNotification.php
index d92d8b55953..ac56c9dea95 100644
--- a/app/Notifications/Incident/NewIncidentNotification.php
+++ b/app/Notifications/Incident/NewIncidentNotification.php
@@ -75,11 +75,16 @@ public function toMail($notifiable)
return (new MailMessage())
->subject(trans('notifications.incident.new.mail.subject'))
- ->greeting(trans('notifications.incident.new.mail.greeting', ['app_name' => Config::get('setting.app_name')]))
- ->line($content)
- ->action(trans('notifications.incident.new.mail.action'), cachet_route('incident', [$this->incident]))
- ->line($this->incident->message)
- ->line(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
+ ->markdown('notifications.incident.new', [
+ 'incident' => $this->incident,
+ 'content' => $content,
+ 'actionText' => trans('notifications.incident.new.mail.action'),
+ 'actionUrl' => cachet_route('incident', [$this->incident]),
+ 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'),
+ 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code),
+ 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'),
+ 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code),
+ ]);
}
/**
@@ -122,14 +127,13 @@ public function toSlack($notifiable)
return (new SlackMessage())
->$status()
->content($content)
- ->attachment(function ($attachment) use ($notifiable) {
- $attachment->title(trans('notifications.incident.new.slack.title', [$this->incident->name]))
+ ->attachment(function ($attachment) {
+ $attachment->title(trans('notifications.incident.new.slack.title', ['name' => $this->incident->name]))
->timestamp($this->incident->getWrappedObject()->occurred_at)
->fields(array_filter([
- 'ID' => "#{$this->incident->id}",
- 'Link' => $this->incident->permalink,
- ]))
- ->footer(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
+ 'ID' => "#{$this->incident->id}",
+ 'Link' => $this->incident->permalink,
+ ]));
});
}
}
diff --git a/app/Notifications/IncidentUpdate/IncidentUpdatedNotification.php b/app/Notifications/IncidentUpdate/IncidentUpdatedNotification.php
index 8ad886477e6..6c88b40370c 100644
--- a/app/Notifications/IncidentUpdate/IncidentUpdatedNotification.php
+++ b/app/Notifications/IncidentUpdate/IncidentUpdatedNotification.php
@@ -75,15 +75,20 @@ public function toMail($notifiable)
]);
return (new MailMessage())
- ->subject(trans('notifications.incident.update.mail.subject'))
- ->greeting(trans('notifications.incident.update.mail.title', [
- 'name' => $this->update->incident->name,
- 'new_status' => $this->update->human_status,
- ]))
- ->line($content)
- ->action(trans('notifications.incident.update.mail.action'), cachet_route('incident', [$this->update->incident]))
- ->line($this->update->message)
- ->line(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
+ ->subject(trans('notifications.incident.update.mail.subject'))
+ ->markdown('notifications.incident.update', [
+ 'incident' => $this->update->incident,
+ 'update' => $this->update,
+ 'content' => $content,
+ 'actionText' => trans('notifications.incident.new.mail.action'),
+ 'actionUrl' => cachet_route('incident', [$this->update->incident]),
+ 'incidentName' => $this->update->incident->name,
+ 'newStatus' => $this->update->human_status,
+ 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'),
+ 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code),
+ 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'),
+ 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code),
+ ]);
}
/**
@@ -129,16 +134,16 @@ public function toSlack($notifiable)
return (new SlackMessage())
->$status()
->content($content)
- ->attachment(function ($attachment) use ($content, $notifiable) {
+ ->attachment(function ($attachment) use ($notifiable) {
$attachment->title(trans('notifications.incident.update.slack.title', [
- 'name' => $this->update->incident->name,
- 'new_status' => $this->update->human_status,
- ]))
+ 'name' => $this->update->incident->name,
+ 'new_status' => $this->update->human_status,
+ ]))
->timestamp($this->update->getWrappedObject()->created_at)
->fields(array_filter([
- 'ID' => "#{$this->update->id}",
- 'Link' => $this->update->permalink,
- ]))
+ 'ID' => "#{$this->update->id}",
+ 'Link' => $this->update->permalink,
+ ]))
->footer(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
});
}
diff --git a/app/Notifications/Schedule/NewScheduleNotification.php b/app/Notifications/Schedule/NewScheduleNotification.php
index fa7bfd98adc..3b04bc679f6 100644
--- a/app/Notifications/Schedule/NewScheduleNotification.php
+++ b/app/Notifications/Schedule/NewScheduleNotification.php
@@ -13,6 +13,7 @@
use CachetHQ\Cachet\Models\Schedule;
use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\NexmoMessage;
use Illuminate\Notifications\Messages\SlackMessage;
@@ -24,7 +25,7 @@
*
* @author James Brooks
*/
-class NewScheduleNotification extends Notification
+class NewScheduleNotification extends Notification implements ShouldQueue
{
use Queueable;
@@ -74,11 +75,14 @@ public function toMail($notifiable)
]);
return (new MailMessage())
- ->subject(trans('notifications.schedule.new.mail.subject'))
- ->greeting(trans('notifications.schedule.new.mail.title'))
- ->line($content)
- ->action(trans('notifications.schedule.new.mail.action'), cachet_route('schedule', [$this->schedule]))
- ->line(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
+ ->subject(trans('notifications.schedule.new.mail.subject'))
+ ->markdown('notifications.schedule.new', [
+ 'content' => $content,
+ 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'),
+ 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code),
+ 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'),
+ 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code),
+ ]);
}
/**
@@ -118,10 +122,9 @@ public function toSlack($notifiable)
$attachment->title($content)
->timestamp($this->schedule->getWrappedObject()->scheduled_at)
->fields(array_filter([
- 'ID' => "#{$this->schedule->id}",
- 'Status' => $this->schedule->human_status,
- ]))
- ->footer(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
+ 'ID' => "#{$this->schedule->id}",
+ 'Status' => $this->schedule->human_status,
+ ]));
});
}
}
diff --git a/app/Notifications/Subscriber/ManageSubscriptionNotification.php b/app/Notifications/Subscriber/ManageSubscriptionNotification.php
new file mode 100644
index 00000000000..e8f883980f6
--- /dev/null
+++ b/app/Notifications/Subscriber/ManageSubscriptionNotification.php
@@ -0,0 +1,52 @@
+ $notifiable->verify_code]);
+
+ return (new MailMessage())
+ ->subject(trans('notifications.subscriber.manage.mail.subject'))
+ ->greeting(trans('notifications.subscriber.manage.mail.title', ['app_name' => setting('app_name')]))
+ ->action(trans('notifications.subscriber.manage.mail.action'), $route)
+ ->line(trans('notifications.subscriber.manage.mail.content', ['app_name' => setting('app_name')]));
+ }
+}
diff --git a/app/Notifications/Subscriber/VerifySubscriptionNotification.php b/app/Notifications/Subscriber/VerifySubscriptionNotification.php
index 102263a3ea3..76da5dab236 100644
--- a/app/Notifications/Subscriber/VerifySubscriptionNotification.php
+++ b/app/Notifications/Subscriber/VerifySubscriptionNotification.php
@@ -15,6 +15,7 @@
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Config;
+use Illuminate\Support\Facades\URL;
/**
* This is the verify subscription notification class.
@@ -46,10 +47,12 @@ public function via($notifiable)
*/
public function toMail($notifiable)
{
+ $route = URL::signedRoute(cachet_route_generator('subscribe.verify'), ['code' => $notifiable->verify_code]);
+
return (new MailMessage())
->subject(trans('notifications.subscriber.verify.mail.subject'))
->greeting(trans('notifications.subscriber.verify.mail.title', ['app_name' => Config::get('setting.app_name')]))
- ->action(trans('notifications.subscriber.verify.mail.action'), cachet_route('subscribe.verify', ['code' => $notifiable->verify_code]))
+ ->action(trans('notifications.subscriber.verify.mail.action'), $route)
->line(trans('notifications.subscriber.verify.mail.content', ['app_name' => Config::get('setting.app_name')]));
}
}
diff --git a/app/Presenters/ComponentGroupPresenter.php b/app/Presenters/ComponentGroupPresenter.php
index 597563940bd..456831a4ddd 100644
--- a/app/Presenters/ComponentGroupPresenter.php
+++ b/app/Presenters/ComponentGroupPresenter.php
@@ -20,6 +20,13 @@ class ComponentGroupPresenter extends BasePresenter implements Arrayable
{
use TimestampsTrait;
+ /**
+ * Flag for the enabled_components_lowest function.
+ *
+ * @var bool
+ */
+ protected $enabledComponentsLowest = false;
+
/**
* Returns the lowest component status.
*
@@ -27,7 +34,7 @@ class ComponentGroupPresenter extends BasePresenter implements Arrayable
*/
public function lowest_status()
{
- if ($component = $this->wrappedObject->enabled_components_lowest()->first()) {
+ if ($component = $this->enabled_components_lowest()) {
return AutoPresenter::decorate($component)->status;
}
}
@@ -39,7 +46,7 @@ public function lowest_status()
*/
public function lowest_human_status()
{
- if ($component = $this->wrappedObject->enabled_components_lowest()->first()) {
+ if ($component = $this->enabled_components_lowest()) {
return AutoPresenter::decorate($component)->human_status;
}
}
@@ -51,11 +58,25 @@ public function lowest_human_status()
*/
public function lowest_status_color()
{
- if ($component = $this->wrappedObject->enabled_components_lowest()->first()) {
+ if ($component = $this->enabled_components_lowest()) {
return AutoPresenter::decorate($component)->status_color;
}
}
+ /**
+ * Return the enabled components from the wrapped object, and cache it if need be.
+ *
+ * @return bool
+ */
+ public function enabled_components_lowest()
+ {
+ if (is_bool($this->enabledComponentsLowest)) {
+ $this->enabledComponentsLowest = $this->wrappedObject->enabled_components_lowest()->first();
+ }
+
+ return $this->enabledComponentsLowest;
+ }
+
/**
* Determine the class for collapsed/uncollapsed groups.
*
diff --git a/app/Presenters/IncidentPresenter.php b/app/Presenters/IncidentPresenter.php
index adab69c1a46..0a8e8a65df9 100644
--- a/app/Presenters/IncidentPresenter.php
+++ b/app/Presenters/IncidentPresenter.php
@@ -29,6 +29,13 @@ class IncidentPresenter extends BasePresenter implements Arrayable
*/
protected $dates;
+ /**
+ * Flag for the latest function.
+ *
+ * @var bool
+ */
+ protected $latest = false;
+
/**
* Incident icon lookup.
*
@@ -248,9 +255,11 @@ public function latest_icon()
*/
public function latest()
{
- if ($update = $this->wrappedObject->updates()->orderBy('created_at', 'desc')->first()) {
- return $update;
+ if (is_bool($this->latest)) {
+ $this->latest = $this->wrappedObject->updates()->first();
}
+
+ return $this->latest;
}
/**
diff --git a/app/Presenters/IncidentUpdatePresenter.php b/app/Presenters/IncidentUpdatePresenter.php
index 5e1d3502cf4..abbcbbc8d17 100644
--- a/app/Presenters/IncidentUpdatePresenter.php
+++ b/app/Presenters/IncidentUpdatePresenter.php
@@ -123,14 +123,19 @@ public function icon()
{
switch ($this->wrappedObject->status) {
case 1: // Investigating
+
return 'icon ion-flag oranges';
case 2: // Identified
+
return 'icon ion-alert yellows';
case 3: // Watching
+
return 'icon ion-eye blues';
case 4: // Fixed
+
return 'icon ion-checkmark greens';
default: // Something actually broke, this shouldn't happen.
+
return '';
}
}
diff --git a/app/Presenters/MetricPointPresenter.php b/app/Presenters/MetricPointPresenter.php
index 388ef816d39..5cbfdd60817 100644
--- a/app/Presenters/MetricPointPresenter.php
+++ b/app/Presenters/MetricPointPresenter.php
@@ -19,16 +19,6 @@ class MetricPointPresenter extends BasePresenter implements Arrayable
{
use TimestampsTrait;
- /**
- * Show the actual calculated value; as per (value * counter).
- *
- * @return int
- */
- public function calculated_value()
- {
- return $this->wrappedObject->value * $this->wrappedObject->counter;
- }
-
/**
* Convert the presenter instance to an array.
*
@@ -37,9 +27,8 @@ public function calculated_value()
public function toArray()
{
return array_merge($this->wrappedObject->toArray(), [
- 'created_at' => $this->created_at(),
- 'updated_at' => $this->updated_at(),
- 'calculated_value' => $this->calculated_value(),
+ 'created_at' => $this->created_at(),
+ 'updated_at' => $this->updated_at(),
]);
}
}
diff --git a/app/Foundation/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
similarity index 94%
rename from app/Foundation/Providers/AppServiceProvider.php
rename to app/Providers/AppServiceProvider.php
index c652b039e80..007a271ca4f 100644
--- a/app/Foundation/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Providers;
+namespace CachetHQ\Cachet\Providers;
use AltThree\Bus\Dispatcher;
use AltThree\Validator\ValidatingMiddleware;
@@ -33,6 +33,8 @@ class AppServiceProvider extends ServiceProvider
* Boot the service provider.
*
* @param \AltThree\Bus\Dispatcher $dispatcher
+ *
+ * @return void
*/
public function boot(Dispatcher $dispatcher)
{
@@ -54,6 +56,7 @@ public function boot(Dispatcher $dispatcher)
'metrics' => \CachetHQ\Cachet\Models\Metric::class,
'schedules' => \CachetHQ\Cachet\Models\Schedule::class,
'subscriber' => \CachetHQ\Cachet\Models\Subscriber::class,
+ 'tags' => \CachetHQ\Cachet\Models\Tag::class,
]);
}
diff --git a/app/Foundation/Providers/ComposerServiceProvider.php b/app/Providers/ComposerServiceProvider.php
similarity index 65%
rename from app/Foundation/Providers/ComposerServiceProvider.php
rename to app/Providers/ComposerServiceProvider.php
index 19ca8fc208b..d3a23d62c4c 100644
--- a/app/Foundation/Providers/ComposerServiceProvider.php
+++ b/app/Providers/ComposerServiceProvider.php
@@ -9,20 +9,19 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Providers;
+namespace CachetHQ\Cachet\Providers;
use CachetHQ\Cachet\Composers\AppComposer;
+use CachetHQ\Cachet\Composers\ComponentsComposer;
use CachetHQ\Cachet\Composers\CurrentUserComposer;
use CachetHQ\Cachet\Composers\DashboardComposer;
-use CachetHQ\Cachet\Composers\ModuleComposer;
-use CachetHQ\Cachet\Composers\Modules\ComponentsComposer as ComponentsModuleComposer;
-use CachetHQ\Cachet\Composers\Modules\MetricsComposer as MetricsModuleComposer;
-use CachetHQ\Cachet\Composers\Modules\ScheduledComposer as ScheduledModuleComposer;
-use CachetHQ\Cachet\Composers\Modules\StatusComposer as StatusModuleComposer;
-use CachetHQ\Cachet\Composers\Modules\StickiedComposer as StickiedModuleComposer;
-use CachetHQ\Cachet\Composers\Modules\TimelineComposer as TimelineModuleComposer;
+use CachetHQ\Cachet\Composers\MetricsComposer;
+use CachetHQ\Cachet\Composers\ScheduledComposer;
use CachetHQ\Cachet\Composers\SettingsComposer;
+use CachetHQ\Cachet\Composers\StatusComposer;
+use CachetHQ\Cachet\Composers\StickiedComposer;
use CachetHQ\Cachet\Composers\ThemeComposer;
+use CachetHQ\Cachet\Composers\TimelineComposer;
use CachetHQ\Cachet\Composers\TimezoneLocaleComposer;
use Illuminate\Contracts\View\Factory;
use Illuminate\Support\ServiceProvider;
@@ -42,13 +41,12 @@ public function boot(Factory $factory)
$factory->composer('dashboard.*', DashboardComposer::class);
$factory->composer(['setup.*', 'dashboard.settings.localization'], TimezoneLocaleComposer::class);
- $factory->composer('*', ModuleComposer::class);
- $factory->composer('partials.modules.components', ComponentsModuleComposer::class);
- $factory->composer('partials.modules.metrics', MetricsModuleComposer::class);
- $factory->composer('partials.modules.stickied', StickiedModuleComposer::class);
- $factory->composer('partials.modules.scheduled', ScheduledModuleComposer::class);
- $factory->composer('partials.modules.status', StatusModuleComposer::class);
- $factory->composer('partials.modules.timeline', TimelineModuleComposer::class);
+ $factory->composer('partials.modules.components', ComponentsComposer::class);
+ $factory->composer('partials.modules.metrics', MetricsComposer::class);
+ $factory->composer('partials.modules.stickied', StickiedComposer::class);
+ $factory->composer('partials.modules.scheduled', ScheduledComposer::class);
+ $factory->composer('partials.modules.status', StatusComposer::class);
+ $factory->composer('partials.modules.timeline', TimelineComposer::class);
$factory->composer(['dashboard.settings.mail', 'setup.*'], SettingsComposer::class);
}
@@ -59,6 +57,6 @@ public function boot(Factory $factory)
*/
public function register()
{
- //
+ $this->app->singleton(DashboardComposer::class);
}
}
diff --git a/app/Foundation/Providers/ConfigServiceProvider.php b/app/Providers/ConfigServiceProvider.php
similarity index 98%
rename from app/Foundation/Providers/ConfigServiceProvider.php
rename to app/Providers/ConfigServiceProvider.php
index 42d6c330413..7390f720d77 100644
--- a/app/Foundation/Providers/ConfigServiceProvider.php
+++ b/app/Providers/ConfigServiceProvider.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Providers;
+namespace CachetHQ\Cachet\Providers;
use CachetHQ\Cachet\Models\Setting as SettingModel;
use CachetHQ\Cachet\Settings\Cache;
diff --git a/app/Foundation/Providers/ConsoleServiceProvider.php b/app/Providers/ConsoleServiceProvider.php
similarity index 94%
rename from app/Foundation/Providers/ConsoleServiceProvider.php
rename to app/Providers/ConsoleServiceProvider.php
index 54d2b92b983..6976453b5c8 100644
--- a/app/Foundation/Providers/ConsoleServiceProvider.php
+++ b/app/Providers/ConsoleServiceProvider.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Providers;
+namespace CachetHQ\Cachet\Providers;
use CachetHQ\Cachet\Subscribers\CommandSubscriber;
use Illuminate\Support\ServiceProvider;
diff --git a/app/Foundation/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
similarity index 99%
rename from app/Foundation/Providers/EventServiceProvider.php
rename to app/Providers/EventServiceProvider.php
index ff44252a401..792e2b8bbf7 100644
--- a/app/Foundation/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Providers;
+namespace CachetHQ\Cachet\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
diff --git a/app/Foundation/Providers/IntegrationServiceProvider.php b/app/Providers/IntegrationServiceProvider.php
similarity index 98%
rename from app/Foundation/Providers/IntegrationServiceProvider.php
rename to app/Providers/IntegrationServiceProvider.php
index 52e869e66f9..57d27523cda 100644
--- a/app/Foundation/Providers/IntegrationServiceProvider.php
+++ b/app/Providers/IntegrationServiceProvider.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Providers;
+namespace CachetHQ\Cachet\Providers;
use CachetHQ\Cachet\Integrations\Contracts\Beacon as BeaconContract;
use CachetHQ\Cachet\Integrations\Contracts\Credits as CreditsContract;
diff --git a/app/Foundation/Providers/RepositoryServiceProvider.php b/app/Providers/RepositoryServiceProvider.php
similarity index 91%
rename from app/Foundation/Providers/RepositoryServiceProvider.php
rename to app/Providers/RepositoryServiceProvider.php
index ed75c14d510..550aa17f1b3 100644
--- a/app/Foundation/Providers/RepositoryServiceProvider.php
+++ b/app/Providers/RepositoryServiceProvider.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Providers;
+namespace CachetHQ\Cachet\Providers;
use CachetHQ\Cachet\Repositories\Metric\MetricRepository;
use CachetHQ\Cachet\Repositories\Metric\MySqlRepository;
@@ -48,9 +48,12 @@ protected function registerMetricRepository()
$config = $app->make(ConfigRepository::class);
switch ($config->get('database.default')) {
- case 'mysql': $repository = new MySqlRepository($config); break;
- case 'pgsql': $repository = new PgSqlRepository($config); break;
- case 'sqlite': $repository = new SqliteRepository($config); break;
+ case 'mysql': $repository = new MySqlRepository($config);
+ break;
+ case 'pgsql': $repository = new PgSqlRepository($config);
+ break;
+ case 'sqlite': $repository = new SqliteRepository($config);
+ break;
}
$dates = $app->make(DateFactory::class);
diff --git a/app/Foundation/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
similarity index 67%
rename from app/Foundation/Providers/RouteServiceProvider.php
rename to app/Providers/RouteServiceProvider.php
index cca41e32e1d..f23d7a023da 100644
--- a/app/Foundation/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -9,14 +9,20 @@
* file that was distributed with this source code.
*/
-namespace CachetHQ\Cachet\Foundation\Providers;
+namespace CachetHQ\Cachet\Providers;
-use Barryvdh\Cors\HandleCors;
use CachetHQ\Cachet\Http\Middleware\Acceptable;
+use CachetHQ\Cachet\Http\Middleware\Authenticate;
+use CachetHQ\Cachet\Http\Middleware\RemoteUserAuthenticate;
use CachetHQ\Cachet\Http\Middleware\Timezone;
+use CachetHQ\Cachet\Http\Middleware\VerifyCsrfToken;
+use CachetHQ\Cachet\Http\Routes\ApiSystemRoutes;
+use CachetHQ\Cachet\Http\Routes\AuthRoutes;
+use CachetHQ\Cachet\Http\Routes\Setup\ApiRoutes as ApiSetupRoutes;
+use CachetHQ\Cachet\Http\Routes\SetupRoutes;
+use CachetHQ\Cachet\Http\Routes\SignupRoutes;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
-use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Routing\Router;
@@ -41,6 +47,21 @@ class RouteServiceProvider extends ServiceProvider
*/
protected $namespace = 'CachetHQ\Cachet\Http\Controllers';
+ /**
+ * These are the route files that should always be available anonymously.
+ *
+ * When applying the always_authenticate feature, these routes will be skipped.
+ *
+ * @var string[]
+ */
+ protected $whitelistedAuthRoutes = [
+ AuthRoutes::class,
+ SetupRoutes::class,
+ SignupRoutes::class,
+ ApiSystemRoutes::class,
+ ApiSetupRoutes::class,
+ ];
+
/**
* Define the route model bindings, pattern filters, etc.
*
@@ -89,6 +110,7 @@ public function map(Router $router)
$router->group(['namespace' => $this->namespace, 'as' => 'core::'], function (Router $router) {
$path = app_path('Http/Routes');
+ $applyAlwaysAuthenticate = $this->app['config']->get('setting.always_authenticate', false);
$AllFileIterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
$PhpFileIterator = new \RegexIterator($AllFileIterator, '/^.+\.php$/i', \RecursiveRegexIterator::GET_MATCH);
@@ -100,9 +122,9 @@ public function map(Router $router)
$routes = $this->app->make("CachetHQ\\Cachet\\Http\\Routes${class}");
if ($routes::$browser) {
- $this->mapForBrowser($router, $routes);
+ $this->mapForBrowser($router, $routes, $applyAlwaysAuthenticate);
} else {
- $this->mapOtherwise($router, $routes);
+ $this->mapOtherwise($router, $routes, $applyAlwaysAuthenticate);
}
}
});
@@ -113,10 +135,11 @@ public function map(Router $router)
*
* @param \Illuminate\Routing\Router $router
* @param object $routes
+ * @param bool $applyAlwaysAuthenticate
*
* @return void
*/
- protected function mapForBrowser(Router $router, $routes)
+ protected function mapForBrowser(Router $router, $routes, $applyAlwaysAuthenticate)
{
$middleware = [
EncryptCookies::class,
@@ -127,6 +150,11 @@ protected function mapForBrowser(Router $router, $routes)
SubstituteBindings::class,
];
+ if ($applyAlwaysAuthenticate && !$this->isWhiteListedAuthRoute($routes)) {
+ $middleware[] = RemoteUserAuthenticate::class;
+ $middleware[] = Authenticate::class;
+ }
+
$router->group(['middleware' => $middleware], function (Router $router) use ($routes) {
$routes->map($router);
});
@@ -137,20 +165,43 @@ protected function mapForBrowser(Router $router, $routes)
*
* @param \Illuminate\Routing\Router $router
* @param object $routes
+ * @param bool $applyAlwaysAuthenticate
*
* @return void
*/
- protected function mapOtherwise(Router $router, $routes)
+ protected function mapOtherwise(Router $router, $routes, $applyAlwaysAuthenticate)
{
$middleware = [
- HandleCors::class,
SubstituteBindings::class,
Acceptable::class,
Timezone::class,
];
+ if ($applyAlwaysAuthenticate && !$this->isWhiteListedAuthRoute($routes)) {
+ $middleware[] = 'auth.api:true';
+ }
+
$router->group(['middleware' => $middleware], function (Router $router) use ($routes) {
$routes->map($router);
});
}
+
+ /**
+ * Validates if the route object is an instance of the whitelisted routes.
+ * A small workaround since we cant use multiple classes in a `instanceof` comparison.
+ *
+ * @param object $routes
+ *
+ * @return bool
+ */
+ private function isWhiteListedAuthRoute($routes)
+ {
+ foreach ($this->whitelistedAuthRoutes as $whitelistedRoute) {
+ if (is_a($routes, $whitelistedRoute)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
diff --git a/app/Repositories/Metric/AbstractMetricRepository.php b/app/Repositories/Metric/AbstractMetricRepository.php
index 4c14cc6b688..566827e6661 100644
--- a/app/Repositories/Metric/AbstractMetricRepository.php
+++ b/app/Repositories/Metric/AbstractMetricRepository.php
@@ -108,7 +108,7 @@ protected function mapResults(Metric $metric, array $results)
$point->value = $metric->default_value;
}
- if ($point->value === 0 && $metric->default_value != $value) {
+ if ($point->value === 0 && $metric->default_value != $point->value) {
$point->value = $metric->default_value;
}
diff --git a/app/Repositories/Metric/MetricRepository.php b/app/Repositories/Metric/MetricRepository.php
index 462b6199db0..c424336b19c 100644
--- a/app/Repositories/Metric/MetricRepository.php
+++ b/app/Repositories/Metric/MetricRepository.php
@@ -60,15 +60,31 @@ public function __construct(MetricInterface $repository, DateFactory $dates)
public function listPointsLastHour(Metric $metric)
{
$dateTime = $this->dates->make();
- $pointKey = $dateTime->format('H:i');
- $points = $this->repository->getPointsSinceMinutes($metric, 60)->pluck('value', 'key');
+ $pointKey = $dateTime->format('Y-m-d H:i');
+ $nrOfMinutes = 61;
+ $points = $this->repository->getPointsSinceMinutes($metric, $nrOfMinutes + $metric->threshold)->pluck('value', 'key')->take(-$nrOfMinutes);
- for ($i = 0; $i <= 60; $i++) {
+ $timeframe = $nrOfMinutes;
+
+ //Settings counter for minutes without data
+ $minutesWithNoData = 0;
+
+ for ($i = 0; $i < $timeframe; $i++) {
if (!$points->has($pointKey)) {
- $points->put($pointKey, $metric->default_value);
+ if ($i >= $metric->threshold) {
+ $points->put($pointKey, $metric->default_value);
+ //We put default value as metric, so we can reset counter for minutes without data
+ $minutesWithNoData = 0;
+ } else {
+ //We didn't find any data, but threshold is not meet yet so we just adding to counter
+ $minutesWithNoData++;
+ }
+ } else {
+ //We found data within this threshold, zeroing counter
+ $minutesWithNoData = 0;
}
- $pointKey = $dateTime->sub(new DateInterval('PT1M'))->format('H:i');
+ $pointKey = $dateTime->sub(new DateInterval('PT1M'))->format('Y-m-d H:i');
}
return $points->sortBy(function ($point, $key) {
@@ -87,15 +103,15 @@ public function listPointsLastHour(Metric $metric)
public function listPointsToday(Metric $metric, $hours = 12)
{
$dateTime = $this->dates->make();
- $pointKey = $dateTime->format('H:00');
+ $pointKey = $dateTime->format('Y-m-d H:00');
$points = $this->repository->getPointsSinceHour($metric, $hours)->pluck('value', 'key');
- for ($i = 0; $i <= $hours; $i++) {
+ for ($i = 0; $i < $hours; $i++) {
if (!$points->has($pointKey)) {
$points->put($pointKey, $metric->default_value);
}
- $pointKey = $dateTime->sub(new DateInterval('PT1H'))->format('H:00');
+ $pointKey = $dateTime->sub(new DateInterval('PT1H'))->format('Y-m-d H:00');
}
return $points->sortBy(function ($point, $key) {
diff --git a/app/Repositories/Metric/MySqlRepository.php b/app/Repositories/Metric/MySqlRepository.php
index d3439236362..3d5e37159dd 100644
--- a/app/Repositories/Metric/MySqlRepository.php
+++ b/app/Repositories/Metric/MySqlRepository.php
@@ -32,10 +32,16 @@ class MySqlRepository extends AbstractMetricRepository implements MetricInterfac
public function getPointsSinceMinutes(Metric $metric, $minutes)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%H:%i') AS `key`, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :minutes MINUTE) GROUP BY HOUR({$this->getMetricPointsTable()}.`created_at`), MINUTE({$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
- 'metricId' => $metric->id,
- 'minutes' => $minutes,
- ]);
+
+ $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%Y-%m-%d %H:%i') AS `key`, {$queryType} ".
+ "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :minutes MINUTE) ".
+ "AND {$this->getMetricPointsTable()}.`created_at` <= NOW() ".
+ "GROUP BY HOUR({$this->getMetricPointsTable()}.`created_at`), MINUTE({$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
+ 'metricId' => $metric->id,
+ 'minutes' => $minutes,
+ ]);
return $this->mapResults($metric, $points);
}
@@ -51,10 +57,16 @@ public function getPointsSinceMinutes(Metric $metric, $minutes)
public function getPointsSinceHour(Metric $metric, $hour)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%H:00') AS `key`, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :hour HOUR) GROUP BY HOUR({$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
- 'metricId' => $metric->id,
- 'hour' => $hour,
- ]);
+ $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%Y-%m-%d %H:00') AS `key`, {$queryType} ".
+ "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :hour HOUR) ".
+ "AND {$this->getMetricPointsTable()}.`created_at` <= NOW() ".
+ "GROUP BY HOUR({$this->getMetricPointsTable()}.`created_at`) ".
+ "ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
+ 'metricId' => $metric->id,
+ 'hour' => $hour,
+ ]);
return $this->mapResults($metric, $points);
}
@@ -70,10 +82,15 @@ public function getPointsSinceHour(Metric $metric, $hour)
public function getPointsSinceDay(Metric $metric, $day)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%Y-%m-%d') AS `key`, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :day DAY) GROUP BY DATE({$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
- 'metricId' => $metric->id,
- 'day' => $day,
- ]);
+ $points = DB::select("SELECT DATE_FORMAT({$this->getMetricPointsTable()}.`created_at`, '%Y-%m-%d') AS `key`, {$queryType} ".
+ "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.`created_at` >= DATE_SUB(NOW(), INTERVAL :day DAY) ".
+ "AND {$this->getMetricPointsTable()}.`created_at` <= NOW() ".
+ "GROUP BY DATE({$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
+ 'metricId' => $metric->id,
+ 'day' => $day,
+ ]);
return $this->mapResults($metric, $points);
}
diff --git a/app/Repositories/Metric/PgSqlRepository.php b/app/Repositories/Metric/PgSqlRepository.php
index feec9d84042..c8d135c6317 100644
--- a/app/Repositories/Metric/PgSqlRepository.php
+++ b/app/Repositories/Metric/PgSqlRepository.php
@@ -13,7 +13,6 @@
use CachetHQ\Cachet\Models\Metric;
use Illuminate\Support\Facades\DB;
-use Jenssegers\Date\Date;
/**
* This is the pgsql repository class.
@@ -33,9 +32,15 @@ class PgSqlRepository extends AbstractMetricRepository implements MetricInterfac
public function getPointsSinceMinutes(Metric $metric, $minutes)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT to_char({$this->getMetricPointsTable()}.created_at, 'HH24:MI') AS key, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.created_at >= (NOW() - INTERVAL '{$minutes}' MINUTE) GROUP BY to_char({$this->getMetricPointsTable()}.created_at, 'HH24:MI') ORDER BY to_char({$this->getMetricPointsTable()}.created_at, 'HH24:MI')", [
- 'metricId' => $metric->id,
- ]);
+ $points = DB::select("SELECT to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:MI') AS key, {$queryType} ".
+ "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.created_at >= (NOW() - INTERVAL '{$minutes}' MINUTE) ".
+ "AND {$this->getMetricPointsTable()}.created_at <= NOW() ".
+ "GROUP BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:MI') ".
+ "ORDER BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:MI')", [
+ 'metricId' => $metric->id,
+ ]);
return $this->mapResults($metric, $points);
}
@@ -51,9 +56,15 @@ public function getPointsSinceMinutes(Metric $metric, $minutes)
public function getPointsSinceHour(Metric $metric, $hour)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT to_char({$this->getMetricPointsTable()}.created_at, 'HH24:00') AS key, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.created_at >= (NOW() - INTERVAL '{$hour}' HOUR) GROUP BY to_char({$this->getMetricPointsTable()}.created_at, 'HH24:00') ORDER BY to_char({$this->getMetricPointsTable()}.created_at, 'HH24:00')", [
- 'metricId' => $metric->id,
- ]);
+ $points = DB::select("SELECT to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00') AS key, {$queryType} ".
+ "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.created_at >= (NOW() - INTERVAL '{$hour}' HOUR) ".
+ "AND {$this->getMetricPointsTable()}.created_at <= NOW() ".
+ "GROUP BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00') ".
+ "ORDER BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00')", [
+ 'metricId' => $metric->id,
+ ]);
return $this->mapResults($metric, $points);
}
@@ -69,9 +80,15 @@ public function getPointsSinceHour(Metric $metric, $hour)
public function getPointsSinceDay(Metric $metric, $day)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT DATE({$this->getMetricPointsTable()}.created_at) AS key, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.created_at >= (DATE(NOW()) - INTERVAL '{$day}' DAY) GROUP BY DATE({$this->getMetricPointsTable()}.created_at) ORDER BY DATE({$this->getMetricPointsTable()}.created_at)", [
- 'metricId' => $metric->id,
- ]);
+ $points = DB::select("SELECT to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00') AS key, {$queryType} ".
+ "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.created_at >= (DATE(NOW()) - INTERVAL '{$day}' DAY) ".
+ "AND {$this->getMetricPointsTable()}.created_at <= DATE(NOW()) ".
+ "GROUP BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00')".
+ "ORDER BY to_char({$this->getMetricPointsTable()}.created_at, 'YYYY-MM-DD HH24:00')", [
+ 'metricId' => $metric->id,
+ ]);
return $this->mapResults($metric, $points);
}
diff --git a/app/Repositories/Metric/SqliteRepository.php b/app/Repositories/Metric/SqliteRepository.php
index 5d9c751d637..d979e084ac6 100644
--- a/app/Repositories/Metric/SqliteRepository.php
+++ b/app/Repositories/Metric/SqliteRepository.php
@@ -13,7 +13,6 @@
use CachetHQ\Cachet\Models\Metric;
use Illuminate\Support\Facades\DB;
-use Jenssegers\Date\Date;
/**
* This is the sqlite repository class.
@@ -33,9 +32,16 @@ class SqliteRepository extends AbstractMetricRepository implements MetricInterfa
public function getPointsSinceMinutes(Metric $metric, $minutes)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT strftime('%H:%M', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', '-{$minutes} minutes') GROUP BY strftime('%H', {$this->getMetricPointsTable()}.`created_at`), strftime('%M', {$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
- 'metricId' => $metric->id,
- ]);
+ $points = DB::select("SELECT strftime('%Y-%m-%d %H:%M', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} ".
+ "FROM {$this->getMetricsTable()} ".
+ "INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', 'localtime', '-{$minutes} minutes') ".
+ "AND {$this->getMetricPointsTable()}.`created_at` <= datetime('now', 'localtime') ".
+ "GROUP BY strftime('%H', {$this->getMetricPointsTable()}.`created_at`), strftime('%M', {$this->getMetricPointsTable()}.`created_at`) ".
+ "ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
+ 'metricId' => $metric->id,
+ ]);
return $this->mapResults($metric, $points);
}
@@ -51,9 +57,14 @@ public function getPointsSinceMinutes(Metric $metric, $minutes)
public function getPointsSinceHour(Metric $metric, $hour)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT strftime('%H:00', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', '-{$hour} hours') GROUP BY strftime('%H', {$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
- 'metricId' => $metric->id,
- ]);
+ $points = DB::select("SELECT strftime('%Y-%m-%d %H:00', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} ".
+ "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', 'localtime', '-{$hour} hours') ".
+ "AND {$this->getMetricPointsTable()}.`created_at` <= datetime('now', 'localtime') ".
+ "GROUP BY strftime('%H', {$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
+ 'metricId' => $metric->id,
+ ]);
return $this->mapResults($metric, $points);
}
@@ -69,9 +80,15 @@ public function getPointsSinceHour(Metric $metric, $hour)
public function getPointsSinceDay(Metric $metric, $day)
{
$queryType = $this->getQueryType($metric);
- $points = DB::select("SELECT strftime('%Y-%m-%d', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id WHERE {$this->getMetricsTable()}.id = :metricId AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', '-{$day} days') GROUP BY DATE({$this->getMetricPointsTable()}.`created_at`) ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
- 'metricId' => $metric->id,
- ]);
+ $points = DB::select("SELECT strftime('%Y-%m-%d', {$this->getMetricPointsTable()}.`created_at`) AS `key`, {$queryType} ".
+ "FROM {$this->getMetricsTable()} INNER JOIN {$this->getMetricPointsTable()} ON {$this->getMetricsTable()}.id = {$this->getMetricPointsTable()}.metric_id ".
+ "WHERE {$this->getMetricsTable()}.id = :metricId ".
+ "AND {$this->getMetricPointsTable()}.`created_at` >= datetime('now', 'localtime', '-{$day} days') ".
+ "AND {$this->getMetricPointsTable()}.`created_at` <= datetime('now', 'localtime') ".
+ "GROUP BY DATE({$this->getMetricPointsTable()}.`created_at`) ".
+ "ORDER BY {$this->getMetricPointsTable()}.`created_at`", [
+ 'metricId' => $metric->id,
+ ]);
return $this->mapResults($metric, $points);
}
diff --git a/app/Services/Modules/Manager.php b/app/Services/Modules/Manager.php
deleted file mode 100644
index 61a276c68a2..00000000000
--- a/app/Services/Modules/Manager.php
+++ /dev/null
@@ -1,80 +0,0 @@
-
- */
-class Manager
-{
- /**
- * Groups the modules.
- *
- * @param array $modules
- * @param array $groups
- *
- * @return array
- */
- public function groupModules(array $modules, array $groups = [])
- {
- $grouped = [];
- $length = count($modules);
- foreach ($modules as $order => $module) {
- if (!is_array($module) || empty($module['group'])) {
- $order = array_get($module, 'order', PHP_INT_MAX - $length + $order);
-
- $grouped[] = [$module, 'order' => $order];
-
- continue;
- }
-
- $group = $module['group'];
- if (empty($grouped[$group])) {
- $grouped[$group] = [$module];
-
- continue;
- }
-
- $grouped[$group][] = $module;
- }
-
- foreach ($groups as $group => $order) {
- if (empty($grouped[$group])) {
- continue;
- }
-
- $grouped[$group]['order'] = $order;
- }
-
- return $grouped;
- }
-
- /**
- * Orders the modules.
- *
- * @param array $modules
- *
- * @return array
- */
- public function orderModules($modules)
- {
- $modules = array_numeric_sort($modules);
-
- foreach ($modules as $group => $subModules) {
- $modules[$group] = array_numeric_sort($subModules);
- }
-
- return $modules;
- }
-}
diff --git a/app/Services/Modules/Renderer.php b/app/Services/Modules/Renderer.php
deleted file mode 100644
index b8fe3df339b..00000000000
--- a/app/Services/Modules/Renderer.php
+++ /dev/null
@@ -1,75 +0,0 @@
-
- */
-class Renderer
-{
- /**
- * Render the modules.
- *
- * @param \Illuminate\Contracts\View\Factory $factory
- * @param array $data
- * @param array $modules
- * @param string|null $group
- *
- * @return string
- */
- public function renderModules(Factory $factory, array $data, array $modules, $group = null)
- {
- if ($group !== null) {
- if (empty($modules[$group])) {
- return '';
- }
-
- return $this->renderModulesGroup($factory, $data, $modules[$group]);
- }
-
- return array_reduce(
- array_numeric_sort($modules),
- function ($reduce, $module) use ($factory, $data) {
- return $reduce.$this->renderModulesGroup($factory, $data, $module);
- },
- ''
- );
- }
-
- /**
- * Render a group of modules.
- *
- * @param \Illuminate\Contracts\View\Factory $factory
- * @param array $data
- * @param array $modules
- *
- * @return string
- */
- protected function renderModulesGroup(Factory $factory, array $data, array $modules)
- {
- return array_reduce(
- array_numeric_sort($modules),
- function ($reduce, $module) use ($factory, $data) {
- if (empty($module['partial'])) {
- return $reduce;
- }
-
- return $reduce.$factory->make($module['partial'], $data)->render();
- },
- ''
- );
- }
-}
diff --git a/app/Settings/ReadException.php b/app/Settings/ReadException.php
new file mode 100644
index 00000000000..86de0ae3f9e
--- /dev/null
+++ b/app/Settings/ReadException.php
@@ -0,0 +1,34 @@
+
+ */
+class ReadException extends SettingsException
+{
+ /**
+ * Create a new read exception instance.
+ *
+ * @param \Exception $e
+ *
+ * @return void
+ */
+ public function __construct(Exception $e)
+ {
+ parent::__construct('Unable to read Cachet settings', $e);
+ }
+}
diff --git a/app/Settings/Repository.php b/app/Settings/Repository.php
index 35cf79e914b..e6d54038ee3 100644
--- a/app/Settings/Repository.php
+++ b/app/Settings/Repository.php
@@ -12,6 +12,7 @@
namespace CachetHQ\Cachet\Settings;
use CachetHQ\Cachet\Models\Setting;
+use Exception;
/**
* This is the settings repository class.
@@ -59,13 +60,19 @@ public function __construct(Setting $model)
/**
* Returns a setting from the database.
*
+ * @throws \CachetHQ\Cachet\Settings\ReadException
+ *
* @return array
*/
public function all()
{
- return $this->model->all(['name', 'value'])->pluck('value', 'name')->map(function ($value, $name) {
- return $this->castSetting($name, $value);
- })->toArray();
+ try {
+ return $this->model->all(['name', 'value'])->pluck('value', 'name')->map(function ($value, $name) {
+ return $this->castSetting($name, $value);
+ })->toArray();
+ } catch (Exception $e) {
+ throw new ReadException($e);
+ }
}
/**
@@ -74,16 +81,22 @@ public function all()
* @param string $name
* @param string|null $value
*
+ * @throws \CachetHQ\Cachet\Settings\WriteException
+ *
* @return void
*/
public function set($name, $value)
{
$this->stale = true;
- if ($value === null) {
- $this->model->where('name', '=', $name)->delete();
- } else {
- $this->model->updateOrCreate(compact('name'), compact('value'));
+ try {
+ if ($value === null) {
+ $this->model->where('name', '=', $name)->delete();
+ } else {
+ $this->model->updateOrCreate(compact('name'), compact('value'));
+ }
+ } catch (Exception $e) {
+ throw new WriteException($e);
}
}
@@ -93,15 +106,21 @@ public function set($name, $value)
* @param string $name
* @param mixed $default
*
+ * @throws \CachetHQ\Cachet\Settings\ReadException
+ *
* @return mixed
*/
public function get($name, $default = null)
{
- if ($setting = $this->model->where('name', '=', $name)->first()) {
- return $this->castSetting($name, $setting->value);
+ try {
+ if ($setting = $this->model->where('name', '=', $name)->first()) {
+ return $this->castSetting($name, $setting->value);
+ }
+
+ return $default;
+ } catch (Exception $e) {
+ throw new ReadException($e);
}
-
- return $default;
}
/**
@@ -109,25 +128,37 @@ public function get($name, $default = null)
*
* @param string $name
*
+ * @throws \CachetHQ\Cachet\Settings\WriteException
+ *
* @return void
*/
public function delete($name)
{
$this->stale = true;
- $this->model->where('name', '=', $name)->delete();
+ try {
+ $this->model->where('name', '=', $name)->delete();
+ } catch (Exception $e) {
+ throw new WriteException($e);
+ }
}
/**
* Clear all settings.
*
+ * @throws \CachetHQ\Cachet\Settings\WriteException
+ *
* @return void
*/
public function clear()
{
$this->stale = true;
- $this->model->query()->delete();
+ try {
+ $this->model->query()->delete();
+ } catch (Exception $e) {
+ throw new WriteException($e);
+ }
}
/**
diff --git a/app/Settings/SettingsException.php b/app/Settings/SettingsException.php
new file mode 100644
index 00000000000..1716ea366d9
--- /dev/null
+++ b/app/Settings/SettingsException.php
@@ -0,0 +1,35 @@
+
+ */
+class SettingsException extends Exception
+{
+ /**
+ * Create a new write exception instance.
+ *
+ * @param string $m
+ * @param \Exception $e
+ *
+ * @return void
+ */
+ public function __construct(string $m, Exception $e)
+ {
+ parent::__construct($m, 0, $e);
+ }
+}
diff --git a/app/Settings/WriteException.php b/app/Settings/WriteException.php
new file mode 100644
index 00000000000..baa41ff7ac1
--- /dev/null
+++ b/app/Settings/WriteException.php
@@ -0,0 +1,34 @@
+
+ */
+class WriteException extends SettingsException
+{
+ /**
+ * Create a new write exception instance.
+ *
+ * @param \Exception $e
+ *
+ * @return void
+ */
+ public function __construct(Exception $e)
+ {
+ parent::__construct('Unable to write Cachet settings', $e);
+ }
+}
diff --git a/app/Subscribers/CommandSubscriber.php b/app/Subscribers/CommandSubscriber.php
index 7b7acb6ff66..a879361999a 100644
--- a/app/Subscribers/CommandSubscriber.php
+++ b/app/Subscribers/CommandSubscriber.php
@@ -15,10 +15,7 @@
use CachetHQ\Cachet\Bus\Events\System\SystemWasResetEvent;
use CachetHQ\Cachet\Bus\Events\System\SystemWasUpdatedEvent;
use CachetHQ\Cachet\Settings\Cache;
-use Carbon\Carbon;
-use Exception;
use Illuminate\Console\Command;
-use Illuminate\Contracts\Config\Repository;
use Illuminate\Contracts\Events\Dispatcher;
/**
@@ -36,25 +33,16 @@ class CommandSubscriber
*/
protected $cache;
- /**
- * The config repository instance.
- *
- * @var \Illuminate\Contracts\Config\Repository
- */
- protected $config;
-
/**
* Create a new command subscriber instance.
*
- * @param \CachetHQ\Cachet\Settings\Cache $cache
- * @param \Illuminate\Contracts\Config\Repository $config
+ * @param \CachetHQ\Cachet\Settings\Cache $cache
*
* @return void
*/
- public function __construct(Cache $cache, Repository $config)
+ public function __construct(Cache $cache)
{
$this->cache = $cache;
- $this->config = $config;
}
/**
@@ -69,6 +57,15 @@ public function subscribe(Dispatcher $events)
$events->listen('command.installing', __CLASS__.'@fireInstallingCommand', 5);
$events->listen('command.updating', __CLASS__.'@fireUpdatingCommand', 5);
$events->listen('command.resetting', __CLASS__.'@fireResettingCommand', 5);
+ $events->listen('command.generatekey', __CLASS__.'@onGenerateKey');
+ $events->listen('command.cacheconfig', __CLASS__.'@onCacheConfig');
+ $events->listen('command.cacheroutes', __CLASS__.'@onCacheRoutes');
+ $events->listen('command.publishvendors', __CLASS__.'@onPublishVendors');
+ $events->listen('command.resetmigrations', __CLASS__.'@onResetMigrations');
+ $events->listen('command.runmigrations', __CLASS__.'@onRunMigrations');
+ $events->listen('command.runseeding', __CLASS__.'@onRunSeeding');
+ $events->listen('command.linkstorage', __CLASS__.'@onLinkStorage');
+ $events->listen('command.updatecache', __CLASS__.'@onUpdateCache');
}
/**
@@ -120,7 +117,7 @@ public function fireResettingCommand(Command $command)
}
/**
- * Handle the main bulk of the command, clear the settings and backup the database.
+ * Handle the main bulk of the command, clear the settings.
*
* @param \Illuminate\Console\Command $command
*
@@ -133,29 +130,117 @@ protected function handleMainCommand(Command $command)
$this->cache->clear();
$command->line('Settings cache cleared!');
+ }
- // SQLite does not backup.
- if ($this->config->get('database.default') === 'sqlite') {
- $command->line('Backup skipped: SQLite is not supported.');
+ /**
+ * Handle a command.generatekey event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onGenerateKey(Command $command)
+ {
+ $command->call('key:generate');
+ }
- return;
- }
+ /**
+ * Handle a command.cacheconfig event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onCacheConfig(Command $command)
+ {
+ $command->call('config:cache');
+ }
+
+ /**
+ * Handle a command.cacheroutes event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onCacheRoutes(Command $command)
+ {
+ $command->call('route:cache');
+ }
+
+ /**
+ * Handle a command.publishvendors event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onPublishVendors(Command $command)
+ {
+ $command->call('vendor:publish', ['--all' => true]);
+ }
+
+ /**
+ * Handle a command.resetmigrations event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onResetMigrations(Command $command)
+ {
+ $command->call('migrate:reset', ['--force' => true]);
+ }
- $command->line('Backing up database...');
-
- try {
- $command->call('db:backup', [
- '--compression' => 'gzip',
- '--database' => $this->config->get('database.default'),
- '--destination' => 'local',
- '--destinationPath' => Carbon::now()->format('Y-m-d H.i.s'),
- '--no-interaction' => true,
- ]);
- } catch (Exception $e) {
- $command->error($e->getMessage());
- $command->line('Backup skipped!');
+ /**
+ * Handle a command.runmigrations event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onRunMigrations(Command $command)
+ {
+ $command->call('migrate', ['--force' => true]);
+ }
+
+ /**
+ * Handle a command.runseeding event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onRunSeeding(Command $command)
+ {
+ $command->call('db:seed', ['--force' => true]);
+ }
+
+ /**
+ * Handle a command.linkstorage event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onLinkStorage(Command $command)
+ {
+ if ($command->getApplication()->has('storage:link')) {
+ $command->call('storage:link');
}
+ }
- $command->line('Backup completed!');
+ /**
+ * Handle a command.updatecache event.
+ *
+ * @param \Illuminate\Console\Command $command
+ *
+ * @return void
+ */
+ public function onUpdateCache(Command $command)
+ {
+ $command->line('Clearing cache...');
+ $command->call('cache:clear');
+ $command->info('Cache cleared!');
}
}
diff --git a/app/helpers.php b/app/helpers.php
index 6f6d01e6a0f..d1f032545d4 100644
--- a/app/helpers.php
+++ b/app/helpers.php
@@ -10,6 +10,7 @@
*/
use CachetHQ\Cachet\Settings\Repository;
+use Illuminate\Contracts\Bus\Dispatcher;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Request;
use Jenssegers\Date\Date;
@@ -113,36 +114,28 @@ function color_darken($hex, $percent)
*/
function color_contrast($hexcolor)
{
- $r = hexdec(substr($hexcolor, 0, 2));
- $g = hexdec(substr($hexcolor, 2, 2));
- $b = hexdec(substr($hexcolor, 4, 2));
+ $r = ctype_xdigit(substr($hexcolor, 0, 2));
+ $g = ctype_xdigit(substr($hexcolor, 2, 2));
+ $b = ctype_xdigit(substr($hexcolor, 4, 2));
$yiq = (($r * 100) + ($g * 400) + ($b * 114)) / 1000;
return ($yiq >= 128) ? 'black' : 'white';
}
}
-if (!function_exists('array_numeric_sort')) {
+if (!function_exists('cachet_route_generator')) {
/**
- * Numerically sort an array based on a specific key.
+ * Generate the route string.
*
- * @param array $array
- * @param string $key
+ * @param string $name
+ * @param string $method
+ * @param string $domain
*
- * @return array
+ * @return string
*/
- function array_numeric_sort(array $array = [], $key = 'order')
+ function cachet_route_generator($name, $method = 'get', $domain = 'core')
{
- uasort($array, function ($a, $b) use ($key) {
- $a = array_get($a, $key, PHP_INT_MAX);
- $b = array_get($b, $key, PHP_INT_MAX);
-
- $default = PHP_MAJOR_VERSION < 7 ? 1 : 0;
-
- return $a < $b ? -1 : ($a === $b ? $default : 1);
- });
-
- return $array;
+ return "{$domain}::{$method}:{$name}";
}
}
@@ -159,7 +152,11 @@ function array_numeric_sort(array $array = [], $key = 'order')
*/
function cachet_route($name, $parameters = [], $method = 'get', $domain = 'core')
{
- return app('url')->route("{$domain}::{$method}:{$name}", $parameters, true);
+ return app('url')->route(
+ cachet_route_generator($name, $method, $domain),
+ $parameters,
+ true
+ );
}
}
@@ -183,3 +180,17 @@ function cachet_redirect($name, $parameters = [], $status = 302, $headers = [],
return app('redirect')->to($url, $status, $headers);
}
}
+
+if (!function_exists('execute')) {
+ /**
+ * Send the given command to the dispatcher for execution.
+ *
+ * @param object $command
+ *
+ * @return void
+ */
+ function execute($command)
+ {
+ return app(Dispatcher::class)->dispatchNow($command);
+ }
+}
diff --git a/bootstrap/app.php b/bootstrap/app.php
index 787b5db6e30..2b2ff8cb519 100644
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -26,7 +26,7 @@
$app->singleton(Illuminate\Contracts\Console\Kernel::class, CachetHQ\Cachet\Console\Kernel::class);
-$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, GrahamCampbell\Exceptions\NewExceptionHandler::class);
+$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, GrahamCampbell\Exceptions\ExceptionHandler::class);
/*
|--------------------------------------------------------------------------
diff --git a/composer.json b/composer.json
index 7b628fa6164..ea6814120e2 100644
--- a/composer.json
+++ b/composer.json
@@ -24,50 +24,49 @@
"email": "joe@alt-three.com"
}
],
+ "replace": {
+ "paragonie/random_compat": "*",
+ "symfony/polyfill-mbstring": "*"
+ },
"require": {
- "php": ">=5.6.4",
+ "php": "^7.1.3",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
"ext-xml": "*",
- "alt-three/badger": "^3.1",
- "alt-three/bus": "^2.0",
- "alt-three/emoji": "^4.1",
- "alt-three/logger": "^1.3",
- "alt-three/throttle": "^1.0",
- "alt-three/twitter": "^1.0",
- "alt-three/validator": "^2.0",
+ "alt-three/bus": "^4.1",
+ "cachethq/badger": "^2.0",
+ "cachethq/emoji": "^3.0",
+ "cachethq/twitter": "^3.0",
+ "alt-three/validator": "^4.1",
"aws/aws-sdk-php": "^3.7",
- "backup-manager/laravel": "dev-master#df53f9c9d8c6be5d7a2638f45d54b8fb7bc51e2b",
- "barryvdh/laravel-cors": "^0.8",
- "doctrine/dbal": "2.5.13",
- "fideloper/proxy": "^3.1",
- "graham-campbell/binput": "^3.5",
- "graham-campbell/core": "^5.1",
- "graham-campbell/exceptions": "^9.1",
- "graham-campbell/markdown": "^7.1",
- "guzzlehttp/guzzle": "^6.2.1",
- "jenssegers/date": "^3.2",
- "laravel/framework": "^5.4",
+ "barryvdh/laravel-cors": "^0.11.0",
+ "bugsnag/bugsnag-laravel": "^2.15",
+ "chillerlan/php-qrcode": "^2.0",
+ "doctrine/dbal": "2.9.*",
+ "fideloper/proxy": "^4.0",
+ "graham-campbell/binput": "^6.0",
+ "graham-campbell/exceptions": "^11.1",
+ "graham-campbell/markdown": "^11.2",
+ "guzzlehttp/guzzle": "^6.3.3",
+ "jenssegers/date": "^3.4",
+ "laravel/framework": "5.7.*",
"laravel/tinker": "^1.0",
- "mccool/laravel-auto-presenter": "^5.0",
- "nexmo/client": "@beta",
- "pragmarx/google2fa": "^0.7.1",
+ "mccool/laravel-auto-presenter": "^7.1",
+ "nexmo/client": "^1.5",
+ "pragmarx/google2fa": "^5.0",
"predis/predis": "^1.1",
- "roumen/feed": "^2.10",
- "twig/twig": "^1.26.1"
+ "twig/twig": "^2.13"
},
"require-dev": {
"ext-sqlite3": "*",
- "alt-three/testbench": "^1.11",
- "brianium/paratest": "^0.15.0",
- "filp/whoops": "^2.1",
- "fzaninotto/faker": "^1.6",
- "graham-campbell/testbench-core": "^1.1",
- "laravel/browser-kit-testing": "^2.0",
- "mockery/mockery": "0.9.9",
- "nikic/php-parser": "^3.0",
- "phpunit/phpunit": "5.7.20",
- "symfony/css-selector": "^3.1",
- "symfony/dom-crawler": "^3.1",
- "tightenco/mailthief": "^0.3.2"
+ "alt-three/testbench": "5.0.x-dev",
+ "barryvdh/laravel-debugbar": "^3.2",
+ "filp/whoops": "^2.3",
+ "fzaninotto/faker": "^1.8",
+ "graham-campbell/analyzer": "^2.1",
+ "mockery/mockery": "^1.2",
+ "phpunit/phpunit": "^7.4",
+ "tightenco/mailthief": "^0.3.14"
},
"suggest": {
"ext-apc": "APC Support cache driver."
@@ -90,27 +89,34 @@
},
"scripts": {
"post-root-package-install": [
- "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
+ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
- "php artisan key:generate"
+ "@php artisan key:generate"
+ ],
+ "post-autoload-dump": [
+ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
+ "@php artisan package:discover"
],
- "post-install-cmd": [
- "Illuminate\\Foundation\\ComposerScripts::postInstall",
- "php artisan optimize"
+ "test": [
+ "@php artisan config:clear",
+ "vendor/bin/phpunit"
],
- "post-update-cmd": [
- "Illuminate\\Foundation\\ComposerScripts::postUpdate",
- "php artisan optimize"
+ "test-coverage": [
+ "@php artisan config:clear",
+ "vendor/bin/phpunit --coverage-clover=coverage.xml"
]
},
"config": {
"platform": {
- "php": "5.6.4"
+ "php": "7.1.3"
},
"preferred-install": "dist",
"sort-packages": true,
- "optimize-autoloader": true
+ "optimize-autoloader": true,
+ "allow-plugins": {
+ "kylekatarnls/update-helper": true
+ }
},
"extra": {
"branch-alias": {
diff --git a/composer.lock b/composer.lock
index bad3f662760..5694c9cc393 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,43 +1,43 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "25204c32b5e7a97cfc7b64872b7e7299",
+ "content-hash": "6ca7a749bbb1681ee57e72dd9387f9ec",
"packages": [
{
- "name": "alt-three/badger",
- "version": "v3.2.0",
+ "name": "alt-three/bus",
+ "version": "v4.5.0",
"source": {
"type": "git",
- "url": "https://github.com/AltThree/Badger.git",
- "reference": "c4cd7140aed3554ba4b8c44a877d400d6e5e3554"
+ "url": "https://github.com/AltThree/Bus.git",
+ "reference": "21d1623520c0ad48acb72420fd7f986cd23f349a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AltThree/Badger/zipball/c4cd7140aed3554ba4b8c44a877d400d6e5e3554",
- "reference": "c4cd7140aed3554ba4b8c44a877d400d6e5e3554",
+ "url": "https://api.github.com/repos/AltThree/Bus/zipball/21d1623520c0ad48acb72420fd7f986cd23f349a",
+ "reference": "21d1623520c0ad48acb72420fd7f986cd23f349a",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "php": ">=5.5.9"
+ "illuminate/bus": "^5.5 || ^6.0 || ^7.0 || ^8.0",
+ "illuminate/container": "^5.5 || ^6.0 || ^7.0 || ^8.0",
+ "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0",
+ "illuminate/pipeline": "^5.5 || ^6.0 || ^7.0 || ^8.0",
+ "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0",
+ "php": "^7.1.3 || ^8.0"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "phpunit/phpunit": "^4.8|^5.0"
+ "graham-campbell/analyzer": "^2.4 || ^3.0",
+ "graham-campbell/testbench": "^5.5",
+ "mockery/mockery": "^1.3.1",
+ "phpunit/phpunit": "^6.5 || ^7.5 || ^8.4 || ^9.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.2-dev"
- }
- },
"autoload": {
"psr-4": {
- "AltThree\\Badger\\": "src/"
+ "AltThree\\Bus\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -46,64 +46,53 @@
],
"authors": [
{
- "name": "James Brooks",
- "email": "james@alt-three.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- },
- {
- "name": "Joseph Cohen",
- "email": "joe@alt-three.com"
+ "name": "Alt Three",
+ "email": "support@alt-three.com"
}
],
- "description": "A Badge Generator For Laravel 5",
+ "description": "An improved command bus for Laravel",
"keywords": [
"Alt Three",
- "badge",
- "badger",
- "shield",
- "svg"
+ "bus",
+ "command",
+ "command bus",
+ "job"
],
- "time": "2017-01-01T12:36:28+00:00"
+ "support": {
+ "issues": "https://github.com/AltThree/Bus/issues",
+ "source": "https://github.com/AltThree/Bus/tree/4.5"
+ },
+ "abandoned": true,
+ "time": "2020-07-25T19:26:48+00:00"
},
{
- "name": "alt-three/bus",
- "version": "v2.1.0",
+ "name": "alt-three/validator",
+ "version": "v4.5.0",
"source": {
"type": "git",
- "url": "https://github.com/AltThree/Bus.git",
- "reference": "a71bafc3d56fd8e980ecd31447a75fd846494539"
+ "url": "https://github.com/AltThree/Validator.git",
+ "reference": "65ffc90cda5589052f0dac124d588946dfffd803"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AltThree/Bus/zipball/a71bafc3d56fd8e980ecd31447a75fd846494539",
- "reference": "a71bafc3d56fd8e980ecd31447a75fd846494539",
+ "url": "https://api.github.com/repos/AltThree/Validator/zipball/65ffc90cda5589052f0dac124d588946dfffd803",
+ "reference": "65ffc90cda5589052f0dac124d588946dfffd803",
"shasum": ""
},
"require": {
- "illuminate/bus": "5.3.*|5.4.*",
- "illuminate/container": "5.3.*|5.4.*",
- "illuminate/contracts": "5.3.*|5.4.*",
- "illuminate/pipeline": "5.3.*|5.4.*",
- "illuminate/support": "5.3.*|5.4.*",
- "php": ">=5.6.4"
+ "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0",
+ "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0",
+ "php": "^7.1.3 || ^8.0",
+ "psr/log": "^1.1"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^5.0"
+ "graham-campbell/analyzer": "^2.4 || ^3.0",
+ "phpunit/phpunit": "^6.5 || ^7.5 || ^8.4 || ^9.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.1-dev"
- }
- },
"autoload": {
"psr-4": {
- "AltThree\\Bus\\": "src/"
+ "AltThree\\Validator\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -112,67 +101,55 @@
],
"authors": [
{
- "name": "Taylor Otwell",
- "email": "taylorotwell@gmail.com"
- },
- {
- "name": "James Brooks",
- "email": "james@alt-three.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- },
- {
- "name": "Joseph Cohen",
- "email": "joe@alt-three.com"
+ "name": "Alt Three",
+ "email": "support@alt-three.com"
}
],
- "description": "An improved command bus for Laravel 5.2+",
+ "description": "A validation wrapper for Laravel",
"keywords": [
"Alt Three",
- "bus",
- "command",
- "command bus",
- "job"
+ "validation",
+ "validator"
],
- "time": "2017-01-01T12:37:11+00:00"
+ "support": {
+ "issues": "https://github.com/AltThree/Validator/issues",
+ "source": "https://github.com/AltThree/Validator/tree/4.5"
+ },
+ "abandoned": true,
+ "time": "2020-07-25T18:31:34+00:00"
},
{
- "name": "alt-three/emoji",
- "version": "v4.1.0",
+ "name": "asm89/stack-cors",
+ "version": "1.3.0",
"source": {
"type": "git",
- "url": "https://github.com/AltThree/Emoji.git",
- "reference": "3aa00f11d5a13f7fb43fc8f1e8d66c9788e626ec"
+ "url": "https://github.com/asm89/stack-cors.git",
+ "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AltThree/Emoji/zipball/3aa00f11d5a13f7fb43fc8f1e8d66c9788e626ec",
- "reference": "3aa00f11d5a13f7fb43fc8f1e8d66c9788e626ec",
+ "url": "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08",
+ "reference": "b9c31def6a83f84b4d4a40d35996d375755f0e08",
"shasum": ""
},
"require": {
- "guzzlehttp/guzzle": "^5.3|^6.0",
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "league/commonmark": "^0.15",
- "php": ">=5.5.9"
+ "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": {
- "graham-campbell/markdown": "^7.0",
- "graham-campbell/testbench": "^3.1",
- "phpunit/phpunit": "^4.8|^5.0"
+ "phpunit/phpunit": "^5.0 || ^4.8.10",
+ "squizlabs/php_codesniffer": "^2.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.1-dev"
+ "dev-master": "1.2-dev"
}
},
"autoload": {
"psr-4": {
- "AltThree\\Emoji\\": "src/"
+ "Asm89\\Stack\\": "src/Asm89/Stack/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -181,183 +158,212 @@
],
"authors": [
{
- "name": "James Brooks",
- "email": "james@alt-three.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- },
- {
- "name": "Joseph Cohen",
- "email": "joe@alt-three.com"
+ "name": "Alexander",
+ "email": "iam.asm89@gmail.com"
}
],
- "description": "An Emoji Parser For Laravel 5",
+ "description": "Cross-origin resource sharing library and stack middleware",
+ "homepage": "https://github.com/asm89/stack-cors",
"keywords": [
- "Alt Three",
- "emoji",
- "parser"
+ "cors",
+ "stack"
],
- "time": "2017-01-01T12:37:40+00:00"
+ "support": {
+ "issues": "https://github.com/asm89/stack-cors/issues",
+ "source": "https://github.com/asm89/stack-cors/tree/1.3.0"
+ },
+ "time": "2019-12-24T22:41:47+00:00"
},
{
- "name": "alt-three/logger",
- "version": "v1.3.0",
+ "name": "aws/aws-crt-php",
+ "version": "v1.2.3",
"source": {
"type": "git",
- "url": "https://github.com/AltThree/Logger.git",
- "reference": "2136162549b6ec99e3eae9f8cfff84e41caafe15"
+ "url": "https://github.com/awslabs/aws-crt-php.git",
+ "reference": "5545a4fa310aec39f54279fdacebcce33b3ff382"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AltThree/Logger/zipball/2136162549b6ec99e3eae9f8cfff84e41caafe15",
- "reference": "2136162549b6ec99e3eae9f8cfff84e41caafe15",
+ "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/5545a4fa310aec39f54279fdacebcce33b3ff382",
+ "reference": "5545a4fa310aec39f54279fdacebcce33b3ff382",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "php": ">=5.5.9",
- "psr/log": "^1.0"
+ "php": ">=5.5"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "phpunit/phpunit": "^4.8|^5.0"
+ "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5",
+ "yoast/phpunit-polyfills": "^1.0"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3-dev"
- }
+ "suggest": {
+ "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality."
},
+ "type": "library",
"autoload": {
- "psr-4": {
- "AltThree\\Logger\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "Apache-2.0"
],
"authors": [
{
- "name": "James Brooks",
- "email": "james@alt-three.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- },
- {
- "name": "Joseph Cohen",
- "email": "joe@alt-three.com"
+ "name": "AWS SDK Common Runtime Team",
+ "email": "aws-sdk-common-runtime@amazon.com"
}
],
- "description": "A Logger Wrapper For Laravel 5",
+ "description": "AWS Common Runtime for PHP",
+ "homepage": "https://github.com/awslabs/aws-crt-php",
"keywords": [
- "Alt Three",
- "logger",
- "logging"
+ "amazon",
+ "aws",
+ "crt",
+ "sdk"
],
- "time": "2017-01-01T12:36:39+00:00"
+ "support": {
+ "issues": "https://github.com/awslabs/aws-crt-php/issues",
+ "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.3"
+ },
+ "time": "2023-10-16T20:10:06+00:00"
},
{
- "name": "alt-three/throttle",
- "version": "v1.2.0",
+ "name": "aws/aws-sdk-php",
+ "version": "3.278.3",
"source": {
"type": "git",
- "url": "https://github.com/AltThree/Throttle.git",
- "reference": "bda58993b1818b943f1738661af692a639c4aa5e"
+ "url": "https://github.com/aws/aws-sdk-php.git",
+ "reference": "596534c0627d8b38597061341e99b460437d1a16"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AltThree/Throttle/zipball/bda58993b1818b943f1738661af692a639c4aa5e",
- "reference": "bda58993b1818b943f1738661af692a639c4aa5e",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/596534c0627d8b38597061341e99b460437d1a16",
+ "reference": "596534c0627d8b38597061341e99b460437d1a16",
"shasum": ""
},
"require": {
- "illuminate/cache": "5.2.*|5.3.*|5.4.*",
- "illuminate/http": "5.2.*|5.3.*|5.4.*",
- "php": ">=5.5.9"
+ "aws/aws-crt-php": "^1.0.4",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-simplexml": "*",
+ "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
+ "guzzlehttp/promises": "^1.4.0",
+ "guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
+ "mtdowling/jmespath.php": "^2.6",
+ "php": ">=5.5",
+ "psr/http-message": "^1.0"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "phpunit/phpunit": "^4.8|^5.0"
+ "andrewsville/php-token-reflection": "^1.4",
+ "aws/aws-php-sns-message-validator": "~1.0",
+ "behat/behat": "~3.0",
+ "composer/composer": "^1.10.22",
+ "dms/phpunit-arraysubset-asserts": "^0.4.0",
+ "doctrine/cache": "~1.4",
+ "ext-dom": "*",
+ "ext-openssl": "*",
+ "ext-pcntl": "*",
+ "ext-sockets": "*",
+ "nette/neon": "^2.3",
+ "paragonie/random_compat": ">= 2",
+ "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5",
+ "psr/cache": "^1.0",
+ "psr/simple-cache": "^1.0",
+ "sebastian/comparator": "^1.2.3 || ^4.0",
+ "yoast/phpunit-polyfills": "^1.0"
+ },
+ "suggest": {
+ "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
+ "doctrine/cache": "To use the DoctrineCacheAdapter",
+ "ext-curl": "To send requests using cURL",
+ "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
+ "ext-sockets": "To use client-side monitoring"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
+ "files": [
+ "src/functions.php"
+ ],
"psr-4": {
- "AltThree\\Throttle\\": "src/"
+ "Aws\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "Apache-2.0"
],
"authors": [
{
- "name": "James Brooks",
- "email": "james@alt-three.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- },
- {
- "name": "Joseph Cohen",
- "email": "joe@alt-three.com"
+ "name": "Amazon Web Services",
+ "homepage": "http://aws.amazon.com"
}
],
- "description": "A request rate limiter for Laravel 5.2+",
+ "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
+ "homepage": "http://aws.amazon.com/sdkforphp",
"keywords": [
- "Alt Three",
- "http",
- "rate limit",
- "rate limiter",
- "throttle"
+ "amazon",
+ "aws",
+ "cloud",
+ "dynamodb",
+ "ec2",
+ "glacier",
+ "s3",
+ "sdk"
],
- "time": "2017-01-01T12:37:29+00:00"
+ "support": {
+ "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
+ "issues": "https://github.com/aws/aws-sdk-php/issues",
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.278.3"
+ },
+ "time": "2023-08-15T18:07:55+00:00"
},
{
- "name": "alt-three/twitter",
- "version": "v1.0.1",
+ "name": "barryvdh/laravel-cors",
+ "version": "v0.11.4",
"source": {
"type": "git",
- "url": "https://github.com/AltThree/Twitter.git",
- "reference": "2a00a4d416cb97f2ad4e20bb5a31fe02b6a19aab"
+ "url": "https://github.com/fruitcake/laravel-cors.git",
+ "reference": "03492f1a3bc74a05de23f93b94ac7cc5c173eec9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AltThree/Twitter/zipball/2a00a4d416cb97f2ad4e20bb5a31fe02b6a19aab",
- "reference": "2a00a4d416cb97f2ad4e20bb5a31fe02b6a19aab",
+ "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/03492f1a3bc74a05de23f93b94ac7cc5c173eec9",
+ "reference": "03492f1a3bc74a05de23f93b94ac7cc5c173eec9",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "league/commonmark": "^0.15",
- "php": ">=5.5.9"
+ "asm89/stack-cors": "^1.2",
+ "illuminate/support": "^5.5|^6",
+ "php": ">=7",
+ "symfony/http-foundation": "^3.1|^4",
+ "symfony/http-kernel": "^3.1|^4"
},
"require-dev": {
- "graham-campbell/markdown": "^7.0",
- "graham-campbell/testbench": "^3.1",
- "phpunit/phpunit": "^4.8|^5.0"
+ "laravel/framework": "^5.5",
+ "orchestra/testbench": "3.3.x|3.4.x|3.5.x|3.6.x|3.7.x",
+ "phpunit/phpunit": "^4.8|^5.2|^7.0",
+ "squizlabs/php_codesniffer": "^2.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "0.11-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Barryvdh\\Cors\\ServiceProvider"
+ ]
}
},
"autoload": {
"psr-4": {
- "AltThree\\Twitter\\": "src/"
+ "Barryvdh\\Cors\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -366,59 +372,59 @@
],
"authors": [
{
- "name": "James Brooks",
- "email": "james@alt-three.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- },
- {
- "name": "Joseph Cohen",
- "email": "joe@alt-three.com"
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
}
],
- "description": "A Twitter handle parser for Laravel 5",
+ "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application",
"keywords": [
- "Alt Three",
- "markdown",
- "parser",
- "twitter"
+ "api",
+ "cors",
+ "crossdomain",
+ "laravel"
],
- "time": "2017-06-01T22:25:39+00:00"
+ "support": {
+ "issues": "https://github.com/fruitcake/laravel-cors/issues",
+ "source": "https://github.com/fruitcake/laravel-cors/tree/v0.11.4"
+ },
+ "abandoned": true,
+ "time": "2019-08-28T11:27:11+00:00"
},
{
- "name": "alt-three/validator",
- "version": "v2.0.0",
+ "name": "bugsnag/bugsnag",
+ "version": "v3.29.1",
"source": {
"type": "git",
- "url": "https://github.com/AltThree/Validator.git",
- "reference": "08754a80d86804f0b8df5c06d3354c4534a430ab"
+ "url": "https://github.com/bugsnag/bugsnag-php.git",
+ "reference": "7fff8512b237a57323f600975ada6376e2b912c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AltThree/Validator/zipball/08754a80d86804f0b8df5c06d3354c4534a430ab",
- "reference": "08754a80d86804f0b8df5c06d3354c4534a430ab",
+ "url": "https://api.github.com/repos/bugsnag/bugsnag-php/zipball/7fff8512b237a57323f600975ada6376e2b912c1",
+ "reference": "7fff8512b237a57323f600975ada6376e2b912c1",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "php": ">=5.5.9",
- "psr/log": "^1.0"
+ "composer/ca-bundle": "^1.0",
+ "guzzlehttp/guzzle": "^5.0|^6.0|^7.0",
+ "php": ">=5.5"
},
"require-dev": {
- "phpunit/phpunit": "^4.8|^5.0"
+ "guzzlehttp/psr7": "^1.3",
+ "mtdowling/burgomaster": "dev-master#72151eddf5f0cf101502b94bf5031f9c53501a04",
+ "php-mock/php-mock-phpunit": "^1.1|^2.1",
+ "phpunit/phpunit": "^4.8.36|^7.5.15|^9.3.10",
+ "sebastian/version": ">=1.0.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "3.20-dev"
}
},
"autoload": {
"psr-4": {
- "AltThree\\Validator\\": "src/"
+ "Bugsnag\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -427,151 +433,122 @@
],
"authors": [
{
- "name": "James Brooks",
- "email": "james@alt-three.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- },
- {
- "name": "Joseph Cohen",
- "email": "joe@alt-three.com"
+ "name": "James Smith",
+ "email": "notifiers@bugsnag.com",
+ "homepage": "https://bugsnag.com"
}
],
- "description": "A Validation Wrapper For Laravel 5",
+ "description": "Official Bugsnag notifier for PHP applications.",
+ "homepage": "https://github.com/bugsnag/bugsnag-php",
"keywords": [
- "Alt Three",
+ "bugsnag",
+ "errors",
+ "exceptions",
"logging",
- "validator"
+ "tracking"
],
- "time": "2017-06-01T22:25:25+00:00"
+ "support": {
+ "issues": "https://github.com/bugsnag/bugsnag-php/issues",
+ "source": "https://github.com/bugsnag/bugsnag-php/tree/v3.29.1"
+ },
+ "time": "2023-05-10T11:07:22+00:00"
},
{
- "name": "aws/aws-sdk-php",
- "version": "3.36.26",
+ "name": "bugsnag/bugsnag-laravel",
+ "version": "v2.26.0",
"source": {
"type": "git",
- "url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "96f2c1525d3fd17a0802329c309c76c01a78aa51"
+ "url": "https://github.com/bugsnag/bugsnag-laravel.git",
+ "reference": "333a912e38ead3e02724381093778b271168c8a3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/96f2c1525d3fd17a0802329c309c76c01a78aa51",
- "reference": "96f2c1525d3fd17a0802329c309c76c01a78aa51",
+ "url": "https://api.github.com/repos/bugsnag/bugsnag-laravel/zipball/333a912e38ead3e02724381093778b271168c8a3",
+ "reference": "333a912e38ead3e02724381093778b271168c8a3",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-simplexml": "*",
- "ext-spl": "*",
- "guzzlehttp/guzzle": "^5.3.1|^6.2.1",
- "guzzlehttp/promises": "~1.0",
- "guzzlehttp/psr7": "^1.4.1",
- "mtdowling/jmespath.php": "~2.2",
+ "bugsnag/bugsnag": "^3.29.0",
+ "bugsnag/bugsnag-psr-logger": "^1.4|^2.0",
+ "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0",
+ "illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0|^10.0",
+ "monolog/monolog": "^1.12|^2.0|^3.0",
"php": ">=5.5"
},
"require-dev": {
- "andrewsville/php-token-reflection": "^1.4",
- "aws/aws-php-sns-message-validator": "~1.0",
- "behat/behat": "~3.0",
- "doctrine/cache": "~1.4",
- "ext-dom": "*",
- "ext-openssl": "*",
- "nette/neon": "^2.3",
- "phpunit/phpunit": "^4.8.35|^5.4.0",
- "psr/cache": "^1.0"
- },
- "suggest": {
- "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
- "doctrine/cache": "To use the DoctrineCacheAdapter",
- "ext-curl": "To send requests using cURL",
- "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages"
+ "orchestra/testbench": "^3.1|^4.0|^5.0|^6.0|^7.0|^8.0",
+ "phpunit/phpunit": "^4.8.36|^6.3.1|^7.5.15|^8.3.5|^9.3.10"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "2.18-dev"
}
},
"autoload": {
"psr-4": {
- "Aws\\": "src/"
- },
- "files": [
- "src/functions.php"
- ]
+ "Bugsnag\\BugsnagLaravel\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "Apache-2.0"
+ "MIT"
],
"authors": [
{
- "name": "Amazon Web Services",
- "homepage": "http://aws.amazon.com"
+ "name": "James Smith",
+ "email": "notifiers@bugsnag.com"
}
],
- "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project",
- "homepage": "http://aws.amazon.com/sdkforphp",
+ "description": "Official Bugsnag notifier for Laravel applications.",
+ "homepage": "https://github.com/bugsnag/bugsnag-laravel",
"keywords": [
- "amazon",
- "aws",
- "cloud",
- "dynamodb",
- "ec2",
- "glacier",
- "s3",
- "sdk"
+ "bugsnag",
+ "errors",
+ "exceptions",
+ "laravel",
+ "logging",
+ "tracking"
],
- "time": "2017-10-12T19:45:50+00:00"
+ "support": {
+ "issues": "https://github.com/bugsnag/bugsnag-laravel/issues",
+ "source": "https://github.com/bugsnag/bugsnag-laravel/tree/v2.26.0"
+ },
+ "time": "2023-02-16T08:48:39+00:00"
},
{
- "name": "backup-manager/backup-manager",
- "version": "1.1.3",
+ "name": "bugsnag/bugsnag-psr-logger",
+ "version": "v1.4.5",
"source": {
"type": "git",
- "url": "https://github.com/backup-manager/backup-manager.git",
- "reference": "9e53714a993135f57fe2bff001203b6f75c2387c"
+ "url": "https://github.com/bugsnag/bugsnag-psr-logger.git",
+ "reference": "366430a94d983488d265c1068f47d78ebfbacd74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/backup-manager/backup-manager/zipball/9e53714a993135f57fe2bff001203b6f75c2387c",
- "reference": "9e53714a993135f57fe2bff001203b6f75c2387c",
+ "url": "https://api.github.com/repos/bugsnag/bugsnag-psr-logger/zipball/366430a94d983488d265c1068f47d78ebfbacd74",
+ "reference": "366430a94d983488d265c1068f47d78ebfbacd74",
"shasum": ""
},
"require": {
- "league/flysystem": "~1.0",
- "php": ">=5.5.9",
- "symfony/process": "~2.1|~3.0"
+ "bugsnag/bugsnag": "^3.10",
+ "php": ">=5.5",
+ "psr/log": "^1.0|^2.0"
},
"require-dev": {
- "aws/aws-sdk-php": "~3.0",
- "dropbox/dropbox-sdk": "~1.1",
- "league/flysystem-aws-s3-v3": "~1.0",
- "league/flysystem-dropbox": "~1.0",
- "league/flysystem-rackspace": "~1.0",
- "league/flysystem-sftp": "~1.0",
- "mockery/mockery": "~0.9",
- "phpspec/phpspec": "~2.1",
- "satooshi/php-coveralls": "~0.6"
- },
- "suggest": {
- "league/flysystem-aws-s3-v3": "AwsS3 and GoogleCS adapter support.",
- "league/flysystem-dropbox": "Dropbox adapter support.",
- "league/flysystem-rackspace": "Rackspace adapter support.",
- "league/flysystem-sftp": "Sftp adapter support."
+ "graham-campbell/testbench-core": "^1.1",
+ "mockery/mockery": "^0.9.4|^1.3.1",
+ "phpunit/phpunit": "^4.8.36|^7.5.15|^9.4.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "1.5-dev"
}
},
"autoload": {
"psr-4": {
- "BackupManager\\": "src/"
+ "Bugsnag\\PsrLogger\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -580,59 +557,65 @@
],
"authors": [
{
- "name": "Shawn McCool",
- "email": "shawn@heybigname.com",
- "homepage": "http://heybigname.com/"
- },
- {
- "name": "Mitchell van Wijngaarden",
- "email": "mitchell@kooding.nl",
- "homepage": "http://heybigname.com/"
+ "name": "James Smith",
+ "email": "notifiers@bugsnag.com",
+ "homepage": "https://bugsnag.com"
}
],
- "description": "A framework agnostic database backup manager with user-definable procedures and support for S3, Dropbox, FTP, SFTP, and more with drivers for popular frameworks.",
- "time": "2017-01-05T12:10:13+00:00"
+ "description": "Official Bugsnag PHP PSR Logger.",
+ "homepage": "https://github.com/bugsnag/bugsnag-psr",
+ "keywords": [
+ "bugsnag",
+ "errors",
+ "exceptions",
+ "logging",
+ "psr",
+ "tracking"
+ ],
+ "support": {
+ "issues": "https://github.com/bugsnag/bugsnag-psr-logger/issues",
+ "source": "https://github.com/bugsnag/bugsnag-psr-logger/tree/v1.4.5"
+ },
+ "time": "2021-12-13T09:52:57+00:00"
},
{
- "name": "backup-manager/laravel",
- "version": "dev-master",
+ "name": "cachethq/badger",
+ "version": "v2.0.0",
"source": {
"type": "git",
- "url": "https://github.com/backup-manager/laravel.git",
- "reference": "df53f9c9d8c6be5d7a2638f45d54b8fb7bc51e2b"
+ "url": "https://github.com/CachetHQ/Badger.git",
+ "reference": "9d7f9e8f8529d902f3a30ad120a403a7ba2da1e3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/backup-manager/laravel/zipball/df53f9c9d8c6be5d7a2638f45d54b8fb7bc51e2b",
- "reference": "df53f9c9d8c6be5d7a2638f45d54b8fb7bc51e2b",
+ "url": "https://api.github.com/repos/CachetHQ/Badger/zipball/9d7f9e8f8529d902f3a30ad120a403a7ba2da1e3",
+ "reference": "9d7f9e8f8529d902f3a30ad120a403a7ba2da1e3",
"shasum": ""
},
"require": {
- "backup-manager/backup-manager": "^1.0",
- "illuminate/console": "^4.0||^5.0",
- "illuminate/container": "^4.0||^5.0",
- "illuminate/support": "^4.0||^5.0",
- "php": ">=5.5.0",
- "symfony/process": "^2.0||^3.0"
+ "illuminate/contracts": "^5.5|^6.0",
+ "illuminate/support": "^5.5|^6.0",
+ "php": "^7.1.3"
},
"require-dev": {
- "mockery/mockery": "dev-master",
- "satooshi/php-coveralls": "~0.6"
+ "graham-campbell/analyzer": "^2.1",
+ "graham-campbell/testbench": "^5.1",
+ "phpunit/phpunit": "^6.5|^7.0|^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "2.0-dev"
},
"laravel": {
"providers": [
- "BackupManager\\Laravel\\Laravel55ServiceProvider"
+ "CachetHQ\\Badger\\BadgerServiceProvider"
]
}
},
"autoload": {
"psr-4": {
- "BackupManager\\Laravel\\": "src/"
+ "CachetHQ\\Badger\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -641,93 +624,132 @@
],
"authors": [
{
- "name": "Shawn McCool",
- "email": "shawn@heybigname.com",
- "homepage": "http://heybigname.com/"
- },
- {
- "name": "Mitchell van Wijngaarden",
- "email": "mitchell@kooding.nl",
- "homepage": "http://heybigname.com/"
+ "name": "Cachet",
+ "email": "support@cachethq.io"
}
],
- "description": "Database backup manager seamlessly integrated with Laravel 4 or 5 with user-definable procedures and support for S3, Dropbox, FTP, SFTP, and more.",
- "time": "2017-09-28T05:28:29+00:00"
+ "description": "A Badge Generator For Laravel 5 and 6.",
+ "keywords": [
+ "CachetHQ",
+ "badge",
+ "badger",
+ "cachet",
+ "shield",
+ "svg"
+ ],
+ "support": {
+ "issues": "https://github.com/CachetHQ/Badger/issues",
+ "source": "https://github.com/CachetHQ/Badger/tree/v2.0.0"
+ },
+ "time": "2019-11-18T20:06:20+00:00"
},
{
- "name": "bacon/bacon-qr-code",
- "version": "1.0.1",
+ "name": "cachethq/emoji",
+ "version": "v3.0.0",
"source": {
"type": "git",
- "url": "https://github.com/Bacon/BaconQrCode.git",
- "reference": "031a2ce68c5794064b49d11775b2daf45c96e21c"
+ "url": "https://github.com/CachetHQ/Emoji.git",
+ "reference": "45227616c9b8077deeefe5561035e219b4118233"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/031a2ce68c5794064b49d11775b2daf45c96e21c",
- "reference": "031a2ce68c5794064b49d11775b2daf45c96e21c",
+ "url": "https://api.github.com/repos/CachetHQ/Emoji/zipball/45227616c9b8077deeefe5561035e219b4118233",
+ "reference": "45227616c9b8077deeefe5561035e219b4118233",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "graham-campbell/guzzle-factory": "^3.0",
+ "illuminate/contracts": "^5.5|^6.0",
+ "illuminate/support": "^5.5|^6.0",
+ "league/commonmark": "^1.0",
+ "php": "^7.1.3"
},
- "suggest": {
- "ext-gd": "to generate QR code images"
+ "require-dev": {
+ "graham-campbell/analyzer": "^2.1",
+ "graham-campbell/markdown": "^11.0",
+ "graham-campbell/testbench": "^5.1",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^6.5|^7.0|^8.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ },
+ "laravel": {
+ "providers": [
+ "CachetHQ\\Emoji\\EmojiServiceProvider"
+ ]
+ }
+ },
"autoload": {
- "psr-0": {
- "BaconQrCode": "src/"
+ "psr-4": {
+ "CachetHQ\\Emoji\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-2-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Ben Scholzen 'DASPRiD'",
- "email": "mail@dasprids.de",
- "homepage": "http://www.dasprids.de",
- "role": "Developer"
+ "name": "Cachet",
+ "email": "support@cachethq.io"
}
],
- "description": "BaconQrCode is a QR code generator for PHP.",
- "homepage": "https://github.com/Bacon/BaconQrCode",
- "time": "2016-01-09T22:55:35+00:00"
+ "description": "An Emoji Parser For Laravel 5 and 6",
+ "keywords": [
+ "CachetHQ",
+ "cachet",
+ "emoji",
+ "parser"
+ ],
+ "support": {
+ "issues": "https://github.com/CachetHQ/Emoji/issues",
+ "source": "https://github.com/CachetHQ/Emoji/tree/v3.0.0"
+ },
+ "time": "2019-11-19T17:04:13+00:00"
},
{
- "name": "barryvdh/laravel-cors",
- "version": "v0.8.6",
+ "name": "cachethq/twitter",
+ "version": "v3.0.0",
"source": {
"type": "git",
- "url": "https://github.com/barryvdh/laravel-cors.git",
- "reference": "9bf14c1d5ebe46738e8c535e56e621f98779197d"
+ "url": "https://github.com/CachetHQ/Twitter.git",
+ "reference": "81216cbc3c1f1a32df70bfb73837f59a35a22b1c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-cors/zipball/9bf14c1d5ebe46738e8c535e56e621f98779197d",
- "reference": "9bf14c1d5ebe46738e8c535e56e621f98779197d",
+ "url": "https://api.github.com/repos/CachetHQ/Twitter/zipball/81216cbc3c1f1a32df70bfb73837f59a35a22b1c",
+ "reference": "81216cbc3c1f1a32df70bfb73837f59a35a22b1c",
"shasum": ""
},
"require": {
- "illuminate/support": "5.1.x|5.2.x|5.3.x|5.4.x",
- "php": ">=5.5.9",
- "symfony/http-foundation": "~2.7|~3.0",
- "symfony/http-kernel": "~2.7|~3.0"
+ "illuminate/contracts": "^5.5|^6.0",
+ "illuminate/support": "^5.5|^6.0",
+ "league/commonmark": "^1.0",
+ "php": "^7.1.3"
},
"require-dev": {
- "phpunit/phpunit": "^4.8|^5.2"
+ "graham-campbell/analyzer": "^2.1",
+ "graham-campbell/markdown": "^11.0",
+ "graham-campbell/testbench": "^5.1",
+ "phpunit/phpunit": "^6.5|^7.0|^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.8-dev"
+ "dev-master": "3.0-dev"
+ },
+ "laravel": {
+ "providers": [
+ "CachetHQ\\Twitter\\TwitterServiceProvider"
+ ]
}
},
"autoload": {
"psr-4": {
- "Barryvdh\\Cors\\": "src/"
+ "CachetHQ\\Twitter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -736,49 +758,50 @@
],
"authors": [
{
- "name": "Barry vd. Heuvel",
- "email": "barryvdh@gmail.com"
+ "name": "Cachet",
+ "email": "support@cachethq.io"
}
],
- "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application",
+ "description": "A Twitter handle parser for Laravel 5 and 6",
"keywords": [
- "api",
- "cors",
- "crossdomain",
- "laravel"
+ "CachetHQ",
+ "cachet",
+ "markdown",
+ "parser",
+ "twitter"
],
- "time": "2017-02-15T21:21:33+00:00"
+ "support": {
+ "issues": "https://github.com/CachetHQ/Twitter/issues",
+ "source": "https://github.com/CachetHQ/Twitter/tree/v3.0.0"
+ },
+ "time": "2019-11-19T17:04:54+00:00"
},
{
- "name": "christian-riesen/base32",
- "version": "1.3.1",
+ "name": "chillerlan/php-qrcode",
+ "version": "2.0.8",
"source": {
"type": "git",
- "url": "https://github.com/ChristianRiesen/base32.git",
- "reference": "0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa"
+ "url": "https://github.com/chillerlan/php-qrcode.git",
+ "reference": "bf0382aaf2f79fa41c2dcb0f216675f74d633fe7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa",
- "reference": "0a31e50c0fa9b1692d077c86ac188eecdcbaf7fa",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/bf0382aaf2f79fa41c2dcb0f216675f74d633fe7",
+ "reference": "bf0382aaf2f79fa41c2dcb0f216675f74d633fe7",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "chillerlan/php-traits": "^1.1",
+ "php": ">=7.0.3"
},
"require-dev": {
- "phpunit/phpunit": "4.*",
- "satooshi/php-coveralls": "0.*"
+ "chillerlan/php-authenticator": "^2.0",
+ "phpunit/phpunit": "^6.5"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
"autoload": {
"psr-4": {
- "Base32\\": "src/"
+ "chillerlan\\QRCode\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -787,86 +810,119 @@
],
"authors": [
{
- "name": "Christian Riesen",
- "email": "chris.riesen@gmail.com",
- "homepage": "http://christianriesen.com",
- "role": "Developer"
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
}
],
- "description": "Base32 encoder/decoder according to RFC 4648",
- "homepage": "https://github.com/ChristianRiesen/base32",
+ "description": "A QR code generator. PHP 7+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
"keywords": [
- "base32",
- "decode",
- "encode",
- "rfc4648"
+ "qr code"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-qrcode/issues",
+ "source": "https://github.com/chillerlan/php-qrcode/tree/v2.0.x"
+ },
+ "funding": [
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
],
- "time": "2016-05-05T11:49:03+00:00"
+ "time": "2020-04-12T07:38:35+00:00"
},
{
- "name": "dnoegel/php-xdg-base-dir",
- "version": "0.1",
+ "name": "chillerlan/php-traits",
+ "version": "1.1.13",
"source": {
"type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+ "url": "https://github.com/chillerlan/php-traits.git",
+ "reference": "264759946b6aaeb427346b749fc9639b790b8e7f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
- "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+ "url": "https://api.github.com/repos/chillerlan/php-traits/zipball/264759946b6aaeb427346b749fc9639b790b8e7f",
+ "reference": "264759946b6aaeb427346b749fc9639b790b8e7f",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": ">=7.0.3"
},
"require-dev": {
- "phpunit/phpunit": "@stable"
+ "phpunit/phpunit": "^6.5"
},
- "type": "project",
+ "type": "library",
"autoload": {
"psr-4": {
- "XdgBaseDir\\": "src/"
+ "chillerlan\\Traits\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "implementation of xdg base directory specification for php",
- "time": "2014-10-24T07:27:01+00:00"
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "description": "Some useful traits for PHP 7+",
+ "homepage": "https://github.com/chillerlan/php-traits",
+ "keywords": [
+ "PHP7",
+ "container",
+ "dotenv",
+ "helper",
+ "trait"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-traits/issues",
+ "source": "https://github.com/chillerlan/php-traits"
+ },
+ "abandoned": true,
+ "time": "2018-06-22T00:30:47+00:00"
},
{
- "name": "doctrine/annotations",
- "version": "v1.4.0",
+ "name": "composer/ca-bundle",
+ "version": "1.3.7",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/annotations.git",
- "reference": "54cacc9b81758b14e3ce750f205a393d52339e97"
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "76e46335014860eec1aa5a724799a00a2e47cc85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97",
- "reference": "54cacc9b81758b14e3ce750f205a393d52339e97",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/76e46335014860eec1aa5a724799a00a2e47cc85",
+ "reference": "76e46335014860eec1aa5a724799a00a2e47cc85",
"shasum": ""
},
"require": {
- "doctrine/lexer": "1.*",
- "php": "^5.6 || ^7.0"
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
- "doctrine/cache": "1.*",
- "phpunit/phpunit": "^5.7"
+ "phpstan/phpstan": "^0.12.55",
+ "psr/log": "^1.0",
+ "symfony/phpunit-bridge": "^4.2 || ^5",
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4.x-dev"
+ "dev-main": "1.x-dev"
}
},
"autoload": {
"psr-4": {
- "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
+ "Composer\\CaBundle\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -875,66 +931,112 @@
],
"authors": [
{
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+ "keywords": [
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/ca-bundle/issues",
+ "source": "https://github.com/composer/ca-bundle/tree/1.3.7"
+ },
+ "funding": [
{
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
+ "url": "https://packagist.com",
+ "type": "custom"
},
{
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
+ "url": "https://github.com/composer",
+ "type": "github"
},
{
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
}
],
- "description": "Docblock Annotations Parser",
- "homepage": "http://www.doctrine-project.org",
- "keywords": [
- "annotations",
- "docblock",
- "parser"
+ "time": "2023-08-30T09:31:38+00:00"
+ },
+ {
+ "name": "dnoegel/php-xdg-base-dir",
+ "version": "v0.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
+ "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+ "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "XdgBaseDir\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
],
- "time": "2017-02-24T16:22:25+00:00"
+ "description": "implementation of xdg base directory specification for php",
+ "support": {
+ "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
+ "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
+ },
+ "time": "2019-12-04T15:06:13+00:00"
},
{
"name": "doctrine/cache",
- "version": "v1.6.2",
+ "version": "1.13.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
- "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b"
+ "reference": "56cd022adb5514472cb144c087393c1821911d09"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b",
- "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/56cd022adb5514472cb144c087393c1821911d09",
+ "reference": "56cd022adb5514472cb144c087393c1821911d09",
"shasum": ""
},
"require": {
- "php": "~5.5|~7.0"
+ "php": "~7.1 || ^8.0"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
},
"require-dev": {
- "phpunit/phpunit": "~4.8|~5.0",
+ "alcaeus/mongo-php-adapter": "^1.1",
+ "cache/integration-tests": "dev-master",
+ "doctrine/coding-standard": "^9",
+ "mongodb/mongodb": "^1.1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"predis/predis": "~1.0",
- "satooshi/php-coveralls": "~0.6"
+ "psr/cache": "^1.0 || ^2.0 || ^3.0",
+ "symfony/cache": "^4.4 || ^5.4 || ^6",
+ "symfony/var-exporter": "^4.4 || ^5.4 || ^6"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.6.x-dev"
- }
+ "suggest": {
+ "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
},
+ "type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
@@ -945,6 +1047,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -953,10 +1059,6 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
@@ -966,44 +1068,83 @@
"email": "schmittjoh@gmail.com"
}
],
- "description": "Caching library offering an object-oriented API for many cache backends",
- "homepage": "http://www.doctrine-project.org",
+ "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
+ "homepage": "https://www.doctrine-project.org/projects/cache.html",
"keywords": [
+ "abstraction",
+ "apcu",
"cache",
- "caching"
+ "caching",
+ "couchdb",
+ "memcached",
+ "php",
+ "redis",
+ "xcache"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/cache/issues",
+ "source": "https://github.com/doctrine/cache/tree/1.13.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
+ "type": "tidelift"
+ }
],
- "time": "2017-07-22T12:49:21+00:00"
+ "time": "2022-05-20T20:06:54+00:00"
},
{
- "name": "doctrine/collections",
- "version": "v1.4.0",
+ "name": "doctrine/dbal",
+ "version": "v2.9.3",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/collections.git",
- "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba"
+ "url": "https://github.com/doctrine/dbal.git",
+ "reference": "7345cd59edfa2036eb0fa4264b77ae2576842035"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba",
- "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/7345cd59edfa2036eb0fa4264b77ae2576842035",
+ "reference": "7345cd59edfa2036eb0fa4264b77ae2576842035",
"shasum": ""
},
"require": {
- "php": "^5.6 || ^7.0"
+ "doctrine/cache": "^1.0",
+ "doctrine/event-manager": "^1.0",
+ "ext-pdo": "*",
+ "php": "^7.1"
},
"require-dev": {
- "doctrine/coding-standard": "~0.1@dev",
- "phpunit/phpunit": "^5.7"
+ "doctrine/coding-standard": "^5.0",
+ "jetbrains/phpstorm-stubs": "^2018.1.2",
+ "phpstan/phpstan": "^0.10.1",
+ "phpunit/phpunit": "^7.4",
+ "symfony/console": "^2.0.5|^3.0|^4.0",
+ "symfony/phpunit-bridge": "^3.4.5|^4.0.5"
},
+ "suggest": {
+ "symfony/console": "For helpful console commands such as SQL execution and import of files."
+ },
+ "bin": [
+ "bin/doctrine-dbal"
+ ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.3.x-dev"
+ "dev-master": "2.9.x-dev",
+ "dev-develop": "3.0.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Doctrine\\Common\\Collections\\": "lib/"
+ "psr-4": {
+ "Doctrine\\DBAL\\": "lib/Doctrine/DBAL"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1011,6 +1152,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -1019,62 +1164,107 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
}
],
- "description": "Collections Abstraction library",
- "homepage": "http://www.doctrine-project.org",
+ "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
+ "homepage": "https://www.doctrine-project.org/projects/dbal.html",
"keywords": [
- "array",
- "collections",
- "iterator"
+ "abstraction",
+ "database",
+ "dbal",
+ "mysql",
+ "persistence",
+ "pgsql",
+ "php",
+ "queryobject"
],
- "time": "2017-01-03T10:49:41+00:00"
+ "support": {
+ "issues": "https://github.com/doctrine/dbal/issues",
+ "source": "https://github.com/doctrine/dbal/tree/2.9"
+ },
+ "time": "2019-11-02T22:19:34+00:00"
},
{
- "name": "doctrine/common",
- "version": "v2.7.3",
+ "name": "doctrine/deprecations",
+ "version": "1.1.2",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/common.git",
- "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9"
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9",
- "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931",
+ "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931",
"shasum": ""
},
"require": {
- "doctrine/annotations": "1.*",
- "doctrine/cache": "1.*",
- "doctrine/collections": "1.*",
- "doctrine/inflector": "1.*",
- "doctrine/lexer": "1.*",
- "php": "~5.6|~7.0"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^5.4.6"
+ "doctrine/coding-standard": "^9",
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.7.x-dev"
+ "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/1.1.2"
+ },
+ "time": "2023-09-27T20:04:15+00:00"
+ },
+ {
+ "name": "doctrine/event-manager",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/event-manager.git",
+ "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520",
+ "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^0.5.3 || ^1",
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/common": "<2.9"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "~1.4.10 || ^1.8.8",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.24"
+ },
+ "type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\Common\\": "lib/Doctrine/Common"
+ "Doctrine\\Common\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1082,6 +1272,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -1090,10 +1284,6 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
@@ -1101,56 +1291,75 @@
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
+ },
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
}
],
- "description": "Common Library for Doctrine projects",
- "homepage": "http://www.doctrine-project.org",
+ "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
+ "homepage": "https://www.doctrine-project.org/projects/event-manager.html",
"keywords": [
- "annotations",
- "collections",
- "eventmanager",
- "persistence",
- "spl"
+ "event",
+ "event dispatcher",
+ "event manager",
+ "event system",
+ "events"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/event-manager/issues",
+ "source": "https://github.com/doctrine/event-manager/tree/1.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
+ "type": "tidelift"
+ }
],
- "time": "2017-07-22T08:35:12+00:00"
+ "time": "2022-10-12T20:51:15+00:00"
},
{
- "name": "doctrine/dbal",
- "version": "v2.5.13",
+ "name": "doctrine/inflector",
+ "version": "1.4.4",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/dbal.git",
- "reference": "729340d8d1eec8f01bff708e12e449a3415af873"
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873",
- "reference": "729340d8d1eec8f01bff708e12e449a3415af873",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9",
+ "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9",
"shasum": ""
},
"require": {
- "doctrine/common": ">=2.4,<2.8-dev",
- "php": ">=5.3.2"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "4.*",
- "symfony/console": "2.*||^3.0"
- },
- "suggest": {
- "symfony/console": "For helpful console commands such as SQL execution and import of files."
+ "doctrine/coding-standard": "^8.0",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
- "bin": [
- "bin/doctrine-dbal"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.5.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Doctrine\\DBAL\\": "lib/"
+ "psr-4": {
+ "Doctrine\\Inflector\\": "lib/Doctrine/Inflector",
+ "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1159,61 +1368,87 @@
],
"authors": [
{
- "name": "Roman Borschel",
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
}
],
- "description": "Database Abstraction Layer",
- "homepage": "http://www.doctrine-project.org",
+ "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.",
+ "homepage": "https://www.doctrine-project.org/projects/inflector.html",
"keywords": [
- "database",
- "dbal",
- "persistence",
- "queryobject"
+ "inflection",
+ "inflector",
+ "lowercase",
+ "manipulation",
+ "php",
+ "plural",
+ "singular",
+ "strings",
+ "uppercase",
+ "words"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/inflector/issues",
+ "source": "https://github.com/doctrine/inflector/tree/1.4.4"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector",
+ "type": "tidelift"
+ }
],
- "time": "2017-07-22T20:44:48+00:00"
+ "time": "2021-04-16T17:34:40+00:00"
},
{
- "name": "doctrine/inflector",
- "version": "v1.1.0",
+ "name": "doctrine/lexer",
+ "version": "1.2.3",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/inflector.git",
- "reference": "90b2128806bfde671b6952ab8bea493942c1fdae"
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae",
- "reference": "90b2128806bfde671b6952ab8bea493942c1fdae",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
+ "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "4.*"
+ "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.1.x-dev"
- }
- },
"autoload": {
- "psr-0": {
- "Doctrine\\Common\\Inflector\\": "lib/"
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1221,63 +1456,77 @@
"MIT"
],
"authors": [
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
- "description": "Common String Manipulations with regard to casing and singular/plural rules.",
- "homepage": "http://www.doctrine-project.org",
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
"keywords": [
- "inflection",
- "pluralize",
- "singularize",
- "string"
+ "annotations",
+ "docblock",
+ "lexer",
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/lexer/issues",
+ "source": "https://github.com/doctrine/lexer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+ "type": "tidelift"
+ }
],
- "time": "2015-11-06T14:35:42+00:00"
+ "time": "2022-02-28T11:07:21+00:00"
},
{
- "name": "doctrine/lexer",
- "version": "v1.0.1",
+ "name": "dragonmantank/cron-expression",
+ "version": "v2.3.1",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/lexer.git",
- "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
- "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2",
+ "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": "^7.0|^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "2.3-dev"
}
},
"autoload": {
- "psr-0": {
- "Doctrine\\Common\\Lexer\\": "lib/"
+ "psr-4": {
+ "Cron\\": "src/Cron/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1286,43 +1535,122 @@
],
"authors": [
{
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
},
{
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1"
+ },
+ "funding": [
{
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
+ "url": "https://github.com/dragonmantank",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-13T00:52:37+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
+ "version": "2.1.25",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1.0.1",
+ "php": ">=5.5",
+ "symfony/polyfill-intl-idn": "^1.10"
+ },
+ "require-dev": {
+ "dominicsayers/isemail": "^3.0.7",
+ "phpunit/phpunit": "^4.8.36|^7.5.15",
+ "satooshi/php-coveralls": "^1.0.1"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
}
],
- "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
- "homepage": "http://www.doctrine-project.org",
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
"keywords": [
- "lexer",
- "parser"
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
],
- "time": "2014-09-09T13:34:57+00:00"
+ "support": {
+ "issues": "https://github.com/egulias/EmailValidator/issues",
+ "source": "https://github.com/egulias/EmailValidator/tree/2.1.25"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/egulias",
+ "type": "github"
+ }
+ ],
+ "time": "2020-12-29T14:50:06+00:00"
},
{
"name": "erusev/parsedown",
- "version": "1.6.3",
+ "version": "1.7.4",
"source": {
"type": "git",
"url": "https://github.com/erusev/parsedown.git",
- "reference": "728952b90a333b5c6f77f06ea9422b94b585878d"
+ "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/erusev/parsedown/zipball/728952b90a333b5c6f77f06ea9422b94b585878d",
- "reference": "728952b90a333b5c6f77f06ea9422b94b585878d",
+ "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
+ "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
"shasum": ""
},
"require": {
+ "ext-mbstring": "*",
"php": ">=5.3.0"
},
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35"
+ },
"type": "library",
"autoload": {
"psr-0": {
@@ -1346,36 +1674,37 @@
"markdown",
"parser"
],
- "time": "2017-05-14T14:47:48+00:00"
+ "support": {
+ "issues": "https://github.com/erusev/parsedown/issues",
+ "source": "https://github.com/erusev/parsedown/tree/1.7.x"
+ },
+ "time": "2019-12-30T22:54:17+00:00"
},
{
"name": "fideloper/proxy",
- "version": "3.3.4",
+ "version": "4.4.2",
"source": {
"type": "git",
"url": "https://github.com/fideloper/TrustedProxy.git",
- "reference": "9cdf6f118af58d89764249bbcc7bb260c132924f"
+ "reference": "a751f2bc86dd8e6cfef12dc0cbdada82f5a18750"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/9cdf6f118af58d89764249bbcc7bb260c132924f",
- "reference": "9cdf6f118af58d89764249bbcc7bb260c132924f",
+ "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/a751f2bc86dd8e6cfef12dc0cbdada82f5a18750",
+ "reference": "a751f2bc86dd8e6cfef12dc0cbdada82f5a18750",
"shasum": ""
},
"require": {
- "illuminate/contracts": "~5.0",
+ "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0",
"php": ">=5.4.0"
},
"require-dev": {
- "illuminate/http": "~5.0",
- "mockery/mockery": "~0.9.3",
- "phpunit/phpunit": "^5.7"
+ "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^8.5.8|^9.3.3"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- },
"laravel": {
"providers": [
"Fideloper\\Proxy\\TrustedProxyServiceProvider"
@@ -1403,38 +1732,48 @@
"proxy",
"trusted proxy"
],
- "time": "2017-06-15T17:19:42+00:00"
+ "support": {
+ "issues": "https://github.com/fideloper/TrustedProxy/issues",
+ "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.2"
+ },
+ "time": "2022-02-09T13:33:34+00:00"
},
{
"name": "graham-campbell/binput",
- "version": "v3.6.0",
+ "version": "v6.2.0",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Laravel-Binput.git",
- "reference": "9b2873184bf77bb6ee478d79d0da21427b70164e"
+ "reference": "9c0df9c3d0481a495bdc0638ee67bc199d70e3b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Binput/zipball/9b2873184bf77bb6ee478d79d0da21427b70164e",
- "reference": "9b2873184bf77bb6ee478d79d0da21427b70164e",
+ "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Binput/zipball/9c0df9c3d0481a495bdc0638ee67bc199d70e3b4",
+ "reference": "9c0df9c3d0481a495bdc0638ee67bc199d70e3b4",
"shasum": ""
},
"require": {
- "graham-campbell/security": "^3.5",
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/http": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "php": ">=5.5.9"
+ "graham-campbell/security": "^6.2",
+ "illuminate/contracts": "^5.5|^6.0",
+ "illuminate/http": "^5.5|^6.0",
+ "illuminate/support": "^5.5|^6.0",
+ "php": "^7.1.3"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^4.8|^5.0"
+ "graham-campbell/analyzer": "^2.1",
+ "graham-campbell/testbench": "^5.2",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^6.5|^7.0|^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.6-dev"
+ "dev-master": "6.2-dev"
+ },
+ "laravel": {
+ "providers": [
+ "GrahamCampbell\\Binput\\BinputServiceProvider"
+ ]
}
},
"autoload": {
@@ -1466,42 +1805,59 @@
"laravel",
"security"
],
- "time": "2017-01-01T13:34:01+00:00"
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Laravel-Binput/issues",
+ "source": "https://github.com/GrahamCampbell/Laravel-Binput/tree/master"
+ },
+ "time": "2019-08-26T16:30:03+00:00"
},
{
- "name": "graham-campbell/core",
- "version": "v5.3.2",
+ "name": "graham-campbell/exceptions",
+ "version": "v11.3.0",
"source": {
"type": "git",
- "url": "https://github.com/GrahamCampbell/Laravel-Core.git",
- "reference": "27c0c9a0aa294dd06cfd2c6b15080c47f15bbb47"
+ "url": "https://github.com/GrahamCampbell/Laravel-Exceptions.git",
+ "reference": "c33548417cf9903a049c7311ab57352a7e720b33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Core/zipball/27c0c9a0aa294dd06cfd2c6b15080c47f15bbb47",
- "reference": "27c0c9a0aa294dd06cfd2c6b15080c47f15bbb47",
+ "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Exceptions/zipball/c33548417cf9903a049c7311ab57352a7e720b33",
+ "reference": "c33548417cf9903a049c7311ab57352a7e720b33",
"shasum": ""
},
"require": {
- "illuminate/console": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "php": ">=5.5.9"
+ "illuminate/contracts": "5.5.*|5.6.*|5.7.*|5.8.*",
+ "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*",
+ "php": "^7.1.3",
+ "psr/log": "^1.0",
+ "symfony/console": "^3.3|^4.0",
+ "symfony/debug": "^3.3|^4.0",
+ "symfony/http-foundation": "^3.3|^4.0"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^4.8|^5.0"
+ "filp/whoops": "^2.1.4",
+ "graham-campbell/analyzer": "^2.1",
+ "graham-campbell/testbench": "^5.2",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^6.5|^7.0|^8.0"
+ },
+ "suggest": {
+ "filp/whoops": "Enables use of the debug displayer."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.3-dev"
+ "dev-master": "11.3-dev"
+ },
+ "laravel": {
+ "providers": [
+ "GrahamCampbell\\Exceptions\\ExceptionsServiceProvider"
+ ]
}
},
"autoload": {
"psr-4": {
- "GrahamCampbell\\Core\\": "src/"
+ "GrahamCampbell\\Exceptions\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1514,62 +1870,57 @@
"email": "graham@alt-three.com"
}
],
- "description": "Core Provides Some Extra Functionality For Laravel 5",
+ "description": "Provides A Powerful Error Response System For Both Development And Production",
"keywords": [
"Graham Campbell",
"GrahamCampbell",
- "Laravel Core",
- "Laravel-Core",
- "base",
- "core",
+ "Laravel Exceptions",
+ "Laravel-Exceptions",
+ "error",
+ "errors",
+ "exception",
+ "exceptions",
"framework",
"laravel",
- "starter"
+ "whoops"
],
- "abandoned": true,
- "time": "2017-02-03T22:03:48+00:00"
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Laravel-Exceptions/issues",
+ "source": "https://github.com/GrahamCampbell/Laravel-Exceptions/tree/v11.3.0"
+ },
+ "time": "2019-06-03T06:57:27+00:00"
},
{
- "name": "graham-campbell/exceptions",
- "version": "v9.4.0",
+ "name": "graham-campbell/guzzle-factory",
+ "version": "v3.0.4",
"source": {
"type": "git",
- "url": "https://github.com/GrahamCampbell/Laravel-Exceptions.git",
- "reference": "d5eaa36169ad651b9f3d8f8d2ed218743b89013d"
+ "url": "https://github.com/GrahamCampbell/Guzzle-Factory.git",
+ "reference": "618cf7220b177c6d9939a36331df937739ffc596"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Exceptions/zipball/d5eaa36169ad651b9f3d8f8d2ed218743b89013d",
- "reference": "d5eaa36169ad651b9f3d8f8d2ed218743b89013d",
+ "url": "https://api.github.com/repos/GrahamCampbell/Guzzle-Factory/zipball/618cf7220b177c6d9939a36331df937739ffc596",
+ "reference": "618cf7220b177c6d9939a36331df937739ffc596",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "paragonie/random_compat": "^1.1|^2.0",
- "php": ">=5.5.9",
- "psr/log": "^1.0",
- "symfony/debug": "^2.7|^3.0",
- "symfony/http-foundation": "^2.7|^3.0"
+ "guzzlehttp/guzzle": "^6.2",
+ "php": "^7.0|^8.0"
},
"require-dev": {
- "filp/whoops": "^1.1|^2.0",
- "graham-campbell/testbench": "^3.1",
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^4.8|^5.0"
- },
- "suggest": {
- "filp/whoops": "Enables use of the debug displayer."
+ "graham-campbell/analyzer": "^2.4",
+ "phpunit/phpunit": "^6.5|^7.0|^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "9.4-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
"psr-4": {
- "GrahamCampbell\\Exceptions\\": "src/"
+ "GrahamCampbell\\GuzzleFactory\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1582,53 +1933,67 @@
"email": "graham@alt-three.com"
}
],
- "description": "Provides A Powerful Error Response System For Both Development And Production",
+ "description": "Provides A Simple Guzzle Factory With Good Defaults",
"keywords": [
"Graham Campbell",
"GrahamCampbell",
- "Laravel Exceptions",
- "Laravel-Exceptions",
- "error",
- "errors",
- "exception",
- "exceptions",
- "framework",
- "laravel",
- "whoops"
+ "Guzzle",
+ "Guzzle Factory",
+ "Guzzle-Factory",
+ "http"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Guzzle-Factory/issues",
+ "source": "https://github.com/GrahamCampbell/Guzzle-Factory/tree/3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/guzzle-factory",
+ "type": "tidelift"
+ }
],
- "time": "2017-09-10T16:49:31+00:00"
+ "time": "2020-05-02T14:45:48+00:00"
},
{
"name": "graham-campbell/markdown",
- "version": "v7.1.0",
+ "version": "v11.2.1",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Laravel-Markdown.git",
- "reference": "507783993b40f4b118f201e8a8bec9e908b3ab1d"
+ "reference": "7ead48c43098b562707a30650843d4279786b0d9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/507783993b40f4b118f201e8a8bec9e908b3ab1d",
- "reference": "507783993b40f4b118f201e8a8bec9e908b3ab1d",
+ "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/7ead48c43098b562707a30650843d4279786b0d9",
+ "reference": "7ead48c43098b562707a30650843d4279786b0d9",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/view": "5.1.*|5.2.*|5.3.*|5.4.*",
- "league/commonmark": "^0.15",
- "php": ">=5.5.9"
+ "illuminate/contracts": "^5.5|^6.0|^7.0",
+ "illuminate/support": "^5.5|^6.0|^7.0",
+ "illuminate/view": "^5.5|^6.0|^7.0",
+ "league/commonmark": "^1.3",
+ "php": "^7.1.3"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "league/commonmark-extras": "^0.1.2",
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^4.8|^5.0"
+ "graham-campbell/analyzer": "^2.4",
+ "graham-campbell/testbench": "^5.4",
+ "mockery/mockery": "^1.3.1",
+ "phpunit/phpunit": "^6.5|^7.0|^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "7.1-dev"
+ "dev-master": "11.2-dev"
+ },
+ "laravel": {
+ "providers": [
+ "GrahamCampbell\\Markdown\\MarkdownServiceProvider"
+ ]
}
},
"autoload": {
@@ -1646,7 +2011,7 @@
"email": "graham@alt-three.com"
}
],
- "description": "Markdown Is A CommonMark Wrapper For Laravel 5",
+ "description": "Markdown Is A CommonMark Wrapper For Laravel",
"keywords": [
"Graham Campbell",
"GrahamCampbell",
@@ -1658,35 +2023,60 @@
"laravel",
"markdown"
],
- "time": "2017-01-01T13:30:44+00:00"
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Laravel-Markdown/issues",
+ "source": "https://github.com/GrahamCampbell/Laravel-Markdown/tree/11.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/GrahamJCampbell",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/markdown",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-04-14T14:11:12+00:00"
},
{
"name": "graham-campbell/security",
- "version": "v3.7.0",
+ "version": "v6.2.0",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Laravel-Security.git",
- "reference": "48d92c56581142d776cf2c5a0185a4319c6eb063"
+ "reference": "93b3e09774987916f9a91071b2e53738180f2ba8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Security/zipball/48d92c56581142d776cf2c5a0185a4319c6eb063",
- "reference": "48d92c56581142d776cf2c5a0185a4319c6eb063",
+ "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Security/zipball/93b3e09774987916f9a91071b2e53738180f2ba8",
+ "reference": "93b3e09774987916f9a91071b2e53738180f2ba8",
"shasum": ""
},
"require": {
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "php": ">=5.5.9"
+ "graham-campbell/security-core": "^1.0",
+ "illuminate/contracts": "^5.5|^6.0",
+ "illuminate/support": "^5.5|^6.0",
+ "php": "^7.1.3"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "phpunit/phpunit": "^4.8|^5.0"
+ "graham-campbell/analyzer": "^2.1",
+ "graham-campbell/testbench": "^5.2",
+ "phpunit/phpunit": "^6.5|^7.0|^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.7-dev"
+ "dev-master": "6.2-dev"
+ },
+ "laravel": {
+ "providers": [
+ "GrahamCampbell\\Security\\SecurityServiceProvider"
+ ]
}
},
"autoload": {
@@ -1715,47 +2105,42 @@
"laravel",
"security"
],
- "time": "2017-01-01T13:20:49+00:00"
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Laravel-Security/issues",
+ "source": "https://github.com/GrahamCampbell/Laravel-Security/tree/master"
+ },
+ "time": "2019-08-26T16:30:00+00:00"
},
{
- "name": "guzzlehttp/guzzle",
- "version": "6.3.0",
+ "name": "graham-campbell/security-core",
+ "version": "v1.0.3",
"source": {
"type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
+ "url": "https://github.com/GrahamCampbell/Security-Core.git",
+ "reference": "3b14e58dba84b0238a3409818d6f67acc5c00bf9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
- "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
+ "url": "https://api.github.com/repos/GrahamCampbell/Security-Core/zipball/3b14e58dba84b0238a3409818d6f67acc5c00bf9",
+ "reference": "3b14e58dba84b0238a3409818d6f67acc5c00bf9",
"shasum": ""
},
"require": {
- "guzzlehttp/promises": "^1.0",
- "guzzlehttp/psr7": "^1.4",
- "php": ">=5.5"
+ "php": "^7.0"
},
"require-dev": {
- "ext-curl": "*",
- "phpunit/phpunit": "^4.0 || ^5.0",
- "psr/log": "^1.0"
- },
- "suggest": {
- "psr/log": "Required for using the Log middleware"
+ "graham-campbell/analyzer": "^2.4",
+ "phpunit/phpunit": "^6.5|^7.5|^8.4|^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "6.2-dev"
+ "dev-master": "1.0-dev"
}
},
"autoload": {
- "files": [
- "src/functions_include.php"
- ],
"psr-4": {
- "GuzzleHttp\\": "src/"
+ "GrahamCampbell\\SecurityCore\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1764,125 +2149,306 @@
],
"authors": [
{
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
+ "name": "Graham Campbell",
+ "email": "graham@alt-three.com"
}
],
- "description": "Guzzle is a PHP HTTP client library",
- "homepage": "http://guzzlephp.org/",
+ "description": "Security Core Is A Port Of The Security Class From Codeigniter 3 For General Use",
"keywords": [
- "client",
- "curl",
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Security Core",
+ "Security-Core",
+ "codeigniter",
"framework",
- "http",
- "http client",
- "rest",
- "web service"
+ "laravel",
+ "security"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Security-Core/issues",
+ "source": "https://github.com/GrahamCampbell/Security-Core/tree/v1.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/GrahamJCampbell",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/security-core",
+ "type": "tidelift"
+ }
],
- "time": "2017-06-22T18:50:49+00:00"
+ "time": "2020-04-13T13:30:49+00:00"
},
{
- "name": "guzzlehttp/promises",
- "version": "v1.3.1",
+ "name": "guzzlehttp/guzzle",
+ "version": "6.5.8",
"source": {
"type": "git",
- "url": "https://github.com/guzzle/promises.git",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981",
+ "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981",
"shasum": ""
},
"require": {
- "php": ">=5.5.0"
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.0",
+ "guzzlehttp/psr7": "^1.9",
+ "php": ">=5.5",
+ "symfony/polyfill-intl-idn": "^1.17"
},
"require-dev": {
- "phpunit/phpunit": "^4.0"
+ "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"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4-dev"
+ "dev-master": "6.5-dev"
}
},
"autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
"psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
+ "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",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/6.5.8"
+ },
+ "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": "2022-06-20T22:16:07+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "1.5.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e",
+ "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^4.4 || ^5.1"
+ },
+ "type": "library",
+ "autoload": {
"files": [
"src/functions_include.php"
- ]
+ ],
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "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": "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.3"
+ },
+ "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": "2023-05-21T12:31:43+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "1.4.2",
+ "version": "1.9.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
+ "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b",
+ "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
- "psr/http-message": "~1.0"
+ "psr/http-message": "~1.0",
+ "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "ext-zlib": "*",
+ "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
+ "type": "library",
"autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
- },
"files": [
"src/functions_include.php"
- ]
+ ],
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "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": "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"
}
],
@@ -1890,42 +2456,61 @@
"keywords": [
"http",
"message",
+ "psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
- "time": "2017-03-20T17:10:46+00:00"
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/1.9.1"
+ },
+ "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": "2023-04-17T16:00:37+00:00"
},
{
"name": "jakub-onderka/php-console-color",
- "version": "0.1",
+ "version": "v0.2",
"source": {
"type": "git",
"url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
- "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1"
+ "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1",
- "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1",
+ "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
+ "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": ">=5.4.0"
},
"require-dev": {
"jakub-onderka/php-code-style": "1.0",
- "jakub-onderka/php-parallel-lint": "0.*",
+ "jakub-onderka/php-parallel-lint": "1.0",
"jakub-onderka/php-var-dump-check": "0.*",
- "phpunit/phpunit": "3.7.*",
+ "phpunit/phpunit": "~4.3",
"squizlabs/php_codesniffer": "1.*"
},
"type": "library",
"autoload": {
- "psr-0": {
- "JakubOnderka\\PhpConsoleColor": "src/"
+ "psr-4": {
+ "JakubOnderka\\PhpConsoleColor\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1935,41 +2520,46 @@
"authors": [
{
"name": "Jakub Onderka",
- "email": "jakub.onderka@gmail.com",
- "homepage": "http://www.acci.cz"
+ "email": "jakub.onderka@gmail.com"
}
],
- "time": "2014-04-08T15:00:19+00:00"
+ "support": {
+ "issues": "https://github.com/JakubOnderka/PHP-Console-Color/issues",
+ "source": "https://github.com/JakubOnderka/PHP-Console-Color/tree/master"
+ },
+ "abandoned": "php-parallel-lint/php-console-color",
+ "time": "2018-09-29T17:23:10+00:00"
},
{
"name": "jakub-onderka/php-console-highlighter",
- "version": "v0.3.2",
+ "version": "v0.4",
"source": {
"type": "git",
"url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
- "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5"
+ "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5",
- "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5",
+ "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
+ "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
"shasum": ""
},
"require": {
- "jakub-onderka/php-console-color": "~0.1",
- "php": ">=5.3.0"
+ "ext-tokenizer": "*",
+ "jakub-onderka/php-console-color": "~0.2",
+ "php": ">=5.4.0"
},
"require-dev": {
"jakub-onderka/php-code-style": "~1.0",
- "jakub-onderka/php-parallel-lint": "~0.5",
+ "jakub-onderka/php-parallel-lint": "~1.0",
"jakub-onderka/php-var-dump-check": "~0.1",
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~1.5"
},
"type": "library",
"autoload": {
- "psr-0": {
- "JakubOnderka\\PhpConsoleHighlighter": "src/"
+ "psr-4": {
+ "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1983,30 +2573,36 @@
"homepage": "http://www.acci.cz/"
}
],
- "time": "2015-04-20T18:58:01+00:00"
+ "description": "Highlight PHP code in terminal",
+ "support": {
+ "issues": "https://github.com/JakubOnderka/PHP-Console-Highlighter/issues",
+ "source": "https://github.com/JakubOnderka/PHP-Console-Highlighter/tree/master"
+ },
+ "abandoned": "php-parallel-lint/php-console-highlighter",
+ "time": "2018-09-29T18:48:56+00:00"
},
{
"name": "jenssegers/date",
- "version": "v3.2.12",
+ "version": "v3.5.0",
"source": {
"type": "git",
"url": "https://github.com/jenssegers/date.git",
- "reference": "1db4d580d1d45085a48fd4a332697619b9a3851c"
+ "reference": "58393b0544fc2525b3fcd02aa4c989857107e05a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jenssegers/date/zipball/1db4d580d1d45085a48fd4a332697619b9a3851c",
- "reference": "1db4d580d1d45085a48fd4a332697619b9a3851c",
+ "url": "https://api.github.com/repos/jenssegers/date/zipball/58393b0544fc2525b3fcd02aa4c989857107e05a",
+ "reference": "58393b0544fc2525b3fcd02aa4c989857107e05a",
"shasum": ""
},
"require": {
- "nesbot/carbon": "^1.0",
- "php": ">=5.4",
- "symfony/translation": "^2.7|^3.0"
+ "nesbot/carbon": "^1.0|^2.0",
+ "php": ">=5.6",
+ "symfony/translation": "^2.7|^3.0|^4.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.0|^5.0|^6.0",
- "satooshi/php-coveralls": "^1.0"
+ "phpunit/phpunit": "^5.0|^6.0|^7.0",
+ "satooshi/php-coveralls": "^2.0"
},
"type": "library",
"extra": {
@@ -2048,45 +2644,119 @@
"time",
"translation"
],
- "time": "2017-06-30T11:51:03+00:00"
+ "support": {
+ "issues": "https://github.com/jenssegers/date/issues",
+ "source": "https://github.com/jenssegers/date/tree/master"
+ },
+ "time": "2019-03-10T08:50:58+00:00"
+ },
+ {
+ "name": "kylekatarnls/update-helper",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/kylekatarnls/update-helper.git",
+ "reference": "429be50660ed8a196e0798e5939760f168ec8ce9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/429be50660ed8a196e0798e5939760f168ec8ce9",
+ "reference": "429be50660ed8a196e0798e5939760f168ec8ce9",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.1.0 || ^2.0.0",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "codeclimate/php-test-reporter": "dev-master",
+ "composer/composer": "2.0.x-dev || ^2.0.0-dev",
+ "phpunit/phpunit": ">=4.8.35 <6.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "UpdateHelper\\ComposerPlugin"
+ },
+ "autoload": {
+ "psr-0": {
+ "UpdateHelper\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kyle",
+ "email": "kylekatarnls@gmail.com"
+ }
+ ],
+ "description": "Update helper",
+ "support": {
+ "issues": "https://github.com/kylekatarnls/update-helper/issues",
+ "source": "https://github.com/kylekatarnls/update-helper/tree/1.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kylekatarnls",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/Carbon",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-04-07T20:44:10+00:00"
},
{
"name": "laravel/framework",
- "version": "v5.4.36",
+ "version": "v5.7.29",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9"
+ "reference": "2555bf6ef6e6739e5f49f4a5d40f6264c57abd56"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/1062a22232071c3e8636487c86ec1ae75681bbf9",
- "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/2555bf6ef6e6739e5f49f4a5d40f6264c57abd56",
+ "reference": "2555bf6ef6e6739e5f49f4a5d40f6264c57abd56",
"shasum": ""
},
"require": {
- "doctrine/inflector": "~1.1",
- "erusev/parsedown": "~1.6",
+ "doctrine/inflector": "^1.1",
+ "dragonmantank/cron-expression": "^2.0",
+ "erusev/parsedown": "^1.7",
"ext-mbstring": "*",
"ext-openssl": "*",
- "league/flysystem": "~1.0",
- "monolog/monolog": "~1.11",
- "mtdowling/cron-expression": "~1.0",
- "nesbot/carbon": "~1.20",
- "paragonie/random_compat": "~1.4|~2.0",
- "php": ">=5.6.4",
- "ramsey/uuid": "~3.0",
- "swiftmailer/swiftmailer": "~5.4",
- "symfony/console": "~3.2",
- "symfony/debug": "~3.2",
- "symfony/finder": "~3.2",
- "symfony/http-foundation": "~3.2",
- "symfony/http-kernel": "~3.2",
- "symfony/process": "~3.2",
- "symfony/routing": "~3.2",
- "symfony/var-dumper": "~3.2",
- "tijsverkoyen/css-to-inline-styles": "~2.2",
- "vlucas/phpdotenv": "~2.2"
+ "laravel/nexmo-notification-channel": "^1.0",
+ "laravel/slack-notification-channel": "^1.0",
+ "league/flysystem": "^1.0.8",
+ "monolog/monolog": "^1.12",
+ "nesbot/carbon": "^1.26.3",
+ "opis/closure": "^3.1",
+ "php": "^7.1.3",
+ "psr/container": "^1.0",
+ "psr/simple-cache": "^1.0",
+ "ramsey/uuid": "^3.7",
+ "swiftmailer/swiftmailer": "^6.0",
+ "symfony/console": "^4.1",
+ "symfony/debug": "^4.1",
+ "symfony/finder": "^4.1",
+ "symfony/http-foundation": "^4.1",
+ "symfony/http-kernel": "^4.1",
+ "symfony/process": "^4.1",
+ "symfony/routing": "^4.1",
+ "symfony/var-dumper": "^4.1",
+ "tijsverkoyen/css-to-inline-styles": "^2.2.1",
+ "vlucas/phpdotenv": "^2.2"
+ },
+ "conflict": {
+ "tightenco/collect": "<5.5.33"
},
"replace": {
"illuminate/auth": "self.version",
@@ -2101,7 +2771,6 @@
"illuminate/database": "self.version",
"illuminate/encryption": "self.version",
"illuminate/events": "self.version",
- "illuminate/exception": "self.version",
"illuminate/filesystem": "self.version",
"illuminate/hashing": "self.version",
"illuminate/http": "self.version",
@@ -2117,39 +2786,50 @@
"illuminate/support": "self.version",
"illuminate/translation": "self.version",
"illuminate/validation": "self.version",
- "illuminate/view": "self.version",
- "tightenco/collect": "self.version"
+ "illuminate/view": "self.version"
},
"require-dev": {
- "aws/aws-sdk-php": "~3.0",
- "doctrine/dbal": "~2.5",
- "mockery/mockery": "~0.9.4",
- "pda/pheanstalk": "~3.0",
- "phpunit/phpunit": "~5.7",
- "predis/predis": "~1.0",
- "symfony/css-selector": "~3.2",
- "symfony/dom-crawler": "~3.2"
+ "aws/aws-sdk-php": "^3.0",
+ "doctrine/dbal": "^2.6",
+ "filp/whoops": "^2.1.4",
+ "guzzlehttp/guzzle": "^6.3",
+ "league/flysystem-cached-adapter": "^1.0",
+ "mockery/mockery": "^1.0",
+ "moontoast/math": "^1.1",
+ "orchestra/testbench-core": "3.7.*",
+ "pda/pheanstalk": "^3.0|^4.0",
+ "phpunit/phpunit": "^7.5",
+ "predis/predis": "^1.1.1",
+ "symfony/css-selector": "^4.1",
+ "symfony/dom-crawler": "^4.1",
+ "true/punycode": "^2.1"
},
"suggest": {
- "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).",
- "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).",
- "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).",
- "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).",
- "laravel/tinker": "Required to use the tinker console command (~1.0).",
- "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).",
- "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).",
- "nexmo/client": "Required to use the Nexmo transport (~1.0).",
- "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).",
- "predis/predis": "Required to use the redis cache and queue drivers (~1.0).",
- "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).",
- "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).",
- "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).",
- "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)."
+ "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).",
+ "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).",
+ "ext-pcntl": "Required to use all features of the queue worker.",
+ "ext-posix": "Required to use all features of the queue worker.",
+ "filp/whoops": "Required for friendly error pages in development (^2.1.4).",
+ "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).",
+ "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).",
+ "laravel/tinker": "Required to use the tinker console command (^1.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-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).",
+ "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
+ "moontoast/math": "Required to use ordered UUIDs (^1.1).",
+ "nexmo/client": "Required to use the Nexmo transport (^1.0).",
+ "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).",
+ "predis/predis": "Required to use the redis cache and queue drivers (^1.0).",
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).",
+ "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).",
+ "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).",
+ "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.4-dev"
+ "dev-master": "5.7-dev"
}
},
"autoload": {
@@ -2177,35 +2857,34 @@
"framework",
"laravel"
],
- "time": "2017-08-30T09:26:16+00:00"
+ "support": {
+ "issues": "https://github.com/laravel/framework/issues",
+ "source": "https://github.com/laravel/framework"
+ },
+ "time": "2020-04-14T14:16:19+00:00"
},
{
- "name": "laravel/tinker",
- "version": "v1.0.2",
+ "name": "laravel/nexmo-notification-channel",
+ "version": "v1.0.1",
"source": {
"type": "git",
- "url": "https://github.com/laravel/tinker.git",
- "reference": "203978fd67f118902acff95925847e70b72e3daf"
+ "url": "https://github.com/laravel/vonage-notification-channel.git",
+ "reference": "03edd42a55b306ff980c9950899d5a2b03260d48"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/203978fd67f118902acff95925847e70b72e3daf",
- "reference": "203978fd67f118902acff95925847e70b72e3daf",
+ "url": "https://api.github.com/repos/laravel/vonage-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48",
+ "reference": "03edd42a55b306ff980c9950899d5a2b03260d48",
"shasum": ""
},
"require": {
- "illuminate/console": "~5.1",
- "illuminate/contracts": "~5.1",
- "illuminate/support": "~5.1",
- "php": ">=5.5.9",
- "psy/psysh": "0.7.*|0.8.*",
- "symfony/var-dumper": "~3.0"
+ "nexmo/client": "^1.0",
+ "php": "^7.1.3"
},
"require-dev": {
- "phpunit/phpunit": "~4.0|~5.0"
- },
- "suggest": {
- "illuminate/database": "The Illuminate Database package (~5.1)."
+ "illuminate/notifications": "~5.7",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^7.0"
},
"type": "library",
"extra": {
@@ -2214,13 +2893,13 @@
},
"laravel": {
"providers": [
- "Laravel\\Tinker\\TinkerServiceProvider"
+ "Illuminate\\Notifications\\NexmoChannelServiceProvider"
]
}
},
"autoload": {
"psr-4": {
- "Laravel\\Tinker\\": "src/"
+ "Illuminate\\Notifications\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2233,119 +2912,265 @@
"email": "taylor@laravel.com"
}
],
- "description": "Powerful REPL for the Laravel framework.",
+ "description": "Nexmo Notification Channel for laravel.",
"keywords": [
- "REPL",
- "Tinker",
"laravel",
- "psysh"
+ "nexmo",
+ "notifications"
],
- "time": "2017-07-13T13:11:05+00:00"
+ "support": {
+ "issues": "https://github.com/laravel/vonage-notification-channel/issues",
+ "source": "https://github.com/laravel/vonage-notification-channel/tree/v1.0.1"
+ },
+ "abandoned": "laravel/vonage-notification-channel",
+ "time": "2018-12-04T12:57:08+00:00"
},
{
- "name": "lcobucci/jwt",
- "version": "3.2.2",
+ "name": "laravel/slack-notification-channel",
+ "version": "v1.0.3",
"source": {
"type": "git",
- "url": "https://github.com/lcobucci/jwt.git",
- "reference": "0b5930be73582369e10c4d4bb7a12bac927a203c"
+ "url": "https://github.com/laravel/slack-notification-channel.git",
+ "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/lcobucci/jwt/zipball/0b5930be73582369e10c4d4bb7a12bac927a203c",
- "reference": "0b5930be73582369e10c4d4bb7a12bac927a203c",
+ "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9",
+ "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9",
"shasum": ""
},
"require": {
- "ext-openssl": "*",
- "php": ">=5.5"
+ "guzzlehttp/guzzle": "^6.0",
+ "php": "^7.1.3"
},
"require-dev": {
- "mdanter/ecc": "~0.3.1",
- "mikey179/vfsstream": "~1.5",
- "phpmd/phpmd": "~2.2",
- "phpunit/php-invoker": "~1.1",
- "phpunit/phpunit": "~4.5",
- "squizlabs/php_codesniffer": "~2.3"
- },
- "suggest": {
- "mdanter/ecc": "Required to use Elliptic Curves based algorithms."
+ "illuminate/notifications": "~5.7",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.1-dev"
+ "dev-master": "1.0-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Illuminate\\Notifications\\SlackChannelServiceProvider"
+ ]
}
},
"autoload": {
"psr-4": {
- "Lcobucci\\JWT\\": "src"
+ "Illuminate\\Notifications\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Luís Otávio Cobucci Oblonczyk",
- "email": "lcobucci@gmail.com",
- "role": "Developer"
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
}
],
- "description": "A simple library to work with JSON Web Token and JSON Web Signature",
+ "description": "Slack Notification Channel for laravel.",
"keywords": [
- "JWS",
- "jwt"
+ "laravel",
+ "notifications",
+ "slack"
],
- "time": "2017-09-01T08:23:26+00:00"
+ "support": {
+ "issues": "https://github.com/laravel/slack-notification-channel/issues",
+ "source": "https://github.com/laravel/slack-notification-channel/tree/1.0"
+ },
+ "time": "2018-12-12T13:12:06+00:00"
},
{
- "name": "league/commonmark",
- "version": "0.15.6",
+ "name": "laravel/tinker",
+ "version": "v1.0.10",
"source": {
"type": "git",
- "url": "https://github.com/thephpleague/commonmark.git",
- "reference": "91742543c25fecedc84a4883d2919213e04a73b7"
+ "url": "https://github.com/laravel/tinker.git",
+ "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91742543c25fecedc84a4883d2919213e04a73b7",
- "reference": "91742543c25fecedc84a4883d2919213e04a73b7",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/ad571aacbac1539c30d480908f9d0c9614eaf1a7",
+ "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7",
"shasum": ""
},
"require": {
- "ext-mbstring": "*",
- "php": ">=5.4.8"
- },
- "replace": {
- "colinodell/commonmark-php": "*"
+ "illuminate/console": "~5.1|^6.0",
+ "illuminate/contracts": "~5.1|^6.0",
+ "illuminate/support": "~5.1|^6.0",
+ "php": ">=5.5.9",
+ "psy/psysh": "0.7.*|0.8.*|0.9.*",
+ "symfony/var-dumper": "~3.0|~4.0"
},
"require-dev": {
- "cebe/markdown": "~1.0",
- "erusev/parsedown": "~1.0",
- "jgm/commonmark": "0.28",
- "michelf/php-markdown": "~1.4",
- "mikehaertl/php-shellcommand": "~1.2.0",
- "phpunit/phpunit": "~4.3|~5.0",
- "scrutinizer/ocular": "~1.1",
- "symfony/finder": "~2.3|~3.0"
+ "phpunit/phpunit": "~4.0|~5.0"
},
"suggest": {
- "league/commonmark-extras": "Library of useful extensions including smart punctuation"
+ "illuminate/database": "The Illuminate Database package (~5.1)."
},
- "bin": [
- "bin/commonmark"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.16-dev"
- }
- },
+ "dev-master": "1.0-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Tinker\\TinkerServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Tinker\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Powerful REPL for the Laravel framework.",
+ "keywords": [
+ "REPL",
+ "Tinker",
+ "laravel",
+ "psysh"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/tinker/issues",
+ "source": "https://github.com/laravel/tinker/tree/v1.0.10"
+ },
+ "time": "2019-08-07T15:10:45+00:00"
+ },
+ {
+ "name": "lcobucci/jwt",
+ "version": "3.4.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/lcobucci/jwt.git",
+ "reference": "3ef8657a78278dfeae7707d51747251db4176240"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/lcobucci/jwt/zipball/3ef8657a78278dfeae7707d51747251db4176240",
+ "reference": "3ef8657a78278dfeae7707d51747251db4176240",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "mikey179/vfsstream": "~1.5",
+ "phpmd/phpmd": "~2.2",
+ "phpunit/php-invoker": "~1.1",
+ "phpunit/phpunit": "^5.7 || ^7.3",
+ "squizlabs/php_codesniffer": "~2.3"
+ },
+ "suggest": {
+ "lcobucci/clock": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "compat/class-aliases.php",
+ "compat/json-exception-polyfill.php",
+ "compat/lcobucci-clock-polyfill.php"
+ ],
+ "psr-4": {
+ "Lcobucci\\JWT\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Luís Otávio Cobucci Oblonczyk",
+ "email": "lcobucci@gmail.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A simple library to work with JSON Web Token and JSON Web Signature",
+ "keywords": [
+ "JWS",
+ "jwt"
+ ],
+ "support": {
+ "issues": "https://github.com/lcobucci/jwt/issues",
+ "source": "https://github.com/lcobucci/jwt/tree/3.4.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/lcobucci",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/lcobucci",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-09-28T19:18:28+00:00"
+ },
+ {
+ "name": "league/commonmark",
+ "version": "1.6.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/commonmark.git",
+ "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2b8185c13bc9578367a5bf901881d1c1b5bbd09b",
+ "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "scrutinizer/ocular": "1.7.*"
+ },
+ "require-dev": {
+ "cebe/markdown": "~1.0",
+ "commonmark/commonmark.js": "0.29.2",
+ "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"
+ },
+ "bin": [
+ "bin/commonmark"
+ ],
+ "type": "library",
"autoload": {
"psr-4": {
- "League\\CommonMark\\": "src/"
+ "League\\CommonMark\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2360,43 +3185,73 @@
"role": "Lead Developer"
}
],
- "description": "Markdown parser for PHP based on the CommonMark spec",
- "homepage": "https://github.com/thephpleague/commonmark",
+ "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)",
+ "homepage": "https://commonmark.thephpleague.com",
"keywords": [
"commonmark",
+ "flavored",
+ "gfm",
+ "github",
+ "github-flavored",
"markdown",
+ "md",
"parser"
],
- "time": "2017-08-08T11:47:33+00:00"
+ "support": {
+ "docs": "https://commonmark.thephpleague.com/",
+ "issues": "https://github.com/thephpleague/commonmark/issues",
+ "rss": "https://github.com/thephpleague/commonmark/releases.atom",
+ "source": "https://github.com/thephpleague/commonmark"
+ },
+ "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"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/league/commonmark",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-13T17:18:13+00:00"
},
{
"name": "league/flysystem",
- "version": "1.0.41",
+ "version": "1.0.70",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "f400aa98912c561ba625ea4065031b7a41e5a155"
+ "reference": "585824702f534f8d3cf7fab7225e8466cc4b7493"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f400aa98912c561ba625ea4065031b7a41e5a155",
- "reference": "f400aa98912c561ba625ea4065031b7a41e5a155",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/585824702f534f8d3cf7fab7225e8466cc4b7493",
+ "reference": "585824702f534f8d3cf7fab7225e8466cc4b7493",
"shasum": ""
},
"require": {
+ "ext-fileinfo": "*",
"php": ">=5.5.9"
},
"conflict": {
"league/flysystem-sftp": "<1.0.6"
},
"require-dev": {
- "ext-fileinfo": "*",
- "mockery/mockery": "~0.9",
- "phpspec/phpspec": "^2.2",
- "phpunit/phpunit": "~4.8"
+ "phpspec/phpspec": "^3.4 || ^4.0 || ^5.0 || ^6.0",
+ "phpunit/phpunit": "^5.7.26"
},
"suggest": {
"ext-fileinfo": "Required for MimeType",
+ "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",
@@ -2450,40 +3305,56 @@
"sftp",
"storage"
],
- "time": "2017-08-06T17:41:04+00:00"
+ "support": {
+ "issues": "https://github.com/thephpleague/flysystem/issues",
+ "source": "https://github.com/thephpleague/flysystem/tree/1.0.70"
+ },
+ "funding": [
+ {
+ "url": "https://offset.earth/frankdejonge",
+ "type": "other"
+ }
+ ],
+ "time": "2020-07-26T07:20:36+00:00"
},
{
"name": "mccool/laravel-auto-presenter",
- "version": "5.0.0",
+ "version": "7.7.0",
"source": {
"type": "git",
"url": "https://github.com/laravel-auto-presenter/laravel-auto-presenter.git",
- "reference": "150afe842a973e5c6ad1db9f6878d096d7c5cf1e"
+ "reference": "e139110a82c8a1573d4015b4f6d600d79e1d33e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel-auto-presenter/laravel-auto-presenter/zipball/150afe842a973e5c6ad1db9f6878d096d7c5cf1e",
- "reference": "150afe842a973e5c6ad1db9f6878d096d7c5cf1e",
+ "url": "https://api.github.com/repos/laravel-auto-presenter/laravel-auto-presenter/zipball/e139110a82c8a1573d4015b4f6d600d79e1d33e5",
+ "reference": "e139110a82c8a1573d4015b4f6d600d79e1d33e5",
"shasum": ""
},
"require": {
- "illuminate/container": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/events": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/pagination": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*",
- "illuminate/view": "5.1.*|5.2.*|5.3.*|5.4.*",
- "php": ">=5.5.9"
+ "illuminate/container": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
+ "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0",
+ "illuminate/events": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0",
+ "illuminate/pagination": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0",
+ "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0",
+ "illuminate/view": "^5.5 || ^6.0 || ^7.0 || ^8.0|| ^9.0",
+ "php": "^7.1.3 || ^8.0"
},
"require-dev": {
- "graham-campbell/testbench": "^3.1",
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^4.8|^5.0"
+ "graham-campbell/analyzer": "^2.4 || ^3.0",
+ "graham-campbell/testbench": "^5.4",
+ "mockery/mockery": "^1.3.1",
+ "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "7.7-dev"
+ },
+ "laravel": {
+ "providers": [
+ "McCool\\LaravelAutoPresenter\\AutoPresenterServiceProvider"
+ ]
}
},
"autoload": {
@@ -2498,11 +3369,13 @@
"authors": [
{
"name": "Shawn McCool",
- "email": "shawn@heybigname.com"
+ "email": "shawn@mccool.email",
+ "homepage": "https://github.com/ShawnMcCool"
},
{
"name": "Graham Campbell",
- "email": "graham@alt-three.com"
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
}
],
"description": "A system for auto-decorating models with presenter objects.",
@@ -2512,20 +3385,34 @@
"lpm",
"presenter"
],
- "time": "2017-01-01T12:52:59+00:00"
+ "support": {
+ "issues": "https://github.com/laravel-auto-presenter/laravel-auto-presenter/issues",
+ "source": "https://github.com/laravel-auto-presenter/laravel-auto-presenter/tree/7.7.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/mccool/laravel-auto-presenter",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-02-09T09:14:24+00:00"
},
{
"name": "monolog/monolog",
- "version": "1.23.0",
+ "version": "1.27.1",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
+ "reference": "904713c5929655dc9b97288b69cfeedad610c9a1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
- "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1",
+ "reference": "904713c5929655dc9b97288b69cfeedad610c9a1",
"shasum": ""
},
"require": {
@@ -2539,11 +3426,10 @@
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
- "jakub-onderka/php-parallel-lint": "0.9",
"php-amqplib/php-amqplib": "~2.4",
"php-console/php-console": "^3.1.3",
+ "phpstan/phpstan": "^0.12.59",
"phpunit/phpunit": "~4.5",
- "phpunit/phpunit-mock-objects": "2.3.0",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "^5.3|^6.0"
@@ -2562,11 +3448,6 @@
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
@@ -2590,71 +3471,43 @@
"logging",
"psr-3"
],
- "time": "2017-06-19T01:22:40+00:00"
- },
- {
- "name": "mtdowling/cron-expression",
- "version": "v1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/mtdowling/cron-expression.git",
- "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad",
- "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0|~5.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cron\\": "src/Cron/"
- }
+ "support": {
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/1.27.1"
},
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
+ "funding": [
{
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+ "type": "tidelift"
}
],
- "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
- "keywords": [
- "cron",
- "schedule"
- ],
- "time": "2017-01-23T04:29:33+00:00"
+ "time": "2022-06-09T08:53:42+00:00"
},
{
"name": "mtdowling/jmespath.php",
- "version": "2.4.0",
+ "version": "2.6.1",
"source": {
"type": "git",
"url": "https://github.com/jmespath/jmespath.php.git",
- "reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac"
+ "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/adcc9531682cf87dfda21e1fd5d0e7a41d292fac",
- "reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac",
+ "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb",
+ "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": "^5.4 || ^7.0 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.17"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "composer/xdebug-handler": "^1.4 || ^2.0",
+ "phpunit/phpunit": "^4.8.36 || ^7.5.15"
},
"bin": [
"bin/jp.php"
@@ -2662,16 +3515,16 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "2.6-dev"
}
},
"autoload": {
- "psr-4": {
- "JmesPath\\": "src/"
- },
"files": [
"src/JmesPath.php"
- ]
+ ],
+ "psr-4": {
+ "JmesPath\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2689,39 +3542,51 @@
"json",
"jsonpath"
],
- "time": "2016-12-03T22:08:25+00:00"
+ "support": {
+ "issues": "https://github.com/jmespath/jmespath.php/issues",
+ "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1"
+ },
+ "time": "2021-06-14T00:11:39+00:00"
},
{
"name": "nesbot/carbon",
- "version": "1.22.1",
+ "version": "1.39.1",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc"
+ "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc",
- "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4be0c005164249208ce1b5ca633cd57bdd42ff33",
+ "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33",
"shasum": ""
},
"require": {
- "php": ">=5.3.0",
- "symfony/translation": "~2.6 || ~3.0"
+ "kylekatarnls/update-helper": "^1.1",
+ "php": ">=5.3.9",
+ "symfony/translation": "~2.6 || ~3.0 || ~4.0"
},
"require-dev": {
+ "composer/composer": "^1.2",
"friendsofphp/php-cs-fixer": "~2",
- "phpunit/phpunit": "~4.0 || ~5.0"
+ "phpunit/phpunit": "^4.8.35 || ^5.7"
},
+ "bin": [
+ "bin/upgrade-carbon"
+ ],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "1.23-dev"
+ "update-helper": "Carbon\\Upgrade",
+ "laravel": {
+ "providers": [
+ "Carbon\\Laravel\\ServiceProvider"
+ ]
}
},
"autoload": {
"psr-4": {
- "Carbon\\": "src/Carbon/"
+ "": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2742,20 +3607,73 @@
"datetime",
"time"
],
- "time": "2017-01-16T07:55:07+00:00"
+ "support": {
+ "issues": "https://github.com/briannesbitt/Carbon/issues",
+ "source": "https://github.com/briannesbitt/Carbon"
+ },
+ "time": "2019-10-14T05:51:36+00:00"
},
{
"name": "nexmo/client",
- "version": "1.1.0",
+ "version": "1.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Nexmo/nexmo-php-complete.git",
+ "reference": "c6d11d953c8c5594590bb9ebaba9616e76948f93"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Nexmo/nexmo-php-complete/zipball/c6d11d953c8c5594590bb9ebaba9616e76948f93",
+ "reference": "c6d11d953c8c5594590bb9ebaba9616e76948f93",
+ "shasum": ""
+ },
+ "require": {
+ "nexmo/client-core": "^1.0",
+ "php": ">=5.6",
+ "php-http/guzzle6-adapter": "^1.0"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Tim Lytle",
+ "email": "tim@nexmo.com",
+ "homepage": "http://twitter.com/tjlytle",
+ "role": "Developer"
+ },
+ {
+ "name": "Michael Heap",
+ "email": "michael.heap@vonage.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Lorna Mitchell",
+ "email": "lorna.mitchell@vonage.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP Client for using Nexmo's API.",
+ "support": {
+ "email": "devrel@nexmo.com",
+ "source": "https://github.com/Nexmo/nexmo-php-complete/tree/1.9.1"
+ },
+ "time": "2019-11-26T15:25:11+00:00"
+ },
+ {
+ "name": "nexmo/client-core",
+ "version": "1.8.1",
"source": {
"type": "git",
"url": "https://github.com/Nexmo/nexmo-php.git",
- "reference": "a0bc2c2b48116eac897ebcd0bc463fc765863e34"
+ "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/a0bc2c2b48116eac897ebcd0bc463fc765863e34",
- "reference": "a0bc2c2b48116eac897ebcd0bc463fc765863e34",
+ "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4",
+ "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4",
"shasum": ""
},
"require": {
@@ -2763,12 +3681,13 @@
"php": ">=5.6",
"php-http/client-implementation": "^1.0",
"php-http/guzzle6-adapter": "^1.0",
- "zendframework/zend-diactoros": "^1.3"
+ "zendframework/zend-diactoros": "^1.8.4 || ^2.0"
},
"require-dev": {
- "estahn/phpunit-json-assertions": "@stable",
+ "estahn/phpunit-json-assertions": "^1.0.0",
"php-http/mock-client": "^0.3.0",
- "phpunit/phpunit": "^5.3"
+ "phpunit/phpunit": "^5.7",
+ "squizlabs/php_codesniffer": "^3.1"
},
"type": "library",
"autoload": {
@@ -2789,28 +3708,33 @@
}
],
"description": "PHP Client for using Nexmo's API.",
- "time": "2017-09-28T15:22:24+00:00"
+ "support": {
+ "email": "devrel@nexmo.com",
+ "source": "https://github.com/Nexmo/nexmo-php/tree/1.8.1"
+ },
+ "time": "2019-05-13T20:27:43+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v3.1.1",
+ "version": "v4.17.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "a1e8e1a30e1352f118feff1a8481066ddc2f234a"
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a1e8e1a30e1352f118feff1a8481066ddc2f234a",
- "reference": "a1e8e1a30e1352f118feff1a8481066ddc2f234a",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
- "php": ">=5.5"
+ "php": ">=7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.0|~5.0"
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
@@ -2818,7 +3742,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "4.9-dev"
}
},
"autoload": {
@@ -2840,36 +3764,46 @@
"parser",
"php"
],
- "time": "2017-09-02T17:10:46+00:00"
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
+ },
+ "time": "2023-08-13T19:53:39+00:00"
},
{
- "name": "paragonie/random_compat",
- "version": "v2.0.11",
+ "name": "opis/closure",
+ "version": "3.6.3",
"source": {
"type": "git",
- "url": "https://github.com/paragonie/random_compat.git",
- "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8"
+ "url": "https://github.com/opis/closure.git",
+ "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8",
- "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8",
+ "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad",
+ "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad",
"shasum": ""
},
"require": {
- "php": ">=5.2.0"
+ "php": "^5.4 || ^7.0 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "4.*|5.*"
- },
- "suggest": {
- "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ "jeremeamia/superclosure": "^2.0",
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.6.x-dev"
+ }
+ },
"autoload": {
"files": [
- "lib/random.php"
- ]
+ "functions.php"
+ ],
+ "psr-4": {
+ "Opis\\Closure\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2877,18 +3811,96 @@
],
"authors": [
{
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com",
- "homepage": "https://paragonie.com"
- }
+ "name": "Marius Sarca",
+ "email": "marius.sarca@gmail.com"
+ },
+ {
+ "name": "Sorin Sarca",
+ "email": "sarca_sorin@hotmail.com"
+ }
+ ],
+ "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
+ "homepage": "https://opis.io/closure",
+ "keywords": [
+ "anonymous functions",
+ "closure",
+ "function",
+ "serializable",
+ "serialization",
+ "serialize"
+ ],
+ "support": {
+ "issues": "https://github.com/opis/closure/issues",
+ "source": "https://github.com/opis/closure/tree/3.6.3"
+ },
+ "time": "2022-01-27T09:35:39+00:00"
+ },
+ {
+ "name": "paragonie/constant_time_encoding",
+ "version": "v2.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/constant_time_encoding.git",
+ "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
+ "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7|^8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
],
- "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
"keywords": [
- "csprng",
- "pseudorandom",
- "random"
+ "base16",
+ "base32",
+ "base32_decode",
+ "base32_encode",
+ "base64",
+ "base64_decode",
+ "base64_encode",
+ "bin2hex",
+ "encoding",
+ "hex",
+ "hex2bin",
+ "rfc4648"
],
- "time": "2017-09-27T21:40:39+00:00"
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "source": "https://github.com/paragonie/constant_time_encoding"
+ },
+ "time": "2022-06-14T06:56:20+00:00"
},
{
"name": "php-http/guzzle6-adapter",
@@ -2948,6 +3960,10 @@
"Guzzle",
"http"
],
+ "support": {
+ "issues": "https://github.com/php-http/guzzle6-adapter/issues",
+ "source": "https://github.com/php-http/guzzle6-adapter/tree/master"
+ },
"time": "2016-05-10T06:13:32+00:00"
},
{
@@ -3004,32 +4020,34 @@
"client",
"http"
],
+ "support": {
+ "issues": "https://github.com/php-http/httplug/issues",
+ "source": "https://github.com/php-http/httplug/tree/master"
+ },
"time": "2016-08-31T08:30:17+00:00"
},
{
"name": "php-http/promise",
- "version": "v1.0.0",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
- "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980"
+ "reference": "ef4905bfb492ff389eb7f12e26925a0f20073050"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980",
- "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980",
+ "url": "https://api.github.com/repos/php-http/promise/zipball/ef4905bfb492ff389eb7f12e26925a0f20073050",
+ "reference": "ef4905bfb492ff389eb7f12e26925a0f20073050",
"shasum": ""
},
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
"require-dev": {
- "henrikbjorn/phpspec-code-coverage": "^1.0",
- "phpspec/phpspec": "^2.4"
+ "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3",
+ "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
"autoload": {
"psr-4": {
"Http\\Promise\\": "src/"
@@ -3040,13 +4058,13 @@
"MIT"
],
"authors": [
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com"
- },
{
"name": "Joel Wurtz",
"email": "joel.wurtz@gmail.com"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
}
],
"description": "Promise used for asynchronous HTTP requests",
@@ -3054,45 +4072,51 @@
"keywords": [
"promise"
],
- "time": "2016-01-26T13:27:02+00:00"
+ "support": {
+ "issues": "https://github.com/php-http/promise/issues",
+ "source": "https://github.com/php-http/promise/tree/1.2.0"
+ },
+ "time": "2023-10-24T09:20:26+00:00"
},
{
"name": "pragmarx/google2fa",
- "version": "v0.7.1",
+ "version": "v5.0.0",
"source": {
"type": "git",
"url": "https://github.com/antonioribeiro/google2fa.git",
- "reference": "908678ba9b26cf8ecd7ddca6bfd86afc5b4874df"
+ "reference": "17c969c82f427dd916afe4be50bafc6299aef1b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/908678ba9b26cf8ecd7ddca6bfd86afc5b4874df",
- "reference": "908678ba9b26cf8ecd7ddca6bfd86afc5b4874df",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/17c969c82f427dd916afe4be50bafc6299aef1b4",
+ "reference": "17c969c82f427dd916afe4be50bafc6299aef1b4",
"shasum": ""
},
"require": {
- "christian-riesen/base32": "~1.0",
- "php": ">=5.3.7",
- "simplesoftwareio/simple-qrcode": "1.3.*"
+ "paragonie/constant_time_encoding": "~1.0|~2.0",
+ "paragonie/random_compat": ">=1",
+ "php": ">=5.4",
+ "symfony/polyfill-php56": "~1.2"
},
"require-dev": {
- "phpspec/phpspec": "~2.1"
+ "phpunit/phpunit": "~4|~5|~6"
},
"type": "library",
"extra": {
"component": "package",
- "frameworks": [
- "Laravel"
- ]
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
},
"autoload": {
"psr-4": {
- "PragmaRX\\Google2FA\\": "src/"
+ "PragmaRX\\Google2FA\\": "src/",
+ "PragmaRX\\Google2FA\\Tests\\": "tests/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
@@ -3103,25 +4127,29 @@
],
"description": "A One Time Password Authentication package, compatible with Google Authenticator.",
"keywords": [
+ "2fa",
"Authentication",
"Two Factor Authentication",
- "google2fa",
- "laravel"
+ "google2fa"
],
- "time": "2015-11-07T13:57:42+00:00"
+ "support": {
+ "issues": "https://github.com/antonioribeiro/google2fa/issues",
+ "source": "https://github.com/antonioribeiro/google2fa/tree/master"
+ },
+ "time": "2019-03-19T22:44:16+00:00"
},
{
"name": "predis/predis",
- "version": "v1.1.1",
+ "version": "v1.1.10",
"source": {
"type": "git",
- "url": "https://github.com/nrk/predis.git",
- "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1"
+ "url": "https://github.com/predis/predis.git",
+ "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1",
- "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1",
+ "url": "https://api.github.com/repos/predis/predis/zipball/a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e",
+ "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e",
"shasum": ""
},
"require": {
@@ -3148,17 +4176,141 @@
{
"name": "Daniele Alessandri",
"email": "suppakilla@gmail.com",
- "homepage": "http://clorophilla.net"
+ "homepage": "http://clorophilla.net",
+ "role": "Creator & Maintainer"
+ },
+ {
+ "name": "Till Krüss",
+ "homepage": "https://till.im",
+ "role": "Maintainer"
}
],
"description": "Flexible and feature-complete Redis client for PHP and HHVM",
- "homepage": "http://github.com/nrk/predis",
+ "homepage": "http://github.com/predis/predis",
"keywords": [
"nosql",
"predis",
"redis"
],
- "time": "2016-06-16T16:22:20+00:00"
+ "support": {
+ "issues": "https://github.com/predis/predis/issues",
+ "source": "https://github.com/predis/predis/tree/v1.1.10"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/tillkruss",
+ "type": "github"
+ }
+ ],
+ "time": "2022-01-05T17:46:08+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/master"
+ },
+ "time": "2017-02-14T16:28:37+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "e616d01114759c4c489f93b099585439f795fe35"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
+ "reference": "e616d01114759c4c489f93b099585439f795fe35",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/1.0.2"
+ },
+ "time": "2023-04-10T20:10:41+00:00"
},
{
"name": "psr/http-message",
@@ -3208,20 +4360,23 @@
"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.0.2",
+ "version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
- "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"shasum": ""
},
"require": {
@@ -3230,7 +4385,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.1.x-dev"
}
},
"autoload": {
@@ -3245,7 +4400,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
@@ -3255,35 +4410,90 @@
"psr",
"psr-3"
],
- "time": "2016-10-10T12:19:37+00:00"
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/1.1.4"
+ },
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/master"
+ },
+ "time": "2017-10-23T01:57:42+00:00"
},
{
"name": "psy/psysh",
- "version": "v0.8.11",
+ "version": "v0.9.12",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "b193cd020e8c6b66cea6457826ae005e94e6d2c0"
+ "reference": "90da7f37568aee36b116a030c5f99c915267edd4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/b193cd020e8c6b66cea6457826ae005e94e6d2c0",
- "reference": "b193cd020e8c6b66cea6457826ae005e94e6d2c0",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/90da7f37568aee36b116a030c5f99c915267edd4",
+ "reference": "90da7f37568aee36b116a030c5f99c915267edd4",
"shasum": ""
},
"require": {
- "dnoegel/php-xdg-base-dir": "0.1",
- "jakub-onderka/php-console-highlighter": "0.3.*",
- "nikic/php-parser": "~1.3|~2.0|~3.0",
- "php": ">=5.3.9",
- "symfony/console": "~2.3.10|^2.4.2|~3.0",
- "symfony/var-dumper": "~2.7|~3.0"
+ "dnoegel/php-xdg-base-dir": "0.1.*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
+ "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
+ "php": ">=5.4.0",
+ "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0|~5.0",
+ "symfony/var-dumper": "~2.7|~3.0|~4.0|~5.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~1.11",
- "hoa/console": "~3.16|~1.14",
- "phpunit/phpunit": "~4.4|~5.0",
- "symfony/finder": "~2.1|~3.0"
+ "bamarni/composer-bin-plugin": "^1.2",
+ "hoa/console": "~2.15|~3.16",
+ "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
},
"suggest": {
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
@@ -3298,15 +4508,15 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-develop": "0.8.x-dev"
+ "dev-develop": "0.9.x-dev"
}
},
"autoload": {
"files": [
- "src/Psy/functions.php"
+ "src/functions.php"
],
"psr-4": {
- "Psy\\": "src/Psy/"
+ "Psy\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -3328,58 +4538,108 @@
"interactive",
"shell"
],
- "time": "2017-07-29T19:30:02+00:00"
+ "support": {
+ "issues": "https://github.com/bobthecow/psysh/issues",
+ "source": "https://github.com/bobthecow/psysh/tree/v0.9.12"
+ },
+ "time": "2019-12-06T14:19:43+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "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"
},
{
"name": "ramsey/uuid",
- "version": "3.7.1",
+ "version": "3.9.7",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334"
+ "reference": "dc75aa439eb4c1b77f5379fd958b3dc0e6014178"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/45cffe822057a09e05f7bd09ec5fb88eeecd2334",
- "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/dc75aa439eb4c1b77f5379fd958b3dc0e6014178",
+ "reference": "dc75aa439eb4c1b77f5379fd958b3dc0e6014178",
"shasum": ""
},
"require": {
- "paragonie/random_compat": "^1.0|^2.0",
- "php": "^5.4 || ^7.0"
+ "ext-json": "*",
+ "paragonie/random_compat": "^1 | ^2 | ^9.99.99",
+ "php": "^5.4 | ^7.0 | ^8.0",
+ "symfony/polyfill-ctype": "^1.8"
},
"replace": {
"rhumsaa/uuid": "self.version"
},
"require-dev": {
- "apigen/apigen": "^4.1",
- "codeception/aspect-mock": "^1.0 | ^2.0",
- "doctrine/annotations": "~1.2.0",
- "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1",
- "ircmaxell/random-lib": "^1.1",
- "jakub-onderka/php-parallel-lint": "^0.9.0",
- "mockery/mockery": "^0.9.4",
+ "codeception/aspect-mock": "^1 | ^2",
+ "doctrine/annotations": "^1.2",
+ "goaop/framework": "1.0.0-alpha.2 | ^1 | >=2.1.0 <=2.3.2",
+ "mockery/mockery": "^0.9.11 | ^1",
"moontoast/math": "^1.1",
- "php-mock/php-mock-phpunit": "^0.3|^1.1",
- "phpunit/phpunit": "^4.7|>=5.0 <5.4",
- "satooshi/php-coveralls": "^0.6.1",
- "squizlabs/php_codesniffer": "^2.3"
+ "nikic/php-parser": "<=4.5.0",
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock-phpunit": "^0.3 | ^1.1 | ^2.6",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpunit/phpunit": ">=4.8.36 <9.0.0 | >=9.3.0",
+ "squizlabs/php_codesniffer": "^3.5",
+ "yoast/phpunit-polyfills": "^1.0"
},
"suggest": {
+ "ext-ctype": "Provides support for PHP Ctype functions",
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
+ "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator",
"ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
- "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
"ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
"autoload": {
+ "files": [
+ "src/functions.php"
+ ],
"psr-4": {
"Ramsey\\Uuid\\": "src/"
}
@@ -3389,6 +4649,11 @@
"MIT"
],
"authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ },
{
"name": "Marijn Huizendveld",
"email": "marijn.huizendveld@gmail.com"
@@ -3396,11 +4661,6 @@
{
"name": "Thibaud Fabre",
"email": "thibaud@aztech.io"
- },
- {
- "name": "Ben Ramsey",
- "email": "ben@benramsey.com",
- "homepage": "https://benramsey.com"
}
],
"description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
@@ -3410,135 +4670,56 @@
"identifier",
"uuid"
],
- "time": "2017-09-22T20:46:04+00:00"
+ "support": {
+ "issues": "https://github.com/ramsey/uuid/issues",
+ "rss": "https://github.com/ramsey/uuid/releases.atom",
+ "source": "https://github.com/ramsey/uuid",
+ "wiki": "https://github.com/ramsey/uuid/wiki"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ramsey",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-19T21:55:10+00:00"
},
{
- "name": "roumen/feed",
- "version": "v2.10.5",
+ "name": "swiftmailer/swiftmailer",
+ "version": "v6.3.0",
"source": {
"type": "git",
- "url": "https://github.com/Laravelium/laravel-feed.git",
- "reference": "ffbdb58f2ef41c7cb5d3bcd0aec2273e8eabc58b"
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Laravelium/laravel-feed/zipball/ffbdb58f2ef41c7cb5d3bcd0aec2273e8eabc58b",
- "reference": "ffbdb58f2ef41c7cb5d3bcd0aec2273e8eabc58b",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c",
+ "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c",
"shasum": ""
},
"require": {
- "illuminate/support": "^5.0",
- "php": ">=5.5.9"
- },
- "require-dev": {
- "orchestra/testbench": "^3.0",
- "phpunit/phpunit": "^4.8"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "Roumen\\Feed": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Roumen Damianoff",
- "email": "roumen@crimsson.com",
- "homepage": "https://roumen.it",
- "role": "Developer"
- }
- ],
- "description": "A simple feed generator for Laravel.",
- "homepage": "https://roumen.it/projects/laravel-feed",
- "keywords": [
- "atom",
- "feed",
- "generator",
- "laravel",
- "rss"
- ],
- "time": "2017-03-22T17:31:36+00:00"
- },
- {
- "name": "simplesoftwareio/simple-qrcode",
- "version": "1.3.3",
- "source": {
- "type": "git",
- "url": "https://github.com/SimpleSoftwareIO/simple-qrcode.git",
- "reference": "17c5e45c79c40f717d4bc08cf5e568f29ebf9333"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/SimpleSoftwareIO/simple-qrcode/zipball/17c5e45c79c40f717d4bc08cf5e568f29ebf9333",
- "reference": "17c5e45c79c40f717d4bc08cf5e568f29ebf9333",
- "shasum": ""
- },
- "require": {
- "bacon/bacon-qr-code": "1.0.*",
- "ext-gd": "*",
- "illuminate/support": ">=4.2.0",
- "php": ">=5.4.0"
+ "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": "0.9.*",
- "phpunit/phpunit": "4.7.*"
+ "mockery/mockery": "^1.0",
+ "symfony/phpunit-bridge": "^4.4|^5.4"
},
- "type": "library",
- "autoload": {
- "psr-0": {
- "SimpleSoftwareIO\\QrCode\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Simple Software LLC",
- "email": "support@simplesoftware.io"
- }
- ],
- "description": "Simple QrCode is a QR code generator made for Laravel.",
- "homepage": "http://www.simplesoftware.io",
- "keywords": [
- "Simple",
- "generator",
- "laravel",
- "qrcode",
- "wrapper"
- ],
- "time": "2016-01-31T02:09:25+00:00"
- },
- {
- "name": "swiftmailer/swiftmailer",
- "version": "v5.4.8",
- "source": {
- "type": "git",
- "url": "https://github.com/swiftmailer/swiftmailer.git",
- "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/9a06dc570a0367850280eefd3f1dc2da45aef517",
- "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "mockery/mockery": "~0.9.1",
- "symfony/phpunit-bridge": "~3.2"
+ "suggest": {
+ "ext-intl": "Needed to support internationalized email addresses"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.4-dev"
+ "dev-master": "6.2-dev"
}
},
"autoload": {
@@ -3560,56 +4741,76 @@
}
],
"description": "Swiftmailer, free feature-rich PHP mailer",
- "homepage": "http://swiftmailer.org",
+ "homepage": "https://swiftmailer.symfony.com",
"keywords": [
"email",
"mail",
"mailer"
],
- "time": "2017-05-01T15:54:03+00:00"
+ "support": {
+ "issues": "https://github.com/swiftmailer/swiftmailer/issues",
+ "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer",
+ "type": "tidelift"
+ }
+ ],
+ "abandoned": "symfony/mailer",
+ "time": "2021-10-18T15:26:12+00:00"
},
{
"name": "symfony/console",
- "version": "v3.3.10",
+ "version": "v4.4.49",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "116bc56e45a8e5572e51eb43ab58c769a352366c"
+ "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/116bc56e45a8e5572e51eb43ab58c769a352366c",
- "reference": "116bc56e45a8e5572e51eb43ab58c769a352366c",
+ "url": "https://api.github.com/repos/symfony/console/zipball/33fa45ffc81fdcc1ca368d4946da859c8cdb58d9",
+ "reference": "33fa45ffc81fdcc1ca368d4946da859c8cdb58d9",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
- "symfony/debug": "~2.8|~3.0",
- "symfony/polyfill-mbstring": "~1.0"
+ "php": ">=7.1.3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.8",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.1|^2"
},
"conflict": {
- "symfony/dependency-injection": "<3.3"
+ "psr/log": ">=3",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/event-dispatcher": "<4.3|>=5",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<3.3"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
},
"require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "~3.3",
- "symfony/dependency-injection": "~3.3",
- "symfony/event-dispatcher": "~2.8|~3.0",
- "symfony/filesystem": "~2.8|~3.0",
- "symfony/process": "~2.8|~3.0"
+ "psr/log": "^1|^2",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/event-dispatcher": "^4.3",
+ "symfony/lock": "^4.4|^5.0",
+ "symfony/process": "^3.4|^4.0|^5.0",
+ "symfony/var-dumper": "^4.3|^5.0"
},
"suggest": {
"psr/log": "For using the console logger",
"symfony/event-dispatcher": "",
- "symfony/filesystem": "",
+ "symfony/lock": "",
"symfony/process": ""
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Console\\": ""
@@ -3632,33 +4833,46 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Console Component",
+ "description": "Eases the creation of beautiful and testable command line interfaces",
"homepage": "https://symfony.com",
- "time": "2017-10-02T06:42:24+00:00"
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v4.4.49"
+ },
+ "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-11-05T17:10:16+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v3.3.10",
+ "version": "v4.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "07447650225ca9223bd5c97180fe7c8267f7d332"
+ "reference": "bd0a6737e48de45b4b0b7b6fc98c78404ddceaed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/07447650225ca9223bd5c97180fe7c8267f7d332",
- "reference": "07447650225ca9223bd5c97180fe7c8267f7d332",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/bd0a6737e48de45b4b0b7b6fc98c78404ddceaed",
+ "reference": "bd0a6737e48de45b4b0b7b6fc98c78404ddceaed",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8"
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\CssSelector\\": ""
@@ -3672,53 +4886,65 @@
"MIT"
],
"authors": [
- {
- "name": "Jean-François Simon",
- "email": "jeanfrancois.simon@sensiolabs.com"
- },
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony CssSelector Component",
+ "description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
- "time": "2017-10-02T06:42:24+00:00"
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v4.4.44"
+ },
+ "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-06-27T13:16:42+00:00"
},
{
"name": "symfony/debug",
- "version": "v3.3.10",
+ "version": "v4.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd"
+ "reference": "1a692492190773c5310bc7877cb590c04c2f05be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd",
- "reference": "eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/1a692492190773c5310bc7877cb590c04c2f05be",
+ "reference": "1a692492190773c5310bc7877cb590c04c2f05be",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
- "psr/log": "~1.0"
+ "php": ">=7.1.3",
+ "psr/log": "^1|^2|^3"
},
"conflict": {
- "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+ "symfony/http-kernel": "<3.4"
},
"require-dev": {
- "symfony/http-kernel": "~2.8|~3.0"
+ "symfony/http-kernel": "^3.4|^4.0|^5.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
"psr-4": {
"Symfony\\Component\\Debug\\": ""
@@ -3741,50 +4967,56 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Debug Component",
+ "description": "Provides tools to ease debugging PHP code",
"homepage": "https://symfony.com",
- "time": "2017-10-02T06:42:24+00:00"
+ "support": {
+ "source": "https://github.com/symfony/debug/tree/v4.4.44"
+ },
+ "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"
+ }
+ ],
+ "abandoned": "symfony/error-handler",
+ "time": "2022-07-28T16:29:46+00:00"
},
{
- "name": "symfony/event-dispatcher",
- "version": "v3.3.10",
+ "name": "symfony/error-handler",
+ "version": "v4.4.44",
"source": {
"type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "d7ba037e4b8221956ab1e221c73c9e27e05dd423"
+ "url": "https://github.com/symfony/error-handler.git",
+ "reference": "be731658121ef2d8be88f3a1ec938148a9237291"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d7ba037e4b8221956ab1e221c73c9e27e05dd423",
- "reference": "d7ba037e4b8221956ab1e221c73c9e27e05dd423",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/be731658121ef2d8be88f3a1ec938148a9237291",
+ "reference": "be731658121ef2d8be88f3a1ec938148a9237291",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8"
- },
- "conflict": {
- "symfony/dependency-injection": "<3.3"
+ "php": ">=7.1.3",
+ "psr/log": "^1|^2|^3",
+ "symfony/debug": "^4.4.5",
+ "symfony/var-dumper": "^4.4|^5.0"
},
"require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/dependency-injection": "~3.3",
- "symfony/expression-language": "~2.8|~3.0",
- "symfony/stopwatch": "~2.8|~3.0"
- },
- "suggest": {
- "symfony/dependency-injection": "",
- "symfony/http-kernel": ""
+ "symfony/http-kernel": "^4.4|^5.0",
+ "symfony/serializer": "^4.4|^5.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
"psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
+ "Symfony\\Component\\ErrorHandler\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -3804,36 +5036,71 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony EventDispatcher Component",
+ "description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
- "time": "2017-10-02T06:42:24+00:00"
+ "support": {
+ "source": "https://github.com/symfony/error-handler/tree/v4.4.44"
+ },
+ "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-07-28T16:29:46+00:00"
},
{
- "name": "symfony/finder",
- "version": "v3.3.10",
+ "name": "symfony/event-dispatcher",
+ "version": "v4.4.44",
"source": {
"type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "773e19a491d97926f236942484cb541560ce862d"
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/773e19a491d97926f236942484cb541560ce862d",
- "reference": "773e19a491d97926f236942484cb541560ce862d",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1e866e9e5c1b22168e0ce5f0b467f19bba61266a",
+ "reference": "1e866e9e5c1b22168e0ce5f0b467f19bba61266a",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8"
+ "php": ">=7.1.3",
+ "symfony/event-dispatcher-contracts": "^1.1",
+ "symfony/polyfill-php80": "^1.16"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
+ "conflict": {
+ "symfony/dependency-injection": "<3.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "1.1"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/error-handler": "~3.4|~4.4",
+ "symfony/expression-language": "^3.4|^4.0|^5.0",
+ "symfony/http-foundation": "^3.4|^4.0|^5.0",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/stopwatch": "^3.4|^4.0|^5.0"
},
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Component\\Finder\\": ""
+ "Symfony\\Component\\EventDispatcher\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -3853,44 +5120,62 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Finder Component",
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
- "time": "2017-10-02T06:42:24+00:00"
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.44"
+ },
+ "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-07-20T09:59:04+00:00"
},
{
- "name": "symfony/http-foundation",
- "version": "v3.3.10",
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v1.1.13",
"source": {
"type": "git",
- "url": "https://github.com/symfony/http-foundation.git",
- "reference": "22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8"
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8",
- "reference": "22cf9c2b1d9f67cc8e75ae7f4eaa60e4c1eff1f8",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/1d5cd762abaa6b2a4169d3e77610193a7157129e",
+ "reference": "1d5cd762abaa6b2a4169d3e77610193a7157129e",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
- "symfony/polyfill-mbstring": "~1.1"
+ "php": ">=7.1.3"
},
- "require-dev": {
- "symfony/expression-language": "~2.8|~3.0"
+ "suggest": {
+ "psr/event-dispatcher": "",
+ "symfony/event-dispatcher-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.3-dev"
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
- "Symfony\\Component\\HttpFoundation\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -3898,81 +5183,65 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony HttpFoundation Component",
+ "description": "Generic abstractions related to dispatching event",
"homepage": "https://symfony.com",
- "time": "2017-10-05T23:10:23+00:00"
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.13"
+ },
+ "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:41:36+00:00"
},
{
- "name": "symfony/http-kernel",
- "version": "v3.3.10",
+ "name": "symfony/finder",
+ "version": "v4.4.44",
"source": {
"type": "git",
- "url": "https://github.com/symfony/http-kernel.git",
- "reference": "654f047a78756964bf91b619554f956517394018"
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "66bd787edb5e42ff59d3523f623895af05043e4f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/654f047a78756964bf91b619554f956517394018",
- "reference": "654f047a78756964bf91b619554f956517394018",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/66bd787edb5e42ff59d3523f623895af05043e4f",
+ "reference": "66bd787edb5e42ff59d3523f623895af05043e4f",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
- "psr/log": "~1.0",
- "symfony/debug": "~2.8|~3.0",
- "symfony/event-dispatcher": "~2.8|~3.0",
- "symfony/http-foundation": "~3.3"
- },
- "conflict": {
- "symfony/config": "<2.8",
- "symfony/dependency-injection": "<3.3",
- "symfony/var-dumper": "<3.3",
- "twig/twig": "<1.34|<2.4,>=2"
- },
- "require-dev": {
- "psr/cache": "~1.0",
- "symfony/browser-kit": "~2.8|~3.0",
- "symfony/class-loader": "~2.8|~3.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/console": "~2.8|~3.0",
- "symfony/css-selector": "~2.8|~3.0",
- "symfony/dependency-injection": "~3.3",
- "symfony/dom-crawler": "~2.8|~3.0",
- "symfony/expression-language": "~2.8|~3.0",
- "symfony/finder": "~2.8|~3.0",
- "symfony/process": "~2.8|~3.0",
- "symfony/routing": "~2.8|~3.0",
- "symfony/stopwatch": "~2.8|~3.0",
- "symfony/templating": "~2.8|~3.0",
- "symfony/translation": "~2.8|~3.0",
- "symfony/var-dumper": "~3.3"
- },
- "suggest": {
- "symfony/browser-kit": "",
- "symfony/class-loader": "",
- "symfony/config": "",
- "symfony/console": "",
- "symfony/dependency-injection": "",
- "symfony/finder": "",
- "symfony/var-dumper": ""
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
"psr-4": {
- "Symfony\\Component\\HttpKernel\\": ""
+ "Symfony\\Component\\Finder\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -3992,43 +5261,61 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony HttpKernel Component",
+ "description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
- "time": "2017-10-05T23:40:19+00:00"
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v4.4.44"
+ },
+ "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-07-29T07:35:46+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.5.0",
+ "name": "symfony/http-client-contracts",
+ "version": "v1.1.13",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803"
+ "url": "https://github.com/symfony/http-client-contracts.git",
+ "reference": "59f37624a82635962f04c98f31aed122e539a89e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803",
- "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803",
+ "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/59f37624a82635962f04c98f31aed122e539a89e",
+ "reference": "59f37624a82635962f04c98f31aed122e539a89e",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=7.1.3"
},
"suggest": {
- "ext-mbstring": "For best performance"
+ "symfony/http-client-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.5-dev"
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
+ "Symfony\\Contracts\\HttpClient\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4044,43 +5331,63 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for the Mbstring extension",
+ "description": "Generic abstractions related to HTTP clients",
"homepage": "https://symfony.com",
"keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/http-client-contracts/tree/v1.1.13"
+ },
+ "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": "2017-06-14T15:44:48+00:00"
+ "time": "2022-04-11T14:52:04+00:00"
},
{
- "name": "symfony/process",
- "version": "v3.3.10",
+ "name": "symfony/http-foundation",
+ "version": "v4.4.49",
"source": {
"type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "fdf89e57a723a29baf536e288d6e232c059697b1"
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "191413c7b832c015bb38eae963f2e57498c3c173"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/fdf89e57a723a29baf536e288d6e232c059697b1",
- "reference": "fdf89e57a723a29baf536e288d6e232c059697b1",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/191413c7b832c015bb38eae963f2e57498c3c173",
+ "reference": "191413c7b832c015bb38eae963f2e57498c3c173",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8"
+ "php": ">=7.1.3",
+ "symfony/mime": "^4.3|^5.0",
+ "symfony/polyfill-mbstring": "~1.1",
+ "symfony/polyfill-php80": "^1.16"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
+ "require-dev": {
+ "predis/predis": "~1.0",
+ "symfony/expression-language": "^3.4|^4.0|^5.0"
},
+ "type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Component\\Process\\": ""
+ "Symfony\\Component\\HttpFoundation\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -4100,59 +5407,1128 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Process Component",
+ "description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
- "time": "2017-10-02T06:42:24+00:00"
- },
- {
- "name": "symfony/routing",
- "version": "v3.3.10",
+ "support": {
+ "source": "https://github.com/symfony/http-foundation/tree/v4.4.49"
+ },
+ "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-11-04T16:17:57+00:00"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v4.4.50",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "aa6df6c045f034aa13ac752fc234bb300b9488ef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aa6df6c045f034aa13ac752fc234bb300b9488ef",
+ "reference": "aa6df6c045f034aa13ac752fc234bb300b9488ef",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "psr/log": "^1|^2",
+ "symfony/error-handler": "^4.4",
+ "symfony/event-dispatcher": "^4.4",
+ "symfony/http-client-contracts": "^1.1|^2",
+ "symfony/http-foundation": "^4.4.30|^5.3.7",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-php73": "^1.9",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/browser-kit": "<4.3",
+ "symfony/config": "<3.4",
+ "symfony/console": ">=5",
+ "symfony/dependency-injection": "<4.3",
+ "symfony/translation": "<4.2",
+ "twig/twig": "<1.43|<2.13,>=2"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/cache": "^1.0|^2.0|^3.0",
+ "symfony/browser-kit": "^4.3|^5.0",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/console": "^3.4|^4.0",
+ "symfony/css-selector": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^4.3|^5.0",
+ "symfony/dom-crawler": "^3.4|^4.0|^5.0",
+ "symfony/expression-language": "^3.4|^4.0|^5.0",
+ "symfony/finder": "^3.4|^4.0|^5.0",
+ "symfony/process": "^3.4|^4.0|^5.0",
+ "symfony/routing": "^3.4|^4.0|^5.0",
+ "symfony/stopwatch": "^3.4|^4.0|^5.0",
+ "symfony/templating": "^3.4|^4.0|^5.0",
+ "symfony/translation": "^4.2|^5.0",
+ "symfony/translation-contracts": "^1.1|^2",
+ "twig/twig": "^1.43|^2.13|^3.0.4"
+ },
+ "suggest": {
+ "symfony/browser-kit": "",
+ "symfony/config": "",
+ "symfony/console": "",
+ "symfony/dependency-injection": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpKernel\\": ""
+ },
+ "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": "Provides a structured process for converting a Request into a Response",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/http-kernel/tree/v4.4.50"
+ },
+ "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": "2023-02-01T08:01:31+00:00"
+ },
+ {
+ "name": "symfony/mime",
+ "version": "v4.4.47",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/mime.git",
+ "reference": "0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d",
+ "reference": "0eaf33cd6d1b3eaa50e7bc48b17f6e45789df35d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-intl-idn": "^1.10",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "egulias/email-validator": "~3.0.0",
+ "symfony/mailer": "<4.4"
+ },
+ "require-dev": {
+ "egulias/email-validator": "^2.1.10|^3.1",
+ "symfony/dependency-injection": "^3.4|^4.1|^5.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Mime\\": ""
+ },
+ "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": "Allows manipulating MIME messages",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "mime",
+ "mime-type"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/mime/tree/v4.4.47"
+ },
+ "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-10-03T15:15:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.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": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-iconv",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-iconv.git",
+ "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6de50471469b8c9afc38164452ab2b6170ee71c1",
+ "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-iconv": "*"
+ },
+ "suggest": {
+ "ext-iconv": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Iconv\\": ""
+ }
+ },
+ "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"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-iconv/tree/v1.28.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": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-idn",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
+ "reference": "ecaafce9f77234a6a449d29e49267ba10499116d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d",
+ "reference": "ecaafce9f77234a6a449d29e49267ba10499116d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "symfony/polyfill-intl-normalizer": "^1.10",
+ "symfony/polyfill-php72": "^1.10"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Laurent Bassin",
+ "email": "laurent@bassin.info"
+ },
+ {
+ "name": "Trevor Rowbotham",
+ "email": "trevor.rowbotham@pm.me"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "idn",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.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": "2023-01-26T09:30:37+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.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": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php56",
+ "version": "v1.20.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php56.git",
+ "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
+ "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "metapackage",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.20-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "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 5.6+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.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": "2020-10-23T14:02:19+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
+ "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
+ },
+ "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.2+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.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": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5",
+ "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "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"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.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": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.28.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.28-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.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": "2023-01-26T09:26:14+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v4.4.44",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/5cee9cdc4f7805e2699d9fd66991a0e6df8252a2",
+ "reference": "5cee9cdc4f7805e2699d9fd66991a0e6df8252a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "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": "Executes commands in sub-processes",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v4.4.44"
+ },
+ "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-06-27T13:16:42+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v4.4.44",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "2e26fa63da029dab49bf9377b3b4f60a8fecb009"
+ "reference": "f7751fd8b60a07f3f349947a309b5bdfce22d6ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/2e26fa63da029dab49bf9377b3b4f60a8fecb009",
- "reference": "2e26fa63da029dab49bf9377b3b4f60a8fecb009",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/f7751fd8b60a07f3f349947a309b5bdfce22d6ae",
+ "reference": "f7751fd8b60a07f3f349947a309b5bdfce22d6ae",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8"
+ "php": ">=7.1.3",
+ "symfony/polyfill-php80": "^1.16"
},
"conflict": {
- "symfony/config": "<2.8",
- "symfony/dependency-injection": "<3.3",
- "symfony/yaml": "<3.3"
+ "symfony/config": "<4.2",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/yaml": "<3.4"
},
"require-dev": {
- "doctrine/annotations": "~1.0",
- "doctrine/common": "~2.2",
- "psr/log": "~1.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/dependency-injection": "~3.3",
- "symfony/expression-language": "~2.8|~3.0",
- "symfony/http-foundation": "~2.8|~3.0",
- "symfony/yaml": "~3.3"
+ "doctrine/annotations": "^1.10.4",
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^4.2|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/expression-language": "^3.4|^4.0|^5.0",
+ "symfony/http-foundation": "^3.4|^4.0|^5.0",
+ "symfony/yaml": "^3.4|^4.0|^5.0"
},
"suggest": {
"doctrine/annotations": "For using the annotation loader",
"symfony/config": "For using the all-in-one router or any loader",
- "symfony/dependency-injection": "For loading routes from a service",
"symfony/expression-language": "For using expression matching",
"symfony/http-foundation": "For using a Symfony Request object",
"symfony/yaml": "For using the YAML loader"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
"psr-4": {
- "Symfony\\Component\\Routing\\": ""
+ "Symfony\\Component\\Routing\\": ""
+ },
+ "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": "Maps an HTTP request to a set of configuration variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "router",
+ "routing",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/routing/tree/v4.4.44"
+ },
+ "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-07-20T09:59:04+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v1.1.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/afa00c500c2d6aea6e3b2f4862355f507bc5ebb4",
+ "reference": "afa00c500c2d6aea6e3b2f4862355f507bc5ebb4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "psr/container": "^1.0"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "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 writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v1.1.13"
+ },
+ "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-05-27T14:01:05+00:00"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v4.4.47",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/45036b1d53accc48fe9bab71ccd86d57eba0dd94",
+ "reference": "45036b1d53accc48fe9bab71ccd86d57eba0dd94",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/translation-contracts": "^1.1.6|^2"
+ },
+ "conflict": {
+ "symfony/config": "<3.4",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/http-kernel": "<4.4",
+ "symfony/yaml": "<3.4"
+ },
+ "provide": {
+ "symfony/translation-implementation": "1.0|2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/console": "^3.4|^4.0|^5.0",
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+ "symfony/finder": "~2.8|~3.0|~4.0|^5.0",
+ "symfony/http-kernel": "^4.4",
+ "symfony/intl": "^3.4|^4.0|^5.0",
+ "symfony/service-contracts": "^1.1.2|^2",
+ "symfony/yaml": "^3.4|^4.0|^5.0"
+ },
+ "suggest": {
+ "psr/log-implementation": "To use logging capability in translator",
+ "symfony/config": "",
+ "symfony/yaml": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -4172,62 +6548,61 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Routing Component",
+ "description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
- "keywords": [
- "router",
- "routing",
- "uri",
- "url"
+ "support": {
+ "source": "https://github.com/symfony/translation/tree/v4.4.47"
+ },
+ "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": "2017-10-02T07:25:00+00:00"
+ "time": "2022-10-03T15:15:11+00:00"
},
{
- "name": "symfony/translation",
- "version": "v3.3.10",
+ "name": "symfony/translation-contracts",
+ "version": "v1.1.13",
"source": {
"type": "git",
- "url": "https://github.com/symfony/translation.git",
- "reference": "409bf229cd552bf7e3faa8ab7e3980b07672073f"
+ "url": "https://github.com/symfony/translation-contracts.git",
+ "reference": "7462e5c4cb8b9cd152f992e8f10963b5641921f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/409bf229cd552bf7e3faa8ab7e3980b07672073f",
- "reference": "409bf229cd552bf7e3faa8ab7e3980b07672073f",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/7462e5c4cb8b9cd152f992e8f10963b5641921f6",
+ "reference": "7462e5c4cb8b9cd152f992e8f10963b5641921f6",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "conflict": {
- "symfony/config": "<2.8",
- "symfony/yaml": "<3.3"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "~2.8|~3.0",
- "symfony/intl": "^2.8.18|^3.2.5",
- "symfony/yaml": "~3.3"
+ "php": ">=7.1.3"
},
"suggest": {
- "psr/log": "To use logging capability in translator",
- "symfony/config": "",
- "symfony/yaml": ""
+ "symfony/translation-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.3-dev"
+ "dev-main": "1.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
- "Symfony\\Component\\Translation\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Symfony\\Contracts\\Translation\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4235,53 +6610,82 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony Translation Component",
+ "description": "Generic abstractions related to translation",
"homepage": "https://symfony.com",
- "time": "2017-10-02T06:42:24+00:00"
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/translation-contracts/tree/v1.1.13"
+ },
+ "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-06-27T13:16:42+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v3.3.10",
+ "version": "v4.4.47",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "03e3693a36701f1c581dd24a6d6eea2eba2113f6"
+ "reference": "1069c7a3fca74578022fab6f81643248d02f8e63"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/03e3693a36701f1c581dd24a6d6eea2eba2113f6",
- "reference": "03e3693a36701f1c581dd24a6d6eea2eba2113f6",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63",
+ "reference": "1069c7a3fca74578022fab6f81643248d02f8e63",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
- "symfony/polyfill-mbstring": "~1.0"
+ "php": ">=7.1.3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php72": "~1.5",
+ "symfony/polyfill-php80": "^1.16"
},
"conflict": {
- "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
+ "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
+ "symfony/console": "<3.4"
},
"require-dev": {
"ext-iconv": "*",
- "twig/twig": "~1.34|~2.4"
+ "symfony/console": "^3.4|^4.0|^5.0",
+ "symfony/process": "^4.4|^5.0",
+ "twig/twig": "^1.43|^2.13|^3.0.4"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
- "ext-symfony_debug": ""
+ "ext-intl": "To show region name in time zone dump",
+ "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
},
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
"files": [
"Resources/functions/dump.php"
@@ -4307,39 +6711,58 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony mechanism for exploring and dumping PHP variables",
+ "description": "Provides mechanisms for walking through any arbitrary PHP variable",
"homepage": "https://symfony.com",
"keywords": [
"debug",
"dump"
],
- "time": "2017-10-02T06:42:24+00:00"
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v4.4.47"
+ },
+ "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-10-03T15:15:11+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
- "version": "2.2.0",
+ "version": "2.2.6",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
- "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b"
+ "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b",
- "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c",
+ "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c",
"shasum": ""
},
"require": {
- "php": "^5.5 || ^7",
- "symfony/css-selector": "^2.7|~3.0"
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "php": "^5.5 || ^7.0 || ^8.0",
+ "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.8|5.1.*"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "2.2.x-dev"
}
},
"autoload": {
@@ -4360,34 +6783,40 @@
],
"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",
- "time": "2016-09-20T12:50:39+00:00"
+ "support": {
+ "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
+ "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6"
+ },
+ "time": "2023-01-03T09:29:04+00:00"
},
{
"name": "twig/twig",
- "version": "v1.35.0",
+ "version": "v2.15.5",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "daa657073e55b0a78cce8fdd22682fddecc6385f"
+ "reference": "fc02a6af3eeb97c4bf5650debc76c2eda85ac22e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/daa657073e55b0a78cce8fdd22682fddecc6385f",
- "reference": "daa657073e55b0a78cce8fdd22682fddecc6385f",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/fc02a6af3eeb97c4bf5650debc76c2eda85ac22e",
+ "reference": "fc02a6af3eeb97c4bf5650debc76c2eda85ac22e",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=7.1.3",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-mbstring": "^1.3",
+ "symfony/polyfill-php72": "^1.8"
},
"require-dev": {
"psr/container": "^1.0",
- "symfony/debug": "~2.7",
- "symfony/phpunit-bridge": "~3.3@dev"
+ "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.35-dev"
+ "dev-master": "2.15-dev"
}
},
"autoload": {
@@ -4409,48 +6838,68 @@
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
},
+ {
+ "name": "Twig Team",
+ "role": "Contributors"
+ },
{
"name": "Armin Ronacher",
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
- },
- {
- "name": "Twig Team",
- "homepage": "http://twig.sensiolabs.org/contributors",
- "role": "Contributors"
}
],
"description": "Twig, the flexible, fast, and secure template language for PHP",
- "homepage": "http://twig.sensiolabs.org",
+ "homepage": "https://twig.symfony.com",
"keywords": [
"templating"
],
- "time": "2017-09-27T18:06:46+00:00"
+ "support": {
+ "issues": "https://github.com/twigphp/Twig/issues",
+ "source": "https://github.com/twigphp/Twig/tree/v2.15.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-05-03T17:49:41+00:00"
},
{
"name": "vlucas/phpdotenv",
- "version": "v2.4.0",
+ "version": "v2.6.9",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c"
+ "reference": "2e93cc98e2e8e869f8d9cfa61bb3a99ba4fc4141"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
- "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2e93cc98e2e8e869f8d9cfa61bb3a99ba4fc4141",
+ "reference": "2e93cc98e2e8e869f8d9cfa61bb3a99ba4fc4141",
"shasum": ""
},
"require": {
- "php": ">=5.3.9"
+ "php": "^5.3.9 || ^7.0 || ^8.0",
+ "symfony/polyfill-ctype": "^1.17"
},
"require-dev": {
- "phpunit/phpunit": "^4.8 || ^5.0"
+ "ext-filter": "*",
+ "ext-pcre": "*",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator.",
+ "ext-pcre": "Required to use most of the library."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.4-dev"
+ "dev-master": "2.6-dev"
}
},
"autoload": {
@@ -4460,13 +6909,18 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause-Attribution"
+ "BSD-3-Clause"
],
"authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
{
"name": "Vance Lucas",
"email": "vance@vancelucas.com",
- "homepage": "http://www.vancelucas.com"
+ "homepage": "https://github.com/vlucas"
}
],
"description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
@@ -4475,94 +6929,126 @@
"env",
"environment"
],
- "time": "2016-09-01T10:05:43+00:00"
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v2.6.9"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-12-12T22:59:22+00:00"
},
{
"name": "zendframework/zend-diactoros",
- "version": "1.6.1",
+ "version": "2.2.1",
"source": {
"type": "git",
"url": "https://github.com/zendframework/zend-diactoros.git",
- "reference": "c8664b92a6d5bc229e48b0923486c097e45a7877"
+ "reference": "de5847b068362a88684a55b0dbb40d85986cfa52"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/c8664b92a6d5bc229e48b0923486c097e45a7877",
- "reference": "c8664b92a6d5bc229e48b0923486c097e45a7877",
+ "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/de5847b068362a88684a55b0dbb40d85986cfa52",
+ "reference": "de5847b068362a88684a55b0dbb40d85986cfa52",
"shasum": ""
},
"require": {
- "php": "^5.6 || ^7.0",
+ "php": "^7.1",
+ "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": {
+ "ext-curl": "*",
"ext-dom": "*",
"ext-libxml": "*",
- "phpunit/phpunit": "^5.7.16 || ^6.0.8",
- "zendframework/zend-coding-standard": "~1.0"
+ "http-interop/http-factory-tests": "^0.5.0",
+ "php-http/psr7-integration-tests": "dev-master",
+ "phpunit/phpunit": "^7.0.2",
+ "zendframework/zend-coding-standard": "~1.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6-dev",
- "dev-develop": "1.7-dev"
+ "dev-master": "2.1.x-dev",
+ "dev-develop": "2.2.x-dev",
+ "dev-release-1.8": "1.8.x-dev"
}
},
"autoload": {
+ "files": [
+ "src/functions/create_uploaded_file.php",
+ "src/functions/marshal_headers_from_sapi.php",
+ "src/functions/marshal_method_from_sapi.php",
+ "src/functions/marshal_protocol_version_from_sapi.php",
+ "src/functions/marshal_uri_from_sapi.php",
+ "src/functions/normalize_server.php",
+ "src/functions/normalize_uploaded_files.php",
+ "src/functions/parse_cookie_header.php"
+ ],
"psr-4": {
"Zend\\Diactoros\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-2-Clause"
+ "BSD-3-Clause"
],
"description": "PSR HTTP Message implementations",
- "homepage": "https://github.com/zendframework/zend-diactoros",
"keywords": [
"http",
"psr",
"psr-7"
],
- "time": "2017-10-12T15:24:51+00:00"
+ "support": {
+ "docs": "https://docs.zendframework.com/zend-diactoros/",
+ "forum": "https://discourse.zendframework.com/c/questions/exprssive",
+ "issues": "https://github.com/zendframework/zend-diactoros/issues",
+ "rss": "https://github.com/zendframework/zend-diactoros/releases.atom",
+ "slack": "https://zendframework-slack.herokuapp.com",
+ "source": "https://github.com/zendframework/zend-diactoros"
+ },
+ "abandoned": "laminas/laminas-diactoros",
+ "time": "2019-11-13T19:16:13+00:00"
}
],
"packages-dev": [
{
"name": "alt-three/testbench",
- "version": "v1.11.3",
+ "version": "5.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/AltThree/TestBench.git",
- "reference": "41921bae1a2228785fa54dc3b2fa206e484e5f79"
+ "reference": "246d9744ec1cde265e5ea40c7cd4eebd5577b601"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/AltThree/TestBench/zipball/41921bae1a2228785fa54dc3b2fa206e484e5f79",
- "reference": "41921bae1a2228785fa54dc3b2fa206e484e5f79",
+ "url": "https://api.github.com/repos/AltThree/TestBench/zipball/246d9744ec1cde265e5ea40c7cd4eebd5577b601",
+ "reference": "246d9744ec1cde265e5ea40c7cd4eebd5577b601",
"shasum": ""
},
"require": {
- "graham-campbell/testbench-core": "^1.1",
- "php": ">=5.5.9"
+ "graham-campbell/testbench-core": "^3.2",
+ "php": "^7.0 || ^8.0"
},
"require-dev": {
- "nikic/php-parser": "^2.0|^3.0",
- "phpunit/phpunit": "^4.8|^5.0"
+ "graham-campbell/analyzer": "^2.4 || ^3.0",
+ "phpunit/phpunit": "^6.5 || ^7.5 || ^8.4 || ^9.0"
},
"suggest": {
- "laravel/framework": "Enables the use of every trait.",
- "nikic/php-parser": "Enables the use of the static analyzer."
+ "laravel/framework": "Enables the use of most traits."
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.11-dev"
- }
- },
"autoload": {
"psr-4": {
"AltThree\\TestBench\\": "src/"
@@ -4574,50 +7060,70 @@
],
"authors": [
{
- "name": "James Brooks",
- "email": "james@alt-three.com"
- },
- {
- "name": "Graham Campbell",
- "email": "graham@alt-three.com"
- },
- {
- "name": "Joseph Cohen",
- "email": "joe@alt-three.com"
+ "name": "Alt Three",
+ "email": "support@alt-three.com"
}
],
- "description": "Provides Some Testing Traits For Apps",
+ "description": "Provides some testing traits for apps",
"keywords": [
"Alt Three",
"TestBench",
"app"
],
- "time": "2017-01-01T12:36:00+00:00"
+ "support": {
+ "issues": "https://github.com/AltThree/TestBench/issues",
+ "source": "https://github.com/AltThree/TestBench/tree/5.0"
+ },
+ "abandoned": true,
+ "time": "2021-03-29T11:19:11+00:00"
},
{
- "name": "brianium/habitat",
- "version": "v1.0.0",
+ "name": "barryvdh/laravel-debugbar",
+ "version": "v3.4.2",
"source": {
"type": "git",
- "url": "https://github.com/brianium/habitat.git",
- "reference": "d0979e3bb379cbc78ecb42b3ac171bc2b7e06d96"
+ "url": "https://github.com/barryvdh/laravel-debugbar.git",
+ "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brianium/habitat/zipball/d0979e3bb379cbc78ecb42b3ac171bc2b7e06d96",
- "reference": "d0979e3bb379cbc78ecb42b3ac171bc2b7e06d96",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/91ee8b3acf0d72a4937f4855bd245acbda9910ac",
+ "reference": "91ee8b3acf0d72a4937f4855bd245acbda9910ac",
"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"
+ },
"require-dev": {
- "monolog/monolog": ">=1.5.0",
- "phpunit/phpunit": ">=3.7.21"
+ "orchestra/testbench": "^3.5|^4.0|^5.0",
+ "phpunit/phpunit": "^6.0|^7.0|^8.5|^9.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Barryvdh\\Debugbar\\ServiceProvider"
+ ],
+ "aliases": {
+ "Debugbar": "Barryvdh\\Debugbar\\Facade"
+ }
+ }
+ },
"autoload": {
- "psr-0": {
- "Habitat": [
- "src/"
- ]
+ "files": [
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Barryvdh\\Debugbar\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4626,104 +7132,61 @@
],
"authors": [
{
- "name": "Brian",
- "email": "scaturrob@gmail.com",
- "homepage": "http://brianscaturro.com",
- "role": "Lead"
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
}
],
- "description": "A dependable php environment",
- "time": "2013-06-08T04:42:29+00:00"
- },
- {
- "name": "brianium/paratest",
- "version": "0.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/brianium/paratest.git",
- "reference": "13af4ef6631a2638498de9813bbe0f6493ba84ad"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/brianium/paratest/zipball/13af4ef6631a2638498de9813bbe0f6493ba84ad",
- "reference": "13af4ef6631a2638498de9813bbe0f6493ba84ad",
- "shasum": ""
- },
- "require": {
- "brianium/habitat": "1.0.0",
- "composer/semver": "~1.2",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-simplexml": "*",
- "php": ">=5.5.11",
- "phpunit/php-timer": ">=1.0.4",
- "phpunit/phpunit": "~5.0",
- "symfony/console": "~2.3|~3.0",
- "symfony/process": "~2.3|~3.0"
- },
- "bin": [
- "bin/paratest"
+ "description": "PHP Debugbar integration for Laravel",
+ "keywords": [
+ "debug",
+ "debugbar",
+ "laravel",
+ "profiler",
+ "webprofiler"
],
- "type": "library",
- "autoload": {
- "psr-0": {
- "ParaTest": [
- "src/"
- ]
- }
+ "support": {
+ "issues": "https://github.com/barryvdh/laravel-debugbar/issues",
+ "source": "https://github.com/barryvdh/laravel-debugbar/tree/3.4"
},
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
+ "funding": [
{
- "name": "Brian Scaturro",
- "email": "scaturrob@gmail.com",
- "homepage": "http://brianscaturro.com",
- "role": "Lead"
+ "url": "https://github.com/barryvdh",
+ "type": "github"
}
],
- "description": "Parallel testing for PHP",
- "homepage": "https://github.com/brianium/paratest",
- "keywords": [
- "concurrent",
- "parallel",
- "phpunit",
- "testing"
- ],
- "time": "2017-06-13T19:50:32+00:00"
+ "time": "2020-08-30T07:08:17+00:00"
},
{
- "name": "composer/semver",
- "version": "1.4.2",
+ "name": "doctrine/instantiator",
+ "version": "1.5.0",
"source": {
"type": "git",
- "url": "https://github.com/composer/semver.git",
- "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
- "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0"
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.5 || ^5.0.5",
- "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+ "doctrine/coding-standard": "^9 || ^11",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.30 || ^5.4"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
"autoload": {
"psr-4": {
- "Composer\\Semver\\": "src"
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4732,63 +7195,73 @@
],
"authors": [
{
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
},
{
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
},
{
- "name": "Rob Bast",
- "email": "rob.bast@gmail.com",
- "homepage": "http://robbast.nl"
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
}
],
- "description": "Semver library that offers utilities, version constraint parsing and validation.",
- "keywords": [
- "semantic",
- "semver",
- "validation",
- "versioning"
- ],
- "time": "2016-08-30T16:08:34+00:00"
+ "time": "2022-12-30T00:15:36+00:00"
},
{
- "name": "doctrine/instantiator",
- "version": "1.0.5",
+ "name": "filp/whoops",
+ "version": "2.15.3",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+ "url": "https://github.com/filp/whoops.git",
+ "reference": "c83e88a30524f9360b11f585f71e6b17313b7187"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
- "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187",
+ "reference": "c83e88a30524f9360b11f585f71e6b17313b7187",
"shasum": ""
},
"require": {
- "php": ">=5.3,<8.0-DEV"
+ "php": "^5.5.9 || ^7.0 || ^8.0",
+ "psr/log": "^1.0.1 || ^2.0 || ^3.0"
},
"require-dev": {
- "athletic/athletic": "~0.1.8",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~2.0"
+ "mockery/mockery": "^0.9 || ^1.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3",
+ "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
+ },
+ "suggest": {
+ "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
+ "whoops/soap": "Formats errors as SOAP responses"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "2.7-dev"
}
},
"autoload": {
"psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ "Whoops\\": "src/Whoops/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4797,55 +7270,64 @@
],
"authors": [
{
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "http://ocramius.github.com/"
+ "name": "Filipe Dobreira",
+ "homepage": "https://github.com/filp",
+ "role": "Developer"
}
],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://github.com/doctrine/instantiator",
+ "description": "php error handling for cool kids",
+ "homepage": "https://filp.github.io/whoops/",
"keywords": [
- "constructor",
- "instantiate"
+ "error",
+ "exception",
+ "handling",
+ "library",
+ "throwable",
+ "whoops"
],
- "time": "2015-06-14T21:17:01+00:00"
+ "support": {
+ "issues": "https://github.com/filp/whoops/issues",
+ "source": "https://github.com/filp/whoops/tree/2.15.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/denis-sokolov",
+ "type": "github"
+ }
+ ],
+ "time": "2023-07-13T12:00:00+00:00"
},
{
- "name": "filp/whoops",
- "version": "2.1.10",
+ "name": "fzaninotto/faker",
+ "version": "v1.9.2",
"source": {
"type": "git",
- "url": "https://github.com/filp/whoops.git",
- "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec"
+ "url": "https://github.com/fzaninotto/Faker.git",
+ "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec",
- "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec",
+ "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e",
+ "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e",
"shasum": ""
},
"require": {
- "php": "^5.5.9 || ^7.0",
- "psr/log": "^1.0.1"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "mockery/mockery": "0.9.*",
- "phpunit/phpunit": "^4.8 || ^5.0",
- "symfony/var-dumper": "^2.6 || ^3.0"
- },
- "suggest": {
- "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
- "whoops/soap": "Formats errors as SOAP responses"
+ "ext-intl": "*",
+ "phpunit/phpunit": "^4.8.35 || ^5.7",
+ "squizlabs/php_codesniffer": "^2.9.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "1.9-dev"
}
},
"autoload": {
"psr-4": {
- "Whoops\\": "src/Whoops/"
+ "Faker\\": "src/Faker/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4854,54 +7336,57 @@
],
"authors": [
{
- "name": "Filipe Dobreira",
- "homepage": "https://github.com/filp",
- "role": "Developer"
+ "name": "François Zaninotto"
}
],
- "description": "php error handling for cool kids",
- "homepage": "https://filp.github.io/whoops/",
+ "description": "Faker is a PHP library that generates fake data for you.",
"keywords": [
- "error",
- "exception",
- "handling",
- "library",
- "whoops",
- "zf2"
+ "data",
+ "faker",
+ "fixtures"
],
- "time": "2017-08-03T18:23:40+00:00"
+ "support": {
+ "issues": "https://github.com/fzaninotto/Faker/issues",
+ "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2"
+ },
+ "abandoned": true,
+ "time": "2020-12-11T09:56:16+00:00"
},
{
- "name": "fzaninotto/faker",
- "version": "v1.7.1",
+ "name": "graham-campbell/analyzer",
+ "version": "v2.4.3",
"source": {
"type": "git",
- "url": "https://github.com/fzaninotto/Faker.git",
- "reference": "d3ed4cc37051c1ca52d22d76b437d14809fc7e0d"
+ "url": "https://github.com/GrahamCampbell/Analyzer.git",
+ "reference": "baecd15b7e1185075a8db63ca1806c555cd60bc8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d3ed4cc37051c1ca52d22d76b437d14809fc7e0d",
- "reference": "d3ed4cc37051c1ca52d22d76b437d14809fc7e0d",
+ "url": "https://api.github.com/repos/GrahamCampbell/Analyzer/zipball/baecd15b7e1185075a8db63ca1806c555cd60bc8",
+ "reference": "baecd15b7e1185075a8db63ca1806c555cd60bc8",
"shasum": ""
},
"require": {
- "php": "^5.3.3 || ^7.0"
+ "nikic/php-parser": "^3.0|^4.0",
+ "php": "^7.0|^8.0",
+ "phpdocumentor/reflection-docblock": "^4.2",
+ "phpdocumentor/type-resolver": "~0.4|^1.0"
},
"require-dev": {
- "ext-intl": "*",
- "phpunit/phpunit": "^4.0 || ^5.0",
- "squizlabs/php_codesniffer": "^1.5"
+ "phpunit/phpunit": "^6.5|^7.5|^8.4|^9.0"
+ },
+ "suggest": {
+ "phpunit/phpunit": "Required to use the analysis trait."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.8-dev"
+ "dev-master": "2.4-dev"
}
},
"autoload": {
"psr-4": {
- "Faker\\": "src/Faker/"
+ "GrahamCampbell\\Analyzer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4910,36 +7395,55 @@
],
"authors": [
{
- "name": "François Zaninotto"
+ "name": "Graham Campbell",
+ "email": "graham@alt-three.com"
}
],
- "description": "Faker is a PHP library that generates fake data for you.",
+ "description": "Checks if referenced classes really exist.",
"keywords": [
- "data",
- "faker",
- "fixtures"
+ "Graham Campbell",
+ "GrahamCampbell",
+ "analysis",
+ "analyzer",
+ "classes",
+ "testing"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Analyzer/issues",
+ "source": "https://github.com/GrahamCampbell/Analyzer/tree/v2.4.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/analyzer",
+ "type": "tidelift"
+ }
],
- "time": "2017-08-15T16:48:10+00:00"
+ "time": "2020-05-02T14:42:06+00:00"
},
{
"name": "graham-campbell/testbench-core",
- "version": "v1.1.2",
+ "version": "v3.4.1",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Laravel-TestBench-Core.git",
- "reference": "9dcc8fe7feb891e4c7ffb85d7bc316de9699cf41"
+ "reference": "f62a3d0200cbea9f8156ac2cd7d16684ad324c8d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GrahamCampbell/Laravel-TestBench-Core/zipball/9dcc8fe7feb891e4c7ffb85d7bc316de9699cf41",
- "reference": "9dcc8fe7feb891e4c7ffb85d7bc316de9699cf41",
+ "url": "https://api.github.com/repos/GrahamCampbell/Laravel-TestBench-Core/zipball/f62a3d0200cbea9f8156ac2cd7d16684ad324c8d",
+ "reference": "f62a3d0200cbea9f8156ac2cd7d16684ad324c8d",
"shasum": ""
},
"require": {
- "php": ">=5.5.9"
+ "php": "^7.0 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8|^5.0"
+ "graham-campbell/analyzer": "^2.4 || ^3.0",
+ "phpunit/phpunit": "^6.5 || ^7.5 || ^8.0 || ^9.0 || ^10.0"
},
"suggest": {
"illuminate/support": "Required to use the laravel trait.",
@@ -4947,11 +7451,6 @@
"phpunit/phpunit": "Required to use the most of the features."
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
"autoload": {
"psr-4": {
"GrahamCampbell\\TestBenchCore\\": "src/"
@@ -4964,10 +7463,11 @@
"authors": [
{
"name": "Graham Campbell",
- "email": "graham@alt-three.com"
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
}
],
- "description": "TestBench Core Provides Some Testing Functionality For Laravel 5",
+ "description": "TestBench Core Provides Some Testing Functionality For Laravel",
"keywords": [
"Graham Campbell",
"GrahamCampbell",
@@ -4979,24 +7479,38 @@
"testbench-core",
"testing"
],
- "time": "2017-01-01T13:06:17+00:00"
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Laravel-TestBench-Core/issues",
+ "source": "https://github.com/GrahamCampbell/Laravel-TestBench-Core/tree/v3.4.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/testbench-core",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-02-25T15:19:33+00:00"
},
{
"name": "hamcrest/hamcrest-php",
- "version": "v1.2.2",
+ "version": "v2.0.1",
"source": {
"type": "git",
"url": "https://github.com/hamcrest/hamcrest-php.git",
- "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c"
+ "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c",
- "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+ "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": "^5.3|^7.0|^8.0"
},
"replace": {
"cordoval/hamcrest-php": "*",
@@ -5004,56 +7518,71 @@
"kodova/hamcrest-php": "*"
},
"require-dev": {
- "phpunit/php-file-iterator": "1.3.3",
- "satooshi/php-coveralls": "dev-master"
+ "phpunit/php-file-iterator": "^1.4 || ^2.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
"autoload": {
"classmap": [
"hamcrest"
- ],
- "files": [
- "hamcrest/Hamcrest.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD"
+ "BSD-3-Clause"
],
"description": "This is the PHP port of Hamcrest Matchers",
"keywords": [
"test"
],
- "time": "2015-05-11T14:41:42+00:00"
+ "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": "laravel/browser-kit-testing",
- "version": "v2.0.0",
+ "name": "maximebf/debugbar",
+ "version": "v1.19.1",
"source": {
"type": "git",
- "url": "https://github.com/laravel/browser-kit-testing.git",
- "reference": "23f1a7eefcbca0797305b236600aa5426c9528f2"
+ "url": "https://github.com/maximebf/php-debugbar.git",
+ "reference": "03dd40a1826f4d585ef93ef83afa2a9874a00523"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/browser-kit-testing/zipball/23f1a7eefcbca0797305b236600aa5426c9528f2",
- "reference": "23f1a7eefcbca0797305b236600aa5426c9528f2",
+ "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/03dd40a1826f4d585ef93ef83afa2a9874a00523",
+ "reference": "03dd40a1826f4d585ef93ef83afa2a9874a00523",
"shasum": ""
},
"require": {
- "php": ">=5.5.9",
- "symfony/css-selector": "~3.1",
- "symfony/dom-crawler": "~3.1"
+ "php": "^7.1|^8",
+ "psr/log": "^1|^2|^3",
+ "symfony/var-dumper": "^4|^5|^6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=7.5.20 <10.0",
+ "twig/twig": "^1.38|^2.7|^3.0"
+ },
+ "suggest": {
+ "kriswallsmith/assetic": "The best way to manage assets",
+ "monolog/monolog": "Log using Monolog",
+ "predis/predis": "Redis storage"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "1.18-dev"
}
},
"autoload": {
"psr-4": {
- "Laravel\\BrowserKitTesting\\": "src/"
+ "DebugBar\\": "src/DebugBar/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -5062,43 +7591,53 @@
],
"authors": [
{
- "name": "Taylor Otwell",
- "email": "taylor@laravel.com"
+ "name": "Maxime Bouroumeau-Fuseau",
+ "email": "maxime.bouroumeau@gmail.com",
+ "homepage": "http://maximebf.com"
+ },
+ {
+ "name": "Barry vd. Heuvel",
+ "email": "barryvdh@gmail.com"
}
],
- "description": "Provides backwards compatibility for BrowserKit testing in Laravel 5.4.",
+ "description": "Debug bar in the browser for php application",
+ "homepage": "https://github.com/maximebf/php-debugbar",
"keywords": [
- "laravel",
- "testing"
+ "debug",
+ "debugbar"
],
- "time": "2017-05-26T12:46:48+00:00"
+ "support": {
+ "issues": "https://github.com/maximebf/php-debugbar/issues",
+ "source": "https://github.com/maximebf/php-debugbar/tree/v1.19.1"
+ },
+ "time": "2023-10-12T08:10:52+00:00"
},
{
"name": "mockery/mockery",
- "version": "0.9.9",
+ "version": "1.3.6",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
- "reference": "6fdb61243844dc924071d3404bb23994ea0b6856"
+ "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/6fdb61243844dc924071d3404bb23994ea0b6856",
- "reference": "6fdb61243844dc924071d3404bb23994ea0b6856",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/dc206df4fa314a50bbb81cf72239a305c5bbd5c0",
+ "reference": "dc206df4fa314a50bbb81cf72239a305c5bbd5c0",
"shasum": ""
},
"require": {
- "hamcrest/hamcrest-php": "~1.1",
+ "hamcrest/hamcrest-php": "^2.0.1",
"lib-pcre": ">=7.0",
- "php": ">=5.3.2"
+ "php": ">=5.6.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.9.x-dev"
+ "dev-master": "1.3.x-dev"
}
},
"autoload": {
@@ -5122,8 +7661,8 @@
"homepage": "http://davedevelopment.co.uk"
}
],
- "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.",
- "homepage": "http://github.com/padraic/mockery",
+ "description": "Mockery is a simple yet flexible PHP mock object framework",
+ "homepage": "https://github.com/mockery/mockery",
"keywords": [
"BDD",
"TDD",
@@ -5136,31 +7675,43 @@
"test double",
"testing"
],
- "time": "2017-02-28T12:52:32+00:00"
+ "support": {
+ "issues": "https://github.com/mockery/mockery/issues",
+ "source": "https://github.com/mockery/mockery/tree/1.3.6"
+ },
+ "time": "2022-09-07T15:05:49+00:00"
},
{
"name": "myclabs/deep-copy",
- "version": "1.6.1",
+ "version": "1.11.1",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102"
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102",
- "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
},
"require-dev": {
- "doctrine/collections": "1.*",
- "phpunit/phpunit": "~4.1"
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
},
"type": "library",
"autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
"psr-4": {
"DeepCopy\\": "src/DeepCopy/"
}
@@ -5170,7 +7721,6 @@
"MIT"
],
"description": "Create deep copies (clones) of your objects",
- "homepage": "https://github.com/myclabs/DeepCopy",
"keywords": [
"clone",
"copy",
@@ -5178,39 +7728,154 @@
"object",
"object graph"
],
- "time": "2017-04-12T18:52:22+00:00"
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-08T13:26:56+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "phar-io/version": "^2.0",
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/master"
+ },
+ "time": "2018-07-08T19:23:20+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/master"
+ },
+ "time": "2018-07-08T19:19:57+00:00"
},
{
"name": "phpdocumentor/reflection-common",
- "version": "1.0.1",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+ "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
- "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+ "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
"shasum": ""
},
"require": {
- "php": ">=5.5"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.6"
+ "php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "2.x-dev"
}
},
"autoload": {
"psr-4": {
- "phpDocumentor\\Reflection\\": [
- "src"
- ]
+ "phpDocumentor\\Reflection\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -5232,33 +7897,44 @@
"reflection",
"static analysis"
],
- "time": "2017-09-11T18:02:19+00:00"
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master"
+ },
+ "time": "2020-04-27T09:25:28+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "3.2.2",
+ "version": "4.3.4",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157"
+ "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157",
- "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+ "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
"shasum": ""
},
"require": {
- "php": ">=5.5",
- "phpdocumentor/reflection-common": "^1.0@dev",
- "phpdocumentor/type-resolver": "^0.3.0",
+ "php": "^7.0",
+ "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+ "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
"webmozart/assert": "^1.0"
},
"require-dev": {
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^4.4"
+ "doctrine/instantiator": "^1.0.5",
+ "mockery/mockery": "^1.0",
+ "phpdocumentor/type-resolver": "0.4.*",
+ "phpunit/phpunit": "^6.4"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": [
@@ -5277,41 +7953,44 @@
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "time": "2017-08-08T06:39:58+00:00"
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x"
+ },
+ "time": "2019-12-28T18:55:12+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "0.3.0",
+ "version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773"
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773",
- "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+ "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
"shasum": ""
},
"require": {
- "php": "^5.5 || ^7.0",
- "phpdocumentor/reflection-common": "^1.0"
+ "php": "^7.1",
+ "phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^5.2||^4.8.24"
+ "ext-tokenizer": "^7.1",
+ "mockery/mockery": "~1",
+ "phpunit/phpunit": "^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
- "phpDocumentor\\Reflection\\": [
- "src/"
- ]
+ "phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -5324,42 +8003,47 @@
"email": "me@mikevanriel.com"
}
],
- "time": "2017-06-03T08:32:36+00:00"
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/0.7.2"
+ },
+ "time": "2019-08-22T18:11:29+00:00"
},
{
"name": "phpspec/prophecy",
- "version": "v1.7.2",
+ "version": "v1.10.3",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6"
+ "reference": "451c3cd1418cf640de218914901e51b064abb093"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6",
- "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+ "reference": "451c3cd1418cf640de218914901e51b064abb093",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
- "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
- "sebastian/comparator": "^1.1|^2.0",
- "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+ "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
},
"require-dev": {
- "phpspec/phpspec": "^2.5|^3.2",
- "phpunit/phpunit": "^4.8 || ^5.6.5"
+ "phpspec/phpspec": "^2.5 || ^3.2",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.7.x-dev"
+ "dev-master": "1.10.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Prophecy\\": "src/"
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -5387,44 +8071,48 @@
"spy",
"stub"
],
- "time": "2017-09-04T11:05:03+00:00"
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.10.3"
+ },
+ "time": "2020-03-05T15:02:03+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "4.0.8",
+ "version": "6.1.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
- "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-xmlwriter": "*",
- "php": "^5.6 || ^7.0",
- "phpunit/php-file-iterator": "^1.3",
- "phpunit/php-text-template": "^1.2",
- "phpunit/php-token-stream": "^1.4.2 || ^2.0",
- "sebastian/code-unit-reverse-lookup": "^1.0",
- "sebastian/environment": "^1.3.2 || ^2.0",
- "sebastian/version": "^1.0 || ^2.0"
+ "php": "^7.1",
+ "phpunit/php-file-iterator": "^2.0",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-token-stream": "^3.0",
+ "sebastian/code-unit-reverse-lookup": "^1.0.1",
+ "sebastian/environment": "^3.1 || ^4.0",
+ "sebastian/version": "^2.0.1",
+ "theseer/tokenizer": "^1.1"
},
"require-dev": {
- "ext-xdebug": "^2.1.4",
- "phpunit/phpunit": "^5.7"
+ "phpunit/phpunit": "^7.0"
},
"suggest": {
- "ext-xdebug": "^2.5.1"
+ "ext-xdebug": "^2.6.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "6.1-dev"
}
},
"autoload": {
@@ -5439,7 +8127,7 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
+ "email": "sebastian@phpunit.de",
"role": "lead"
}
],
@@ -5450,29 +8138,36 @@
"testing",
"xunit"
],
- "time": "2017-04-02T07:44:40+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master"
+ },
+ "time": "2018-10-31T16:06:48+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "1.4.2",
+ "version": "2.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5"
+ "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
- "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5",
+ "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
@@ -5487,7 +8182,7 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
+ "email": "sebastian@phpunit.de",
"role": "lead"
}
],
@@ -5497,7 +8192,17 @@
"filesystem",
"iterator"
],
- "time": "2016-10-03T07:40:28+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:42:26+00:00"
},
{
"name": "phpunit/php-text-template",
@@ -5538,32 +8243,36 @@
"keywords": [
"template"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
+ },
"time": "2015-06-21T13:50:34+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "1.0.9",
+ "version": "2.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+ "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
- "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662",
+ "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662",
"shasum": ""
},
"require": {
- "php": "^5.3.3 || ^7.0"
+ "php": ">=7.1"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+ "phpunit/phpunit": "^8.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
@@ -5578,7 +8287,7 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
+ "email": "sebastian@phpunit.de",
"role": "lead"
}
],
@@ -5587,112 +8296,43 @@
"keywords": [
"timer"
],
- "time": "2017-02-26T11:10:40+00:00"
- },
- {
- "name": "phpunit/php-token-stream",
- "version": "1.4.11",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7",
- "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3"
},
- "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"
- ],
- "time": "2017-02-27T10:12:30+00:00"
+ "time": "2020-11-30T08:20:02+00:00"
},
{
- "name": "phpunit/phpunit",
- "version": "5.7.20",
+ "name": "phpunit/php-token-stream",
+ "version": "3.1.3",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "3cb94a5f8c07a03c8b7527ed7468a2926203f58b"
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "9c1da83261628cb24b6a6df371b6e312b3954768"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3cb94a5f8c07a03c8b7527ed7468a2926203f58b",
- "reference": "3cb94a5f8c07a03c8b7527ed7468a2926203f58b",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768",
+ "reference": "9c1da83261628cb24b6a6df371b6e312b3954768",
"shasum": ""
},
"require": {
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "myclabs/deep-copy": "~1.3",
- "php": "^5.6 || ^7.0",
- "phpspec/prophecy": "^1.6.2",
- "phpunit/php-code-coverage": "^4.0.4",
- "phpunit/php-file-iterator": "~1.4",
- "phpunit/php-text-template": "~1.2",
- "phpunit/php-timer": "^1.0.6",
- "phpunit/phpunit-mock-objects": "^3.2",
- "sebastian/comparator": "^1.2.4",
- "sebastian/diff": "^1.4.3",
- "sebastian/environment": "^1.3.4 || ^2.0",
- "sebastian/exporter": "~2.0",
- "sebastian/global-state": "^1.1",
- "sebastian/object-enumerator": "~2.0",
- "sebastian/resource-operations": "~1.0",
- "sebastian/version": "~1.0.3|~2.0",
- "symfony/yaml": "~2.1|~3.0"
- },
- "conflict": {
- "phpdocumentor/reflection-docblock": "3.0.2"
+ "ext-tokenizer": "*",
+ "php": ">=7.1"
},
"require-dev": {
- "ext-pdo": "*"
- },
- "suggest": {
- "ext-xdebug": "*",
- "phpunit/php-invoker": "~1.1"
- },
- "bin": [
- "phpunit"
- ],
+ "phpunit/phpunit": "^7.0"
+ },
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.7.x-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -5707,52 +8347,84 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
}
],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
"keywords": [
- "phpunit",
- "testing",
- "xunit"
+ "tokenizer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
+ "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
],
- "time": "2017-05-22T07:42:55+00:00"
+ "abandoned": true,
+ "time": "2021-07-26T12:15:06+00:00"
},
{
- "name": "phpunit/phpunit-mock-objects",
- "version": "3.4.4",
+ "name": "phpunit/phpunit",
+ "version": "7.5.20",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "9467db479d1b0487c99733bb1e7944d32deded2c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
- "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c",
+ "reference": "9467db479d1b0487c99733bb1e7944d32deded2c",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.0.2",
- "php": "^5.6 || ^7.0",
- "phpunit/php-text-template": "^1.2",
- "sebastian/exporter": "^1.2 || ^2.0"
+ "doctrine/instantiator": "^1.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "myclabs/deep-copy": "^1.7",
+ "phar-io/manifest": "^1.0.2",
+ "phar-io/version": "^2.0",
+ "php": "^7.1",
+ "phpspec/prophecy": "^1.7",
+ "phpunit/php-code-coverage": "^6.0.7",
+ "phpunit/php-file-iterator": "^2.0.1",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-timer": "^2.1",
+ "sebastian/comparator": "^3.0",
+ "sebastian/diff": "^3.0",
+ "sebastian/environment": "^4.0",
+ "sebastian/exporter": "^3.1",
+ "sebastian/global-state": "^2.0",
+ "sebastian/object-enumerator": "^3.0.3",
+ "sebastian/resource-operations": "^2.0",
+ "sebastian/version": "^2.0.1"
},
"conflict": {
- "phpunit/phpunit": "<5.4.0"
+ "phpunit/phpunit-mock-objects": "*"
},
"require-dev": {
- "phpunit/phpunit": "^5.4"
+ "ext-pdo": "*"
},
"suggest": {
- "ext-soap": "*"
+ "ext-soap": "*",
+ "ext-xdebug": "*",
+ "phpunit/php-invoker": "^2.0"
},
+ "bin": [
+ "phpunit"
+ ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.2.x-dev"
+ "dev-master": "7.5-dev"
}
},
"autoload": {
@@ -5767,37 +8439,42 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
+ "email": "sebastian@phpunit.de",
"role": "lead"
}
],
- "description": "Mock Object library for PHPUnit",
- "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
"keywords": [
- "mock",
+ "phpunit",
+ "testing",
"xunit"
],
- "time": "2017-06-30T09:13:00+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20"
+ },
+ "time": "2020-01-08T08:45:45+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
- "version": "1.0.1",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+ "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619"
},
"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-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619",
+ "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619",
"shasum": ""
},
"require": {
- "php": "^5.6 || ^7.0"
+ "php": ">=5.6"
},
"require-dev": {
- "phpunit/phpunit": "^5.7 || ^6.0"
+ "phpunit/phpunit": "^8.5"
},
"type": "library",
"extra": {
@@ -5822,34 +8499,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/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T08:15:22+00:00"
},
{
"name": "sebastian/comparator",
- "version": "1.2.4",
+ "version": "3.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+ "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
- "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770",
+ "reference": "1dc7ceb4a24aede938c7af2a9ed1de09609ca770",
"shasum": ""
},
"require": {
- "php": ">=5.3.3",
- "sebastian/diff": "~1.2",
- "sebastian/exporter": "~1.2 || ~2.0"
+ "php": ">=7.1",
+ "sebastian/diff": "^3.0",
+ "sebastian/exporter": "^3.1"
},
"require-dev": {
- "phpunit/phpunit": "~4.4"
+ "phpunit/phpunit": "^8.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2.x-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
@@ -5862,6 +8549,10 @@
"BSD-3-Clause"
],
"authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
@@ -5873,45 +8564,52 @@
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
}
],
"description": "Provides the functionality to compare PHP values for equality",
- "homepage": "http://www.github.com/sebastianbergmann/comparator",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
"keywords": [
"comparator",
"compare",
"equality"
],
- "time": "2017-01-29T09:50:25+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:31:48+00:00"
},
{
"name": "sebastian/diff",
- "version": "1.4.3",
+ "version": "3.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
+ "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
- "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6296a0c086dd0117c1b78b059374d7fcbe7545ae",
+ "reference": "6296a0c086dd0117c1b78b059374d7fcbe7545ae",
"shasum": ""
},
"require": {
- "php": "^5.3.3 || ^7.0"
+ "php": ">=7.1"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+ "phpunit/phpunit": "^7.5 || ^8.0",
+ "symfony/process": "^2 || ^3.3 || ^4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4-dev"
+ "dev-master": "3.0-dev"
}
},
"autoload": {
@@ -5924,46 +8622,62 @@
"BSD-3-Clause"
],
"authors": [
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- },
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
}
],
"description": "Diff implementation",
"homepage": "https://github.com/sebastianbergmann/diff",
"keywords": [
- "diff"
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
],
- "time": "2017-05-22T07:24:03+00:00"
+ "time": "2023-05-07T05:30:20+00:00"
},
{
"name": "sebastian/environment",
- "version": "2.0.0",
+ "version": "4.2.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
+ "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
- "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
+ "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
"shasum": ""
},
"require": {
- "php": "^5.6 || ^7.0"
+ "php": ">=7.1"
},
"require-dev": {
- "phpunit/phpunit": "^5.0"
+ "phpunit/phpunit": "^7.5"
+ },
+ "suggest": {
+ "ext-posix": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "4.2-dev"
}
},
"autoload": {
@@ -5988,34 +8702,44 @@
"environment",
"hhvm"
],
- "time": "2016-11-26T07:53:53+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:53:42+00:00"
},
{
"name": "sebastian/exporter",
- "version": "2.0.0",
+ "version": "3.1.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
+ "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
- "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6",
+ "reference": "73a9676f2833b9a7c36968f9d882589cd75511e6",
"shasum": ""
},
"require": {
- "php": ">=5.3.3",
- "sebastian/recursion-context": "~2.0"
+ "php": ">=7.0",
+ "sebastian/recursion-context": "^3.0"
},
"require-dev": {
"ext-mbstring": "*",
- "phpunit/phpunit": "~4.4"
+ "phpunit/phpunit": "^8.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "3.1.x-dev"
}
},
"autoload": {
@@ -6028,6 +8752,10 @@
"BSD-3-Clause"
],
"authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
@@ -6036,17 +8764,13 @@
"name": "Volker Dusch",
"email": "github@wallbash.com"
},
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
{
"name": "Adam Harvey",
"email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
}
],
"description": "Provides the functionality to export PHP variables for visualization",
@@ -6055,27 +8779,37 @@
"export",
"exporter"
],
- "time": "2016-11-19T08:54:04+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T06:00:17+00:00"
},
{
"name": "sebastian/global-state",
- "version": "1.1.1",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.2"
+ "phpunit/phpunit": "^6.0"
},
"suggest": {
"ext-uopz": "*"
@@ -6083,7 +8817,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "2.0-dev"
}
},
"autoload": {
@@ -6106,33 +8840,38 @@
"keywords": [
"global state"
],
- "time": "2015-10-12T03:26:01+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0"
+ },
+ "time": "2017-04-27T15:39:26+00:00"
},
{
"name": "sebastian/object-enumerator",
- "version": "2.0.1",
+ "version": "3.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
+ "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
- "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
+ "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
"shasum": ""
},
"require": {
- "php": ">=5.6",
- "sebastian/recursion-context": "~2.0"
+ "php": ">=7.0",
+ "sebastian/object-reflector": "^1.1.1",
+ "sebastian/recursion-context": "^3.0"
},
"require-dev": {
- "phpunit/phpunit": "~5"
+ "phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "3.0.x-dev"
}
},
"autoload": {
@@ -6152,32 +8891,42 @@
],
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "time": "2017-02-18T15:18:39+00:00"
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:40:27+00:00"
},
{
- "name": "sebastian/recursion-context",
- "version": "2.0.0",
+ "name": "sebastian/object-reflector",
+ "version": "1.1.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
- "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
+ "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.4"
+ "phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "1.1-dev"
}
},
"autoload": {
@@ -6190,44 +8939,49 @@
"BSD-3-Clause"
],
"authors": [
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
{
"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/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2"
+ },
+ "funding": [
{
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
}
],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2016-11-19T07:33:16+00:00"
+ "time": "2020-11-30T07:37:18+00:00"
},
{
- "name": "sebastian/resource-operations",
- "version": "1.0.0",
+ "name": "sebastian/recursion-context",
+ "version": "3.0.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
- "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb",
+ "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb",
"shasum": ""
},
"require": {
- "php": ">=5.6.0"
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "3.0.x-dev"
}
},
"autoload": {
@@ -6243,33 +8997,51 @@
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
}
],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "time": "2015-07-28T20:34:47+00:00"
+ "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/3.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:34:24+00:00"
},
{
- "name": "sebastian/version",
- "version": "2.0.1",
+ "name": "sebastian/resource-operations",
+ "version": "2.0.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3",
+ "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3",
"shasum": ""
},
"require": {
- "php": ">=5.6"
+ "php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "2.0-dev"
}
},
"autoload": {
@@ -6284,137 +9056,126 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
}
],
- "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"
+ "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/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-11-30T07:30:19+00:00"
},
{
- "name": "symfony/dom-crawler",
- "version": "v3.3.10",
+ "name": "sebastian/version",
+ "version": "2.0.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/dom-crawler.git",
- "reference": "40dafd42d5dad7fe5ad4e958413d92a207522ac1"
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/40dafd42d5dad7fe5ad4e958413d92a207522ac1",
- "reference": "40dafd42d5dad7fe5ad4e958413d92a207522ac1",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "require-dev": {
- "symfony/css-selector": "~2.8|~3.0"
- },
- "suggest": {
- "symfony/css-selector": ""
+ "php": ">=5.6"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.3-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Component\\DomCrawler\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Symfony DomCrawler Component",
- "homepage": "https://symfony.com",
- "time": "2017-10-02T06:42:24+00:00"
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/master"
+ },
+ "time": "2016-10-03T07:35:21+00:00"
},
{
- "name": "symfony/yaml",
- "version": "v3.3.10",
+ "name": "theseer/tokenizer",
+ "version": "1.1.3",
"source": {
"type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46"
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46",
- "reference": "8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+ "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8"
- },
- "require-dev": {
- "symfony/console": "~2.8|~3.0"
- },
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3-dev"
- }
- },
"autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
}
],
- "description": "Symfony Yaml Component",
- "homepage": "https://symfony.com",
- "time": "2017-10-05T14:43:42+00:00"
+ "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/master"
+ },
+ "time": "2019-06-13T22:48:21+00:00"
},
{
"name": "tightenco/mailthief",
- "version": "v0.3.11",
+ "version": "v0.3.14",
"source": {
"type": "git",
- "url": "https://github.com/tightenco/mailthief.git",
- "reference": "03fd1da7917989b73dfcfc8397d2b63519dae7e6"
+ "url": "https://github.com/tighten/mailthief.git",
+ "reference": "9a8c2443be2b3d77753596f70ae6cd879b5b26a6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tightenco/mailthief/zipball/03fd1da7917989b73dfcfc8397d2b63519dae7e6",
- "reference": "03fd1da7917989b73dfcfc8397d2b63519dae7e6",
+ "url": "https://api.github.com/repos/tighten/mailthief/zipball/9a8c2443be2b3d77753596f70ae6cd879b5b26a6",
+ "reference": "9a8c2443be2b3d77753596f70ae6cd879b5b26a6",
"shasum": ""
},
"require": {
@@ -6443,35 +9204,38 @@
}
],
"description": "A fake Mailer for Laravel applications that takes the pain out of testing mail.",
- "time": "2017-10-13T19:29:09+00:00"
+ "support": {
+ "issues": "https://github.com/tighten/mailthief/issues",
+ "source": "https://github.com/tighten/mailthief/tree/v0.3.14"
+ },
+ "time": "2018-02-10T04:17:52+00:00"
},
{
"name": "webmozart/assert",
- "version": "1.2.0",
+ "version": "1.9.1",
"source": {
"type": "git",
- "url": "https://github.com/webmozart/assert.git",
- "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f"
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f",
- "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+ "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
"shasum": ""
},
"require": {
- "php": "^5.3.3 || ^7.0"
+ "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.6",
- "sebastian/version": "^1.0.1"
+ "phpunit/phpunit": "^4.8.36 || ^7.5.13"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3-dev"
- }
- },
"autoload": {
"psr-4": {
"Webmozart\\Assert\\": "src/"
@@ -6493,25 +9257,31 @@
"check",
"validate"
],
- "time": "2016-11-23T20:04:58+00:00"
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.9.1"
+ },
+ "time": "2020-07-08T17:02:28+00:00"
}
],
"aliases": [],
"minimum-stability": "dev",
"stability-flags": {
- "backup-manager/laravel": 20,
- "nexmo/client": 10
+ "alt-three/testbench": 20
},
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": ">=5.6.4",
+ "php": "^7.1.3",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
"ext-xml": "*"
},
"platform-dev": {
"ext-sqlite3": "*"
},
"platform-overrides": {
- "php": "5.6.4"
- }
+ "php": "7.1.3"
+ },
+ "plugin-api-version": "2.3.0"
}
diff --git a/config/app.php b/config/app.php
index dad26c43a5f..b9599092fed 100644
--- a/config/app.php
+++ b/config/app.php
@@ -47,7 +47,7 @@
|
*/
- 'debug' => env('APP_DEBUG', false),
+ 'debug' => (bool) env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
@@ -173,36 +173,31 @@
/*
* Packages Service Providers...
*/
- AltThree\Badger\BadgerServiceProvider::class,
- AltThree\Emoji\EmojiServiceProvider::class,
- AltThree\Logger\LoggerServiceProvider::class,
- AltThree\Twitter\TwitterServiceProvider::class,
- BackupManager\Laravel\Laravel5ServiceProvider::class,
+ env('APP_DEBUG') ? Bugsnag\BugsnagLaravel\BugsnagServiceProvider::class : null,
Barryvdh\Cors\ServiceProvider::class,
- Fideloper\Proxy\TrustedProxyServiceProvider::class,
+ env('APP_DEBUG') ? Barryvdh\Debugbar\ServiceProvider::class : null,
+ CachetHQ\Badger\BadgerServiceProvider::class,
+ CachetHQ\Emoji\EmojiServiceProvider::class,
+ CachetHQ\Twitter\TwitterServiceProvider::class,
GrahamCampbell\Binput\BinputServiceProvider::class,
GrahamCampbell\Exceptions\ExceptionsServiceProvider::class,
- GrahamCampbell\Core\CoreServiceProvider::class,
GrahamCampbell\Markdown\MarkdownServiceProvider::class,
GrahamCampbell\Security\SecurityServiceProvider::class,
Jenssegers\Date\DateServiceProvider::class,
Laravel\Tinker\TinkerServiceProvider::class,
McCool\LaravelAutoPresenter\AutoPresenterServiceProvider::class,
- PragmaRX\Google2FA\Vendor\Laravel\ServiceProvider::class,
- Roumen\Feed\FeedServiceProvider::class,
/*
* Application Service Providers...
*/
- CachetHQ\Cachet\Foundation\Providers\AppServiceProvider::class,
- CachetHQ\Cachet\Foundation\Providers\ComposerServiceProvider::class,
- CachetHQ\Cachet\Foundation\Providers\ConsoleServiceProvider::class,
- CachetHQ\Cachet\Foundation\Providers\ConfigServiceProvider::class,
- CachetHQ\Cachet\Foundation\Providers\EventServiceProvider::class,
- CachetHQ\Cachet\Foundation\Providers\IntegrationServiceProvider::class,
- CachetHQ\Cachet\Foundation\Providers\ModuleServiceProvider::class,
- CachetHQ\Cachet\Foundation\Providers\RepositoryServiceProvider::class,
- CachetHQ\Cachet\Foundation\Providers\RouteServiceProvider::class,
+ CachetHQ\Cachet\Providers\AppServiceProvider::class,
+ CachetHQ\Cachet\Providers\ComposerServiceProvider::class,
+ CachetHQ\Cachet\Providers\ConsoleServiceProvider::class,
+ CachetHQ\Cachet\Providers\ConfigServiceProvider::class,
+ CachetHQ\Cachet\Providers\EventServiceProvider::class,
+ CachetHQ\Cachet\Providers\IntegrationServiceProvider::class,
+ CachetHQ\Cachet\Providers\RepositoryServiceProvider::class,
+ CachetHQ\Cachet\Providers\RouteServiceProvider::class,
]),
diff --git a/config/avatar.php b/config/avatar.php
new file mode 100644
index 00000000000..68590dd603b
--- /dev/null
+++ b/config/avatar.php
@@ -0,0 +1,88 @@
+ 'gd',
+
+ // Whether all characters supplied must be replaced with their closest ASCII counterparts
+ 'ascii' => false,
+
+ // Image shape: circle or square
+ 'shape' => 'circle',
+
+ // Image width, in pixel
+ 'width' => 100,
+
+ // Image height, in pixel
+ 'height' => 100,
+
+ // Number of characters used as initials. If name consists of single word, the first N character will be used
+ 'chars' => 2,
+
+ // font size
+ 'fontSize' => 48,
+
+ // convert initial letter in uppercase
+ 'uppercase' => false,
+
+ // Fonts used to render text.
+ // If contains more than one fonts, randomly selected based on name supplied
+ // You can provide absolute path, path relative to folder resources/laravolt/avatar/fonts/, or mixed.
+ 'fonts' => ['OpenSans-Bold.ttf', 'rockwell.ttf'],
+
+ // List of foreground colors to be used, randomly selected based on name supplied
+ 'foregrounds' => [
+ '#FFFFFF',
+ ],
+
+ // List of background colors to be used, randomly selected based on name supplied
+ 'backgrounds' => [
+ '#f44336',
+ '#E91E63',
+ '#9C27B0',
+ '#673AB7',
+ '#3F51B5',
+ '#2196F3',
+ '#03A9F4',
+ '#00BCD4',
+ '#009688',
+ '#4CAF50',
+ '#8BC34A',
+ '#CDDC39',
+ '#FFC107',
+ '#FF9800',
+ '#FF5722',
+ ],
+
+ 'border' => [
+ 'size' => 1,
+
+ // border color, available value are:
+ // 'foreground' (same as foreground color)
+ // 'background' (same as background color)
+ // or any valid hex ('#aabbcc')
+ 'color' => 'foreground',
+ ],
+
+];
diff --git a/config/backup-manager.php b/config/backup-manager.php
deleted file mode 100644
index 40c8539bc14..00000000000
--- a/config/backup-manager.php
+++ /dev/null
@@ -1,70 +0,0 @@
- [
- 'type' => 'Local',
- 'root' => database_path('backups'),
- ],
- 's3' => [
- 'type' => 'AwsS3',
- 'key' => '',
- 'secret' => '',
- 'region' => 'us-east-1',
- 'bucket' => '',
- 'root' => '',
- ],
- 'gcs' => [
- 'type' => 'Gcs',
- 'key' => '',
- 'secret' => '',
- 'bucket' => '',
- 'root' => '',
- ],
- 'rackspace' => [
- 'type' => 'Rackspace',
- 'username' => '',
- 'key' => '',
- 'container' => '',
- 'zone' => '',
- 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
- 'root' => '',
- ],
- 'dropbox' => [
- 'type' => 'Dropbox',
- 'token' => '',
- 'key' => '',
- 'secret' => '',
- 'app' => '',
- 'root' => '',
- ],
- 'ftp' => [
- 'type' => 'Ftp',
- 'host' => '',
- 'username' => '',
- 'password' => '',
- 'port' => 21,
- 'passive' => true,
- 'ssl' => true,
- 'timeout' => 30,
- 'root' => '',
- ],
- 'sftp' => [
- 'type' => 'Sftp',
- 'host' => '',
- 'username' => '',
- 'password' => '',
- 'port' => 21,
- 'timeout' => 10,
- 'privateKey' => '',
- 'root' => '',
- ],
-];
diff --git a/config/cache.php b/config/cache.php
index fe8bbc8dd36..06ec44c36ea 100644
--- a/config/cache.php
+++ b/config/cache.php
@@ -80,6 +80,9 @@
'redis' => [
'driver' => 'redis',
'connection' => 'default',
+ 'password' => env('REDIS_PASSWORD', null),
+ 'port' => env('REDIS_PORT', 6379),
+ 'database' => env('REDIS_DB', 0),
],
],
diff --git a/config/cachet.php b/config/cachet.php
index 2f193d21e84..6e0c9f8debd 100644
--- a/config/cachet.php
+++ b/config/cachet.php
@@ -31,7 +31,7 @@
|
*/
- 'is_docker' => env('DOCKER', false),
+ 'is_docker' => env('DOCKER', false),
/*
|--------------------------------------------------------------------------
@@ -44,6 +44,23 @@
|
*/
- 'beacon' => env('CACHET_BEACON', true),
+ 'beacon' => env('CACHET_BEACON', true),
+ /*
+ |--------------------------------------------------------------------------
+ | Templates configurations
+ |--------------------------------------------------------------------------
+ |
+ | Security fix: now user can provide information which will be included to the Twig sandbox settings
+ |
+ | Default: Described below
+ |
+ */
+ 'twig' => [
+ 'methods' => [],
+ 'functions' => [],
+ 'filters' => ['escape'],
+ 'tags' => ['if'],
+ 'props' => [],
+ ],
];
diff --git a/config/cors.php b/config/cors.php
index fb12f8c9df4..6e843598beb 100644
--- a/config/cors.php
+++ b/config/cors.php
@@ -10,6 +10,7 @@
*/
return [
+
/*
|--------------------------------------------------------------------------
| Laravel CORS
@@ -19,11 +20,13 @@
| to accept any value.
|
*/
- 'supportsCredentials' => false,
- 'allowedOrigins' => ['*'],
- 'allowedHeaders' => ['X-Cachet-Token'],
- 'allowedMethods' => ['*'],
- 'exposedHeaders' => [],
- 'maxAge' => 3600,
- 'hosts' => [],
+
+ 'supportsCredentials' => false,
+ 'allowedOrigins' => ['*'],
+ 'allowedOriginsPatterns' => [],
+ 'allowedHeaders' => ['X-Cachet-Token'],
+ 'allowedMethods' => ['*'],
+ 'exposedHeaders' => [],
+ 'maxAge' => 3600,
+
];
diff --git a/config/database.php b/config/database.php
index 01daab8271b..bb5f8221b91 100644
--- a/config/database.php
+++ b/config/database.php
@@ -72,7 +72,7 @@
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => env('DB_PREFIX', null),
- 'schema' => 'public',
+ 'schema' => env('DB_SCHEMA', 'public'),
'sslmode' => 'prefer',
],
diff --git a/config/debugbar.php b/config/debugbar.php
new file mode 100644
index 00000000000..f2591b99f80
--- /dev/null
+++ b/config/debugbar.php
@@ -0,0 +1,201 @@
+ env('DEBUGBAR_ENABLED', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | 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' => true, // 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
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | 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.
+ 'timeline' => false, // Add the queries to the timeline
+ 'explain' => [ // Show EXPLAIN output on queries
+ 'enabled' => false,
+ 'types' => ['SELECT'], // ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
+ ],
+ 'hints' => true, // Show hints for common mistakes
+ ],
+ '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,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Inject Debugbar in Response
+ |--------------------------------------------------------------------------
+ |
+ | Usually, the debugbar is added just before