- }
-}
-
-function debug_fwrite($fp, $string) {
- global $debug;
- if ( $debug == 1 ) {
- fwrite($fp, $string);
- }
-}
-
-function debug_fclose($fp) {
- global $debug;
- if ( $debug == 1 ) {
- fclose($fp);
- }
-}
-
-function spawn_pinger() {
- global $wpdb, $wp_version;
- $doping = false;
- if ( $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE TRIM(to_ping) != '' LIMIT 1") )
- $doping = true;
-
- if ( $wpdb->get_var("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_pingme' OR meta_key = '_encloseme' LIMIT 1") )
- $doping = true;
-
- if ( substr(php_sapi_name(), 0, 3) == 'cgi' )
- return $doping;
-
- if ( $doping ) {
- $ping_url = get_settings('siteurl') .'/wp-admin/execute-pings.php';
- $parts = parse_url($ping_url);
- $argyle = @ fsockopen($parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01);
- if ( $argyle )
- fputs($argyle, "GET {$parts['path']}?time=".time()." HTTP/1.0\r\nHost: {$_SERVER['HTTP_HOST']}\r\nUser-Agent: WordPress/{$wp_version}\r\n\r\n");
- }
-}
-
-function do_enclose( $content, $post_ID ) {
- global $wp_version, $wpdb;
- include_once (ABSPATH . WPINC . '/class-IXR.php');
-
- $log = debug_fopen(ABSPATH . '/enclosures.log', 'a');
- $post_links = array();
- debug_fwrite($log, 'BEGIN '.date('YmdHis', time())."\n");
-
- $pung = get_enclosed( $post_ID );
-
- $ltrs = '\w';
- $gunk = '/#~:.?+=&%@!\-';
- $punc = '.:?\-';
- $any = $ltrs . $gunk . $punc;
-
- preg_match_all("{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x", $content, $post_links_temp);
-
- debug_fwrite($log, 'Post contents:');
- debug_fwrite($log, $content."\n");
-
- foreach($post_links_temp[0] as $link_test) :
- if ( !in_array($link_test, $pung) ) : // If we haven't pung it already
- $test = parse_url($link_test);
- if ( isset($test['query']) )
- $post_links[] = $link_test;
- elseif (($test['path'] != '/') && ($test['path'] != ''))
- $post_links[] = $link_test;
- endif;
- endforeach;
-
- foreach ($post_links as $url) :
- if ( $url != '' && !$wpdb->get_var("SELECT post_id FROM $wpdb->postmeta WHERE post_id = '$post_ID' AND meta_key = 'enclosure' AND meta_value LIKE ('$url%')") ) {
- if ( $headers = wp_get_http_headers( $url) ) {
- $len = (int) $headers['content-length'];
- $type = $wpdb->escape( $headers['content-type'] );
- $allowed_types = array( 'video', 'audio' );
- if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) {
- $meta_value = "$url\n$len\n$type\n";
- $wpdb->query( "INSERT INTO `$wpdb->postmeta` ( `post_id` , `meta_key` , `meta_value` )
- VALUES ( '$post_ID', 'enclosure' , '$meta_value')" );
- }
- }
- }
- endforeach;
-}
-
-function wp_get_http_headers( $url, $red = 1 ) {
- global $wp_version;
- @set_time_limit( 60 );
-
- if ( $red > 5 )
- return false;
-
- $parts = parse_url( $url );
- $file = $parts['path'] . ($parts['query'] ? '?'.$parts['query'] : '');
- $host = $parts['host'];
- if ( !isset( $parts['port'] ) )
- $parts['port'] = 80;
-
- $head = "HEAD $file HTTP/1.1\r\nHOST: $host\r\nUser-Agent: WordPress/" . $wp_version . "\r\n\r\n";
-
- $fp = @fsockopen($host, $parts['port'], $err_num, $err_msg, 3);
- if ( !$fp )
- return false;
-
- $response = '';
- fputs( $fp, $head );
- while ( !feof( $fp ) && strpos( $response, "\r\n\r\n" ) == false )
- $response .= fgets( $fp, 2048 );
- fclose( $fp );
- preg_match_all('/(.*?): (.*)\r/', $response, $matches);
- $count = count($matches[1]);
- for ( $i = 0; $i < $count; $i++) {
- $key = strtolower($matches[1][$i]);
- $headers["$key"] = $matches[2][$i];
- }
-
- preg_match('/.*([0-9]{3}).*/', $response, $return);
- $headers['response'] = $return[1]; // HTTP response code eg 204, 200, 404
-
- $code = $headers['response'];
- if ( ('302' == $code || '301' == $code) && isset($headers['location']) )
- return wp_get_http_headers( $headers['location'], ++$red );
-
- return $headers;
-}
-
-// Deprecated. Use the new post loop.
-function start_wp() {
- global $wp_query, $post;
-
- // Since the old style loop is being used, advance the query iterator here.
- $wp_query->next_post();
-
- setup_postdata($post);
-}
-
-// Setup global post data.
-function setup_postdata($post) {
- global $id, $postdata, $authordata, $day, $page, $pages, $multipage, $more, $numpages, $wp_query;
- global $pagenow;
-
- $id = $post->ID;
-
- $authordata = get_userdata($post->post_author);
-
- $day = mysql2date('d.m.y', $post->post_date);
- $currentmonth = mysql2date('m', $post->post_date);
- $numpages = 1;
- $page = get_query_var('page');
- if ( !$page )
- $page = 1;
- if ( is_single() || is_page() )
- $more = 1;
- $content = $post->post_content;
- if ( preg_match('/<!--nextpage-->/', $content) ) {
- if ( $page > 1 )
- $more = 1;
- $multipage = 1;
- $content = str_replace("\n<!--nextpage-->\n", '<!--nextpage-->', $content);
- $content = str_replace("\n<!--nextpage-->", '<!--nextpage-->', $content);
- $content = str_replace("<!--nextpage-->\n", '<!--nextpage-->', $content);
- $pages = explode('<!--nextpage-->', $content);
- $numpages = count($pages);
- } else {
- $pages[0] = $post->post_content;
- $multipage = 0;
- }
- return true;
-}
-
-// Setup global user vars. Used by set_current_user() for back compat.
-function setup_userdata($user_id = '') {
- global $user_login, $userdata, $user_level, $user_ID, $user_email, $user_url, $user_pass_md5, $user_identity;
-
- if ( '' == $user_id )
- $user = wp_get_current_user();
- else
- $user = new WP_User($user_id);
-
- if ( 0 == $user->ID )
- return;
-
- $userdata = $user->data;
- $user_login = $user->user_login;
- $user_level = $user->user_level;
- $user_ID = $user->ID;
- $user_email = $user->user_email;
- $user_url = $user->user_url;
- $user_pass_md5 = md5($user->user_pass);
- $user_identity = $user->display_name;
-}
-
-function is_new_day() {
- global $day, $previousday;
- if ( $day != $previousday ) {
- return(1);
- } else {
- return(0);
- }
-}
-
-// Filters: these are the core of WP's plugin architecture
-
-function merge_filters($tag) {
- global $wp_filter;
- if ( isset($wp_filter['all']) ) {
- foreach ($wp_filter['all'] as $priority => $functions) {
- if ( isset($wp_filter[$tag][$priority]) )
- $wp_filter[$tag][$priority] = array_merge($wp_filter['all'][$priority], $wp_filter[$tag][$priority]);
- else
- $wp_filter[$tag][$priority] = array_merge($wp_filter['all'][$priority], array());
- $wp_filter[$tag][$priority] = array_unique($wp_filter[$tag][$priority]);
- }
- }
-
- if ( isset($wp_filter[$tag]) )
- ksort( $wp_filter[$tag] );
-}
-
-function apply_filters($tag, $string) {
- global $wp_filter;
-
- $args = array_slice(func_get_args(), 2);
-
- merge_filters($tag);
-
- if ( !isset($wp_filter[$tag]) ) {
- return $string;
- }
- foreach ($wp_filter[$tag] as $priority => $functions) {
- if ( !is_null($functions) ) {
- foreach($functions as $function) {
-
- $all_args = array_merge(array($string), $args);
- $function_name = $function['function'];
- $accepted_args = $function['accepted_args'];
-
- if ( $accepted_args == 1 )
- $the_args = array($string);
- elseif ( $accepted_args > 1 )
- $the_args = array_slice($all_args, 0, $accepted_args);
- elseif ( $accepted_args == 0 )
- $the_args = NULL;
- else
- $the_args = $all_args;
-
- $string = call_user_func_array($function_name, $the_args);
- }
- }
- }
- return $string;
-}
-
-function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
- global $wp_filter;
-
- // check that we don't already have the same filter at the same priority
- if ( isset($wp_filter[$tag]["$priority"]) ) {
- foreach($wp_filter[$tag]["$priority"] as $filter) {
- // uncomment if we want to match function AND accepted_args
- // if ( $filter == array($function, $accepted_args) ) {
- if ( $filter['function'] == $function_to_add ) {
- return true;
- }
- }
- }
-
- // So the format is wp_filter['tag']['array of priorities']['array of ['array (functions, accepted_args)]']
- $wp_filter[$tag]["$priority"][] = array('function'=>$function_to_add, 'accepted_args'=>$accepted_args);
- return true;
-}
-
-function remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1) {
- global $wp_filter;
-
- // rebuild the list of filters
- if ( isset($wp_filter[$tag]["$priority"]) ) {
- $new_function_list = array();
- foreach($wp_filter[$tag]["$priority"] as $filter) {
- if ( $filter['function'] != $function_to_remove ) {
- $new_function_list[] = $filter;
- }
- }
- $wp_filter[$tag]["$priority"] = $new_function_list;
- }
- return true;
-}
-
-// The *_action functions are just aliases for the *_filter functions, they take special strings instead of generic content
-
-function do_action($tag, $arg = '') {
- global $wp_filter;
- $extra_args = array_slice(func_get_args(), 2);
- if ( is_array($arg) )
- $args = array_merge($arg, $extra_args);
- else
- $args = array_merge(array($arg), $extra_args);
-
- merge_filters($tag);
-
- if ( !isset($wp_filter[$tag]) ) {
- return;
- }
- foreach ($wp_filter[$tag] as $priority => $functions) {
- if ( !is_null($functions) ) {
- foreach($functions as $function) {
-
- $function_name = $function['function'];
- $accepted_args = $function['accepted_args'];
-
- if ( $accepted_args == 1 ) {
- if ( is_array($arg) )
- $the_args = $arg;
- else
- $the_args = array($arg);
- } elseif ( $accepted_args > 1 ) {
- $the_args = array_slice($args, 0, $accepted_args);
- } elseif ( $accepted_args == 0 ) {
- $the_args = NULL;
- } else {
- $the_args = $args;
- }
-
- $string = call_user_func_array($function_name, $the_args);
- }
- }
- }
-}
-
-function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
- add_filter($tag, $function_to_add, $priority, $accepted_args);
-}
-
-function remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1) {
- remove_filter($tag, $function_to_remove, $priority, $accepted_args);
-}
-
-function get_page_uri($page_id) {
- $page = get_page($page_id);
- $uri = urldecode($page->post_name);
-
- // A page cannot be it's own parent.
- if ( $page->post_parent == $page->ID )
- return $uri;
-
- while ($page->post_parent != 0) {
- $page = get_page($page->post_parent);
- $uri = urldecode($page->post_name) . "/" . $uri;
- }
-
- return $uri;
-}
-
-function get_posts($args) {
- global $wpdb;
- parse_str($args, $r);
- if ( !isset($r['numberposts']) )
- $r['numberposts'] = 5;
- if ( !isset($r['offset']) )
- $r['offset'] = 0;
- if ( !isset($r['category']) )
- $r['category'] = '';
- if ( !isset($r['orderby']) )
- $r['orderby'] = 'post_date';
- if ( !isset($r['order']) )
- $r['order'] = 'DESC';
-
- $now = current_time('mysql');
-
- $posts = $wpdb->get_results(
- "SELECT DISTINCT * FROM $wpdb->posts " .
- ( empty( $r['category'] ) ? "" : ", $wpdb->post2cat " ) .
- " WHERE post_date <= '$now' AND (post_status = 'publish') ".
- ( empty( $r['category'] ) ? "" : "AND $wpdb->posts.ID = $wpdb->post2cat.post_id AND $wpdb->post2cat.category_id = " . $r['category']. " " ) .
- " GROUP BY $wpdb->posts.ID ORDER BY " . $r['orderby'] . " " . $r['order'] . " LIMIT " . $r['offset'] . ',' . $r['numberposts'] );
-
- update_post_caches($posts);
-
- return $posts;
-}
-
-function &query_posts($query) {
- global $wp_query;
- return $wp_query->query($query);
-}
-
-function update_post_cache(&$posts) {
- global $post_cache;
-
- if ( !$posts )
- return;
-
- for ($i = 0; $i < count($posts); $i++) {
- $post_cache[$posts[$i]->ID] = &$posts[$i];
- }
-}
-
-function clean_post_cache($id) {
- global $post_cache;
-
- if ( isset( $post_cache[$id] ) )
- unset( $post_cache[$id] );
-}
-
-function update_page_cache(&$pages) {
- global $page_cache;
-
- if ( !$pages )
- return;
-
- for ($i = 0; $i < count($pages); $i++) {
- $page_cache[$pages[$i]->ID] = &$pages[$i];
- wp_cache_add($pages[$i]->ID, $pages[$i], 'pages');
- }
-}
-
-
-function clean_page_cache($id) {
- global $page_cache;
-
- if ( isset( $page_cache[$id] ) )
- unset( $page_cache[$id] );
-}
-
-function update_post_category_cache($post_ids) {
- global $wpdb, $category_cache;
-
- if ( empty($post_ids) )
- return;
-
- if ( is_array($post_ids) )
- $post_ids = implode(',', $post_ids);
-
- $dogs = $wpdb->get_results("SELECT post_id, category_id FROM $wpdb->post2cat WHERE post_id IN ($post_ids)");
-
- if ( empty($dogs) )
- return;
-
- foreach ($dogs as $catt)
- $category_cache[$catt->post_id][$catt->category_id] = &get_category($catt->category_id);
-}
-
-function update_post_caches(&$posts) {
- global $post_cache, $category_cache, $comment_count_cache, $post_meta_cache;
- global $wpdb;
-
- // No point in doing all this work if we didn't match any posts.
- if ( !$posts )
- return;
-
- // Get the categories for all the posts
- for ($i = 0; $i < count($posts); $i++) {
- $post_id_array[] = $posts[$i]->ID;
- $post_cache[$posts[$i]->ID] = &$posts[$i];
- $comment_count_cache[$posts[$i]->ID] = $posts[$i]->comment_count;
- }
-
- $post_id_list = implode(',', $post_id_array);
-
- update_post_category_cache($post_id_list);
-
- // Get post-meta info
- if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta WHERE post_id IN($post_id_list) ORDER BY post_id, meta_key", ARRAY_A) ) {
- // Change from flat structure to hierarchical:
- $post_meta_cache = array();
- foreach ($meta_list as $metarow) {
- $mpid = $metarow['post_id'];
- $mkey = $metarow['meta_key'];
- $mval = $metarow['meta_value'];
-
- // Force subkeys to be array type:
- if ( !isset($post_meta_cache[$mpid]) || !is_array($post_meta_cache[$mpid]) )
- $post_meta_cache[$mpid] = array();
- if ( !isset($post_meta_cache[$mpid]["$mkey"]) || !is_array($post_meta_cache[$mpid]["$mkey"]) )
- $post_meta_cache[$mpid]["$mkey"] = array();
-
- // Add a value to the current pid/key:
- $post_meta_cache[$mpid][$mkey][] = $mval;
- }
- }
-}
-
-function update_category_cache() {
- return true;
-}
-
-function wp_head() {
- do_action('wp_head');
-}
-
-function wp_footer() {
- do_action('wp_footer');
-}
-
-function is_single ($post = '') {
- global $wp_query;
-
- if ( !$wp_query->is_single )
- return false;
-
- if ( empty( $post) )
- return true;
-
- $post_obj = $wp_query->get_queried_object();
-
- if ( $post == $post_obj->ID )
- return true;
- elseif ( $post == $post_obj->post_title )
- return true;
- elseif ( $post == $post_obj->post_name )
- return true;
-
- return false;
-}
-
-function is_page ($page = '') {
- global $wp_query;
-
- if ( !$wp_query->is_page )
- return false;
-
- if ( empty($page) )
- return true;
-
- $page_obj = $wp_query->get_queried_object();
-
- if ( $page == $page_obj->ID )
- return true;
- elseif ( $page == $page_obj->post_title )
- return true;
- else if ( $page == $page_obj->post_name )
- return true;
-
- return false;
-}
-
-function is_attachment () {
- global $wp_query;
-
- return $wp_query->is_attachment;
-}
-
-function is_preview() {
- global $wp_query;
-
- return $wp_query->is_preview;
-}
-
-function is_archive () {
- global $wp_query;
-
- return $wp_query->is_archive;
-}
-
-function is_date () {
- global $wp_query;
-
- return $wp_query->is_date;
-}
-
-function is_year () {
- global $wp_query;
-
- return $wp_query->is_year;
-}
-
-function is_month () {
- global $wp_query;
-
- return $wp_query->is_month;
-}
-
-function is_day () {
- global $wp_query;
-
- return $wp_query->is_day;
-}
-
-function is_time () {
- global $wp_query;
-
- return $wp_query->is_time;
-}
-
-function is_author ($author = '') {
- global $wp_query;
-
- if ( !$wp_query->is_author )
- return false;
-
- if ( empty($author) )
- return true;
-
- $author_obj = $wp_query->get_queried_object();
-
- if ( $author == $author_obj->ID )
- return true;
- elseif ( $author == $author_obj->nickname )
- return true;
- elseif ( $author == $author_obj->user_nicename )
- return true;
-
- return false;
-}
-
-function is_category ($category = '') {
- global $wp_query;
-
- if ( !$wp_query->is_category )
- return false;
-
- if ( empty($category) )
- return true;
-
- $cat_obj = $wp_query->get_queried_object();
-
- if ( $category == $cat_obj->cat_ID )
- return true;
- else if ( $category == $cat_obj->cat_name )
- return true;
- elseif ( $category == $cat_obj->category_nicename )
- return true;
-
- return false;
-}
-
-function is_search () {
- global $wp_query;
-
- return $wp_query->is_search;
-}
-
-function is_feed () {
- global $wp_query;
-
- return $wp_query->is_feed;
-}
-
-function is_trackback () {
- global $wp_query;
-
- return $wp_query->is_trackback;
-}
-
-function is_admin () {
- global $wp_query;
-
- return ( $wp_query->is_admin || strstr($_SERVER['REQUEST_URI'], 'wp-admin/') );
-}
-
-function is_home () {
- global $wp_query;
-
- return $wp_query->is_home;
-}
-
-function is_404 () {
- global $wp_query;
-
- return $wp_query->is_404;
-}
-
-function is_comments_popup () {
- global $wp_query;
-
- return $wp_query->is_comments_popup;
-}
-
-function is_paged () {
- global $wp_query;
-
- return $wp_query->is_paged;
-}
-
-function in_the_loop() {
- global $wp_query;
-
- return $wp_query->in_the_loop;
-}
-
-function get_query_var($var) {
- global $wp_query;
-
- return $wp_query->get($var);
-}
-
-function have_posts() {
- global $wp_query;
-
- return $wp_query->have_posts();
-}
-
-function rewind_posts() {
- global $wp_query;
-
- return $wp_query->rewind_posts();
-}
-
-function the_post() {
- global $wp_query;
-
- $wp_query->the_post();
-}
-
-function get_theme_root() {
- return apply_filters('theme_root', ABSPATH . "wp-content/themes");
-}
-
-function get_theme_root_uri() {
- return apply_filters('theme_root_uri', get_settings('siteurl') . "/wp-content/themes", get_settings('siteurl'));
-}
-
-function get_stylesheet() {
- return apply_filters('stylesheet', get_settings('stylesheet'));
-}
-
-function get_stylesheet_directory() {
- $stylesheet = get_stylesheet();
- $stylesheet_dir = get_theme_root() . "/$stylesheet";
- return apply_filters('stylesheet_directory', $stylesheet_dir, $stylesheet);
-}
-
-function get_stylesheet_directory_uri() {
- $stylesheet = rawurlencode( get_stylesheet() );
- $stylesheet_dir_uri = get_theme_root_uri() . "/$stylesheet";
- return apply_filters('stylesheet_directory_uri', $stylesheet_dir_uri, $stylesheet);
-}
-
-function get_stylesheet_uri() {
- $stylesheet_dir_uri = get_stylesheet_directory_uri();
- $stylesheet_uri = $stylesheet_dir_uri . "/style.css";
- return apply_filters('stylesheet_uri', $stylesheet_uri, $stylesheet_dir_uri);
-}
-
-function get_template() {
- $template = get_settings('template');
- if (!file_exists(get_theme_root() . "/$template")) { //works for dirs too
- update_option('template', 'default');
- update_option('stylesheet', 'default');
- }
- return apply_filters('template', get_settings('template'));
-}
-
-function get_template_directory() {
- $template = get_template();
- $template_dir = get_theme_root() . "/$template";
- return apply_filters('template_directory', $template_dir, $template);
-}
-
-function get_template_directory_uri() {
- $template = get_template();
- $template_dir_uri = get_theme_root_uri() . "/$template";
- return apply_filters('template_directory_uri', $template_dir_uri, $template);
-}
-
-function get_theme_data($theme_file) {
- $theme_data = implode('', file($theme_file));
- preg_match("|Theme Name:(.*)|i", $theme_data, $theme_name);
- preg_match("|Theme URI:(.*)|i", $theme_data, $theme_uri);
- preg_match("|Description:(.*)|i", $theme_data, $description);
- preg_match("|Author:(.*)|i", $theme_data, $author_name);
- preg_match("|Author URI:(.*)|i", $theme_data, $author_uri);
- preg_match("|Template:(.*)|i", $theme_data, $template);
- if ( preg_match("|Version:(.*)|i", $theme_data, $version) )
- $version = trim($version[1]);
- else
- $version ='';
- if ( preg_match("|Status:(.*)|i", $theme_data, $status) )
- $status = trim($status[1]);
- else
- $status = 'publish';
-
- $description = wptexturize(trim($description[1]));
-
- $name = $theme_name[1];
- $name = trim($name);
- $theme = $name;
-
- if ( '' == $author_uri[1] ) {
- $author = trim($author_name[1]);
- } else {
- $author = '<a href="' . trim($author_uri[1]) . '" title="' . __('Visit author homepage') . '">' . trim($author_name[1]) . '</a>';
- }
-
- return array('Name' => $name, 'Title' => $theme, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template[1], 'Status' => $status);
-}
-
-function get_themes() {
- global $wp_themes;
- global $wp_broken_themes;
-
- if ( isset($wp_themes) )
- return $wp_themes;
-
- $themes = array();
- $wp_broken_themes = array();
- $theme_root = get_theme_root();
- $theme_loc = str_replace(ABSPATH, '', $theme_root);
-
- // Files in wp-content/themes directory
- $themes_dir = @ dir($theme_root);
- if ( $themes_dir ) {
- while(($theme_dir = $themes_dir->read()) !== false) {
- if ( is_dir($theme_root . '/' . $theme_dir) && is_readable($theme_root . '/' . $theme_dir) ) {
- if ( $theme_dir{0} == '.' || $theme_dir == '..' || $theme_dir == 'CVS' ) {
- continue;
- }
- $stylish_dir = @ dir($theme_root . '/' . $theme_dir);
- $found_stylesheet = false;
- while (($theme_file = $stylish_dir->read()) !== false) {
- if ( $theme_file == 'style.css' ) {
- $theme_files[] = $theme_dir . '/' . $theme_file;
- $found_stylesheet = true;
- break;
- }
- }
- if ( !$found_stylesheet ) {
- $wp_broken_themes[$theme_dir] = array('Name' => $theme_dir, 'Title' => $theme_dir, 'Description' => __('Stylesheet is missing.'));
- }
- }
- }
- }
-
- if ( !$themes_dir || !$theme_files ) {
- return $themes;
- }
-
- sort($theme_files);
-
- foreach($theme_files as $theme_file) {
- if ( ! is_readable("$theme_root/$theme_file") ) {
- $wp_broken_themes[$theme_file] = array('Name' => $theme_file, 'Title' => $theme_file, 'Description' => __('File not readable.'));
- continue;
- }
-
- $theme_data = get_theme_data("$theme_root/$theme_file");
-
- $name = $theme_data['Name'];
- $title = $theme_data['Title'];
- $description = wptexturize($theme_data['Description']);
- $version = $theme_data['Version'];
- $author = $theme_data['Author'];
- $template = $theme_data['Template'];
- $stylesheet = dirname($theme_file);
-
- foreach (array('png', 'gif', 'jpg', 'jpeg') as $ext) {
- if (file_exists("$theme_root/$stylesheet/screenshot.$ext")) {
- $screenshot = "screenshot.$ext";
- break;
- }
- }
-
- if ( empty($name) ) {
- $name = dirname($theme_file);
- $title = $name;
- }
-
- if ( empty($template) ) {
- if ( file_exists(dirname("$theme_root/$theme_file/index.php")) ) {
- $template = dirname($theme_file);
- } else {
- continue;
- }
- }
-
- $template = trim($template);
-
- if ( !file_exists("$theme_root/$template/index.php") ) {
- $wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => __('Template is missing.'));
- continue;
- }
-
- $stylesheet_files = array();
- $stylesheet_dir = @ dir("$theme_root/$stylesheet");
- if ( $stylesheet_dir ) {
- while(($file = $stylesheet_dir->read()) !== false) {
- if ( !preg_match('|^\.+$|', $file) && preg_match('|\.css$|', $file) )
- $stylesheet_files[] = "$theme_loc/$stylesheet/$file";
- }
- }
-
- $template_files = array();
- $template_dir = @ dir("$theme_root/$template");
- if ( $template_dir ) {
- while(($file = $template_dir->read()) !== false) {
- if ( !preg_match('|^\.+$|', $file) && preg_match('|\.php$|', $file) )
- $template_files[] = "$theme_loc/$template/$file";
- }
- }
-
- $template_dir = dirname($template_files[0]);
- $stylesheet_dir = dirname($stylesheet_files[0]);
-
- if ( empty($template_dir) )
- $template_dir = '/';
- if ( empty($stylesheet_dir) )
- $stylesheet_dir = '/';
-
- // Check for theme name collision. This occurs if a theme is copied to
- // a new theme directory and the theme header is not updated. Whichever
- // theme is first keeps the name. Subsequent themes get a suffix applied.
- // The Default and Classic themes always trump their pretenders.
- if ( isset($themes[$name]) ) {
- if ( ('WordPress Default' == $name || 'WordPress Classic' == $name) &&
- ('default' == $stylesheet || 'classic' == $stylesheet) ) {
- // If another theme has claimed to be one of our default themes, move
- // them aside.
- $suffix = $themes[$name]['Stylesheet'];
- $new_name = "$name/$suffix";
- $themes[$new_name] = $themes[$name];
- $themes[$new_name]['Name'] = $new_name;
- } else {
- $name = "$name/$stylesheet";
- }
- }
-
- $themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template, 'Stylesheet' => $stylesheet, 'Template Files' => $template_files, 'Stylesheet Files' => $stylesheet_files, 'Template Dir' => $template_dir, 'Stylesheet Dir' => $stylesheet_dir, 'Status' => $theme_data['Status'], 'Screenshot' => $screenshot);
- }
-
- // Resolve theme dependencies.
- $theme_names = array_keys($themes);
-
- foreach ($theme_names as $theme_name) {
- $themes[$theme_name]['Parent Theme'] = '';
- if ( $themes[$theme_name]['Stylesheet'] != $themes[$theme_name]['Template'] ) {
- foreach ($theme_names as $parent_theme_name) {
- if ( ($themes[$parent_theme_name]['Stylesheet'] == $themes[$parent_theme_name]['Template']) && ($themes[$parent_theme_name]['Template'] == $themes[$theme_name]['Template']) ) {
- $themes[$theme_name]['Parent Theme'] = $themes[$parent_theme_name]['Name'];
- break;
- }
- }
- }
- }
-
- $wp_themes = $themes;
-
- return $themes;
-}
-
-function get_theme($theme) {
- $themes = get_themes();
-
- if ( array_key_exists($theme, $themes) )
- return $themes[$theme];
-
- return NULL;
-}
-
-function get_current_theme() {
- $themes = get_themes();
- $theme_names = array_keys($themes);
- $current_template = get_settings('template');
- $current_stylesheet = get_settings('stylesheet');
- $current_theme = 'WordPress Default';
-
- if ( $themes ) {
- foreach ($theme_names as $theme_name) {
- if ( $themes[$theme_name]['Stylesheet'] == $current_stylesheet &&
- $themes[$theme_name]['Template'] == $current_template ) {
- $current_theme = $themes[$theme_name]['Name'];
- break;
- }
- }
- }
-
- return $current_theme;
-}
-
-function get_query_template($type) {
- $template = '';
- if ( file_exists(TEMPLATEPATH . "/{$type}.php") )
- $template = TEMPLATEPATH . "/{$type}.php";
-
- return apply_filters("{$type}_template", $template);
-}
-
-function get_404_template() {
- return get_query_template('404');