Example #1
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     //check for levels deprecated in 2.0 in creating menus.
     $checks = array('/([^_](add_(admin|submenu|menu|dashboard|posts|media|links|pages|comments|theme|plugins|users|management|options)_page)\\s?\\([^,]*,[^,]*,\\s[\'|"]?(level_[0-9]|[0-9])[^;|\\r|\\r\\n]*)/' => __('User levels were deprecated in <strong>2.0</strong>. Please see <a href="https://codex.wordpress.org/Roles_and_Capabilities">Roles_and_Capabilities</a>', 'theme-check'), '/[^a-z0-9](current_user_can\\s?\\(\\s?[\'\\"]level_[0-9][\'\\"]\\s?\\))[^\\r|\\r\\n]*/' => __('User levels were deprecated in <strong>2.0</strong>. Please see <a href="https://codex.wordpress.org/Roles_and_Capabilities">Roles_and_Capabilities</a>', 'theme-check'));
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match($key, $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $grep = isset($matches[2]) ? tc_grep($matches[2], $php_key) : tc_grep($matches[1], $php_key);
                 $this->error[] = sprintf('<span class="tc-lead tc-warning">' . __('WARNING', 'theme-check') . '</span>: <strong>%1$s</strong>. %2$s%3$s', $filename, $check, $grep);
                 $ret = false;
             }
         }
     }
     //check for add_admin_page
     $checks = array('/([^_]add_(admin|submenu|menu|dashboard|posts|media|links|pages|comments|plugins|users|management|options)_page)/' => __('Themes should use <strong>add_theme_page()</strong> for adding admin pages.', 'theme-check'));
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match($key, $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $error = ltrim(rtrim($matches[0], '('));
                 $grep = tc_grep($error, $php_key);
                 $this->error[] = sprintf('<span class="tc-lead tc-required">' . __('REQUIRED', 'theme-check') . '</span>: <strong>%1$s</strong>. %2$s%3$s', $filename, $check, $grep);
                 $ret = false;
             }
         }
     }
     return $ret;
 }
Example #2
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     foreach ($php_files as $php_key => $phpfile) {
         if (preg_match("/\r\n/", $phpfile)) {
             if (preg_match("/[^\r]\n/", $phpfile)) {
                 $filename = tc_filename($php_key);
                 $this->error[] = sprintf('<span class="tc-lead tc-warning">' . __('WARNING', 'theme-check') . '</span>: ' . __('Both DOS and UNIX style line endings were found in the file %1$s. This causes a problem with SVN repositories and must be corrected before the theme can be accepted. Please change the file to use only one style of line endings.', 'theme-check'), '<strong>' . $filename . '</strong>');
                 $ret = false;
             }
         }
     }
     foreach ($css_files as $css_key => $cssfile) {
         if (preg_match("/\r\n/", $cssfile)) {
             if (preg_match("/[^\r]\n/", $cssfile)) {
                 $filename = tc_filename($css_key);
                 $this->error[] = sprintf('<span class="tc-lead tc-warning">' . __('WARNING', 'theme-check') . '</span>: ' . __('Both DOS and UNIX style line endings were found in the file %1$s. This causes a problem with SVN repositories and must be corrected before the theme can be accepted. Please change the file to use only one style of line endings.', 'theme-check'), '<strong>' . $filename . '</strong>');
                 $ret = false;
             }
         }
     }
     foreach ($other_files as $oth_key => $othfile) {
         $e = pathinfo($oth_key);
         if (isset($e['extension']) && in_array($e['extension'], array('txt', 'js'))) {
             if (preg_match("/\r\n/", $othfile)) {
                 if (preg_match("/[^\r]\n/", $othfile)) {
                     $filename = tc_filename($oth_key);
                     $this->error[] = sprintf('<span class="tc-lead tc-warning">' . __('WARNING', 'theme-check') . '</span>: ' . __('Both DOS and UNIX style line endings were found in the file %1$s. This causes a problem with SVN repositories and must be corrected before the theme can be accepted. Please change the file to use only one style of line endings.', 'theme-check'), '<strong>' . $filename . '</strong>');
                     $ret = false;
                 }
             }
         }
     }
     return $ret;
 }
Example #3
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     global $data;
     foreach ($php_files as $php_key => $phpfile) {
         checkcount();
         $grep = '';
         // regex borrowed from TAC
         $url_re = '([[:alnum:]\\-\\.])+(\\.)([[:alnum:]]){2,4}([[:blank:][:alnum:]\\/\\+\\=\\%\\&\\_\\\\.\\~\\?\\-]*)';
         $title_re = '[[:blank:][:alnum:][:punct:]]*';
         // 0 or more: any num, letter(upper/lower) or any punc symbol
         $space_re = '(\\s*)';
         if (preg_match_all("/(<a)(\\s+)(href" . $space_re . "=" . $space_re . "\"" . $space_re . "((http|https|ftp):\\/\\/)?)" . $url_re . "(\"" . $space_re . $title_re . $space_re . ">)" . $title_re . "(<\\/a>)/is", $phpfile, $out, PREG_SET_ORDER)) {
             $filename = tc_filename($php_key);
             foreach ($out as $key) {
                 if (preg_match('/\\<a\\s?href\\s?=\\s?["|\'](.*?)[\'|"](.*?)\\>(.*?)\\<\\/a\\>/is', $key[0], $stripped)) {
                     if (!empty($data['AuthorURI']) && !empty($data['URI']) && $stripped[1] && !strpos($stripped[1], $data['URI']) && !strpos($stripped[1], $data['AuthorURI']) && !strpos($stripped[1], 'wordpress.')) {
                         $grep .= tc_grep($stripped[1], $php_key);
                     }
                 }
                 if ($grep) {
                     $this->error[] = sprintf('<span class="tc-lead tc-info">' . __('INFO', 'theme-check') . '</span>: ' . __('Possible hard-coded links were found in the file <strong>%1$s</strong>.%2$s', 'theme-check'), $filename, $grep);
                 }
             }
         }
     }
     return $ret;
 }
Example #4
0
 function check($php_files, $css_files, $other_files)
 {
     $grep = '';
     $ret = true;
     $checks = array(array('rich_edit_exists' => '', '3.9'), array('default_topic_count_text' => '', '3.9'), array('format_to_post' => '', '3.9'), array('get_current_site_name' => 'get_current_site()', '3.9'), array('wpmu_current_site' => '', '3.9'), array('get_all_category_ids' => 'get_terms()', '4.0'), array('like_escape' => 'wpdb::esc_like()', '4.0'), array('url_is_accessable_via_ssl' => '', '4.0'));
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $alt => $check) {
             checkcount();
             $version = $check;
             $key = key($check);
             $alt = $check[$key];
             if (preg_match('/[\\s?]' . $key . '\\(/', $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $error = ltrim(rtrim($matches[0], '('));
                 $version = $check[0];
                 $grep = tc_grep($error, $php_key);
                 // Point out the deprecated function.
                 $error_msg = sprintf(__('%1$s found in the file %2$s. Deprecated since version %3$s.', 'theme-check'), '<strong>' . $error . '()</strong>', '<strong>' . $filename . '</strong>', '<strong>' . $version . '</strong>');
                 // Add alternative function when available.
                 if ($alt) {
                     $error_msg .= ' ' . sprintf(__('Use %s instead.', 'theme-check'), '<strong>' . $alt . '</strong>');
                 }
                 // Add the precise code match that was found.
                 $error_msg .= $grep;
                 // Add the finalized error message.
                 $this->error[] = '<span class="tc-lead tc-recommended">' . __('RECOMMENDED', 'theme-check') . '</span>: ' . $error_msg;
             }
         }
     }
     return $ret;
 }
Example #5
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     checkcount();
     $checks = array('[ \\t\\/*#]@version' => '@version');
     foreach ($php_files as $php_key => $phpfile) {
         // leave out functions.php as this is a special case
         if (tc_filename($php_key) == 'functions.php') {
             continue;
         }
         foreach ($checks as $key => $check) {
             // We don't need to write to the file, so just open for reading.
             // This is needed, because comments are stripped out in the main plugin
             $fp = fopen($php_key, 'r');
             // Pull only the first 8kiB of the file in.
             $file_data = fread($fp, 8192);
             // PHP will close file handle, but we are good citizens. :)
             fclose($fp);
             // Make sure we catch CR-only line endings.
             $file_data = str_replace("\r", "\n", $file_data);
             if (!preg_match('/' . $key . '/i', $file_data, $matches)) {
                 //$filename = tc_filename( $php_key );
                 $filename = self::tc_templatepath($php_key);
                 // Point out the missing line.
                 $error_msg = sprintf(__('%1$s is missing in the file %2$s.', 'theme-check'), '<strong>' . $check . '</strong>', '<strong>' . $filename . '</strong>');
                 // Add the finalized error message.
                 $this->error[] = '<span class="tc-lead tc-recommended">' . __('RECOMMENDED', 'theme-check') . '</span>: ' . $error_msg;
             }
         }
     }
     return $ret;
 }
Example #6
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     $checks = array('/(?<![_|a-z0-9|\\.])eval\\s?\\(/i' => __('eval() is not allowed.', 'themecheck'), '/[^a-z0-9](?<!_)(popen|proc_open|[^_]exec|shell_exec|system|passthru)\\(/' => __('PHP sytem calls should be disabled by server admins anyway!', 'themecheck'), '/\\s?ini_set\\(/' => __('Themes should not change server PHP settings', 'themecheck'), '/uudecode/ims' => __('uudecode() is not allowed', 'themecheck'), '/str_rot13/ims' => __('str_rot13() is not allowed', 'themecheck'), '/cx=[0-9]{21}:[a-z0-9]{10}/' => __('Google search code detected', 'themecheck'), '/pub-[0-9]{16}/i' => __('Googe advertising code detected', 'themecheck'));
     $grep = '';
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match($key, $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $error = ltrim(trim($matches[0], '('));
                 $grep = tc_grep($error, $php_key);
                 $this->error[] = sprintf(__('<span class="tc-lead tc-warning">WARNING</span>: Found <strong>%1$s</strong> in the file <strong>%2$s</strong>. %3$s. %4$s', 'themecheck'), $error, $filename, $check, $grep);
                 $ret = false;
             }
         }
     }
     $checks = array('/cx=[0-9]{21}:[a-z0-9]{10}/' => __('Google search code detected', 'themecheck'), '/pub-[0-9]{16}/' => __('Google advertising code detected', 'themecheck'));
     foreach ($other_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match($key, $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $error = ltrim(rtrim($matches[0], '('));
                 $grep = tc_grep($error, $php_key);
                 $this->error[] = sprintf(__('<span class="tc-lead tc-warning">WARNING</span>: Found <strong>%1$s</strong> in the file <strong>%2$s</strong>. %3$s.%4$s', 'themecheck'), $error, $filename, $check, $grep);
                 $ret = false;
             }
         }
     }
     return $ret;
 }
Example #7
0
 function check($php_files, $css_files, $other_files)
 {
     $grep = '';
     $ret = true;
     $checks = array(array('get_postdata' => 'get_post()', '1.5.1'), array('start_wp' => 'the Loop', '1.5'), array('the_category_id' => 'get_the_category()', '0.71'), array('the_category_head' => 'get_the_category_by_ID()', '0.71'), array('previous_post' => 'previous_post_link()', '2.0'), array('next_post' => 'next_post_link()', '2.0'), array('user_can_create_post' => 'current_user_can()', '2.0'), array('user_can_create_draft' => 'current_user_can()', '2.0'), array('user_can_edit_post' => 'current_user_can()', '2.0'), array('user_can_delete_post' => 'current_user_can()', '2.0'), array('user_can_set_post_date' => 'current_user_can()', '2.0'), array('user_can_edit_post_comments' => 'current_user_can()', '2.0'), array('user_can_delete_post_comments' => 'current_user_can()', '2.0'), array('user_can_edit_user' => 'current_user_can()', '2.0'), array('get_linksbyname' => 'get_bookmarks()', '2.1'), array('wp_get_linksbyname' => 'wp_list_bookmarks()', '2.1'), array('get_linkobjectsbyname' => 'get_bookmarks()', '2.1'), array('get_linkobjects' => 'get_bookmarks()', '2.1'), array('get_linksbyname_withrating' => 'get_bookmarks()', '2.1'), array('get_links_withrating' => 'get_bookmarks()', '2.1'), array('get_autotoggle' => '', '2.1'), array('list_cats' => 'wp_list_categories', '2.1'), array('wp_list_cats' => 'wp_list_categories', '2.1'), array('dropdown_cats' => 'wp_dropdown_categories()', '2.1'), array('list_authors' => 'wp_list_authors()', '2.1'), array('wp_get_post_cats' => 'wp_get_post_categories()', '2.1'), array('wp_set_post_cats' => 'wp_set_post_categories()', '2.1'), array('get_archives' => 'wp_get_archives', '2.1'), array('get_author_link' => 'get_author_posts_url()', '2.1'), array('link_pages' => 'wp_link_pages()', '2.1'), array('get_settings' => 'get_option()', '2.1'), array('permalink_link' => 'the_permalink()', '1.2'), array('permalink_single_rss' => 'permalink_rss()', '2.3'), array('wp_get_links' => 'wp_list_bookmarks()', '2.1'), array('get_links' => 'get_bookmarks()', '2.1'), array('get_links_list' => 'wp_list_bookmarks()', '2.1'), array('links_popup_script' => '', '2.1'), array('get_linkrating' => 'sanitize_bookmark_field()', '2.1'), array('get_linkcatname' => 'get_category()', '2.1'), array('comments_rss_link' => 'post_comments_feed_link()', '2.5'), array('get_category_rss_link' => 'get_category_feed_link()' . '2.5'), array('get_author_rss_link' => 'get_author_feed_link()', '2.5'), array('comments_rss' => 'get_post_comments_feed_link()', '2.2'), array('create_user' => 'wp_create_user()', '2.0'), array('gzip_compression' => '', '2.5'), array('get_commentdata' => 'get_comment()', '2.7'), array('get_catname' => 'get_cat_name()', '2.8'), array('get_category_children' => 'get_term_children', '2.8'), array('get_the_author_description' => 'get_the_author_meta(\'description\')', '2.8'), array('the_author_description' => 'the_author_meta(\'description\')', '2.8'), array('get_the_author_login' => 'the_author_meta(\'login\')', '2.8'), array('get_the_author_firstname' => 'get_the_author_meta(\'first_name\')', '2.8'), array('the_author_firstname' => 'the_author_meta(\'first_name\')', '2.8'), array('get_the_author_lastname' => 'get_the_author_meta(\'last_name\')', '2.8'), array('the_author_lastname' => 'the_author_meta(\'last_name\')', '2.8'), array('get_the_author_nickname' => 'get_the_author_meta(\'nickname\')', '2.8'), array('the_author_nickname' => 'the_author_meta(\'nickname\')', '2.8'), array('get_the_author_email' => 'get_the_author_meta(\'email\')', '2.8'), array('the_author_email' => 'the_author_meta(\'email\')', '2.8'), array('get_the_author_icq' => 'get_the_author_meta(\'icq\')', '2.8'), array('the_author_icq' => 'the_author_meta(\'icq\')', '2.8'), array('get_the_author_yim' => 'get_the_author_meta(\'yim\')', '2.8'), array('the_author_yim' => 'the_author_meta(\'yim\')', '2.8'), array('get_the_author_msn' => 'get_the_author_meta(\'msn\')', '2.8'), array('the_author_msn' => 'the_author_meta(\'msn\')', '2.8'), array('get_the_author_aim' => 'get_the_author_meta(\'aim\')', '2.8'), array('the_author_aim' => 'the_author_meta(\'aim\')', '2.8'), array('get_author_name' => 'get_the_author_meta(\'display_name\')', '2.8'), array('get_the_author_url' => 'get_the_author_meta(\'url\')', '2.8'), array('the_author_url' => 'the_author_meta(\'url\')', '2.8'), array('get_the_author_ID' => 'get_the_author_meta(\'ID\')', '2.8'), array('the_author_ID' => 'the_author_meta(\'ID\')', '2.8'), array('the_content_rss' => 'the_content_feed()', '2.9'), array('make_url_footnote' => '', '2.9'), array('_c' => '_x()', '2.9'), array('translate_with_context' => '_x()', '3.0'), array('nc' => 'nx()', '3.0'), array('__ngettext' => '_n_noop()', '2.8'), array('__ngettext_noop' => '_n_noop()', '2.8'), array('get_alloptions' => 'wp_load_alloptions()', '3.0'), array('get_the_attachment_link' => 'wp_get_attachment_link()', '2.5'), array('get_attachment_icon_src' => 'wp_get_attachment_image_src()', '2.5'), array('get_attachment_icon' => 'wp_get_attachment_image()', '2.5'), array('get_attachment_innerhtml' => 'wp_get_attachment_image()', '2.5'), array('get_link' => 'get_bookmark()', '2.1'), array('sanitize_url' => 'esc_url()', '2.8'), array('clean_url' => 'esc_url()', '3.0'), array('js_escape' => 'esc_js()', '2.8'), array('wp_specialchars' => 'esc_html()', '2.8'), array('attribute_escape' => 'esc_attr()', '2.8'), array('register_sidebar_widget' => 'wp_register_sidebar_widget()', '2.8'), array('unregister_sidebar_widget' => 'wp_unregister_sidebar_widget()', '2.8'), array('register_widget_control' => 'wp_register_widget_control()', '2.8'), array('unregister_widget_control' => 'wp_unregister_widget_control()', '2.8'), array('delete_usermeta' => 'delete_user_meta()', '3.0'), array('get_usermeta' => 'get_user_meta()', '3.0'), array('update_usermeta' => 'update_user_meta()', '3.0'), array('automatic_feed_links' => 'add_theme_support( \'automatic-feed-links\' )', '3.0'), array('get_profile' => 'get_the_author_meta()', '3.0'), array('get_usernumposts' => 'count_user_posts()', '3.0'), array('funky_javascript_callback' => '', '3.0'), array('funky_javascript_fix' => '', '3.0'), array('is_taxonomy' => 'taxonomy_exists()', '3.0'), array('is_term' => 'term_exists()', '3.0'), array('is_plugin_page' => '$plugin_page and/or get_plugin_page_hookname() hooks', '3.1'), array('update_category_cache' => 'No alternatives', '3.1'), array('get_users_of_blog' => 'get_users()', '3.1'), array('wp_timezone_supported' => '', '3.2'), array('the_editor' => 'wp_editor', '3.3'), array('get_user_metavalues' => '', '3.3'), array('sanitize_user_object' => '', '3.3'), array('get_boundary_post_rel_link' => '', '3.3'), array('start_post_rel_link' => 'none available ', '3.3'), array('get_index_rel_link' => '', '3.3'), array('index_rel_link' => '', '3.3'), array('get_parent_post_rel_link' => '', '3.3'), array('parent_post_rel_link' => '', '3.3'), array('wp_admin_bar_dashboard_view_site_menu' => '', '3.3'), array('is_blog_user' => 'is_member_of_blog()', '3.3'), array('debug_fopen' => 'error_log()', '3.3'), array('debug_fwrite' => 'error_log()', '3.3'), array('debug_fclose' => 'error_log()', '3.3'), array('get_themes' => 'wp_get_themes()', '3.4'), array('get_theme' => 'wp_get_theme()', '3.4'), array('get_current_theme' => 'wp_get_theme()', '3.4'), array('clean_pre' => '', '3.4'), array('add_custom_image_header' => 'add_theme_support( \'custom-header\', $args )', '3.4'), array('remove_custom_image_header' => 'remove_theme_support( \'custom-header\' )', '3.4'), array('add_custom_background' => 'add_theme_support( \'custom-background\', $args )', '3.4'), array('remove_custom_background' => 'remove_theme_support( \'custom-background\' )', '3.4'), array('get_theme_data' => 'wp_get_theme()', '3.4'), array('update_page_cache' => 'update_post_cache()', '3.4'), array('clean_page_cache' => 'clean_post_cache()', '3.4'), array('wp_explain_nonce' => 'wp_nonce_ays', '3.4.1'), array('sticky_class' => 'post_class()', '3.5'), array('_get_post_ancestors' => '', '3.5'), array('wp_load_image' => 'wp_get_image_editor()', '3.5'), array('image_resize' => 'wp_get_image_editor()', '3.5'), array('wp_get_single_post' => 'get_post()', '3.5'), array('user_pass_ok' => 'wp_authenticate()', '3.5'), array('_save_post_hook' => '', '3.5'), array('gd_edit_image_support' => 'wp_image_editor_supports', '3.5'), array('get_user_id_from_string' => 'get_user_by()', '3.6'), array('wp_convert_bytes_to_hr' => 'size_format()', '3.6'), array('_search_terms_tidy' => '', '3.7'), array('get_blogaddress_by_domain' => '', '3.7'), array('tinymce_include' => 'wp_tiny_mce()', '2.1'), array('documentation_link' => '', '2.5'), array('wp_shrink_dimensions' => 'wp_constrain_dimensions()', '3.0'), array('dropdown_categories' => 'wp_category_checklist()', '2.6'), array('dropdown_link_categories' => 'wp_link_category_checklist()', '2.6'), array('wp_dropdown_cats' => 'wp_dropdown_categories()', '3.0'), array('add_option_update_handler' => 'register_setting()', '3.0'), array('remove_option_update_handler' => 'unregister_setting()', '3.0'), array('codepress_get_lang' => '', '3.0'), array('codepress_footer_js' => '', '3.0'), array('use_codepress' => '', '3.0'), array('get_author_user_ids' => '', '3.1'), array('get_editable_authors' => '', '3.1'), array('get_editable_user_ids' => '', '3.1'), array('get_nonauthor_user_ids' => '', '3.1'), array('WP_User_Search' => 'WP_User_Query', '3.1'), array('get_others_unpublished_posts' => '', '3.1'), array('get_others_drafts' => '', '3.1'), array('get_others_pending' => '', '3.1'), array('wp_dashboard_quick_press()' => '', '3.2'), array('wp_tiny_mce' => 'wp_editor', '3.2'), array('wp_preload_dialogs' => 'wp_editor()', '3.2'), array('wp_print_editor_js' => 'wp_editor()', '3.2'), array('wp_quicktags' => 'wp_editor()', '3.2'), array('favorite_actions' => 'WP_Admin_Bar', '3.2'), array('screen_layout' => '$current_screen->render_screen_layout()', '3.3'), array('screen_options' => '$current_screen->render_per_page_options()', '3.3'), array('screen_meta' => ' $current_screen->render_screen_meta()', '3.3'), array('media_upload_image' => 'wp_media_upload_handler()', '3.3'), array('media_upload_audio' => 'wp_media_upload_handler()', '3.3'), array('media_upload_video' => 'wp_media_upload_handler()', '3.3'), array('media_upload_file' => 'wp_media_upload_handler()', '3.3'), array('type_url_form_image' => 'wp_media_insert_url_form( \'image\' )', '3.3'), array('type_url_form_audio' => 'wp_media_insert_url_form( \'audio\' )', '3.3'), array('type_url_form_video' => 'wp_media_insert_url_form( \'video\' )', '3.3'), array('type_url_form_file' => 'wp_media_insert_url_form( \'file\' )', '3.3'), array('add_contextual_help' => 'get_current_screen()->add_help_tab()', '3.3'), array('get_allowed_themes' => 'wp_get_themes( array( \'allowed\' => true ) )', '3.4'), array('get_broken_themes' => 'wp_get_themes( array( \'errors\' => true )', '3.4'), array('current_theme_info' => 'wp_get_theme()', '3.4'), array('_insert_into_post_button' => '', '3.5'), array('_media_button' => '', '3.5'), array('get_post_to_edit' => 'get_post()', '3.5'), array('get_default_page_to_edit' => 'get_default_post_to_edit()', '3.5'), array('wp_create_thumbnail' => 'image_resize()', '3.5'), array('wp_nav_menu_locations_meta_box' => '', '3.6'), array('the_attachment_links' => '', '3.7'), array('wp_update_core' => 'new Core_Upgrader()', '3.7'), array('wp_update_plugin' => 'new Plugin_Upgrader()', '3.7'), array('wp_update_theme' => 'new Theme_Upgrader()', '3.7'), array('get_screen_icon' => '', '3.8'), array('screen_icon' => '', '3.8'), array('wp_dashboard_incoming_links' => '', '3.8'), array('wp_dashboard_incoming_links_control' => '', '3.8'), array('wp_dashboard_incoming_links_output' => '', '3.8'), array('wp_dashboard_plugins' => '', '3.8'), array('wp_dashboard_primary_control' => '', '3.8'), array('wp_dashboard_recent_comments_control' => '', '3.8'), array('wp_dashboard_secondary' => '', '3.8'), array('wp_dashboard_secondary_control' => '', '3.8'), array('wp_dashboard_secondary_output' => '', '3.8'));
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $alt => $check) {
             checkcount();
             $key = key($check);
             $alt = $check[$key];
             if (preg_match('/[\\s?]' . $key . '\\(/', $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $error = ltrim(rtrim($matches[0], '('));
                 $version = $check[0];
                 $grep = tc_grep($error, $php_key);
                 // Point out the deprecated function.
                 $error_msg = sprintf(__('%1$s found in the file %2$s. Deprecated since version %3$s.', 'theme-check'), '<strong>' . $error . '()</strong>', '<strong>' . $filename . '</strong>', '<strong>' . $version . '</strong>');
                 // Add alternative function when available.
                 if ($alt) {
                     $error_msg .= ' ' . sprintf(__('Use %s instead.', 'theme-check'), '<strong>' . $alt . '</strong>');
                 }
                 // Add the precise code match that was found.
                 $error_msg .= $grep;
                 // Add the finalized error message.
                 $this->error[] = '<span class="tc-lead tc-required">' . __('REQUIRED', 'theme-check') . '</span>: ' . $error_msg;
                 $ret = false;
             }
         }
     }
     return $ret;
 }
 function check($php_files, $css_files, $other_files)
 {
     $grep = '';
     $ret = true;
     $checks = array(array('preview_theme' => '', '4.3'), array('_preview_theme_template_filter' => '', '4.3'), array('_preview_theme_stylesheet_filter' => '', '4.3'), array('preview_theme_ob_filter' => '', '4.3'), array('preview_theme_ob_filter_callback' => '', '4.3'), array('wp_richedit_pre' => '', '4.3'), array('wp_htmledit_pre' => '', '4.3'), array('wp_ajax_wp_fullscreen_save_post' => '', '4.3'), array('post_permalink' => 'get_permalink', '4.4'), array('wp_get_http' => 'WP_Http', '4.4'), array('force_ssl_login' => 'force_ssl_admin', '4.4'), array('create_empty_blog' => '', '4.4'), array('get_admin_users_for_domain' => '', '4.4'), array('flush_widget_cache' => '', '4.4'));
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $alt => $check) {
             checkcount();
             $version = $check;
             $key = key($check);
             $alt = $check[$key];
             if (preg_match('/[\\s?]' . $key . '\\(/', $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $error = ltrim(rtrim($matches[0], '('));
                 $version = $check[0];
                 $grep = tc_grep($error, $php_key);
                 // Point out the deprecated function.
                 $error_msg = sprintf(__('%1$s found in the file %2$s. Deprecated since version %3$s.', 'theme-check'), '<strong>' . $error . '()</strong>', '<strong>' . $filename . '</strong>', '<strong>' . $version . '</strong>');
                 // Add alternative function when available.
                 if ($alt) {
                     $error_msg .= ' ' . sprintf(__('Use %s instead.', 'theme-check'), '<strong>' . $alt . '</strong>');
                 }
                 // Add the precise code match that was found.
                 $error_msg .= $grep;
                 // Add the finalized error message.
                 $this->error[] = '<span class="tc-lead tc-recommended">' . __('RECOMMENDED', 'theme-check') . '</span>: ' . $error_msg;
             }
         }
     }
     return $ret;
 }
Example #9
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     foreach ($other_files as $other_key => $otherfile) {
         $pathinfos = pathinfo($other_key);
         if (isset($pathinfos['extension']) && $pathinfos['extension'] == "xml" && isset($pathinfos['filename']) && $pathinfos['filename'] == 'templateDetails') {
             $xml = simplexml_load_file($other_key);
             if ($xml !== FALSE) {
                 if (!is_null($xml)) {
                     if ($xml->getName() == 'extension') {
                         if (!preg_match('/<' . $this->code . '>/i', $otherfile, $matches)) {
                             $filename = tc_filename($other_key);
                             $this->messages[] = __all('Missing tag "%1$s" in %2$s.', $this->code, $filename);
                             $this->errorLevel = $this->threatLevel;
                         }
                     }
                 }
             } else {
                 $filename = tc_filename($other_key);
                 $this->messages[] = __all('Cannot read xml content <strong>%1$s</strong>.', $filename);
                 $this->errorLevel = ERRORLEVEL_CRITICAL;
             }
         }
     }
 }
Example #10
0
 function check($php_files, $css_files, $other_files)
 {
     global $data, $themename;
     $ret = true;
     $error = '';
     checkcount();
     if ($data['Name'] === 'Twenty Ten' || $data['Name'] === 'Twenty Eleven') {
         return $ret;
     }
     $checks = array('/[\\s|\\(|;]_[e|_]\\s?\\(\\s?[\'|"][^\'|"]*[\'|"]\\s?\\)/' => __('You have not included a text domain!', 'theme-check'));
     foreach ($php_files as $php_key => $phpfile) {
         $error = '';
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match_all($key, $phpfile, $matches) || preg_match_all('/[\\s|\\(]_x\\s?\\(\\s?[\'|"][^\'|"]*[\'|"]\\s?,\\s?[\'|"][^\'|"]*[\'|"]\\s?\\)/', $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 foreach ($matches[0] as $match) {
                     $grep = tc_grep(ltrim($match), $php_key);
                     preg_match('/[^\\s]*\\s[0-9]+/', $grep, $line);
                     $error .= !strpos($error, $line[0]) ? $grep : '';
                 }
                 $this->error[] = sprintf("<span class='tc-lead tc-recommended'>" . __('RECOMMENDED', 'theme-check') . '</span>: ' . __('Text domain problems in <strong>%1$s</strong>. %2$s %3$s ', 'theme-check'), $filename, $check, $error);
             }
         }
     }
     $checks = array('/[\\s|\\(]_[e|_]\\s?\\([^,|;]*\\s?,\\s?[\'|"]([^\'|"]*)[\'|"]\\s?\\)/' => sprintf(__('Text domain should match theme slug: <strong>%1$s</strong>', 'theme-check'), $themename), '/[\\s|\\(]_x\\s?\\([^,]*\\s?,\\s[^\'|"]*[\'|"][^\'|"]*[\'|"],\\s?[\'|"]([^\'|"]*)[\'|"]\\s?\\)/' => sprintf(__('Text domain should match theme slug: <strong>%1$s</strong>', 'theme-check'), $themename));
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match_all($key, $phpfile, $matches)) {
                 foreach ($matches[0] as $count => $domaincheck) {
                     if (preg_match('/[\\s|\\(]_[e|_]\\s?\\(\\s?[\'|"][^\'|"]*[\'|"]\\s?\\)/', $domaincheck)) {
                         unset($matches[1][$count]);
                     }
                     //filter out false positives
                 }
                 $filename = tc_filename($php_key);
                 $count = 0;
                 while (isset($matches[1][$count])) {
                     if ($matches[1][$count] !== $themename) {
                         $error = tc_grep($matches[0][$count], $php_key);
                         if ($matches[1][$count] === 'twentyten' || $matches[1][$count] === 'twentyeleven') {
                             $this->error[] = sprintf('<span class=\'tc-lead tc-recommended\'>' . __('RECOMMENDED', 'theme-check') . '</span>: ' . __('Text domain problems in <strong>%1$s</strong>. The %2$s text domain is being used!%3$s', 'theme-check'), $filename, $matches[1][$count], $error);
                         } else {
                             if (defined('TC_TEST') && strpos(strtolower($themename), $matches[1][$count]) === false) {
                                 $error = tc_grep($matches[0][$count], $php_key);
                                 $this->error[] = sprintf('<span class=\'tc-lead tc-recommended\'>' . __('RECOMMENDED', 'theme-check') . '</span>: ' . __('Text domain problems in <strong>%1$s</strong>. %2$s You are using: <strong>%3$s</strong>%4$s', 'theme-check'), $filename, $check, $matches[1][$count], $error);
                             }
                         }
                     }
                     $count++;
                 }
                 //end while
             }
         }
     }
     return $ret;
 }
Example #11
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     $error = '';
     checkcount();
     // make sure the tokenizer is available
     if (!function_exists('token_get_all')) {
         return true;
     }
     foreach ($php_files as $php_key => $phpfile) {
         $error = '';
         $stmts = array();
         foreach (array('_e(', '__(', '_e (', '__ (') as $finder) {
             $search = $phpfile;
             while (($pos = strpos($search, $finder)) !== false) {
                 $search = substr($search, $pos);
                 $open = 1;
                 $i = strpos($search, '(') + 1;
                 while ($open > 0) {
                     switch ($search[$i]) {
                         case '(':
                             $open++;
                             break;
                         case ')':
                             $open--;
                             break;
                     }
                     $i++;
                 }
                 $stmts[] = substr($search, 0, $i);
                 $search = substr($search, $i);
             }
         }
         foreach ($stmts as $match) {
             $tokens = @token_get_all('<?php ' . $match . ';');
             if (!empty($tokens)) {
                 foreach ($tokens as $token) {
                     if (is_array($token) && in_array($token[0], array(T_VARIABLE))) {
                         $filename = tc_filename($php_key);
                         $grep = tc_grep(ltrim($match), $php_key);
                         preg_match('/[^\\s]*\\s[0-9]+/', $grep, $line);
                         $error = '';
                         if (isset($line[0])) {
                             $error = !strpos($error, $line[0]) ? $grep : '';
                         }
                         $this->error[] = sprintf('<span class="tc-lead tc-recommended">' . __('RECOMMENDED', 'theme-check') . '</span>: ' . __('Possible variable %1$s found in translation function in %2$s. Translation function calls must NOT contain PHP variables. %3$s', 'theme-check'), '<strong>' . $token[1] . '</strong>', '<strong>' . $filename . '</strong>', $error);
                         break;
                         // stop looking at the tokens on this line once a variable is found
                     }
                 }
             }
         }
     }
     return $ret;
 }
Example #12
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     checkcount();
     foreach ($php_files as $file_path => $file_content) {
         $filename = tc_filename($file_path);
         if (preg_match('/(<link rel=[\'"]icon[\'"])|(<link rel=[\'"]apple-touch-icon-precomposed[\'"])|(<meta name=[\'"]msapplication-TileImage[\'"])/', $file_content, $matches)) {
             $this->error[] = sprintf('<span class="tc-lead tc-info">' . __('INFO', 'theme-check') . '</span>: ' . __('Possible Favicon found in %1$s. Favicons are handled by the Site Icon setting in the customizer since version 4.3.', 'theme-check'), '<strong>' . $filename . '</strong>');
         }
     }
     return $ret;
 }
Example #13
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     foreach ($php_files as $php_key => $phpfile) {
         if (preg_match($this->code, $phpfile, $out)) {
             $grep = tc_preg($this->code, $php_key);
             $filename = tc_filename($php_key);
             $this->messages[] = __all('File <strong>%1$s</strong> :%2$s Use <strong>get_search_form()</strong> instead of including searchform.php directly.', $filename, $grep);
             $this->errorLevel = $this->threatLevel;
         }
     }
 }
Example #14
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     foreach ($php_files as $name => $content) {
         if (preg_match($this->code, $content, $matches)) {
             $filename = tc_filename($name);
             $non_print = tc_preg($this->code, $name);
             $this->messages[] = __all('PHP short tags were found in file <strong>%1$s</strong>. &quot;This practice is discouraged because they are only available if enabled with short_open_tag php.ini configuration file directive, or if PHP was configured with the --enable-short-tags option&quot; (php.net), which is not the case on many servers.%2$s', $filename, $non_print);
             $this->errorLevel = $this->threatLevel;
         }
     }
 }
Example #15
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     foreach ($php_files as $php_key => $phpfile) {
         if (preg_match('/[\\s|]' . $this->code[0] . '/', $phpfile, $matches)) {
             $filename = tc_filename($php_key);
             $error = ltrim(rtrim($matches[0], '('));
             $grep = tc_grep($error, $php_key);
             $this->messages[] = __all('Constant <strong>%1$s</strong> was found in the file <strong>%2$s</strong>. Use <strong>%3$s</strong> instead. %4$s', $error, $filename, $this->code[1], $grep);
             $this->errorLevel = $this->threatLevel;
         }
     }
 }
Example #16
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     foreach ($php_files as $php_key => $phpfile) {
         if (preg_match($this->code, $phpfile, $matches)) {
             $filename = tc_filename($php_key);
             $matches[0] = str_replace(array('"', "'"), '', $matches[0]);
             $error = trim(esc_html(rtrim($matches[0], '(')));
             $this->messages[] = __all('At least one hard coded date was found in the file <strong>%s</strong>. Function get_option( &#39;date_format&#39; ) should be used instead.', $filename);
             $this->errorLevel = $this->threatLevel;
         }
     }
 }
Example #17
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     foreach ($php_files as $php_key => $phpfile) {
         if (preg_match($this->code, $phpfile, $matches)) {
             $filename = tc_filename($php_key);
             $error = ltrim(rtrim($matches[0], '('));
             $grep = tc_grep($error, $php_key);
             $this->messages[] = __all('File <strong>%1$s</strong> : %2$s', $filename, $grep);
             $this->errorLevel = $this->threatLevel;
         }
     }
 }
Example #18
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     foreach ($php_files as $php_key => $phpfile) {
         checkcount();
         if (preg_match('/<\\?(\\=?)(?!php|xml)/i', $phpfile)) {
             $filename = tc_filename($php_key);
             $grep = tc_preg('/<\\?(\\=?)(?!php|xml)/', $php_key);
             $this->error[] = sprintf('<span class="tc-lead tc-warning">' . __('WARNING', 'theme-check') . '</span>: ' . __('Found PHP short tags in file %1$s.%2$s', 'theme-check'), '<strong>' . $filename . '</strong>', $grep);
             $ret = false;
         }
     }
     return $ret;
 }
Example #19
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     foreach ($php_files as $php_key => $phpfile) {
         checkcount();
         if (preg_match('/<\\?(\\=?)(?!php|xml)/', $phpfile)) {
             $filename = tc_filename($php_key);
             $grep = tc_preg('/<\\?(\\=?)(?!php|xml)/', $php_key);
             $this->error[] = "<span class='tc-lead tc-warning'>WARNING</span>: Found PHP short tags in file <strong>{$filename}</strong>.{$grep}";
             $ret = false;
         }
     }
     return $ret;
 }
Example #20
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     foreach ($php_files as $php_key => $phpfile) {
         if (preg_match($this->code, $phpfile, $matches)) {
             $filename = tc_filename($php_key);
             $grep = tc_preg($this->code, $php_key);
             if (basename($filename) !== 'functions.php') {
                 $this->messages[] = __all('The theme appears to use include or require : <strong>%1$s</strong> %2$s If these are being used to include separate sections of a template from independent files, then <strong>get_template_part()</strong> should be used instead. Otherwise, use include_once or require_once instead.', $filename, $grep);
                 $this->errorLevel = $this->threatLevel;
             }
         }
     }
 }
Example #21
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     checkcount();
     foreach ($php_files as $file_path => $file_content) {
         $filename = tc_filename($file_path);
         if (preg_match('/wp_deregister_script/', $file_content)) {
             $error = '/wp_deregister_script/';
             $grep = tc_preg($error, $file_path);
             $this->error[] = sprintf('<span class="tc-lead tc-warning">' . __('WARNING', 'theme-check') . '</span>: ' . __('Found wp_deregister_script in %1$s. Themes must not deregister core scripts.', 'theme-check'), '<strong>' . $filename . '</strong>') . $grep;
             $ret = false;
         }
     }
     return $ret;
 }
Example #22
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     foreach ($php_files_filtered as $name => $content) {
         // 09 = tab
         // 0A = line feed
         // 0D = new line
         if (preg_match($this->code, $content, $matches)) {
             $filename = tc_filename($name);
             $non_print = utf8_encode(tc_preg($this->code, $name));
             $this->messages[] = __all('Non-printable characters were found in file <strong>%1$s</strong>. This is an indicator of potential errors in PHP code.%2$s', $filename, $non_print);
             $this->errorLevel = $this->threatLevel;
         }
     }
 }
Example #23
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     foreach ($php_files as $name => $content) {
         checkcount();
         // 09 = tab
         // 0A = line feed
         // 0D = new line
         if (preg_match('/[\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F\\x80-\\xFF]/', $content, $matches)) {
             $filename = tc_filename($name);
             $non_print = tc_preg('/[\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F\\x80-\\xFF]/', $name);
             $this->error[] = sprintf('<span class="tc-lead tc-info">' . __('INFO', 'theme-check') . '</span>: ' . __('Non-printable characters were found in the %1$s file. You may want to check this file for errors.%2$s', 'theme-check'), '<strong>' . $filename . '</strong>', $non_print);
         }
     }
     return $ret;
 }
Example #24
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     $files = array_merge($php_files, $css_files, $other_files);
     foreach ($files as $key => $file_content) {
         $e = pathinfo($key);
         //	$file_content = file_get_contents( $key );
         if (isset($e['extension']) && in_array($e['extension'], array('php', 'css', 'txt', 'js'))) {
             if (preg_match("/\r\n/", $file_content) && preg_match("/[^\r]\n/", $file_content)) {
                 $filename = tc_filename($key);
                 $this->messages[] = __all('Found a mix of &#92;r&#92;n and &#92;n line endings in file <strong>%1$s</strong>.', $filename);
                 $this->errorLevel = $this->threatLevel;
             }
         }
     }
 }
Example #25
0
 public function doCheck($php_files, $php_files_filtered, $css_files, $other_files)
 {
     $this->errorLevel = ERRORLEVEL_SUCCESS;
     $key = $this->code[0];
     $key_instead = $this->code[1];
     $key_version = $this->code[2];
     foreach ($php_files as $php_key => $phpfile) {
         if (preg_match('/[\\s|]' . $key . '/', $phpfile, $matches)) {
             $filename = tc_filename($php_key);
             $error = ltrim(rtrim($matches[0], '('));
             $grep = tc_grep($error, $php_key);
             $this->messages[] = __all('<strong>%1$s</strong> found in file <strong>%2$s</strong>. Deprecated since version <strong>%3$s</strong>. Use <strong>%4$s</strong> instead.%5$s', $error, $filename, $key_version, $key_instead, $grep);
             $this->errorLevel = ERRORLEVEL_CRITICAL;
         }
     }
 }
Example #26
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     $checks = array('/\\sdate_i18n\\(\\s?["|\'][A-Za-z\\s]+\\s?["|\']\\)/' => 'date_i18n( get_option( \'date_format\' ) )', '/[^get_]the_date\\(\\s?["|\'][A-Za-z\\s]+\\s?["|\']\\)/' => 'the_date( get_option( \'date_format\' ) )', '/[^get_]the_time\\(\\s?["|\'][A-Za-z\\s]+\\s?["|\']\\)/' => 'the_time( get_option( \'date_format\' ) )');
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match($key, $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $matches[0] = str_replace(array('"', "'"), '', $matches[0]);
                 $error = trim(esc_html(rtrim($matches[0], '(')));
                 $this->error[] = sprintf('<span class="tc-lead tc-info">' . __('INFO', 'theme-check') . '</span>: ' . __("At least one hard coded date was found in the file <strong>%s</strong>. Consider get_option( 'date_format' ) instead.", 'theme-check'), $filename);
             }
         }
     }
     return $ret;
 }
Example #27
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     foreach ($php_files as $name => $content) {
         checkcount();
         // 09 = tab
         // 0A = line feed
         // 0D = new line
         if (preg_match('/[\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F\\x80-\\xFF]/', $content, $matches)) {
             $filename = tc_filename($name);
             $non_print = tc_preg('/[\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F\\x80-\\xFF]/', $name);
             $this->error[] = "<span class='tc-lead tc-info'>INFO</span>: Non-printable characters were found in the <strong>{$filename}</strong> file. You may want to check this file for errors.{$non_print}";
         }
     }
     // return the pass/fail
     return $ret;
 }
Example #28
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     $checks = array('/(include\\s?\\(\\s?TEMPLATEPATH\\s?\\.?\\s?["|\']\\/searchform.php["|\']\\s?\\))/' => __('Please use <strong>get_search_form()</strong> instead of including searchform.php directly.', 'themecheck'));
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match($key, $phpfile, $out)) {
                 $grep = tc_preg($key, $php_key);
                 $filename = tc_filename($php_key);
                 $this->error[] = sprintf(__('<span class="tc-lead tc-required">REQUIRED</span>: <strong>%1$s</strong> %2$s%3$s', 'themecheck'), $filename, $check, $grep);
                 $ret = false;
             }
         }
     }
     return $ret;
 }
Example #29
0
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     $checks = array('STYLESHEETPATH' => 'get_stylesheet_directory()', 'TEMPLATEPATH' => 'get_template_directory()', 'PLUGINDIR' => 'WP_PLUGIN_DIR', 'MUPLUGINDIR' => 'WPMU_PLUGIN_DIR');
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match('/[\\s|]' . $key . '/', $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $error = ltrim(rtrim($matches[0], '('));
                 $grep = tc_grep($error, $php_key);
                 $this->error[] = sprintf('<span class="tc-lead tc-recommended">' . __('RECOMMENDED', 'theme-check') . '</span>: ' . __('%1$s was found in the file %2$s. Use %3$s instead.%4$s', 'theme-check'), '<strong>' . $error . '</strong>', '<strong>' . $filename . '</strong>', '<strong>' . $check . '</strong>', $grep);
             }
         }
     }
     return $ret;
 }
 function check($php_files, $css_files, $other_files)
 {
     $ret = true;
     $checks = array('/<(iframe)[^>]*>/' => __('iframes are sometimes used to load unwanted adverts and code on your site', 'theme-check'));
     foreach ($php_files as $php_key => $phpfile) {
         foreach ($checks as $key => $check) {
             checkcount();
             if (preg_match($key, $phpfile, $matches)) {
                 $filename = tc_filename($php_key);
                 $error = ltrim($matches[1], '(');
                 $error = rtrim($error, '(');
                 $grep = tc_grep($error, $php_key);
                 $this->error[] = sprintf('<span class="tc-lead tc-info">' . __('INFO', 'theme-check') . '</span>: ' . __('<strong>%1$s</strong> was found in the file <strong>%2$s</strong> %3$s.%4$s', 'theme-check'), $error, $filename, $check, $grep);
             }
         }
     }
     return $ret;
 }