コード例 #1
0
 /**
  * Add restaurant data via TSV file upload
  *
  * @param Request $request
  * @return \Illuminate\View\View
  */
 public function convertAction(Request $request)
 {
     $success = array();
     $errors = array();
     if ($request->isMethod('post')) {
         $connection = null;
         try {
             $uploaded_files = \Input::file('convert');
             $columns = Schema::getColumnListing('restaurants');
             array_push($columns, 'category_id', 'cuisine1', 'cuisine2', 'cuisine3');
             $required_columns = array('id', 'name', 'address', 'telephone', 'budget', 'operating_time', 'latitude', 'longitude', 'category_id', 'is_excluded', 'tags');
             $data = array();
             $current_id = 0;
             $file_content = '';
             foreach ($uploaded_files as $uploaded_file) {
                 $extension = explode('.', $uploaded_file->getClientOriginalName());
                 $extension = $extension[count($extension) - 1];
                 if (strtolower($extension) != 'tsv') {
                     throw new \Exception('Invalid file format. Must be TSV.');
                 }
                 $file_content = file_get_contents($uploaded_file->getPathname());
                 $file_content = explode("\n", $file_content);
                 $file_content = array_map('trim', $file_content);
                 $file_content = array_filter($file_content);
                 $fc_data = array();
                 foreach ($file_content as $fc) {
                     $fc_data = explode("\t", $fc);
                     $fc_data = array_slice($fc_data, 0, 33);
                     if (!array_key_exists(31, $fc_data)) {
                         $fc_data[31] = 'N/A';
                     }
                     if ($fc_data) {
                         $data[] = $fc_data;
                     }
                     $fc_data = array();
                 }
                 $keys = array_shift($data);
                 foreach ($keys as $key => $value) {
                     $keys[$key] = str_replace('"', '', $keys[$key]);
                 }
                 foreach ($data as $key => $value) {
                     if (!$value) {
                         continue;
                     }
                     $current_id = $value[0];
                     $data[$key] = array_combine($keys, $value);
                     $data[$key]['name'] = str_replace('"', '', $data[$key]['name']);
                     $data[$key]['address'] = str_replace('"', '', $data[$key]['address']);
                     $data[$key]['telephone'] = str_replace('"', '', $data[$key]['telephone']);
                     $data[$key]['operating_time'] = str_replace('"', '', $data[$key]['operating_time']);
                     $data[$key]['thumbnail'] = str_replace('"', '', $data[$key]['thumbnail']);
                     $data[$key]['category_id'] = str_replace('"', '', $data[$key]['category_id']);
                     $data[$key]['cuisine1'] = str_replace('"', '', $data[$key]['cuisine1']);
                     $data[$key]['cuisine2'] = str_replace('"', '', $data[$key]['cuisine2']);
                     $data[$key]['cuisine3'] = str_replace('"', '', $data[$key]['cuisine3']);
                     $data[$key]['tags'] = str_replace('"', '', $data[$key]['tags']);
                     foreach ($data[$key] as $k => $v) {
                         if (in_array($k, $required_columns) && $v === '') {
                             $errors[] = $k . ' column is required [ID: ' . $current_id . ']';
                         }
                         if (in_array($k, array('is_excluded', 'tags'))) {
                             continue;
                         }
                         if (!in_array($k, $columns)) {
                             unset($data[$key][$k]);
                         }
                     }
                 }
                 $file_content = '';
             }
             if ($errors) {
                 $data = array('errors' => $errors, 'success' => array());
                 return view('cms.restaurant.convert', $data);
             }
             $connection = DB::connection();
             $connection->beginTransaction();
             $current_id = 0;
             RestaurantsCategory::truncate();
             foreach ($data as $d) {
                 $current_id = $d['id'];
                 $restaurant = new RestaurantsCms();
                 $restaurant = $restaurant->addRestaurant($d);
                 $restaurant_id = $restaurant->id;
                 $photo = null;
                 $category = null;
                 $restaurant_category = null;
                 $categories = explode(',', $d['category_id']);
                 $categories_count = count($categories);
                 // TODO: Add photo for restaurant
                 for ($i = 0; $i < $categories_count; $i++) {
                     if (!$categories[$i]) {
                         continue;
                     }
                     $cat = CategoriesCms::find($categories[$i]);
                     /* Disable adding categories in the meantime
                         if (!$cat) {
                            $cat = new CategoriesCms();
                            $cat->addCategory('cuisine', $d['cuisine' . ($i + 1)], $categories[$i]);
                        } */
                     $restaurant_category = RestaurantsCategoryCms::getByRestaurantCatId($restaurant_id, $cat->id);
                     if (!$restaurant_category) {
                         $restaurant_category = new RestaurantsCategoryCms();
                         $restaurant_category->addRestaurantCategory($restaurant_id, $cat->id);
                     }
                 }
                 $tags = explode(',', $d['tags']);
                 $tags = array_map('trim', $tags);
                 $tags_count = count($tags);
                 for ($i = 0; $i < $tags_count; $i++) {
                     if (!$tags[$i]) {
                         continue;
                     }
                     $cat = CategoriesCms::where('name', $tags[$i])->where('type', CONSTANTS::CATEGORY_TAG)->first();
                     if (!$cat) {
                         $cat = new CategoriesCms();
                         $cat->addCategory('tag', $tags[$i]);
                     }
                     $restaurant_category = RestaurantsCategoryCms::getByRestaurantCatId($restaurant_id, $cat->id);
                     if (!$restaurant_category) {
                         $restaurant_category = new RestaurantsCategoryCms();
                         $restaurant_category->addRestaurantCategory($restaurant_id, $cat->id);
                     }
                 }
             }
             $restaurant = new RestaurantsCms();
             $restaurant->updateRestaurantSlugName();
             $connection->commit();
             $success[] = 'Data successfully added';
         } catch (\Exception $e) {
             if ($connection) {
                 $connection->rollBack();
             }
             $errors[] = $e->getMessage();
             $errors[] = 'Error occured at ID ' . $current_id . ' of TSV file.';
         } catch (\PDOException $pe) {
             if ($connection) {
                 $connection->rollBack();
             }
             $errors[] = 'Error trying to add data';
         }
     }
     $data = array('success' => isset($success) ? $success : array(), 'errors' => isset($errors) ? $errors : array());
     return view('cms.restaurant.convert', $data);
 }