Compare commits

...

31 Commits

Author SHA1 Message Date
James Brooks
387818dbb2 Bump version 2016-07-17 16:38:24 +01:00
James Brooks
5d70d244ce Update feed package. Fixes #1973 2016-07-17 16:37:55 +01:00
James Brooks
ddc846d959 Back to dev 2016-07-16 09:54:54 +01:00
James Brooks
6fb6641499 Bump version 2016-07-16 09:54:28 +01:00
James Brooks
d5eb087eca Merge pull request #1976 from CachetHQ/cli
Don't use settings caching in cli
2016-07-15 07:48:26 +01:00
Graham Campbell
fd25edb2f0 Don't use settings caching in cli 2016-07-14 21:31:07 -07:00
Graham Campbell
5879a2cb1a Updated the exceptions package 2016-07-14 11:11:21 -07:00
Graham Campbell
df5b9b89e6 Updated dependencies 2016-07-13 18:25:27 -07:00
James Brooks
47a5569f02 Improve how we work out system status with scheduled maintenance 2016-07-13 14:19:35 +01:00
James Brooks
ca4a72c518 Merge pull request #1960 from PeterDaveHello/bump-node-dependencies
bump nodejs package dependencies
2016-07-13 13:57:49 +01:00
Peter Dave Hello
6e45b5ae88 bump nodejs package dependencies 2016-07-13 20:57:16 +08:00
James Brooks
99dbc2cd6c Merge pull request #1959 from PeterDaveHello/fix-file-permission
remove executable permission from the files don't need it
2016-07-12 09:31:22 +01:00
Peter Dave Hello
2f2ed53b58 remove executable permission from the files don't need it 2016-07-12 16:28:28 +08:00
James Brooks
7e1ead91ed Merge pull request #1958 from PeterDaveHello/image-optimize
optimize png images using zopflipng
2016-07-12 09:23:02 +01:00
Peter Dave Hello
28578474b9 optimize png images using zopflipng 2016-07-12 16:20:14 +08:00
James Brooks
d4e332bf55 Merge pull request #1956 from PeterDaveHello/patch-1
Update README.md
2016-07-12 09:15:37 +01:00
Peter Dave Hello
13f0f67a7b Update README.md
Use svg instead of png to get localized percentage badge for better image quality.
2016-07-12 16:14:54 +08:00
James Brooks
709cac9332 Merge pull request #1953 from CachetHQ/fix-setup
fix setup env writing
2016-07-11 19:03:48 +01:00
Joseph Cohen
e17196d4c9 fix setup env writing 2016-07-11 13:00:00 -05:00
James Brooks
80be140c1f Update ISSUE_TEMPLATE 2016-07-11 09:50:33 +01:00
James Brooks
4f9af8bca0 Remove blank line 2016-07-10 17:04:08 +01:00
James Brooks
af3b7836ff Back to dev 2016-07-10 10:39:42 +01:00
James Brooks
cc4a960ea6 Release v2.3.3 2016-07-10 10:39:19 +01:00
James Brooks
467d29ca11 Use numeric validation for metric points. Fixes #1950 2016-07-10 10:37:00 +01:00
James Brooks
ac1355771c Merge pull request #1947 from CachetHQ/set-locale
Set Date locale
2016-07-08 19:43:04 +01:00
James Brooks
c41adc1019 Override date locale again. Fixes #1727 2016-07-08 19:42:20 +01:00
James Brooks
5b74b2d625 Merge pull request #1949 from CachetHQ/dashboard-api-bus
The dashboard API needs to use the Command Bus
2016-07-08 18:39:38 +01:00
James Brooks
d7835f68ed Merge pull request #1948 from CachetHQ/analysis-zO37Lk
Applied fixes from StyleCI

[ci skip] [skip ci]
2016-07-08 17:42:17 +01:00
James Brooks
a1f1a2b969 Applied fixes from StyleCI
[ci skip] [skip ci]
2016-07-08 12:42:13 -04:00
James Brooks
77394995e4 The dashboard API needs to use the Command Bus. Fixes #1927 2016-07-08 17:42:01 +01:00
James Brooks
9953557497 Back to dev 2016-07-06 21:54:50 +01:00
60 changed files with 98 additions and 64 deletions

View File

@@ -1,16 +1,8 @@
Before submitting your issue, please make sure that you've checked all of the checkboxes below.
Before submitting your issue, please make sure that you've checked the checkboxes below.
- [ ] You're running the [latest release](https://github.com/CachetHQ/Cachet/releases/latest) version of Cachet.
- [ ] Ensure that you're running at least PHP 5.5.9, you can check this by running `php -v`
- [ ] You've ran `rm -rf bootstrap/cache/*` from the root of your Cachet installation.
To help us better understand your issue, please answer the following — cheers!
### Your setup
- *What version of Cachet?*
- *What database driver? MySQL? Postgres? SQLite?*
- *What version of PHP?*
- [ ] I am running the [latest release](https://github.com/CachetHQ/Cachet/releases/latest) version of Cachet.
- [ ] I am running at least PHP 5.5.9. *You can check this by running `php -v`.*
- [ ] I have ran `rm -rf bootstrap/cache/*`.
### Expected behaviour
@@ -23,3 +15,6 @@ To help us better understand your issue, please answer the following — cheers!
### Steps to reproduce
*If your issue requires any specific steps to reproduce, please outline them here.*
1. First step
2. Second step

View File

@@ -3,7 +3,7 @@
[![StyleCI](https://styleci.io/repos/26730195/shield)](https://styleci.io/repos/26730195/)
[![Build Status](https://img.shields.io/travis/CachetHQ/Cachet/master.svg?style=flat-square)](https://travis-ci.org/CachetHQ/Cachet)
[![Software License](https://img.shields.io/badge/license-BSD3-brightgreen.svg?style=flat-square)](LICENSE)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/cachet/localized.png)](http://translate.cachethq.io/project/cachet)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/cachet/localized.svg)](http://translate.cachethq.io/project/cachet)
[![Packagist](https://img.shields.io/packagist/v/cachethq/cachet.svg?style=flat-square)](https://packagist.org/packages/cachethq/cachet)
![Screenshot](https://cachethq.io/img/main-interface.jpg)

View File

@@ -1 +1 @@
2.3.2
2.3.5

View File

@@ -42,7 +42,7 @@ final class AddMetricPointCommand
* @var string[]
*/
public $rules = [
'value' => 'int',
'value' => 'numeric',
'created_at' => 'string',
];

View File

@@ -46,7 +46,9 @@ class StatusPageComposer
];
} elseif (Component::enabled()->notStatus(1)->count() === 0) {
// If all our components are ok, do we have any non-fixed incidents?
$incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get();
$incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get()->filter(function ($incident) {
return $incident->status > 0;
});
$incidentCount = $incidents->count();
if ($incidentCount === 0 || ($incidentCount >= 1 && (int) $incidents->first()->status === 4)) {

View File

@@ -16,6 +16,7 @@ use CachetHQ\Cachet\Settings\Cache;
use CachetHQ\Cachet\Settings\Repository;
use Exception;
use Illuminate\Support\ServiceProvider;
use Jenssegers\Date\Date;
/**
* This is the config service provider class.
@@ -34,9 +35,10 @@ class ConfigServiceProvider extends ServiceProvider
public function boot()
{
$env = $this->app->environment();
$cli = $this->app->runningInConsole();
$repo = $this->app->make(Repository::class);
$cache = $this->app->make(Cache::class);
$loaded = $cache->load($env);
$loaded = $cli ? false : $cache->load($env);
$this->app->terminating(function () use ($repo, $cache) {
if ($repo->stale()) {
@@ -45,7 +47,7 @@ class ConfigServiceProvider extends ServiceProvider
});
try {
if ($loaded === false) {
if ($cli === false && $loaded === false) {
$loaded = $repo->all();
$cache->store($env, $loaded);
}
@@ -64,6 +66,7 @@ class ConfigServiceProvider extends ServiceProvider
if ($appLocale = $this->app->config->get('setting.app_locale')) {
$this->app->config->set('app.locale', $appLocale);
$this->app->translator->setLocale($appLocale);
Date::setLocale($appLocale);
}
if ($appTimezone = $this->app->config->get('setting.app_timezone')) {

View File

@@ -11,32 +11,46 @@
namespace CachetHQ\Cachet\Http\Controllers\Dashboard;
use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand;
use CachetHQ\Cachet\Bus\Commands\ComponentGroup\UpdateComponentGroupCommand;
use CachetHQ\Cachet\Http\Controllers\Api\AbstractApiController;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\ComponentGroup;
use CachetHQ\Cachet\Models\IncidentTemplate;
use Exception;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Routing\Controller;
use Illuminate\Database\QueryException;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
class ApiController extends Controller
class ApiController extends AbstractApiController
{
/**
* Updates a component with the entered info.
*
* @param \CachetHQ\Cachet\Models\Component $component
*
* @throws \Exception
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
*
* @return \CachetHQ\Cachet\Models\Component
*/
public function postUpdateComponent(Component $component)
{
if (!$component->update(Binput::except(['_token']))) {
throw new Exception(trans('dashboard.components.edit.failure'));
try {
dispatch(new UpdateComponentCommand(
$component,
null,
null,
Binput::get('status'),
null,
null,
null,
null
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
return $component;
return $this->item($component);
}
/**
@@ -49,11 +63,23 @@ class ApiController extends Controller
$componentData = Binput::get('ids');
foreach ($componentData as $order => $componentId) {
// Ordering should be 1-based, data comes in 0-based
Component::find($componentId)->update(['order' => $order + 1]);
try {
dispatch(new UpdateComponentCommand(
Component::find($componentId),
null,
null,
null,
null,
$order + 1,
null,
null
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
}
return $componentData;
return $this->collection(Component::query()->orderBy('order')->get());
}
/**
@@ -66,10 +92,15 @@ class ApiController extends Controller
$groupData = Binput::get('ids');
foreach ($groupData as $order => $groupId) {
ComponentGroup::find($groupId)->update(['order' => $order + 1]);
dispatch(new UpdateComponentGroupCommand(
ComponentGroup::find($groupId),
null,
$order + 1,
null
));
}
return $groupData;
return $this->collection(ComponentGroup::query()->orderBy('order')->get());
}
/**

View File

@@ -250,10 +250,11 @@ class SetupController extends Controller
try {
(new Dotenv($dir, $file))->load();
$envValue = env(strtoupper($key)) ?: 'null';
$envKey = strtoupper($key);
$envValue = env($envKey) ?: 'null';
file_put_contents($path, str_replace(
$envValue, $value, file_get_contents($path)
$envKey.'='.$envValue, $envKey.'='.$value, file_get_contents($path)
));
} catch (InvalidPathException $e) {
//

View File

@@ -16,6 +16,7 @@ use CachetHQ\Cachet\Models\Traits\SearchableTrait;
use CachetHQ\Cachet\Models\Traits\SortableTrait;
use CachetHQ\Cachet\Presenters\IncidentPresenter;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use McCool\LaravelAutoPresenter\HasPresenter;
@@ -97,7 +98,7 @@ class Incident extends Model implements HasPresenter
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeVisible($query)
public function scopeVisible(Builder $query)
{
return $query->where('visible', 1);
}
@@ -109,9 +110,9 @@ class Incident extends Model implements HasPresenter
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeScheduled($query)
public function scopeScheduled(Builder $query)
{
return $query->where('status', 0)->where('scheduled_at', '>=', Carbon::now());
return $query->where('status', 0)->where('scheduled_at', '>=', Carbon::now()->toDateTimeString());
}
/**
@@ -121,10 +122,12 @@ class Incident extends Model implements HasPresenter
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeNotScheduled($query)
public function scopeNotScheduled(Builder $query)
{
return $query->where(function ($query) {
return $query->whereNull('scheduled_at')->orWhere('scheduled_at', '<=', Carbon::now());
return $query->where('status', '>', 0)->orWhere(function ($query) {
$query->where('status', 0)->where(function ($query) {
$query->whereNull('scheduled_at')->orWhere('scheduled_at', '<=', Carbon::now()->toDateTimeString());
});
});
}

0
bootstrap/cache/.gitignore vendored Executable file → Normal file
View File

View File

@@ -41,7 +41,7 @@
"mccool/laravel-auto-presenter": "^4.3",
"pragmarx/google2fa": "^0.7.1",
"rcrowe/twigbridge": "^0.9.2",
"roumen/feed": "^2.10.3"
"roumen/feed": "^2.10.4"
},
"require-dev": {
"alt-three/testbench": "^1.4",

46
composer.lock generated
View File

@@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "121ae0d23ad2d8a2d0a87c90a5102e6b",
"content-hash": "bd751e5a5d663a274000acd26ba97e86",
"hash": "1e468595f20309ca6658b805a1486282",
"content-hash": "4b3f3e889041139f810c76897b44722a",
"packages": [
{
"name": "alt-three/badger",
@@ -325,16 +325,16 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.18.25",
"version": "3.18.28",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "37a8ce927a69de3d821c21b64674a2b3b9d1d247"
"reference": "c75d3ba185d5db6998124fa1a99a63e5d529b247"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/37a8ce927a69de3d821c21b64674a2b3b9d1d247",
"reference": "37a8ce927a69de3d821c21b64674a2b3b9d1d247",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c75d3ba185d5db6998124fa1a99a63e5d529b247",
"reference": "c75d3ba185d5db6998124fa1a99a63e5d529b247",
"shasum": ""
},
"require": {
@@ -401,7 +401,7 @@
"s3",
"sdk"
],
"time": "2016-07-05 19:25:06"
"time": "2016-07-13 20:34:06"
},
{
"name": "backup-manager/backup-manager",
@@ -1458,16 +1458,16 @@
},
{
"name": "graham-campbell/exceptions",
"version": "v8.6.1",
"version": "v8.6.2",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Laravel-Exceptions.git",
"reference": "40e6208cff22859cd63788fee19a8c15aebc1ef9"
"reference": "7a36e51547258f750a1e68f6caa717bff26e710b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GrahamCampbell/Laravel-Exceptions/zipball/40e6208cff22859cd63788fee19a8c15aebc1ef9",
"reference": "40e6208cff22859cd63788fee19a8c15aebc1ef9",
"url": "https://api.github.com/repos/GrahamCampbell/Laravel-Exceptions/zipball/7a36e51547258f750a1e68f6caa717bff26e710b",
"reference": "7a36e51547258f750a1e68f6caa717bff26e710b",
"shasum": ""
},
"require": {
@@ -1523,7 +1523,7 @@
"laravel",
"whoops"
],
"time": "2016-06-04 20:20:48"
"time": "2016-07-14 15:54:14"
},
{
"name": "graham-campbell/markdown",
@@ -2962,16 +2962,16 @@
},
{
"name": "roumen/feed",
"version": "v2.10.3",
"version": "v2.10.4",
"source": {
"type": "git",
"url": "https://github.com/RoumenDamianoff/laravel-feed.git",
"reference": "d2f51d9f0d8c699cb812c5b7edeb4804e253f691"
"reference": "900594412cab37515b2b53c8953af1201024e48d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/RoumenDamianoff/laravel-feed/zipball/d2f51d9f0d8c699cb812c5b7edeb4804e253f691",
"reference": "d2f51d9f0d8c699cb812c5b7edeb4804e253f691",
"url": "https://api.github.com/repos/RoumenDamianoff/laravel-feed/zipball/900594412cab37515b2b53c8953af1201024e48d",
"reference": "900594412cab37515b2b53c8953af1201024e48d",
"shasum": ""
},
"require": {
@@ -3009,7 +3009,7 @@
"laravel",
"rss"
],
"time": "2016-06-01 18:54:03"
"time": "2016-07-17 13:06:35"
},
{
"name": "simplesoftwareio/simple-qrcode",
@@ -3064,23 +3064,23 @@
},
{
"name": "swiftmailer/swiftmailer",
"version": "v5.4.2",
"version": "v5.4.3",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "d8db871a54619458a805229a057ea2af33c753e8"
"reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/d8db871a54619458a805229a057ea2af33c753e8",
"reference": "d8db871a54619458a805229a057ea2af33c753e8",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
"reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"mockery/mockery": "~0.9.1,<0.9.4"
"mockery/mockery": "~0.9.1"
},
"type": "library",
"extra": {
@@ -3113,7 +3113,7 @@
"mail",
"mailer"
],
"time": "2016-05-01 08:45:47"
"time": "2016-07-08 11:51:25"
},
{
"name": "symfony/console",

0
config/langs.php Executable file → Normal file
View File

View File

@@ -2,7 +2,7 @@
"name": "cachet",
"devDependencies": {
"gulp": "~3.9.1",
"laravel-elixir": "~5.0.0",
"laravel-elixir": "~6.0.0-9",
"animate-sass": "git+https://github.com/tgdev/animate-sass.git",
"autosize": "^3.0.15",
"bootstrap-sass": "^3.3.6",

0
public/build/dist/css/all-81fdbf996d.css vendored Executable file → Normal file
View File

BIN
public/img/apple-touch-icon-114x114.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
public/img/apple-touch-icon-120x120.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
public/img/apple-touch-icon-144x144.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
public/img/apple-touch-icon-152x152.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
public/img/apple-touch-icon-57x57.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
public/img/apple-touch-icon-72x72.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
public/img/apple-touch-icon-76x76.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
public/img/apple-touch-icon.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
public/img/favicon-high-alert.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
public/img/favicon-medium-alert.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

0
resources/assets/js/app.js Executable file → Normal file
View File

0
resources/assets/sass/_errors.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/_helpers.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/_palette.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/_status-page.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/app.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/modules/_bootstrap.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/modules/_forms.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/modules/_tabs.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/modules/_variables.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/modules/_well.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/pages/_dashboard.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/pages/_login.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/pages/_setup.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/partials/_base.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/partials/_content.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/partials/_modals.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/partials/_navbar.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/partials/_sidebar.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/partials/_wrapper.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/plugins/_animate.scss vendored Executable file → Normal file
View File

0
resources/assets/sass/plugins/_messenger.scss vendored Executable file → Normal file
View File

View File

View File

@@ -1,4 +1,3 @@
<div class="timeline schedule">
<div class="panel panel-info">
<div class="panel-heading">

0
storage/app/.gitignore vendored Executable file → Normal file
View File

0
storage/framework/.gitignore vendored Executable file → Normal file
View File

0
storage/framework/cache/.gitignore vendored Executable file → Normal file
View File

0
storage/framework/sessions/.gitignore vendored Executable file → Normal file
View File

0
storage/framework/views/.gitignore vendored Executable file → Normal file
View File

0
storage/logs/.gitignore vendored Executable file → Normal file
View File