public function postPreference() { $preference = Input::get('preference'); $user = Auth::user(); foreach ($preference as $id => $score) { $userpreference = $user->visualizations()->where('id', $id)->first(); if ($userpreference === null) { $visualization = \App\Visualization::find($id); $user->visualizations()->attach($visualization, ['knowledge' => $score]); } else { $userpreference->pivot->knowledge = $score; $userpreference->pivot->save(); $userpreference->save(); } } return redirect('home'); }
public function postRating() { // save rating $user = Auth::user(); $visualization = \App\Visualization::where('name', Session::get('visdata')->visualization)->first(); $relation = $user->visualizations()->where('visualization_id', $visualization->id)->first(); if (Input::get('isPositive')) { // check if already has rating $relation->pivot->rating = 1; $relation->pivot->save(); $relation->save(); } else { $relation->pivot->rating = 0; $relation->pivot->save(); $relation->save(); } }
public function generateUserRating($visualizationid, $neighbors, $minVisRating) { $visualizationVectors = $this->generateVectors(); $vectors = []; $vector = $visualizationVectors[$visualizationid - 1]; for ($i = 1; $i <= count($visualizationVectors); $i++) { if (count(Visualization::all()[$i - 1]->users) >= $minVisRating) { $similaritem = (object) []; if ($i == $visualizationid) { } else { $similaritem->similarity = $this->vectorSimilarity($vector, $visualizationVectors[$i]); $similaritem->visualization = $i; $vectors[] = $similaritem; } } else { // skip if the visualization does not have enough rating by the users } } // sort mapping usort($vectors, array("App\\Http\\Controllers\\RatingController", "compareSimilarity")); $similaritems = []; for ($i = 0; $i < $neighbors && $i < count($vectors); $i++) { $similaritems[] = $vectors[$i]; } if (count($similaritems) === 0) { return null; } else { return $this->generatePrediction($similaritems, $visualizationVectors); } }