diff --git a/app/Http/Controllers/TagviewController.php b/app/Http/Controllers/TagviewController.php index a048667..6c6c839 100644 --- a/app/Http/Controllers/TagviewController.php +++ b/app/Http/Controllers/TagviewController.php @@ -7,9 +7,10 @@ use App\Models\Video; use App\Models\Banner; use Illuminate\Http\Request; use Illuminate\Database\Eloquent\Relations\HasMany; - use App\Http\Requests; +use Cviebrock\EloquentTaggable\Services\TagService; class TagviewController extends Controller + { /** * Display a listing of the resource. @@ -36,154 +37,41 @@ class TagviewController extends Controller // } - public function tagview($tag, $id = null) + public function showVideo($shortname, $id = null) { - + // return $shortname; + if (is_null($id)) { - // $x = Video::with('tags')->get(); - // return $x; - $x = Video::orderByRaw("RAND()")->with('tags')->whereHas('tags', function ($query) use ($tag) { - $query->where('normalized', $tag); - })->first(); - // $x = Video::orderByRaw("RAND()")->with('tags')->get()->first(); - $responseArray = json_decode($x, true); - $normalizedTags = array_column($responseArray['tags'], 'normalized'); - $variableToCompare = $tag; - if (in_array($variableToCompare, $normalizedTags)) { - // tag exists - return redirect('t/' . $tag . '/' . $x->id); - } else { - // tag does not exist on video - return 404; + $video = Video::getRandom($shortname, true); + if ($video instanceof HasMany) { + $video = $video->first(); } + else { + return redirect()->back()->with('error', 'tag is empty.'); + } + return redirect('/t/' . $shortname . '/' . $video->id); } else { - // return $id; - $video = Video::where('id', $id)->with('tags')->get(); - return view('tagviewdev', [ - 'video' => $video, - 'related' => $video, - 'tag' => $tag - ]); - + // Don't filter on specific video. + // TODO: Add warning page + $video = Video::withAnyTags($shortname)->find($id); } + + if (is_null($video)) { + return redirect()->back()->with('error', 'tag is empty.'); + } + + $sfw = $video->tags->contains(function($key, $tag) { + return $tag->normalized === 'sfw'; + }); + + return view('video', [ + 'video' => $video, + 'related' => $shortname, + 'isTag' => true, + 'sfw' => $sfw, + 'banner' => Banner::getRandom($video->isSfw())]); } - // public function tagview($tag, $id = null) - // { - // $x = Video::withAllTags($tag)->first(); - - // // return $x; - // // id 1 - // // file "1.webm" - // // videotitle "su" - // // interpret null - // // songtitle null - // // imgsource null - // // category_id 8 - // // user_id 1 - // // created_at "2024-02-22 00:31:49" - // // updated_at "2024-02-22 00:31:49" - // // deleted_at null - // // hash "3cdd7e0aa1a1cf175e06f22da2f485091f3b9f22" - // // tag_id 2 - // // taggable_id 1 - // // taggable_type "App\\Models\\Video" - // // name "misc" - // // normalized "misc" - - // if(!$id) { - // // gibs keine... - // $z = Video::getAllTags(); - // return $z; - // } else { - // $y = $x->id; - // return $y; - // } - // } - - // public function tagview($tag, $id = null) - // { - // // $tag_in = Video::withAnyTags($tag)->first(); - // // return $tag_in; - // $video = Video::getRandom($tag->id); - // if ($video instanceof HasMany) { - // $video = $video->first(); - // } - // // $video = Video::getRandom($tag->id); - - // if (is_null($id)) { - // $video = Video::getRandom($tag); - // } else { - - // } - // } - - // public function helloworld($tag, $id = null) - // { - // if(!$tag) { - // return redirect()->back()->with('error', 'Tag not found'); - // } - - // if (is_null($id)) { - // $tag = Video::withAnyTags($tag)->first(); - // return redirect('t/' . $tag->normalized . '/' . $tag->id); - // } else { - // $tag = Video::withAnyTags($tag)->first(); - // $video = Video::with('tags')->find($tag->id); - - // return view('tagviewdev', [ - // 'id' => $tag->id, - // 'video' => $video, - // 'tag' => $tag->name, - // 'related' => $video->name, - // 'banner' => 'banner' - // ]); - // } - - // if(!$id) { - // // is not null - // // implement redirect to t/$tag/$id - // } else { - // $tag = Video::withAnyTags($tag)->first(); - // // reverse lookup of $video thanks to the api for tag - // $video = Video::with('tags')->find($tag->id); - - // $tags = $video->tags; - - // return view('tagviewdev', [ - // 'video' => $video, - // 'tags' => $tags, - // 'related' => $tag->name - // ]); - // //return redirect('t/' . $tag . '/' . ); - // } - - // $blub = $tag->id; - // return $blub; - - // if (is_null($id)) { - - // $video = Video::getRandom($tag); - // if ($video instanceof HasMany) { - // $video = $video->first(); - // } - // else { - // return redirect()->back()->with('error', '404'); - // } - // return redirect('t/' . $tag . '/' . $video->id); - // } else { - // // Don't filter on specific video. - // // TODO: Add warning page - // // $video = $tag->videos()->find($id); - // } - - // //return $tag; - // return view('tagviewdev', [ - // 'tag' => $tag, - // 'related' => $tag, - // ]); - - /** * Store a newly created resource in storage. * diff --git a/app/Http/routes.php b/app/Http/routes.php index 1c20339..d8537fe 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -188,7 +188,7 @@ Route::group(["middleware" => "theme"], function() { Route::get('{shortname}/{id}', 'CategoryController@showVideo')->where(['shortname' => '[a-z][a-z0-9]+', 'id' => '[0-9]+']); ##Tag View anybody? - Route::get('t/{tag}', 'TagviewController@tagview')->where('tag', '[a-z][a-z0-9]+'); - Route::get('t/{tag}/{id}', 'TagviewController@tagview')->where(['tag' => '[a-z][a-z0-9]+', 'id' => '[0-9]+']); + Route::get('t/{tag}', 'TagviewController@showVideo')->where('tag', '[a-z][a-z0-9]+'); + Route::get('t/{tag}/{id}', 'TagviewController@showVideo')->where(['tag' => '[a-z][a-z0-9]+', 'id' => '[0-9]+']); }); diff --git a/app/Models/Video.php b/app/Models/Video.php index ba46f9e..46774ea 100644 --- a/app/Models/Video.php +++ b/app/Models/Video.php @@ -71,31 +71,43 @@ class Video extends Model return $this->belongsToMany(User::class, 'favorites', 'video_id', 'user_id'); } - public static function getFirstId($related = null) { + public static function getFirstId($related = null, $isTag = false) { if ($related) { - return $related->videos()->filtered()->orderBy('id', 'ASC')->first()->id; + if (!$isTag) { + return $related->videos()->filtered()->orderBy('id', 'ASC')->first()->id; + } + return Video::withAnyTags($related)->filtered()->orderBy('id', 'ASC')->first()->id; } return static::filtered()->orderBy('id', 'ASC')->first()->id; } - public static function getLastId($related = null) { + public static function getLastId($related = null, $isTag = false) { if ($related) { - return $related->videos()->filtered()->orderBy('id', 'DESC')->first()->id; + if (!$isTag) { + return $related->videos()->filtered()->orderBy('id', 'DESC')->first()->id; + } + return Video::withAnyTags($related)->filtered()->orderBy('id', 'DESC')->first()->id; } return static::select('id')->filtered()->orderBy('id', 'DESC')->first()->id; } - public function getNext($related = null) { + public function getNext($related = null, $isTag = false) { if ($related) { - return $related->videos()->filtered()->where('id', '>', $this->id)->orderBy('id', 'ASC')->first(); + if (!$isTag) { + return $related->videos()->filtered()->where('id', '>', $this->id)->orderBy('id', 'ASC')->first(); + } + return Video::withAnyTags($related)->filtered()->where('id', '>', $this->id)->orderBy('id', 'ASC')->first(); } else { return static::filtered()->where('id', '>', $this->id)->orderBy('id', 'ASC')->first(); } } - public function getPrev($related = null) { + public function getPrev($related = null, $isTag = false) { if ($related) { - return $related->videos()->filtered()->where('id', '<', $this->id)->orderBy('id', 'DESC')->first(); + if (!$isTag) { + return $related->videos()->filtered()->where('id', '<', $this->id)->orderBy('id', 'DESC')->first(); + } + return Video::withAnyTags($related)->filtered()->where('id', '<', $this->id)->orderBy('id', 'DESC')->first(); } else { return static::filtered()->where('id', '<', $this->id)->orderBy('id', 'DESC')->first(); } @@ -224,14 +236,24 @@ public function blurryThumb() { } } - public static function getRandom($related = null) { + public static function getRandom($related = null, $tag = false) { if ($related) { - $id = $related->videos()->filtered()->countScoped()->count() - 1; + if (!$tag) { + $id = $related->videos()->filtered()->countScoped()->count() - 1; + if ($id < 0) { + return redirect()->back()->with('error', 'no videos found'); + } + $id = mt_rand(0, $id); + return $related->videos()->filtered()->skip($id); + } + // jetzt sind wir im tag + $id = Video::withAnyTags($related)->filtered()->countScoped()->count()-1; if ($id < 0) { return redirect()->back()->with('error', 'no videos found'); } - $id = mt_rand(0, $id); - return $related->videos()->filtered()->skip($id); + $id = mt_rand(0,$id); + return Video::withAnyTags($related)->filtered()->skip($id); + } $id = static::filtered()->countScoped()->count() - 1; if ($id < 0) { @@ -241,6 +263,7 @@ public function blurryThumb() { return static::filtered()->skip($id); } + public static function getSingleRandom($related = null) { $query = $related ? $related->videos()->filtered() : static::filtered(); $count = $query->countScoped()->count(); diff --git a/resources/views/layout1/video.blade.php b/resources/views/layout1/video.blade.php index e804a45..0031770 100644 --- a/resources/views/layout1/video.blade.php +++ b/resources/views/layout1/video.blade.php @@ -41,20 +41,20 @@ ?>