diff options
author | Camil Staps | 2016-09-05 23:43:35 +0200 |
---|---|---|
committer | Camil Staps | 2016-09-05 23:43:35 +0200 |
commit | 15b26b8b2af028ea30dc34f78ed5c6f3fcb0d547 (patch) | |
tree | e13decabbbe1f50553ea75cdeb50b5bc1496b9a8 /app/Http/Controllers/VerbController.php | |
parent | Vote on verb suggestions (diff) |
Suggest new verbs
Diffstat (limited to 'app/Http/Controllers/VerbController.php')
-rw-r--r-- | app/Http/Controllers/VerbController.php | 92 |
1 files changed, 84 insertions, 8 deletions
diff --git a/app/Http/Controllers/VerbController.php b/app/Http/Controllers/VerbController.php index 98b0579..18cdd2f 100644 --- a/app/Http/Controllers/VerbController.php +++ b/app/Http/Controllers/VerbController.php @@ -18,12 +18,17 @@ */ namespace App\Http\Controllers; +use HebrewParseTrainer\PointChange; +use HebrewParseTrainer\Stem; +use HebrewParseTrainer\Tense; use HebrewParseTrainer\Verb; use HebrewParseTrainer\VerbAction; use HebrewParseTrainer\RandomLog; + use Illuminate\Http\Request; -use Illuminate\Support\Facades\Input; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Input; +use Illuminate\Support\Facades\Validator; use Laravel\Lumen\Routing\Controller as BaseController; class VerbController extends BaseController { @@ -48,6 +53,82 @@ class VerbController extends BaseController { return response()->json($obj); } + public function suggest(Request $request) { + $_tenses = Tense::all(); + $tenses = []; + foreach ($_tenses as $tense) + $tenses[] = $tense->name; + + $_stems = Stem::all(); + $stems = []; + foreach ($_stems as $stem) + $stems[] = $stem->name; + + $validator = Validator::make($request->input(), [ + 'verb' => 'required', + 'root' => 'required', + 'stem' => 'in:' . implode(',', $stems), + 'tense' => 'in:' . implode(',', $tenses), + 'person' => 'in:,1,2,3', + 'gender' => 'in:,m,f', + 'number' => 'in:,s,p', + ]); + + if ($validator->fails()) { + return [ + 'success' => false, + 'message' => $validator->errors()->first() + ]; + } + + $verb = new Verb; + $verb->verb = $request->input('verb'); + $verb->root = $request->input('root'); + $verb->stem = $request->input('stem'); + $verb->tense = $request->input('tense'); + $verb->person = $request->input('person') ? $request->input('person') : null; + $verb->gender = $request->input('gender') ? $request->input('gender') : null; + $verb->number = $request->input('number') ? $request->input('number') : null; + $verb->active = 0; + $verb->save(); + + $action = new VerbAction; + $action->kind = VerbAction::KIND_SUGGEST; + $action->user_id = Auth::user()->id; + $action->verb_id = $verb->id; + $action->save(); + + $this->vote(1, $verb->id); + + return [ + 'success' => true, + 'id' => $verb->id, + 'accepted' => $verb->active != 0 + ]; + } + + protected function checkAccept($verb) { + if ($verb->voteCount() < Verb::ACCEPTED_VOTE_COUNT) + return false; + + $verb->active = 1; + $verb->save(); + + if (!is_null($user = $verb->suggestedBy())) { + $ptchange = new PointChange; + $ptchange->kind = PointChange::KIND_SUGGESTION_ACCEPTED; + $ptchange->change = PointChange::POINTS_SUGGESTION_ACCEPTED; + $ptchange->user_id = $user->id; + $ptchange->verb_id = $verb->id; + $ptchange->save(); + + $user->points += PointChange::POINTS_SUGGESTION_ACCEPTED; + $user->save(); + } + + return true; + } + public function vote($choice, $verb_id) { $verb = Verb::findOrFail($verb_id); $user = Auth::user(); @@ -68,17 +149,12 @@ class VerbController extends BaseController { $vote->vote_weight = ($choice == 1 ? 1 : -1) * $user->voteWeight(); $vote->save(); - $message = 'You have voted.'; - - if ($verb->voteCount() >= Verb::ACCEPTED_VOTE_COUNT) { - $verb->active = 1; - $verb->save(); - } + $accepted = $this->checkAccept($verb); return [ 'success' => true, 'vote_weight' => $user->voteWeight(), - 'accepted' => (bool) $verb->active, + 'accepted' => $accepted, 'new_vote_count' => $verb->voteCount() ]; } |