From b03397d1dc13ab5bca7755d7a72298173cf969d5 Mon Sep 17 00:00:00 2001 From: Sebastian Uharek Date: Tue, 23 Feb 2021 00:55:56 +0100 Subject: [PATCH] Added abgelehnt feature, fixed counting up/downvotes on landing page and movies by date page --- ...021_02_22_232450_add_abgelehnt_to_film.php | 35 ++++++++++++ app/models/Film.php | 20 +++++-- app/routes.php | 47 ++++++++++++++-- app/views/abgelehnt.blade.php | 56 +++++++++++++++++++ app/views/film.blade.php | 8 ++- app/views/hello.blade.php | 1 + app/views/index.blade.php | 28 ++++++++++ 7 files changed, 184 insertions(+), 11 deletions(-) create mode 100644 app/database/migrations/2021_02_22_232450_add_abgelehnt_to_film.php create mode 100644 app/views/abgelehnt.blade.php diff --git a/app/database/migrations/2021_02_22_232450_add_abgelehnt_to_film.php b/app/database/migrations/2021_02_22_232450_add_abgelehnt_to_film.php new file mode 100644 index 0000000..d4fbf93 --- /dev/null +++ b/app/database/migrations/2021_02_22_232450_add_abgelehnt_to_film.php @@ -0,0 +1,35 @@ +date('abgelehnt')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('films', function(Blueprint $table) + { + $table->dropColumn('abgelehnt'); + // + }); + } + +} diff --git a/app/models/Film.php b/app/models/Film.php index 08837de..24e7210 100644 --- a/app/models/Film.php +++ b/app/models/Film.php @@ -16,11 +16,15 @@ class Film extends Eloquent { } public function scopeZuletztGesehen($query) { - return $query->whereNotNull('gesehen')->orderBy('gesehen', 'DESC')->take(5); + return $query->whereNull('abgelehnt')->whereNotNull('gesehen')->orderBy('gesehen', 'DESC')->take(5); + } + + public function scopeZuletztAbgelehnt($query) { + return $query->whereNull('gesehen')->whereNotNull('abgelehnt')->orderBy('abgelehnt', 'DESC')->take(5); } public function scopeNeuesteVorschlage($query) { - return $query->whereNull('gesehen')->orderBy('updated_at', 'DESC')->take(5); + return $query->whereNull('gesehen')->whereNull('abgelehnt')->orderBy('updated_at', 'DESC')->take(5); } public function scopeMeistgewunschteVorschlage($query) { @@ -30,6 +34,7 @@ class Film extends Eloquent { ->leftJoin('votes', 'votes.film', '=', 'films.id') ->leftJoin('users', 'users.id', '=', 'votes.user') ->whereNull('gesehen') + ->whereNull('abgelehnt') ->where('films.id', "!=", is_object($nextfilm) ? $nextfilm->id : 0) ->where('users.settings', 'NOT LIKE', '%disabled":true%') ->groupBy('films.id') @@ -38,11 +43,18 @@ class Film extends Eloquent { } public function getVotes() { - return Vote::where('film', '=', $this->id)->count(); + return Vote::where('film', '=', $this->id) + ->where('users.settings', 'NOT LIKE', '%disabled":true%') + ->leftJoin('users', 'users.id', '=', 'votes.user') + ->count(); } public function getUpvotes() { - return Vote::where('film', '=', $this->id)->whereRaw('stimme IS TRUE')->count(); + return Vote::where('film', '=', $this->id) + ->whereRaw('stimme IS TRUE') + ->where('users.settings', 'NOT LIKE', '%disabled":true%') + ->leftJoin('users', 'users.id', '=', 'votes.user') + ->count(); } public function getBewertung() { diff --git a/app/routes.php b/app/routes.php index feca1f6..8b77dd0 100644 --- a/app/routes.php +++ b/app/routes.php @@ -15,6 +15,7 @@ Route::get('/', function() { $gesehen = Film::zuletztGesehen()->get(); + $abgelehnt = Film::zuletztAbgelehnt()->get(); $vorgeschlagen = Film::neuesteVorschlage()->get(); $mg = Film::meistgewunschteVorschlage()->take(5)->get(); //$x = DB::getQueryLog(); @@ -24,7 +25,7 @@ Route::get('/', function() $nextfilm = Dumbo::find(1)->film; $tmdb = new TMDb(Config::get('constants.tvdb.apikey'), 'de', TRUE, TMDb::API_SCHEME_SSL); - foreach(array("top" => $mg[0], "neu" => $vorgeschlagen[0], "alt" => $gesehen[0]) as $key => $val) { + foreach(array("top" => $mg[0], "neu" => $vorgeschlagen[0], "alt" => $gesehen[0], "declined" => $abgelehnt[0]) as $key => $val) { $tmovie = $tmdb->getMovie($val->tvdbid); $images[$key] = $tmdb->getImageUrl($tmovie['poster_path'], TMDb::IMAGE_POSTER, 'w342'); } @@ -42,6 +43,7 @@ Route::get('/', function() return View::make('index') ->with('gesehen', $gesehen) + ->with('abgelehnt', $abgelehnt) ->with('vorgeschlagen', $vorgeschlagen) ->with('meistgw', $mg) ->with('images', $images) @@ -177,7 +179,10 @@ Route::get('vorgeschlagen', function() { COUNT(case when film_votes.stimme IS FALSE then 1 end) as downvotes, COUNT(case when film_votes.stimme IS TRUE then 1 end) as vcount')) ->leftJoin('votes', 'votes.film', '=', 'films.id') + ->leftJoin('users', 'users.id', '=', 'votes.user') ->whereNull('films.gesehen') + ->whereNull('films.abgelehnt') + ->where('users.settings', 'NOT LIKE', '%disabled":true%') ->groupBy('id') ->orderBy('vorgeschlagen', 'DESC') ->paginate(25); @@ -188,6 +193,16 @@ Route::get('vorgeschlagen', function() { }); +Route::get('abgelehnt/{field?}/{order?}', function($field = "abgelehnt", $order = "desc") { + $filme = Film::whereNotNull('abgelehnt')->orderBy($field, $order)->paginate(25); + $labels = array("", "danger", "danger", "warning", "warning", "info", "info", "primary", "primary", "success", "success"); + + return View::make('abgelehnt') + ->with('labels', $labels) + ->with('filme', $filme); + +})->where(array('field' => '[a-z]+', 'order' => 'asc|desc')); + Route::get('gesehen/{field?}/{order?}', function($field = "gesehen", $order = "desc") { $filme = Film::whereNotNull('gesehen')->orderBy($field, $order)->paginate(25); $labels = array("", "danger", "danger", "warning", "warning", "info", "info", "primary", "primary", "success", "success"); @@ -212,7 +227,7 @@ Route::post('neu', array('before' => 'auth', function() { })); Route::get('vorschlag/{id}', array('before' => 'auth', function($id) { - $ef = Film::where('tvdbid', '=', $id)->whereNull('gesehen')->first(); + $ef = Film::where('tvdbid', '=', $id)->whereNull('gesehen')->whereNull('abgelehnt')->first(); if(is_null($ef)) { $tmdb = new TMDb('b187f8d9c5e72b1faecb741d5d04239a', 'de', TRUE); $f = $tmdb->getMovie($id); @@ -225,11 +240,27 @@ Route::get('vorschlag/{id}', array('before' => 'auth', function($id) { Session::put('message', 'Film hinzugefügt.'); return Redirect::to('film/' . $film->id); } else { - Session::put('message', 'Film bereits vorgeschlagen von ' . $ef->besitzer->name . '.'); + if(is_null($ef->abgelehnt)) { + Session::put('message', 'Film bereits vorgeschlagen von ' . $ef->besitzer->name . '.'); + } else { + Session::put('message', 'Film bereits abgelehmt.'); + } return Redirect::to('film/' . $ef->id); } })); +Route::get('mark-declined/{id}', array('before' => 'auth', function($id) { + $film = Film::findOrFail($id); + $film->abgelehnt = \Carbon\Carbon::today(); + $film->save(); + if(Dumbo::find(1)->nextfilm == $film->id) { + $system = Dumbo::findOrFail(1); + $system->nextfilm = 0; + $system->save(); + } + return Redirect::to('film/' . $film->id); +})); + Route::get('mark-read/{id}', array('before' => 'auth', function($id) { $film = Film::findOrFail($id); $film->gesehen = \Carbon\Carbon::today(); @@ -485,6 +516,14 @@ Route::get('stats', function() { 'prop' => 'besitzer', 'type' => 'User' ), + array( + 'name' => 'Meiste abgelehnte Vorschläge', + 'entr' => array('Vorschlag', 'Vorschläge'), + 'vals' => Film::addSelect(DB::raw("film_films.*, COUNT(`id`) as count")) + ->whereNotNull('abgelehnt')->groupBy('user')->orderBy('count', 'DESC')->take(3)->get(), + 'prop' => 'besitzer', + 'type' => 'User' + ), array( 'name' => 'Meiste Kommentare', @@ -563,4 +602,4 @@ Route::get('stats', function() { ]; return View::make('stats')->with('stats', $stats); -}); \ No newline at end of file +}); diff --git a/app/views/abgelehnt.blade.php b/app/views/abgelehnt.blade.php new file mode 100644 index 0000000..e8bbc5f --- /dev/null +++ b/app/views/abgelehnt.blade.php @@ -0,0 +1,56 @@ +@extends('hello') + +@section('content') + + +{{ $filme->links() }} + + + + + + + + +@foreach($filme as $film) + id)->where('user', Auth::user()->id)->count()) + $stimme = Vote::where('film', $film->id)->where('user', Auth::user()->id)->first()->stimme; + ?> + + + + + + +@endforeach +
TitelAbgelehnt amVorgeschlagen von
{{ HTML::link('film/' . $film->id, $film->name) }} + {{ $film->comments()->count()}} + @if($film->getBewertung() > 0) +  {{$film->getBewertung()}} + @endif + @if($stimme == 1) +   + @elseif($stimme == 0) +   + @endif + {{ \Carbon\Carbon::parse($film->abgelehnt)->format('d.m.Y')}} + {{$film->besitzer->name}} +
+ +{{ $filme->links() }} + +@stop + +@section('title') +Gesehen ~ +@stop + +@section('script') + +@stop diff --git a/app/views/film.blade.php b/app/views/film.blade.php index fc5aa9c..497419b 100644 --- a/app/views/film.blade.php +++ b/app/views/film.blade.php @@ -9,6 +9,8 @@
@if(!is_null($film->gesehen))
Gesehen am {{ \Carbon\Carbon::parse($film->gesehen)->format('d.m.Y') }}
+ @elseif(!is_null($film->abgelehnt)) +
Abgelehnt am {{ \Carbon\Carbon::parse($film->abgelehnt)->format('d.m.Y') }}
@else
admin) { echo "id='gesehen'"; } ?> style="cursor: pointer;"> Nicht gesehen
@endif @@ -98,7 +100,7 @@

-@if($votes > 0 || is_null($film->gesehen)) +@if($votes > 0 || is_null($film->gesehen) || is_null($film->abgelehnt)) @if($votes > 0)

Abstimmung

Insgesamt haben {{$votes}} Personen abgestimmt. {{$vposi}} davon waren dafür. @if($uvote[0]) @@ -127,7 +129,7 @@ @endif -@if(is_null($film->gesehen) && !is_null(Auth::user())) +@if(is_null($film->gesehen) && is_null($film->abgelehnt) && !is_null(Auth::user()))

" href="{{ url('vote', array('yes', Auth::user()->id, $film->id)) }}"> @@ -245,7 +247,7 @@ placement: "right", trigger: "click", title: "Als gesehen markieren", - content: "" + content: "" }); }); diff --git a/app/views/hello.blade.php b/app/views/hello.blade.php index 292de87..b87de4e 100644 --- a/app/views/hello.blade.php +++ b/app/views/hello.blade.php @@ -22,6 +22,7 @@
  • {{ HTML::link('beliebt', 'Beliebt (Wertung)') }}
  • {{ HTML::link('vorgeschlagen', 'Vorgeschlagen (Datum)') }}
  • {{ HTML::link('gesehen', 'Gesehen') }}
  • +
  • {{ HTML::link('abgelehnt', 'Abgelehnt') }}
  • {{ HTML::link('neu', 'Film vorschlagen')}}
  • {{ HTML::link('stats', 'Statistiken') }}
  • diff --git a/app/views/index.blade.php b/app/views/index.blade.php index 6e0d370..623cc6a 100644 --- a/app/views/index.blade.php +++ b/app/views/index.blade.php @@ -105,6 +105,34 @@ {{ link_to('gesehen', 'Mehr...', array('class' => 'list-group-item')); }}
    +
    +
    Abgelehnte Filme
    +
    + shift(); ?> + +

    {{$topfilm->name}} + + {{$topfilm->besitzer->name}} +

    +

    Bewertung: + @if($topfilm->getBewertung() > 0) + {{$topfilm->getBewertung()}} + @else + — + @endif +

    +

    {{ link_to_route('film', "Filmdetails", array($topfilm->id), array('class' => 'btn btn-info btn-xs'))}}

    +
    + +
    + @foreach ($abgelehnt as $film) + {{$film->name}} + {{$film->besitzer->name}} + + @endforeach + {{ link_to('abgelehnt', 'Mehr...', array('class' => 'list-group-item')); }} +
    +