public function search(Request $request)
 {
     $params = Input::all();
     //print_r($params) . '<br /><br />';
     $request->flash();
     $car_model_id = array();
     if (old('car_brand_id')) {
         if (is_numeric(old('car_brand_id')) && old('car_brand_id') > 0) {
             $car_models = CarModel::where('car_brand_id', old('car_brand_id'))->orderBy('car_model_name', 'asc')->get();
             if (!$car_models->isEmpty()) {
                 $car_model_id = array(0 => 'Select Car Model');
                 foreach ($car_models as $k => $v) {
                     $car_model_id[$v->car_model_id] = $v->car_model_name;
                 }
             }
         }
     }
     //     	echo 'category_slug: ' . $request->category_slug . '<br />';
     //     	echo 'location_slug: ' . $request->location_slug . '<br />';
     //     	echo 'search_text: ' . $request->search_text . '<br />';
     $breadcrump = array();
     //check if category selected
     $category_slug = '';
     if (isset($request->category_slug)) {
         $category_slug = Util::sanitize($request->category_slug);
     }
     $cid = 0;
     if (!empty($category_slug)) {
         $cid = $this->category->getCategoryIdByFullPath($category_slug);
         if (empty($cid)) {
             abort(404);
         }
     }
     //if category selected get info, get childs and generate url and breadcrump
     $clist = array();
     $all_category_childs = array();
     if ($cid > 0) {
         $params['cid'] = $cid;
         $selected_category_info = Category::where('category_id', $cid)->first();
         $clist = $this->category->getOneLevel($cid);
         foreach ($clist as $k => &$v) {
             $category_url_params = array();
             $category_url_params[] = $this->category->getCategoryFullPathById($v->category_id);
             if (session()->has('location_slug')) {
                 $category_url_params[] = 'l-' . session()->get('location_slug');
             }
             if (!empty($category_url_params)) {
                 $v->category_url = Util::buildUrl($category_url_params);
             }
         }
         $breadcrump_data = $this->category->getParentsByIdFlat($cid);
         if (!empty($breadcrump_data)) {
             foreach ($breadcrump_data as $k => &$v) {
                 $category_url_params = array();
                 $category_url_params[] = $this->category->getCategoryFullPathById($v['category_id']);
                 if (session()->has('location_slug')) {
                     $category_url_params[] = 'l-' . session()->get('location_slug');
                 }
                 if (!empty($category_url_params)) {
                     $v['category_url'] = Util::buildUrl($category_url_params);
                 }
             }
             //category part of breadcrump
             $breadcrump['c'] = array_reverse($breadcrump_data);
         }
         $acc = $this->category->getAllHierarhyFlat($cid);
         if (!empty($acc)) {
             foreach ($acc as $ak => $av) {
                 $all_category_childs[] = $av['cid'];
             }
         }
         $all_category_childs[] = $cid;
     }
     //check for location selection
     $location_slug = '';
     if (isset($request->location_slug)) {
         $location_slug = Util::sanitize($request->location_slug);
     }
     $lid = 0;
     if (!empty($location_slug)) {
         $lid = $this->location->getIdBySlug($location_slug);
         if (empty($lid)) {
             abort(404);
         }
         $params['lid'] = $lid;
     }
     //check for search text
     $search_text = '';
     $search_text_tmp = '';
     if (isset($request->search_text)) {
         $search_text_tmp = Util::sanitize($request->search_text);
     }
     if (!empty($search_text_tmp) && mb_strlen($search_text_tmp, 'utf-8') > 3) {
         $search_text = preg_replace('/-/', ' ', $search_text_tmp);
         $params['search_text'] = $search_text;
     }
     /*
      * init where vars
      */
     $where = [];
     $order = [];
     $limit = 0;
     $orderRaw = '';
     $whereIn = [];
     $whereRaw = [];
     $paginate = 0;
     $page = 1;
     /*
      * get common params and set them in where array
      */
     if (isset($params['condition_id']) && !empty($params['condition_id']) && is_array($params['condition_id'])) {
         $whereIn['condition_id'] = $params['condition_id'];
     }
     if (isset($params['type_id']) && !empty($params['type_id']) && is_array($params['type_id'])) {
         $whereIn['type_id'] = $params['type_id'];
     }
     if (isset($params['price_from']) && is_numeric($params['price_from']) && $params['price_from'] > 0) {
         $where['ad_price'] = ['>=', $params['price_from']];
     }
     if (isset($params['price_to']) && is_numeric($params['price_to']) && $params['price_to'] > 0) {
         $where['ad_price'] = ['<=', $params['price_to']];
     }
     //type 2 filters - real estates
     if (isset($params['estate_type_id']) && !empty($params['estate_type_id']) && is_array($params['estate_type_id'])) {
         $whereIn['estate_type_id'] = $params['estate_type_id'];
     }
     if (isset($params['estate_sq_m_from']) && is_numeric($params['estate_sq_m_from']) && $params['estate_sq_m_from'] > 0) {
         $where['estate_sq_m'] = ['>=', $params['estate_sq_m_from']];
     }
     if (isset($params['estate_sq_m_to']) && is_numeric($params['estate_sq_m_to']) && $params['estate_sq_m_to'] > 0) {
         $where['estate_sq_m'] = ['<=', $params['estate_sq_m_to']];
     }
     if (isset($params['estate_year_from']) && is_numeric($params['estate_year_from']) && $params['estate_year_from'] > 0) {
         $where['estate_year'] = ['>=', $params['estate_year_from']];
     }
     if (isset($params['estate_year_to']) && is_numeric($params['estate_year_to']) && $params['estate_year_to'] > 0) {
         $where['estate_year'] = ['<=', $params['estate_year_to']];
     }
     if (isset($params['estate_construction_type_id']) && !empty($params['estate_construction_type_id']) && is_array($params['estate_construction_type_id'])) {
         $whereIn['estate_construction_type_id'] = $params['estate_construction_type_id'];
     }
     if (isset($params['estate_heating_type_id']) && !empty($params['estate_heating_type_id']) && is_array($params['estate_heating_type_id'])) {
         $whereIn['estate_heating_type_id'] = $params['estate_heating_type_id'];
     }
     if (isset($params['estate_floor_from']) && is_numeric($params['estate_floor_from']) && $params['estate_floor_from'] > 0) {
         $where['estate_floor'] = ['>=', $params['estate_floor_from']];
     }
     if (isset($params['estate_floor_to']) && is_numeric($params['estate_floor_to']) && $params['estate_floor_to'] > 0) {
         $where['estate_floor'] = ['<=', $params['estate_floor_to']];
     }
     if (isset($params['estate_num_floors_in_building']) && is_numeric($params['estate_num_floors_in_building']) && $params['estate_num_floors_in_building'] > 0) {
         $where['estate_num_floors_in_building'] = $params['estate_num_floors_in_building'];
     }
     if (isset($params['estate_furnishing_type_id']) && !empty($params['estate_furnishing_type_id']) && is_array($params['estate_furnishing_type_id'])) {
         $whereIn['estate_furnishing_type_id'] = $params['estate_furnishing_type_id'];
     }
     //type 3 filters - cars
     if (isset($params['car_engine_id']) && !empty($params['car_engine_id']) && is_array($params['car_engine_id'])) {
         $whereIn['car_engine_id'] = $params['car_engine_id'];
     }
     if (isset($params['car_brand_id']) && is_numeric($params['car_brand_id']) && $params['car_brand_id'] > 0) {
         $where['car_brand_id'] = $params['car_brand_id'];
     }
     if (isset($params['car_model_id']) && is_numeric($params['car_model_id']) && $params['car_model_id'] > 0) {
         $where['car_model_id'] = $params['car_model_id'];
     }
     if (isset($params['car_transmission_id']) && !empty($params['car_transmission_id']) && is_array($params['car_transmission_id'])) {
         $whereIn['car_transmission_id'] = $params['car_transmission_id'];
     }
     if (isset($params['car_modification_id']) && !empty($params['car_modification_id']) && is_array($params['car_modification_id'])) {
         $whereIn['car_modification_id'] = $params['car_modification_id'];
     }
     if (isset($params['car_year_from']) && is_numeric($params['car_year_from']) && $params['car_year_from'] > 0) {
         $where['car_year'] = ['>=', $params['car_year_from']];
     }
     if (isset($params['car_year_to']) && is_numeric($params['car_year_to']) && $params['car_year_to'] > 0) {
         $where['car_year'] = ['<=', $params['car_year_to']];
     }
     if (isset($params['car_kilometeres_from']) && is_numeric($params['car_kilometeres_from']) && $params['car_kilometeres_from'] > 0) {
         $where['car_kilometeres'] = ['>=', $params['car_kilometeres_from']];
     }
     if (isset($params['car_kilometeres_to']) && is_numeric($params['car_kilometeres_to']) && $params['car_kilometeres_to'] > 0) {
         $where['car_kilometeres'] = ['<=', $params['car_kilometeres_to']];
     }
     if (isset($params['car_condition_id']) && !empty($params['car_condition_id']) && is_array($params['car_condition_id'])) {
         $whereIn['car_condition_id'] = $params['car_condition_id'];
     }
     /*
      * get promo ads
      */
     $where['ad_promo'] = 1;
     $where['ad_active'] = 1;
     if ($lid > 0) {
         $where['ad.location_id'] = $lid;
     }
     if ($cid > 0) {
         $whereIn['category_id'] = $all_category_childs;
     }
     if (!empty($search_text)) {
         $whereRaw['match(ad_title, ad_description) against(?)'] = [$search_text];
     }
     $orderRaw = 'rand()';
     $limit = 4;
     $promo_ad_list = $this->ad->getAdList($where, $order, $limit, $orderRaw, $whereIn, $whereRaw, $paginate);
     /*
      * get normal ads
      */
     $where['ad_promo'] = 0;
     $limit = 0;
     $orderRaw = '';
     $order = ['ad_publish_date' => 'desc'];
     $paginate = 4;
     if (isset($params['page']) && is_numeric($params['page'])) {
         $page = $params['page'];
     }
     $ad_list = $this->ad->getAdList($where, $order, $limit, $orderRaw, $whereIn, $whereRaw, $paginate, $page);
     //     	debug db queries
     //     	dd(DB::getQueryLog());
     $view_params = ['c' => $this->category->getAllHierarhy(), 'l' => $this->location->getAllHierarhy(), 'params' => $params, 'cid' => $cid, 'lid' => $lid, 'search_text' => $search_text, 'clist' => $clist, 'breadcrump' => $breadcrump, 'promo_ad_list' => $promo_ad_list, 'ad_list' => $ad_list, 'at' => AdType::all(), 'ac' => AdCondition::all(), 'estate_construction_type' => EstateConstructionType::all(), 'estate_furnishing_type' => EstateFurnishingType::all(), 'estate_heating_type' => EstateHeatingType::all(), 'estate_type' => EstateType::all(), 'car_brand_id' => CarBrand::all(), 'car_model_id' => $car_model_id, 'car_engine_id' => CarEngine::all(), 'car_transmission_id' => CarTransmission::all(), 'car_condition_id' => CarCondition::all(), 'car_modification_id' => CarModification::all()];
     if ($cid > 0) {
         $view_params['selected_category_info'] = $selected_category_info;
     }
     return view('ad.search', $view_params);
 }