public function createOrEdit(Request $request)
 {
     $this->validate($request, ['task_id' => 'required|numeric', 'files' => 'required|array', 'files.*.name' => 'required|min:2|max:60', 'files.*.data' => 'required|min:2|max:1000000']);
     $task_id = $request->input('task_id');
     $user_id = $request->user()->id;
     $filesArray = $request->input('files');
     $task = Task::where('id', $task_id)->first();
     if (!$task) {
         abort(406);
     }
     $solution = null;
     $solution_id = $request->input('solution_id');
     if (!empty($solution_id) && is_numeric($solution_id)) {
         $solution = Solution::where('id', $solution_id)->where('user_id', $request->user()->id)->where('deleted', false)->first();
         if (!$solution) {
             abort(406);
         }
         DB::table('solution_files')->where('solution_id', $solution_id)->where('user_id', $request->user()->id)->update(array('deleted' => true));
     } else {
         $solution_id = null;
         $solution = new Solution();
         Statistic::AddSolution();
     }
     $solution->user_id = $user_id;
     $solution->task_id = $task_id;
     $pass = $solution->save();
     $this->clearCache($solution);
     if (is_array($filesArray)) {
         foreach ($filesArray as $file) {
             $solutionFile = new SolutionFile();
             $solutionFile->name = $file['name'];
             $solutionFile->data = $file['data'];
             $solutionFile->user_id = $request->user()->id;
             $solutionFile->solution_id = $solution->id;
             if (!$solutionFile->save()) {
                 $pass = false;
             }
         }
     }
     if ($pass) {
         Alert::setSuccessAlert(Lang::get('app.solution_save'));
     } else {
         Log::alert(__METHOD__ . '(' . __FILE__ . ')', array('solution_id' => $solution->id, 'user_id' => Auth::user()->id));
         Alert::setErrorAlert(Lang::get('app.unknown_error'));
     }
     return redirect()->action('HomeController@index');
 }