Example #1
0
 public function putAd($id)
 {
     $data = post();
     try {
         DB::beginTransaction();
         $default = array('name' => '', 'slug' => '', 'description' => '', 'price' => '', 'address' => '', 'category_id' => '', 'type_id' => '', 'tag_ids' => '', 'lat' => '', 'lng' => '', 'step' => 0, 'action' => '');
         $merge = array_merge($default, $data);
         $merge = HelperClassified::trim_value($merge);
         extract($merge);
         switch ($action) {
             case 'desc':
                 $rules = ['name' => 'required', 'description' => 'required', 'category_id' => 'required|numeric|min:1', 'type_id' => 'required|numeric|min:1', 'price' => 'required|numeric', 'step' => ''];
                 break;
             case 'location':
                 $rules = ['address' => 'required', 'lat' => 'required', 'lng' => 'required'];
                 break;
             case 'property':
                 $rules = ['tag_ids' => 'array'];
                 break;
             default:
                 $rules = ['name' => 'required', 'description' => 'required', 'category_id' => 'required|numeric|min:1', 'type_id' => 'required|numeric|min:1', 'address' => 'required', 'price' => 'required|numeric', 'lat' => 'required', 'lng' => 'required', 'tag_ids' => 'array', 'area' => 'numeric'];
                 break;
         }
         $error = HelperClassified::valid($rules);
         if ($error != null) {
             return Response::json(array('status' => 'error', 'message' => $error), 500);
         }
         $record = Ad::find($id);
         if (empty($record) || $record->user_id != Auth::getUser()->id) {
             return Response::json(array('status' => 'error', 'message' => trans(CLF_LANG_MESSAGE . 'error_user')), 500);
         }
         $lat = is_float($lat) ? floatval($lat) : '';
         $lng = is_float($lng) ? floatval($lng) : '';
         if (empty($lat) && empty($lng)) {
             $record->name = str_limit($name, $limit = 125);
             $record->slug = empty($slug) ? HelperClassified::slug_utf8($name) : $slug;
             $record->description = str_limit($description, $limit = 500);
             $record->price = preg_replace("/[^0-9]/", "", $price);
             $record->address = $address;
             $record->category_id = intval($category_id);
             $record->type_id = intval($type_id);
             $record->lat = $lat;
             $record->lng = $lng;
             $record->save();
         }
         if (!$record->validate()) {
             $message = $record->errors()->all();
             return Response::json(array('status' => 'error', 'message_array' => $message), 500);
         }
         $city = '';
         $state = '';
         if ($lat && $lng && ($lat != $record->lat && $lng != $record->lng)) {
             $response = @file_get_contents(sprintf('https://maps.googleapis.com/maps/api/geocode/json?latlng=%s,%s&language=vi_VN', $lat, $lng));
             $json_resp = json_decode($response);
             if (isset($json_resp->results[0]->address_components) && is_array($json_resp->results[0]->address_components)) {
                 $allow = true;
                 foreach ($json_resp->results[0]->address_components as $i => $component) {
                     if (!empty($component->types) && in_array('country', $component->types) && $component->short_name != 'VN') {
                         $allow = false;
                     }
                     if ($allow && !empty($component->types) && in_array('administrative_area_level_1', $component->types)) {
                         $city = $component->short_name;
                     }
                     if ($allow && !empty($component->types) && in_array('administrative_area_level_2', $component->types)) {
                         $state = $component->long_name;
                     }
                 }
             }
         }
         if ($record->id) {
             $default = array('ad_id' => $record->id, 'tag_ids' => $tag_ids, 'city_tag' => $city, 'state_tag' => $state);
             Tag::save_tag($default);
         }
         DB::commit();
         return Response::json(array('status' => 'success', 'data' => $record));
     } catch (Exception $ex) {
         DB::rollback();
         return Response::json(array('status' => 'error', 'message' => $ex->getMessage()), 500);
     }
 }