/** * @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'); }