/** * creates a new issues * * @return json * @author **/ public function postAdd() { $data = Request::all(); if ($this->isApi) { $user_id = Authorizer::getResourceOwnerId(); } else { $user_id = Auth::user()->id; } if (empty($user_id)) { if ($this->isApi) { return response()->api(403, 'Auth required', []); } return redirect('/login')->with('error', 'Lütfen giriş yapıp tekrar deneyin. '); } $required_fields = ['tags', 'title', 'problem', 'location', 'solution']; foreach ($required_fields as $key) { if (!isset($data[$key]) or empty($data[$key])) { if ($this->isApi) { return response()->api(400, 'Missing fields, ' . $key . ' is required', $data); } $message = '"' . trans('issues.' . $key) . '" gereklidir'; return redirect('/issues/new')->with('warning', 'Lütfen tüm formu doldurup tekrar deneyin. ' . $message)->withInput(); } } $check_duplicate = DB::table('issues')->where('user_id', $user_id)->where('title', $data['title'])->where('location', $data['location'])->first(); if (!empty($check_duplicate)) { if ($this->isApi) { return response()->api(400, 'Duplicate request', []); } return redirect('/issues/view/' . $check_duplicate->id)->with('warning', 'Daha önceden açtığınız bir fikri tekrar açmak istiyorsunuz gibi.'); } DB::beginTransaction(); #save the issue; $issue = new Issue(); $issue->user_id = $user_id; $issue->title = $data['title']; $issue->problem = $data['problem']; $issue->solution = $data['solution']; $issue->status = 'new'; $issue->location = $data['location']; $issue->city_id = 0; $issue->district_id = 0; $issue->hood_id = 0; $issue->is_anonymous = isset($data['is_anonymous']) ? $data['is_anonymous'] : 0; if (isset($data['coordinates'])) { $issue->coordinates = $data['coordinates']; } #lets figure out the location. $location_parts = explode(",", $data['location']); $hood = false; if (count($location_parts) === 3) { $hood = Hood::fromLocation($data['location']); } if ($hood === false or $hood === null or !isset($hood->id) or !isset($hood->city_id) or !isset($hood->district_id)) { DB::rollback(); if ($this->isApi) { return response()->api(401, 'Cant get the hood information from the location provided.', ['data' => $data]); } return redirect('issues/new')->with('error', 'Lokasyonunuzu girerken bir hata oldu, lütfen tekrar deneyin.'); } $issue->city_id = $hood->city_id; $issue->district_id = $hood->district_id; $issue->hood_id = $hood->id; try { $issue->save(); } catch (Exception $e) { Log::error('IssuesController/postAdd/SavingIssue', (array) $e); DB::rollback(); if ($this->isApi) { return response()->api(500, 'Error on saving the issue', $data); } return redirect('/issues/new')->with('error', 'Fikrinizi kaydederken teknik bir hata meydana geldi, lütfen biraz bekleyip tekrar deneyin.')->withInput(); } #save the tags if (!empty($data['tags']) and is_array($data['tags'])) { foreach ($data['tags'] as $tag) { try { DB::table('issue_tag')->insert(['issue_id' => $issue->id, 'tag_id' => $tag, 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()]); Redis::incr('tag_issue_counter:' . $tag); } catch (Exception $e) { Log::error('IssuesController/postAdd/SavingTagRelation', (array) $e); DB::rollback(); if ($this->isApi) { return response()->api(500, 'Error on saving the issue', $data); } return redirect('issues/new')->with('error', 'Fikrinizi kaydederken teknik bir hata geldi, hata logu teknik ekibe iletildi. Hemen ilgileniyoruz'); } } } #save the images if (!empty($data['images']) and is_array($data['images'])) { foreach ($data['images'] as $image) { try { $name = str_replace('.', '', microtime(true)); Storage::put('issues/' . $name, base64_decode($image)); DB::table('issue_images')->insert(['issue_id' => $issue->id, 'image' => 'issues/' . $name, 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()]); } catch (Exception $e) { Log::error('IssuesController/postAdd/SavingTheImage', (array) $e); } } } try { DB::table('issue_updates')->insert(['user_id' => $user_id, 'issue_id' => $issue->id, 'old_status' => 'n/a', 'new_status' => 'new', 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()]); } catch (Exception $e) { Log::error('IssuesController/postAdd/SavingIssueUpdate', (array) $e); } DB::commit(); Redis::incr('user_opened_issue_counter:' . $user_id); if ($this->isApi) { return response()->api(200, 'Issue saved', Issue::with('user', 'tags', 'images')->find($issue->id)); } return redirect('/issues/view/' . $issue->id)->with('success', 'Fikrinizi kaydettik'); }