Added details++; Vendor updates

This commit is contained in:
2017-09-24 18:42:53 +02:00
parent 848c9b1222
commit 783985b7ec
53 changed files with 761 additions and 447 deletions

View File

@@ -170,5 +170,72 @@ public function details() {
]); ]);
} }
public function detailspp() {
$pagetitle = 'Details++';
$activeNav = 'details++';
$arraycounter = 0;
for ($i = 1; $i <= 2; $i++) {
$temperature = Stats::select('temperature')
->where('node_id', $i)
->limit('144')
->orderBy('created_at', 'desc')
->pluck('temperature');
$humidity = Stats::select('humidity')
->where('node_id', $i)
->limit('144')
->orderBy('created_at', 'desc')
->pluck('humidity');
$gm3 = Stats::select('gm3')
->where('node_id', $i)
->limit('144')
->orderBy('created_at', 'desc')
->pluck('gm3');
$created_at = Stats::select('created_at')
->where('node_id', $i)
->limit('144')
->orderBy('created_at', 'desc')
->pluck('created_at');
$chart[$arraycounter++] = Charts::multi('line', 'material')
->title('Zusammenfassung Node ' . $i . ' (°C)')
->dimensions(0, 400) // Width x Height
->template("material")
->dataset('°C', $temperature)
//->dataset('%', $humidity)
//->dataset('g/m³', $gm3)
->labels($created_at);
$chart[$arraycounter++] = Charts::multi('line', 'material')
->title('Zusammenfassung Node ' . $i . ' (%)')
->dimensions(0, 400) // Width x Height
->template("red-material")
//->dataset('°C', $temperature)
->dataset('%', $humidity)
//->dataset('g/m³', $gm3)
->labels($created_at);
$chart[$arraycounter++] = Charts::multi('line', 'material')
->title('Zusammenfassung Node ' . $i . ' (g/m³)')
->dimensions(0, 400) // Width x Height
->template("yellow-material")
//->dataset('°C', $temperature)
//->dataset('%', $humidity)
->dataset('g/m³', $gm3)
->labels($created_at);
}
return view('details++')->with([
'pagetitle' => $pagetitle,
'activeNav' => $activeNav,
'chart' => $chart,
]);
}
} }

30
Laravel/composer.lock generated
View File

@@ -562,16 +562,16 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v5.5.4", "version": "v5.5.12",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "d3e0493bead126cf7fb9a005c64e6b58a9190e51" "reference": "74f5831447817034838b3539c644303036df3d8e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/d3e0493bead126cf7fb9a005c64e6b58a9190e51", "url": "https://api.github.com/repos/laravel/framework/zipball/74f5831447817034838b3539c644303036df3d8e",
"reference": "d3e0493bead126cf7fb9a005c64e6b58a9190e51", "reference": "74f5831447817034838b3539c644303036df3d8e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -690,7 +690,7 @@
"framework", "framework",
"laravel" "laravel"
], ],
"time": "2017-09-13T13:36:29+00:00" "time": "2017-09-22T13:33:35+00:00"
}, },
{ {
"name": "laravel/tinker", "name": "laravel/tinker",
@@ -1331,16 +1331,16 @@
}, },
{ {
"name": "ramsey/uuid", "name": "ramsey/uuid",
"version": "3.7.0", "version": "3.7.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/ramsey/uuid.git", "url": "https://github.com/ramsey/uuid.git",
"reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e" "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/0ef23d1b10cf1bc576e9d865a7e9c47982c5715e", "url": "https://api.github.com/repos/ramsey/uuid/zipball/45cffe822057a09e05f7bd09ec5fb88eeecd2334",
"reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e", "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1409,7 +1409,7 @@
"identifier", "identifier",
"uuid" "uuid"
], ],
"time": "2017-08-04T13:39:04+00:00" "time": "2017-09-22T20:46:04+00:00"
}, },
{ {
"name": "swiftmailer/swiftmailer", "name": "swiftmailer/swiftmailer",
@@ -3192,16 +3192,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "6.3.0", "version": "6.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "9501bab711403a1ab5b8378a8adb4ec3db3debdb" "reference": "c0ff817b36a827e64bf5f57bc72278150cf30a77"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9501bab711403a1ab5b8378a8adb4ec3db3debdb", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c0ff817b36a827e64bf5f57bc72278150cf30a77",
"reference": "9501bab711403a1ab5b8378a8adb4ec3db3debdb", "reference": "c0ff817b36a827e64bf5f57bc72278150cf30a77",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -3272,7 +3272,7 @@
"testing", "testing",
"xunit" "xunit"
], ],
"time": "2017-08-04T05:20:39+00:00" "time": "2017-09-24T07:25:54+00:00"
}, },
{ {
"name": "phpunit/phpunit-mock-objects", "name": "phpunit/phpunit-mock-objects",

View File

@@ -0,0 +1,22 @@
@extends('layouts.master')
@section('title', $pagetitle)
@section('content')
{!! Charts::styles() !!}
<h1>Details++ <small>Noch genauere Infos</small></h1>
<div class="resizechart resizechart2">
@foreach($chart as $ch)
{!! $ch->html() !!}
</br>
@endforeach
</div>
{!! Charts::scripts() !!}
@foreach($chart as $ch)
{!! $ch->script() !!}
@endforeach
@endsection

View File

@@ -63,10 +63,19 @@
<a href="{{ url('/details') }}">Details</a> <a href="{{ url('/details') }}">Details</a>
</li> </li>
{{-- Details++ Navbar --}}
<ul class="nav navbar-nav">
{{-- Navlink Startseite --}}
@if(isset($activeNav) && $activeNav == 'detailspp')
<li class="active">
@else
<li>
@endif
<a href="{{ url('/details++') }}">Details++</a>
</li>
</li>
</li>
</ul> </ul>
</div>{{-- /.nav-collapse --}} </div>{{-- /.nav-collapse --}}
</div> </div>

View File

@@ -0,0 +1,22 @@
@extends('layouts.master')
@section('title', $pagetitle)
@section('content')
{!! Charts::styles() !!}
<h1>Details++ <small>Noch genauere Infos</small></h1>
<div class="resizechart resizechart2">
@foreach($chart as $ch)
{!! $ch->html() !!}
</br>
@endforeach
</div>
{!! Charts::scripts() !!}
@foreach($chart as $ch)
{!! $ch->script() !!}
@endforeach
@endsection

View File

@@ -15,3 +15,4 @@
Route::get('/', 'PagesController@dashboard'); Route::get('/', 'PagesController@dashboard');
Route::get('/details', 'PagesController@details'); Route::get('/details', 'PagesController@details');
Route::get('/details++', 'PagesController@detailspp');

View File

@@ -20,11 +20,13 @@ return array(
'App\\Http\\Middleware\\TrimStrings' => $baseDir . '/app/Http/Middleware/TrimStrings.php', 'App\\Http\\Middleware\\TrimStrings' => $baseDir . '/app/Http/Middleware/TrimStrings.php',
'App\\Http\\Middleware\\TrustProxies' => $baseDir . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\TrustProxies' => $baseDir . '/app/Http/Middleware/TrustProxies.php',
'App\\Http\\Middleware\\VerifyCsrfToken' => $baseDir . '/app/Http/Middleware/VerifyCsrfToken.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => $baseDir . '/app/Http/Middleware/VerifyCsrfToken.php',
'App\\Http\\Requests\\StatsRequest' => $baseDir . '/app/Http/Requests/StatsRequest.php',
'App\\Providers\\AppServiceProvider' => $baseDir . '/app/Providers/AppServiceProvider.php', 'App\\Providers\\AppServiceProvider' => $baseDir . '/app/Providers/AppServiceProvider.php',
'App\\Providers\\AuthServiceProvider' => $baseDir . '/app/Providers/AuthServiceProvider.php', 'App\\Providers\\AuthServiceProvider' => $baseDir . '/app/Providers/AuthServiceProvider.php',
'App\\Providers\\BroadcastServiceProvider' => $baseDir . '/app/Providers/BroadcastServiceProvider.php', 'App\\Providers\\BroadcastServiceProvider' => $baseDir . '/app/Providers/BroadcastServiceProvider.php',
'App\\Providers\\EventServiceProvider' => $baseDir . '/app/Providers/EventServiceProvider.php', 'App\\Providers\\EventServiceProvider' => $baseDir . '/app/Providers/EventServiceProvider.php',
'App\\Providers\\RouteServiceProvider' => $baseDir . '/app/Providers/RouteServiceProvider.php', 'App\\Providers\\RouteServiceProvider' => $baseDir . '/app/Providers/RouteServiceProvider.php',
'App\\Stats' => $baseDir . '/app/Stats.php',
'App\\User' => $baseDir . '/app/User.php', 'App\\User' => $baseDir . '/app/User.php',
'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php', 'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php',
'Carbon\\CarbonInterval' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterval.php', 'Carbon\\CarbonInterval' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterval.php',

View File

@@ -335,11 +335,13 @@ class ComposerStaticInit0ef7b7c57b5051a6692d56ad58e04e79
'App\\Http\\Middleware\\TrimStrings' => __DIR__ . '/../..' . '/app/Http/Middleware/TrimStrings.php', 'App\\Http\\Middleware\\TrimStrings' => __DIR__ . '/../..' . '/app/Http/Middleware/TrimStrings.php',
'App\\Http\\Middleware\\TrustProxies' => __DIR__ . '/../..' . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\TrustProxies' => __DIR__ . '/../..' . '/app/Http/Middleware/TrustProxies.php',
'App\\Http\\Middleware\\VerifyCsrfToken' => __DIR__ . '/../..' . '/app/Http/Middleware/VerifyCsrfToken.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => __DIR__ . '/../..' . '/app/Http/Middleware/VerifyCsrfToken.php',
'App\\Http\\Requests\\StatsRequest' => __DIR__ . '/../..' . '/app/Http/Requests/StatsRequest.php',
'App\\Providers\\AppServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AppServiceProvider.php', 'App\\Providers\\AppServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AppServiceProvider.php',
'App\\Providers\\AuthServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AuthServiceProvider.php', 'App\\Providers\\AuthServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AuthServiceProvider.php',
'App\\Providers\\BroadcastServiceProvider' => __DIR__ . '/../..' . '/app/Providers/BroadcastServiceProvider.php', 'App\\Providers\\BroadcastServiceProvider' => __DIR__ . '/../..' . '/app/Providers/BroadcastServiceProvider.php',
'App\\Providers\\EventServiceProvider' => __DIR__ . '/../..' . '/app/Providers/EventServiceProvider.php', 'App\\Providers\\EventServiceProvider' => __DIR__ . '/../..' . '/app/Providers/EventServiceProvider.php',
'App\\Providers\\RouteServiceProvider' => __DIR__ . '/../..' . '/app/Providers/RouteServiceProvider.php', 'App\\Providers\\RouteServiceProvider' => __DIR__ . '/../..' . '/app/Providers/RouteServiceProvider.php',
'App\\Stats' => __DIR__ . '/../..' . '/app/Stats.php',
'App\\User' => __DIR__ . '/../..' . '/app/User.php', 'App\\User' => __DIR__ . '/../..' . '/app/User.php',
'Carbon\\Carbon' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Carbon.php', 'Carbon\\Carbon' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Carbon.php',
'Carbon\\CarbonInterval' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonInterval.php', 'Carbon\\CarbonInterval' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonInterval.php',

View File

@@ -1075,90 +1075,6 @@
"random" "random"
] ]
}, },
{
"name": "ramsey/uuid",
"version": "3.7.0",
"version_normalized": "3.7.0.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/0ef23d1b10cf1bc576e9d865a7e9c47982c5715e",
"reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e",
"shasum": ""
},
"require": {
"paragonie/random_compat": "^1.0|^2.0",
"php": "^5.4 || ^7.0"
},
"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",
"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"
},
"suggest": {
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
"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).",
"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."
},
"time": "2017-08-04T13:39:04+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"Ramsey\\Uuid\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marijn Huizendveld",
"email": "marijn.huizendveld@gmail.com"
},
{
"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).",
"homepage": "https://github.com/ramsey/uuid",
"keywords": [
"guid",
"identifier",
"uuid"
]
},
{ {
"name": "psr/simple-cache", "name": "psr/simple-cache",
"version": "1.0.0", "version": "1.0.0",
@@ -1706,140 +1622,6 @@
"string" "string"
] ]
}, },
{
"name": "laravel/framework",
"version": "v5.5.4",
"version_normalized": "5.5.4.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "d3e0493bead126cf7fb9a005c64e6b58a9190e51"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/d3e0493bead126cf7fb9a005c64e6b58a9190e51",
"reference": "d3e0493bead126cf7fb9a005c64e6b58a9190e51",
"shasum": ""
},
"require": {
"doctrine/inflector": "~1.1",
"erusev/parsedown": "~1.6",
"ext-mbstring": "*",
"ext-openssl": "*",
"league/flysystem": "~1.0",
"monolog/monolog": "~1.12",
"mtdowling/cron-expression": "~1.0",
"nesbot/carbon": "~1.20",
"php": ">=7.0",
"psr/container": "~1.0",
"psr/simple-cache": "^1.0",
"ramsey/uuid": "~3.0",
"swiftmailer/swiftmailer": "~6.0",
"symfony/console": "~3.3",
"symfony/debug": "~3.3",
"symfony/finder": "~3.3",
"symfony/http-foundation": "~3.3",
"symfony/http-kernel": "~3.3",
"symfony/process": "~3.3",
"symfony/routing": "~3.3",
"symfony/var-dumper": "~3.3",
"tijsverkoyen/css-to-inline-styles": "~2.2",
"vlucas/phpdotenv": "~2.2"
},
"replace": {
"illuminate/auth": "self.version",
"illuminate/broadcasting": "self.version",
"illuminate/bus": "self.version",
"illuminate/cache": "self.version",
"illuminate/config": "self.version",
"illuminate/console": "self.version",
"illuminate/container": "self.version",
"illuminate/contracts": "self.version",
"illuminate/cookie": "self.version",
"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",
"illuminate/log": "self.version",
"illuminate/mail": "self.version",
"illuminate/notifications": "self.version",
"illuminate/pagination": "self.version",
"illuminate/pipeline": "self.version",
"illuminate/queue": "self.version",
"illuminate/redis": "self.version",
"illuminate/routing": "self.version",
"illuminate/session": "self.version",
"illuminate/support": "self.version",
"illuminate/translation": "self.version",
"illuminate/validation": "self.version",
"illuminate/view": "self.version",
"tightenco/collect": "self.version"
},
"require-dev": {
"aws/aws-sdk-php": "~3.0",
"doctrine/dbal": "~2.5",
"filp/whoops": "^2.1.4",
"mockery/mockery": "~1.0",
"orchestra/testbench-core": "3.5.*",
"pda/pheanstalk": "~3.0",
"phpunit/phpunit": "~6.0",
"predis/predis": "^1.1.1",
"symfony/css-selector": "~3.3",
"symfony/dom-crawler": "~3.3"
},
"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.3).",
"symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).",
"symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)."
},
"time": "2017-09-13T13:36:29+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.5-dev"
}
},
"installation-source": "dist",
"autoload": {
"files": [
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Support/helpers.php"
],
"psr-4": {
"Illuminate\\": "src/Illuminate/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylor@laravel.com"
}
],
"description": "The Laravel Framework.",
"homepage": "https://laravel.com",
"keywords": [
"framework",
"laravel"
]
},
{ {
"name": "fideloper/proxy", "name": "fideloper/proxy",
"version": "3.3.4", "version": "3.3.4",
@@ -3866,92 +3648,6 @@
"object graph" "object graph"
] ]
}, },
{
"name": "phpunit/phpunit",
"version": "6.3.0",
"version_normalized": "6.3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "9501bab711403a1ab5b8378a8adb4ec3db3debdb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9501bab711403a1ab5b8378a8adb4ec3db3debdb",
"reference": "9501bab711403a1ab5b8378a8adb4ec3db3debdb",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-xml": "*",
"myclabs/deep-copy": "^1.6.1",
"phar-io/manifest": "^1.0.1",
"phar-io/version": "^1.0",
"php": "^7.0",
"phpspec/prophecy": "^1.7",
"phpunit/php-code-coverage": "^5.2.2",
"phpunit/php-file-iterator": "^1.4.2",
"phpunit/php-text-template": "^1.2.1",
"phpunit/php-timer": "^1.0.9",
"phpunit/phpunit-mock-objects": "^4.0.3",
"sebastian/comparator": "^2.0.2",
"sebastian/diff": "^2.0",
"sebastian/environment": "^3.1",
"sebastian/exporter": "^3.1",
"sebastian/global-state": "^2.0",
"sebastian/object-enumerator": "^3.0.3",
"sebastian/resource-operations": "^1.0",
"sebastian/version": "^2.0.1"
},
"conflict": {
"phpdocumentor/reflection-docblock": "3.0.2",
"phpunit/dbunit": "<3.0"
},
"require-dev": {
"ext-pdo": "*"
},
"suggest": {
"ext-xdebug": "*",
"phpunit/php-invoker": "^1.1"
},
"time": "2017-08-04T05:20:39+00:00",
"bin": [
"phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.3.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "The PHP Unit Testing framework.",
"homepage": "https://phpunit.de/",
"keywords": [
"phpunit",
"testing",
"xunit"
]
},
{ {
"name": "jenssegers/date", "name": "jenssegers/date",
"version": "v3.2.12", "version": "v3.2.12",
@@ -4114,5 +3810,309 @@
} }
], ],
"description": "Create charts for laravel using diferent charts libraries" "description": "Create charts for laravel using diferent charts libraries"
},
{
"name": "ramsey/uuid",
"version": "3.7.1",
"version_normalized": "3.7.1.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
"reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/uuid/zipball/45cffe822057a09e05f7bd09ec5fb88eeecd2334",
"reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334",
"shasum": ""
},
"require": {
"paragonie/random_compat": "^1.0|^2.0",
"php": "^5.4 || ^7.0"
},
"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",
"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"
},
"suggest": {
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
"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).",
"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."
},
"time": "2017-09-22T20:46:04+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-4": {
"Ramsey\\Uuid\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marijn Huizendveld",
"email": "marijn.huizendveld@gmail.com"
},
{
"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).",
"homepage": "https://github.com/ramsey/uuid",
"keywords": [
"guid",
"identifier",
"uuid"
]
},
{
"name": "laravel/framework",
"version": "v5.5.12",
"version_normalized": "5.5.12.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "74f5831447817034838b3539c644303036df3d8e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/74f5831447817034838b3539c644303036df3d8e",
"reference": "74f5831447817034838b3539c644303036df3d8e",
"shasum": ""
},
"require": {
"doctrine/inflector": "~1.1",
"erusev/parsedown": "~1.6",
"ext-mbstring": "*",
"ext-openssl": "*",
"league/flysystem": "~1.0",
"monolog/monolog": "~1.12",
"mtdowling/cron-expression": "~1.0",
"nesbot/carbon": "~1.20",
"php": ">=7.0",
"psr/container": "~1.0",
"psr/simple-cache": "^1.0",
"ramsey/uuid": "~3.0",
"swiftmailer/swiftmailer": "~6.0",
"symfony/console": "~3.3",
"symfony/debug": "~3.3",
"symfony/finder": "~3.3",
"symfony/http-foundation": "~3.3",
"symfony/http-kernel": "~3.3",
"symfony/process": "~3.3",
"symfony/routing": "~3.3",
"symfony/var-dumper": "~3.3",
"tijsverkoyen/css-to-inline-styles": "~2.2",
"vlucas/phpdotenv": "~2.2"
},
"replace": {
"illuminate/auth": "self.version",
"illuminate/broadcasting": "self.version",
"illuminate/bus": "self.version",
"illuminate/cache": "self.version",
"illuminate/config": "self.version",
"illuminate/console": "self.version",
"illuminate/container": "self.version",
"illuminate/contracts": "self.version",
"illuminate/cookie": "self.version",
"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",
"illuminate/log": "self.version",
"illuminate/mail": "self.version",
"illuminate/notifications": "self.version",
"illuminate/pagination": "self.version",
"illuminate/pipeline": "self.version",
"illuminate/queue": "self.version",
"illuminate/redis": "self.version",
"illuminate/routing": "self.version",
"illuminate/session": "self.version",
"illuminate/support": "self.version",
"illuminate/translation": "self.version",
"illuminate/validation": "self.version",
"illuminate/view": "self.version",
"tightenco/collect": "self.version"
},
"require-dev": {
"aws/aws-sdk-php": "~3.0",
"doctrine/dbal": "~2.5",
"filp/whoops": "^2.1.4",
"mockery/mockery": "~1.0",
"orchestra/testbench-core": "3.5.*",
"pda/pheanstalk": "~3.0",
"phpunit/phpunit": "~6.0",
"predis/predis": "^1.1.1",
"symfony/css-selector": "~3.3",
"symfony/dom-crawler": "~3.3"
},
"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.3).",
"symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).",
"symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)."
},
"time": "2017-09-22T13:33:35+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.5-dev"
}
},
"installation-source": "dist",
"autoload": {
"files": [
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Support/helpers.php"
],
"psr-4": {
"Illuminate\\": "src/Illuminate/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylor@laravel.com"
}
],
"description": "The Laravel Framework.",
"homepage": "https://laravel.com",
"keywords": [
"framework",
"laravel"
]
},
{
"name": "phpunit/phpunit",
"version": "6.3.1",
"version_normalized": "6.3.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "c0ff817b36a827e64bf5f57bc72278150cf30a77"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c0ff817b36a827e64bf5f57bc72278150cf30a77",
"reference": "c0ff817b36a827e64bf5f57bc72278150cf30a77",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-xml": "*",
"myclabs/deep-copy": "^1.6.1",
"phar-io/manifest": "^1.0.1",
"phar-io/version": "^1.0",
"php": "^7.0",
"phpspec/prophecy": "^1.7",
"phpunit/php-code-coverage": "^5.2.2",
"phpunit/php-file-iterator": "^1.4.2",
"phpunit/php-text-template": "^1.2.1",
"phpunit/php-timer": "^1.0.9",
"phpunit/phpunit-mock-objects": "^4.0.3",
"sebastian/comparator": "^2.0.2",
"sebastian/diff": "^2.0",
"sebastian/environment": "^3.1",
"sebastian/exporter": "^3.1",
"sebastian/global-state": "^2.0",
"sebastian/object-enumerator": "^3.0.3",
"sebastian/resource-operations": "^1.0",
"sebastian/version": "^2.0.1"
},
"conflict": {
"phpdocumentor/reflection-docblock": "3.0.2",
"phpunit/dbunit": "<3.0"
},
"require-dev": {
"ext-pdo": "*"
},
"suggest": {
"ext-xdebug": "*",
"phpunit/php-invoker": "^1.1"
},
"time": "2017-09-24T07:25:54+00:00",
"bin": [
"phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.3.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "The PHP Unit Testing framework.",
"homepage": "https://phpunit.de/",
"keywords": [
"phpunit",
"testing",
"xunit"
]
} }
] ]

View File

@@ -26,7 +26,7 @@ Laravel is accessible, yet powerful, providing tools needed for large, robust ap
Laravel has the most extensive and thorough documentation and video tutorial library of any modern web application framework. The [Laravel documentation](https://laravel.com/docs) is thorough, complete, and makes it a breeze to get started learning the framework. Laravel has the most extensive and thorough documentation and video tutorial library of any modern web application framework. The [Laravel documentation](https://laravel.com/docs) is thorough, complete, and makes it a breeze to get started learning the framework.
If you're not in the mood to read, [Laracasts](https://laracasts.com) contains over 900 video tutorials covering a range of topics including Laravel, modern PHP, unit testing, JavaScript, and more. Boost the skill level of yourself and your entire team by digging into our comprehensive video library. If you're not in the mood to read, [Laracasts](https://laracasts.com) contains over 1100 video tutorials covering a range of topics including Laravel, modern PHP, unit testing, JavaScript, and more. Boost the skill level of yourself and your entire team by digging into our comprehensive video library.
## Contributing ## Contributing

View File

@@ -68,12 +68,10 @@ class DatabaseUserProvider implements UserProvider
*/ */
public function retrieveByToken($identifier, $token) public function retrieveByToken($identifier, $token)
{ {
$user = $this->conn->table($this->table) $user = $this->conn->table($this->table)->find($identifier);
->where('id', $identifier)
->where('remember_token', $token)
->first();
return $this->getGenericUser($user); return $user && hash_equals($user->remember_token, $token)
? $this->getGenericUser($user) : null;
} }
/** /**

View File

@@ -62,10 +62,11 @@ class EloquentUserProvider implements UserProvider
{ {
$model = $this->createModel(); $model = $this->createModel();
return $model->newQuery() $model = $model->where($model->getAuthIdentifierName(), $identifier)->first();
->where($model->getAuthIdentifierName(), $identifier)
->where($model->getRememberTokenName(), $token) $rememberToken = $model->getRememberToken();
->first();
return $model && $rememberToken && hash_equals($rememberToken, $token) ? $model : null;
} }
/** /**

View File

@@ -4,6 +4,7 @@ namespace Illuminate\Cache\Console;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Cache\CacheManager; use Illuminate\Cache\CacheManager;
use Illuminate\Filesystem\Filesystem;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@@ -30,17 +31,26 @@ class ClearCommand extends Command
*/ */
protected $cache; protected $cache;
/**
* The filesystem instance.
*
* @var \Illuminate\Filesystem\Filesystem
*/
protected $files;
/** /**
* Create a new cache clear command instance. * Create a new cache clear command instance.
* *
* @param \Illuminate\Cache\CacheManager $cache * @param \Illuminate\Cache\CacheManager $cache
* @param \Illuminate\Filesystem\Filesystem $files
* @return void * @return void
*/ */
public function __construct(CacheManager $cache) public function __construct(CacheManager $cache, Filesystem $files)
{ {
parent::__construct(); parent::__construct();
$this->cache = $cache; $this->cache = $cache;
$this->files = $files;
} }
/** /**
@@ -50,15 +60,35 @@ class ClearCommand extends Command
*/ */
public function handle() public function handle()
{ {
$this->laravel['events']->fire('cache:clearing', [$this->argument('store'), $this->tags()]); $this->laravel['events']->fire(
'cache:clearing', [$this->argument('store'), $this->tags()]
);
$this->cache()->flush(); $this->cache()->flush();
$this->laravel['events']->fire('cache:cleared', [$this->argument('store'), $this->tags()]); $this->flushFacades();
$this->laravel['events']->fire(
'cache:cleared', [$this->argument('store'), $this->tags()]
);
$this->info('Cache cleared successfully.'); $this->info('Cache cleared successfully.');
} }
/**
* Flush the real-time facades stored in the cache directory.
*
* @return void
*/
public function flushFacades()
{
foreach ($this->files->files(storage_path('framework/cache')) as $file) {
if (preg_match('/facade-.*\.php$/', $file)) {
$this->files->delete($file);
}
}
}
/** /**
* Get the cache instance for the command. * Get the cache instance for the command.
* *

View File

@@ -378,10 +378,11 @@ class Command extends SymfonyCommand
* *
* @param array $headers * @param array $headers
* @param \Illuminate\Contracts\Support\Arrayable|array $rows * @param \Illuminate\Contracts\Support\Arrayable|array $rows
* @param string $style * @param string $tableStyle
* @param array $columnStyles
* @return void * @return void
*/ */
public function table($headers, $rows, $style = 'default') public function table($headers, $rows, $tableStyle = 'default', array $columnStyles = [])
{ {
$table = new Table($this->output); $table = new Table($this->output);
@@ -389,7 +390,13 @@ class Command extends SymfonyCommand
$rows = $rows->toArray(); $rows = $rows->toArray();
} }
$table->setHeaders((array) $headers)->setRows($rows)->setStyle($style)->render(); $table->setHeaders((array) $headers)->setRows($rows)->setStyle($tableStyle);
foreach ($columnStyles as $columnIndex => $columnStyle) {
$table->setColumnStyle($columnIndex, $columnStyle);
}
$table->render();
} }
/** /**

View File

@@ -15,7 +15,7 @@ interface Queue
/** /**
* Push a new job onto the queue. * Push a new job onto the queue.
* *
* @param string $job * @param string|object $job
* @param mixed $data * @param mixed $data
* @param string $queue * @param string $queue
* @return mixed * @return mixed
@@ -26,7 +26,7 @@ interface Queue
* Push a new job onto the queue. * Push a new job onto the queue.
* *
* @param string $queue * @param string $queue
* @param string $job * @param string|object $job
* @param mixed $data * @param mixed $data
* @return mixed * @return mixed
*/ */
@@ -46,7 +46,7 @@ interface Queue
* Push a new job onto the queue after a delay. * Push a new job onto the queue after a delay.
* *
* @param \DateTimeInterface|\DateInterval|int $delay * @param \DateTimeInterface|\DateInterval|int $delay
* @param string $job * @param string|object $job
* @param mixed $data * @param mixed $data
* @param string $queue * @param string $queue
* @return mixed * @return mixed
@@ -58,7 +58,7 @@ interface Queue
* *
* @param string $queue * @param string $queue
* @param \DateTimeInterface|\DateInterval|int $delay * @param \DateTimeInterface|\DateInterval|int $delay
* @param string $job * @param string|object $job
* @param mixed $data * @param mixed $data
* @return mixed * @return mixed
*/ */

View File

@@ -892,11 +892,13 @@ class Connection implements ConnectionInterface
public function getDoctrineConnection() public function getDoctrineConnection()
{ {
if (is_null($this->doctrineConnection)) { if (is_null($this->doctrineConnection)) {
$data = ['pdo' => $this->getPdo(), 'dbname' => $this->getConfig('database')]; $driver = $this->getDoctrineDriver();
$this->doctrineConnection = new DoctrineConnection( $this->doctrineConnection = new DoctrineConnection([
$data, $this->getDoctrineDriver() 'pdo' => $this->getPdo(),
); 'dbname' => $this->getConfig('database'),
'driver' => $driver->getName(),
], $driver);
} }
return $this->doctrineConnection; return $this->doctrineConnection;

View File

@@ -78,7 +78,7 @@ class FactoryMakeCommand extends GeneratorCommand
protected function getOptions() protected function getOptions()
{ {
return [ return [
['model', null, InputOption::VALUE_OPTIONAL, 'The name of the model'], ['model', 'm', InputOption::VALUE_OPTIONAL, 'The name of the model'],
]; ];
} }
} }

View File

@@ -38,7 +38,7 @@ trait HasTimestamps
{ {
$time = $this->freshTimestamp(); $time = $this->freshTimestamp();
if (! $this->isDirty(static::UPDATED_AT)) { if (! is_null(static::UPDATED_AT) && ! $this->isDirty(static::UPDATED_AT)) {
$this->setUpdatedAt($time); $this->setUpdatedAt($time);
} }

View File

@@ -16,10 +16,6 @@ use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Query\Builder as QueryBuilder; use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Database\ConnectionResolverInterface as Resolver; use Illuminate\Database\ConnectionResolverInterface as Resolver;
/**
* @mixin \Illuminate\Database\Eloquent\Builder
* @mixin \Illuminate\Database\Query\Builder
*/
abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable
{ {
use Concerns\HasAttributes, use Concerns\HasAttributes,

View File

@@ -188,7 +188,9 @@ trait InteractsWithPivotTable
$attributes = $this->addTimestampsToAttachment($attributes, true); $attributes = $this->addTimestampsToAttachment($attributes, true);
} }
$updated = $this->newPivotStatementForId($id)->update($attributes); $updated = $this->newPivotStatementForId($id)->update(
$this->castAttributes($attributes)
);
if ($touch) { if ($touch) {
$this->touchIfTouching(); $this->touchIfTouching();
@@ -236,10 +238,6 @@ trait InteractsWithPivotTable
// To create the attachment records, we will simply spin through the IDs given // To create the attachment records, we will simply spin through the IDs given
// and create a new record to insert for each ID. Each ID may actually be a // and create a new record to insert for each ID. Each ID may actually be a
// key in the array, with extra attributes to be placed in other columns. // key in the array, with extra attributes to be placed in other columns.
$attributes = $this->using
? $this->newPivot()->forceFill($attributes)->getAttributes()
: $attributes;
foreach ($ids as $key => $value) { foreach ($ids as $key => $value) {
$records[] = $this->formatAttachRecord( $records[] = $this->formatAttachRecord(
$key, $value, $attributes, $hasTimestamps $key, $value, $attributes, $hasTimestamps
@@ -263,7 +261,7 @@ trait InteractsWithPivotTable
list($id, $attributes) = $this->extractAttachIdAndAttributes($key, $value, $attributes); list($id, $attributes) = $this->extractAttachIdAndAttributes($key, $value, $attributes);
return array_merge( return array_merge(
$this->baseAttachRecord($id, $hasTimestamps), $attributes $this->baseAttachRecord($id, $hasTimestamps), $this->castAttributes($attributes)
); );
} }
@@ -503,4 +501,17 @@ trait InteractsWithPivotTable
{ {
return is_numeric($key) ? (int) $key : (string) $key; return is_numeric($key) ? (int) $key : (string) $key;
} }
/**
* Cast the given pivot attributes.
*
* @param array $attributes
* @return array
*/
protected function castAttributes($attributes)
{
return $this->using
? $this->newPivot()->forceFill($attributes)->getAttributes()
: $attributes;
}
} }

View File

@@ -194,9 +194,13 @@ class MorphTo extends BelongsTo
*/ */
public function associate($model) public function associate($model)
{ {
$this->parent->setAttribute($this->foreignKey, $model->getKey()); $this->parent->setAttribute(
$this->foreignKey, $model instanceof Model ? $model->getKey() : null
);
$this->parent->setAttribute($this->morphType, $model->getMorphClass()); $this->parent->setAttribute(
$this->morphType, $model instanceof Model ? $model->getMorphClass() : null
);
return $this->parent->setRelation($this->relation, $model); return $this->parent->setRelation($this->relation, $model);
} }

View File

@@ -66,7 +66,7 @@ trait SoftDeletes
$this->{$this->getDeletedAtColumn()} = $time; $this->{$this->getDeletedAtColumn()} = $time;
if ($this->timestamps) { if ($this->timestamps && ! is_null($this->getUpdatedAtColumn())) {
$this->{$this->getUpdatedAtColumn()} = $time; $this->{$this->getUpdatedAtColumn()} = $time;
$columns[$this->getUpdatedAtColumn()] = $this->fromDateTime($time); $columns[$this->getUpdatedAtColumn()] = $this->fromDateTime($time);

View File

@@ -741,10 +741,10 @@ class Grammar extends BaseGrammar
*/ */
public function prepareBindingsForUpdate(array $bindings, array $values) public function prepareBindingsForUpdate(array $bindings, array $values)
{ {
$bindingsWithoutJoin = Arr::except($bindings, 'join'); $cleanBindings = Arr::except($bindings, ['join', 'select']);
return array_values( return array_values(
array_merge($bindings['join'], $values, Arr::flatten($bindingsWithoutJoin)) array_merge($bindings['join'], $values, Arr::flatten($cleanBindings))
); );
} }

View File

@@ -29,7 +29,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn
* *
* @var string * @var string
*/ */
const VERSION = '5.5.4'; const VERSION = '5.5.12';
/** /**
* The base path for the Laravel installation. * The base path for the Laravel installation.

View File

@@ -24,7 +24,7 @@ trait AuthenticatesUsers
* Handle a login request to the application. * Handle a login request to the application.
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Http\JsonResponse
*/ */
public function login(Request $request) public function login(Request $request)
{ {
@@ -74,7 +74,7 @@ trait AuthenticatesUsers
protected function attemptLogin(Request $request) protected function attemptLogin(Request $request)
{ {
return $this->guard()->attempt( return $this->guard()->attempt(
$this->credentials($request), $request->has('remember') $this->credentials($request), $request->filled('remember')
); );
} }
@@ -121,7 +121,9 @@ trait AuthenticatesUsers
* Get the failed login response instance. * Get the failed login response instance.
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse * @return \Symfony\Component\HttpFoundation\Response
*
* @throws ValidationException
*/ */
protected function sendFailedLoginResponse(Request $request) protected function sendFailedLoginResponse(Request $request)
{ {

View File

@@ -33,7 +33,7 @@ trait ResetsPasswords
* Reset the given user's password. * Reset the given user's password.
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/ */
public function reset(Request $request) public function reset(Request $request)
{ {
@@ -117,7 +117,7 @@ trait ResetsPasswords
* Get the response for a successful password reset. * Get the response for a successful password reset.
* *
* @param string $response * @param string $response
* @return \Illuminate\Http\RedirectResponse * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/ */
protected function sendResetResponse($response) protected function sendResetResponse($response)
{ {
@@ -130,7 +130,7 @@ trait ResetsPasswords
* *
* @param \Illuminate\Http\Request * @param \Illuminate\Http\Request
* @param string $response * @param string $response
* @return \Illuminate\Http\RedirectResponse * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/ */
protected function sendResetFailedResponse(Request $request, $response) protected function sendResetFailedResponse(Request $request, $response)
{ {

View File

@@ -21,7 +21,7 @@ trait SendsPasswordResetEmails
* Send a reset link to the given user. * Send a reset link to the given user.
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/ */
public function sendResetLinkEmail(Request $request) public function sendResetLinkEmail(Request $request)
{ {
@@ -54,7 +54,7 @@ trait SendsPasswordResetEmails
* Get the response for a successful password reset link. * Get the response for a successful password reset link.
* *
* @param string $response * @param string $response
* @return \Illuminate\Http\RedirectResponse * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/ */
protected function sendResetLinkResponse($response) protected function sendResetLinkResponse($response)
{ {
@@ -66,7 +66,7 @@ trait SendsPasswordResetEmails
* *
* @param \Illuminate\Http\Request * @param \Illuminate\Http\Request
* @param string $response * @param string $response
* @return \Illuminate\Http\RedirectResponse * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/ */
protected function sendResetLinkFailedResponse(Request $request, $response) protected function sendResetLinkFailedResponse(Request $request, $response)
{ {

View File

@@ -383,10 +383,11 @@ class Handler implements ExceptionHandlerContract
{ {
$status = $e->getStatusCode(); $status = $e->getStatusCode();
view()->replaceNamespace('errors', [ $paths = collect(config('view.paths'));
resource_path('views/errors'),
__DIR__.'/views', view()->replaceNamespace('errors', $paths->map(function ($path) {
]); return "{$path}/errors";
})->push(__DIR__.'/views')->all());
if (view()->exists($view = "errors::{$status}")) { if (view()->exists($view = "errors::{$status}")) {
return response()->view($view, ['exception' => $e], $status, $e->getHeaders()); return response()->view($view, ['exception' => $e], $status, $e->getHeaders());

View File

@@ -214,7 +214,7 @@ class ArtisanServiceProvider extends ServiceProvider
protected function registerCacheClearCommand() protected function registerCacheClearCommand()
{ {
$this->app->singleton('command.cache.clear', function ($app) { $this->app->singleton('command.cache.clear', function ($app) {
return new CacheClearCommand($app['cache']); return new CacheClearCommand($app['cache'], $app['files']);
}); });
} }

View File

@@ -241,12 +241,13 @@ class TestResponse
* Assert that the response is a superset of the given JSON. * Assert that the response is a superset of the given JSON.
* *
* @param array $data * @param array $data
* @param bool $strict
* @return $this * @return $this
*/ */
public function assertJson(array $data) public function assertJson(array $data, $strict = false)
{ {
PHPUnit::assertArraySubset( PHPUnit::assertArraySubset(
$data, $this->decodeResponseJson(), false, $this->assertJsonMessage($data) $data, $this->decodeResponseJson(), $strict, $this->assertJsonMessage($data)
); );
return $this; return $this;

View File

@@ -2,6 +2,7 @@
namespace Illuminate\Foundation\Validation; namespace Illuminate\Foundation\Validation;
use Illuminate\Support\Str;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Contracts\Validation\Factory; use Illuminate\Contracts\Validation\Factory;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@@ -25,9 +26,7 @@ trait ValidatesRequests
$validator->validate(); $validator->validate();
return $request->only(collect($validator->getRules())->keys()->map(function ($rule) { return $this->extractInputFromRules($request, $validator->getRules());
return str_contains($rule, '.') ? explode('.', $rule)[0] : $rule;
})->unique()->toArray());
} }
/** /**
@@ -46,8 +45,20 @@ trait ValidatesRequests
->make($request->all(), $rules, $messages, $customAttributes) ->make($request->all(), $rules, $messages, $customAttributes)
->validate(); ->validate();
return $this->extractInputFromRules($request, $rules);
}
/**
* Get the request input based on the given validation rules.
*
* @param \Illuminate\Http\Request $request
* @param array $rules
* @return array
*/
protected function extractInputFromRules(Request $request, array $rules)
{
return $request->only(collect($rules)->keys()->map(function ($rule) { return $request->only(collect($rules)->keys()->map(function ($rule) {
return str_contains($rule, '.') ? explode('.', $rule)[0] : $rule; return Str::contains($rule, '.') ? explode('.', $rule)[0] : $rule;
})->unique()->toArray()); })->unique()->toArray());
} }

View File

@@ -107,9 +107,7 @@ if (! function_exists('app')) {
return Container::getInstance(); return Container::getInstance();
} }
return empty($parameters) return Container::getInstance()->make($abstract, $parameters);
? Container::getInstance()->make($abstract)
: Container::getInstance()->makeWith($abstract, $parameters);
} }
} }
@@ -204,7 +202,7 @@ if (! function_exists('broadcast')) {
* Begin broadcasting an event. * Begin broadcasting an event.
* *
* @param mixed|null $event * @param mixed|null $event
* @return \Illuminate\Broadcasting\PendingBroadcast|void * @return \Illuminate\Broadcasting\PendingBroadcast
*/ */
function broadcast($event = null) function broadcast($event = null)
{ {
@@ -219,7 +217,7 @@ if (! function_exists('cache')) {
* If an array is passed, we'll assume you want to put to the cache. * If an array is passed, we'll assume you want to put to the cache.
* *
* @param dynamic key|key,default|data,expiration|null * @param dynamic key|key,default|data,expiration|null
* @return mixed * @return mixed|\Illuminate\Cache\CacheManager
* *
* @throws \Exception * @throws \Exception
*/ */
@@ -259,7 +257,7 @@ if (! function_exists('config')) {
* *
* @param array|string $key * @param array|string $key
* @param mixed $default * @param mixed $default
* @return mixed * @return mixed|\Illuminate\Config\Repository
*/ */
function config($key = null, $default = null) function config($key = null, $default = null)
{ {
@@ -299,7 +297,7 @@ if (! function_exists('cookie')) {
* @param string $domain * @param string $domain
* @param bool $secure * @param bool $secure
* @param bool $httpOnly * @param bool $httpOnly
* @return \Symfony\Component\HttpFoundation\Cookie * @return \Illuminate\Cookie\CookieJar|\Symfony\Component\HttpFoundation\Cookie
*/ */
function cookie($name = null, $value = null, $minutes = 0, $path = null, $domain = null, $secure = false, $httpOnly = true) function cookie($name = null, $value = null, $minutes = 0, $path = null, $domain = null, $secure = false, $httpOnly = true)
{ {
@@ -818,7 +816,7 @@ if (! function_exists('session')) {
* *
* @param array|string $key * @param array|string $key
* @param mixed $default * @param mixed $default
* @return mixed * @return mixed|\Illuminate\Session\Store|\Illuminate\Session\SessionManager
*/ */
function session($key = null, $default = null) function session($key = null, $default = null)
{ {
@@ -902,9 +900,9 @@ if (! function_exists('__')) {
* @param string $key * @param string $key
* @param array $replace * @param array $replace
* @param string $locale * @param string $locale
* @return \Illuminate\Contracts\Translation\Translator|string * @return string
*/ */
function __($key = null, $replace = [], $locale = null) function __($key, $replace = [], $locale = null)
{ {
return app('translator')->getFromJson($key, $replace, $locale); return app('translator')->getFromJson($key, $replace, $locale);
} }

View File

@@ -42,6 +42,13 @@ class Route
*/ */
public $action; public $action;
/**
* Indicates whether the route is a fallback route.
*
* @var bool
*/
public $isFallback = false;
/** /**
* The controller instance. * The controller instance.
* *
@@ -484,6 +491,18 @@ class Route
return $this; return $this;
} }
/**
* Mark this route as a fallback route.
*
* @return $this
*/
public function fallback()
{
$this->isFallback = true;
return $this;
}
/** /**
* Get the HTTP verbs the route responds to. * Get the HTTP verbs the route responds to.
* *

View File

@@ -189,7 +189,11 @@ class RouteCollection implements Countable, IteratorAggregate
*/ */
protected function matchAgainstRoutes(array $routes, $request, $includingMethod = true) protected function matchAgainstRoutes(array $routes, $request, $includingMethod = true)
{ {
return Arr::first($routes, function ($value) use ($request, $includingMethod) { list($fallbacks, $routes) = collect($routes)->partition(function ($route) {
return $route->isFallback;
});
return $routes->merge($fallbacks)->first(function ($value) use ($request, $includingMethod) {
return $value->matches($request, $includingMethod); return $value->matches($request, $includingMethod);
}); });
} }

View File

@@ -212,6 +212,21 @@ class Router implements RegistrarContract, BindingRegistrar
return $this->addRoute(self::$verbs, $uri, $action); return $this->addRoute(self::$verbs, $uri, $action);
} }
/**
* Register a new Fallback route with the router.
*
* @param \Closure|array|string|null $action
* @return \Illuminate\Routing\Route
*/
public function fallback($action)
{
$placeholder = 'fallbackPlaceholder';
return $this->addRoute(
'GET', "{{$placeholder}}", $action
)->where($placeholder, '.*')->fallback();
}
/** /**
* Create a redirect from one URI to another. * Create a redirect from one URI to another.
* *
@@ -536,6 +551,19 @@ class Router implements RegistrarContract, BindingRegistrar
$route->setAction($this->mergeWithLastGroup($route->getAction())); $route->setAction($this->mergeWithLastGroup($route->getAction()));
} }
/**
* Return the response returned by the given route.
*
* @param string $name
* @return mixed
*/
public function respondWithRoute($name)
{
$route = tap($this->routes->getByName($name))->bind($this->currentRequest);
return $this->runRoute($this->currentRequest, $route);
}
/** /**
* Dispatch the request to the application. * Dispatch the request to the application.
* *
@@ -557,20 +585,7 @@ class Router implements RegistrarContract, BindingRegistrar
*/ */
public function dispatchToRoute(Request $request) public function dispatchToRoute(Request $request)
{ {
// First we will find a route that matches this request. We will also set the return $this->runRoute($request, $this->findRoute($request));
// route resolver on the request so middlewares assigned to the route will
// receive access to this route instance for checking of the parameters.
$route = $this->findRoute($request);
$request->setRouteResolver(function () use ($route) {
return $route;
});
$this->events->dispatch(new Events\RouteMatched($route, $request));
$response = $this->runRouteWithinStack($route, $request);
return $this->prepareResponse($request, $response);
} }
/** /**
@@ -588,6 +603,26 @@ class Router implements RegistrarContract, BindingRegistrar
return $route; return $route;
} }
/**
* Return the response for the given route.
*
* @param Route $route
* @param Request $request
* @return mixed
*/
protected function runRoute(Request $request, Route $route)
{
$request->setRouteResolver(function () use ($route) {
return $route;
});
$this->events->dispatch(new Events\RouteMatched($route, $request));
return $this->prepareResponse($request,
$this->runRouteWithinStack($route, $request)
);
}
/** /**
* Run the given route within a Stack "onion" instance. * Run the given route within a Stack "onion" instance.
* *

View File

@@ -93,7 +93,7 @@ class DatabaseSessionHandler implements SessionHandlerInterface, ExistenceAwareI
if ($this->expired($session)) { if ($this->expired($session)) {
$this->exists = true; $this->exists = true;
return; return '';
} }
if (isset($session->payload)) { if (isset($session->payload)) {
@@ -101,6 +101,8 @@ class DatabaseSessionHandler implements SessionHandlerInterface, ExistenceAwareI
return base64_decode($session->payload); return base64_decode($session->payload);
} }
return '';
} }
/** /**

View File

@@ -1340,7 +1340,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate
*/ */
public function sortBy($callback, $options = SORT_REGULAR, $descending = false) public function sortBy($callback, $options = SORT_REGULAR, $descending = false)
{ {
$results = []; list($values, $results) = [[], []];
$callback = $this->valueRetriever($callback); $callback = $this->valueRetriever($callback);
@@ -1348,16 +1348,19 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate
// function which we were given. Then, we will sort the returned values and // function which we were given. Then, we will sort the returned values and
// and grab the corresponding values for the sorted keys from this array. // and grab the corresponding values for the sorted keys from this array.
foreach ($this->items as $key => $value) { foreach ($this->items as $key => $value) {
$results[$key] = $callback($value, $key); $values[] = $callback($value, $key);
} }
$descending ? arsort($results, $options) $keys = array_keys($this->items);
: asort($results, $options);
$order = $descending ? SORT_DESC : SORT_ASC;
array_multisort($values, $order, $options, $keys, $order);
// Once we have sorted all of the keys in the array, we will loop through them // Once we have sorted all of the keys in the array, we will loop through them
// and grab the corresponding model so we can set the underlying items list // and grab the corresponding model so we can set the underlying items list
// to the sorted version. Then we'll just return the collection instance. // to the sorted version. Then we'll just return the collection instance.
foreach (array_keys($results) as $key) { foreach ($keys as $key) {
$results[$key] = $this->items[$key]; $results[$key] = $this->items[$key];
} }

View File

@@ -3,21 +3,25 @@
namespace Illuminate\Support\Facades; namespace Illuminate\Support\Facades;
/** /**
* @method static \Illuminate\Routing\Route get(string $uri, \Closure|array|string|null $action = null) * @method static \Illuminate\Support\Facades\Route get(string $uri, \Closure|array|string|null $action = null)
* @method static \Illuminate\Routing\Route post(string $uri, \Closure|array|string|null $action = null) * @method static \Illuminate\Support\Facades\Route post(string $uri, \Closure|array|string|null $action = null)
* @method static \Illuminate\Routing\Route put(string $uri, \Closure|array|string|null $action = null) * @method static \Illuminate\Support\Facades\Route put(string $uri, \Closure|array|string|null $action = null)
* @method static \Illuminate\Routing\Route delete(string $uri, \Closure|array|string|null $action = null) * @method static \Illuminate\Support\Facades\Route delete(string $uri, \Closure|array|string|null $action = null)
* @method static \Illuminate\Routing\Route patch(string $uri, \Closure|array|string|null $action = null) * @method static \Illuminate\Support\Facades\Route patch(string $uri, \Closure|array|string|null $action = null)
* @method static \Illuminate\Routing\Route options(string $uri, \Closure|array|string|null $action = null) * @method static \Illuminate\Support\Facades\Route options(string $uri, \Closure|array|string|null $action = null)
* @method static \Illuminate\Routing\Route any(string $uri, \Closure|array|string|null $action = null) * @method static \Illuminate\Support\Facades\Route any(string $uri, \Closure|array|string|null $action = null)
* @method static \Illuminate\Routing\Route match(array|string $methods, string $uri, \Closure|array|string|null $action = null) * @method static \Illuminate\Support\Facades\Route match(array|string $methods, string $uri, \Closure|array|string|null $action = null)
* @method static \Illuminate\Routing\Route prefix(string $prefix) * @method static \Illuminate\Support\Facades\Route prefix(string $prefix)
* @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = []) * @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = [])
* @method static \Illuminate\Routing\PendingResourceRegistration apiResource(string $name, string $controller, array $options = []) * @method static \Illuminate\Routing\PendingResourceRegistration apiResource(string $name, string $controller, array $options = [])
* @method static void group(array $attributes, \Closure|string $callback) * @method static \Illuminate\Support\Facades\Route middleware(array|string|null $middleware)
* @method static \Illuminate\Routing\Route middleware(array|string|null $middleware) * @method static \Illuminate\Support\Facades\Route substituteBindings(\Illuminate\Support\Facades\Route $route)
* @method static \Illuminate\Routing\Route substituteBindings(\Illuminate\Routing\Route $route) * @method static void substituteImplicitBindings(\Illuminate\Support\Facades\Route $route)
* @method static void substituteImplicitBindings(\Illuminate\Routing\Route $route) * @method \Illuminate\Support\Facades\Route as(string $value)
* @method \Illuminate\Support\Facades\Route domain(string $value)
* @method \Illuminate\Support\Facades\Route name(string $value)
* @method \Illuminate\Support\Facades\Route namespace(string $value)
* @method \Illuminate\Routing\Route group(string $value)
* *
* @see \Illuminate\Routing\Router * @see \Illuminate\Routing\Router
*/ */

View File

@@ -24,9 +24,11 @@ class Pluralizer
'equipment', 'equipment',
'evidence', 'evidence',
'feedback', 'feedback',
'firmware',
'fish', 'fish',
'furniture', 'furniture',
'gold', 'gold',
'hardware',
'information', 'information',
'jedi', 'jedi',
'knowledge', 'knowledge',
@@ -44,6 +46,7 @@ class Pluralizer
'rice', 'rice',
'series', 'series',
'sheep', 'sheep',
'software',
'species', 'species',
'swine', 'swine',
'traffic', 'traffic',

View File

@@ -118,7 +118,7 @@ class Str
public static function endsWith($haystack, $needles) public static function endsWith($haystack, $needles)
{ {
foreach ((array) $needles as $needle) { foreach ((array) $needles as $needle) {
if (substr($haystack, -strlen($needle)) === (string) $needle) { if (mb_substr($haystack, -mb_strlen($needle)) === (string) $needle) {
return true; return true;
} }
} }
@@ -328,10 +328,10 @@ class Str
return $subject; return $subject;
} }
$position = strpos($subject, $search); $position = mb_strpos($subject, $search);
if ($position !== false) { if ($position !== false) {
return substr_replace($subject, $replace, $position, strlen($search)); return mb_substr($subject, 0, $position).$replace.mb_substr($subject, $position + mb_strlen($search));
} }
return $subject; return $subject;
@@ -347,10 +347,10 @@ class Str
*/ */
public static function replaceLast($search, $replace, $subject) public static function replaceLast($search, $replace, $subject)
{ {
$position = strrpos($subject, $search); $position = mb_strrpos($subject, $search);
if ($position !== false) { if ($position !== false) {
return substr_replace($subject, $replace, $position, strlen($search)); return mb_substr($subject, 0, $position).$replace.mb_substr($subject, $position + mb_strlen($search));
} }
return $subject; return $subject;
@@ -466,7 +466,7 @@ class Str
public static function startsWith($haystack, $needles) public static function startsWith($haystack, $needles)
{ {
foreach ((array) $needles as $needle) { foreach ((array) $needles as $needle) {
if ($needle !== '' && substr($haystack, 0, strlen($needle)) === (string) $needle) { if ($needle !== '' && mb_substr($haystack, 0, mb_strlen($needle)) === (string) $needle) {
return true; return true;
} }
} }

View File

@@ -190,6 +190,8 @@ trait FormatsMessages
$message, $this->getDisplayableAttribute($attribute) $message, $this->getDisplayableAttribute($attribute)
); );
$message = $this->replaceInputPlaceholder($message, $attribute);
if (isset($this->replacers[Str::snake($rule)])) { if (isset($this->replacers[Str::snake($rule)])) {
return $this->callReplacer($message, $attribute, Str::snake($rule), $parameters, $this); return $this->callReplacer($message, $attribute, Str::snake($rule), $parameters, $this);
} elseif (method_exists($this, $replacer = "replace{$rule}")) { } elseif (method_exists($this, $replacer = "replace{$rule}")) {
@@ -265,6 +267,24 @@ trait FormatsMessages
); );
} }
/**
* Replace the :input placeholder in the given message.
*
* @param string $message
* @param string $value
* @return string
*/
protected function replaceInputPlaceholder($message, $attribute)
{
$actualValue = $this->getValue($attribute);
if (is_scalar($actualValue) || is_null($actualValue)) {
$message = str_replace(':input', $actualValue, $message);
}
return $message;
}
/** /**
* Get the displayable name of the value. * Get the displayable name of the value.
* *

View File

@@ -53,4 +53,17 @@ trait CompilesIncludes
return "<?php echo \$__env->renderWhen($expression, array_except(get_defined_vars(), array('__data', '__path'))); ?>"; return "<?php echo \$__env->renderWhen($expression, array_except(get_defined_vars(), array('__data', '__path'))); ?>";
} }
/**
* Compile the include-first statements into valid PHP.
*
* @param string $expression
* @return string
*/
protected function compileIncludeFirst($expression)
{
$expression = $this->stripParentheses($expression);
return "<?php echo \$__env->first({$expression}, array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>";
}
} }

View File

@@ -7,6 +7,8 @@ php:
- 7.0snapshot - 7.0snapshot
- 7.1 - 7.1
- 7.1snapshot - 7.1snapshot
- 7.2
- 7.2snapshot
- master - master
env: env:

View File

@@ -2,6 +2,12 @@
All notable changes of the PHPUnit 5.7 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. All notable changes of the PHPUnit 5.7 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [5.7.22] - 2017-09-24
### Fixed
* Fixed [#2769](https://github.com/sebastianbergmann/phpunit/issues/2769): Usage of `setUseErrorHandler()` produces `Undefined variable` error
## [5.7.21] - 2017-06-21 ## [5.7.21] - 2017-06-21
### Added ### Added
@@ -171,6 +177,7 @@ All notable changes of the PHPUnit 5.7 release series are documented in this fil
* The `--tap` and `--log-tap` commandline options have been deprecated * The `--tap` and `--log-tap` commandline options have been deprecated
* The `--self-update` and `--self-upgrade` commandline options have been deprecated (PHAR binary only) * The `--self-update` and `--self-upgrade` commandline options have been deprecated (PHAR binary only)
[5.7.22]: https://github.com/sebastianbergmann/phpunit/compare/5.7.21...5.7.22
[5.7.21]: https://github.com/sebastianbergmann/phpunit/compare/5.7.20...5.7.21 [5.7.21]: https://github.com/sebastianbergmann/phpunit/compare/5.7.20...5.7.21
[5.7.20]: https://github.com/sebastianbergmann/phpunit/compare/5.7.19...5.7.20 [5.7.20]: https://github.com/sebastianbergmann/phpunit/compare/5.7.19...5.7.20
[5.7.19]: https://github.com/sebastianbergmann/phpunit/compare/5.7.18...5.7.19 [5.7.19]: https://github.com/sebastianbergmann/phpunit/compare/5.7.18...5.7.19

View File

@@ -2,6 +2,12 @@
All notable changes of the PHPUnit 6.3 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. All notable changes of the PHPUnit 6.3 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [6.3.1] - 2017-09-24
### Fixed
* Fixed [#2769](https://github.com/sebastianbergmann/phpunit/issues/2769): Usage of `setUseErrorHandler()` produces `Undefined variable` error
## [6.3.0] - 2017-08-04 ## [6.3.0] - 2017-08-04
### Added ### Added
@@ -13,5 +19,6 @@ All notable changes of the PHPUnit 6.3 release series are documented in this fil
* Implemented [#2751](https://github.com/sebastianbergmann/phpunit/pull/2751): Use `fopen()` instead of `is_readable()` to check if a file is readable (workaround for Windows and network shares) * Implemented [#2751](https://github.com/sebastianbergmann/phpunit/pull/2751): Use `fopen()` instead of `is_readable()` to check if a file is readable (workaround for Windows and network shares)
[6.3.1]: https://github.com/sebastianbergmann/phpunit/compare/6.3.0...6.3.1
[6.3.0]: https://github.com/sebastianbergmann/phpunit/compare/6.2...6.3.0 [6.3.0]: https://github.com/sebastianbergmann/phpunit/compare/6.2...6.3.0

View File

@@ -4,7 +4,7 @@ PHPUnit is a programmer-oriented testing framework for PHP. It is an instance of
[![Latest Stable Version](https://img.shields.io/packagist/v/phpunit/phpunit.svg?style=flat-square)](https://packagist.org/packages/phpunit/phpunit) [![Latest Stable Version](https://img.shields.io/packagist/v/phpunit/phpunit.svg?style=flat-square)](https://packagist.org/packages/phpunit/phpunit)
[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.0-8892BF.svg?style=flat-square)](https://php.net/) [![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%207.0-8892BF.svg?style=flat-square)](https://php.net/)
[![Build Status](https://img.shields.io/travis/sebastianbergmann/phpunit/master.svg?style=flat-square)](https://phpunit.de/build-status.html) [![Build Status](https://img.shields.io/travis/sebastianbergmann/phpunit/6.3.svg?style=flat-square)](https://phpunit.de/build-status.html)
## Installation ## Installation

View File

@@ -9,8 +9,6 @@
*/ */
namespace PHPUnit\Framework\Constraint; namespace PHPUnit\Framework\Constraint;
use numeric;
/** /**
* Constraint that asserts that the value it is evaluated for is greater * Constraint that asserts that the value it is evaluated for is greater
* than a given value. * than a given value.
@@ -18,16 +16,17 @@ use numeric;
class GreaterThan extends Constraint class GreaterThan extends Constraint
{ {
/** /**
* @var numeric * @var int|float
*/ */
protected $value; protected $value;
/** /**
* @param numeric $value * @param int|float $value
*/ */
public function __construct($value) public function __construct($value)
{ {
parent::__construct(); parent::__construct();
$this->value = $value; $this->value = $value;
} }

View File

@@ -9,8 +9,6 @@
*/ */
namespace PHPUnit\Framework\Constraint; namespace PHPUnit\Framework\Constraint;
use numeric;
/** /**
* Constraint that asserts that the value it is evaluated for is less than * Constraint that asserts that the value it is evaluated for is less than
* a given value. * a given value.
@@ -18,16 +16,17 @@ use numeric;
class LessThan extends Constraint class LessThan extends Constraint
{ {
/** /**
* @var numeric * @var int|float
*/ */
protected $value; protected $value;
/** /**
* @param numeric $value * @param int|float $value
*/ */
public function __construct($value) public function __construct($value)
{ {
parent::__construct(); parent::__construct();
$this->value = $value; $this->value = $value;
} }

View File

@@ -883,7 +883,7 @@ abstract class TestCase extends Assert implements Test, SelfDescribing
$result->run($this); $result->run($this);
} }
if ($this->useErrorHandler !== null) { if (isset($oldErrorHandlerSetting)) {
$result->convertErrorsToExceptions($oldErrorHandlerSetting); $result->convertErrorsToExceptions($oldErrorHandlerSetting);
} }

View File

@@ -32,7 +32,7 @@ class Version
} }
if (self::$version === null) { if (self::$version === null) {
$version = new VersionId('6.3.0', \dirname(\dirname(__DIR__))); $version = new VersionId('6.3.1', \dirname(\dirname(__DIR__)));
self::$version = $version->getVersion(); self::$version = $version->getVersion();
} }

View File

@@ -19,7 +19,7 @@ PHPUnit %s by Sebastian Bergmann and contributors.
##teamcity[testStarted name='testPrintingChildException' locationHint='php_qn://%s%etests%e_files%eExceptionStackTest.php::\ExceptionStackTest::testPrintingChildException' flowId='%d'] ##teamcity[testStarted name='testPrintingChildException' locationHint='php_qn://%s%etests%e_files%eExceptionStackTest.php::\ExceptionStackTest::testPrintingChildException' flowId='%d']
##teamcity[testFailed name='testPrintingChildException' message='Child exception|nmessage|nFailed asserting that two arrays are equal.|n--- Expected|n+++ Actual|n@@ @@|n Array (|n- 0 => 1|n+ 0 => 2|n' details=' %s/ExceptionStackTest.php:14|n |n Caused by|n message|n Failed asserting that two arrays are equal.|n --- Expected|n +++ Actual|n @@ @@|n Array (|n - 0 => 1|n + 0 => 2|n |n %s/ExceptionStackTest.php:10|n ' flowId='%d'] ##teamcity[testFailed name='testPrintingChildException' message='Child exception|nmessage|nFailed asserting that two arrays are equal.|n--- Expected|n+++ Actual|n@@ @@|n Array (|n- 0 => 1|n+ 0 => 2|n' details=' %s%eExceptionStackTest.php:14|n |n Caused by|n message|n Failed asserting that two arrays are equal.|n --- Expected|n +++ Actual|n @@ @@|n Array (|n - 0 => 1|n + 0 => 2|n |n %s%eExceptionStackTest.php:10|n ' flowId='%d']
##teamcity[testFinished name='testPrintingChildException' duration='%d' flowId='%d'] ##teamcity[testFinished name='testPrintingChildException' duration='%d' flowId='%d']

View File

@@ -1,5 +1,10 @@
# ramsey/uuid Changelog # ramsey/uuid Changelog
## 3.7.1
* Use `random_bytes()` when generating random nodes
* Set the multicast bit for random nodes, according to RFC 4122, §4.5, [#170](https://github.com/ramsey/uuid/pull/170), [#171](https://github.com/ramsey/uuid/pull/171), [#182](https://github.com/ramsey/uuid/pull/182)
## 3.7.0 ## 3.7.0
_Released: 2017-08-04_ _Released: 2017-08-04_

View File

@@ -31,6 +31,11 @@ class RandomNodeProvider implements NodeProviderInterface
*/ */
public function getNode() public function getNode()
{ {
return sprintf('%06x%06x', mt_rand(0, 0xffffff), mt_rand(0, 0xffffff)); $node = hexdec(bin2hex(random_bytes(6)));
// Set the multicast bit; see RFC 4122, section 4.5.
$node = $node | 0x010000000000;
return str_pad(dechex($node), 12, '0', STR_PAD_LEFT);
} }
} }