$value) { if ( ! in_array($key, $valid_keys) ) { unset($query[$key]); } } // Parse the advance search operators if ( !empty($query['s']) ) { //preg_match_all('/"(.*?)"/', $query['s'], $_quotes); //$search_terms = explode(' ', preg_replace( '/".*?"/', '', $query['s'] )); $search_terms = explode(' ', $query['s']); foreach ($search_terms as $key => $term) { // operators: if ( strpos($term, ':') !== false ) { $operation = explode(':', $term, 2); switch( $operation[0] ) { /*case 'cat': case 'category': if ( isset($query['cat']) ) { $query['cat'] = $query['cat'] . ',' . get_cat_ID($operation[1]); } else { $query['cat'] = get_cat_ID($operation[1]); } break; */ case 'tag': if ( isset($query['tag']) ) { $query['tag'] .= ',' . $operation[1]; } else { $query['tag'] = $operation[1]; } break; case 'month': $query['monthnum'] = $operation[1]; break; case 'author': $query['author_name'] = $operation[1]; break; } unset($search_terms[$key]); } } $query['s'] = implode($search_terms); } } return $query; } function update_style_info() { $data = get_style_data( get_option('k2style') ); if ( !empty($data) and ($data['stylename'] != '') and ($data['stylelink'] != '') and ($data['author'] != '') ) { // No custom style info if ( $data['footer'] == '' ) { $data['footer'] = __('Styled with %style%','k2_domain'); } if ( strpos($data['footer'], '%') !== false ) { $data['footer'] = str_replace("%author%", $data['author'], $data['footer']); $data['footer'] = str_replace("%site%", $data['site'], $data['footer']); $data['footer'] = str_replace("%style%", $data['stylename'], $data['footer']); $data['footer'] = str_replace("%stylelink%", $data['stylelink'], $data['footer']); $data['footer'] = str_replace("%version%", $data['version'], $data['footer']); $data['footer'] = str_replace("%comments%", $data['comments'], $data['footer']); } } update_option('k2styleinfo', $data); return $data; } function get_style_data( $style_file = '' ) { // if no style selected, exit if ( '' == $style_file ) return false; $style_file = ABSPATH . $style_file; if ( !is_readable($style_file) ) return false; $style_data = implode( '', file($style_file) ); $style_data = str_replace( '\r', '\n', $style_data ); // parse the data preg_match("|Author Name\s*:(.*)$|mi", $style_data, $author); preg_match("|Author Site\s*:(.*)$|mi", $style_data, $site); preg_match("|Style Name\s*:(.*)$|mi", $style_data, $stylename); preg_match("|Style URI\s*:(.*)$|mi", $style_data, $stylelink); preg_match("|Style Footer\s*:(.*)$|mi", $style_data, $footer); preg_match("|Version\s*:(.*)$|mi", $style_data, $version); preg_match("|Comments\s*:(.*)$|mi", $style_data, $comments); preg_match("|Header Text Color\s*:\s*#*([\dABCDEF]+)|i", $style_data, $header_text_color); preg_match("|Header Width\s*:\s*(\d+)|i", $style_data, $header_width); preg_match("|Header Height\s*:\s*(\d+)|i", $style_data, $header_height); preg_match("|Layout Widths\s*:\s*(\d+)\s*(px)?,\s*(\d+)\s*(px)?,\s*(\d+)|i", $style_data, $widths); $layout_widths = array(); if ( !empty($widths) ) { $layout_widths[1] = $widths[1]; $layout_widths[2] = $widths[3]; $layout_widths[3] = $widths[5]; } return array( 'path' => str_replace(ABSPATH, '', $style_file), 'modified' => filemtime($style_file), 'author' => trim($author[1]), 'site' => clean_url( trim($site[1]) ), 'stylename' => trim($stylename[1]), 'stylelink' => clean_url( trim($stylelink[1]) ), 'footer' => trim($footer[1]), 'version' => trim($version[1]), 'comments' => trim($comments[1]), 'header_text_color' => $header_text_color[1], 'header_width' => $header_width[1], 'header_height' => $header_height[1], 'layout_widths' => $layout_widths ); } function get_k2_ping_type($trackbacktxt = 'Trackback', $pingbacktxt = 'Pingback') { $type = get_comment_type(); switch( $type ) { case 'trackback' : return $trackbacktxt; break; case 'pingback' : return $pingbacktxt; break; } return false; } function get_rolling_page_dates($query) { global $wpdb; $per_page = intval(get_query_var('posts_per_page')); $num_pages = $query->max_num_pages; $search = '/FROM\s+?(.*)\s+?LIMIT/siU'; preg_match($search, $query->request, $matches); $post_dates = $wpdb->get_results("SELECT {$wpdb->posts}.post_date_gmt FROM {$matches[1]}"); $page_dates = array(); for ($i = 0; $i < $num_pages; $i++) { $page_dates[] = date(__('F, Y','k2_domain'), abs(strtotime($post_dates[$i * $per_page]->post_date_gmt . ' GMT'))); } return $page_dates; } function output_javascript_url($file) { $template_url = get_bloginfo('template_url'); $url_parts = parse_url( $template_url ); if ( $url_parts->host != $_SERVER['HTTP_HOST'] ) { $template_url = str_replace($url_parts->host, $_SERVER['HTTP_HOST'], $template_url); } echo $template_url .'/'. $file; } // Generate JavaScript array from an array function output_javascript_array($array, $print = true) { $output = '['; if ( is_array($array) and !empty($array) ) { array_walk($array, 'js_format_array'); $output .= implode(', ', $array); } $output .= ']'; return $print ? print($output) : $output; } // Generate JavaScript hash from an associated array function output_javascript_hash($array, $print = true) { $output = '{'; if ( is_array($array) and !empty($array) ) { array_walk($array, 'js_format_hash'); $output .= implode(', ', $array); } $output .= '}'; return $print ? print($output) : $output; } function js_format_array(&$item, $key) { $item = js_value($item); } function js_format_hash(&$item, $key) { $item = '"' . js_escape($key) . '": ' . js_value($item); } function js_value($value) { if ( is_string($value) ) return '"' . js_escape($value) . '"'; if ( is_bool($value) ) return $value ? 'true' : 'false'; if ( is_numeric($value) ) return $value; if ( empty($value) ) return '0'; return '""'; } /* By mqchen at gmail dot com, http://us.php.net/manual/en/function.http-build-query.php#72911 */ if (!function_exists('http_build_query')) { function http_build_query($data, $prefix = null, $sep = '', $key = '') { $ret = array(); foreach ( (array) $data as $k => $v) { $k = urlencode($k); if ( is_int($k) && $prefix != null ) { $k = $prefix.$k; } if ( !empty($key) ) { $k = $key.'['.$k.']'; } if ( is_array($v) or is_object($v) ) { array_push($ret, http_build_query($v, '', $sep, $k)); } else { array_push($ret, $k.'='.urlencode($v)); } } if ( empty($sep) ) { $sep = ini_get("arg_separator.output"); } return implode($sep, $ret); } } /* By Mark Jaquith, http://txfx.net */ function k2_nice_category($normal_separator = ', ', $penultimate_separator = ' and ') { $categories = get_the_category(); if (empty($categories)) { return __('Uncategorized','k2_domain'); } $thelist = ''; $i = 1; $n = count($categories); foreach ($categories as $category) { if (1 < $i and $i != $n) { $thelist .= $normal_separator; } if (1 < $i and $i == $n) { $thelist .= $penultimate_separator; } $thelist .= 'cat_name) . '">'.$category->cat_name.''; ++$i; } return apply_filters('the_category', $thelist, $normal_separator); } function k2_post_groupby($groupby) { // Only filter when asides_module is active if ( is_home() and function_exists('is_active_module') and is_active_module('asides_sidebar_module') ) { return ''; } return $groupby; } add_filter('posts_groupby', 'k2_post_groupby'); function k2_asides_filter($query) { global $k2sbm_current_module; $asides = get_option('k2asidescategory'); // Only filter when it's in the homepage if ( ($asides != 0) and ($query->is_home) and (!$k2sbm_current_module) and function_exists('is_active_module') and is_active_module('asides_sidebar_module') ) { if ( get_wp_version() > 2.2 ) { $exclude_cats = $query->get('category__not_in'); $include_cats = $query->get('category__in'); // Remove asides from list of categories to include if ( !empty($include_cats) and in_array($asides, $include_cats) ) { $query->set( 'category__in', array_diff( $include_cats, array($asides) ) ); } // Insert asides into list of categories to exclude if ( empty($exclude_cats) ) { $query->set( 'category__not_in', array($asides) ); } else if ( !in_array( $asides, $exclude_cats ) ) { $query->set( 'category__not_in', array_merge( $exclude_cats, array($asides) ) ); } } else { $priorcat = $query->get('cat'); if ( !empty($priorcat) ) { $priorcat .= ','; } $query->set('cat', $priorcat . '-' . $asides); } } return $query; } // Filter to remove asides from the loop add_filter('pre_get_posts', 'k2_asides_filter'); function get_wp_version() { global $wp_version; $version = floatval($wp_version); // Old versions of WordPress-mu if ( strpos($wp_version, 'wordpress-mu') !== false ) { $version = $version + 1.0; } return $version; } // WordPress Compatibility Functions /** * is_front_page() - Is it the front of the site, whether blog view or a WP Page? * * @since 2.5 * @uses is_home * @uses get_option * * @return bool True if front of site */ if ( ! function_exists('is_front_page') ) { function is_front_page () { // most likely case if ( 'posts' == get_option('show_on_front') && is_home() ) return true; elseif ( 'page' == get_option('show_on_front') && get_option('page_on_front') && is_page(get_option('page_on_front')) ) return true; else return false; } } // Semantic class functions from Sandbox (http://www.plaintxt.org/themes/sandbox/) // Generates semantic classes for BODY element function k2_body_class( $print = true ) { global $wp_query, $current_user; $c = array('wordpress', 'k2'); // Applies the time- and date-based classes (below) to BODY element k2_date_classes(time(), $c); // Generic semantic classes for what type of content is displayed if ( function_exists('is_front_page') ) { is_front_page() ? $c[] = 'home' : null; is_home() ? $c[] = 'blog' : null; } else { is_home() ? $c[] = 'home' : null; } is_archive() ? $c[] = 'archive' : null; is_date() ? $c[] = 'date' : null; is_search() ? $c[] = 'search' : null; is_paged() ? $c[] = 'paged' : null; is_attachment() ? $c[] = 'attachment' : null; is_404() ? $c[] = 'four04' : null; // CSS does not allow a digit as first character // Special classes for BODY element when a single post if ( is_single() ) { $postID = $wp_query->post->ID; the_post(); // Adds 'single' class and class with the post ID $c[] = 'single postid-' . $postID . ' s-slug-' . $wp_query->post->post_name; // Adds classes for the month, day, and hour when the post was published if ( isset($wp_query->post->post_date) ) k2_date_classes(mysql2date('U', $wp_query->post->post_date), $c, 's-'); // Adds category classes for each category on single posts if ( $cats = get_the_category() ) foreach ( $cats as $cat ) $c[] = 's-category-' . $cat->category_nicename; // Adds tag classes for each tags on single posts if ( function_exists('get_the_tags') ) if ( $tags = get_the_tags() ) foreach ( $tags as $tag ) $c[] = 's-tag-' . $tag->slug; // Adds MIME-specific classes for attachments if ( is_attachment() ) { $the_mime = get_post_mime_type(); $boring_stuff = array('application/', 'image/', 'text/', 'audio/', 'video/', 'music/'); $c[] = 'attachment-' . str_replace($boring_stuff, '', $the_mime); } // Adds author class for the post author $c[] = 's-author-' . sanitize_title_with_dashes(strtolower(get_the_author())); rewind_posts(); } // Author name classes for BODY on author archives else if ( is_author() ) { $author = $wp_query->get_queried_object(); $c[] = 'author'; $c[] = 'author-' . $author->user_nicename; } // Category name classes for BODY on category archvies else if ( is_category() ) { $cat = $wp_query->get_queried_object(); $c[] = 'category'; $c[] = 'category-' . $cat->category_nicename; } // Tag name classes for BODY on tag archives else if ( function_exists('is_tag') and is_tag() ) { $tag = $wp_query->get_queried_object(); $c[] = 'tag'; $c[] = 'tag-' . $tag->slug; } // Page author for BODY on 'pages' else if ( is_page() ) { $pageID = $wp_query->post->ID; $page_children = wp_list_pages("child_of=$pageID&echo=0"); the_post(); $c[] = 'page pageid-' . $pageID; $c[] = 'page-author-' . sanitize_title_with_dashes(strtolower(get_the_author())); $c[] = 'page-slug-'.$wp_query->post->post_name; // Checks to see if the page has children and/or is a child page; props to Adam if ( $page_children != '' ) { $c[] = 'page-parent'; } if ( $wp_query->post->post_parent ) { $c[] = 'page-child parent-pageid-' . $wp_query->post->post_parent; } rewind_posts(); } // Paged classes; for 'page X' classes of index, single, etc. $page = intval( $wp_query->get('paged') ); if ( is_paged() && $page > 1 ) { $c[] = 'paged-'.$page.''; if ( is_single() ) { $c[] = 'single-paged-'.$page.''; } else if ( is_page() ) { $c[] = 'page-paged-'.$page.''; } else if ( is_category() ) { $c[] = 'category-paged-'.$page.''; } else if ( function_exists('is_tag') and is_tag() ) { $c[] = 'tag-paged-'.$page.''; } else if ( is_date() ) { $c[] = 'date-paged-'.$page.''; } else if ( is_author() ) { $c[] = 'author-paged-'.$page.''; } else if ( is_search() ) { $c[] = 'search-paged-'.$page.''; } } // For when a visitor is logged in while browsing if ( $current_user->ID ) $c[] = 'loggedin'; // Sidebar layout settings switch (get_option('k2columns')) { case '1': $c[] = 'columns-one'; break; default: case '2': $c[] = 'columns-two'; break; case 'dynamic': case '3': $c[] = 'columns-three'; break; } // Language settings $locale = get_locale(); if ( empty($locale) ) { $locale = 'en'; } else { $lang_array = split('_', $locale); $locale = $lang_array[0]; } $c[] = 'lang-' . $locale; // Separates classes with a single space, collates classes for BODY $c = join( ' ', apply_filters('body_class', $c) ); // And tada! return $print ? print($c) : $c; } // Generates semantic classes for each post DIV element function k2_post_class( $post_count = 1, $post_asides = false, $print = true ) { global $post; // hentry for hAtom compliace, gets 'alt' for every other post DIV, describes the post type and p[n] $c = array('hentry', "p$post_count", $post->post_type, $post->post_status); // Author for the post queried $c[] = 'author-' . sanitize_title_with_dashes(strtolower(get_the_author())); // Category for the post queried foreach ( (array) get_the_category() as $cat ) $c[] = 'category-' . $cat->category_nicename; // Tags for the post queried if ( function_exists('get_the_tags') ) { $tags = get_the_tags(); if ( !empty($tags) ) { foreach ( $tags as $tag ) { $c[] = 'tag-' . $tag->slug; } } } // For password-protected posts if ( $post->post_password ) $c[] = 'protected'; // Applies the time- and date-based classes (below) to post DIV k2_date_classes(mysql2date('U', $post->post_date), $c); // Asides post if ( $post_asides ) { $c[] = 'k2-asides'; } // If it's the other to the every, then add 'alt' class if ( $post_count & 1 == 1 ) { $c[] = 'alt'; } // Separates classes with a single space, collates classes for post DIV $c = join( ' ', apply_filters('post_class', $c) ); // And tada! return $print ? print($c) : $c; } // Generates semantic classes for each comment LI element function k2_comment_class( $comment_count = 1, $print = true ) { global $comment, $post; // Collects the comment type (comment, trackback), $c = array($comment->comment_type); // Counts trackbacks (t[n]) or comments (c[n]) if ($comment->comment_type == 'comment') { $c[] = "c$comment_count"; } else { $c[] = "t$comment_count"; } // If the comment author has an id (registered), then print the display name if ( $comment->user_id > 0 ) { $user = get_userdata($comment->user_id); // For all registered users, 'byuser'; to specify the registered user, 'comment-author-[display_name]' $c[] = "byuser comment-author-" . sanitize_title_with_dashes(strtolower($user->display_name)); // For comment authors who are the author of the post if ( $comment->user_id === $post->post_author ) $c[] = 'bypostauthor'; } // If it's the other to the every, then add 'alt' class; collects time- and date-based classes k2_date_classes(mysql2date('U', $comment->comment_date), $c, 'c-'); if ( $comment_count & 1 == 1 ) { $c[] = 'alt'; } // Separates classes with a single space, collates classes for comment LI $c = join( ' ', apply_filters('comment_class', $c) ); // Tada again! return $print ? print($c) : $c; } // Generates time- and date-based classes for BODY, post DIVs, and comment LIs; relative to GMT (UTC) function k2_date_classes($t, &$c, $p = '') { $t = $t + (get_option('gmt_offset') * 3600); $c[] = $p . 'y' . gmdate('Y', $t); // Year $c[] = $p . 'm' . gmdate('m', $t); // Month $c[] = $p . 'd' . gmdate('d', $t); // Day $c[] = $p . 'h' . gmdate('H', $t); // Hour } ?>