Jeeeede Menge updates.

This commit is contained in:
2023-02-23 18:58:41 +01:00
parent f7cc73da22
commit dbf004b0b0
118 changed files with 46202 additions and 32 deletions

View File

@@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthenticatedSessionController extends Controller
{
/**
* Display the login view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.login');
}
/**
* Handle an incoming authentication request.
*
* @param \App\Http\Requests\Auth\LoginRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(LoginRequest $request)
{
$request->authenticate();
$request->session()->regenerate();
return redirect()->intended(RouteServiceProvider::HOME);
}
/**
* Destroy an authenticated session.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(Request $request)
{
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
class ConfirmablePasswordController extends Controller
{
/**
* Show the confirm password view.
*
* @return \Illuminate\View\View
*/
public function show()
{
return view('auth.confirm-password');
}
/**
* Confirm the user's password.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function store(Request $request)
{
if (! Auth::guard('web')->validate([
'email' => $request->user()->email,
'password' => $request->password,
])) {
throw ValidationException::withMessages([
'password' => __('auth.password'),
]);
}
$request->session()->put('auth.password_confirmed_at', time());
return redirect()->intended(RouteServiceProvider::HOME);
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
class EmailVerificationNotificationController extends Controller
{
/**
* Send a new email verification notification.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
{
if ($request->user()->hasVerifiedEmail()) {
return redirect()->intended(RouteServiceProvider::HOME);
}
$request->user()->sendEmailVerificationNotification();
return back()->with('status', 'verification-link-sent');
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
class EmailVerificationPromptController extends Controller
{
/**
* Display the email verification prompt.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function __invoke(Request $request)
{
return $request->user()->hasVerifiedEmail()
? redirect()->intended(RouteServiceProvider::HOME)
: view('auth.verify-email');
}
}

View File

@@ -0,0 +1,65 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\PasswordReset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules;
class NewPasswordController extends Controller
{
/**
* Display the password reset view.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\View
*/
public function create(Request $request)
{
return view('auth.reset-password', ['request' => $request]);
}
/**
* Handle an incoming new password request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'token' => ['required'],
'email' => ['required', 'email'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
// Here we will attempt to reset the user's password. If it is successful we
// will update the password on an actual user model and persist it to the
// database. Otherwise we will parse the error and return the response.
$status = Password::reset(
$request->only('email', 'password', 'password_confirmation', 'token'),
function ($user) use ($request) {
$user->forceFill([
'password' => Hash::make($request->password),
'remember_token' => Str::random(60),
])->save();
event(new PasswordReset($user));
}
);
// If the password was successfully reset, we will redirect the user back to
// the application's home authenticated view. If there is an error we can
// redirect them back to where they came from with their error message.
return $status == Password::PASSWORD_RESET
? redirect()->route('login')->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
}

View File

@@ -0,0 +1,47 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password;
class PasswordResetLinkController extends Controller
{
/**
* Display the password reset link request view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.forgot-password');
}
/**
* Handle an incoming password reset link request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'email' => ['required', 'email'],
]);
// We will send the password reset link to this user. Once we have attempted
// to send the link, we will examine the response then see the message we
// need to show to the user. Finally, we'll send out a proper response.
$status = Password::sendResetLink(
$request->only('email')
);
return $status == Password::RESET_LINK_SENT
? back()->with('status', __($status))
: back()->withInput($request->only('email'))
->withErrors(['email' => __($status)]);
}
}

View File

@@ -0,0 +1,54 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules;
class RegisteredUserController extends Controller
{
/**
* Display the registration view.
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('auth.register');
}
/**
* Handle an incoming registration request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
event(new Registered($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Verified;
use Illuminate\Foundation\Auth\EmailVerificationRequest;
class VerifyEmailController extends Controller
{
/**
* Mark the authenticated user's email address as verified.
*
* @param \Illuminate\Foundation\Auth\EmailVerificationRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function __invoke(EmailVerificationRequest $request)
{
if ($request->user()->hasVerifiedEmail()) {
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
}
if ($request->user()->markEmailAsVerified()) {
event(new Verified($request->user()));
}
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
}
}

View File

@@ -0,0 +1,75 @@
<?php
namespace App\Http\Helpers;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Tmdb\Client;
use Tmdb\Event\BeforeRequestEvent;
use Tmdb\Event\HttpClientExceptionEvent;
use Tmdb\Event\Listener\Logger\LogApiErrorListener;
use Tmdb\Event\Listener\Logger\LogHttpMessageListener;
use Tmdb\Event\Listener\Request\AcceptJsonRequestListener;
use Tmdb\Event\Listener\Request\ApiTokenRequestListener;
use Tmdb\Event\Listener\Request\ContentTypeJsonRequestListener;
use Tmdb\Event\Listener\Request\LanguageFilterRequestListener;
use Tmdb\Event\Listener\Request\UserAgentRequestListener;
use Tmdb\Event\Listener\RequestListener;
use Tmdb\Event\RequestEvent;
use Tmdb\Event\ResponseEvent;
use Tmdb\Token\Api\ApiToken;
class TmdbProvider {
/**
* @return Client
*/
public static function getClient() : Client {
$key = "b187f8d9c5e72b1faecb741d5d04239a";
$token = new ApiToken($key);
define('TMDB_API_KEY', $key);
$ed = new \Symfony\Component\EventDispatcher\EventDispatcher();
$logger = new Logger(
'php-tmdb',
[ new StreamHandler(storage_path('logs/tmdb.log')) ]
);
$client = new Client([
'api_token' => $token,
//'secure' => true,
'base_uri' => Client::TMDB_URI,
'event_dispatcher' => [
'adapter' => $ed
]
]);
$requestListener = new RequestListener($client->getHttpClient(), $ed);
$ed->addListener(RequestEvent::class, $requestListener);
$apiTokenListener = new ApiTokenRequestListener($client->getToken());
$ed->addListener(BeforeRequestEvent::class, $apiTokenListener);
$acceptJSONListener = new AcceptJsonRequestListener();
$ed->addListener(BeforeRequestEvent::class, $acceptJSONListener);
$jsonContentTypeListener = new ContentTypeJsonRequestListener();
$ed->addListener(BeforeRequestEvent::class, $jsonContentTypeListener);
$userAgentListener = new UserAgentRequestListener();
$ed->addListener(BeforeRequestEvent::class, $userAgentListener);
$requestLoggerListener = new LogHttpMessageListener(
$logger,
new \Tmdb\Formatter\HttpMessage\FullHttpMessageFormatter()
);
$ed->addListener(BeforeRequestEvent::class, $requestLoggerListener);
$ed->addListener(ResponseEvent::class, $requestLoggerListener);
$ed->addListener(HttpClientExceptionEvent::class, $requestLoggerListener);
$ed->addListener(LogApiErrorListener::class, $requestLoggerListener);
$langFilterListener = new LanguageFilterRequestListener('de-DE');
$ed->addListener(BeforeRequestEvent::class, $langFilterListener);
return $client;
}
}

View File

@@ -0,0 +1,93 @@
<?php
namespace App\Http\Requests\Auth;
use Illuminate\Auth\Events\Lockout;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
class LoginRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'email' => ['required', 'string', 'email'],
'password' => ['required', 'string'],
];
}
/**
* Attempt to authenticate the request's credentials.
*
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
public function authenticate()
{
$this->ensureIsNotRateLimited();
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}
/**
* Ensure the login request is not rate limited.
*
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
public function ensureIsNotRateLimited()
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
return;
}
event(new Lockout($this));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
/**
* Get the rate limiting throttle key for the request.
*
* @return string
*/
public function throttleKey()
{
return Str::lower($this->input('email')).'|'.$this->ip();
}
}

19
app/Models/Comment.php Normal file
View File

@@ -0,0 +1,19 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
use HasFactory;
public function film() {
return $this->belongsTo(Film::class, 'film');
}
public function author() {
return $this->belongsTo(User::class, 'user');
}
}

74
app/Models/Film.php Normal file
View File

@@ -0,0 +1,74 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Film extends Model
{
use HasFactory;
public function comments() {
return $this->hasMany(Comment::class, 'film');
}
public function votes()
{
return $this->hasMany(Vote::class, 'film');
}
public function suggester() {
return $this->belongsTo(User::class, 'user');
}
public function getBewertung() {
if(!is_null($this->seen)) {
$count = Comment::where('film', $this->id)->where('evaluation', '>', 0)->count();
return $count > 0 ? Comment::where('film', $this->id)->where('evaluation', '>', 0)->sum('evaluation') / $count : 0;
} else return 0;
}
public function activeVotes() {
return $this->votes()->leftJoin('users', 'votes.user', '=', 'users.id')->leftJoin('settings', function($join) {
$join->on('users.id', '=', 'settings.user')->where('settings.key', '=', 'disabled');
})->whereNull('settings.value');
}
public function nextfilm() {
$id = Setting::where('key', 'nextfilm')->first()->value;
return static::load($id);
}
public function isNext() {
$next = Setting::where('key', 'nextfilm')->first()->value;
return $next == $this->id;
}
public function scopePopular($query) {
$nextfilm = Setting::where('key', 'nextfilm')->first()->value;
return $query->addSelect(DB::raw('films.*, COUNT(case when votes.vote IS TRUE then 1 end) as upvotes, COUNT(*) as votes'))
->leftJoin('votes', 'votes.film', '=', 'films.id')
->leftJoin('users', 'users.id', '=', 'votes.user')
->whereNull('seen')->whereNull('rejected')
->whereNot('films.id', '=', $nextfilm)
->whereNot('users.disabled', '=', 1)
->groupBy('films.id')
->orderBy('upvotes', 'DESC')
->orderBy('suggested', 'ASC')
;
}
public function scopeSeen($query) {
return $query->whereNull('rejected')->whereNotNull('seen')->orderBy('seen', 'DESC');
}
public function scopeRejected($query) {
return $query->whereNull('seen')->whereNotNull('rejected')->orderBy('rejected', 'DESC');
}
public function scopeSuggested($query) {
return $query->whereNull('seen')->whereNull('rejected')->orderBy('updated_at', 'DESC');
}
}

15
app/Models/News.php Normal file
View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class News extends Model
{
use HasFactory;
public function author() {
return $this->belongsTo(User::class, 'user');
}
}

19
app/Models/Setting.php Normal file
View File

@@ -0,0 +1,19 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Setting extends Model
{
use HasFactory;
public function user() {
return $this->belongsTo(User::class, 'user');
}
public function scopeNextFilm($query) {
return $query->where('key', 'nextfilm');
}
}

View File

@@ -41,4 +41,38 @@ class User extends Authenticatable
protected $casts = [ protected $casts = [
'email_verified_at' => 'datetime', 'email_verified_at' => 'datetime',
]; ];
public function comments() {
return $this->hasMany(Comment::class, 'user');
}
public function films() {
return $this->hasMany(Film::class, 'user');
}
public function votes() {
return $this->hasMany(Vote::class, 'user');
}
public function settings() {
return $this->hasMany(Setting::class, 'user');
}
public function news() {
return $this->hasMany(News::class, 'user');
}
public function getAvatar() {
$settings = $this->settings()->where('key', '=', 'avatar')->first();
return is_null($settings) ? "no-avatar.jpg" : $settings->value;
}
public function isActive() {
return !$this->disabled;
}
public function isAdmin() {
$settings = $this->settings()->where('key', '=', 'admin')->first();
return !is_null($settings);
}
} }

15
app/Models/Vote.php Normal file
View File

@@ -0,0 +1,15 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Vote extends Model
{
use HasFactory;
public function voter() {
return $this->belongsTo(User::class, 'user');
}
}

View File

@@ -17,7 +17,7 @@ class RouteServiceProvider extends ServiceProvider
* *
* @var string * @var string
*/ */
public const HOME = '/home'; public const HOME = '/dashboard';
/** /**
* Define your route model bindings, pattern filters, etc. * Define your route model bindings, pattern filters, etc.

View File

@@ -0,0 +1,18 @@
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class AppLayout extends Component
{
/**
* Get the view / contents that represents the component.
*
* @return \Illuminate\View\View
*/
public function render()
{
return view('layouts.app');
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class GuestLayout extends Component
{
/**
* Get the view / contents that represents the component.
*
* @return \Illuminate\View\View
*/
public function render()
{
return view('layouts.guest');
}
}

View File

@@ -4,15 +4,22 @@
"description": "The Laravel Framework.", "description": "The Laravel Framework.",
"keywords": ["framework", "laravel"], "keywords": ["framework", "laravel"],
"license": "MIT", "license": "MIT",
"repositories": [{
"type": "vcs",
"url": "https://github.com/ascarion/php-tmdb-api"
}],
"require": { "require": {
"php": "^8.0.2", "php": "^8.0.2",
"guzzlehttp/guzzle": "^7.2", "guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^9.2", "laravel/framework": "^9.2",
"laravel/sanctum": "^2.14.1", "laravel/sanctum": "^2.14.1",
"laravel/tinker": "^2.7" "laravel/tinker": "^2.7",
"php-http/cache-plugin": "^1.7",
"php-tmdb/api": "dev-symfony-patch"
}, },
"require-dev": { "require-dev": {
"fakerphp/faker": "^1.9.1", "fakerphp/faker": "^1.9.1",
"laravel/breeze": "^1.9",
"laravel/sail": "^1.0.1", "laravel/sail": "^1.0.1",
"mockery/mockery": "^1.4.4", "mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^6.1", "nunomaduro/collision": "^6.1",

842
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "12524947d8c752f84bc21aaaede06bfa", "content-hash": "f15ed4f0585dd5f9726d2f5044d531f5",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
@@ -66,6 +66,72 @@
], ],
"time": "2021-08-15T20:50:18+00:00" "time": "2021-08-15T20:50:18+00:00"
}, },
{
"name": "clue/stream-filter",
"version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/clue/stream-filter.git",
"reference": "d6169430c7731d8509da7aecd0af756a5747b78e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e",
"reference": "d6169430c7731d8509da7aecd0af756a5747b78e",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": {
"Clue\\StreamFilter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@clue.engineering"
}
],
"description": "A simple and modern approach to stream filtering in PHP",
"homepage": "https://github.com/clue/php-stream-filter",
"keywords": [
"bucket brigade",
"callback",
"filter",
"php_user_filter",
"stream",
"stream_filter_append",
"stream_filter_register"
],
"support": {
"issues": "https://github.com/clue/stream-filter/issues",
"source": "https://github.com/clue/stream-filter/tree/v1.6.0"
},
"funding": [
{
"url": "https://clue.engineering/support",
"type": "custom"
},
{
"url": "https://github.com/clue",
"type": "github"
}
],
"time": "2022-02-21T13:15:14+00:00"
},
{ {
"name": "dflydev/dot-access-data", "name": "dflydev/dot-access-data",
"version": "v3.0.1", "version": "v3.0.1",
@@ -1996,6 +2062,567 @@
}, },
"time": "2021-11-30T19:35:32+00:00" "time": "2021-11-30T19:35:32+00:00"
}, },
{
"name": "php-http/cache-plugin",
"version": "1.7.5",
"source": {
"type": "git",
"url": "https://github.com/php-http/cache-plugin.git",
"reference": "63bc3f7242825c9a817db8f78e4c9703b0c471e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/cache-plugin/zipball/63bc3f7242825c9a817db8f78e4c9703b0c471e2",
"reference": "63bc3f7242825c9a817db8f78e4c9703b0c471e2",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0",
"php-http/client-common": "^1.9 || ^2.0",
"php-http/message-factory": "^1.0",
"psr/cache": "^1.0 || ^2.0 || ^3.0",
"symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"require-dev": {
"phpspec/phpspec": "^5.1 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\Common\\Plugin\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "PSR-6 Cache plugin for HTTPlug",
"homepage": "http://httplug.io",
"keywords": [
"cache",
"http",
"httplug",
"plugin"
],
"support": {
"issues": "https://github.com/php-http/cache-plugin/issues",
"source": "https://github.com/php-http/cache-plugin/tree/1.7.5"
},
"time": "2022-01-18T12:24:56+00:00"
},
{
"name": "php-http/client-common",
"version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/client-common.git",
"reference": "d135751167d57e27c74de674d6a30cef2dc8e054"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/client-common/zipball/d135751167d57e27c74de674d6a30cef2dc8e054",
"reference": "d135751167d57e27c74de674d6a30cef2dc8e054",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0",
"php-http/httplug": "^2.0",
"php-http/message": "^1.6",
"php-http/message-factory": "^1.0",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
"symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0",
"symfony/polyfill-php80": "^1.17"
},
"require-dev": {
"doctrine/instantiator": "^1.1",
"guzzlehttp/psr7": "^1.4",
"nyholm/psr7": "^1.2",
"phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
"phpspec/prophecy": "^1.10.2",
"phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
},
"suggest": {
"ext-json": "To detect JSON responses with the ContentTypePlugin",
"ext-libxml": "To detect XML responses with the ContentTypePlugin",
"php-http/cache-plugin": "PSR-6 Cache plugin",
"php-http/logger-plugin": "PSR-3 Logger plugin",
"php-http/stopwatch-plugin": "Symfony Stopwatch plugin"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3.x-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\Common\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Common HTTP Client implementations and tools for HTTPlug",
"homepage": "http://httplug.io",
"keywords": [
"client",
"common",
"http",
"httplug"
],
"support": {
"issues": "https://github.com/php-http/client-common/issues",
"source": "https://github.com/php-http/client-common/tree/2.5.0"
},
"time": "2021-11-26T15:01:24+00:00"
},
{
"name": "php-http/discovery",
"version": "1.14.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
"reference": "de90ab2b41d7d61609f504e031339776bc8c7223"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/discovery/zipball/de90ab2b41d7d61609f504e031339776bc8c7223",
"reference": "de90ab2b41d7d61609f504e031339776bc8c7223",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
"nyholm/psr7": "<1.0"
},
"require-dev": {
"graham-campbell/phpspec-skip-example-extension": "^5.0",
"php-http/httplug": "^1.0 || ^2.0",
"php-http/message-factory": "^1.0",
"phpspec/phpspec": "^5.1 || ^6.1",
"puli/composer-plugin": "1.0.0-beta10"
},
"suggest": {
"php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.9-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Discovery\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Finds installed HTTPlug implementations and PSR-7 message factories",
"homepage": "http://php-http.org",
"keywords": [
"adapter",
"client",
"discovery",
"factory",
"http",
"message",
"psr7"
],
"support": {
"issues": "https://github.com/php-http/discovery/issues",
"source": "https://github.com/php-http/discovery/tree/1.14.1"
},
"time": "2021-09-18T07:57:46+00:00"
},
{
"name": "php-http/httplug",
"version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
"reference": "f640739f80dfa1152533976e3c112477f69274eb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb",
"reference": "f640739f80dfa1152533976e3c112477f69274eb",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0",
"php-http/promise": "^1.1",
"psr/http-client": "^1.0",
"psr/http-message": "^1.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.1",
"phpspec/phpspec": "^5.1 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eric GELOEN",
"email": "geloen.eric@gmail.com"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://sagikazarmark.hu"
}
],
"description": "HTTPlug, the HTTP client abstraction for PHP",
"homepage": "http://httplug.io",
"keywords": [
"client",
"http"
],
"support": {
"issues": "https://github.com/php-http/httplug/issues",
"source": "https://github.com/php-http/httplug/tree/2.3.0"
},
"time": "2022-02-21T09:52:22+00:00"
},
{
"name": "php-http/message",
"version": "1.13.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
"reference": "7886e647a30a966a1a8d1dad1845b71ca8678361"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361",
"reference": "7886e647a30a966a1a8d1dad1845b71ca8678361",
"shasum": ""
},
"require": {
"clue/stream-filter": "^1.5",
"php": "^7.1 || ^8.0",
"php-http/message-factory": "^1.0.2",
"psr/http-message": "^1.0"
},
"provide": {
"php-http/message-factory-implementation": "1.0"
},
"require-dev": {
"ergebnis/composer-normalize": "^2.6",
"ext-zlib": "*",
"guzzlehttp/psr7": "^1.0",
"laminas/laminas-diactoros": "^2.0",
"phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
"slim/slim": "^3.0"
},
"suggest": {
"ext-zlib": "Used with compressor/decompressor streams",
"guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories",
"laminas/laminas-diactoros": "Used with Diactoros Factories",
"slim/slim": "Used with Slim Framework PSR-7 implementation"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10-dev"
}
},
"autoload": {
"files": [
"src/filters.php"
],
"psr-4": {
"Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "HTTP Message related tools",
"homepage": "http://php-http.org",
"keywords": [
"http",
"message",
"psr-7"
],
"support": {
"issues": "https://github.com/php-http/message/issues",
"source": "https://github.com/php-http/message/tree/1.13.0"
},
"time": "2022-02-11T13:41:14+00:00"
},
{
"name": "php-http/message-factory",
"version": "v1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-http/message-factory.git",
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"shasum": ""
},
"require": {
"php": ">=5.4",
"psr/http-message": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Factory interfaces for PSR-7 HTTP Message",
"homepage": "http://php-http.org",
"keywords": [
"factory",
"http",
"message",
"stream",
"uri"
],
"support": {
"issues": "https://github.com/php-http/message-factory/issues",
"source": "https://github.com/php-http/message-factory/tree/master"
},
"time": "2015-12-19T14:08:53+00:00"
},
{
"name": "php-http/promise",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
"phpspec/phpspec": "^5.1.2 || ^6.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Joel Wurtz",
"email": "joel.wurtz@gmail.com"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Promise used for asynchronous HTTP requests",
"homepage": "http://httplug.io",
"keywords": [
"promise"
],
"support": {
"issues": "https://github.com/php-http/promise/issues",
"source": "https://github.com/php-http/promise/tree/1.1.0"
},
"time": "2020-07-07T09:29:14+00:00"
},
{
"name": "php-tmdb/api",
"version": "dev-symfony-patch",
"source": {
"type": "git",
"url": "https://github.com/ascarion/php-tmdb-api.git",
"reference": "6eeba4537c054695fe8733d6317d571de8ae14b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ascarion/php-tmdb-api/zipball/6eeba4537c054695fe8733d6317d571de8ae14b6",
"reference": "6eeba4537c054695fe8733d6317d571de8ae14b6",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": "^7.3 || ^7.4 || ^8.0",
"php-http/discovery": "^1.11",
"psr/cache": "^1.0",
"psr/event-dispatcher": "^1.0",
"psr/event-dispatcher-implementation": "^1.0",
"psr/http-client": "^1.0",
"psr/http-client-implementation": "^1.0",
"psr/http-factory": "^1.0",
"psr/http-factory-implementation": "^1.0",
"psr/http-message": "^1.0",
"psr/log": "^1.0",
"psr/simple-cache": "^1.0",
"symfony/options-resolver": ">=4.4"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.17",
"monolog/monolog": ">=1.11.0",
"nyholm/psr7": "^1.2",
"php-http/cache-plugin": "^1.7",
"php-http/guzzle7-adapter": "^0.1",
"php-http/mock-client": "^1.2",
"phpstan/phpstan": "^0.12.18",
"phpunit/phpunit": "^7.5 || ^8.0 || ^9.3",
"slevomat/coding-standard": "^6.4.1",
"squizlabs/php_codesniffer": "^3.5.8",
"symfony/cache": ">=4.4",
"symfony/event-dispatcher": "^5.0",
"vimeo/psalm": "^4",
"wmde/psr-log-test-doubles": "^2"
},
"suggest": {
"monolog/monolog": "Great logger to use, but you can pick any PSR-3 logger you wish.",
"php-http/cache-plugin": "When making use of cache, you need to install this plugin.",
"psr/cache-implementation": "If you wish to enable caching features, provide an PSR-6 cache implementation.",
"psr/log-implementation": "If you wish to enable logging features, provide an PSR-3 logger.",
"psr/simple-cache-implementation": "If you wish to enable caching features, provide an PSR-16 cache.",
"symfony/cache": "Great cache to use, but you can pick any PSR-6 cache you wish."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
}
},
"autoload": {
"psr-4": {
"Tmdb\\": "lib/Tmdb"
}
},
"scripts": {
"test": [
"vendor/bin/phpunit"
],
"test-ci": [
"vendor/bin/phpunit --coverage-text --coverage-clover=build/coverage.xml coverage"
],
"test-coverage": [
"php -d xdebug.mode=coverage vendor/bin/phpunit --coverage-html build/coverage"
],
"test-cs": [
"vendor/bin/phpcs"
],
"test-phpstan": [
"vendor/bin/phpstan analyse"
],
"test-psalm": [
"vendor/bin/psalm lib/"
]
},
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Roterman",
"homepage": "http://wtfz.net",
"email": "michael@wtfz.net"
}
],
"description": "Patched by Ascarion to remove Symfony 6 constraints -- PHP wrapper for TMDB (TheMovieDatabase) API v3. Supports two types of approaches, one modelled with repositories, models and factories. And the other by simple array access to RAW data from The Movie Database.",
"homepage": "https://github.com/php-tmdb/api",
"keywords": [
"api",
"movie",
"php",
"tmdb",
"tv",
"tv show",
"tvdb",
"wrapper"
],
"support": {
"source": "https://github.com/ascarion/php-tmdb-api/tree/symfony-patch"
},
"time": "2022-04-14T11:44:39+00:00"
},
{ {
"name": "phpoption/phpoption", "name": "phpoption/phpoption",
"version": "1.8.1", "version": "1.8.1",
@@ -2067,6 +2694,55 @@
], ],
"time": "2021-12-04T23:24:31+00:00" "time": "2021-12-04T23:24:31+00:00"
}, },
{
"name": "psr/cache",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Cache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for caching libraries",
"keywords": [
"cache",
"psr",
"psr-6"
],
"support": {
"source": "https://github.com/php-fig/cache/tree/master"
},
"time": "2016-08-06T20:24:11+00:00"
},
{ {
"name": "psr/container", "name": "psr/container",
"version": "2.0.2", "version": "2.0.2",
@@ -2332,30 +3008,30 @@
}, },
{ {
"name": "psr/log", "name": "psr/log",
"version": "3.0.0", "version": "1.1.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/log.git", "url": "https://github.com/php-fig/log.git",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.0.0" "php": ">=5.3.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.x-dev" "dev-master": "1.1.x-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Psr\\Log\\": "src" "Psr\\Log\\": "Psr/Log/"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@@ -2376,31 +3052,31 @@
"psr-3" "psr-3"
], ],
"support": { "support": {
"source": "https://github.com/php-fig/log/tree/3.0.0" "source": "https://github.com/php-fig/log/tree/1.1.4"
}, },
"time": "2021-07-14T16:46:02+00:00" "time": "2021-05-03T11:20:27+00:00"
}, },
{ {
"name": "psr/simple-cache", "name": "psr/simple-cache",
"version": "3.0.0", "version": "1.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/simple-cache.git", "url": "https://github.com/php-fig/simple-cache.git",
"reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
"reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.0.0" "php": ">=5.3.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.0.x-dev" "dev-master": "1.0.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -2415,7 +3091,7 @@
"authors": [ "authors": [
{ {
"name": "PHP-FIG", "name": "PHP-FIG",
"homepage": "https://www.php-fig.org/" "homepage": "http://www.php-fig.org/"
} }
], ],
"description": "Common interfaces for simple caching", "description": "Common interfaces for simple caching",
@@ -2427,9 +3103,9 @@
"simple-cache" "simple-cache"
], ],
"support": { "support": {
"source": "https://github.com/php-fig/simple-cache/tree/3.0.0" "source": "https://github.com/php-fig/simple-cache/tree/master"
}, },
"time": "2021-10-29T13:26:27+00:00" "time": "2017-10-23T01:57:42+00:00"
}, },
{ {
"name": "psy/psysh", "name": "psy/psysh",
@@ -3583,6 +4259,73 @@
], ],
"time": "2022-03-13T20:10:05+00:00" "time": "2022-03-13T20:10:05+00:00"
}, },
{
"name": "symfony/options-resolver",
"version": "v6.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "51f7006670febe4cbcbae177cbffe93ff833250d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/51f7006670febe4cbcbae177cbffe93ff833250d",
"reference": "51f7006670febe4cbcbae177cbffe93ff833250d",
"shasum": ""
},
"require": {
"php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.1|^3"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\OptionsResolver\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides an improved replacement for the array_replace PHP function",
"homepage": "https://symfony.com",
"keywords": [
"config",
"configuration",
"options"
],
"support": {
"source": "https://github.com/symfony/options-resolver/tree/v6.0.3"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-01-02T09:55:41+00:00"
},
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
"version": "v1.25.0", "version": "v1.25.0",
@@ -5394,6 +6137,63 @@
}, },
"time": "2020-07-09T08:09:16+00:00" "time": "2020-07-09T08:09:16+00:00"
}, },
{
"name": "laravel/breeze",
"version": "v1.9.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/breeze.git",
"reference": "0d7633380c81d0827f40f6064d38f8884f5c5441"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/breeze/zipball/0d7633380c81d0827f40f6064d38f8884f5c5441",
"reference": "0d7633380c81d0827f40f6064d38f8884f5c5441",
"shasum": ""
},
"require": {
"illuminate/filesystem": "^8.42|^9.0",
"illuminate/support": "^8.42|^9.0",
"illuminate/validation": "^8.42|^9.0",
"php": "^7.3|^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
},
"laravel": {
"providers": [
"Laravel\\Breeze\\BreezeServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Laravel\\Breeze\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylor@laravel.com"
}
],
"description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.",
"keywords": [
"auth",
"laravel"
],
"support": {
"issues": "https://github.com/laravel/breeze/issues",
"source": "https://github.com/laravel/breeze"
},
"time": "2022-03-26T16:06:30+00:00"
},
{ {
"name": "laravel/sail", "name": "laravel/sail",
"version": "v1.13.9", "version": "v1.13.9",
@@ -7734,7 +8534,9 @@
], ],
"aliases": [], "aliases": [],
"minimum-stability": "dev", "minimum-stability": "dev",
"stability-flags": [], "stability-flags": {
"php-tmdb/api": 20
},
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {

View File

@@ -69,7 +69,7 @@ return [
| |
*/ */
'timezone' => 'UTC', 'timezone' => 'Europe/Berlin',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -82,7 +82,7 @@ return [
| |
*/ */
'locale' => 'en', 'locale' => 'de',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -108,7 +108,7 @@ return [
| |
*/ */
'faker_locale' => 'en_US', 'faker_locale' => 'de_DE',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -191,6 +191,7 @@ return [
*/ */
'aliases' => Facade::defaultAliases()->merge([ 'aliases' => Facade::defaultAliases()->merge([
'TmdbProvider' => App\Http\Helpers\TmdbProvider::class,
// 'ExampleClass' => App\Example\ExampleClass::class, // 'ExampleClass' => App\Example\ExampleClass::class,
])->toArray(), ])->toArray(),

View File

@@ -57,6 +57,15 @@ return [
'prefix' => '', 'prefix' => '',
'prefix_indexes' => true, 'prefix_indexes' => true,
'strict' => true, 'strict' => true,
'modes' => [
//'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION'
],
'engine' => null, 'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([ 'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),

View File

@@ -0,0 +1,54 @@
<?php
return [
'run_after_migrations' => env('LMG_RUN_AFTER_MIGRATIONS', false),
'clear_output_path' => env('LMG_CLEAR_OUTPUT_PATH', false),
//default configs
'table_naming_scheme' => env('LMG_TABLE_NAMING_SCHEME', '[IndexedTimestamp]_create_[TableName]_table.php'),
'view_naming_scheme' => env('LMG_VIEW_NAMING_SCHEME', '[IndexedTimestamp]_create_[ViewName]_view.php'),
'path' => env('LMG_OUTPUT_PATH', 'tests/database/migrations'),
'skippable_tables' => env('LMG_SKIPPABLE_TABLES', 'migrations'),
'skip_views' => env('LMG_SKIP_VIEWS', false),
'skippable_views' => env('LMG_SKIPPABLE_VIEWS', ''),
'sort_mode' => env('LMG_SORT_MODE', 'foreign_key'),
'definitions' => [
'prefer_unsigned_prefix' => env('LMG_PREFER_UNSIGNED_PREFIX', true),
'use_defined_index_names' => env('LMG_USE_DEFINED_INDEX_NAMES', true),
'use_defined_foreign_key_index_names' => env('LMG_USE_DEFINED_FOREIGN_KEY_INDEX_NAMES', true),
'use_defined_unique_key_index_names' => env('LMG_USE_DEFINED_UNIQUE_KEY_INDEX_NAMES', true),
'use_defined_primary_key_index_names' => env('LMG_USE_DEFINED_PRIMARY_KEY_INDEX_NAMES', true),
'with_comments' => env('LMG_WITH_COMMENTS', true),
'use_defined_datatype_on_timestamp' => env('LMG_USE_DEFINED_DATATYPE_ON_TIMESTAMP', false),
],
//now driver specific configs
//null = use default
'mysql' => [
'table_naming_scheme' => env('LMG_MYSQL_TABLE_NAMING_SCHEME', null),
'view_naming_scheme' => env('LMG_MYSQL_VIEW_NAMING_SCHEME', null),
'path' => env('LMG_MYSQL_OUTPUT_PATH', null),
'skippable_tables' => env('LMG_MYSQL_SKIPPABLE_TABLES', null),
'skippable_views' => env('LMG_MYSQL_SKIPPABLE_VIEWS', null),
],
'sqlite' => [
'table_naming_scheme' => env('LMG_SQLITE_TABLE_NAMING_SCHEME', null),
'view_naming_scheme' => env('LMG_SQLITE_VIEW_NAMING_SCHEME', null),
'path' => env('LMG_SQLITE_OUTPUT_PATH', null),
'skippable_tables' => env('LMG_SQLITE_SKIPPABLE_TABLES', null),
'skippable_views' => env('LMG_SQLITE_SKIPPABLE_VIEWS', null),
],
'pgsql' => [
'table_naming_scheme' => env('LMG_PGSQL_TABLE_NAMING_SCHEME', null),
'view_naming_scheme' => env('LMG_PGSQL_VIEW_NAMING_SCHEME', null),
'path' => env('LMG_PGSQL_OUTPUT_PATH', null),
'skippable_tables' => env('LMG_PGSQL_SKIPPABLE_TABLES', null),
'skippable_views' => env('LMG_PGSQL_SKIPPABLE_VIEWS', null)
],
'sqlsrv' => [
'table_naming_scheme' => env('LMG_SQLSRV_TABLE_NAMING_SCHEME', null),
'view_naming_scheme' => env('LMG_SQLSRV_VIEW_NAMING_SCHEME', null),
'path' => env('LMG_SQLSRV_OUTPUT_PATH', null),
'skippable_tables' => env('LMG_SQLSRV_SKIPPABLE_TABLES', null),
'skippable_views' => env('LMG_SQLSRV_SKIPPABLE_VIEWS', null),
],
];

13
convert.php Normal file
View File

@@ -0,0 +1,13 @@
<?php
$old = mysqli_connect("localhost","daniel", "ncc74656", "dumbo");
$new = new PDO('mysql:host=localhost;dbname=dumbo2', "daniel", "ncc74656");
$query = $old->query("SELECT * FROM `film_votes`");
$target = $new->prepare("INSERT INTO `votes` (`id`, `user`, `film`, `vote`, `created_at`, `updated_at`) VALUES (?, ?, ?, ?, ?, ?); ");
//$settings = $new->prepare("INSERT INTO `settings` (`user`, `key`, `value`) VALUES (?, ?, ?);");
foreach($query->fetch_all(MYSQLI_ASSOC) as $q) {
$target->execute([$q['id'], $q['user'], $q['film'], $q['stimme'], $q['created_at'], $q['updated_at']]);
}

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('films', function (Blueprint $table) {
$table->id();
$table->string('name', 255);
$table->bigInteger('tvdbid');
$table->date('suggested');
$table->date('seen')->nullable();
$table->date('rejected')->nullable();
$table->integer('user');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('films');
}
};

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('votes', function (Blueprint $table) {
$table->id();
$table->integer('film');
$table->integer('user');
$table->boolean('vote');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('votes');
}
};

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('settings', function (Blueprint $table) {
$table->id();
$table->integer('user')->nullable();
$table->string('key');
$table->string('value');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('settings');
}
};

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('news', function (Blueprint $table) {
$table->id();
$table->integer('user');
$table->string('headline', 255);
$table->text('body');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('news');
}
};

View File

@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->integer('film');
$table->integer('user');
$table->text('body');
$table->tinyInteger('evaluation')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('comments');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('films', function (Blueprint $table) {
$table->string('poster', '200');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('films', function (Blueprint $table) {
$table->dropColumn('poster');
});
}
};

View File

@@ -0,0 +1,43 @@
<?php
use App\Models\Setting;
use App\Models\User;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->boolean('disabled');
});
$disabledUsers = Setting::where('key', 'disabled')->where('value', 1)->get();
foreach($disabledUsers as $u) {
$user = User::where('id', $u->user)->first();
$user->disabled = true;
$user->save();
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('disabled');
});
}
};

16667
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -10,9 +10,14 @@
"production": "mix --production" "production": "mix --production"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/forms": "^0.4.0",
"alpinejs": "^3.4.2",
"autoprefixer": "^10.4.2",
"axios": "^0.25", "axios": "^0.25",
"laravel-mix": "^6.0.6", "laravel-mix": "^6.0.6",
"lodash": "^4.17.19", "lodash": "^4.17.19",
"postcss": "^8.1.14" "postcss": "^8.4.6",
"postcss-import": "^14.0.2",
"tailwindcss": "^3.0.18"
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
public/avatar/no-avatar.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 946 B

1808
public/css/app.css Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" rx="8" fill="#f5c518"/><g transform="matrix(2,0,0,2,16,46)"><polygon points="0 0 0 18 5 18 5 0"/><path d="M 15.672518,0 14.553483,8.4084693 13.858201,3.8350243 C 13.65661,2.3700926 13.463247,1.0917512 13.278113,0 H 7 v 18 h 4.241635 L 11.258091,6.1138068 13.043609,18 h 3.019748 L 17.758365,5.8517865 17.770708,18 H 22 V 0 Z"/><path d="m24 18v-18h7.804559c1.764793 0 3.195441 1.4199441 3.195441 3.1766042v11.6467918c0 1.75439-1.428338 3.176604-3.195441 3.176604zm5.832248-14.7604764c-0.198326-0.1071901-0.577732-0.1588002-1.129596-0.1588002v11.8107626c0.728633 0 1.177022-0.13101 1.345167-0.40494 0.168146-0.26996 0.254375-1.000441 0.254375-2.199382v-6.9792681c0-0.8138509-0.03018-1.3339215-0.08623-1.5641817-0.05605-0.2302603-0.18108-0.3970005-0.383717-0.5041906z"/><path d="m44.429908 4.5068582h0.31961c1.795192 0 3.250482 1.4058177 3.250482 3.1380094v7.2171234c0 1.733074-1.454818 3.138009-3.250482 3.138009h-0.31961c-1.098446 0-2.069633-0.526338-2.658038-1.331726l-0.287974 1.100504h-4.483896v-17.768778h4.784326v5.7805356c0.618172-0.7703782 1.570825-1.2736774 2.645582-1.2736774zm-1.02434 8.7773578v-4.2651379c0-0.7047386-0.04524-1.1672234-0.139493-1.3801133-0.09425-0.2128898-0.470487-0.3495732-0.734393-0.3495732s-0.670889 0.1110822-0.75006 0.2982784v7.219809c0.09048 0.205549 0.478614 0.319927 0.75006 0.319927s0.666531-0.110708 0.749473-0.319927c0.08294-0.20922 0.124413-0.719421 0.124413-1.523263z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
public/img/no-portrait.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

1
public/img/tmdb.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 185.04 133.4"><defs><style>.cls-1{fill:url(#linear-gradient);}</style><linearGradient id="linear-gradient" y1="66.7" x2="185.04" y2="66.7" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#90cea1"/><stop offset="0.56" stop-color="#3cbec9"/><stop offset="1" stop-color="#00b3e5"/></linearGradient></defs><title>Asset 4</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M51.06,66.7h0A17.67,17.67,0,0,1,68.73,49h-.1A17.67,17.67,0,0,1,86.3,66.7h0A17.67,17.67,0,0,1,68.63,84.37h.1A17.67,17.67,0,0,1,51.06,66.7Zm82.67-31.33h32.9A17.67,17.67,0,0,0,184.3,17.7h0A17.67,17.67,0,0,0,166.63,0h-32.9A17.67,17.67,0,0,0,116.06,17.7h0A17.67,17.67,0,0,0,133.73,35.37Zm-113,98h63.9A17.67,17.67,0,0,0,102.3,115.7h0A17.67,17.67,0,0,0,84.63,98H20.73A17.67,17.67,0,0,0,3.06,115.7h0A17.67,17.67,0,0,0,20.73,133.37Zm83.92-49h6.25L125.5,49h-8.35l-8.9,23.2h-.1L99.4,49H90.5Zm32.45,0h7.8V49h-7.8Zm22.2,0h24.95V77.2H167.1V70h15.35V62.8H167.1V56.2h16.25V49h-24ZM10.1,35.4h7.8V6.9H28V0H0V6.9H10.1ZM39,35.4h7.8V20.1H61.9V35.4h7.8V0H61.9V13.2H46.75V0H39Zm41.25,0h25V28.2H88V21h15.35V13.8H88V7.2h16.25V0h-24Zm-79,49H9V57.25h.1l9,27.15H24l9.3-27.15h.1V84.4h7.8V49H29.45l-8.2,23.1h-.1L13,49H1.2Zm112.09,49H126a24.59,24.59,0,0,0,7.56-1.15,19.52,19.52,0,0,0,6.35-3.37,16.37,16.37,0,0,0,4.37-5.5A16.91,16.91,0,0,0,146,115.8a18.5,18.5,0,0,0-1.68-8.25,15.1,15.1,0,0,0-4.52-5.53A18.55,18.55,0,0,0,133.07,99,33.54,33.54,0,0,0,125,98H113.29Zm7.81-28.2h4.6a17.43,17.43,0,0,1,4.67.62,11.68,11.68,0,0,1,3.88,1.88,9,9,0,0,1,2.62,3.18,9.87,9.87,0,0,1,1,4.52,11.92,11.92,0,0,1-1,5.08,8.69,8.69,0,0,1-2.67,3.34,10.87,10.87,0,0,1-4,1.83,21.57,21.57,0,0,1-5,.55H121.1Zm36.14,28.2h14.5a23.11,23.11,0,0,0,4.73-.5,13.38,13.38,0,0,0,4.27-1.65,9.42,9.42,0,0,0,3.1-3,8.52,8.52,0,0,0,1.2-4.68,9.16,9.16,0,0,0-.55-3.2,7.79,7.79,0,0,0-1.57-2.62,8.38,8.38,0,0,0-2.45-1.85,10,10,0,0,0-3.18-1v-.1a9.28,9.28,0,0,0,4.43-2.82,7.42,7.42,0,0,0,1.67-5,8.34,8.34,0,0,0-1.15-4.65,7.88,7.88,0,0,0-3-2.73,12.9,12.9,0,0,0-4.17-1.3,34.42,34.42,0,0,0-4.63-.32h-13.2Zm7.8-28.8h5.3a10.79,10.79,0,0,1,1.85.17,5.77,5.77,0,0,1,1.7.58,3.33,3.33,0,0,1,1.23,1.13,3.22,3.22,0,0,1,.47,1.82,3.63,3.63,0,0,1-.42,1.8,3.34,3.34,0,0,1-1.13,1.2,4.78,4.78,0,0,1-1.57.65,8.16,8.16,0,0,1-1.78.2H165Zm0,14.15h5.9a15.12,15.12,0,0,1,2.05.15,7.83,7.83,0,0,1,2,.55,4,4,0,0,1,1.58,1.17,3.13,3.13,0,0,1,.62,2,3.71,3.71,0,0,1-.47,1.95,4,4,0,0,1-1.23,1.3,4.78,4.78,0,0,1-1.67.7,8.91,8.91,0,0,1-1.83.2h-7Z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

22736
public/js/app.js Normal file

File diff suppressed because it is too large Load Diff

4
public/mix-manifest.json Normal file
View File

@@ -0,0 +1,4 @@
{
"/js/app.js": "/js/app.js",
"/css/app.css": "/css/app.css"
}

View File

@@ -0,0 +1,3 @@
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';

View File

@@ -1 +1,7 @@
require('./bootstrap'); require('./bootstrap');
import Alpine from 'alpinejs';
window.Alpine = Alpine;
Alpine.start();

View File

@@ -0,0 +1,3 @@
Schema::create('[TableName]', function (Blueprint $table) {
[Schema]
});

View File

@@ -0,0 +1,3 @@
Schema::table('[TableName]', function (Blueprint $table) {
[Schema]
});

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Create[TableName:Studly]Table extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
[TableUp]
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
[TableDown]
}
}

View File

@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Create[ViewName:Studly]View extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement($this->dropView());
DB::statement($this->createView());
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::statement($this->dropView());
}
private function createView()
{
return <<<SQL
[Schema]
SQL;
}
private function dropView()
{
return <<<SQL
DROP VIEW IF EXISTS `[ViewName]`;
SQL;
}
}

View File

@@ -0,0 +1,92 @@
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-burnt leading-tight">
{{ __($title) }}
</h2>
@if($title == 'Gesehene Filme')
<a href="/abgelehnt" class="text-yelmax">&rightarrow; Abgelehnte Filme</a>
@else
<a href="/gesehen" class="text-yelmax">&rightarrow; Gesehene Filme</a>
@endif
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 text-crayola">
<div class="grid grid-cols-3 gap-2 sm:gap-4 my-4 px-2">
@foreach ($films as $film)
<div>
<a href="/film/{{$film->id}}" class="text-yelmax sm:float-left sm:mr-2">
<img src="{{ $film->poster !== '' ? $ihelp->getUrl($film->poster, 'w185') : "/img/no-portrait.png" }}" title="{{ $film->name }}" class="rounded-lg shadow-md shadow-burnt">
</a>
<a href="/film/{{$film->id}}" class="text-yelmax text-xs leading-3 sm:text-lg">{{$film->name}}</a>
<div class="flex sm:text-3xl">
@php
$stimme = is_null(auth()->user()) ? null : $film->votes()->where('user', auth()->user()->id)->first();
@endphp
@if (!is_null($stimme) && $stimme->vote == 0)
<svg title="Deine Stimme: Nicht dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-red-700 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
<path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
</svg> &middot;
@elseif (!is_null($stimme) && $stimme->vote == 1)
<svg title="Deine Stimme: Dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-900 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg> &middot;
@endif
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M2 5a2 2 0 012-2h7a2 2 0 012 2v4a2 2 0 01-2 2H9l-3 3v-3H4a2 2 0 01-2-2V5z" />
<path d="M15 7v2a4 4 0 01-4 4H9.828l-1.766 1.767c.28.149.599.233.938.233h2l3 3v-3h2a2 2 0 002-2V9a2 2 0 00-2-2h-1z" />
</svg>
{{ $film->comments()->count() }}
@if($film->getBewertung() > 0)
&middot;
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
{{ number_format($film->getBewertung(), 1, '.', '') }}
@endif
</div>
@php
$date = $film->seen !== null ? $film->seen : $film->rejected
@endphp
<div class="text-xs text-field sm:hidden"> {{ \Carbon\Carbon::parse($date)->format('d.m.Y') }} </div>
<div class="text-field hidden sm:flex my-2">
@if($film->seen !== null)
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z" />
</svg>
@else
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636" />
</svg>
@endif
{{ \Carbon\Carbon::parse($date)->format('d.m.Y') }}
</div>
</div>
@endforeach
</div>
{{ $films->links() }}
<div class="flex">
<svg title="Deine Stimme: Nicht dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-red-700" viewBox="0 0 20 20" fill="currentColor">
<path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
<path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
</svg> Du bist nicht dafür &middot;
<svg title="Deine Stimme: Dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-900" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg> Du bist dafür &middot;
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
<path d="M2 5a2 2 0 012-2h7a2 2 0 012 2v4a2 2 0 01-2 2H9l-3 3v-3H4a2 2 0 01-2-2V5z" />
<path d="M15 7v2a4 4 0 01-4 4H9.828l-1.766 1.767c.28.149.599.233.938.233h2l3 3v-3h2a2 2 0 002-2V9a2 2 0 00-2-2h-1z" />
</svg> Anzahl Kommentare &middot;
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt" viewBox="0 0 20 20" fill="currentColor">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg> Bewertung
</div>
</div>
</div>
</x-app-layout>

View File

@@ -0,0 +1,36 @@
<x-guest-layout>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-burnt hover:text-yelmax" />
</a>
</x-slot>
<div class="mb-4 text-sm text-crayola">
{{ __('This is a secure area of the application. Please confirm your password before continuing.') }}
</div>
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('password.confirm') }}">
@csrf
<!-- Password -->
<div>
<x-label for="password" :value="__('Password')" />
<x-input id="password" class="block mt-1 w-full"
type="password"
name="password"
required autocomplete="current-password" />
</div>
<div class="flex justify-end mt-4">
<x-button>
{{ __('Confirm') }}
</x-button>
</div>
</form>
</x-auth-card>
</x-guest-layout>

View File

@@ -0,0 +1,36 @@
<x-guest-layout>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-burnt hover:text-yelmax" />
</a>
</x-slot>
<div class="mb-4 text-sm text-crayola">
{{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }}
</div>
<!-- Session Status -->
<x-auth-session-status class="mb-4" :status="session('status')" />
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('password.email') }}">
@csrf
<!-- Email Address -->
<div>
<x-label for="email" :value="__('Email')" />
<x-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
</div>
<div class="flex items-center justify-end mt-4">
<x-button>
{{ __('Email Password Reset Link') }}
</x-button>
</div>
</form>
</x-auth-card>
</x-guest-layout>

View File

@@ -0,0 +1,56 @@
<x-guest-layout>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-burnt hover:text-yelmax" />
</a>
</x-slot>
<!-- Session Status -->
<x-auth-session-status class="mb-4" :status="session('status')" />
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('login') }}">
@csrf
<!-- Email Address -->
<div>
<x-label for="email" :value="__('Email')" />
<x-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autofocus />
</div>
<!-- Password -->
<div class="mt-4">
<x-label for="password" :value="__('Password')" />
<x-input id="password" class="block mt-1 w-full"
type="password"
name="password"
required autocomplete="current-password" />
</div>
<!-- Remember Me -->
<div class="block mt-4">
<label for="remember_me" class="inline-flex items-center">
<input id="remember_me" type="checkbox" class="rounded border-field text-crayola bg-fogra checked:bg-fogra focus:bg-fogra checked:focus:bg-fogra focus:ring-offset-coal focus:ring-burnt hover:bg-fogra" name="remember">
<span class="ml-2 text-sm text-crayola">{{ __('Remember me') }}</span>
</label>
</div>
<div class="flex items-center justify-end mt-4">
@if (Route::has('password.request'))
<a class="underline text-sm text-yelmax hover:text-crayola" href="{{ route('password.request') }}">
{{ __('Forgot your password?') }}
</a>
@endif
<x-button class="ml-3">
{{ __('Log in') }}
</x-button>
</div>
</form>
</x-auth-card>
</x-guest-layout>

View File

@@ -0,0 +1,59 @@
<x-guest-layout>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-gray-500" />
</a>
</x-slot>
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('register') }}">
@csrf
<!-- Name -->
<div>
<x-label for="name" :value="__('Name')" />
<x-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus />
</div>
<!-- Email Address -->
<div class="mt-4">
<x-label for="email" :value="__('Email')" />
<x-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required />
</div>
<!-- Password -->
<div class="mt-4">
<x-label for="password" :value="__('Password')" />
<x-input id="password" class="block mt-1 w-full"
type="password"
name="password"
required autocomplete="new-password" />
</div>
<!-- Confirm Password -->
<div class="mt-4">
<x-label for="password_confirmation" :value="__('Confirm Password')" />
<x-input id="password_confirmation" class="block mt-1 w-full"
type="password"
name="password_confirmation" required />
</div>
<div class="flex items-center justify-end mt-4">
<a class="underline text-sm text-gray-600 hover:text-gray-900" href="{{ route('login') }}">
{{ __('Already registered?') }}
</a>
<x-button class="ml-4">
{{ __('Register') }}
</x-button>
</div>
</form>
</x-auth-card>
</x-guest-layout>

View File

@@ -0,0 +1,48 @@
<x-guest-layout>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-burnt hover:text-yelmax" />
</a>
</x-slot>
<!-- Validation Errors -->
<x-auth-validation-errors class="mb-4" :errors="$errors" />
<form method="POST" action="{{ route('password.update') }}">
@csrf
<!-- Password Reset Token -->
<input type="hidden" name="token" value="{{ $request->route('token') }}">
<!-- Email Address -->
<div>
<x-label for="email" :value="__('Email')" />
<x-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email', $request->email)" required autofocus />
</div>
<!-- Password -->
<div class="mt-4">
<x-label for="password" :value="__('Password')" />
<x-input id="password" class="block mt-1 w-full" type="password" name="password" required />
</div>
<!-- Confirm Password -->
<div class="mt-4">
<x-label for="password_confirmation" :value="__('Confirm Password')" />
<x-input id="password_confirmation" class="block mt-1 w-full"
type="password"
name="password_confirmation" required />
</div>
<div class="flex items-center justify-end mt-4">
<x-button>
{{ __('Reset Password') }}
</x-button>
</div>
</form>
</x-auth-card>
</x-guest-layout>

View File

@@ -0,0 +1,39 @@
<x-guest-layout>
<x-auth-card>
<x-slot name="logo">
<a href="/">
<x-application-logo class="w-20 h-20 fill-current text-burnt hover:text-yelmax" />
</a>
</x-slot>
<div class="mb-4 text-sm text-crayola">
{{ __('Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }}
</div>
@if (session('status') == 'verification-link-sent')
<div class="mb-4 font-medium text-sm text-green-600">
{{ __('A new verification link has been sent to the email address you provided during registration.') }}
</div>
@endif
<div class="mt-4 flex items-center justify-between">
<form method="POST" action="{{ route('verification.send') }}">
@csrf
<div>
<x-button>
{{ __('Resend Verification Email') }}
</x-button>
</div>
</form>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit" class="underline text-sm">
{{ __('Log Out') }}
</button>
</form>
</div>
</x-auth-card>
</x-guest-layout>

View File

@@ -0,0 +1,134 @@
<svg viewBox="0 0 750 750" xmlns="http://www.w3.org/2000/svg" {{ $attributes }}>
<path d="M720.9,581.8c-0.4-2.5-2.3-2.3-4.1-2.2c-8,0.4-15.9,1.4-23.2,5c-7.5,3.7-15,7.4-22.7,10.7c-7,3-14.3,5.1-22,5.5
c-2.2,0.1-4,0.1-2.7-3c9.2-21.9,6.7-44.2,2.9-66.7c-4-23.2-16.3-42.4-29.2-61.2c-20.2-29.4-45.1-54.2-73.5-75.6
c-3.6-2.7-5-5.3-4.3-9.8c2-14.3,3.7-28.5,5.5-42.8c1.5-12,3-23.9,7-35.5c1.2-3.4,2.9-5,6.7-5c5.5,0,10.9-1,15.5-4.3
c11.9-8.6,18.8-20.1,19.1-35c0.2-7,0.3-14-1-21c-2.2-12-2.5-24.1-0.4-36.1c5.7-32.6-4.5-60.1-26.2-83.8
c-18.3-20-40.1-34.7-66.5-42.9c-37.1-11.5-69.5-3.6-98.9,20.4c-17.7,14.4-30.5,32.7-42.7,51.6c-18.1,28.1-40.3,51.5-71.9,64.6
c-4.3,1.8-5.7,0.9-7.4-2.7c-4.2-8.8-6.1-18-6.8-27.6c-0.5-6.6-1.2-13.2-5.9-18.6c-10.2-12-23.3-14.6-37.7-5.9
c-7,4.2-13.1,5.1-20.2,1.5c-2.1-1-4.4-1.5-6.7-2.2c-38.3-11.9-71.5,21.6-75.8,48.9c-2,12.6,6.7,20.8,19,17.9
c4.7-1.1,9.3-2.9,14-4.1c2.7-0.7,5.4-2.4,9-1.1c-1.9,3.7-3.6,7.4-5.8,10.8c-6,9.1,3.5,28.7,14.5,28.7c4.2,0,8.5,1.1,12.7,1.9
c6.4,1.1,11.1,6.7,9.8,12.9c-2.5,11.4-4.8,23.1-12.6,32.4c-13,15.4-28,28.3-47.6,34.6c-23.3,7.4-46.2,15.6-66.4,29.8
c-22.7,16-41,35.4-44.6,64.2c-2.8,23,0.8,45.6,10.5,66.8c12.8,27.8,32.2,50.9,52.7,73.3c4.7,5.2,9.5,10.3,13,16.5
c4.7,8.4,0.8,18.7-8.4,21.7c-3.7,1.2-7.5,2.1-11.3,3c-4.9,1.1-9.1,3.1-9.7,8.7c-0.6,5.6,1.9,9.8,6.7,12.6
c5.6,3.2,11.4,5.9,17.6,7.7c24.2,6.9,48.3,4.3,72.1-1.9c14.8-3.8,28.6-10.1,42.3-16.7c7.5-3.6,11.2-1.9,12.7,6.1
c1.2,6.3,4.1,11.1,9.3,14.9c5.4,3.9,11.1,7.2,17.6,9.1c16.4,4.8,33,5,49.7,1.7c17.1-3.4,29.3-11.7,29.9-31c0.1-4.7,2.8-7.5,7-9.1
c2.9-1.1,5.8-2.4,8.8-3.1c2.6-0.6,5.8-3,7.7-1c2.1,2.1-1,4.8-1.6,7.4c-0.4,1.9-1.3,3.7-2,5.5c-3.3,8.6-1.4,16,4.9,22.6
c5.8,6.2,13.1,9.7,21.1,12c17.6,5,35.1,2.7,52.6-0.6c8.2-1.6,16.9-2,23.4-8c4.1-3.7,6.2-3,9.2,1.4c6.9,10.2,15.5,19,28.5,20.7
c18,2.4,34.7-0.3,47.6-14.7c4.4-4.9,10-7.6,16.6-9.2c23.4-5.6,46.3-12.6,66.4-26.4c5.4-3.7,10.8-5.6,17.4-5.5
c11.3,0.2,22.1-2.1,31.6-8.7c14.1-9.8,28.2-19.6,44.2-26.1C719.9,584.9,721.3,584.1,720.9,581.8z M548.3,299.7
c-6.2,21-8.3,42.7-9.8,64.5c-1,14.4-2.8,28.7-10.3,41.5c-9.3,15.7-26.4,22.3-43.7,16.8c-11.4-3.7-21.9-9.1-31.7-16.1
c-6-4.4-9.6-9.5-8.1-17.2c0.4-2.1,0.2-4.3,0.4-6.4c1.5-25.9-7.2-46.5-30.2-60.2c-7.2-4.3-14-9.3-19.9-15.3
c-5.1-5.2-7.9-11.5-10-18.3c-1.1-3.4,0-4.3,3.3-3.5c3.2,0.8,6.5,1.4,9.7,2.1c1.2,0.3,2.5,0.4,2.9-1.1c0.3-1.1-0.8-1.6-1.7-2
c-1.1-0.5-2.1-1-3.2-1.3c-20.8-6.9-34.1-22.5-46.4-39.4c-3.2-4.3-3.8-9-1.1-13.7c9.6-16.8,15.7-35.2,24.1-52.6
c7.1-14.7,16.1-27.8,29.3-38.1c26.8-21.1,56.8-9.5,71.3,8.6c8.9,11.1,14.8,23.8,19.8,36.9c8.4,21.8,16.4,43.7,25.1,65.4
c6.5,16.3,15.4,31.1,28.8,42.8C549.1,295.1,549.1,296.9,548.3,299.7z M400.2,497.2c-1.1,10.9-8.6,19.5-19,22.4
c-2.9,0.8-3-0.4-2.5-2.6c1.5-6.8,3-13.6,4.5-20.4c0.3-1.2,0.5-2.5,2-2.4c4.4,0.4,8.8,0.6,13.3,0
C400.9,494,400.1,496.3,400.2,497.2z M378.6,525.6c14.7-3.1,22.3-12.2,24.5-26.8c0.8-5,2.7-9.7,5.2-14.2c1.1-2,2.4-4.4,2.2-6.6
c-0.8-9.8,4.9-12.3,13-13.4c5-0.7,9.6-3.1,14-5.6c12.2-6.7,18.6-16.8,17.9-31c-0.2-2.5,0-5.1-0.5-7.6c-1.1-5.2,1.2-4,4.3-2.8
c8.4,3.4,12.9,9.4,13.5,18.6c0.6,9.6-0.2,18.6-5.4,27c-4,6.4-9.5,10.2-17.3,9.8c-18-0.9-24.5,0.8-30.3,25
c-1.7,7-2.8,14.1-4.4,21.2c-1.5,6.5-4.4,12.5-8.8,17.6c-8.5,9.8-24.9,11.7-35.4,4.1c-0.8-0.6-1.4-1.2-1.4-2.3
C369.3,534.1,374,526.6,378.6,525.6z M414.1,456.6c3-3.4,6-6.7,8.8-10.2c8.6-10.8,14.7-22.9,18.9-36.1c0.5-1.4,0.6-3.5,2.3-3.8
c2.1-0.4,2.9,1.7,3.7,3.1c3.1,4.9,4.1,10.5,4,16.2c-0.1,19.1-17.1,36.4-35.8,36.3c-1.2,0-2.4,0-2.9-1.3
C412.2,459.1,413,457.8,414.1,456.6z M370.6,546.6c21.2,10.5,39.4,3,47.5-19.4c2.8-7.8,3.2-16,5-24c0.2-1.1,0.5-2.3,0.7-3.4
c4.2-17.7,4.1-18.3,22.1-20.1c24.5-2.6,31.5-17.6,30.8-41.1c-0.1-1-0.3-2-0.1-2.9c0.5-3.1-2.1-6.5,0.3-9.3
c1.1-1.2,11.8,4,13.3,6.2c12.4,18.2,1.2,50.4-19.7,56.6c-6,1.8-12.1,2.8-18.3,3.5c-9.2,0.9-15.1,5.7-17.7,14.5
c-2.8,9.3-5.6,18.6-8.5,27.9c-2.9,9.2-8.4,16.5-15.2,23.2c-11.6,11.3-25.1,10.7-39.2,6.8c-0.7-0.2-1.5-0.5-2.2-0.8
c-12.9-4.5-12.8-4.6-5.7-16.1C365.7,544.9,367.4,545,370.6,546.6z M158.1,217.4c-2.4,1.2-5,2.2-7.6,2.9c-9.3,2.4-14.2-1.6-14-11.2
c0.3-17.3,17.5-36.9,36.8-42.7c14.6-4.3,28.8-3.4,42.8,2.3c10.7,4.4,20.6,10.2,29.8,17.1c3,2.2,3.8,4.1,2,7.7
c-9.7,19.6-24.3,34.1-44.2,43.3c-4.1,1.9-6.1,1.3-7.1-3c-0.1-0.4-0.3-0.7-0.4-1.1c-3.4-8-3.4-8,4.2-12.4c0.7-0.4,1.3-0.8,2-1.2
c0.9-0.6,2.3-1.1,1.6-2.6c-0.8-1.8-2.1-1-3.4-0.5c-6.3,2.9-12.9,4.3-19.9,3.1c-1.1-0.2-2.3-0.4-3.4-0.7c-6-1.8-6-2.2-1.4-6.4
c5-4.6,8.6-10.1,11.2-16.2c0.6-1.4,3.1-3.5,0.2-4.8c-2.3-1-3.5,1.1-4.2,3C178.4,205.8,168.6,212,158.1,217.4z M241.4,173.5
c6.1,0.8,8.5,3.5,10.3,8.1C246.5,181,244.7,177.6,241.4,173.5z M184.6,256.3c-13.3-0.2-20.7-11.6-15.4-23.9
c1.6-3.7,3.4-9.5,6.8-9.4c5.1,0.2,10.4,3.2,13.2,8.4c1.5,2.7,3,5.4,2.6,9.3c-3.4-1.9-6.5-3.7-9.8-5.6c0.6,7.1,5.5,10.7,12.3,9.5
c24.7-4.5,54.7-33.2,60.2-57.8c2.6-11.6-1-16.4-13-17.1c-2.9-0.2-5.8-0.1-8.8-0.1c-1.6,0-3.2-0.2-3.4-2.3
c-0.2-1.8,0.6-2.7,2.3-3.5c25-11.2,38.6,5.5,37.9,23c-0.4,9.4-0.3,18.9-1.6,29.3c6.4-7,8.3-6.6,11.4,1.7c0.9,2.3,1.3,4.5,0.3,6.8
c-9.1,21.4-22.4,38.3-46.1,44.6c-6.9,1.8-13.8,2.6-20.8,2.2c-4-0.2-10.6-7.7-10.2-11.4c0.3-2.4,2.5-2.1,4-2.5
c8.5-2.4,16.9-5,23.7-10.9c0.6-0.5,1-1.1,1.5-1.7c-0.1-0.3-0.2-0.6-0.3-0.9c-6,2.5-12.1,5-18.1,7.4
C204,255.2,194.4,256.5,184.6,256.3z M56.5,397.3c19.9-21.2,44-35.1,71.9-42.6c7-1.9,13.7-4.4,20.4-7
c13.9-5.5,25.3-14.2,34.2-26.4c3-4.1,6.7-7.8,11.1-12.7c0.7,9.4,1.2,17.2,1.9,25.1c1,10.9,5,21.2,7.1,31.9
c1.4,6.7,1.1,7.4-5.6,6.8c-14.9-1.3-29.8-3-44.9-2.3c-20.9,0.9-41.4,3.8-60.9,12c-23.2,9.8-40.1,25.7-49,49.6
c-1.5,4.1-2.9,8.4-6,11.7C37.4,425.5,44.2,410.3,56.5,397.3z M220.6,611.9c-1.5,4.8-4.6,8.2-9,10.2c-25.7,11.4-51.6,22-80.2,23
c-17,0.6-32-5.8-46.9-12.6c-2-0.9-2.3-2.4-2.2-4.2c0-1.9,1-2.8,2.8-3.2c0.9-0.2,1.8-0.6,2.8-0.9c16.5-4.5,17.3-5.1,26.4-20.7
c2.1,6.6,3.7,12.1,5.5,17.6c0.5,1.5,0.5,4,2.9,3.7c2.6-0.3,1.6-2.7,1.6-4.3c-0.3-8.8-3.6-16.7-8.1-24.1
c-6.5-10.9-14.8-20.6-23.1-30.1c-17.5-20-34.6-40.3-45.4-64.9c-6.2-13.9-12.3-28.4-8.9-44c7.5-34.9,23.6-62.3,67.6-74.5
c25.3-7,50.8-9.9,76.9-7c1.4,0.2,2.7,0.3,4.1,0.5c4.6,0.8,10.1,0.5,13.5,2.9c3.6,2.6,1.9,8.7,3.1,13.2c1.5,5.8,4.5,10.7,8.1,15.4
c7.6,10.1,15.4,20.1,23.1,30.2c5.3,6.9,8,14.9,7.3,23.5c-1.2,16.1,3.1,31.7,3.2,47.7c0.1,11.6,7.3,20.2,18.2,25.2
c12.5,5.7,15.1,14.6,7.9,26.2c-6.6,10.8-14.9,19.9-25.7,26.8c-6.2,4-12.4,8.2-17.7,13.4C224.9,604.1,222,607.6,220.6,611.9z
M285.4,523.1c1.7,0.5,5.8,0.1,4.1,3.8c-1.4,3.2-0.6,8.9-7.9,8.1c-19.2-1.1-32.2-14.4-31.8-33.6c0-1.3-0.6-2.9,0.9-3.7
c1.5-0.7,2.5,0.7,3.6,1.4c3.7,2.6,6.7,6,9.6,9.4C269.6,515.7,276.5,520.7,285.4,523.1z M269.7,508.2c0.8-1.5,2.3-1.2,3.6-0.8
c5.9,1.9,12.1,2.7,18.3,3.2c1.5,0.1,3.2,0,3.3,2.2c0.1,5.2-3.7,7.9-8.6,6.2c-5.3-1.9-10.2-4.6-14.8-7.8
C270.4,510.6,268.8,509.9,269.7,508.2z M244.1,647c-1.2,0.7-2.2-0.5-3.1-1c-8-4.1-8.5-11.3-7.8-19.9c7.1,4.5,10.6,10.3,11.6,17.7
C244.9,644.9,245.2,646.3,244.1,647z M247.7,621.6c1.1-3.3-0.4-4-3-3.7c-3.1,0.4-6.1,1.1-9.2,1.8c-3,0.7-6,1.7-9.2,1.7
c-3.7,0-4.3-1.3-2.8-4.6c3.7-8,8.8-14.8,16.5-19.2c22.6-12.8,36.6-33,47.3-55.7c7.2-15.1,14.9-30.2,16.4-47.2
c0.3-3.4,0-6.9,0-12.2c-3,6.4-4.8,4.3-7.2,1.3c-5.9-7.2-9.1-7.1-13.7,0.1c3.1,1,6.6-4.5,9.2,0.6c2.8,5.6,10,9.4,6.6,17.5
c-0.7,1.6-1.2,2.6-3.1,2.8c-14.7,0.8-28.3-1.7-39.5-12.2c-6.7-6.2-9.6-14.1-8.5-22.7c2.1-16.2-3.6-29.4-13.7-41.3
c-2.1-2.5-4-5.3-6-7.9c-9.7-12.5-10-24-1-37.3c2.1-3,4.2-6,6.5-9.2c-6-0.2-6-0.2-17.7,26.7c-1.7-5.4-0.1-9.7,1.2-13.9
c1.3-4.4,3.2-8.6,5.3-14.2c-5.7,3.7-6.5,8.7-7.9,13.4c-0.5,1.8-0.2,4.7-2.5,4.7c-3,0-2.1-3.1-2.5-5c-2-9.8,0.8-19.4,1.8-29
c0.1-1.1,0.3-2.2,0.6-4c-3,0.9-5.2,1.8-6.2-2.3c-5.2-20.7-7-41.4-1.5-62.4c2.7-10.4,3.6-11.2,14.4-11.4c7.6-0.2,15.2-0.9,22.4-3.2
c16.3-5.4,28.5-16,35.1-31.5c5.9-14,14.8-22.9,28.7-29.1c19.6-8.8,33.9-24.6,46.9-41.4c12.3-15.9,22.2-33.5,36-48.3
c13.7-14.6,28.1-28.3,46.8-36.3c26.8-11.5,53.5-8.6,79.4,2.5c31.9,13.6,55.6,36.3,69.7,68.3c4.4,10,6,20.7,5,32.7
c-3-2.6-3.3-5.1-3.7-7.5c-0.6-3.6-0.7-7.4-1.2-11c-0.2-1.4,0.4-3.7-1.8-3.7c-2.6-0.1-2.1,2.3-2.3,3.9c-1.2,11.2,0.3,22.2,2.2,33.2
c2.9,16.7,7.2,33.2,6.9,50.3c-0.2,13.9-5.3,25.5-16.6,33.9c-6.7,5-12.4,4.9-19.4,0.2c-8.8-6-14.7-14.4-19.9-23.4
c-11.1-19.3-19.2-40-25.9-61.2c-3.9-12.5-8.3-24.8-14-36.6c-5.2-10.8-12.1-20.5-20.5-29c-19.1-19.3-48.3-21.4-70.5-5.9
c-16.8,11.7-27.6,27.8-35.9,46c-7.1,15.6-14.3,31.2-21.7,46.7c-4.8,9.9-10.4,19.3-20.2,25.2c-1.2,0.7-3.3,1.6-2,3.5
c1.4,2,2.8,0,3.9-0.7c4.5-2.7,8.8-5.8,12.4-9.7c2-2.1,3.2-2.1,5,0.3c9.2,12.4,19.5,23.9,31.4,33.8c3,2.5,3.9,6.3,4.8,9.8
c2.9,12.5,10.4,21.6,20.5,28.9c4.7,3.4,9.3,7.1,14.1,10.4c18.2,12.6,26,30.7,26.2,52.2c0.1,21.2-7,40.5-17.4,58.7
c-2.2,3.8-4.9,7.4-9,9.4c-2-1.7-0.8-4.4-2.7-6.3c-2.2,2.2-2.4,5-2.5,7.8c-0.4,7.8-0.3,15.6-1.1,23.4c-1.3,12.9-7.3,17.4-19.9,15.9
c-1.8-0.2-3-0.6-3.1-2.6c-0.1-1.8,1.1-2.2,2.6-2.4c12.6-2.2,12.7-7.1,12.2-17.8c0-0.6,0-1.2-0.1-1.8c-2.3-11.2,0.4-20.6,9.6-28.1
c4.1-3.3,6.7-8.1,8.8-13c0.5-1.2,1.5-2.7-0.1-3.6c-2.1-1.1-2.8,0.8-3.3,2.2c-5.9,16.3-18.7,21.3-35.4,21.7c7.9,2.2,5.8,8,5.5,12.8
c-2.6,37-10.8,72.5-35.2,101.6c-18.4,22-41.3,39.1-67.9,50.8c-8.8,3.9-17.2,8.2-24,15.2c-0.8,0.8-1.8,1.6-2.7,2.2
c-2.4,1.5-5.3,4.4-7.8,2.8C244.3,626.9,246.9,623.8,247.7,621.6z M387.6,472.6c0.1-2.5,0.7-5,1.2-7.5c0.4-2.4,0.9-4.5,4.2-4.3
c3.6,0.2,3,2.8,3.3,4.9c0.1,0.6,0.1,1.2,0.1,1.7c0.1,2.6,0,5.2-1.6,7.3c-1.6,2.2-4.3,4.3-6.8,3.5
C385.8,477.5,387.5,474.5,387.6,472.6z M296.9,653.6c-1.5,3.5-7,1.3-10.7,1.8c-1.5,0.2-3.1,0-5.8,0c-5.7,0.3-12.4-0.2-19.1-1.3
c-3.3-0.6-4.4-1.8-2.4-5c2.3-3.6,4.4-7.3,7.5-10.4c8.5-8.3,19.2-7,26.2,3.3C294.9,645.7,298.4,650,296.9,653.6z M305.9,653.8
c-2.4,0.2-3-1.1-3.7-2.8c-1.5-3.4-2.9-6.9-4.7-10.1c-8.2-14.6-28.4-15.3-37.7-1.3c-2,3.1-3.9,6.3-5.9,9.4
c-0.5,0.8-1.3,1.7-2.1,1.8c-1.5,0.1-1.6-1.4-1.9-2.5c-1.1-4.1-1.8-8.4-3.1-12.5c-0.9-3.1-0.1-4.5,3.1-4.4c4,0.2,7-1.8,9.7-4.5
c4.5-4.4,10.1-7.3,16-9.5c28.5-10.6,50.8-30,72.1-50.8c3.7-3.6,4.5-4.2,10.1-4.5c-1.3,4.5-3.9,7.7-6.7,10.7
c-11.3,12.2-19.2,26.4-25.9,41.5c-1.8,4-2.4,8.2-2.2,12.7c3.6-0.4,3.3-4.8,6.2-5.6C332.5,637.4,321.5,652.4,305.9,653.8z
M354.5,600c-0.4,0.5-0.8,0.8-0.8,1c2.8,7.9,2.8,7.8-5.8,10.3c-3.5,1-7.1,2.2-10.6,3.2c-2.8,0.9-4.6,0.5-4-3.1
c1.2-6.6,4.7-12,8.8-17c2.7-3.4,3.8,2.1,6.9,1.8c-4.3-13,7.1-18,13-25.8c1.7-2.2,4.5-0.2,6.6,0.2c12.2,2.6,12,2.7,9.8,14.8
c-1.3,7.3-3.7,13.8-9.3,19c-2.6,2.4-4.5,3.1-7.3,0.4C359.6,602.9,356.9,601.6,354.5,600z M374.5,655c-5.8-2.4-11.5-5.1-14.7-10.9
c-1.6-2.9-3.4-6.2,0-9c3.6-2.9,7.1-2.2,10.6,0.7c5.1,4.3,5.6,10.4,6.7,16.1C377,653.8,377.5,656.3,374.5,655z M434.1,656.4
c-4.3,1.1-8.7,2-13.1,2.6c-5.8,0.8-11.5,1.8-17.4,1.5c-3.5-0.2-7-0.3-10.5-0.5c-2.6-0.2-3.4-1.3-1.8-3.8c4-6.3,8.6-12,14.8-16.3
c13.1-9,27.5,2.4,31.7,12.8C439.1,656.1,435.8,655.9,434.1,656.4z M492.1,669.9c-8.6-2.9-16-7.9-20.7-15.4
c-11.7-18.7-17.6-39.2-13.6-61.3c4.3-24.2,26.9-37,50.3-29.4c20.6,6.6,30.1,20.1,31.6,44.6c0.1,2.1,0,4.3,0,6.4
c0.1,16-4.2,30.7-13.6,43.8C517.1,671.2,506.8,674.8,492.1,669.9z M500,552.5c-2.7,0.3-4.4-2.4-6.6-5.5c4.4,0,7.5,0,11.1,0
C503.9,549.9,502.3,552.3,500,552.5z M505.7,553.6c8.5-5,17.7-3.2,23.8,4.6c2.7,3.5,4.8,8.8,5.6,14.9c-4.9-2.9-9.4-5.9-14.1-8.2
c-4.8-2.4-10-4.2-14.9-6.3c-1.3-0.6-3.6,0-3.6-2C502.4,554.8,504.4,554.4,505.7,553.6z M493.6,555.2c0.2,3.2-3.7,2.6-5.8,3.1
c-7.1,1.4-13.4,4.7-20.4,7c2.7-5.5,6.7-9.9,11.8-13.2c2.5-1.6,5.3-2.6,8.3-1.7C490.2,551.3,493.5,552.6,493.6,555.2z M595.3,635.4
c-11.2,3.5-22.3,6.9-33.5,10.4c-1.3,0.4-2.6,0.6-5.7,1.2c3.8-4.8,6.5-8,9.2-11.4c0.8-1,2.4-1.9,0.7-3.4c-1.5-1.3-2.6,0.1-3.5,1
c-5.2,5.3-10.3,10.6-15.5,16c-4.4,4.6-8.8,9.2-14.1,13.1c-0.8-2.3,0.6-3.7,1.4-5.2c11.2-21.6,12.8-44.2,7.3-67.6
c-1.7-7.1-2.4-14.4-1.4-23.4c7.1,9.7,9.9,20,15.1,29.1c0.7-8-1.7-15.2-5.1-22.1c-3.2-6.5-7.4-12.4-12.8-17.3
c-2.4-2.3-2.5-3.5,0.7-4.8c13.3-5.5,26.8-7.7,41-3.4c6.4,1.9,12.6,4.7,19.4,5.1c-12.3-10.5-27-13.5-43.2-13.9
c2.3-6.9,8.1-10.7,12.3-17.6c-6.7,1.7-10.8,4.9-12.6,9.7c-3.6,9.6-11.1,14-19.8,17.6c-3.5,1.5-6.6,1.9-10,0.3
c-13.7-6.6-27.9-8.4-42.6-4.1c-5,1.5-4.2-1.5-3.6-4.2c2.1-8.6,5.7-16.5,9.7-24.4c3.9-7.6,7.8-15.2,12.2-23.8
c-3.4,0.7-4.5,2.5-5.8,4c-9.5,11.1-16.3,23.8-19.9,38c-2.2,9-5.5,17.2-11.3,24.7c-8.4,11-10.3,24.5-12.5,37.8
c-2.5,15,1.9,29,4.2,43.4c1,6.6-2.7,11.8-9,13.4c-3.3,0.8-3.5-1.9-4.4-3.6c-4-6.9-8.6-13-16.4-15.9c-10.5-3.9-20-2.5-28,5.4
c-5.2,5.2-10,10.9-15.7,17.2c-0.4-3.7-0.6-6.4-1-9.2c-1.3-10.2-5.9-15.6-15.9-17.5c-4.4-0.9-4.4-2-2.5-5.6
c5.2-9.3,12.3-17.1,19.7-24.5c2.7-2.7,5.4-5.6,7.3-9.9c-7.5,1-5.8-3-5-7.5c1.1-6,3.1-10.2,10.1-9.8c1.1,0.1,2.3-0.4,3.4-0.9
c9-4.5,17.9-5.9,28.1-3.3c6.2,1.6,12.7-1.7,17.5-7.3c-2.7-1.2-4.5-0.3-6.3,0.3c-3.1,1-6.3,2-9.5,2.7c-3.8,0.9-8.8,2.2-11-0.9
c-1.7-2.3,2.6-5.5,4.3-8.2c3-5,6-10,7.9-15.6c1-3,2.4-3.5,5.2-2.3c2.8,1.3,5.8,2.2,8.7,3.4c1.1,0.4,2.4,1.1,3.1-0.2
c0.8-1.4-0.3-2.6-1.6-3.2c-3.2-1.4-6.4-2.9-9.7-4.1c-1.9-0.7-3.1-1.3-2.5-3.7c2.1-7.9,3.4-16,7.1-23.4c2.2-4.4,5.3-7,10.3-7.3
c4.9-0.3,9.7-0.7,14.5-1.5c23.8-4,38.5-25,34.7-49.2c-0.7-4.4-1.6-8.8-2.7-13.2c-0.6-2.6,0.3-3.7,2.8-3.8
c19-0.7,30.1-12.2,37.5-28.1c2.5-5.3,4.3-4.7,8.3-1.7c35.9,26.9,64.9,59.8,85.5,99.4c14.6,28,19.3,58.6,10.4,89.6
C634.4,613.3,618.3,628.2,595.3,635.4z M641.2,616.1c-4.1,0.1-4.2-1.1-2.9-4.2c1.3-2.9,3-5.1,6.4-5.1c15.8-0.2,29.4-6.8,42.8-14.2
c3.1-1.7,6.4-3.5,11.5-3.7C681.2,602.8,664.1,615.4,641.2,616.1z M370.3,346.1c-3.6,3.8-2.5,8.9-5.6,13.1
c-2.5-5.6-3.8-11.1-8.2-15.2c4.3,11.5,1.5,22.5-0.4,33.9c-2.2,12.7,2.4,24.3,12.7,32.8c7.8,6.4,16.3,4.3,20.8-4.6
c3.2-6.2,6.4-12.5,9.4-18.8c0.8-1.6,2.3-3.2,1.5-5.6c-4.4,2.1-6.3,6.8-10,9.6c-0.5-0.7-1-1.1-1.2-1.6c-3-9.8-7.8-18.3-17.8-22.6
c-2.6-1.1-2.1-3.3-2-5.5C369.9,356.5,370.1,351.3,370.3,346.1z M386.3,395.7c-0.5,5.3,0.6,11.5-6,14c-4.5,1.7-11.1-2.2-14.8-8.3
c-1.3-2.2-2.3-4.5-3.2-6.9c-0.7-1.8-1.1-3.6-2.1-7c4.9,3.8,8.5,6.8,12.4,9.4c4.9,3.3,8.6-2.1,13-2.4
C386,395.1,386.4,395.4,386.3,395.7z M380.3,385.1c2.7-0.5,3.4,0.7,2.3,3.3c-3,7.3-6.7,8.3-12.6,3.3c-6.3-5.3-9.2-11.7-6.3-20.6
c2.8,1.7,3.6,4.2,4.6,6.4C370.7,382.7,373.9,386.3,380.3,385.1z M284.1,429.3c-3.6-3.1-7.6-4.5-11.8-2.3
c-7.4,3.9-12.1,0.3-16.4-5.2c-1-1.2-1.8-2.6-2.9-3.6c-1.4-1.3-2.2-5-4.6-3.1c-2.7,2.2,0.8,4,2.1,5.5c3.9,4.8,8.2,9.2,12.3,13.8
c-5.6,0.6-10.6-3.9-16.9-4.6c1.3,3.1,3.4,5.3,5.9,5.6c10.5,1.3,15,8.7,18.4,17.4c0.2,0.5,0.6,1,0.9,1.5c3.2,3.8,6.6,7.6,0.1,11.7
c3.2-0.5,6.5-1.2,9.7-1.3c3.3,0,6.5,1,9.8,1.1c6.1,0.2,10.9-6.1,8.9-12.2C296.5,444.3,291.7,435.9,284.1,429.3z M272.4,428.3
c2.6,11.6,8.6,17.8,20.3,17.5c-7.5,6.5-10.1,6.9-15.5,3C270.5,444,268.5,437.2,272.4,428.3z M293.2,461c-1.8,2.1-4.3,1.7-6.5,0.9
c-3.7-1.4-6.3-4.3-8.8-7.7c5.1,0.8,9.8,0.7,14.1-2.2c0.9-0.6,2.4-1.1,2.7,0.7C295.3,455.6,295.3,458.6,293.2,461z M306.5,455.5
c8.1-14.3,33.4-20.3,49.3-11.3C337.6,443.9,320.9,444.8,306.5,455.5z M329.5,321.2c-0.3-1.4,0.5-2.4,1.9-3.2
c11.7-6.4,31.4-0.1,37.1,13c-2.4-1.2-4-1.7-5.1-2.6c-9.1-7.2-19.2-8.6-30.2-6C331.8,322.8,330,323.6,329.5,321.2z M347.4,484.8
c-0.8,1.8-2.2,0.9-3.5,0.5c-2.2-0.6-4.5-1.1-6.7-1.9c-6.9-2.4-13.7-2.3-20.2,1.4c-0.9,0.5-2.2,1.5-3,0.1c-0.9-1.4,0-2.7,1.4-3.3
c4.7-1.9,9.4-3.7,14.4-4.2c5.6,0.4,10.7,2.2,15.8,4.2C346.8,482.3,348.1,483.2,347.4,484.8z M368.9,319.1
c-9.2-4-16.9-7.7-25.5-9.1C350.8,304,361.5,307.4,368.9,319.1z M335.8,493.3c-0.7,1.6-1.8,1.7-3.3,1.2c-4.6-1.4-9.2-2.7-13.8-4.1
c5.6-2.9,10.7-1.1,15.8,0.2C335.8,490.9,336.4,491.9,335.8,493.3z"/>
<xpath d="M305.8 81.125C305.77 80.995 305.69 80.885 305.65 80.755C305.56 80.525 305.49 80.285 305.37 80.075C305.29 79.935 305.17 79.815 305.07 79.685C304.94 79.515 304.83 79.325 304.68 79.175C304.55 79.045 304.39 78.955 304.25 78.845C304.09 78.715 303.95 78.575 303.77 78.475L251.32 48.275C249.97 47.495 248.31 47.495 246.96 48.275L194.51 78.475C194.33 78.575 194.19 78.725 194.03 78.845C193.89 78.955 193.73 79.045 193.6 79.175C193.45 79.325 193.34 79.515 193.21 79.685C193.11 79.815 192.99 79.935 192.91 80.075C192.79 80.285 192.71 80.525 192.63 80.755C192.58 80.875 192.51 80.995 192.48 81.125C192.38 81.495 192.33 81.875 192.33 82.265V139.625L148.62 164.795V52.575C148.62 52.185 148.57 51.805 148.47 51.435C148.44 51.305 148.36 51.195 148.32 51.065C148.23 50.835 148.16 50.595 148.04 50.385C147.96 50.245 147.84 50.125 147.74 49.995C147.61 49.825 147.5 49.635 147.35 49.485C147.22 49.355 147.06 49.265 146.92 49.155C146.76 49.025 146.62 48.885 146.44 48.785L93.99 18.585C92.64 17.805 90.98 17.805 89.63 18.585L37.18 48.785C37 48.885 36.86 49.035 36.7 49.155C36.56 49.265 36.4 49.355 36.27 49.485C36.12 49.635 36.01 49.825 35.88 49.995C35.78 50.125 35.66 50.245 35.58 50.385C35.46 50.595 35.38 50.835 35.3 51.065C35.25 51.185 35.18 51.305 35.15 51.435C35.05 51.805 35 52.185 35 52.575V232.235C35 233.795 35.84 235.245 37.19 236.025L142.1 296.425C142.33 296.555 142.58 296.635 142.82 296.725C142.93 296.765 143.04 296.835 143.16 296.865C143.53 296.965 143.9 297.015 144.28 297.015C144.66 297.015 145.03 296.965 145.4 296.865C145.5 296.835 145.59 296.775 145.69 296.745C145.95 296.655 146.21 296.565 146.45 296.435L251.36 236.035C252.72 235.255 253.55 233.815 253.55 232.245V174.885L303.81 145.945C305.17 145.165 306 143.725 306 142.155V82.265C305.95 81.875 305.89 81.495 305.8 81.125ZM144.2 227.205L100.57 202.515L146.39 176.135L196.66 147.195L240.33 172.335L208.29 190.625L144.2 227.205ZM244.75 114.995V164.795L226.39 154.225L201.03 139.625V89.825L219.39 100.395L244.75 114.995ZM249.12 57.105L292.81 82.265L249.12 107.425L205.43 82.265L249.12 57.105ZM114.49 184.425L96.13 194.995V85.305L121.49 70.705L139.85 60.135V169.815L114.49 184.425ZM91.76 27.425L135.45 52.585L91.76 77.745L48.07 52.585L91.76 27.425ZM43.67 60.135L62.03 70.705L87.39 85.305V202.545V202.555V202.565C87.39 202.735 87.44 202.895 87.46 203.055C87.49 203.265 87.49 203.485 87.55 203.695V203.705C87.6 203.875 87.69 204.035 87.76 204.195C87.84 204.375 87.89 204.575 87.99 204.745C87.99 204.745 87.99 204.755 88 204.755C88.09 204.905 88.22 205.035 88.33 205.175C88.45 205.335 88.55 205.495 88.69 205.635L88.7 205.645C88.82 205.765 88.98 205.855 89.12 205.965C89.28 206.085 89.42 206.225 89.59 206.325C89.6 206.325 89.6 206.325 89.61 206.335C89.62 206.335 89.62 206.345 89.63 206.345L139.87 234.775V285.065L43.67 229.705V60.135ZM244.75 229.705L148.58 285.075V234.775L219.8 194.115L244.75 179.875V229.705ZM297.2 139.625L253.49 164.795V114.995L278.85 100.395L297.21 89.825V139.625H297.2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,9 @@
<div class="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-fogra">
<div>
{{ $logo }}
</div>
<div class="w-full sm:max-w-md mt-6 px-6 py-4 bg-coal shadow-md overflow-hidden sm:rounded-lg">
{{ $slot }}
</div>
</div>

View File

@@ -0,0 +1,7 @@
@props(['status'])
@if ($status)
<div {{ $attributes->merge(['class' => 'font-medium text-sm text-green-600']) }}>
{{ $status }}
</div>
@endif

View File

@@ -0,0 +1,15 @@
@props(['errors'])
@if ($errors->any())
<div {{ $attributes }}>
<div class="font-medium text-red-600">
{{ __('Whoops! Something went wrong.') }}
</div>
<ul class="mt-3 list-disc list-inside text-sm text-red-600">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif

View File

@@ -0,0 +1,3 @@
<button {{ $attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-fogra border border-burnt rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-burnt active:bg-yelmax focus:outline-none disabled:opacity-25 transition ease-in-out duration-150']) }}>
{{ $slot }}
</button>

View File

@@ -0,0 +1 @@
<a {{ $attributes->merge(['class' => 'block px-4 py-2 text-sm leading-5 text-crayola hover:text-yelmax hover:bg-field focus:outline-none focus:bg-field transition duration-150 ease-in-out']) }}>{{ $slot }}</a>

View File

@@ -0,0 +1,43 @@
@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-fogra'])
@php
switch ($align) {
case 'left':
$alignmentClasses = 'origin-top-left left-0';
break;
case 'top':
$alignmentClasses = 'origin-top';
break;
case 'right':
default:
$alignmentClasses = 'origin-top-right right-0';
break;
}
switch ($width) {
case '48':
$width = 'w-48';
break;
}
@endphp
<div class="relative" x-data="{ open: false }" @click.outside="open = false" @close.stop="open = false">
<div @click="open = ! open">
{{ $trigger }}
</div>
<div x-show="open"
x-transition:enter="transition ease-out duration-200"
x-transition:enter-start="transform opacity-0 scale-95"
x-transition:enter-end="transform opacity-100 scale-100"
x-transition:leave="transition ease-in duration-75"
x-transition:leave-start="transform opacity-100 scale-100"
x-transition:leave-end="transform opacity-0 scale-95"
class="absolute z-50 mt-2 {{ $width }} rounded-md shadow-md shadow-burnt {{ $alignmentClasses }}"
style="display: none;"
@click="open = false">
<div class="rounded-md ring-1 ring-black ring-opacity-5 {{ $contentClasses }}">
{{ $content }}
</div>
</div>
</div>

View File

@@ -0,0 +1,3 @@
@props(['disabled' => false])
<input {{ $disabled ? 'disabled' : '' }} {!! $attributes->merge(['class' => 'rounded-md shadow-sm border-field focus:border-burnt bg-fogra']) !!}>

View File

@@ -0,0 +1,5 @@
@props(['value'])
<label {{ $attributes->merge(['class' => 'block font-medium text-sm text-crayola']) }}>
{{ $value ?? $slot }}
</label>

View File

@@ -0,0 +1,11 @@
@props(['active'])
@php
$classes = ($active ?? false)
? 'inline-flex items-center px-1 pt-1 border-b-2 border-yelmax text-sm font-medium leading-5 hover:text-yelmax focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out'
: 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 hover:text-yelmax hover:border-yelmax focus:outline-none focus:text-gray-700 focus:border-gray-300 transition duration-150 ease-in-out';
@endphp
<a {{ $attributes->merge(['class' => $classes]) }}>
{{ $slot }}
</a>

View File

@@ -0,0 +1,11 @@
@props(['active'])
@php
$classes = ($active ?? false)
? 'block pl-3 pr-4 py-2 border-l-4 border-yelmax text-base font-medium text-fogra hover:text-yelmax focus:outline-none focus:text-yelmax transition duration-150 ease-in-out'
: 'block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-fogra hover:text-yelmax focus:outline-none transition duration-150 ease-in-out';
@endphp
<a {{ $attributes->merge(['class' => $classes]) }}>
{{ $slot }}
</a>

View File

@@ -0,0 +1,8 @@
@php
$classes = "p-6 hover:text-yelmax cursor-pointer"
@endphp
<a {{ $attributes->merge(['class' => $classes]) }}>
{{ $slot }}
</a>

View File

@@ -0,0 +1,17 @@
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Dashboard') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 bg-white border-b border-gray-200">
You're logged in!
</div>
</div>
</div>
</div>
</x-app-layout>

View File

@@ -0,0 +1,407 @@
<x-app-layout>
<x-slot name="header">
<div class="float-right flex space-x-2">
<a href="https://themoviedb.org/movie/{{ $tmdb->getId() }}"><img src="/img/tmdb.svg" class="max-h-7 w-8"></a>
<a href="https://imdb.com/title/{{ $tmdb->getImdbId() }}"><img src="/img/IMDb_Logo_Square.svg" class="max-h-7"></a>
</div>
<h2 class="font-semibold text-xl text-burnt leading-tight">
{{ $tmdb->getTitle() }}
</h2>
<div class="text-burnt italic mt-2 text-lg">{{ $tmdb->getTagline() }}</div>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 text-crayola" x-data="{ tab: 'fact' }">
<!-- Session Status -->
<x-auth-session-status class="mb-4 border border-burnt p-2 rounded-lg bg-coal mx-auto max-w-xs" :status="session('status')" />
@if (!is_null($film->seen))
<div id="gesehen" class="border border-burnt p-2 rounded-lg flex mb-6 bg-coal mx-auto max-w-xs sm:ml-0">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" />
</svg>
Gesehen am {{ \Carbon\Carbon::parse($film->seen)->format('d.m.Y') }}
</div>
@elseif (!is_null($film->rejected))
<div id="gesehen" class="border border-burnt p-2 rounded-lg flex mb-6 bg-coal mx-auto max-w-xs sm:ml-0">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-1" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636" />
</svg>
Abgelehnt am {{ \Carbon\Carbon::parse($film->rejected)->format('d.m.Y') }}
</div>
@elseif(!is_null(auth()->user()) && auth()->user()->isAdmin())
<div class="flex content-start" x-data="{confseen: false, confdel: false, confnext: false}">
@if(!$film->isNext())
<div
class="border p-2 rounded-lg flex mb-6 bg-coal max-w-xs mr-2 ml-2 sm:ml-0 cursor-pointer hover:text-coal border-burnt"
:class="confnext ? 'bg-burnt text-coal hover:bg-crayola' : 'hover:bg-burnt'"
@click="confnext ? location.href='/film/mark/{{ $film->id }}/next' : confnext = true"
@click.outside="confnext = false"
>
<span x-text="confnext ? 'Als nächstes sehen?' : ''"></span>
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mx-1" viewBox="0 0 640 512" stroke="currentColor">
<path fill="currentColor" d="M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z"/>
</svg>
</div>
@endif
<div
class="border p-2 rounded-lg flex mb-6 bg-coal max-w-xs mr-2 ml-2 sm:ml-0 cursor-pointer hover:text-coal border-burnt"
:class="confseen ? 'bg-burnt text-coal hover:bg-crayola' : 'hover:bg-burnt'"
@click="confseen ? location.href='/film/mark/{{ $film->id }}/seen' : confseen = true"
@click.outside="confseen = false"
>
<span x-text="confseen ? 'Wirklich gesehen?' : ''"></span>
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" />
</svg>
</div>
<div
class="border p-2 rounded-lg flex mb-6 bg-coal max-w-xs mr-2 cursor-pointer hover:text-coal border-burnt"
:class="confdel ? 'bg-burnt text-coal hover:bg-crayola' : 'hover:bg-burnt'"
@click="confdel ? location.href='/film/mark/{{ $film->id }}/deny' : confdel = true"
@click.outside="confdel = false">
<span x-text="confdel ? 'Wirklich ablehnen?' : ''"></span>
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636" />
</svg>
</div>
</div>
@endif
<img src="{{ $image->getUrl($tmdb->getPosterImage(), 'w342') }}" alt="{{ $tmdb->getTitle() }} Poster" class="rounded-lg mx-auto mb-6 lg:float-right lg:mx-0 lg:ml-6 shadow-md shadow-burnt">
<div class="sm:rounded-lg bg-coal flex mb-6 px-4">
<a class="p-6 hover:text-yelmax cursor-pointer" x-bind:class="tab == 'fact' ? 'border-b-2 border-yelmax' : ''" @@click="tab = 'fact'">Allgemein</a>
<a class="p-6 hover:text-yelmax cursor-pointer" x-bind:class="tab == 'cast' ? 'border-b-2 border-yelmax' : ''" @@click="tab = 'cast'">Schauspieler</a>
<a class="p-6 hover:text-yelmax cursor-pointer" x-bind:class="tab == 'vids' ? 'border-b-2 border-yelmax' : ''" @@click="tab = 'vids'">Trailer</a>
</div>
<div id="#allgemein" class="px-4 grid grid-cols-2 gap-2" x-show="tab == 'fact'" x-transition>
<div class="font-bold">Vorgeschlagen von</div>
<div class="flex"><img src="/avatar/{{$film->suggester->getAvatar() }}" class="max-h-7 rounded-lg mr-2"> {{ $film->suggester->name }}</div>
<div class="font-bold">Originaltitel</div>
<div>{{ $tmdb->getOriginalTitle() }} ({{ $tmdb->getOriginalLanguage() }})</div>
<div class="font-bold">Laufzeit</div>
<div>{{ $tmdb->getRuntime() }} Minuten</div>
<div class="font-bold">Erschienen</div>
<div>{{ $tmdb->getReleaseDate()->format('d.m.Y') }} -
@foreach ($tmdb->getProductionCountries() as $co)
<abbr title="{{$co->getName()}}">{{$co->getIso31661()}}</abbr>
@endforeach
</div>
<div class="font-bold">Genre</div>
<div class="flex flex-wrap space-x-1">
@foreach ($tmdb->getGenres() as $genre)
<div class="bg-coal rounded-lg p-1">{{ $genre->getName() }}</div>
@endforeach
</div>
<div class="font-bold">TMDB Bewertung</div>
<div class="">{{ $tmdb->getVoteAverage() }} von 10</div>
@if($film->getBewertung() > 0)
<div class="font-bold">Dumbo Bewertung</div>
<div class="">{{ number_format($film->getBewertung(), 2, '.', '')}} von 10</div>
@endif
<div class="font-bold">Flatrate Stream</div>
<div class="flex flex-wrap space-x-1">
@forelse($tmdb->getWatchProviders()->filter(
function($key, $value) {
return $value->getIso31661() == 'DE' && count($value->getFlatrate()) > 0;
}
) as $wp)
@foreach($wp->getFlatrate() as $p)
<img src="{{ $image->getUrl($p->getLogoPath(), 'w45') }}" title="{{ $p->getName() }}" class="rounded-lg max-h-8">
@endforeach
@empty
<div class="italic">Keine</div>
@endforelse
</div>
<div class="font-bold">Kaufen / Leihen</div>
<div class="flex flex-wrap space-x-1">
@foreach($tmdb->getWatchProviders()->filter(
function($key, $value) {
return $value->getIso31661() == 'DE' && (count($value->getRent()) > 0 || count($value->getBuy()) > 0);
}
) as $wp)
@foreach($wp->getRent() as $p)
<img src="{{ $image->getUrl($p->getLogoPath(), 'w45') }}" title="{{ $p->getName() }}" class="rounded-lg max-h-8">
@endforeach
@endforeach
</div>
<div class="col-span-2 font-bold">Handlung</div>
<div class="col-span-2 font-serif border-l-4 border-burnt pl-6">{{ $tmdb->getOverview() }}</div>
</div>
<div id="#schauspieler" class="px-4 grid grid-cols-4 gap-2" x-show="tab == 'cast'" x-transition>
@foreach($tmdb->getCredits()->getCast() as $role)
@if ($loop->index > 11)
@break
@endif
<div class="pb-2">
@if ($role->getProfileImage() != "")
<img src="{{ $image->getUrl($role->getProfileImage() , "w185") }}" class="rounded-lg mb-1">
@else
<img src="/img/no-portrait.png" class="rounded-lg mb-1">
@endif
<div class="font-bold">{{ $role->getName() }}</div>
<div class="text-burnt">{{ $role->getCharacter() }}</div>
</div>
@endforeach
</div>
<div id="trailer" class="px-4" x-show="tab == 'vids'" x-transition>
@foreach ($tmdb->getVideos()->filter(
function($key, $value) {
return $value->getType() == "Trailer";
}
) as $vid)
<div class="font-bold">{{ $vid->getName() }}</div>
<div class="relative overflow-hidden w-full sm:w-[calc(100%-384px)] after:block after:pt-[56.25%]">
<iframe class="absolute top-0 left-0 w-full h-full" src="//www.youtube.com/embed/{{ $vid->getKey() }}" frameborder="0" allowfullscreen></iframe>
</div>
@endforeach
</div>
</div>
</div>
@php
$votes = $film->votes()->count();
if(!is_null(auth()->user()))
$uvote = $film->votes()->where('user', auth()->id())->first();
@endphp
@if( $votes > 0 || (is_null($film->seen) && is_null($film->rejected)))
<div class="py-6 " id="voting">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 text-crayola ">
<h2 class="font-semibold text-xl text-crayola leading-tight sm:rounded-lg bg-coal mb-6 p-4">
Abstimmung
</h2>
@if($votes > 0)
<div class="px-2">
<p>
Insgesamt haben <b>{{ $votes }}</b> Personen abgestimmt.
<b>{{ $film->votes->where('vote', 1)->count() }}</b> waren <i>dafür</i>.
@if(!is_null(auth()->user()))
Du hast {!! is_null($uvote) ? '<i>nicht</i> ab' : ($uvote->vote == 0 ? '<i>nicht dafür</i> ' : '<i>dafür</i> ') !!}gestimmt.
@endif
</p>
<div class="grid grid-cols-2 gap-2">
<div class="text-burnt">Dafür</div>
<div class="text-burnt">Nicht dafür</div>
<div class="flex flex-col sm:flex-row flex-wrap">
@foreach($film->votes->reject( function ($v) { return $v->vote == 0; }) as $vote)
<div class="flex mb-1 mr-1 p-2 border border-burnt rounded-lg {{ $vote->voter->isActive() ? '' : 'italic border-coal text-field' }}"><img src="/avatar/{{$vote->voter->getAvatar() }}" class="max-h-6 rounded-lg mr-1"> {{ $vote->voter->name }}</div>
@endforeach
</div>
<div class="flex flex-col sm:flex-row flex-wrap">
@foreach($film->votes->reject( function ($v) { return $v->vote == 1; }) as $vote)
<div class="flex mb-1 mr-1 p-2 border border-burnt rounded-lg {{ $vote->voter->isActive() ? '' : 'italic border-coal text-field' }}"><img src="/avatar/{{$vote->voter->getAvatar() }}" class="max-h-6 rounded-lg mr-1"> {{ $vote->voter->name }}</div>
@endforeach
</div>
</div>
</div>
@endif
@if(is_null($film->seen) && is_null($film->rejected) && !is_null(auth()->user()))
<div class="py-6">
<div class="flex mx-auto w-80">
<a href="/film/vote/{{ $film->id }}/1" class="flex rounded-l-lg border-2 border-r-0 border-burnt p-4 w-40">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg>
Dafür
</a>
<a href="/film/vote/{{ $film->id }}/0" class="flex rounded-r-lg border-2 border-l-1 border-burnt p-4 w-40">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt" viewBox="0 0 20 20" fill="currentColor">
<path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
<path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
</svg>
Nicht dafür
</a>
</div>
</div>
@endif
</div>
</div>
@endif
<div class="py-6 ">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-crayola">
<h2 class="font-semibold text-xl text-crayola leading-tight sm:rounded-lg bg-coal mb-6 p-4">
Kommentare
</h2>
<div class="px-2">
@if (is_null(auth()->user()))
<p>Melde Dich an, um diesen Film zu kommentieren.</p>
@else
<div>
<img src="/avatar/{{ auth()->user()->getAvatar() }}" alt="User Avatar" class="rounded-lg w-16 float-left mr-2">
<div class="">
<h4 class="font-semibold">Neuer Kommentar</h4>
<div class="flex" x-data="{ stars: 0 }">
<input type="hidden" name="vote" id="vote" x-bind:value="stars">
<p @@click="stars = 0">Bewerten: </p>
<div @@click="stars = 1">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 1 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 2 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 3">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 3 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 4">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 4 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 5">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 5 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 6">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 6 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 7">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 7 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 8">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 8 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 9">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 9 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 10">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 10 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
</div>
<textarea class="block w-[calc(100%-4.5rem)] my-1 rounded-lg border-1 border-field bg-coal"></textarea>
<x-button class="ml-[4.5rem]">Absenden</x-button>
</div>
</div>
@endif
@foreach ($film->comments()->orderBy('created_at', 'DESC')->get() as $comment)
<div class="clear-left my-2 min-h-[4rem]" x-data="{edit: false}">
<img src="/avatar/{{ $comment->author->getAvatar() }}" alt="{{ $comment->author->name }} Avatar" class="rounded-lg w-16 float-left mr-2">
<h4 class="font-bold">
{{ $comment->author->name }}
<span class="text-sm font-light">
{{ \Carbon\Carbon::parse($comment->created_at)->format('d.m.Y H:i') }}
@if ($comment->updated_at != $comment->created_at)
&mdash; Zuletzt bearbeitet: {{ \Carbon\Carbon::parse($comment->updated_at)->format('d.m.Y H:i') }}
@endif
</span>
</h4>
@if($comment->evaluation > 0)
<div class="flex" title="{{ $comment->evaluation }}" x-show="!edit">
@for ($i = 0; $i < $comment->evaluation; $i++)
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt" viewBox="0 0 20 20" fill="currentColor">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
@endfor
<span>({{$comment->evaluation}})</span>
</div>
@endif
@if(!is_null(auth()->user()) && auth()->user()->id == $comment->author->id)
<button class="text-yelmax float-right" @@click="edit = !edit" x-text="edit ? 'Abbrechen' : 'Bearbeiten'"></button>
<p x-show="!edit" x-transition>{{ $comment->body }}</p>
<div x-show="edit" x-transition>
@if($comment->evaluation > 0)
<div class="flex" x-data="{ stars: {{ $comment->evaluation }} }">
<input type="hidden" name="vote" id="vote" x-bind:value="stars">
<p @@click="stars = 0">Bewerten: </p>
<div @@click="stars = 1">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 1 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 2 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 3">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 3 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 4">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 4 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 5">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 5 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 6">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 6 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 7">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 7 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 8">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 8 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 9">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 9 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
<div @@click="stars = 10">
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" x-bind:class="stars >= 10 ? 'text-burnt' : ''">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
</div>
</div>
@endif
<textarea class="block w-[calc(100%-4.5rem)] my-1 rounded-lg border-1 border-field bg-coal">{{ $comment->body }}</textarea>
<x-button class="ml-[4.5rem]">Speichern</x-button>
</div>
@else
<p>{{ $comment->body }}</p>
@endif
</div>
@endforeach
</div>
</div>
</div>
</x-app-layout>

View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">
<!-- Styles -->
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
</head>
<body class="font-sans antialiased">
<div class="min-h-screen bg-fogra">
@include('layouts.navigation')
<!-- Page Heading -->
<header class="bg-coal shadow">
<div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
{{ $header }}
</div>
</header>
<!-- Page Content -->
<main>
{{ $slot }}
</main>
</div>
</body>
</html>

View File

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">
<!-- Styles -->
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
</head>
<body>
<div class="font-sans text-crayola antialiased">
{{ $slot }}
</div>
</body>
</html>

View File

@@ -0,0 +1,118 @@
<nav x-data="{ open: false }" class="bg-burnt shadow">
<!-- Primary Navigation Menu -->
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between h-16">
<div class="flex">
<!-- Logo -->
<div class="shrink-0 flex items-center">
<a href="{{ route('home') }}">
<x-application-logo class="block h-14 w-auto fill-current text-fogra hover:text-yelmax font-bold" />
</a>
</div>
<!-- Navigation Links -->
<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
<x-nav-link class="text-fogra" :href="route('vorschlag')" :active="request()->routeIs('vorschlag')">
{{ __('Vorschläge') }}
</x-nav-link>
<x-nav-link class="text-fogra" :href="route('gesehen')" :active="request()->routeIs('gesehen')">
{{ __('Archiv') }}
</x-nav-link>
<x-nav-link class="text-fogra" :href="route('neu')" :active="request()->routeIs('neu')">
{{ __('Film vorschlagen') }}
</x-nav-link>
</div>
</div>
<!-- Settings Dropdown -->
<div class="hidden sm:flex sm:items-center sm:ml-6">
@if (Auth::check())
<x-dropdown align="right" width="48">
<x-slot name="trigger">
<button class="flex items-center text-sm font-medium text-fogra hover:text-yelmax hover:border-yelmax focus:outline-none focus:text-yelmax focus:border-yelmax transition duration-150 ease-in-out">
<div>{{ Auth::user()->name }}</div>
<div class="ml-1">
<svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" />
</svg>
</div>
</button>
</x-slot>
<x-slot name="content">
<!-- Authentication -->
<form method="POST" action="{{ route('logout') }}">
@csrf
<x-dropdown-link :href="route('logout')"
onclick="event.preventDefault();
this.closest('form').submit();">
{{ __('Log Out') }}
</x-dropdown-link>
</form>
</x-slot>
</x-dropdown>
@else
<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
<x-nav-link :href="route('login')" :active="request()->routeIs('login')">
{{ __('login') }}
</x-nav-link>
</div>
@endif
</div>
<!-- Hamburger -->
<div class="-mr-2 flex items-center sm:hidden">
<button @click="open = ! open" class="inline-flex items-center justify-center p-2 rounded-md text-fogra hover:text-yelmax focus:outline-none transition duration-150 ease-in-out">
<svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
<path :class="{'hidden': open, 'inline-flex': ! open }" class="inline-flex" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
<path :class="{'hidden': ! open, 'inline-flex': open }" class="hidden" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
</div>
</div>
<!-- Responsive Navigation Menu -->
<div :class="{'block': open, 'hidden': ! open}" class="hidden sm:hidden">
<div class="pt-2 pb-3 space-y-1">
<x-responsive-nav-link :href="route('vorschlag')" :active="request()->routeIs('vorschlag')">
{{ __('Vorschläge') }}
</x-responsive-nav-link>
<x-responsive-nav-link :href="route('neu')" :active="request()->routeIs('neu')">
{{ __('Film vorschlagen') }}
</x-responsive-nav-link>
<x-responsive-nav-link :href="route('gesehen')" :active="request()->routeIs('gesehen')">
{{ __('Archiv') }}
</x-responsive-nav-link>
</div>
<!-- Responsive Settings Options -->
<div class="pt-4 pb-1 border-t border-field">
@if (Auth::check())
<div class="px-4">
<div class="font-medium text-base text-fogra">{{ Auth::user()->name }}</div>
<div class="font-medium text-sm text-field">{{ Auth::user()->email }}</div>
</div>
<div class="mt-3 space-y-1">
<!-- Authentication -->
<form method="POST" action="{{ route('logout') }}">
@csrf
<x-responsive-nav-link :href="route('logout')"
onclick="event.preventDefault();
this.closest('form').submit();">
{{ __('Log Out') }}
</x-responsive-nav-link>
</form>
</div>
@else
<x-responsive-nav-link :href="route('login')" :active="request()->routeIs('login')">
{{ __('Login') }}
</x-responsive-nav-link>
@endif
</div>
</div>
</nav>

View File

@@ -0,0 +1,40 @@
@foreach($filme as $film)
@if($loop->first)
<div class="sm:rounded-lg bg-coal text-yelmax mt-6 p-4">Gesehene, vorgeschlagene & abgelehnte Filme</div>
<div class="flex flex-wrap">
@endif
<a class="my-4 px-4 w-full md:w-1/3 lg:w-1/4 xl:w-1/5 flex-grow-0 flex-shrink-0 block" href="/film/{{$film->id}}">
<img src="{{ $ihelp->getUrl($film->poster, 'w92') }}" alt ="{{$film->title}}" class="rounded-lg shadow-md shadow-burnt float-left mr-2">
<div class="text-yelmax font-semibold">{{ $film->name }}</div>
@if(!is_null($film->seen))
<div class="flex">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z" />
</svg>
{{ \Carbon\Carbon::parse($film->seen)->format('d.m.Y') }}
</div>
@elseif(!is_null($film->rejected))
<div class="flex">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2 text-red-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636" />
</svg>
{{ \Carbon\Carbon::parse($film->rejected)->format('d.m.Y') }}
</div>
@else
<div class="text-field flex my-2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2 text-yelmax" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
{{ \Carbon\Carbon::parse($film->suggested)->format('d.m.Y') }}
</div>
@endif
<div class="text-field flex my-2"><img src="/avatar/{{$film->suggester->getAvatar() }}" class="max-h-7 rounded-lg mr-2"> {{ $film->suggester->name }}</div>
</a>
@if($loop->last)
</div>
@endif
@endforeach
@if($count > 12)
<div class="w-full text-center italic mt-2">Es gibt weitere Suchergebnisse. Grenze die Suche ein, falls das gewünschte Ergebnis nicht gefunden wurde.</div>
@endif

View File

@@ -0,0 +1,221 @@
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-burnt leading-tight">
{{ __('Dumbo Filmabendplaner') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 container">
<div class="">
<a href="/film/{{$feature->id}}">
<div class="p-6 sm:rounded-lg h-96 relative" style="
background: linear-gradient(to bottom right, #000000, #000000be, #00000000),
url('{{ $image->getUrl($ftmdb->getBackdropImage(), 'original') }}') center center/cover;">
<img src="{{ $image->getUrl($ftmdb->getPosterImage(), 'w342') }}" alt="{{ $ftmdb->getTitle() }} Poster" class="rounded-lg mx-auto mb-6 sm:float-right sm:mx-0 sm:ml-6 shadow-md shadow-burnt h-80 hidden sm:block">
<span class="text-crayola">{{ $ftype === 'next' ? 'Nächster Film' : 'Zuletzt gesehen' }}</span>
<h3 class="text-burnt drop-shadow-[0_4px_3px_#684f43] text-4xl">{{ $feature->name }}</h3>
<div class="text-crayola mt-4">
{{$ftmdb->getTagline()}}
</div>
<div class="flex flex-wrap space-x-1 text-crayola mt-4">
@foreach ($ftmdb->getGenres() as $genre)
<div class="bg-coal rounded-lg p-1">{{ $genre->getName() }}</div>
@endforeach
</div>
<div class="text-crayola max-w-md text-justify mt-4 hidden md:block">
{{ substr($ftmdb->getOverview(), 0, 200) }}...
</div>
<div class="text-yelmax">{{ $ftype == 'next' ? 'Klick für Details' : 'Jetzt bewerten!'}}</div>
<div class="absolute bottom-2 flex text-crayola">
<img src="/avatar/{{$feature->suggester->getAvatar() }}" class="max-h-7 rounded-lg mr-2"> {{ $feature->suggester->name }}
@if ($ftype === 'last')
&middot; Gesehen am {{ \Carbon\Carbon::parse($feature->seen)->format('d.m.Y') }}
@endif
</div>
</div>
</a>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mt-6">
<div class="">
<div class="sm:rounded-lg bg-coal text-crayola text-lg p-4">
Beliebte Vorschläge
<a class="text-sm text-yelmax" href="/vorschlaege">Mehr</a>
</div>
<div class="grid grid-cols-1 gap-2 mt-2 " x-data="{active: 1}">
@foreach ($popular as $film)
<a href="/film/{{ $film->id }}" :class="active == {{ $loop->iteration }} ? 'block' : 'hidden'" x-transition>
<div class="rounded-lg p-2 h-40 bg-black ">
<img src="{{ $image->getUrl($film->poster, 'w92') }}" alt="{{ $film->name }}" class="rounded-lg float-left mr-2 shadow-md shadow-burnt">
<div class="text-burnt text-xl">{{ $film->name }}</div>
<div class="text-crayola flex text-xl">
@php
$stimme = is_null(auth()->user()) ? null : $film->votes()->where('user', auth()->user()->id)->first();
@endphp
@if (!is_null($stimme) && $stimme->vote == 0)
<svg title="Deine Stimme: Nicht dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-red-700 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
<path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
</svg> &middot;
@elseif (!is_null($stimme) && $stimme->vote == 1)
<svg title="Deine Stimme: Dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-900 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg> &middot;
@elseif(auth()->user() !== null)
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-field sm:h-8 sm:w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
</svg> &middot;
@endif
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm3 4a1 1 0 000 2h.01a1 1 0 100-2H7zm3 0a1 1 0 000 2h3a1 1 0 100-2h-3zm-3 4a1 1 0 100 2h.01a1 1 0 100-2H7zm3 0a1 1 0 100 2h3a1 1 0 100-2h-3z" clip-rule="evenodd" />
</svg>
{{ $film->activeVotes()->where('vote', 1)->count() }}<span class="text-field">/{{ $film->activeVotes()->count() }}</span>
</div>
<div class="text-xs text-field sm:hidden"> {{ \Carbon\Carbon::parse($film->suggested)->format('d.m.Y') }} &middot; {{ $film->suggester->name }}</div>
<div class="text-field hidden sm:flex my-2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
{{ \Carbon\Carbon::parse($film->suggested)->format('d.m.Y') }}
</div>
<div class="text-field hidden sm:flex my-2"><img src="/avatar/{{$film->suggester->getAvatar() }}" class="max-h-7 rounded-lg mr-2"> {{ $film->suggester->name }}</div>
</div></a>
@endforeach
<div class="flex justify-center p-2">
@foreach ($popular as $film)
<img @click="active = {{$loop->iteration}}" :class="active == {{$loop->iteration}} && 'shadow-md shadow-burnt'" src="{{ $image->getUrl($film->poster, 'w92') }}" alt="{{ $film->name }}" class="rounded-lg float-left mr-2 cursor-pointer h-20">
@endforeach
</div>
</div>
</div>
<div class="">
<div class="sm:rounded-lg bg-coal text-crayola text-lg p-4">Neue Vorschläge <a class="text-sm text-yelmax" href="/vorschlaege/neu">Mehr</a></div>
<div class="grid grid-cols-1 gap-2 mt-2 " x-data="{active: 1}">
@foreach ($new as $film)
<a href="/film/{{ $film->id }}" :class="active == {{ $loop->iteration }} ? 'block' : 'hidden'" x-transition>
<div class="rounded-lg p-2 h-40 bg-black ">
<img src="{{ $image->getUrl($film->poster, 'w92') }}" alt="{{ $film->name }}" class="rounded-lg float-left mr-2 shadow-md shadow-burnt">
<div class="text-burnt text-xl">{{ $film->name }}</div>
<div class="text-crayola flex text-xl">
@php
$stimme = is_null(auth()->user()) ? null : $film->votes()->where('user', auth()->user()->id)->first();
@endphp
@if (!is_null($stimme) && $stimme->vote == 0)
<svg title="Deine Stimme: Nicht dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-red-700 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
<path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
</svg> &middot;
@elseif (!is_null($stimme) && $stimme->vote == 1)
<svg title="Deine Stimme: Dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-900 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg> &middot;
@elseif(auth()->user() !== null)
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-field sm:h-8 sm:w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
</svg> &middot;
@endif
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm3 4a1 1 0 000 2h.01a1 1 0 100-2H7zm3 0a1 1 0 000 2h3a1 1 0 100-2h-3zm-3 4a1 1 0 100 2h.01a1 1 0 100-2H7zm3 0a1 1 0 100 2h3a1 1 0 100-2h-3z" clip-rule="evenodd" />
</svg>
{{ $film->activeVotes()->where('vote', 1)->count() }}<span class="text-field">/{{ $film->activeVotes()->count() }}</span>
</div>
<div class="text-field flex my-2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
{{ \Carbon\Carbon::parse($film->suggested)->format('d.m.Y') }}
</div>
<div class="text-field flex my-2"><img src="/avatar/{{$film->suggester->getAvatar() }}" class="max-h-7 rounded-lg mr-2"> {{ $film->suggester->name }}</div>
</div></a>
@endforeach
<div class="flex justify-center p-2">
@foreach ($new as $film)
<img @click="active = {{$loop->iteration}}" :class="active == {{$loop->iteration}} && 'shadow-md shadow-burnt'" src="{{ $image->getUrl($film->poster, 'w92') }}" alt="{{ $film->name }}" class="rounded-lg float-left mr-2 cursor-pointer h-20">
@endforeach
</div>
</div>
</div>
<div class="">
<div class="sm:rounded-lg bg-coal text-crayola text-lg p-4">Gesehene Filme <a class="text-sm text-yelmax" href="/gesehen">Archiv</a> &middot; <a class="text-sm text-yelmax" href="/abgelehnt">Abgelehnt</a></div>
<div class="grid grid-cols-1 gap-2 mt-2 " x-data="{active: 1}">
@foreach ($seen as $film)
<a href="/film/{{ $film->id }}" :class="active == {{ $loop->iteration }} ? 'block' : 'hidden'" x-transition>
<div class="rounded-lg p-2 h-40 bg-black ">
<img src="{{ $image->getUrl($film->poster, 'w92') }}" alt="{{ $film->name }}" class="rounded-lg float-left mr-2 shadow-md shadow-burnt">
<div class="text-burnt text-xl">{{ $film->name }}</div>
<div class="flex sm:text-3xl text-crayola">
@php
$stimme = is_null(auth()->user()) ? null : $film->votes()->where('user', auth()->user()->id)->first();
@endphp
@if (!is_null($stimme) && $stimme->vote == 0)
<svg title="Deine Stimme: Nicht dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-red-700 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
<path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
</svg> &middot;
@elseif (!is_null($stimme) && $stimme->vote == 1)
<svg title="Deine Stimme: Dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-900 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg> &middot;
@endif
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M2 5a2 2 0 012-2h7a2 2 0 012 2v4a2 2 0 01-2 2H9l-3 3v-3H4a2 2 0 01-2-2V5z" />
<path d="M15 7v2a4 4 0 01-4 4H9.828l-1.766 1.767c.28.149.599.233.938.233h2l3 3v-3h2a2 2 0 002-2V9a2 2 0 00-2-2h-1z" />
</svg>
{{ $film->comments()->count() }}
@if($film->getBewertung() > 0)
&middot;
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
</svg>
{{ number_format($film->getBewertung(), 1, '.', '') }}
@endif
</div>
<div class="text-field flex my-2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z" />
</svg>
{{ \Carbon\Carbon::parse($film->seen)->format('d.m.Y') }}
</div>
<div class="text-field flex my-2"><img src="/avatar/{{$film->suggester->getAvatar() }}" class="max-h-7 rounded-lg mr-2"> {{ $film->suggester->name }}</div>
</div></a>
@endforeach
<div class="flex justify-center p-2">
@foreach ($seen as $film)
<img @click="active = {{$loop->iteration}}" :class="active == {{$loop->iteration}} && 'shadow-md shadow-burnt'" src="{{ $image->getUrl($film->poster, 'w92') }}" alt="{{ $film->name }}" class="rounded-lg float-left mr-2 cursor-pointer h-20">
@endforeach
</div>
</div>
</div>
<div class="">
<div class="sm:rounded-lg bg-coal text-crayola text-lg p-4">News</div>
@foreach($news as $n)
<div class="mt-2" x-data="{active: {{ $loop->first ? 'true': 'false' }}}">
<div @click="active = !active" x-transition class="text-yelmax bg-field sm:rounded-lg p-2 cursor-pointer">
{{$n->headline}} <span class="text-crayola text-xs">{{{ $n->created_at === $n->updated_at ? \Carbon\Carbon::parse($n->created_at)->format('d.m.Y H:i') : \Carbon\Carbon::parse($n->updated_at)->format('d.m.Y H:i') . ' (bearbeitet)' }}}</span>
<div class="float-right flex text-crayola"><img src="/avatar/{{$n->author->getAvatar() }}" class="max-h-7 rounded-lg mr-2"> {{ $n->author->name }}</div>
</div>
<div class="p-2 text-crayola text-justify" x-show="active" x-transition>{!! nl2br($n->body) !!}</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
</x-app-layout>

View File

@@ -0,0 +1,24 @@
@foreach($filme as $film)
@if($loop->first)
<div class="sm:rounded-lg bg-coal text-yelmax mt-6 p-4">Neue Filme</div>
<div class="p-4">
@endif
<div class="clear-left mb-6">
<img src="{{ $image->getUrl($film->getPosterImage(), 'w92') }}" alt="{{ $film->getTitle() }} Poster" class="rounded-lg mx-auto mb-6 float-left mr-2 shadow-md shadow-burnt max-w-[100px]">
<div class="text-yelmax">{{ $film->getTitle() }}</div>
<a class="rounded-lg border-burnt cursor-pointer float-right ml-2 p-2 border hover:bg-burnt hover:text-coal" href="/vorschlag/{{ $film->getId() }}">Vorschlagen</a>
<div class="text-xs">
<span class="text-burnt">{{ $film->getReleaseDate() ? $film->getReleaseDate()->format('Y') : $film->getReleaseDate() }}</span>
&middot; Original: <span class="italic">{{ $film->getOriginalTitle() }}</span>
</div>
<div class="font-serif">{{ $film->getOverview() }}</div>
</div>
@if($loop->last)
</div>
@endif
@endforeach
@if($filme->getTotalPages() > 1)
<div class="w-full text-center italic mt-2 clear-both">Es gibt weitere Suchergebnisse. Grenze die Suche ein, falls das gewünschte Ergebnis nicht gefunden wurde.</div>
@endif
<div class="w-full text-center italic mt-2 clear-both">Daten bereitgestellt von TheMovieDatabase.</div>

View File

@@ -0,0 +1,20 @@
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-burnt leading-tight">
{{ __($title) }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 text-crayola" x-data="{term: ''}">
<div class="w-full sm:rounded-lg bg-coal px-6 py-4 shadow-md overflow-hidden">
<label for="suche" class="block font-medium text-sm text-crayola">Suche nach Film</label>
<input id="suche" x-model.debounce.500ms="term" type="search" class="rounded-xl shadow-md border-field focus:border-burnt bg-fogra block mt-1 w-full" autofocus="autofocus"> </div>
<div x-show="term !== ''">
<div x-html="(await axios.get('/api/search/' + term)).data"></div>
<div x-html="(await axios.get('/api/remotesearch/' + term)).data"></div>
</div>
</div>
</div>
</x-app-layout>

View File

@@ -0,0 +1,46 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,88 @@
@if ($paginator->hasPages())
<nav class="d-flex justify-items-center justify-content-between">
<div class="d-flex justify-content-between flex-fill d-sm-none">
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</div>
<div class="d-none flex-sm-fill d-sm-flex align-items-sm-center justify-content-sm-between">
<div>
<p class="small text-muted">
{!! __('Showing') !!}
<span class="font-medium">{{ $paginator->firstItem() }}</span>
{!! __('to') !!}
<span class="font-medium">{{ $paginator->lastItem() }}</span>
{!! __('of') !!}
<span class="font-medium">{{ $paginator->total() }}</span>
{!! __('results') !!}
</p>
</div>
<div>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span class="page-link" aria-hidden="true">&lsaquo;</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span class="page-link" aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</div>
</div>
</nav>
@endif

View File

@@ -0,0 +1,46 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span aria-hidden="true">&lsaquo;</span>
</li>
@else
<li>
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active" aria-current="page"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li>
<a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>
</li>
@else
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span aria-hidden="true">&rsaquo;</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,36 @@
@if ($paginator->hasPages())
<div class="ui pagination menu" role="navigation">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<a class="icon item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')"> <i class="left chevron icon"></i> </a>
@else
<a class="icon item" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')"> <i class="left chevron icon"></i> </a>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<a class="icon item disabled" aria-disabled="true">{{ $element }}</a>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<a class="item active" href="{{ $url }}" aria-current="page">{{ $page }}</a>
@else
<a class="item" href="{{ $url }}">{{ $page }}</a>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a class="icon item" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')"> <i class="right chevron icon"></i> </a>
@else
<a class="icon item disabled" aria-disabled="true" aria-label="@lang('pagination.next')"> <i class="right chevron icon"></i> </a>
@endif
</div>
@endif

View File

@@ -0,0 +1,27 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.previous')</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">@lang('pagination.next')</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,29 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation">
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">{!! __('pagination.previous') !!}</span>
</li>
@else
<li class="page-item">
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">
{!! __('pagination.previous') !!}
</a>
</li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li class="page-item">
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">{!! __('pagination.next') !!}</a>
</li>
@else
<li class="page-item disabled" aria-disabled="true">
<span class="page-link">{!! __('pagination.next') !!}</span>
</li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,19 @@
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true"><span>@lang('pagination.previous')</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a></li>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a></li>
@else
<li class="disabled" aria-disabled="true"><span>@lang('pagination.next')</span></li>
@endif
</ul>
</nav>
@endif

View File

@@ -0,0 +1,25 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="Pagination Navigation" class="flex justify-between">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.previous') !!}
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</a>
@endif
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" rel="next" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</a>
@else
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-500 bg-white border border-gray-300 cursor-default leading-5 rounded-md">
{!! __('pagination.next') !!}
</span>
@endif
</nav>
@endif

View File

@@ -0,0 +1,106 @@
@if ($paginator->hasPages())
<nav role="navigation" aria-label="{{ __('Pagination Navigation') }}" class="flex items-center justify-between">
<div class="flex justify-between flex-1 sm:hidden">
@if ($paginator->onFirstPage())
<span class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-field bg-coal border border-field cursor-default leading-5 rounded-md">
{!! __('pagination.previous') !!}
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}" class="relative inline-flex items-center px-4 py-2 text-sm font-medium text-crayola bg-fogra border border-field leading-5 rounded-md hover:text-yelmax hover:border-burnt hover:bg-coal focus:outline-none focus:ring ring-burnt focus:border-burnt active:bg-field active:text-yelmax transition ease-in-out duration-150">
{!! __('pagination.previous') !!}
</a>
@endif
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-crayola bg-fogra border border-field leading-5 rounded-md hover:text-yelmax hover:border-burnt hover:bg-coal focus:outline-none focus:ring ring-burnt focus:border-burnt active:bg-field active:text-yelmax transition ease-in-out duration-150">
{!! __('pagination.next') !!}
</a>
@else
<span class="relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-field bg-coal border border-field cursor-default leading-5 rounded-md">
{!! __('pagination.next') !!}
</span>
@endif
</div>
<div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between">
<div>
<p class="text-sm text-field leading-5">
{!! __('Zeige') !!}
@if ($paginator->firstItem())
<span class="font-medium">{{ $paginator->firstItem() }}</span>
{!! __('bis') !!}
<span class="font-medium">{{ $paginator->lastItem() }}</span>
@else
{{ $paginator->count() }}
@endif
{!! __('von') !!}
<span class="font-medium">{{ $paginator->total() }}</span>
{!! __('Ergebnissen') !!}
</p>
</div>
<div>
<span class="relative z-0 inline-flex shadow-sm rounded-md">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<span aria-disabled="true" aria-label="{{ __('pagination.previous') }}">
<span class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-field bg-coal border border-field cursor-default rounded-l-md leading-5" aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
</span>
</span>
@else
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" class="relative inline-flex items-center px-2 py-2 text-sm font-medium text-crayola bg-fogra border border-field rounded-l-md leading-5 hover:text-yelmax hover:border-burnt hover:bg-coal focus:z-10 focus:outline-none focus:ring ring-burnt focus:border-burnt active:bg-field active:text-yelmax transition ease-in-out duration-150" aria-label="{{ __('pagination.previous') }}">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
</a>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<span aria-disabled="true">
<span class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-crayola bg-fogra border border-field cursor-default leading-5">{{ $element }}</span>
</span>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<span aria-current="page">
<span class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-yelmax bg-coal border border-field cursor-default leading-5">{{ $page }}</span>
</span>
@else
<a href="{{ $url }}" class="relative inline-flex items-center px-4 py-2 -ml-px text-sm font-medium text-crayola bg-fogra border border-field leading-5 hover:text-yelmax hover:border-burnt hover:bg-coal focus:z-10 focus:outline-none focus:ring ring-burnt focus:border-burnt active:bg-field active:text-yelmax transition ease-in-out duration-150" aria-label="{{ __('Go to page :page', ['page' => $page]) }}">
{{ $page }}
</a>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<a href="{{ $paginator->nextPageUrl() }}" rel="next" class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-crayola bg-fogra border border-field rounded-r-md leading-5 hover:text-yelmax hover:border-burnt hover:bg-coal focus:z-10 focus:outline-none focus:ring ring-burnt focus:border-burnt active:bg-field active:text-yelmax transition ease-in-out duration-150" aria-label="{{ __('pagination.next') }}">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</a>
@else
<span aria-disabled="true" aria-label="{{ __('pagination.next') }}">
<span class="relative inline-flex items-center px-2 py-2 -ml-px text-sm font-medium text-field bg-coal border border-field cursor-default rounded-r-md leading-5" aria-hidden="true">
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</span>
</span>
@endif
</span>
</div>
</div>
</nav>
@endif

View File

@@ -0,0 +1,81 @@
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-burnt leading-tight">
{{ __('Filmvorschläge ' . $title) }}
</h2>
@if($title == 'nach Datum')
<a href="/vorschlaege" class="text-yelmax">&rightarrow; Vorschläge nach Beliebtheit</a>
@else
<a href="/vorschlaege/neu" class="text-yelmax">&rightarrow; Vorschläge nach Datum</a>
@endif
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 text-crayola">
<div class="grid grid-cols-3 gap-2 sm:gap-4 my-4 px-2">
@foreach ($films as $film)
<div>
<a href="/film/{{$film->id}}" class="text-yelmax sm:float-left sm:mr-2">
<img src="{{ $film->poster !== '' ? $ihelp->getUrl($film->poster, 'w185') : "/img/no-portrait.png" }}" title="{{ $film->name }}" class="rounded-lg shadow-md shadow-burnt">
</a>
<a href="/film/{{$film->id}}" class="text-yelmax text-xs leading-3 sm:text-lg">{{$film->name}}</a>
<div class="flex sm:text-3xl">
@php
$stimme = is_null(auth()->user()) ? null : $film->votes()->where('user', auth()->user()->id)->first();
@endphp
@if (!is_null($stimme) && $stimme->vote == 0)
<svg title="Deine Stimme: Nicht dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-red-700 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
<path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
</svg> &middot;
@elseif (!is_null($stimme) && $stimme->vote == 1)
<svg title="Deine Stimme: Dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-900 sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg> &middot;
@elseif(auth()->user() !== null)
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-field sm:h-8 sm:w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
</svg> &middot;
@endif
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt sm:h-8 sm:w-8" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm3 4a1 1 0 000 2h.01a1 1 0 100-2H7zm3 0a1 1 0 000 2h3a1 1 0 100-2h-3zm-3 4a1 1 0 100 2h.01a1 1 0 100-2H7zm3 0a1 1 0 100 2h3a1 1 0 100-2h-3z" clip-rule="evenodd" />
</svg>
{{ $film->activeVotes()->where('vote', 1)->sum('vote') }} <span class="text-field"> /{{ $film->activeVotes()->count()}}</span>
</div>
<div class="text-xs text-field sm:hidden"> {{ \Carbon\Carbon::parse($film->suggested)->format('d.m.Y') }} &middot; {{ $film->suggester->name }}</div>
<div class="text-field hidden sm:flex my-2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
{{ \Carbon\Carbon::parse($film->suggested)->format('d.m.Y') }}
</div>
<div class="text-field hidden sm:flex my-2"><img src="/avatar/{{$film->suggester->getAvatar() }}" class="max-h-7 rounded-lg mr-2"> {{ $film->suggester->name }}</div>
</div>
@endforeach
</div>
{{ $films->links() }}
<div class="flex">
<svg title="Deine Stimme: Nicht dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-red-700" viewBox="0 0 20 20" fill="currentColor">
<path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" />
<path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" />
</svg> Du bist nicht dafür &middot;
<svg title="Deine Stimme: Dafür" xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-900" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm9.707 5.707a1 1 0 00-1.414-1.414L9 12.586l-1.293-1.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" />
</svg> Du bist dafür &middot;
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-field" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
</svg> Film wartet auf deine Stimme &middot;
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-burnt" viewBox="0 0 20 20" fill="currentColor">
<path d="M9 2a1 1 0 000 2h2a1 1 0 100-2H9z" />
<path fill-rule="evenodd" d="M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm3 4a1 1 0 000 2h.01a1 1 0 100-2H7zm3 0a1 1 0 000 2h3a1 1 0 100-2h-3zm-3 4a1 1 0 100 2h.01a1 1 0 100-2H7zm3 0a1 1 0 100 2h3a1 1 0 100-2h-3z" clip-rule="evenodd" />
</svg> Summe positiver/aller aktiven Stimmen
</div>
</div>
</div>
</x-app-layout>

View File

@@ -0,0 +1,152 @@
<x-app-layout>
<x-slot name="header">
<div class="float-right flex space-x-2">
<a href="https://themoviedb.org/movie/{{ $tmdb->getId() }}"><img src="/img/tmdb.svg" class="max-h-7 w-8"></a>
<a href="https://imdb.com/title/{{ $tmdb->getImdbId() }}"><img src="/img/IMDb_Logo_Square.svg" class="max-h-7"></a>
</div>
<h2 class="font-semibold text-xl text-burnt leading-tight">
{{ $tmdb->getTitle() }}
</h2>
<div class="text-burnt italic mt-2 text-lg">{{ $tmdb->getTagline() }}</div>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 text-crayola" x-data="{ tab: 'fact' }">
<!-- Session Status -->
<x-auth-session-status class="mb-4 border border-burnt p-2 rounded-lg bg-coal mx-auto max-w-xs" :status="session('status')" />
<div class="flex flex-wrap content-start">
@if(count($previous["suggested"]) < 1)
<div
class="border p-2 rounded-lg flex mb-6 bg-coal max-w-xs mr-2 ml-2 sm:ml-0 cursor-pointer hover:text-coal border-burnt"
:class="confseen ? 'bg-burnt text-coal hover:bg-crayola' : 'hover:bg-burnt'"
@click="confseen ? location.href='/vorschlag/{{ $tmdb->getId() }}/vorschlagen' : confseen = true"
@click.outside="confseen = false"
x-data="{confseen:false}"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class="h-6 w-6 mr-1" fill="currentColor"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M200 344V280H136C122.7 280 112 269.3 112 256C112 242.7 122.7 232 136 232H200V168C200 154.7 210.7 144 224 144C237.3 144 248 154.7 248 168V232H312C325.3 232 336 242.7 336 256C336 269.3 325.3 280 312 280H248V344C248 357.3 237.3 368 224 368C210.7 368 200 357.3 200 344zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z"/></svg>
<span x-text="confseen ? 'Wirklich vorschlagen?' : 'Vorschlagen'"></span>
</div>
@endif
@foreach ($previous["suggested"] as $film)
<a id="gesehen" class="border border-burnt p-2 rounded-lg flex mb-6 mr-2 bg-coal max-w-xs sm:ml-0" href="/film/{{$film["id"]}}">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class="h-6 w-6 mr-1" fill="currentColor"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M200 344V280H136C122.7 280 112 269.3 112 256C112 242.7 122.7 232 136 232H200V168C200 154.7 210.7 144 224 144C237.3 144 248 154.7 248 168V232H312C325.3 232 336 242.7 336 256C336 269.3 325.3 280 312 280H248V344C248 357.3 237.3 368 224 368C210.7 368 200 357.3 200 344zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z"/></svg>
Vorgeschlagen am {{ \Carbon\Carbon::parse($film["date"])->format('d.m.Y') }}
</a>
@endforeach
@foreach ($previous["seen"] as $film)
<a id="gesehen" class="border border-burnt p-2 rounded-lg flex mb-6 mr-2 bg-coal max-w-xs sm:ml-0" href="/film/{{$film["id"]}}">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="h-6 w-6 mr-1" fill="currentColor"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM48 368v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H416zM48 240v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H416zM48 112v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zM416 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H416zM160 128v64c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32zm32 160c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V320c0-17.7-14.3-32-32-32H192z"/></svg>
Gesehen am {{ \Carbon\Carbon::parse($film["date"])->format('d.m.Y') }}
</a>
@endforeach
@foreach ($previous["rejected"] as $film)
<a id="gesehen" class="border border-burnt p-2 rounded-lg flex mb-6 mr-2 bg-coal max-w-xs sm:ml-0" href="/film/{{$film["id"]}}">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="h-6 w-6 mr-1" fill="currentColor"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z"/></svg>
Abgelehnt am {{ \Carbon\Carbon::parse($film["date"])->format('d.m.Y') }}
</a>
@endforeach
</div>
<img src="{{ $image->getUrl($tmdb->getPosterImage(), 'w342') }}" alt="{{ $tmdb->getTitle() }} Poster" class="rounded-lg mx-auto mb-6 lg:float-right lg:mx-0 lg:ml-6 shadow-md shadow-burnt">
<div class="sm:rounded-lg bg-coal flex mb-6 px-4">
<a class="p-6 hover:text-yelmax cursor-pointer" x-bind:class="tab == 'fact' ? 'border-b-2 border-yelmax' : ''" @@click="tab = 'fact'">Allgemein</a>
<a class="p-6 hover:text-yelmax cursor-pointer" x-bind:class="tab == 'cast' ? 'border-b-2 border-yelmax' : ''" @@click="tab = 'cast'">Schauspieler</a>
<a class="p-6 hover:text-yelmax cursor-pointer" x-bind:class="tab == 'vids' ? 'border-b-2 border-yelmax' : ''" @@click="tab = 'vids'">Trailer</a>
</div>
<div id="#allgemein" class="px-4 grid grid-cols-2 gap-2" x-show="tab == 'fact'" x-transition>
<div class="font-bold">Originaltitel</div>
<div>{{ $tmdb->getOriginalTitle() }} ({{ $tmdb->getOriginalLanguage() }})</div>
<div class="font-bold">Laufzeit</div>
<div>{{ $tmdb->getRuntime() }} Minuten</div>
<div class="font-bold">Erschienen</div>
<div>{{ $tmdb->getReleaseDate()->format('d.m.Y') }} -
@foreach ($tmdb->getProductionCountries() as $co)
<abbr title="{{$co->getName()}}">{{$co->getIso31661()}}</abbr>
@endforeach
</div>
<div class="font-bold">Genre</div>
<div class="flex flex-wrap space-x-1">
@foreach ($tmdb->getGenres() as $genre)
<div class="bg-coal rounded-lg p-1">{{ $genre->getName() }}</div>
@endforeach
</div>
<div class="font-bold">TMDB Bewertung</div>
<div class="">{{ $tmdb->getVoteAverage() }} von 10</div>
<div class="font-bold">Flatrate Stream</div>
<div class="flex flex-wrap space-x-1">
@forelse($tmdb->getWatchProviders()->filter(
function($key, $value) {
return $value->getIso31661() == 'DE' && count($value->getFlatrate()) > 0;
}
) as $wp)
@foreach($wp->getFlatrate() as $p)
<img src="{{ $image->getUrl($p->getLogoPath(), 'w45') }}" title="{{ $p->getName() }}" class="rounded-lg max-h-8">
@endforeach
@empty
<div class="italic">Keine</div>
@endforelse
</div>
<div class="font-bold">Kaufen / Leihen</div>
<div class="flex flex-wrap space-x-1">
@foreach($tmdb->getWatchProviders()->filter(
function($key, $value) {
return $value->getIso31661() == 'DE' && (count($value->getRent()) > 0 || count($value->getBuy()) > 0);
}
) as $wp)
@foreach($wp->getRent() as $p)
<img src="{{ $image->getUrl($p->getLogoPath(), 'w45') }}" title="{{ $p->getName() }}" class="rounded-lg max-h-8">
@endforeach
@endforeach
</div>
<div class="col-span-2 font-bold">Handlung</div>
<div class="col-span-2 font-serif border-l-4 border-burnt pl-6">{{ $tmdb->getOverview() }}</div>
</div>
<div id="#schauspieler" class="px-4 grid grid-cols-4 gap-2" x-show="tab == 'cast'" x-transition>
@foreach($tmdb->getCredits()->getCast() as $role)
@if ($loop->index > 11)
@break
@endif
<div class="pb-2">
@if ($role->getProfileImage() != "")
<img src="{{ $image->getUrl($role->getProfileImage() , "w185") }}" class="rounded-lg mb-1">
@else
<img src="/img/no-portrait.png" class="rounded-lg mb-1">
@endif
<div class="font-bold">{{ $role->getName() }}</div>
<div class="text-burnt">{{ $role->getCharacter() }}</div>
</div>
@endforeach
</div>
<div id="trailer" class="px-4" x-show="tab == 'vids'" x-transition>
@foreach ($tmdb->getVideos()->filter(
function($key, $value) {
return $value->getType() == "Trailer";
}
) as $vid)
<div class="font-bold">{{ $vid->getName() }}</div>
<div class="relative overflow-hidden w-full sm:w-[calc(100%-384px)] after:block after:pt-[56.25%]">
<iframe class="absolute top-0 left-0 w-full h-full" src="//www.youtube.com/embed/{{ $vid->getKey() }}" frameborder="0" allowfullscreen></iframe>
</div>
@endforeach
</div>
</div>
</div>
</x-app-layout>

Some files were not shown because too many files have changed in this diff Show More