public static function get_events($args = array(), $atts = array()) { global $wpdb; $defaults = array('page' => '0', 'number' => '5', 'order' => 'ASC', 'date' => 'NOW', 'date_end' => '', 'dayspast' => '', 'horizon' => 'hour', 'allday' => '', 'post_status' => 'publish', 'post_type' => '', 'author' => '', 'parse_postmeta' => '', 'parse_taxonomy' => '0', 'parse_taxonomymeta' => '0', 'premiere' => '0', 'auto' => '0', 'feed' => '', 'post_id' => '', 'current_post' => '', 'rdate' => ''); //TODO:take into consideration the browser tz. $r = wp_parse_args($args, $defaults); extract($r, EXTR_SKIP); $events_reverse = false; //------------- $order = 'ASC' == strtoupper($order) ? 'ASC' : 'DESC'; $parse_taxonomy = '1' == $parse_taxonomy ? true : false; //------------- $date_oper = '>='; $date_end_oper = '<='; //------------- if ('-1' == $number) { $limit = ''; //no limit !! } else { $page = intval($page); $number = intval($number); if ($page < 0) { //interchange operators $date_oper = '<'; $date_end_oper = '>'; $page = abs($page) - 1; $events_reverse = true; $order = 'ASC' == $order ? 'DESC' : 'ASC'; } if ($page == 0) { $limit = "LIMIT {$number}"; } else { $offset = $number * $page; $limit = "LIMIT {$offset},{$number}"; } } //----- //-------------- build taxonomy/term filter if ('1' == $auto && is_tax()) { $args['taxonomy'] = get_query_var('taxonomy'); $args['terms'] = get_query_var('term'); } $terms = isset($args['terms']) && !empty($args['terms']) ? $args['terms'] : false; if (false !== $terms) { $terms = explode(',', $terms); $tmp = array(); foreach ($terms as $slug) { $tmp[] = sprintf("'%s'", trim($slug)); } $terms = implode(",", $tmp); } $taxonomy = isset($args['taxonomy']) ? $args['taxonomy'] : false; if (false !== $taxonomy) { $taxonomy = explode(',', $taxonomy); $tmp = array(); foreach ($taxonomy as $slug) { if (empty($slug)) { continue; } $tmp[] = sprintf("'%s'", trim($slug)); } $taxonomy = implode(",", $tmp); } if (false === $taxonomy || false === $terms) { $taxonomy_tables = ""; $taxonomy_filters = ""; } else { $taxonomy_tables = "INNER JOIN {$wpdb->term_relationships} R ON R.object_id=E.post_id\nINNER JOIN {$wpdb->term_taxonomy} TT ON TT.term_taxonomy_id=R.term_taxonomy_id\nINNER JOIN {$wpdb->terms} T ON T.term_id=TT.term_id"; $taxonomy_filters = "AND TT.taxonomy IN ({$taxonomy})\nAND T.slug IN ({$terms})"; } //------------ $groupby_arr = array(); $filters = ""; //--- EVENT Date filters $date_filter = ""; if (!empty($date)) { $date = 'NOW' == $date ? current_time('mysql') : $date; $ts = strtotime($date); $format = $horizon == 'day' ? 'Y-m-d' : 'Y-m-d H:i:s'; if (false !== $ts) { $date_filter .= sprintf(" AND (E.event_start %s '%s')", $date_oper, date($format, $ts)); } } if (!empty($date_end)) { $date_end = 'NOW' == $date_end ? current_time('mysql') : $date_end; if (strlen($date_end) <= 10) { $date_end = date('Y-m-d 23:59:59', strtotime($date_end)); } $ts = strtotime($date_end); //$format = $horizon=='day' ? 'Y-m-d' : 'Y-m-d H:i:s' ; $format = 'Y-m-d H:i:s'; if (false !== $ts) { $date_filter .= sprintf(" AND (E.event_end %s '%s')", $date_end_oper, date($format, $ts)); } } if (!empty($dayspast)) { if (false === $date) { $ts = mktime(0, 0, 0, date('m'), date('d') - $dayspast, date('Y')); } else { $ts = mktime(0, 0, 0, date('m', $ts), date('d', $ts) - $dayspast, date('Y', $ts)); } $format = $horizon == 'day' ? 'Y-m-d' : 'Y-m-d H:i:s'; if (false !== $ts) { $date_filter .= sprintf(" AND (E.event_start >= '%s')", date($format, $ts)); } } //-- by specific post_id if ('current' == $post_id) { $post_id = get_the_ID(); } if ($post_id > 0) { $filters .= " AND(E.post_id=" . intval($post_id) . ")"; } //-- intended for use with post_ID, not alone, althought you can. if (!empty($rdate) && is_numeric($rdate)) { $filters .= sprintf(" AND(E.event_start='%s')", $rdate); } //-- Premiere if ('1' == $premiere) { $filters .= " AND(E.number=0)"; } else { if ('2' == $premiere) { $groupby_arr[] = "E.post_id"; } } //-- ALL day filter -------------------- if (!empty($allday)) { $allday = intval($allday) ? 1 : 0; $filters .= " AND(E.allday={$allday})"; } //-- maybe csv values: Post status, post type foreach (array('post_status' => 'P.post_status', 'post_type' => 'P.post_type') as $field => $sql_field) { if (!empty(${$field})) { $sql_val = rhc_supe_query::csv_to_sql_strings(${$field}); $filters .= sprintf(" AND(%s IN (%s))", $sql_field, $sql_val); } } //--- author filter $filters .= rhc_supe_query::get_author_sql_filter($author); $groupby = empty($groupby_arr) ? '' : sprintf("GROUP BY %s", implode(',', $groupby_arr)); //---------------------- $sql = "SELECT E.*,P.*\nFROM `{$wpdb->prefix}rhc_events` E\nINNER JOIN {$wpdb->posts} P ON P.ID=E.post_id\n{$taxonomy_tables}\nWHERE (1) \n{$date_filter}\n{$taxonomy_filters}\n{$filters}\n{$groupby}\nORDER BY E.event_start {$order}\n{$limit}\n"; if (isset($_REQUEST['rhc_debug']) && current_user_can('manage_options')) { echo "SQL:{$sql}<br><-----"; } $events = array(); //error_log( "\n"."\n".$sql."\n", 3, ABSPATH.'api.log' ); if ('1' != $feed && $wpdb->query($sql)) { $events = rhc_supe_query::handle_get_taxonomy_and_terms($wpdb->last_result, $parse_taxonomy, $parse_taxonomymeta, $atts); if ($events_reverse) { //file_put_contents( ABSPATH.'api.log',print_r( $events,true) ); $events = array_reverse($events); } } //permalink $events = rhc_supe_query::handle_get_permalink($events, $atts); //fill post meta $events = rhc_supe_query::handle_get_postmeta($events, $atts); //fill in images $events = rhc_supe_query::handle_get_images($events, $atts); if ('0' != $feed) { $taxonomy = isset($args['taxonomy']) ? $args['taxonomy'] : ''; $terms = isset($args['terms']) && !empty($args['terms']) ? $args['terms'] : ''; $json_feed = apply_filters('rhc_json_feed', false, $taxonomy, $terms, is_numeric($author) ? $author : '', is_string($author) ? $author : ''); } else { $json_feed = array(); } /* if(true||$feed!='0'){ if(!empty($calendar)){ $json_feed = apply_filters('rhc_json_feed',false,RHC_CALENDAR,$calendar,$author,$author_name); }else{ $json_feed = apply_filters('rhc_json_feed',false,$taxonomy,$terms,$author,$author_name); } } */ if (!empty($events)) { $calendar_url = isset($atts['calendar_url']) && !empty($atts['calendar_url']) ? $atts['calendar_url'] : false; if (false !== $calendar_url) { foreach ($events as $i => $e) { $e->the_permalink = $calendar_url; } } } return apply_filters('rhc_supe_get_events', $events, compact('args', 'atts', 'json_feed', 'date', 'date_end')); }