This commit is contained in:
shibafu 2019-01-15 00:05:01 +09:00
parent a2f797cbbe
commit faf0755ebd
44 changed files with 87 additions and 68 deletions

View File

@ -30,6 +30,8 @@ class Ejaculation extends Model
public function textTags() public function textTags()
{ {
return implode(' ', $this->tags->map(function ($v) { return $v->name; })->all()); return implode(' ', $this->tags->map(function ($v) {
return $v->name;
})->all());
} }
} }

View File

@ -2,9 +2,9 @@
namespace App\Events; namespace App\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class LinkDiscovered class LinkDiscovered
{ {

View File

@ -10,4 +10,4 @@ class Formatter extends Facade
{ {
return \App\Utilities\Formatter::class; return \App\Utilities\Formatter::class;
} }
} }

View File

@ -2,10 +2,10 @@
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator; use App\User;
use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller class RegisterController extends Controller
{ {
@ -58,7 +58,9 @@ class RegisterController extends Controller
$rules['g-recaptcha-response'] = 'required|captcha'; $rules['g-recaptcha-response'] = 'required|captcha';
} }
return Validator::make($data, $rules, return Validator::make(
$data,
$rules,
['name.regex' => 'ユーザー名には半角英数字とアンダーバー、ハイフンのみ使用できます。'], ['name.regex' => 'ユーザー名には半角英数字とアンダーバー、ハイフンのみ使用できます。'],
['name' => 'ユーザー名'] ['name' => 'ユーザー名']
); );

View File

@ -2,10 +2,10 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController class Controller extends BaseController
{ {

View File

@ -2,14 +2,14 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Ejaculation;
use App\Events\LinkDiscovered; use App\Events\LinkDiscovered;
use App\Tag; use App\Tag;
use App\User; use App\User;
use Carbon\Carbon; use Carbon\Carbon;
use Validator;
use App\Ejaculation;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Validator;
class EjaculationController extends Controller class EjaculationController extends Controller
{ {
@ -104,6 +104,7 @@ class EjaculationController extends Controller
public function edit($id) public function edit($id)
{ {
$ejaculation = Ejaculation::findOrFail($id); $ejaculation = Ejaculation::findOrFail($id);
return view('ejaculation.edit')->with(compact('ejaculation')); return view('ejaculation.edit')->with(compact('ejaculation'));
} }
@ -166,6 +167,7 @@ class EjaculationController extends Controller
$user = User::findOrFail($ejaculation->user_id); $user = User::findOrFail($ejaculation->user_id);
$ejaculation->tags()->detach(); $ejaculation->tags()->detach();
$ejaculation->delete(); $ejaculation->delete();
return redirect()->route('user.profile', ['name' => $user->name])->with('status', '削除しました。'); return redirect()->route('user.profile', ['name' => $user->name])->with('status', '削除しました。');
} }
} }

View File

@ -14,6 +14,7 @@ class InfoController extends Controller
->orderByDesc('pinned') ->orderByDesc('pinned')
->orderByDesc('created_at') ->orderByDesc('created_at')
->paginate(20); ->paginate(20);
return view('info.index')->with([ return view('info.index')->with([
'informations' => $informations, 'informations' => $informations,
'categories' => Information::CATEGORIES 'categories' => Information::CATEGORIES
@ -23,6 +24,7 @@ class InfoController extends Controller
public function show($id) public function show($id)
{ {
$information = Information::findOrFail($id); $information = Information::findOrFail($id);
return view('info.show')->with([ return view('info.show')->with([
'info' => $information, 'info' => $information,
'category' => Information::CATEGORIES[$information->category] 'category' => Information::CATEGORIES[$information->category]

View File

@ -38,4 +38,4 @@ class SearchController extends Controller
return view('search.relatedTag')->with(compact('inputs', 'results')); return view('search.relatedTag')->with(compact('inputs', 'results'));
} }
} }

View File

@ -21,7 +21,8 @@ class UserController extends Controller
} }
// チェックインの取得 // チェックインの取得
$query = Ejaculation::select(DB::raw(<<<'SQL' $query = Ejaculation::select(DB::raw(
<<<'SQL'
id, id,
ejaculated_date, ejaculated_date,
note, note,
@ -63,7 +64,8 @@ SQL
abort(404); abort(404);
} }
$groupByDay = Ejaculation::select(DB::raw(<<<'SQL' $groupByDay = Ejaculation::select(DB::raw(
<<<'SQL'
to_char(ejaculated_date, 'YYYY/MM/DD') AS "date", to_char(ejaculated_date, 'YYYY/MM/DD') AS "date",
count(*) AS "count" count(*) AS "count"
SQL SQL
@ -73,7 +75,8 @@ SQL
->orderBy(DB::raw("to_char(ejaculated_date, 'YYYY/MM/DD')")) ->orderBy(DB::raw("to_char(ejaculated_date, 'YYYY/MM/DD')"))
->get(); ->get();
$groupByHour = Ejaculation::select(DB::raw(<<<'SQL' $groupByHour = Ejaculation::select(DB::raw(
<<<'SQL'
to_char(ejaculated_date, 'HH24') AS "hour", to_char(ejaculated_date, 'HH24') AS "hour",
count(*) AS "count" count(*) AS "count"
SQL SQL
@ -133,7 +136,8 @@ SQL
} }
// チェックインの取得 // チェックインの取得
$query = Ejaculation::select(DB::raw(<<<'SQL' $query = Ejaculation::select(DB::raw(
<<<'SQL'
id, id,
ejaculated_date, ejaculated_date,
note, note,

View File

@ -58,4 +58,4 @@ SQL
$view->with(compact('latestEjaculation', 'currentSession', 'summary')); $view->with(compact('latestEjaculation', 'currentSession', 'summary'));
} }
} }

View File

@ -7,8 +7,8 @@ use App\Metadata;
use App\MetadataResolver\MetadataResolver; use App\MetadataResolver\MetadataResolver;
use App\Utilities\Formatter; use App\Utilities\Formatter;
use GuzzleHttp\Exception\TransferException; use GuzzleHttp\Exception\TransferException;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
class LinkCollector class LinkCollector

View File

@ -12,9 +12,10 @@ class DLsiteResolver implements Resolver
$ogpResolver = new OGPResolver(); $ogpResolver = new OGPResolver();
$metadata = $ogpResolver->parse($res->getBody()); $metadata = $ogpResolver->parse($res->getBody());
$metadata->image = str_replace("img_sam.jpg", "img_main.jpg", $metadata->image); $metadata->image = str_replace("img_sam.jpg", "img_main.jpg", $metadata->image);
return $metadata; return $metadata;
} else { } else {
throw new \RuntimeException("{$res->getStatusCode()}: $url"); throw new \RuntimeException("{$res->getStatusCode()}: $url");
} }
} }
} }

View File

@ -25,7 +25,7 @@ class FantiaResolver implements Resolver
$ogpUrl = $node->getAttribute('content'); $ogpUrl = $node->getAttribute('content');
// 投稿に画像がない場合ogp.jpgでない場合のみ大きい画像に変換する // 投稿に画像がない場合ogp.jpgでない場合のみ大きい画像に変換する
if($ogpUrl != "http://fantia.jp/images/ogp.jpg"){ if ($ogpUrl != "http://fantia.jp/images/ogp.jpg") {
preg_match("~https://fantia\.s3\.amazonaws\.com/uploads/post/file/{$postId}/ogp_(.*?)\.(jpg|png)~", $ogpUrl, $match); preg_match("~https://fantia\.s3\.amazonaws\.com/uploads/post/file/{$postId}/ogp_(.*?)\.(jpg|png)~", $ogpUrl, $match);
$uuid = $match[1]; $uuid = $match[1];
$extension = $match[2]; $extension = $match[2];

View File

@ -54,4 +54,4 @@ class IwaraResolver implements Resolver
throw new \RuntimeException("{$res->getStatusCode()}: $url"); throw new \RuntimeException("{$res->getStatusCode()}: $url");
} }
} }
} }

View File

@ -27,4 +27,4 @@ class KomifloResolver implements Resolver
throw new \RuntimeException("{$res->getStatusCode()}: $url"); throw new \RuntimeException("{$res->getStatusCode()}: $url");
} }
} }
} }

View File

@ -26,4 +26,4 @@ class MelonbooksResolver implements Resolver
throw new \RuntimeException("{$res->getStatusCode()}: $url"); throw new \RuntimeException("{$res->getStatusCode()}: $url");
} }
} }
} }

View File

@ -7,4 +7,4 @@ class Metadata
public $title = ''; public $title = '';
public $description = ''; public $description = '';
public $image = ''; public $image = '';
} }

View File

@ -21,11 +21,12 @@ class MetadataResolver implements Resolver
{ {
foreach ($this->rules as $pattern => $class) { foreach ($this->rules as $pattern => $class) {
if (preg_match($pattern, $url) === 1) { if (preg_match($pattern, $url) === 1) {
$resolver = new $class; $resolver = new $class();
return $resolver->resolve($url); return $resolver->resolve($url);
} }
} }
throw new \UnexpectedValueException('URL not matched.'); throw new \UnexpectedValueException('URL not matched.');
} }
} }

View File

@ -21,4 +21,4 @@ class NicoSeigaResolver implements Resolver
throw new \RuntimeException("{$res->getStatusCode()}: $url"); throw new \RuntimeException("{$res->getStatusCode()}: $url");
} }
} }
} }

View File

@ -37,4 +37,4 @@ class NijieResolver implements Resolver
throw new \RuntimeException("{$res->getStatusCode()}: $url"); throw new \RuntimeException("{$res->getStatusCode()}: $url");
} }
} }
} }

View File

@ -41,6 +41,7 @@ class OGPResolver implements Resolver
} }
} }
} }
return ''; return '';
} }
} }

View File

@ -4,17 +4,17 @@ namespace App\MetadataResolver;
class PixivResolver implements Resolver class PixivResolver implements Resolver
{ {
/** /**
* サムネイル画像 URL から最大長辺 1200px の画像 URL に変換する * サムネイル画像 URL から最大長辺 1200px の画像 URL に変換する
* *
* @param string $thumbnailUrl サムネイル画像 URL * @param string $thumbnailUrl サムネイル画像 URL
* @return string 1200px の画像 URL * @return string 1200px の画像 URL
*/ */
public function thumbnailToMasterUrl(string $thumbnailUrl):string public function thumbnailToMasterUrl(string $thumbnailUrl): string
{ {
$temp = str_replace("/c/128x128", "", $thumbnailUrl); $temp = str_replace("/c/128x128", "", $thumbnailUrl);
$largeUrl = str_replace("square1200.jpg", "master1200.jpg", $temp); $largeUrl = str_replace("square1200.jpg", "master1200.jpg", $temp);
return $largeUrl; return $largeUrl;
} }
@ -25,7 +25,7 @@ class PixivResolver implements Resolver
* @param string $pixivUrl i.pximg URL * @param string $pixivUrl i.pximg URL
* @return string i.pixiv.cat URL * @return string i.pixiv.cat URL
*/ */
public function proxize(string $pixivUrl):string public function proxize(string $pixivUrl): string
{ {
return str_replace("i.pximg.net", "i.pixiv.cat", $pixivUrl); return str_replace("i.pximg.net", "i.pixiv.cat", $pixivUrl);
} }

View File

@ -5,4 +5,4 @@ namespace App\MetadataResolver;
interface Resolver interface Resolver
{ {
public function resolve(string $url): Metadata; public function resolve(string $url): Metadata;
} }

View File

@ -14,9 +14,10 @@ class ToranoanaResolver implements Resolver
$res = $client->get($url, ['cookies' => $cookieJar]); $res = $client->get($url, ['cookies' => $cookieJar]);
if ($res->getStatusCode() === 200) { if ($res->getStatusCode() === 200) {
$ogpResolver = new OGPResolver(); $ogpResolver = new OGPResolver();
return $ogpResolver->parse($res->getBody()); return $ogpResolver->parse($res->getBody());
} else { } else {
throw new \RuntimeException("{$res->getStatusCode()}: $url"); throw new \RuntimeException("{$res->getStatusCode()}: $url");
} }
} }
} }

View File

@ -2,8 +2,8 @@
namespace App\Providers; namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider class AuthServiceProvider extends ServiceProvider
{ {

View File

@ -2,8 +2,8 @@
namespace App\Providers; namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast; use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;
class BroadcastServiceProvider extends ServiceProvider class BroadcastServiceProvider extends ServiceProvider
{ {

View File

@ -2,8 +2,8 @@
namespace App\Providers; namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider class EventServiceProvider extends ServiceProvider
{ {

View File

@ -2,8 +2,8 @@
namespace App\Providers; namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider class RouteServiceProvider extends ServiceProvider
{ {

View File

@ -2,8 +2,8 @@
namespace App; namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class User extends Authenticatable class User extends Authenticatable
@ -36,9 +36,10 @@ class User extends Authenticatable
* @param int $size 画像サイズ * @param int $size 画像サイズ
* @return string Gravatar 画像URL * @return string Gravatar 画像URL
*/ */
public function getProfileImageUrl($size = 30) : string public function getProfileImageUrl($size = 30): string
{ {
$hash = md5(strtolower(trim($this->email))); $hash = md5(strtolower(trim($this->email)));
return '//www.gravatar.com/avatar/' . $hash . '?s=' . $size; return '//www.gravatar.com/avatar/' . $hash . '?s=' . $size;
} }

View File

@ -24,6 +24,7 @@ class Formatter
$days = floor($value / 86400); $days = floor($value / 86400);
$hours = floor($value % 86400 / 3600); $hours = floor($value % 86400 / 3600);
$minutes = floor($value % 3600 / 60); $minutes = floor($value % 3600 / 60);
return "{$days}{$hours}時間 {$minutes}"; return "{$days}{$hours}時間 {$minutes}";
} }
@ -61,4 +62,4 @@ class Formatter
return $url; return $url;
} }
} }

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration class CreateUsersTable extends Migration
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePasswordResetsTable extends Migration class CreatePasswordResetsTable extends Migration
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateEjaculationsTable extends Migration class CreateEjaculationsTable extends Migration
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateInformationTable extends Migration class CreateInformationTable extends Migration
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddLinkToEjaculations extends Migration class AddLinkToEjaculations extends Migration
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTagsTable extends Migration class CreateTagsTable extends Migration
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMetadataTable extends Migration class CreateMetadataTable extends Migration
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class RecreateMetadataTable extends Migration class RecreateMetadataTable extends Migration
{ {

View File

@ -1,8 +1,8 @@
<?php <?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ChangeLinkOnEjaculations extends Migration class ChangeLinkOnEjaculations extends Migration
{ {

View File

@ -121,4 +121,4 @@ return [
'password' => 'パスワード', 'password' => 'パスワード',
], ],
]; ];

View File

@ -40,5 +40,6 @@ Route::get('/checkin/card', function (Request $request, MetadataResolver $resolv
if (!config('app.debug')) { if (!config('app.debug')) {
$response = $response->setCache(['public' => true, 'max_age' => 86400]); $response = $response->setCache(['public' => true, 'max_age' => 86400]);
} }
return $response; return $response;
}); });

View File

@ -15,7 +15,7 @@ Auth::routes();
Route::get('/', 'HomeController@index')->name('home'); Route::get('/', 'HomeController@index')->name('home');
Route::get('/user', function() { Route::get('/user', function () {
return redirect()->route('user.profile', ['name' => Auth::user()->name]); return redirect()->route('user.profile', ['name' => Auth::user()->name]);
})->middleware('auth')->name('user.profile'); })->middleware('auth')->name('user.profile');
Route::get('/user/{name?}', 'UserController@profile')->name('user.profile'); Route::get('/user/{name?}', 'UserController@profile')->name('user.profile');
@ -36,4 +36,4 @@ Route::get('/info/{id}', 'InfoController@show')->where('id', '[0-9]+')->name('in
Route::redirect('/search', '/search/checkin', 301); Route::redirect('/search', '/search/checkin', 301);
Route::get('/search/checkin', 'SearchController@index')->name('search'); Route::get('/search/checkin', 'SearchController@index')->name('search');
Route::get('/search/related-tag', 'SearchController@relatedTag')->name('search.related-tag'); Route::get('/search/related-tag', 'SearchController@relatedTag')->name('search.related-tag');

View File

@ -2,10 +2,10 @@
namespace Tests\Feature; namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;
class ExampleTest extends TestCase class ExampleTest extends TestCase
{ {

View File

@ -2,9 +2,9 @@
namespace Tests\Unit; namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\TestCase;
class ExampleTest extends TestCase class ExampleTest extends TestCase
{ {