aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/Http/Controllers/VerbController.php92
-rw-r--r--app/PointChange.php35
-rw-r--r--app/Verb.php14
3 files changed, 132 insertions, 9 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()
];
}
diff --git a/app/PointChange.php b/app/PointChange.php
new file mode 100644
index 0000000..c157b36
--- /dev/null
+++ b/app/PointChange.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * HebrewParseTrainer - practice Hebrew verbs
+ * Copyright (C) 2015 Camil Staps <info@camilstaps.nl>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+namespace HebrewParseTrainer;
+
+use Illuminate\Database\Eloquent\Model;
+
+class PointChange extends Model {
+
+ protected $table = 'point_changes';
+ public $timestamps = false;
+ protected $dates = ['date'];
+ protected $fillable = ['kind', 'change'];
+
+ const KIND_SUGGESTION_ACCEPTED = 1;
+ const KIND_MANUAL = 3;
+
+ const POINTS_SUGGESTION_ACCEPTED = 2;
+
+}
diff --git a/app/Verb.php b/app/Verb.php
index aa0db26..3ff79fc 100644
--- a/app/Verb.php
+++ b/app/Verb.php
@@ -26,7 +26,7 @@ class Verb extends Model {
public $timestamps = false;
protected $fillable = ['verb', 'root', 'stem', 'tense', 'person', 'gender', 'number'];
- const ACCEPTED_VOTE_COUNT = 1;
+ const ACCEPTED_VOTE_COUNT = 5;
public function actions() {
return $this->hasMany('HebrewParseTrainer\VerbAction');
@@ -56,4 +56,16 @@ class Verb extends Model {
return 0;
}
+ public function suggestedBy() {
+ $suggs = $this->actions()
+ ->where('kind', VerbAction::KIND_SUGGEST)
+ ->get();
+
+ foreach ($suggs as $sugg) {
+ return $sugg->user;
+ }
+
+ return null;
+ }
+
}