/** * 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); }
/** * Add new category * * @param Request $request * @return \Illuminate\View\View * @throws \Exception */ public function newAction(Request $request) { $data = array(); $errors = array(); $success = ''; if ($request->isMethod('post')) { $params = $request->all(); if (!$params['category_type']) { $errors[] = 'Category Type is required'; } else { if (!in_array($params['category_type'], array('city', 'cuisine', 'mall'))) { $errors[] = 'Invalid Category Type'; } } if (!$params['category_name']) { $errors[] = 'Category Name is required'; } if (!$errors) { $connection = DB::connection(); try { $connection->beginTransaction(); $category = new CategoriesCms(); $category->addCategory($params['category_type'], $params['category_name']); $connection->commit(); $success = 'Category has been successfully added'; } catch (Exception $e) { $connection->rollBack(); $errors[] = $e->getMessage(); } } } $data = array('errors' => $errors, 'success' => $success); return view('cms.category.new', $data); }