Example #1
0
 /**
  * @param Department $department
  * @param int paper
  * save reviewer evaluation
  * @return \Illuminate\Http\Response
  */
 public function postEvaluate(Department $department, $paper)
 {
     $paper = Paper::findOrFail($paper);
     if (auth()->user()->id != $paper->reviewer_id || !$paper->canEvaluate()) {
         return redirect()->action('PaperController@index', [$department->keyword])->with('error', 'access-denied');
     }
     $criteriaPaper = $rules = $params = $errors = [];
     $criteria = $department->criteria()->with(['langs' => function ($query) {
         $query->lang();
     }])->get();
     foreach ($criteria as $value) {
         $errors[$value->id] = $value->langs->first()->title;
         if (request()->has($value->id)) {
             $params[$value->id] = request($value->id);
             $criteriaPaper[$value->id] = ['value' => request($value->id)];
         }
         if ($value->required) {
             $rules[$value->id] = 'required';
         }
         if ($value->type_id == 1) {
             $max = 'max:1500';
             if (isset($rules[$value->id])) {
                 $rules[$value->id] .= '|' . $max;
             } else {
                 $rules[$value->id] = $max;
             }
         }
     }
     $validator = Validator::make($params, $rules);
     $validator->setAttributeNames($errors);
     if ($validator->fails()) {
         return redirect()->back()->withErrors($validator)->withInput();
     }
     DB::transaction(function () use($criteriaPaper, $paper) {
         $paper->update(['status_id' => 3, 'reviewed_at' => Carbon::now()]);
         $paper->criteria()->sync($criteriaPaper);
     });
     return redirect()->action('PaperController@index', [$department->keyword])->with('success', 'paper-evaluated');
 }