Пример #1
0
 /**
  * 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');
 }