コード例 #1
0
 function _get_where_query($where)
 {
     if (!TravelHelper::checkTableDuplicate('st_holidays')) {
         return $where;
     }
     global $wpdb;
     if (isset($_REQUEST['location_id']) && !empty($_REQUEST['location_id'])) {
         $location_id = STInput::get('location_id', '');
         $list = TravelHelper::getLocationByParent($location_id);
         if (is_array($list) && count($list)) {
             $where .= " AND (";
             $where_tmp = "";
             foreach ($list as $item) {
                 if (empty($where_tmp)) {
                     $where_tmp .= "tb.multi_location LIKE '%_{$item}_%'";
                 } else {
                     $where_tmp .= " OR tb.multi_location LIKE '%_{$item}_%'";
                 }
             }
             $list = implode(',', $list);
             $where_tmp .= " OR tb.id_location IN ({$list})";
             $where .= $where_tmp . ")";
         } else {
             $where .= " AND (tb.multi_location LIKE '%_{$location_id}_%' OR tb.id_location IN ('{$location_id}')) ";
         }
     } elseif (isset($_REQUEST['location_name']) && !empty($_REQUEST['location_name'])) {
         $location_name = STInput::get('location_name', '');
         $ids_location = TravelerObject::_get_location_by_name($location_name);
         if (is_array($ids_location) && count($ids_location)) {
             $ids_location_tmp = array();
             foreach ($ids_location as $item) {
                 $list = TravelHelper::getLocationByParent($item);
                 if (is_array($list) && count($list)) {
                     foreach ($list as $item) {
                         $ids_location_tmp[] = $item;
                     }
                 }
             }
             if (count($ids_location_tmp)) {
                 $ids_location = $ids_location_tmp;
             }
         }
         if (is_array($ids_location) && count($ids_location)) {
             $where .= " AND ((";
             $where_tmp = "";
             foreach ($ids_location as $item) {
                 if (empty($where_tmp)) {
                     $where_tmp .= "tb.multi_location LIKE '%_{$item}_%'";
                 } else {
                     $where_tmp .= " OR tb.multi_location LIKE '%_{$item}_%'";
                 }
             }
             $ids_location = implode(',', $ids_location);
             $where_tmp .= " OR tb.id_location IN ({$ids_location})";
             $where .= $where_tmp . ")";
             $where .= " OR (tb.address LIKE '%{$location_name}%'";
             $where .= " OR {$wpdb->prefix}posts.post_title LIKE '%{$location_name}%'))";
         } else {
             if (!empty($_REQUEST['search_all'])) {
                 $where .= " AND (tb.address LIKE '%{$location_name}%'";
                 $where .= " OR {$wpdb->prefix}posts.post_title LIKE '%{$location_name}%')";
             }
         }
     } elseif (isset($_REQUEST['address']) && !empty($_REQUEST['address'])) {
         $address = STInput::request('address', '');
         $value = STInput::request('address');
         $value = explode(",", $value);
         if (!empty($value[0]) and !empty($value[2])) {
             $where .= " AND ( tb.address LIKE '%{$value[0]}%' OR tb.address LIKE '%{$value[2]}%')";
         } else {
             $where .= " AND ( tb.address LIKE '%{$address}%')";
         }
     }
     if (isset($_REQUEST['item_id']) and !empty($_REQUEST['item_id'])) {
         $item_id = STInput::request('item_id', '');
         $where .= " AND ({$wpdb->prefix}posts.ID = '{$item_id}')";
     }
     if (isset($_REQUEST['item_name']) and !empty($_REQUEST['item_name'])) {
         $item_name = STInput::request('item_name', '');
         $where .= " AND ({$wpdb->prefix}posts.post_title LIKE '%{$item_name}%')";
     }
     if (isset($_REQUEST['people']) && !empty($_REQUEST['people'])) {
         $people = STInput::get('people', 1);
         $where .= " AND (tb.max_people >= {$people})";
     }
     if (isset($_REQUEST['duration']) && !empty($_REQUEST['duration'])) {
         $duration = intval(STInput::get('duration', 1));
         $today = time();
         $where .= "AND (\r\n                        (\r\n                            tb.duration_day = {$duration}\r\n                            AND tb.type_holiday = 'daily_holiday'\r\n                        )\r\n                    )";
         /*$where .= "AND (
               (
                   tb.duration_day >= {$duration}
                   AND tb.type_holiday = 'daily_holiday'
               )
               OR (
                   (
                      (UNIX_TIMESTAMP(STR_TO_DATE(tb.check_out, '%Y-%m-%d')) - UNIX_TIMESTAMP(STR_TO_DATE(tb.check_in, '%Y-%m-%d'))) / (60*60*24) + 1
                   ) >= {$duration}
               )
           )";*/
     }
     if (isset($_REQUEST['price_range'])) {
         $price = STInput::get('price_range', '0;0');
         $priceobj = explode(';', $price);
         $priceobj[0] = TravelHelper::convert_money_to_default($priceobj[0]);
         $priceobj[1] = TravelHelper::convert_money_to_default($priceobj[1]);
         $min_range = $priceobj[0];
         $max_range = $priceobj[1];
         /*$where .= " AND (
               (CAST(tb.child_price AS DECIMAL) >= {$min_range} and CAST(tb.child_price AS DECIMAL) <= {$max_range})
               OR (CAST(tb.adult_price AS DECIMAL) >= {$min_range} and CAST(tb.adult_price AS DECIMAL) <= {$max_range})
           ) ";*/
         $where .= " AND ( \r\n                        (CAST(tb.adult_price AS DECIMAL) >= {$min_range} and CAST(tb.adult_price AS DECIMAL) <= {$max_range})\r\n                    ) ";
     }
     $start = STInput::request("start");
     $end = STInput::request("end");
     if (!empty($start) && !empty($end)) {
         $today = date('Y-m-d');
         $check_in = date('Y-m-d', strtotime(TravelHelper::convertDateFormat(STInput::request("start"))));
         $period = TravelHelper::dateDiff($today, $check_in);
         if ($period < 0) {
             $period = 0;
         }
         $check_out = date('Y-m-d', strtotime(TravelHelper::convertDateFormat(STInput::request("end"))));
         $list_date = HolidayHelper::_holidayValidate($check_in);
         if (is_array($list_date) && count($list_date)) {
             $list = implode(',', $list_date);
         } else {
             $list = "''";
         }
         $where .= " AND {$wpdb->posts}.ID NOT IN ({$list})";
         /* $where .= " AND (
            (
                tb.type_holiday = 'specific_date'
                AND (
                    UNIX_TIMESTAMP(
                        STR_TO_DATE(tb.check_in, '%Y-%m-%d')
                    ) - UNIX_TIMESTAMP(
                        STR_TO_DATE('{$check_in}', '%Y-%m-%d')
                    ) <= 0
                )
                AND (
                    UNIX_TIMESTAMP(
                        STR_TO_DATE(tb.check_out, '%Y-%m-%d')
                    ) - UNIX_TIMESTAMP(
                        STR_TO_DATE('{$check_out}', '%Y-%m-%d')
                    ) >= 0
                )
            )
            OR (
                tb.type_holiday = 'daily_holiday'
                AND (tb.holidays_booking_period <= {$period})
            ))";*/
     }
     if (isset($_REQUEST['star_rate']) && !empty($_REQUEST['star_rate'])) {
         $stars = STInput::get('star_rate', 1);
         $stars = explode(',', $stars);
         $all_star = array();
         if (!empty($stars) && is_array($stars)) {
             foreach ($stars as $val) {
                 for ($i = $val; $i < $val + 0.9; $i += 0.1) {
                     if ($i) {
                         $all_star[] = $i;
                     }
                 }
             }
         }
         $list_star = implode(',', $all_star);
         if ($list_star) {
             $where .= " AND (tb.rate_review IN ({$list_star}))";
         }
     }
     if (isset($_REQUEST['range']) and isset($_REQUEST['location_id'])) {
         $range = STInput::request('range', '5');
         $location_id = STInput::request('location_id');
         $post_type = get_query_var('post_type');
         $map_lat = (double) get_post_meta($location_id, 'map_lat', true);
         $map_lng = (double) get_post_meta($location_id, 'map_lng', true);
         global $wpdb;
         $where .= "\r\n                    AND {$wpdb->posts}.ID IN (\r\n                            SELECT ID FROM (\r\n                                SELECT {$wpdb->posts}.*,( 6371 * acos( cos( radians({$map_lat}) ) * cos( radians( mt1.meta_value ) ) *\r\n                                                cos( radians( mt2.meta_value ) - radians({$map_lng}) ) + sin( radians({$map_lat}) ) *\r\n                                                sin( radians( mt1.meta_value ) ) ) ) AS distance\r\n                                                    FROM {$wpdb->posts}, {$wpdb->postmeta} as mt1,{$wpdb->postmeta} as mt2\r\n                                                    WHERE {$wpdb->posts}.ID = mt1.post_id\r\n                                                    and {$wpdb->posts}.ID=mt2.post_id\r\n                                                    AND mt1.meta_key = 'map_lat'\r\n                                                    and mt2.meta_key = 'map_lng'\r\n                                                    AND {$wpdb->posts}.post_status = 'publish'\r\n                                                    AND {$wpdb->posts}.post_type = '{$post_type}'\r\n                                                    AND {$wpdb->posts}.post_date < NOW()\r\n                                                    GROUP BY {$wpdb->posts}.ID HAVING distance<{$range}\r\n                                                    ORDER BY distance ASC\r\n                            ) as st_data\r\n                    )";
     }
     return $where;
 }