Version Description
- Added a way to hide individual link actions like "Dismiss" and "Unlink".
- Added a "Fix redirect" link action. It replaces a redirect with a direct link. It is hidden by default and can be enabled through the settings page.
- Added a "Recheck" link action. Unlike the bulk action by the same name, it checks a link immediately and displays the results without having to refresh the page.
- Added a "Dismiss" bulk action.
- Added a note below the "link tweaks" settings explaining that they only apply to the contents of posts (and pages, and CPTs), not comments or custom fields.
- Made the "Redirect URL" column sortable.
- Added a "Details" link to the "Status" column.
- Added a "Warnings" section to Tools -> Broken Links. It shows problems that might be temporary or false positives. Warnings can be disabled through the settings page.
- Fixed a conflict with plugins that use PHP sessions.
- Fixed the "post statuses" option. Now disabling a post status (e.g. "Draft") should take effect immediately.
- Fixed the Mediafire link checker.
- Fixed the text in the "Status" column being slightly offset vertically when compared to other columns.
- Fixed search box position in WP 4.1-alpha.
- Added a few workarounds for situations where a custom post type is removed without first removing the posts.
- Removed the screen icon. WordPress has deprecated it.
- Other minor fixes.
Download this release
Release Info
| Developer | whiteshadow |
| Plugin | |
| Version | 1.10 |
| Comparing to | |
| See all releases | |
Code changes from version 1.9.5 to 1.10
- broken-link-checker.php +1 -1
- core/core.php +397 -67
- core/init.php +7 -1
- css/links-page.css +14 -1
- css/options-page.css +5 -0
- includes/admin/db-schema.php +2 -1
- includes/admin/links-page-js.php +214 -86
- includes/admin/table-printer.php +65 -13
- includes/any-post.php +21 -2
- includes/link-query.php +37 -15
- includes/links.php +183 -19
- includes/parsers.php +4 -0
- languages/broken-link-checker.pot +404 -321
- modules/checkers/http.php +4 -0
- modules/containers/blogroll.php +1 -1
- modules/containers/comment.php +16 -10
- modules/containers/custom_field.php +23 -0
- modules/extras/mediafire.php +26 -25
- modules/parsers/image.php +1 -1
- readme.txt +20 -2
broken-link-checker.php
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
Plugin Name: Broken Link Checker
|
| 4 |
Plugin URI: http://w-shadow.com/blog/2007/08/05/broken-link-checker-for-wordpress/
|
| 5 |
Description: Checks your blog for broken links and missing images and notifies you on the dashboard if any are found.
|
| 6 |
-
Version: 1.
|
| 7 |
Author: Janis Elsts
|
| 8 |
Author URI: http://w-shadow.com/
|
| 9 |
Text Domain: broken-link-checker
|
| 3 |
Plugin Name: Broken Link Checker
|
| 4 |
Plugin URI: http://w-shadow.com/blog/2007/08/05/broken-link-checker-for-wordpress/
|
| 5 |
Description: Checks your blog for broken links and missing images and notifies you on the dashboard if any are found.
|
| 6 |
+
Version: 1.10
|
| 7 |
Author: Janis Elsts
|
| 8 |
Author URI: http://w-shadow.com/
|
| 9 |
Text Domain: broken-link-checker
|
core/core.php
CHANGED
|
@@ -37,12 +37,10 @@ class wsBrokenLinkChecker {
|
|
| 37 |
* @param blcConfigurationManager $conf An instance of the configuration manager
|
| 38 |
* @return void
|
| 39 |
*/
|
| 40 |
-
function wsBrokenLinkChecker ( $loader,
|
| 41 |
-
global $wpdb;
|
| 42 |
-
|
| 43 |
$this->db_version = BLC_DATABASE_VERSION;
|
| 44 |
|
| 45 |
-
$this->conf =
|
| 46 |
$this->loader = $loader;
|
| 47 |
$this->my_basename = plugin_basename( $this->loader );
|
| 48 |
|
|
@@ -51,25 +49,27 @@ class wsBrokenLinkChecker {
|
|
| 51 |
//Unlike the activation hook, the deactivation callback *can* be registered in this file
|
| 52 |
//because deactivation happens after this class has already been instantiated (durinng the
|
| 53 |
//'init' action).
|
| 54 |
-
register_deactivation_hook($loader, array(
|
| 55 |
|
| 56 |
-
add_action('admin_menu', array(
|
| 57 |
|
| 58 |
//Load jQuery on Dashboard pages (probably redundant as WP already does that)
|
| 59 |
-
add_action('admin_print_scripts', array(
|
| 60 |
|
| 61 |
//The dashboard widget
|
| 62 |
-
add_action('wp_dashboard_setup', array(
|
| 63 |
|
| 64 |
//AJAXy hooks
|
| 65 |
-
add_action( 'wp_ajax_blc_full_status', array(
|
| 66 |
-
add_action( 'wp_ajax_blc_dashboard_status', array(
|
| 67 |
-
add_action( 'wp_ajax_blc_work', array(
|
| 68 |
-
add_action( 'wp_ajax_blc_discard', array(
|
| 69 |
-
add_action( 'wp_ajax_blc_edit', array(
|
| 70 |
-
add_action( 'wp_ajax_blc_link_details', array(
|
| 71 |
-
add_action( 'wp_ajax_blc_unlink', array(
|
| 72 |
-
add_action( '
|
|
|
|
|
|
|
| 73 |
|
| 74 |
add_action( 'wp_ajax_blc_dismiss', array($this, 'ajax_dismiss') );
|
| 75 |
add_action( 'wp_ajax_blc_undismiss', array($this, 'ajax_undismiss') );
|
|
@@ -78,13 +78,13 @@ class wsBrokenLinkChecker {
|
|
| 78 |
$this->setup_cron_events();
|
| 79 |
|
| 80 |
//Set hooks that listen for our Cron actions
|
| 81 |
-
add_action('blc_cron_email_notifications', array(
|
| 82 |
-
add_action('blc_cron_check_links', array(
|
| 83 |
-
add_action('blc_cron_database_maintenance', array(
|
| 84 |
-
add_action('blc_cron_check_news', array(
|
| 85 |
|
| 86 |
//Set the footer hook that will call the worker function via AJAX.
|
| 87 |
-
add_action('admin_footer', array(
|
| 88 |
|
| 89 |
//Add a "Screen Options" panel to the "Broken Links" page
|
| 90 |
add_screen_options_panel(
|
|
@@ -95,6 +95,9 @@ class wsBrokenLinkChecker {
|
|
| 95 |
array($this, 'ajax_save_screen_options'),
|
| 96 |
true
|
| 97 |
);
|
|
|
|
|
|
|
|
|
|
| 98 |
}
|
| 99 |
|
| 100 |
/**
|
|
@@ -162,7 +165,7 @@ class wsBrokenLinkChecker {
|
|
| 162 |
'action' : 'blc_dashboard_status',
|
| 163 |
'random' : Math.random()
|
| 164 |
},
|
| 165 |
-
function (data
|
| 166 |
if ( data && ( typeof(data.text) != 'undefined' ) ) {
|
| 167 |
$('#wsblc_activity_box').html(data.text);
|
| 168 |
<?php if ( $this->conf->options['autoexpand_widget'] ) { ?>
|
|
@@ -289,13 +292,13 @@ class wsBrokenLinkChecker {
|
|
| 289 |
*/
|
| 290 |
function admin_menu(){
|
| 291 |
if (current_user_can('manage_options'))
|
| 292 |
-
add_filter('plugin_action_links', array(
|
| 293 |
|
| 294 |
$options_page_hook = add_options_page(
|
| 295 |
__('Link Checker Settings', 'broken-link-checker'),
|
| 296 |
__('Link Checker', 'broken-link-checker'),
|
| 297 |
'manage_options',
|
| 298 |
-
'link-checker-settings',array(
|
| 299 |
);
|
| 300 |
|
| 301 |
$menu_title = __('Broken Links', 'broken-link-checker');
|
|
@@ -317,14 +320,14 @@ class wsBrokenLinkChecker {
|
|
| 317 |
__('View Broken Links', 'broken-link-checker'),
|
| 318 |
$menu_title,
|
| 319 |
'edit_others_posts',
|
| 320 |
-
'view-broken-links',array(
|
| 321 |
);
|
| 322 |
|
| 323 |
//Add plugin-specific scripts and CSS only to the it's own pages
|
| 324 |
-
add_action( 'admin_print_styles-' . $options_page_hook, array(
|
| 325 |
-
add_action( 'admin_print_styles-' . $links_page_hook, array(
|
| 326 |
-
add_action( 'admin_print_scripts-' . $options_page_hook, array(
|
| 327 |
-
add_action( 'admin_print_scripts-' . $links_page_hook, array(
|
| 328 |
|
| 329 |
//Add a "Feedback" button that links to the plugin's UserVoice forum
|
| 330 |
add_screen_meta_link(
|
|
@@ -371,8 +374,6 @@ class wsBrokenLinkChecker {
|
|
| 371 |
}
|
| 372 |
|
| 373 |
function options_page(){
|
| 374 |
-
global $blclog;
|
| 375 |
-
|
| 376 |
$moduleManager = blcModuleManager::getInstance();
|
| 377 |
|
| 378 |
//Prior to 1.5.2 (released 2012-05-27), there was a bug that would cause the donation flag to be
|
|
@@ -395,6 +396,15 @@ class wsBrokenLinkChecker {
|
|
| 395 |
wp_redirect( add_query_arg( array( 'recheck-initiated' => true), $base_url ) );
|
| 396 |
die();
|
| 397 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 398 |
|
| 399 |
if(isset($_POST['submit'])) {
|
| 400 |
check_admin_referer('link-checker-options');
|
|
@@ -421,9 +431,14 @@ class wsBrokenLinkChecker {
|
|
| 421 |
if ( empty($enabled_post_statuses) ){
|
| 422 |
$enabled_post_statuses = array('publish');
|
| 423 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 424 |
$this->conf->options['enabled_post_statuses'] = $enabled_post_statuses;
|
| 425 |
-
|
| 426 |
-
|
| 427 |
//The execution time limit must be above zero
|
| 428 |
$new_execution_time = intval($_POST['max_execution_time']);
|
| 429 |
if( $new_execution_time > 0 ){
|
|
@@ -466,8 +481,15 @@ class wsBrokenLinkChecker {
|
|
| 466 |
$diff1 = array_diff( $new_custom_fields, $this->conf->options['custom_fields'] );
|
| 467 |
$diff2 = array_diff( $this->conf->options['custom_fields'], $new_custom_fields );
|
| 468 |
$this->conf->options['custom_fields'] = $new_custom_fields;
|
| 469 |
-
|
| 470 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 471 |
$new_timeout = intval($_POST['timeout']);
|
| 472 |
if( $new_timeout > 0 ){
|
| 473 |
$this->conf->options['timeout'] = $new_timeout ;
|
|
@@ -523,6 +545,14 @@ class wsBrokenLinkChecker {
|
|
| 523 |
$this->conf->options['dashboard_widget_capability'] = $widget_cap;
|
| 524 |
}
|
| 525 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 526 |
//Logging. The plugin can log various events and results for debugging purposes.
|
| 527 |
$this->conf->options['logging_enabled'] = !empty($_POST['logging_enabled']);
|
| 528 |
$this->conf->options['custom_log_file_enabled'] = !empty($_POST['custom_log_file_enabled']);
|
|
@@ -574,6 +604,17 @@ class wsBrokenLinkChecker {
|
|
| 574 |
blc_got_unsynched_items();
|
| 575 |
}
|
| 576 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 577 |
|
| 578 |
//Redirect back to the settings page
|
| 579 |
$base_url = remove_query_arg( array('_wpnonce', 'noheader', 'updated', 'error', 'action', 'message') );
|
|
@@ -605,8 +646,7 @@ class wsBrokenLinkChecker {
|
|
| 605 |
|
| 606 |
$debug = $this->get_debug_info();
|
| 607 |
|
| 608 |
-
|
| 609 |
-
add_filter('blc-module-settings-custom_field', array(&$this, 'make_custom_field_input'), 10, 2);
|
| 610 |
|
| 611 |
//Translate and markup-ify module headers for display
|
| 612 |
$modules = $moduleManager->get_modules_by_category('', true, true);
|
|
@@ -638,7 +678,7 @@ class wsBrokenLinkChecker {
|
|
| 638 |
<![endif]-->
|
| 639 |
|
| 640 |
<div class="wrap" id="blc-settings-wrap">
|
| 641 |
-
|
| 642 |
|
| 643 |
|
| 644 |
<div id="blc-sidebar">
|
|
@@ -782,7 +822,7 @@ class wsBrokenLinkChecker {
|
|
| 782 |
|
|
| 783 |
<a id="toggle-broken-link-css-editor" href="#" class="blc-toggle-link"><?php
|
| 784 |
_e('Edit CSS', 'broken-link-checker');
|
| 785 |
-
?></a>
|
| 786 |
</p>
|
| 787 |
|
| 788 |
<div id="broken-link-css-wrap"<?php
|
|
@@ -790,7 +830,7 @@ class wsBrokenLinkChecker {
|
|
| 790 |
echo ' class="hidden"';
|
| 791 |
}
|
| 792 |
?>>
|
| 793 |
-
<textarea name="broken_link_css" id="broken_link_css" cols='45' rows='4'
|
| 794 |
if( isset($this->conf->options['broken_link_css']) ) {
|
| 795 |
echo $this->conf->options['broken_link_css'];
|
| 796 |
}
|
|
@@ -821,7 +861,7 @@ class wsBrokenLinkChecker {
|
|
| 821 |
echo ' class="hidden"';
|
| 822 |
}
|
| 823 |
?>>
|
| 824 |
-
<textarea name="removed_link_css" id="removed_link_css" cols='45' rows='4'
|
| 825 |
if( isset($this->conf->options['removed_link_css']) )
|
| 826 |
echo $this->conf->options['removed_link_css'];
|
| 827 |
?></textarea>
|
|
@@ -845,22 +885,43 @@ class wsBrokenLinkChecker {
|
|
| 845 |
</label>
|
| 846 |
</p>
|
| 847 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 848 |
</td>
|
| 849 |
</tr>
|
| 850 |
|
| 851 |
<tr valign="top">
|
| 852 |
<th scope="row"><?php echo _x('Suggestions', 'settings page', 'broken-link-checker'); ?></th>
|
| 853 |
<td>
|
| 854 |
-
<
|
| 855 |
-
<
|
| 856 |
-
|
| 857 |
-
|
| 858 |
-
|
| 859 |
-
</label>
|
| 860 |
-
</p>
|
| 861 |
</td>
|
| 862 |
</tr>
|
| 863 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 864 |
</table>
|
| 865 |
|
| 866 |
</div>
|
|
@@ -930,7 +991,7 @@ class wsBrokenLinkChecker {
|
|
| 930 |
<tr valign="top">
|
| 931 |
<th scope="row"><?php _e('Exclusion list', 'broken-link-checker'); ?></th>
|
| 932 |
<td><?php _e("Don't check links where the URL contains any of these words (one per line) :", 'broken-link-checker'); ?><br/>
|
| 933 |
-
<textarea name="exclusion_list" id="exclusion_list" cols='45' rows='4'
|
| 934 |
if( isset($this->conf->options['exclusion_list']) )
|
| 935 |
echo implode("\n", $this->conf->options['exclusion_list']);
|
| 936 |
?></textarea>
|
|
@@ -1033,6 +1094,24 @@ class wsBrokenLinkChecker {
|
|
| 1033 |
?>
|
| 1034 |
</td>
|
| 1035 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1036 |
|
| 1037 |
<tr valign="top">
|
| 1038 |
<th scope="row"><?php _e('Max. execution time', 'broken-link-checker'); ?></th>
|
|
@@ -1322,7 +1401,7 @@ class wsBrokenLinkChecker {
|
|
| 1322 |
'broken-link-checker'
|
| 1323 |
) .
|
| 1324 |
'</span>';
|
| 1325 |
-
$html .= '<br><textarea name="blc_custom_fields" id="blc_custom_fields" cols="45" rows="4"
|
| 1326 |
if( isset($current_settings['custom_fields']) )
|
| 1327 |
$html .= implode("\n", $current_settings['custom_fields']);
|
| 1328 |
$html .= '</textarea>';
|
|
@@ -1336,7 +1415,7 @@ class wsBrokenLinkChecker {
|
|
| 1336 |
* @return void
|
| 1337 |
*/
|
| 1338 |
function options_page_css(){
|
| 1339 |
-
wp_enqueue_style('blc-options-page', plugins_url('css/options-page.css', BLC_PLUGIN_FILE), array(), '
|
| 1340 |
wp_enqueue_style('dashboard');
|
| 1341 |
}
|
| 1342 |
|
|
@@ -1347,7 +1426,7 @@ class wsBrokenLinkChecker {
|
|
| 1347 |
* @return void
|
| 1348 |
*/
|
| 1349 |
function links_page(){
|
| 1350 |
-
global $wpdb
|
| 1351 |
|
| 1352 |
$blc_link_query = blcLinkQuery::getInstance();
|
| 1353 |
|
|
@@ -1414,6 +1493,10 @@ class wsBrokenLinkChecker {
|
|
| 1414 |
list($message, $msg_class) = $this->do_bulk_discard($selected_links);
|
| 1415 |
break;
|
| 1416 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1417 |
case 'bulk-edit':
|
| 1418 |
list($message, $msg_class) = $this->do_bulk_edit($selected_links);
|
| 1419 |
break;
|
|
@@ -1459,7 +1542,7 @@ class wsBrokenLinkChecker {
|
|
| 1459 |
var blc_suggestions_enabled = <?php echo $this->conf->options['suggestions_enabled'] ? 'true' : 'false'; ?>;
|
| 1460 |
</script>
|
| 1461 |
|
| 1462 |
-
<div class="wrap"
|
| 1463 |
<?php
|
| 1464 |
$blc_link_query->print_filter_heading($current_filter);
|
| 1465 |
$blc_link_query->print_filter_menu($filter_id);
|
|
@@ -2015,12 +2098,13 @@ class wsBrokenLinkChecker {
|
|
| 2015 |
}
|
| 2016 |
|
| 2017 |
//Skip links that weren't actually detected as broken
|
| 2018 |
-
if ( !$link->broken ){
|
| 2019 |
continue;
|
| 2020 |
}
|
| 2021 |
|
| 2022 |
//Make it appear "not broken"
|
| 2023 |
-
$link->broken = false;
|
|
|
|
| 2024 |
$link->false_positive = true;
|
| 2025 |
$link->last_check_attempt = time();
|
| 2026 |
$link->log = __("This link was manually marked as working by the user.", 'broken-link-checker');
|
|
@@ -2052,6 +2136,64 @@ class wsBrokenLinkChecker {
|
|
| 2052 |
|
| 2053 |
return array(implode('<br>', $messages), $msg_class);
|
| 2054 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2055 |
|
| 2056 |
|
| 2057 |
/**
|
|
@@ -2060,7 +2202,60 @@ class wsBrokenLinkChecker {
|
|
| 2060 |
* @return void
|
| 2061 |
*/
|
| 2062 |
function links_page_css(){
|
| 2063 |
-
wp_enqueue_style('blc-links-page', plugins_url('css/links-page.css', $this->loader), array(), '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2064 |
}
|
| 2065 |
|
| 2066 |
/**
|
|
@@ -2186,7 +2381,16 @@ class wsBrokenLinkChecker {
|
|
| 2186 |
* @return void
|
| 2187 |
*/
|
| 2188 |
function work(){
|
| 2189 |
-
global $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2190 |
|
| 2191 |
if ( !$this->acquire_lock() ){
|
| 2192 |
//FB::warn("Another instance of BLC is already working. Stop.");
|
|
@@ -2221,11 +2425,15 @@ class wsBrokenLinkChecker {
|
|
| 2221 |
|
| 2222 |
//Don't stop the script when the connection is closed
|
| 2223 |
ignore_user_abort( true );
|
| 2224 |
-
|
| 2225 |
//Close the connection as per http://www.php.net/manual/en/features.connection-handling.php#71172
|
| 2226 |
//This reduces resource usage.
|
| 2227 |
//(Disable when debugging or you won't get the FirePHP output)
|
| 2228 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2229 |
@ob_end_clean(); //Discard the existing buffer, if any
|
| 2230 |
header("Connection: close");
|
| 2231 |
ob_start();
|
|
@@ -2455,7 +2663,7 @@ class wsBrokenLinkChecker {
|
|
| 2455 |
* @return int|blcLink[]
|
| 2456 |
*/
|
| 2457 |
function get_links_to_check($max_results = 0, $count_only = false){
|
| 2458 |
-
global $wpdb
|
| 2459 |
|
| 2460 |
$check_threshold = date('Y-m-d H:i:s', strtotime('-'.$this->conf->options['check_threshold'].' hours'));
|
| 2461 |
$recheck_threshold = date('Y-m-d H:i:s', time() - $this->conf->options['recheck_threshold']);
|
|
@@ -2661,7 +2869,6 @@ class wsBrokenLinkChecker {
|
|
| 2661 |
* @return array
|
| 2662 |
*/
|
| 2663 |
function get_status(){
|
| 2664 |
-
global $wpdb;
|
| 2665 |
$blc_link_query = blcLinkQuery::getInstance();
|
| 2666 |
|
| 2667 |
$check_threshold=date('Y-m-d H:i:s', strtotime('-'.$this->conf->options['check_threshold'].' hours'));
|
|
@@ -2710,6 +2917,7 @@ class wsBrokenLinkChecker {
|
|
| 2710 |
}
|
| 2711 |
//Make it appear "not broken"
|
| 2712 |
$link->broken = false;
|
|
|
|
| 2713 |
$link->false_positive = true;
|
| 2714 |
$link->last_check_attempt = time();
|
| 2715 |
$link->log = __("This link was manually marked as working by the user.", 'broken-link-checker');
|
|
@@ -2831,8 +3039,10 @@ class wsBrokenLinkChecker {
|
|
| 2831 |
'status_text' => $new_status['text'],
|
| 2832 |
'status_code' => $new_status['code'],
|
| 2833 |
'http_code' => empty($new_link->http_code) ? '' : $new_link->http_code,
|
|
|
|
| 2834 |
|
| 2835 |
'url' => $new_link->url,
|
|
|
|
| 2836 |
'link_text' => isset($new_text) ? $new_text : null,
|
| 2837 |
'ui_link_text' => isset($new_text) ? $ui_link_text : null,
|
| 2838 |
|
|
@@ -2897,6 +3107,108 @@ class wsBrokenLinkChecker {
|
|
| 2897 |
)));
|
| 2898 |
}
|
| 2899 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2900 |
|
| 2901 |
function ajax_link_details(){
|
| 2902 |
global $wpdb; /* @var wpdb $wpdb */
|
|
@@ -2984,8 +3296,8 @@ class wsBrokenLinkChecker {
|
|
| 2984 |
wp_add_dashboard_widget(
|
| 2985 |
'blc_dashboard_widget',
|
| 2986 |
__('Broken Link Checker', 'broken-link-checker'),
|
| 2987 |
-
array(
|
| 2988 |
-
array(
|
| 2989 |
);
|
| 2990 |
}
|
| 2991 |
}
|
|
@@ -3313,7 +3625,7 @@ class wsBrokenLinkChecker {
|
|
| 3313 |
|
| 3314 |
function send_html_email($email_address, $subject, $body) {
|
| 3315 |
//Need to override the default 'text/plain' content type to send a HTML email.
|
| 3316 |
-
add_filter('wp_mail_content_type', array(
|
| 3317 |
|
| 3318 |
//Let auto-responders and similar software know this is an auto-generated email
|
| 3319 |
//that they shouldn't respond to.
|
|
@@ -3323,7 +3635,7 @@ class wsBrokenLinkChecker {
|
|
| 3323 |
|
| 3324 |
//Remove the override so that it doesn't interfere with other plugins that might
|
| 3325 |
//want to send normal plaintext emails.
|
| 3326 |
-
remove_filter('wp_mail_content_type', array(
|
| 3327 |
|
| 3328 |
$this->conf->options['last_email'] = array(
|
| 3329 |
'subject' => $subject,
|
|
@@ -3379,9 +3691,27 @@ class wsBrokenLinkChecker {
|
|
| 3379 |
}
|
| 3380 |
}
|
| 3381 |
|
| 3382 |
-
function override_mail_content_type($content_type){
|
| 3383 |
return 'text/html';
|
| 3384 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3385 |
|
| 3386 |
/**
|
| 3387 |
* Install or uninstall the plugin's Cron events based on current settings.
|
| 37 |
* @param blcConfigurationManager $conf An instance of the configuration manager
|
| 38 |
* @return void
|
| 39 |
*/
|
| 40 |
+
function wsBrokenLinkChecker ( $loader, $conf ) {
|
|
|
|
|
|
|
| 41 |
$this->db_version = BLC_DATABASE_VERSION;
|
| 42 |
|
| 43 |
+
$this->conf = $conf;
|
| 44 |
$this->loader = $loader;
|
| 45 |
$this->my_basename = plugin_basename( $this->loader );
|
| 46 |
|
| 49 |
//Unlike the activation hook, the deactivation callback *can* be registered in this file
|
| 50 |
//because deactivation happens after this class has already been instantiated (durinng the
|
| 51 |
//'init' action).
|
| 52 |
+
register_deactivation_hook($loader, array($this, 'deactivation'));
|
| 53 |
|
| 54 |
+
add_action('admin_menu', array($this,'admin_menu'));
|
| 55 |
|
| 56 |
//Load jQuery on Dashboard pages (probably redundant as WP already does that)
|
| 57 |
+
add_action('admin_print_scripts', array($this,'admin_print_scripts'));
|
| 58 |
|
| 59 |
//The dashboard widget
|
| 60 |
+
add_action('wp_dashboard_setup', array($this, 'hook_wp_dashboard_setup'));
|
| 61 |
|
| 62 |
//AJAXy hooks
|
| 63 |
+
add_action( 'wp_ajax_blc_full_status', array($this,'ajax_full_status') );
|
| 64 |
+
add_action( 'wp_ajax_blc_dashboard_status', array($this,'ajax_dashboard_status') );
|
| 65 |
+
add_action( 'wp_ajax_blc_work', array($this,'ajax_work') );
|
| 66 |
+
add_action( 'wp_ajax_blc_discard', array($this,'ajax_discard') );
|
| 67 |
+
add_action( 'wp_ajax_blc_edit', array($this,'ajax_edit') );
|
| 68 |
+
add_action( 'wp_ajax_blc_link_details', array($this,'ajax_link_details') );
|
| 69 |
+
add_action( 'wp_ajax_blc_unlink', array($this,'ajax_unlink') );
|
| 70 |
+
add_action( 'wp_ajax_blc_recheck', array($this,'ajax_recheck') );
|
| 71 |
+
add_action( 'wp_ajax_blc_deredirect', array($this,'ajax_deredirect') );
|
| 72 |
+
add_action( 'wp_ajax_blc_current_load', array($this,'ajax_current_load') );
|
| 73 |
|
| 74 |
add_action( 'wp_ajax_blc_dismiss', array($this, 'ajax_dismiss') );
|
| 75 |
add_action( 'wp_ajax_blc_undismiss', array($this, 'ajax_undismiss') );
|
| 78 |
$this->setup_cron_events();
|
| 79 |
|
| 80 |
//Set hooks that listen for our Cron actions
|
| 81 |
+
add_action('blc_cron_email_notifications', array( $this, 'maybe_send_email_notifications' ));
|
| 82 |
+
add_action('blc_cron_check_links', array($this, 'cron_check_links'));
|
| 83 |
+
add_action('blc_cron_database_maintenance', array($this, 'database_maintenance'));
|
| 84 |
+
add_action('blc_cron_check_news', array($this, 'check_news'));
|
| 85 |
|
| 86 |
//Set the footer hook that will call the worker function via AJAX.
|
| 87 |
+
add_action('admin_footer', array($this,'admin_footer'));
|
| 88 |
|
| 89 |
//Add a "Screen Options" panel to the "Broken Links" page
|
| 90 |
add_screen_options_panel(
|
| 95 |
array($this, 'ajax_save_screen_options'),
|
| 96 |
true
|
| 97 |
);
|
| 98 |
+
|
| 99 |
+
//Display an explanatory note on the "Tools -> Broken Links -> Warnings" page.
|
| 100 |
+
add_action('admin_notices', array($this, 'show_warnings_section_notice'));
|
| 101 |
}
|
| 102 |
|
| 103 |
/**
|
| 165 |
'action' : 'blc_dashboard_status',
|
| 166 |
'random' : Math.random()
|
| 167 |
},
|
| 168 |
+
function (data){
|
| 169 |
if ( data && ( typeof(data.text) != 'undefined' ) ) {
|
| 170 |
$('#wsblc_activity_box').html(data.text);
|
| 171 |
<?php if ( $this->conf->options['autoexpand_widget'] ) { ?>
|
| 292 |
*/
|
| 293 |
function admin_menu(){
|
| 294 |
if (current_user_can('manage_options'))
|
| 295 |
+
add_filter('plugin_action_links', array($this, 'plugin_action_links'), 10, 2);
|
| 296 |
|
| 297 |
$options_page_hook = add_options_page(
|
| 298 |
__('Link Checker Settings', 'broken-link-checker'),
|
| 299 |
__('Link Checker', 'broken-link-checker'),
|
| 300 |
'manage_options',
|
| 301 |
+
'link-checker-settings',array($this, 'options_page')
|
| 302 |
);
|
| 303 |
|
| 304 |
$menu_title = __('Broken Links', 'broken-link-checker');
|
| 320 |
__('View Broken Links', 'broken-link-checker'),
|
| 321 |
$menu_title,
|
| 322 |
'edit_others_posts',
|
| 323 |
+
'view-broken-links',array($this, 'links_page')
|
| 324 |
);
|
| 325 |
|
| 326 |
//Add plugin-specific scripts and CSS only to the it's own pages
|
| 327 |
+
add_action( 'admin_print_styles-' . $options_page_hook, array($this, 'options_page_css') );
|
| 328 |
+
add_action( 'admin_print_styles-' . $links_page_hook, array($this, 'links_page_css') );
|
| 329 |
+
add_action( 'admin_print_scripts-' . $options_page_hook, array($this, 'enqueue_settings_scripts') );
|
| 330 |
+
add_action( 'admin_print_scripts-' . $links_page_hook, array($this, 'enqueue_link_page_scripts') );
|
| 331 |
|
| 332 |
//Add a "Feedback" button that links to the plugin's UserVoice forum
|
| 333 |
add_screen_meta_link(
|
| 374 |
}
|
| 375 |
|
| 376 |
function options_page(){
|
|
|
|
|
|
|
| 377 |
$moduleManager = blcModuleManager::getInstance();
|
| 378 |
|
| 379 |
//Prior to 1.5.2 (released 2012-05-27), there was a bug that would cause the donation flag to be
|
| 396 |
wp_redirect( add_query_arg( array( 'recheck-initiated' => true), $base_url ) );
|
| 397 |
die();
|
| 398 |
}
|
| 399 |
+
|
| 400 |
+
$available_link_actions = array(
|
| 401 |
+
'edit' => __('Edit URL' , 'broken-link-checker'),
|
| 402 |
+
'delete' => __('Unlink', 'broken-link-checker'),
|
| 403 |
+
'blc-discard-action' => __('Not broken', 'broken-link-checker'),
|
| 404 |
+
'blc-dismiss-action' => __('Dismiss', 'broken-link-checker'),
|
| 405 |
+
'blc-recheck-action' => __('Recheck', 'broken-link-checker'),
|
| 406 |
+
'blc-deredirect-action' => _x('Fix redirect', 'link action; replace one redirect with a direct link', 'broken-link-checker')
|
| 407 |
+
);
|
| 408 |
|
| 409 |
if(isset($_POST['submit'])) {
|
| 410 |
check_admin_referer('link-checker-options');
|
| 431 |
if ( empty($enabled_post_statuses) ){
|
| 432 |
$enabled_post_statuses = array('publish');
|
| 433 |
}
|
| 434 |
+
|
| 435 |
+
//Did the user add/remove any post statuses?
|
| 436 |
+
$same_statuses = array_intersect($enabled_post_statuses, $this->conf->options['enabled_post_statuses']);
|
| 437 |
+
$post_statuses_changed = (count($same_statuses) != count($enabled_post_statuses))
|
| 438 |
+
|| (count($same_statuses) !== count($this->conf->options['enabled_post_statuses']));
|
| 439 |
+
|
| 440 |
$this->conf->options['enabled_post_statuses'] = $enabled_post_statuses;
|
| 441 |
+
|
|
|
|
| 442 |
//The execution time limit must be above zero
|
| 443 |
$new_execution_time = intval($_POST['max_execution_time']);
|
| 444 |
if( $new_execution_time > 0 ){
|
| 481 |
$diff1 = array_diff( $new_custom_fields, $this->conf->options['custom_fields'] );
|
| 482 |
$diff2 = array_diff( $this->conf->options['custom_fields'], $new_custom_fields );
|
| 483 |
$this->conf->options['custom_fields'] = $new_custom_fields;
|
| 484 |
+
|
| 485 |
+
//Turning off warnings turns existing warnings into "broken" links.
|
| 486 |
+
$warnings_enabled = !empty($_POST['warnings_enabled']);
|
| 487 |
+
if ( $this->conf->get('warnings_enabled') && !$warnings_enabled ) {
|
| 488 |
+
$this->promote_warnings_to_broken();
|
| 489 |
+
}
|
| 490 |
+
$this->conf->options['warnings_enabled'] = $warnings_enabled;
|
| 491 |
+
|
| 492 |
+
//HTTP timeout
|
| 493 |
$new_timeout = intval($_POST['timeout']);
|
| 494 |
if( $new_timeout > 0 ){
|
| 495 |
$this->conf->options['timeout'] = $new_timeout ;
|
| 545 |
$this->conf->options['dashboard_widget_capability'] = $widget_cap;
|
| 546 |
}
|
| 547 |
|
| 548 |
+
//Link actions. The user can hide some of them to reduce UI clutter.
|
| 549 |
+
$show_link_actions = array();
|
| 550 |
+
foreach(array_keys($available_link_actions) as $action) {
|
| 551 |
+
$show_link_actions[$action] = isset($_POST['show_link_actions']) &&
|
| 552 |
+
!empty($_POST['show_link_actions'][$action]);
|
| 553 |
+
}
|
| 554 |
+
$this->conf->set('show_link_actions', $show_link_actions);
|
| 555 |
+
|
| 556 |
//Logging. The plugin can log various events and results for debugging purposes.
|
| 557 |
$this->conf->options['logging_enabled'] = !empty($_POST['logging_enabled']);
|
| 558 |
$this->conf->options['custom_log_file_enabled'] = !empty($_POST['custom_log_file_enabled']);
|
| 604 |
blc_got_unsynched_items();
|
| 605 |
}
|
| 606 |
}
|
| 607 |
+
|
| 608 |
+
//Resynchronize posts when the user enables or disables post statuses.
|
| 609 |
+
if ( $post_statuses_changed ) {
|
| 610 |
+
$overlord = blcPostTypeOverlord::getInstance();
|
| 611 |
+
$overlord->enabled_post_statuses = $this->conf->get('enabled_post_statuses', array());
|
| 612 |
+
$overlord->resynch('wsh_status_resynch_trigger');
|
| 613 |
+
|
| 614 |
+
blc_got_unsynched_items();
|
| 615 |
+
blc_cleanup_instances();
|
| 616 |
+
blc_cleanup_links();
|
| 617 |
+
}
|
| 618 |
|
| 619 |
//Redirect back to the settings page
|
| 620 |
$base_url = remove_query_arg( array('_wpnonce', 'noheader', 'updated', 'error', 'action', 'message') );
|
| 646 |
|
| 647 |
$debug = $this->get_debug_info();
|
| 648 |
|
| 649 |
+
add_filter('blc-module-settings-custom_field', array($this, 'make_custom_field_input'), 10, 2);
|
|
|
|
| 650 |
|
| 651 |
//Translate and markup-ify module headers for display
|
| 652 |
$modules = $moduleManager->get_modules_by_category('', true, true);
|
| 678 |
<![endif]-->
|
| 679 |
|
| 680 |
<div class="wrap" id="blc-settings-wrap">
|
| 681 |
+
<h2><?php _e('Broken Link Checker Options', 'broken-link-checker'); ?></h2>
|
| 682 |
|
| 683 |
|
| 684 |
<div id="blc-sidebar">
|
| 822 |
|
|
| 823 |
<a id="toggle-broken-link-css-editor" href="#" class="blc-toggle-link"><?php
|
| 824 |
_e('Edit CSS', 'broken-link-checker');
|
| 825 |
+
?></a>
|
| 826 |
</p>
|
| 827 |
|
| 828 |
<div id="broken-link-css-wrap"<?php
|
| 830 |
echo ' class="hidden"';
|
| 831 |
}
|
| 832 |
?>>
|
| 833 |
+
<textarea name="broken_link_css" id="broken_link_css" cols='45' rows='4'><?php
|
| 834 |
if( isset($this->conf->options['broken_link_css']) ) {
|
| 835 |
echo $this->conf->options['broken_link_css'];
|
| 836 |
}
|
| 861 |
echo ' class="hidden"';
|
| 862 |
}
|
| 863 |
?>>
|
| 864 |
+
<textarea name="removed_link_css" id="removed_link_css" cols='45' rows='4'><?php
|
| 865 |
if( isset($this->conf->options['removed_link_css']) )
|
| 866 |
echo $this->conf->options['removed_link_css'];
|
| 867 |
?></textarea>
|
| 885 |
</label>
|
| 886 |
</p>
|
| 887 |
|
| 888 |
+
<p class="description">
|
| 889 |
+
<?php
|
| 890 |
+
echo _x(
|
| 891 |
+
'These settings only apply to the content of posts, not comments or custom fields.',
|
| 892 |
+
'"Link tweaks" settings',
|
| 893 |
+
'broken-link-checker'
|
| 894 |
+
);
|
| 895 |
+
?>
|
| 896 |
+
</p>
|
| 897 |
</td>
|
| 898 |
</tr>
|
| 899 |
|
| 900 |
<tr valign="top">
|
| 901 |
<th scope="row"><?php echo _x('Suggestions', 'settings page', 'broken-link-checker'); ?></th>
|
| 902 |
<td>
|
| 903 |
+
<label>
|
| 904 |
+
<input type="checkbox" name="suggestions_enabled" id="suggestions_enabled"
|
| 905 |
+
<?php checked($this->conf->options['suggestions_enabled']); ?>/>
|
| 906 |
+
<?php _e('Suggest alternatives to broken links', 'broken-link-checker'); ?>
|
| 907 |
+
</label>
|
|
|
|
|
|
|
| 908 |
</td>
|
| 909 |
</tr>
|
| 910 |
+
|
| 911 |
+
<tr valign="top">
|
| 912 |
+
<th scope="row"><?php echo _x('Warnings', 'settings page', 'broken-link-checker'); ?></th>
|
| 913 |
+
<td id="blc_warning_settings">
|
| 914 |
+
<label>
|
| 915 |
+
<input type="checkbox" name="warnings_enabled" id="warnings_enabled"
|
| 916 |
+
<?php checked($this->conf->options['warnings_enabled']); ?>/>
|
| 917 |
+
<?php _e('Show uncertain or minor problems as "warnings" instead of "broken"', 'broken-link-checker'); ?>
|
| 918 |
+
</label>
|
| 919 |
+
<p class="description"><?php
|
| 920 |
+
_e('Turning off this option will make the plugin report all problems as broken links.', 'broken-link-checker');
|
| 921 |
+
?></p>
|
| 922 |
+
</td>
|
| 923 |
+
</tr>
|
| 924 |
+
|
| 925 |
</table>
|
| 926 |
|
| 927 |
</div>
|
| 991 |
<tr valign="top">
|
| 992 |
<th scope="row"><?php _e('Exclusion list', 'broken-link-checker'); ?></th>
|
| 993 |
<td><?php _e("Don't check links where the URL contains any of these words (one per line) :", 'broken-link-checker'); ?><br/>
|
| 994 |
+
<textarea name="exclusion_list" id="exclusion_list" cols='45' rows='4'><?php
|
| 995 |
if( isset($this->conf->options['exclusion_list']) )
|
| 996 |
echo implode("\n", $this->conf->options['exclusion_list']);
|
| 997 |
?></textarea>
|
| 1094 |
?>
|
| 1095 |
</td>
|
| 1096 |
</tr>
|
| 1097 |
+
|
| 1098 |
+
<tr valign="top">
|
| 1099 |
+
<th scope="row"><?php echo _x('Show link actions', 'settings page', 'broken-link-checker'); ?></th>
|
| 1100 |
+
<td>
|
| 1101 |
+
<?php
|
| 1102 |
+
$show_link_actions = $this->conf->get('show_link_actions', array());
|
| 1103 |
+
foreach($available_link_actions as $action => $text) {
|
| 1104 |
+
$enabled = isset($show_link_actions[$action]) ? (bool)($show_link_actions[$action]) : true;
|
| 1105 |
+
printf(
|
| 1106 |
+
'<p><label><input type="checkbox" name="show_link_actions[%1$s]" %3$s> %2$s</label></p>',
|
| 1107 |
+
$action,
|
| 1108 |
+
$text,
|
| 1109 |
+
checked($enabled, true, false)
|
| 1110 |
+
);
|
| 1111 |
+
}
|
| 1112 |
+
?>
|
| 1113 |
+
</td>
|
| 1114 |
+
</tr>
|
| 1115 |
|
| 1116 |
<tr valign="top">
|
| 1117 |
<th scope="row"><?php _e('Max. execution time', 'broken-link-checker'); ?></th>
|
| 1401 |
'broken-link-checker'
|
| 1402 |
) .
|
| 1403 |
'</span>';
|
| 1404 |
+
$html .= '<br><textarea name="blc_custom_fields" id="blc_custom_fields" cols="45" rows="4">';
|
| 1405 |
if( isset($current_settings['custom_fields']) )
|
| 1406 |
$html .= implode("\n", $current_settings['custom_fields']);
|
| 1407 |
$html .= '</textarea>';
|
| 1415 |
* @return void
|
| 1416 |
*/
|
| 1417 |
function options_page_css(){
|
| 1418 |
+
wp_enqueue_style('blc-options-page', plugins_url('css/options-page.css', BLC_PLUGIN_FILE), array(), '20141113');
|
| 1419 |
wp_enqueue_style('dashboard');
|
| 1420 |
}
|
| 1421 |
|
| 1426 |
* @return void
|
| 1427 |
*/
|
| 1428 |
function links_page(){
|
| 1429 |
+
global $wpdb; /* @var wpdb $wpdb */
|
| 1430 |
|
| 1431 |
$blc_link_query = blcLinkQuery::getInstance();
|
| 1432 |
|
| 1493 |
list($message, $msg_class) = $this->do_bulk_discard($selected_links);
|
| 1494 |
break;
|
| 1495 |
|
| 1496 |
+
case 'bulk-dismiss':
|
| 1497 |
+
list($message, $msg_class) = $this->do_bulk_dismiss($selected_links);
|
| 1498 |
+
break;
|
| 1499 |
+
|
| 1500 |
case 'bulk-edit':
|
| 1501 |
list($message, $msg_class) = $this->do_bulk_edit($selected_links);
|
| 1502 |
break;
|
| 1542 |
var blc_suggestions_enabled = <?php echo $this->conf->options['suggestions_enabled'] ? 'true' : 'false'; ?>;
|
| 1543 |
</script>
|
| 1544 |
|
| 1545 |
+
<div class="wrap">
|
| 1546 |
<?php
|
| 1547 |
$blc_link_query->print_filter_heading($current_filter);
|
| 1548 |
$blc_link_query->print_filter_menu($filter_id);
|
| 2098 |
}
|
| 2099 |
|
| 2100 |
//Skip links that weren't actually detected as broken
|
| 2101 |
+
if ( !$link->broken && !$link->warning ){
|
| 2102 |
continue;
|
| 2103 |
}
|
| 2104 |
|
| 2105 |
//Make it appear "not broken"
|
| 2106 |
+
$link->broken = false;
|
| 2107 |
+
$link->warning = false;
|
| 2108 |
$link->false_positive = true;
|
| 2109 |
$link->last_check_attempt = time();
|
| 2110 |
$link->log = __("This link was manually marked as working by the user.", 'broken-link-checker');
|
| 2136 |
|
| 2137 |
return array(implode('<br>', $messages), $msg_class);
|
| 2138 |
}
|
| 2139 |
+
|
| 2140 |
+
/**
|
| 2141 |
+
* Dismiss multiple links.
|
| 2142 |
+
*
|
| 2143 |
+
* @param array $selected_links An array of link IDs
|
| 2144 |
+
* @return array Confirmation message and the CSS class to use with that message.
|
| 2145 |
+
*/
|
| 2146 |
+
function do_bulk_dismiss($selected_links){
|
| 2147 |
+
check_admin_referer( 'bulk-action' );
|
| 2148 |
+
|
| 2149 |
+
$messages = array();
|
| 2150 |
+
$msg_class = 'updated';
|
| 2151 |
+
$processed_links = 0;
|
| 2152 |
+
|
| 2153 |
+
if ( count($selected_links) > 0 ){
|
| 2154 |
+
foreach($selected_links as $link_id){
|
| 2155 |
+
//Load the link
|
| 2156 |
+
$link = new blcLink( intval($link_id) );
|
| 2157 |
+
|
| 2158 |
+
//Skip links that don't actually exist
|
| 2159 |
+
if ( !$link->valid() ){
|
| 2160 |
+
continue;
|
| 2161 |
+
}
|
| 2162 |
+
|
| 2163 |
+
//We can only dismiss broken links and redirects.
|
| 2164 |
+
if ( !($link->broken || $link->warning || ($link->redirect_count > 0)) ){
|
| 2165 |
+
continue;
|
| 2166 |
+
}
|
| 2167 |
+
|
| 2168 |
+
$link->dismissed = true;
|
| 2169 |
+
|
| 2170 |
+
//Save the changes
|
| 2171 |
+
if ( $link->save() ){
|
| 2172 |
+
$processed_links++;
|
| 2173 |
+
} else {
|
| 2174 |
+
$messages[] = sprintf(
|
| 2175 |
+
__("Couldn't modify link %d", 'broken-link-checker'),
|
| 2176 |
+
$link_id
|
| 2177 |
+
);
|
| 2178 |
+
$msg_class = 'error';
|
| 2179 |
+
}
|
| 2180 |
+
}
|
| 2181 |
+
}
|
| 2182 |
+
|
| 2183 |
+
if ( $processed_links > 0 ){
|
| 2184 |
+
$messages[] = sprintf(
|
| 2185 |
+
_n(
|
| 2186 |
+
'%d link dismissed',
|
| 2187 |
+
'%d links dismissed',
|
| 2188 |
+
$processed_links,
|
| 2189 |
+
'broken-link-checker'
|
| 2190 |
+
),
|
| 2191 |
+
$processed_links
|
| 2192 |
+
);
|
| 2193 |
+
}
|
| 2194 |
+
|
| 2195 |
+
return array(implode('<br>', $messages), $msg_class);
|
| 2196 |
+
}
|
| 2197 |
|
| 2198 |
|
| 2199 |
/**
|
| 2202 |
* @return void
|
| 2203 |
*/
|
| 2204 |
function links_page_css(){
|
| 2205 |
+
wp_enqueue_style('blc-links-page', plugins_url('css/links-page.css', $this->loader), array(), '20141113-2');
|
| 2206 |
+
}
|
| 2207 |
+
|
| 2208 |
+
/**
|
| 2209 |
+
* Show an admin notice that explains what the "Warnings" section under "Tools -> Broken Links" does.
|
| 2210 |
+
* The user can hide the notice.
|
| 2211 |
+
*/
|
| 2212 |
+
public function show_warnings_section_notice() {
|
| 2213 |
+
$is_warnings_section = isset($_GET['filter_id'])
|
| 2214 |
+
&& ($_GET['filter_id'] === 'warnings')
|
| 2215 |
+
&& isset($_GET['page'])
|
| 2216 |
+
&& ($_GET['page'] === 'view-broken-links');
|
| 2217 |
+
|
| 2218 |
+
if ( !($is_warnings_section && current_user_can('edit_others_posts')) ) {
|
| 2219 |
+
return;
|
| 2220 |
+
}
|
| 2221 |
+
|
| 2222 |
+
//Let the user hide the notice.
|
| 2223 |
+
$conf = blc_get_configuration();
|
| 2224 |
+
$notice_name = 'show_warnings_section_hint';
|
| 2225 |
+
|
| 2226 |
+
if ( isset($_GET[$notice_name]) && is_numeric($_GET[$notice_name]) ) {
|
| 2227 |
+
$conf->set($notice_name, (bool)$_GET[$notice_name]);
|
| 2228 |
+
$conf->save_options();
|
| 2229 |
+
}
|
| 2230 |
+
if ( !$conf->get($notice_name, true) ) {
|
| 2231 |
+
return;
|
| 2232 |
+
}
|
| 2233 |
+
|
| 2234 |
+
printf(
|
| 2235 |
+
'<div class="updated">
|
| 2236 |
+
<p>%1$s</p>
|
| 2237 |
+
<p>
|
| 2238 |
+
<a href="%2$s">%3$s</a> |
|
| 2239 |
+
<a href="%4$s">%5$s</a>
|
| 2240 |
+
<p>
|
| 2241 |
+
</div>',
|
| 2242 |
+
__(
|
| 2243 |
+
'The "Warnings" page lists problems that are probably temporary or suspected to be false positives.<br> Warnings that persist for a long time will usually be reclassified as broken links.',
|
| 2244 |
+
'broken-link-checker'
|
| 2245 |
+
),
|
| 2246 |
+
add_query_arg($notice_name, '0'),
|
| 2247 |
+
_x(
|
| 2248 |
+
'Hide notice',
|
| 2249 |
+
'admin notice under Tools - Broken links - Warnings',
|
| 2250 |
+
'broken-link-checker'
|
| 2251 |
+
),
|
| 2252 |
+
admin_url('options-general.php?page=link-checker-settings#blc_warning_settings'),
|
| 2253 |
+
_x(
|
| 2254 |
+
'Change warning settings',
|
| 2255 |
+
'a link from the admin notice under Tools - Broken links - Warnings',
|
| 2256 |
+
'broken-link-checker'
|
| 2257 |
+
)
|
| 2258 |
+
);
|
| 2259 |
}
|
| 2260 |
|
| 2261 |
/**
|
| 2381 |
* @return void
|
| 2382 |
*/
|
| 2383 |
function work(){
|
| 2384 |
+
global $blclog;
|
| 2385 |
+
|
| 2386 |
+
//Close the session to prevent lock-ups.
|
| 2387 |
+
//PHP sessions are blocking. session_start() will wait until all other scripts that are using the same session
|
| 2388 |
+
//are finished. As a result, a long-running script that unintentionally keeps the session open can cause
|
| 2389 |
+
//the entire site to "lock up" for the current user/browser. WordPress itself doesn't use sessions, but some
|
| 2390 |
+
//plugins do, so we should explicitly close the session (if any) before starting the worker.
|
| 2391 |
+
if ( session_id() != '' ) {
|
| 2392 |
+
session_write_close();
|
| 2393 |
+
}
|
| 2394 |
|
| 2395 |
if ( !$this->acquire_lock() ){
|
| 2396 |
//FB::warn("Another instance of BLC is already working. Stop.");
|
| 2425 |
|
| 2426 |
//Don't stop the script when the connection is closed
|
| 2427 |
ignore_user_abort( true );
|
| 2428 |
+
|
| 2429 |
//Close the connection as per http://www.php.net/manual/en/features.connection-handling.php#71172
|
| 2430 |
//This reduces resource usage.
|
| 2431 |
//(Disable when debugging or you won't get the FirePHP output)
|
| 2432 |
+
if (
|
| 2433 |
+
!headers_sent()
|
| 2434 |
+
&& (defined('DOING_AJAX') && constant('DOING_AJAX'))
|
| 2435 |
+
&& (!defined('BLC_DEBUG') || !constant('BLC_DEBUG'))
|
| 2436 |
+
){
|
| 2437 |
@ob_end_clean(); //Discard the existing buffer, if any
|
| 2438 |
header("Connection: close");
|
| 2439 |
ob_start();
|
| 2663 |
* @return int|blcLink[]
|
| 2664 |
*/
|
| 2665 |
function get_links_to_check($max_results = 0, $count_only = false){
|
| 2666 |
+
global $wpdb; /* @var wpdb $wpdb */
|
| 2667 |
|
| 2668 |
$check_threshold = date('Y-m-d H:i:s', strtotime('-'.$this->conf->options['check_threshold'].' hours'));
|
| 2669 |
$recheck_threshold = date('Y-m-d H:i:s', time() - $this->conf->options['recheck_threshold']);
|
| 2869 |
* @return array
|
| 2870 |
*/
|
| 2871 |
function get_status(){
|
|
|
|
| 2872 |
$blc_link_query = blcLinkQuery::getInstance();
|
| 2873 |
|
| 2874 |
$check_threshold=date('Y-m-d H:i:s', strtotime('-'.$this->conf->options['check_threshold'].' hours'));
|
| 2917 |
}
|
| 2918 |
//Make it appear "not broken"
|
| 2919 |
$link->broken = false;
|
| 2920 |
+
$link->warning = false;
|
| 2921 |
$link->false_positive = true;
|
| 2922 |
$link->last_check_attempt = time();
|
| 2923 |
$link->log = __("This link was manually marked as working by the user.", 'broken-link-checker');
|
| 3039 |
'status_text' => $new_status['text'],
|
| 3040 |
'status_code' => $new_status['code'],
|
| 3041 |
'http_code' => empty($new_link->http_code) ? '' : $new_link->http_code,
|
| 3042 |
+
'redirect_count' => $new_link->redirect_count,
|
| 3043 |
|
| 3044 |
'url' => $new_link->url,
|
| 3045 |
+
'final_url' => $new_link->final_url,
|
| 3046 |
'link_text' => isset($new_text) ? $new_text : null,
|
| 3047 |
'ui_link_text' => isset($new_text) ? $ui_link_text : null,
|
| 3048 |
|
| 3107 |
)));
|
| 3108 |
}
|
| 3109 |
}
|
| 3110 |
+
|
| 3111 |
+
public function ajax_deredirect() {
|
| 3112 |
+
if ( !current_user_can('edit_others_posts') || !check_ajax_referer('blc_deredirect', false, false) ){
|
| 3113 |
+
die( json_encode( array(
|
| 3114 |
+
'error' => __("You're not allowed to do that!", 'broken-link-checker')
|
| 3115 |
+
)));
|
| 3116 |
+
}
|
| 3117 |
+
|
| 3118 |
+
if ( !isset($_POST['link_id']) || !is_numeric($_POST['link_id']) ) {
|
| 3119 |
+
die( json_encode( array(
|
| 3120 |
+
'error' => __("Error : link_id not specified", 'broken-link-checker')
|
| 3121 |
+
)));
|
| 3122 |
+
}
|
| 3123 |
+
|
| 3124 |
+
$id = intval($_POST['link_id']);
|
| 3125 |
+
$link = new blcLink($id);
|
| 3126 |
+
|
| 3127 |
+
if ( !$link->valid() ){
|
| 3128 |
+
die( json_encode( array(
|
| 3129 |
+
'error' => sprintf(__("Oops, I can't find the link %d", 'broken-link-checker'), $id)
|
| 3130 |
+
)));
|
| 3131 |
+
}
|
| 3132 |
+
|
| 3133 |
+
//The actual task is simple; it's error handling that's complicated.
|
| 3134 |
+
$result = $link->deredirect();
|
| 3135 |
+
if ( is_wp_error($result) ) {
|
| 3136 |
+
die( json_encode( array(
|
| 3137 |
+
'error' => sprintf('%s [%s]', $result->get_error_message(), $result->get_error_code())
|
| 3138 |
+
)));
|
| 3139 |
+
}
|
| 3140 |
+
|
| 3141 |
+
$link = $result['new_link'] /** @var blcLink $link */;
|
| 3142 |
+
|
| 3143 |
+
$status = $link->analyse_status();
|
| 3144 |
+
$response = array(
|
| 3145 |
+
'url' => $link->url,
|
| 3146 |
+
'new_link_id' => $result['new_link_id'],
|
| 3147 |
+
|
| 3148 |
+
'status_text' => $status['text'],
|
| 3149 |
+
'status_code' => $status['code'],
|
| 3150 |
+
'http_code' => empty($link->http_code) ? '' : $link->http_code,
|
| 3151 |
+
'redirect_count' => $link->redirect_count,
|
| 3152 |
+
'final_url' => $link->final_url,
|
| 3153 |
+
|
| 3154 |
+
'cnt_okay' => $result['cnt_okay'],
|
| 3155 |
+
'cnt_error' => $result['cnt_error'],
|
| 3156 |
+
'errors' => array(),
|
| 3157 |
+
);
|
| 3158 |
+
|
| 3159 |
+
//Convert WP_Error's to simple strings.
|
| 3160 |
+
if ( !empty($result['errors']) ) {
|
| 3161 |
+
foreach($result['errors'] as $error) { /** @var WP_Error $error */
|
| 3162 |
+
$response['errors'][] = $error->get_error_message();
|
| 3163 |
+
}
|
| 3164 |
+
}
|
| 3165 |
+
|
| 3166 |
+
die(json_encode($response));
|
| 3167 |
+
}
|
| 3168 |
+
|
| 3169 |
+
/**
|
| 3170 |
+
* AJAX hook for the "Recheck" action.
|
| 3171 |
+
*/
|
| 3172 |
+
public function ajax_recheck() {
|
| 3173 |
+
if (!current_user_can('edit_others_posts') || !check_ajax_referer('blc_recheck', false, false)){
|
| 3174 |
+
die( json_encode( array(
|
| 3175 |
+
'error' => __("You're not allowed to do that!", 'broken-link-checker')
|
| 3176 |
+
)));
|
| 3177 |
+
}
|
| 3178 |
+
|
| 3179 |
+
if ( !isset($_POST['link_id']) || !is_numeric($_POST['link_id']) ) {
|
| 3180 |
+
die( json_encode( array(
|
| 3181 |
+
'error' => __("Error : link_id not specified", 'broken-link-checker')
|
| 3182 |
+
)));
|
| 3183 |
+
}
|
| 3184 |
+
|
| 3185 |
+
$id = intval($_POST['link_id']);
|
| 3186 |
+
$link = new blcLink($id);
|
| 3187 |
+
|
| 3188 |
+
if ( !$link->valid() ){
|
| 3189 |
+
die( json_encode( array(
|
| 3190 |
+
'error' => sprintf(__("Oops, I can't find the link %d", 'broken-link-checker'), $id)
|
| 3191 |
+
)));
|
| 3192 |
+
}
|
| 3193 |
+
|
| 3194 |
+
//In case the immediate check fails, this will ensure the link is checked during the next work() run.
|
| 3195 |
+
$link->last_check_attempt = 0;
|
| 3196 |
+
$link->save();
|
| 3197 |
+
|
| 3198 |
+
//Check the link and save the results.
|
| 3199 |
+
$link->check(true);
|
| 3200 |
+
|
| 3201 |
+
$status = $link->analyse_status();
|
| 3202 |
+
$response = array(
|
| 3203 |
+
'status_text' => $status['text'],
|
| 3204 |
+
'status_code' => $status['code'],
|
| 3205 |
+
'http_code' => empty($link->http_code) ? '' : $link->http_code,
|
| 3206 |
+
'redirect_count' => $link->redirect_count,
|
| 3207 |
+
'final_url' => $link->final_url,
|
| 3208 |
+
);
|
| 3209 |
+
|
| 3210 |
+
die(json_encode($response));
|
| 3211 |
+
}
|
| 3212 |
|
| 3213 |
function ajax_link_details(){
|
| 3214 |
global $wpdb; /* @var wpdb $wpdb */
|
| 3296 |
wp_add_dashboard_widget(
|
| 3297 |
'blc_dashboard_widget',
|
| 3298 |
__('Broken Link Checker', 'broken-link-checker'),
|
| 3299 |
+
array( $this, 'dashboard_widget' ),
|
| 3300 |
+
array( $this, 'dashboard_widget_control' )
|
| 3301 |
);
|
| 3302 |
}
|
| 3303 |
}
|
| 3625 |
|
| 3626 |
function send_html_email($email_address, $subject, $body) {
|
| 3627 |
//Need to override the default 'text/plain' content type to send a HTML email.
|
| 3628 |
+
add_filter('wp_mail_content_type', array($this, 'override_mail_content_type'));
|
| 3629 |
|
| 3630 |
//Let auto-responders and similar software know this is an auto-generated email
|
| 3631 |
//that they shouldn't respond to.
|
| 3635 |
|
| 3636 |
//Remove the override so that it doesn't interfere with other plugins that might
|
| 3637 |
//want to send normal plaintext emails.
|
| 3638 |
+
remove_filter('wp_mail_content_type', array($this, 'override_mail_content_type'));
|
| 3639 |
|
| 3640 |
$this->conf->options['last_email'] = array(
|
| 3641 |
'subject' => $subject,
|
| 3691 |
}
|
| 3692 |
}
|
| 3693 |
|
| 3694 |
+
function override_mail_content_type(/** @noinspection PhpUnusedParameterInspection */ $content_type){
|
| 3695 |
return 'text/html';
|
| 3696 |
}
|
| 3697 |
+
|
| 3698 |
+
/**
|
| 3699 |
+
* Promote all links with the "warning" status to "broken".
|
| 3700 |
+
*/
|
| 3701 |
+
private function promote_warnings_to_broken() {
|
| 3702 |
+
global $wpdb; /** @var wpdb $wpdb */
|
| 3703 |
+
$wpdb->update(
|
| 3704 |
+
$wpdb->prefix . 'blc_links',
|
| 3705 |
+
array(
|
| 3706 |
+
'broken' => 1,
|
| 3707 |
+
'warning' => 0,
|
| 3708 |
+
),
|
| 3709 |
+
array(
|
| 3710 |
+
'warning' => 1,
|
| 3711 |
+
),
|
| 3712 |
+
'%d'
|
| 3713 |
+
);
|
| 3714 |
+
}
|
| 3715 |
|
| 3716 |
/**
|
| 3717 |
* Install or uninstall the plugin's Cron events based on current settings.
|
core/init.php
CHANGED
|
@@ -86,7 +86,10 @@ $blc_config_manager = new blcConfigurationManager(
|
|
| 86 |
'last_notification_sent' => 0, //When the last email notification was sent (Unix timestamp)
|
| 87 |
|
| 88 |
'suggestions_enabled' => true, //Whether to suggest alternative URLs for broken links.
|
| 89 |
-
|
|
|
|
|
|
|
|
|
|
| 90 |
'server_load_limit' => null, //Stop parsing stuff & checking links if the 1-minute load average
|
| 91 |
//goes over this value. Only works on Linux servers. 0 = no limit.
|
| 92 |
'enable_load_limit' => true, //Enable/disable load monitoring.
|
|
@@ -122,6 +125,9 @@ $blc_config_manager = new blcConfigurationManager(
|
|
| 122 |
|
| 123 |
'user_has_donated' => false, //Whether the user has donated to the plugin.
|
| 124 |
'donation_flag_fixed' => false,
|
|
|
|
|
|
|
|
|
|
| 125 |
)
|
| 126 |
);
|
| 127 |
|
| 86 |
'last_notification_sent' => 0, //When the last email notification was sent (Unix timestamp)
|
| 87 |
|
| 88 |
'suggestions_enabled' => true, //Whether to suggest alternative URLs for broken links.
|
| 89 |
+
|
| 90 |
+
'warnings_enabled' => true, //Try to automatically detect temporary problems and false positives,
|
| 91 |
+
//and report them as "Warnings" instead of broken links.
|
| 92 |
+
|
| 93 |
'server_load_limit' => null, //Stop parsing stuff & checking links if the 1-minute load average
|
| 94 |
//goes over this value. Only works on Linux servers. 0 = no limit.
|
| 95 |
'enable_load_limit' => true, //Enable/disable load monitoring.
|
| 125 |
|
| 126 |
'user_has_donated' => false, //Whether the user has donated to the plugin.
|
| 127 |
'donation_flag_fixed' => false,
|
| 128 |
+
|
| 129 |
+
//Visible link actions.
|
| 130 |
+
'show_link_actions' => array('blc-deredirect-action' => false),
|
| 131 |
)
|
| 132 |
);
|
| 133 |
|
css/links-page.css
CHANGED
|
@@ -84,6 +84,10 @@ td.column-new-url .mini-status {
|
|
| 84 |
color: black;
|
| 85 |
}
|
| 86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
/* Styles for broken links, redirects and other link states or types */
|
| 88 |
|
| 89 |
.blc-redirect .blc-link-url {
|
|
@@ -200,6 +204,15 @@ td.column-status {
|
|
| 200 |
display: none;
|
| 201 |
}
|
| 202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
/* Misc table styles */
|
| 204 |
|
| 205 |
.blc-link-url {
|
|
@@ -455,7 +468,7 @@ div.search-box{
|
|
| 455 |
}
|
| 456 |
|
| 457 |
/* Filter-related styles */
|
| 458 |
-
.base-filter-all .blc-dismiss-
|
| 459 |
display: none;
|
| 460 |
}
|
| 461 |
|
| 84 |
color: black;
|
| 85 |
}
|
| 86 |
|
| 87 |
+
table.mini-status {
|
| 88 |
+
border-spacing: 0;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
/* Styles for broken links, redirects and other link states or types */
|
| 92 |
|
| 93 |
.blc-redirect .blc-link-url {
|
| 204 |
display: none;
|
| 205 |
}
|
| 206 |
|
| 207 |
+
|
| 208 |
+
/* Only show the "Details" link in the compact view. */
|
| 209 |
+
#blc-links .column-status .row-actions {
|
| 210 |
+
display: none;
|
| 211 |
+
}
|
| 212 |
+
#blc-links.compact .column-status .row-actions {
|
| 213 |
+
display: block;
|
| 214 |
+
}
|
| 215 |
+
|
| 216 |
/* Misc table styles */
|
| 217 |
|
| 218 |
.blc-link-url {
|
| 468 |
}
|
| 469 |
|
| 470 |
/* Filter-related styles */
|
| 471 |
+
.base-filter-all .blc-dismiss-action {
|
| 472 |
display: none;
|
| 473 |
}
|
| 474 |
|
css/options-page.css
CHANGED
|
@@ -235,4 +235,9 @@ ul.ui-tabs-nav li.ui-tabs-active a {
|
|
| 235 |
|
| 236 |
#blc-settings-wrap .hndle {
|
| 237 |
cursor: default;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 238 |
}
|
| 235 |
|
| 236 |
#blc-settings-wrap .hndle {
|
| 237 |
cursor: default;
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
/* Miscellaneous */
|
| 241 |
+
td:target, label:target {
|
| 242 |
+
background: #ffffaa;
|
| 243 |
}
|
includes/admin/db-schema.php
CHANGED
|
@@ -62,7 +62,8 @@ function blc_get_db_schema(){
|
|
| 62 |
`status_text` varchar(250) DEFAULT '',
|
| 63 |
`request_duration` float NOT NULL DEFAULT '0',
|
| 64 |
`timeout` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
| 65 |
-
`broken` tinyint(1) NOT NULL DEFAULT '0',
|
|
|
|
| 66 |
`may_recheck` tinyint(1) NOT NULL DEFAULT '1',
|
| 67 |
`being_checked` tinyint(1) NOT NULL DEFAULT '0',
|
| 68 |
|
| 62 |
`status_text` varchar(250) DEFAULT '',
|
| 63 |
`request_duration` float NOT NULL DEFAULT '0',
|
| 64 |
`timeout` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
| 65 |
+
`broken` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
| 66 |
+
`warning` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
| 67 |
`may_recheck` tinyint(1) NOT NULL DEFAULT '1',
|
| 68 |
`being_checked` tinyint(1) NOT NULL DEFAULT '0',
|
| 69 |
|
includes/admin/links-page-js.php
CHANGED
|
@@ -57,6 +57,7 @@ jQuery(function($){
|
|
| 57 |
var master = $(this).parents('.blc-row');
|
| 58 |
var link_id = master.attr('id').split('-')[2];
|
| 59 |
$('#link-details-'+link_id).toggle();
|
|
|
|
| 60 |
});
|
| 61 |
|
| 62 |
var ajaxInProgressHtml = '<?php echo esc_js(__('Wait...', 'broken-link-checker')); ?>';
|
|
@@ -89,9 +90,11 @@ jQuery(function($){
|
|
| 89 |
master.attr('class', classNames);
|
| 90 |
|
| 91 |
//Flash the main row green to indicate success, then remove it if the current view
|
| 92 |
-
//is supposed to show only broken links.
|
|
|
|
|
|
|
| 93 |
flashElementGreen(master, function(){
|
| 94 |
-
if (
|
| 95 |
details.remove();
|
| 96 |
master.remove();
|
| 97 |
} else {
|
|
@@ -100,7 +103,7 @@ jQuery(function($){
|
|
| 100 |
});
|
| 101 |
|
| 102 |
//Update the elements displaying the number of results for the current filter.
|
| 103 |
-
if(
|
| 104 |
alterLinkCounter(-1);
|
| 105 |
}
|
| 106 |
} else {
|
|
@@ -121,7 +124,7 @@ jQuery(function($){
|
|
| 121 |
|
| 122 |
var master = me.closest('.blc-row');
|
| 123 |
var link_id = master.attr('id').split('-')[2];
|
| 124 |
-
var should_hide_link = (blc_current_base_filter
|
| 125 |
|
| 126 |
$.post(
|
| 127 |
"<?php echo admin_url('admin-ajax.php'); ?>",
|
|
@@ -206,12 +209,134 @@ jQuery(function($){
|
|
| 206 |
return false;
|
| 207 |
});
|
| 208 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 209 |
function flashElementGreen(element, callback) {
|
| 210 |
var oldColor = element.css('background-color');
|
| 211 |
element.animate({ backgroundColor: "#E0FFB3" }, 200).animate({ backgroundColor: oldColor }, 300, callback);
|
| 212 |
}
|
| 213 |
|
| 214 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
/**
|
| 216 |
* Display the inline link editor.
|
| 217 |
*
|
|
@@ -375,84 +500,73 @@ jQuery(function($){
|
|
| 375 |
progressIndicator.hide();
|
| 376 |
updateButton.prop('disabled', false);
|
| 377 |
|
| 378 |
-
|
| 379 |
-
//An internal error occurred before the link could be edited.
|
| 380 |
-
alert(response.error);
|
| 381 |
-
} else if (response.errors.length > 0) {
|
| 382 |
-
//Build and display an error message.
|
| 383 |
-
var msg = '';
|
| 384 |
-
|
| 385 |
-
if ( response.cnt_okay > 0 ){
|
| 386 |
-
var fragment = sprintf(
|
| 387 |
-
'<?php echo esc_js(__('%d instances of the link were successfully modified.', 'broken-link-checker')); ?>',
|
| 388 |
-
response.cnt_okay
|
| 389 |
-
);
|
| 390 |
-
msg = msg + fragment + '\n';
|
| 391 |
-
if ( response.cnt_error > 0 ){
|
| 392 |
-
fragment = sprintf(
|
| 393 |
-
'<?php echo esc_js(__("However, %d instances couldn't be edited and still point to the old URL.", 'broken-link-checker')); ?>',
|
| 394 |
-
response.cnt_error
|
| 395 |
-
);
|
| 396 |
-
msg = msg + fragment + "\n";
|
| 397 |
-
}
|
| 398 |
-
} else {
|
| 399 |
-
msg = msg + '<?php echo esc_js(__('The link could not be modified.', 'broken-link-checker')); ?>\n';
|
| 400 |
-
}
|
| 401 |
-
|
| 402 |
-
msg = msg + '\n<?php echo esc_js(__("The following error(s) occurred :", 'broken-link-checker')); ?>\n* ';
|
| 403 |
-
msg = msg + response.errors.join('\n* ');
|
| 404 |
-
|
| 405 |
-
alert(msg);
|
| 406 |
-
} else {
|
| 407 |
-
//Everything went well. Update the link row with the new values.
|
| 408 |
|
| 409 |
-
|
| 410 |
-
|
| 411 |
-
|
| 412 |
-
|
| 413 |
-
replaceLinkId(linkId, response.new_link_id);
|
| 414 |
-
//Load up the new link info
|
| 415 |
-
reloadDetailsRow(response.new_link_id);
|
| 416 |
|
| 417 |
-
|
| 418 |
-
if ((newText !== null) && (response.link_text !== null)) {
|
| 419 |
-
master.data('link-text', response.link_text);
|
| 420 |
-
if (response.ui_link_text !== null) {
|
| 421 |
-
master.find('.column-new-link-text').html(response.ui_link_text);
|
| 422 |
-
}
|
| 423 |
-
}
|
| 424 |
|
| 425 |
-
|
| 426 |
-
|
| 427 |
-
|
| 428 |
-
|
| 429 |
-
|
| 430 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 431 |
|
| 432 |
-
|
| 433 |
-
|
| 434 |
-
var newStatusClass = 'link-status-' + response.status_code;
|
| 435 |
|
| 436 |
-
|
| 437 |
-
|
|
|
|
|
|
|
| 438 |
|
| 439 |
-
|
| 440 |
-
|
| 441 |
-
statusColumn.find('.link-last-checked td').html(' ');
|
| 442 |
-
statusColumn.find('.link-broken-for td').html(' ');
|
| 443 |
|
| 444 |
-
|
| 445 |
-
|
|
|
|
|
|
|
| 446 |
|
| 447 |
-
|
| 448 |
-
|
|
|
|
|
|
|
|
|
|
| 449 |
}
|
|
|
|
| 450 |
|
| 451 |
-
|
| 452 |
-
|
| 453 |
-
'json'
|
| 454 |
-
);
|
| 455 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 456 |
}
|
| 457 |
|
| 458 |
//The "Edit URL" button - displays the inline editor
|
|
@@ -598,25 +712,19 @@ jQuery(function($){
|
|
| 598 |
dialogClass : 'blc-search-container',
|
| 599 |
resizable: false
|
| 600 |
});
|
| 601 |
-
|
| 602 |
$('#blc-open-search-box').click(function(){
|
| 603 |
if ( searchForm.dialog('isOpen') ){
|
| 604 |
searchForm.dialog('close');
|
| 605 |
} else {
|
| 606 |
-
|
| 607 |
-
|
| 608 |
-
|
| 609 |
-
|
| 610 |
-
|
| 611 |
-
|
| 612 |
-
|
| 613 |
-
|
| 614 |
-
[
|
| 615 |
-
button_position.left - dialog_width + button_width/2,
|
| 616 |
-
button_position.top + button_height + 1 - $(document).scrollTop()
|
| 617 |
-
]
|
| 618 |
-
);
|
| 619 |
-
searchForm.dialog('open');
|
| 620 |
}
|
| 621 |
});
|
| 622 |
|
|
@@ -687,6 +795,24 @@ jQuery(function($){
|
|
| 687 |
}
|
| 688 |
}
|
| 689 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 690 |
|
| 691 |
//------------------------------------------------------------
|
| 692 |
// Manipulate highlight settings for permanently broken links
|
|
@@ -799,6 +925,8 @@ jQuery(function($){
|
|
| 799 |
e.preventDefault();
|
| 800 |
}
|
| 801 |
});
|
|
|
|
|
|
|
| 802 |
});
|
| 803 |
|
| 804 |
</script>
|
| 57 |
var master = $(this).parents('.blc-row');
|
| 58 |
var link_id = master.attr('id').split('-')[2];
|
| 59 |
$('#link-details-'+link_id).toggle();
|
| 60 |
+
return false;
|
| 61 |
});
|
| 62 |
|
| 63 |
var ajaxInProgressHtml = '<?php echo esc_js(__('Wait...', 'broken-link-checker')); ?>';
|
| 90 |
master.attr('class', classNames);
|
| 91 |
|
| 92 |
//Flash the main row green to indicate success, then remove it if the current view
|
| 93 |
+
//is supposed to show only broken links or warnings.
|
| 94 |
+
var should_hide_link = blc_is_broken_filter || (blc_current_base_filter == 'warnings');
|
| 95 |
+
|
| 96 |
flashElementGreen(master, function(){
|
| 97 |
+
if ( should_hide_link ){
|
| 98 |
details.remove();
|
| 99 |
master.remove();
|
| 100 |
} else {
|
| 103 |
});
|
| 104 |
|
| 105 |
//Update the elements displaying the number of results for the current filter.
|
| 106 |
+
if( should_hide_link ){
|
| 107 |
alterLinkCounter(-1);
|
| 108 |
}
|
| 109 |
} else {
|
| 124 |
|
| 125 |
var master = me.closest('.blc-row');
|
| 126 |
var link_id = master.attr('id').split('-')[2];
|
| 127 |
+
var should_hide_link = $.inArray(blc_current_base_filter, ['broken', 'redirects', 'warnings']) > -1;
|
| 128 |
|
| 129 |
$.post(
|
| 130 |
"<?php echo admin_url('admin-ajax.php'); ?>",
|
| 209 |
return false;
|
| 210 |
});
|
| 211 |
|
| 212 |
+
//The "Recheck" button.
|
| 213 |
+
$(".blc-recheck-button").click(function () {
|
| 214 |
+
var me = $(this);
|
| 215 |
+
var oldButtonHtml = me.html();
|
| 216 |
+
me.html(ajaxInProgressHtml);
|
| 217 |
+
|
| 218 |
+
var master = me.closest('.blc-row');
|
| 219 |
+
var link_id = master.attr('id').split('-')[2];
|
| 220 |
+
|
| 221 |
+
$.post(
|
| 222 |
+
"<?php echo admin_url('admin-ajax.php'); ?>",
|
| 223 |
+
{
|
| 224 |
+
'action' : 'blc_recheck',
|
| 225 |
+
'link_id' : link_id,
|
| 226 |
+
'_ajax_nonce' : '<?php echo esc_js(wp_create_nonce('blc_recheck')); ?>'
|
| 227 |
+
},
|
| 228 |
+
function (response){
|
| 229 |
+
me.html(oldButtonHtml);
|
| 230 |
+
|
| 231 |
+
if (response && (typeof(response['error']) != 'undefined')){
|
| 232 |
+
//An internal error occurred before the plugin could check the link (e.g. database error).
|
| 233 |
+
alert(response.error);
|
| 234 |
+
} else {
|
| 235 |
+
//Display the new status in the link row.
|
| 236 |
+
displayLinkStatus(master, response);
|
| 237 |
+
reloadDetailsRow(link_id);
|
| 238 |
+
|
| 239 |
+
//Flash the row green to indicate success
|
| 240 |
+
flashElementGreen(master);
|
| 241 |
+
}
|
| 242 |
+
},
|
| 243 |
+
'json'
|
| 244 |
+
);
|
| 245 |
+
|
| 246 |
+
return false;
|
| 247 |
+
});
|
| 248 |
+
|
| 249 |
+
//The "Fix redirect" action.
|
| 250 |
+
$('.blc-deredirect-button').click(function() {
|
| 251 |
+
//This action can only be used once. If it succeeds, it will no longer be applicable to the current link.
|
| 252 |
+
//If it fails, something is broken and trying again probably won't help.
|
| 253 |
+
var me = $(this);
|
| 254 |
+
me.text(ajaxInProgressHtml);
|
| 255 |
+
|
| 256 |
+
var master = me.closest('.blc-row');
|
| 257 |
+
var linkId = master.attr('id').split('-')[2];
|
| 258 |
+
var shouldHideLink = blc_current_base_filter == 'redirects';
|
| 259 |
+
var details = $('#link-details-' + linkId);
|
| 260 |
+
|
| 261 |
+
$.post(
|
| 262 |
+
"<?php echo admin_url('admin-ajax.php'); ?>",
|
| 263 |
+
{
|
| 264 |
+
'action' : 'blc_deredirect',
|
| 265 |
+
'link_id' : linkId,
|
| 266 |
+
'_ajax_nonce' : '<?php echo esc_js(wp_create_nonce('blc_deredirect')); ?>'
|
| 267 |
+
},
|
| 268 |
+
function (response){
|
| 269 |
+
me.closest('span').hide();
|
| 270 |
+
|
| 271 |
+
if (handleEditResponse(response, master, linkId, null)) {
|
| 272 |
+
if (shouldHideLink) {
|
| 273 |
+
details.remove();
|
| 274 |
+
master.remove();
|
| 275 |
+
}
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
'json'
|
| 279 |
+
);
|
| 280 |
+
|
| 281 |
+
return false;
|
| 282 |
+
});
|
| 283 |
+
|
| 284 |
function flashElementGreen(element, callback) {
|
| 285 |
var oldColor = element.css('background-color');
|
| 286 |
element.animate({ backgroundColor: "#E0FFB3" }, 200).animate({ backgroundColor: oldColor }, 300, callback);
|
| 287 |
}
|
| 288 |
|
| 289 |
|
| 290 |
+
/**
|
| 291 |
+
* Update status indicators for a link. This includes the contents of the "Status" column, CSS classes and so on.
|
| 292 |
+
*
|
| 293 |
+
* @param {Object} row Table row as a jQuery object.
|
| 294 |
+
* @param {Object} status
|
| 295 |
+
*/
|
| 296 |
+
function displayLinkStatus(row, status) {
|
| 297 |
+
//Update the status code and class.
|
| 298 |
+
var statusColumn = row.find('td.column-status');
|
| 299 |
+
if (status.status_text) {
|
| 300 |
+
statusColumn.find('.status-text').text(status.status_text);
|
| 301 |
+
}
|
| 302 |
+
statusColumn.find('.http-code').text(status.http_code ? status.http_code : '');
|
| 303 |
+
|
| 304 |
+
var oldStatusClass = row.attr('class').match(/(?:^|\s)(link-status-[^\s]+)(?:\s|$)/);
|
| 305 |
+
oldStatusClass = oldStatusClass ? oldStatusClass[1] : '';
|
| 306 |
+
var newStatusClass = 'link-status-' + status.status_code;
|
| 307 |
+
|
| 308 |
+
statusColumn.find('.link-status-row').removeClass(oldStatusClass).addClass(newStatusClass);
|
| 309 |
+
row.removeClass(oldStatusClass).addClass(newStatusClass);
|
| 310 |
+
|
| 311 |
+
//Last check time and failure duration are complicated to update, so we'll just hide them.
|
| 312 |
+
//The user can refresh the page to get the new values.
|
| 313 |
+
statusColumn.find('.link-last-checked td').html(' ');
|
| 314 |
+
statusColumn.find('.link-broken-for td').html(' ');
|
| 315 |
+
|
| 316 |
+
//The link may or may not be a redirect now.
|
| 317 |
+
row.toggleClass('blc-redirect', status.redirect_count > 0);
|
| 318 |
+
|
| 319 |
+
if (typeof status['redirect_count'] !== 'undefined') {
|
| 320 |
+
var redirectColumn = row.find('td.column-redirect-url').empty();
|
| 321 |
+
|
| 322 |
+
if (status.redirect_count > 0 && status.final_url) {
|
| 323 |
+
redirectColumn.append(
|
| 324 |
+
$(
|
| 325 |
+
'<a></a>',
|
| 326 |
+
{
|
| 327 |
+
href: status.final_url,
|
| 328 |
+
text: status.final_url,
|
| 329 |
+
title: status.final_url,
|
| 330 |
+
'class': 'blc-redirect-url',
|
| 331 |
+
target: '_blank'
|
| 332 |
+
}
|
| 333 |
+
)
|
| 334 |
+
);
|
| 335 |
+
}
|
| 336 |
+
}
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
+
|
| 340 |
/**
|
| 341 |
* Display the inline link editor.
|
| 342 |
*
|
| 500 |
progressIndicator.hide();
|
| 501 |
updateButton.prop('disabled', false);
|
| 502 |
|
| 503 |
+
handleEditResponse(response, master, linkId, newText);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 504 |
|
| 505 |
+
hideLinkEditor(editRow);
|
| 506 |
+
},
|
| 507 |
+
'json'
|
| 508 |
+
);
|
|
|
|
|
|
|
|
|
|
| 509 |
|
| 510 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 511 |
|
| 512 |
+
function handleEditResponse(response, master, linkId, newText) {
|
| 513 |
+
if (response && (typeof(response['error']) != 'undefined')){
|
| 514 |
+
//An internal error occurred before the link could be edited.
|
| 515 |
+
alert(response.error);
|
| 516 |
+
return false;
|
| 517 |
+
} else if (response.errors.length > 0) {
|
| 518 |
+
//Build and display an error message.
|
| 519 |
+
var msg = '';
|
| 520 |
+
|
| 521 |
+
if ( response.cnt_okay > 0 ){
|
| 522 |
+
var fragment = sprintf(
|
| 523 |
+
'<?php echo esc_js(__('%d instances of the link were successfully modified.', 'broken-link-checker')); ?>',
|
| 524 |
+
response.cnt_okay
|
| 525 |
+
);
|
| 526 |
+
msg = msg + fragment + '\n';
|
| 527 |
+
if ( response.cnt_error > 0 ){
|
| 528 |
+
fragment = sprintf(
|
| 529 |
+
'<?php echo esc_js(__("However, %d instances couldn't be edited and still point to the old URL.", 'broken-link-checker')); ?>',
|
| 530 |
+
response.cnt_error
|
| 531 |
+
);
|
| 532 |
+
msg = msg + fragment + "\n";
|
| 533 |
+
}
|
| 534 |
+
} else {
|
| 535 |
+
msg = msg + '<?php echo esc_js(__('The link could not be modified.', 'broken-link-checker')); ?>\n';
|
| 536 |
+
}
|
| 537 |
|
| 538 |
+
msg = msg + '\n<?php echo esc_js(__("The following error(s) occurred :", 'broken-link-checker')); ?>\n* ';
|
| 539 |
+
msg = msg + response.errors.join('\n* ');
|
|
|
|
| 540 |
|
| 541 |
+
alert(msg);
|
| 542 |
+
return false;
|
| 543 |
+
} else {
|
| 544 |
+
//Everything went well. Update the link row with the new values.
|
| 545 |
|
| 546 |
+
//Replace the displayed link URL with the new one.
|
| 547 |
+
master.find('a.blc-link-url').attr('href', response.url).text(response.url);
|
|
|
|
|
|
|
| 548 |
|
| 549 |
+
//Save the new ID
|
| 550 |
+
replaceLinkId(linkId, response.new_link_id);
|
| 551 |
+
//Load up the new link info
|
| 552 |
+
reloadDetailsRow(response.new_link_id);
|
| 553 |
|
| 554 |
+
//Update the link text if it was edited.
|
| 555 |
+
if ((newText !== null) && (response.link_text !== null)) {
|
| 556 |
+
master.data('link-text', response.link_text);
|
| 557 |
+
if (response.ui_link_text !== null) {
|
| 558 |
+
master.find('.column-new-link-text').html(response.ui_link_text);
|
| 559 |
}
|
| 560 |
+
}
|
| 561 |
|
| 562 |
+
//Update the status code and class.
|
| 563 |
+
displayLinkStatus(master, response);
|
|
|
|
|
|
|
| 564 |
|
| 565 |
+
//Flash the row green to indicate success
|
| 566 |
+
flashElementGreen(master);
|
| 567 |
+
|
| 568 |
+
return true;
|
| 569 |
+
}
|
| 570 |
}
|
| 571 |
|
| 572 |
//The "Edit URL" button - displays the inline editor
|
| 712 |
dialogClass : 'blc-search-container',
|
| 713 |
resizable: false
|
| 714 |
});
|
| 715 |
+
|
| 716 |
$('#blc-open-search-box').click(function(){
|
| 717 |
if ( searchForm.dialog('isOpen') ){
|
| 718 |
searchForm.dialog('close');
|
| 719 |
} else {
|
| 720 |
+
searchForm
|
| 721 |
+
.dialog('open')
|
| 722 |
+
.dialog('widget')
|
| 723 |
+
.position({
|
| 724 |
+
my: 'right top',
|
| 725 |
+
at: 'right bottom',
|
| 726 |
+
of: $('#blc-open-search-box')
|
| 727 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 728 |
}
|
| 729 |
});
|
| 730 |
|
| 795 |
}
|
| 796 |
}
|
| 797 |
});
|
| 798 |
+
|
| 799 |
+
//Automatically disable bulk actions that don't apply to the currently selected links.
|
| 800 |
+
$('#blc-bulk-action').focus(function() {
|
| 801 |
+
var redirectsSelected = false, brokenLinksSelected = false;
|
| 802 |
+
$('tr th.check-column input:checked', '#blc-links').each(function() {
|
| 803 |
+
var row = $(this).closest('tr');
|
| 804 |
+
if (row.hasClass('blc-redirect')) {
|
| 805 |
+
redirectsSelected = true
|
| 806 |
+
}
|
| 807 |
+
if (row.hasClass('link-status-error') || row.hasClass('link-status-warning')) {
|
| 808 |
+
brokenLinksSelected = true;
|
| 809 |
+
}
|
| 810 |
+
});
|
| 811 |
+
|
| 812 |
+
var bulkAction = $(this);
|
| 813 |
+
bulkAction.find('option[value="bulk-deredirect"]').prop('disabled', !redirectsSelected);
|
| 814 |
+
bulkAction.find('option[value="bulk-not-broken"]').prop('disabled', !brokenLinksSelected);
|
| 815 |
+
});
|
| 816 |
|
| 817 |
//------------------------------------------------------------
|
| 818 |
// Manipulate highlight settings for permanently broken links
|
| 925 |
e.preventDefault();
|
| 926 |
}
|
| 927 |
});
|
| 928 |
+
|
| 929 |
+
|
| 930 |
});
|
| 931 |
|
| 932 |
</script>
|
includes/admin/table-printer.php
CHANGED
|
@@ -235,6 +235,8 @@ class blcTablePrinter {
|
|
| 235 |
'redirect-url' => array(
|
| 236 |
'heading' => __('Redirect URL', 'broken-link-checker'),
|
| 237 |
'content' => array($this, 'column_redirect_url'),
|
|
|
|
|
|
|
| 238 |
),
|
| 239 |
);
|
| 240 |
}
|
|
@@ -286,6 +288,7 @@ class blcTablePrinter {
|
|
| 286 |
"bulk-recheck" => __('Recheck', 'broken-link-checker'),
|
| 287 |
"bulk-deredirect" => __('Fix redirects', 'broken-link-checker'),
|
| 288 |
"bulk-not-broken" => __('Mark as not broken', 'broken-link-checker'),
|
|
|
|
| 289 |
"bulk-unlink" => __('Unlink', 'broken-link-checker'),
|
| 290 |
);
|
| 291 |
if ( EMPTY_TRASH_DAYS ){
|
|
@@ -528,7 +531,11 @@ class blcTablePrinter {
|
|
| 528 |
if ( $last_check < strtotime('-10 years') ){
|
| 529 |
_e('Never', 'broken-link-checker');
|
| 530 |
} else {
|
| 531 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 532 |
}
|
| 533 |
?></span></li>
|
| 534 |
|
|
@@ -557,7 +564,7 @@ class blcTablePrinter {
|
|
| 557 |
print count($link->get_instances());
|
| 558 |
?></span></li>
|
| 559 |
|
| 560 |
-
<?php if ( $link->broken && (intval( $link->check_count ) > 0) ){ ?>
|
| 561 |
<li><br/>
|
| 562 |
<?php
|
| 563 |
printf(
|
|
@@ -645,6 +652,15 @@ class blcTablePrinter {
|
|
| 645 |
}
|
| 646 |
|
| 647 |
echo '</table>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 648 |
}
|
| 649 |
|
| 650 |
|
|
@@ -659,35 +675,71 @@ class blcTablePrinter {
|
|
| 659 |
//Output inline action links for the link/URL
|
| 660 |
$actions = array();
|
| 661 |
|
| 662 |
-
$actions['edit'] = "<
|
| 663 |
|
| 664 |
-
$actions['delete'] = "<
|
| 665 |
"href='javascript:void(0);'>" . __('Unlink', 'broken-link-checker') . "</a>";
|
| 666 |
|
| 667 |
-
if ( $link->broken ){
|
| 668 |
-
$actions['discard'] = sprintf(
|
| 669 |
-
'<
|
| 670 |
esc_attr(__('Remove this link from the list of broken links and mark it as valid', 'broken-link-checker')),
|
| 671 |
__('Not broken', 'broken-link-checker')
|
| 672 |
);
|
| 673 |
}
|
| 674 |
|
| 675 |
-
if ( !$link->dismissed && ($link->broken || ($link->redirect_count > 0)) ) {
|
| 676 |
-
$actions['dismiss'] = sprintf(
|
| 677 |
-
'<
|
| 678 |
esc_attr(__('Hide this link and do not report it again unless its status changes' , 'broken-link-checker')),
|
| 679 |
__('Dismiss', 'broken-link-checker')
|
| 680 |
);
|
| 681 |
} else if ( $link->dismissed ) {
|
| 682 |
-
$actions['undismiss'] = sprintf(
|
| 683 |
-
'<
|
| 684 |
esc_attr(__('Undismiss this link', 'broken-link-checker')),
|
| 685 |
__('Undismiss', 'broken-link-checker')
|
| 686 |
);
|
| 687 |
}
|
| 688 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 689 |
echo '<div class="row-actions">';
|
| 690 |
-
echo implode('
|
| 691 |
echo '</div>';
|
| 692 |
|
| 693 |
?>
|
| 235 |
'redirect-url' => array(
|
| 236 |
'heading' => __('Redirect URL', 'broken-link-checker'),
|
| 237 |
'content' => array($this, 'column_redirect_url'),
|
| 238 |
+
'sortable' => true,
|
| 239 |
+
'orderby' => 'redirect_url',
|
| 240 |
),
|
| 241 |
);
|
| 242 |
}
|
| 288 |
"bulk-recheck" => __('Recheck', 'broken-link-checker'),
|
| 289 |
"bulk-deredirect" => __('Fix redirects', 'broken-link-checker'),
|
| 290 |
"bulk-not-broken" => __('Mark as not broken', 'broken-link-checker'),
|
| 291 |
+
"bulk-dismiss" => __('Dismiss', 'broken-link-checker'),
|
| 292 |
"bulk-unlink" => __('Unlink', 'broken-link-checker'),
|
| 293 |
);
|
| 294 |
if ( EMPTY_TRASH_DAYS ){
|
| 531 |
if ( $last_check < strtotime('-10 years') ){
|
| 532 |
_e('Never', 'broken-link-checker');
|
| 533 |
} else {
|
| 534 |
+
printf(
|
| 535 |
+
'<time datetime="%s">%s</time>',
|
| 536 |
+
esc_attr(date('c', $last_check)),
|
| 537 |
+
date_i18n(get_option('date_format'), $last_check)
|
| 538 |
+
);
|
| 539 |
}
|
| 540 |
?></span></li>
|
| 541 |
|
| 564 |
print count($link->get_instances());
|
| 565 |
?></span></li>
|
| 566 |
|
| 567 |
+
<?php if ( ($link->broken || $link->warning) && (intval( $link->check_count ) > 0) ){ ?>
|
| 568 |
<li><br/>
|
| 569 |
<?php
|
| 570 |
printf(
|
| 652 |
}
|
| 653 |
|
| 654 |
echo '</table>';
|
| 655 |
+
|
| 656 |
+
//"Details" link.
|
| 657 |
+
echo '<div class="row-actions">';
|
| 658 |
+
printf(
|
| 659 |
+
'<span><a href="#" class="blc-details-button" title="%s">%s</a></span>',
|
| 660 |
+
esc_attr(__('Show more info about this link', 'broken-link-checker')),
|
| 661 |
+
_x('Details', 'link in the "Status" column', 'broken-link-checker')
|
| 662 |
+
);
|
| 663 |
+
echo '</div>';
|
| 664 |
}
|
| 665 |
|
| 666 |
|
| 675 |
//Output inline action links for the link/URL
|
| 676 |
$actions = array();
|
| 677 |
|
| 678 |
+
$actions['edit'] = "<a href='javascript:void(0)' class='blc-edit-button' title='" . esc_attr( __('Edit this link' , 'broken-link-checker') ) . "'>". __('Edit URL' , 'broken-link-checker') ."</a>";
|
| 679 |
|
| 680 |
+
$actions['delete'] = "<a class='submitdelete blc-unlink-button' title='" . esc_attr( __('Remove this link from all posts', 'broken-link-checker') ). "' ".
|
| 681 |
"href='javascript:void(0);'>" . __('Unlink', 'broken-link-checker') . "</a>";
|
| 682 |
|
| 683 |
+
if ( $link->broken || $link->warning ){
|
| 684 |
+
$actions['blc-discard-action'] = sprintf(
|
| 685 |
+
'<a href="#" title="%s" class="blc-discard-button">%s</a>',
|
| 686 |
esc_attr(__('Remove this link from the list of broken links and mark it as valid', 'broken-link-checker')),
|
| 687 |
__('Not broken', 'broken-link-checker')
|
| 688 |
);
|
| 689 |
}
|
| 690 |
|
| 691 |
+
if ( !$link->dismissed && ($link->broken || $link->warning || ($link->redirect_count > 0)) ) {
|
| 692 |
+
$actions['blc-dismiss-action'] = sprintf(
|
| 693 |
+
'<a href="#" title="%s" class="blc-dismiss-button">%s</a>',
|
| 694 |
esc_attr(__('Hide this link and do not report it again unless its status changes' , 'broken-link-checker')),
|
| 695 |
__('Dismiss', 'broken-link-checker')
|
| 696 |
);
|
| 697 |
} else if ( $link->dismissed ) {
|
| 698 |
+
$actions['blc-undismiss-action'] = sprintf(
|
| 699 |
+
'<a href="#" title="%s" class="blc-undismiss-button">%s</a>',
|
| 700 |
esc_attr(__('Undismiss this link', 'broken-link-checker')),
|
| 701 |
__('Undismiss', 'broken-link-checker')
|
| 702 |
);
|
| 703 |
}
|
| 704 |
|
| 705 |
+
$actions['blc-recheck-action'] = sprintf(
|
| 706 |
+
'<a href="#" class="blc-recheck-button">%s</a>',
|
| 707 |
+
__('Recheck', 'broken-link-checker')
|
| 708 |
+
);
|
| 709 |
+
|
| 710 |
+
if ( $link->redirect_count > 0 && !empty($link->final_url) && ($link->url != $link->final_url) ) {
|
| 711 |
+
//TODO: Check if at least one instance has an editable URL. Otherwise this won't work.
|
| 712 |
+
$actions['blc-deredirect-action'] = sprintf(
|
| 713 |
+
'<a href="#" class="blc-deredirect-button" title="%s">%s</a>',
|
| 714 |
+
__('Replace this redirect with a direct link', 'broken-link-checker'),
|
| 715 |
+
_x('Fix redirect', 'link action; replace one redirect with a direct link', 'broken-link-checker')
|
| 716 |
+
);
|
| 717 |
+
}
|
| 718 |
+
|
| 719 |
+
//Only show the enabled actions.
|
| 720 |
+
$conf = blc_get_configuration();
|
| 721 |
+
foreach($conf->get('show_link_actions', $actions) as $name => $enabled) {
|
| 722 |
+
if ( !$enabled ) {
|
| 723 |
+
unset($actions[$name]);
|
| 724 |
+
}
|
| 725 |
+
}
|
| 726 |
+
|
| 727 |
+
//Wrap actions with <span></span> and separate them with | characters.
|
| 728 |
+
//Basically, this emulates the HTML structure that WP uses for post actions under Posts -> All Posts.
|
| 729 |
+
$spans = array();
|
| 730 |
+
$is_first_action = true;
|
| 731 |
+
foreach($actions as $name => $html) {
|
| 732 |
+
$spans[] = sprintf(
|
| 733 |
+
'<span class="%s">%s%s</span>',
|
| 734 |
+
esc_attr($name),
|
| 735 |
+
$is_first_action ? '' : ' | ',
|
| 736 |
+
$html
|
| 737 |
+
);
|
| 738 |
+
$is_first_action = false;
|
| 739 |
+
}
|
| 740 |
+
|
| 741 |
echo '<div class="row-actions">';
|
| 742 |
+
echo implode('', $spans);
|
| 743 |
echo '</div>';
|
| 744 |
|
| 745 |
?>
|
includes/any-post.php
CHANGED
|
@@ -223,7 +223,26 @@ class blcPostTypeOverlord {
|
|
| 223 |
$elapsed = microtime(true) - $start;
|
| 224 |
$blclog->debug($q);
|
| 225 |
$blclog->log(sprintf('...... %d rows deleted in %.3f seconds', $wpdb->rows_affected, $elapsed));
|
| 226 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
//Remove the 'synched' flag from all posts that have been updated
|
| 228 |
//since the last time they were parsed/synchronized.
|
| 229 |
$blclog->log('...... Marking changed posts as unsynched');
|
|
@@ -280,7 +299,7 @@ class blcPostTypeOverlord {
|
|
| 280 |
return $content;
|
| 281 |
}
|
| 282 |
|
| 283 |
-
//Retrieve info about all
|
| 284 |
$q = "
|
| 285 |
SELECT instances.raw_url
|
| 286 |
FROM {$wpdb->prefix}blc_instances AS instances JOIN {$wpdb->prefix}blc_links AS links
|
| 223 |
$elapsed = microtime(true) - $start;
|
| 224 |
$blclog->debug($q);
|
| 225 |
$blclog->log(sprintf('...... %d rows deleted in %.3f seconds', $wpdb->rows_affected, $elapsed));
|
| 226 |
+
|
| 227 |
+
//Delete records where the post status is not one of the enabled statuses.
|
| 228 |
+
$blclog->log('...... Deleting synch records for posts that have a disallowed status');
|
| 229 |
+
$start = microtime(true);
|
| 230 |
+
$q = "DELETE synch.*
|
| 231 |
+
FROM
|
| 232 |
+
{$wpdb->prefix}blc_synch AS synch
|
| 233 |
+
LEFT JOIN {$wpdb->posts} AS posts
|
| 234 |
+
ON (synch.container_id = posts.ID and synch.container_type = posts.post_type)
|
| 235 |
+
WHERE
|
| 236 |
+
posts.post_status NOT IN (%s)";
|
| 237 |
+
$q = sprintf(
|
| 238 |
+
$q,
|
| 239 |
+
"'" . implode("', '", $escaped_post_statuses) . "'"
|
| 240 |
+
);
|
| 241 |
+
$wpdb->query( $q );
|
| 242 |
+
$elapsed = microtime(true) - $start;
|
| 243 |
+
$blclog->debug($q);
|
| 244 |
+
$blclog->log(sprintf('...... %d rows deleted in %.3f seconds', $wpdb->rows_affected, $elapsed));
|
| 245 |
+
|
| 246 |
//Remove the 'synched' flag from all posts that have been updated
|
| 247 |
//since the last time they were parsed/synchronized.
|
| 248 |
$blclog->log('...... Marking changed posts as unsynched');
|
| 299 |
return $content;
|
| 300 |
}
|
| 301 |
|
| 302 |
+
//Retrieve info about all occurrences of broken links in the current post
|
| 303 |
$q = "
|
| 304 |
SELECT instances.raw_url
|
| 305 |
FROM {$wpdb->prefix}blc_instances AS instances JOIN {$wpdb->prefix}blc_links AS links
|
includes/link-query.php
CHANGED
|
@@ -18,6 +18,16 @@ class blcLinkQuery {
|
|
| 18 |
function __construct(){
|
| 19 |
//Init. the available native filters.
|
| 20 |
$this->native_filters = array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
'broken' => array(
|
| 22 |
'params' => array(
|
| 23 |
'where_expr' => '( broken = 1 )',
|
|
@@ -27,17 +37,27 @@ class blcLinkQuery {
|
|
| 27 |
'heading' => __('Broken Links', 'broken-link-checker'),
|
| 28 |
'heading_zero' => __('No broken links found', 'broken-link-checker'),
|
| 29 |
'native' => true,
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
'where_expr' => '( redirect_count > 0 )',
|
| 34 |
-
|
| 35 |
),
|
| 36 |
'name' => __('Redirects', 'broken-link-checker'),
|
| 37 |
'heading' => __('Redirected Links', 'broken-link-checker'),
|
| 38 |
'heading_zero' => __('No redirects found', 'broken-link-checker'),
|
| 39 |
'native' => true,
|
| 40 |
-
|
| 41 |
|
| 42 |
'dismissed' => array(
|
| 43 |
'params' => array(
|
|
@@ -48,17 +68,13 @@ class blcLinkQuery {
|
|
| 48 |
'heading_zero' => __('No dismissed links found', 'broken-link-checker'),
|
| 49 |
'native' => true,
|
| 50 |
),
|
| 51 |
-
|
| 52 |
-
'all' => array(
|
| 53 |
-
'params' => array(
|
| 54 |
-
'where_expr' => '1',
|
| 55 |
-
),
|
| 56 |
-
'name' => __('All', 'broken-link-checker'),
|
| 57 |
-
'heading' => __('Detected Links', 'broken-link-checker'),
|
| 58 |
-
'heading_zero' => __('No links found (yet)', 'broken-link-checker'),
|
| 59 |
-
'native' => true,
|
| 60 |
-
),
|
| 61 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
//Create the special "search" filter
|
| 64 |
$this->search_filter = array(
|
|
@@ -446,6 +462,7 @@ class blcLinkQuery {
|
|
| 446 |
$allowed_columns = array(
|
| 447 |
'url' => 'links.url',
|
| 448 |
'link_text' => 'instances.link_text',
|
|
|
|
| 449 |
);
|
| 450 |
$column = $params['orderby'];
|
| 451 |
|
|
@@ -455,6 +472,11 @@ class blcLinkQuery {
|
|
| 455 |
}
|
| 456 |
|
| 457 |
if ( array_key_exists($column, $allowed_columns) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 458 |
$order_exprs[] = $allowed_columns[$column] . ' ' . $direction;
|
| 459 |
}
|
| 460 |
}
|
| 18 |
function __construct(){
|
| 19 |
//Init. the available native filters.
|
| 20 |
$this->native_filters = array(
|
| 21 |
+
'all' => array(
|
| 22 |
+
'params' => array(
|
| 23 |
+
'where_expr' => '1',
|
| 24 |
+
),
|
| 25 |
+
'name' => __('All', 'broken-link-checker'),
|
| 26 |
+
'heading' => __('Detected Links', 'broken-link-checker'),
|
| 27 |
+
'heading_zero' => __('No links found (yet)', 'broken-link-checker'),
|
| 28 |
+
'native' => true,
|
| 29 |
+
),
|
| 30 |
+
|
| 31 |
'broken' => array(
|
| 32 |
'params' => array(
|
| 33 |
'where_expr' => '( broken = 1 )',
|
| 37 |
'heading' => __('Broken Links', 'broken-link-checker'),
|
| 38 |
'heading_zero' => __('No broken links found', 'broken-link-checker'),
|
| 39 |
'native' => true,
|
| 40 |
+
),
|
| 41 |
+
'warnings' => array(
|
| 42 |
+
'params' => array(
|
| 43 |
+
'where_expr' => '( warning = 1 )',
|
| 44 |
+
's_include_dismissed' => false,
|
| 45 |
+
),
|
| 46 |
+
'name' => _x('Warnings', 'filter name', 'broken-link-checker'),
|
| 47 |
+
'heading' => __('Warnings', 'filter heading', 'broken-link-checker'),
|
| 48 |
+
'heading_zero' => __('No warnings found', 'broken-link-checker'),
|
| 49 |
+
'native' => true,
|
| 50 |
+
),
|
| 51 |
+
'redirects' => array(
|
| 52 |
+
'params' => array(
|
| 53 |
'where_expr' => '( redirect_count > 0 )',
|
| 54 |
+
's_include_dismissed' => false,
|
| 55 |
),
|
| 56 |
'name' => __('Redirects', 'broken-link-checker'),
|
| 57 |
'heading' => __('Redirected Links', 'broken-link-checker'),
|
| 58 |
'heading_zero' => __('No redirects found', 'broken-link-checker'),
|
| 59 |
'native' => true,
|
| 60 |
+
),
|
| 61 |
|
| 62 |
'dismissed' => array(
|
| 63 |
'params' => array(
|
| 68 |
'heading_zero' => __('No dismissed links found', 'broken-link-checker'),
|
| 69 |
'native' => true,
|
| 70 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
);
|
| 72 |
+
|
| 73 |
+
//The user can turn off warnings. In that case, all errors will show up in the "broken" filter instead.
|
| 74 |
+
$conf = blc_get_configuration();
|
| 75 |
+
if ( !$conf->get('warnings_enabled') ) {
|
| 76 |
+
unset($this->native_filters['warnings']);
|
| 77 |
+
}
|
| 78 |
|
| 79 |
//Create the special "search" filter
|
| 80 |
$this->search_filter = array(
|
| 462 |
$allowed_columns = array(
|
| 463 |
'url' => 'links.url',
|
| 464 |
'link_text' => 'instances.link_text',
|
| 465 |
+
'redirect_url' => 'links.final_url',
|
| 466 |
);
|
| 467 |
$column = $params['orderby'];
|
| 468 |
|
| 472 |
}
|
| 473 |
|
| 474 |
if ( array_key_exists($column, $allowed_columns) ) {
|
| 475 |
+
if ( $column === 'redirect_url' ) {
|
| 476 |
+
//Sort links that are not redirects last.
|
| 477 |
+
$order_exprs[] = '(links.redirect_count > 0) DESC';
|
| 478 |
+
}
|
| 479 |
+
|
| 480 |
$order_exprs[] = $allowed_columns[$column] . ' ' . $direction;
|
| 481 |
}
|
| 482 |
}
|
includes/links.php
CHANGED
|
@@ -34,6 +34,7 @@ class blcLink {
|
|
| 34 |
var $final_url = '';
|
| 35 |
|
| 36 |
var $broken = false;
|
|
|
|
| 37 |
var $first_failure = 0;
|
| 38 |
var $last_success = 0;
|
| 39 |
var $may_recheck = 1;
|
|
@@ -123,6 +124,7 @@ class blcLink {
|
|
| 123 |
'timeout' => 'bool',
|
| 124 |
'result_hash' => '%s',
|
| 125 |
'broken' => 'bool',
|
|
|
|
| 126 |
'false_positive' => 'bool',
|
| 127 |
'may_recheck' => 'bool',
|
| 128 |
'being_checked' => 'bool',
|
|
@@ -245,6 +247,7 @@ class blcLink {
|
|
| 245 |
|
| 246 |
$defaults = array(
|
| 247 |
'broken' => false,
|
|
|
|
| 248 |
'http_code' => 0,
|
| 249 |
'redirect_count' => 0,
|
| 250 |
'final_url' => $this->url,
|
|
@@ -277,20 +280,19 @@ class blcLink {
|
|
| 277 |
//Check the link
|
| 278 |
$rez = $checker->check($this->get_ascii_url());
|
| 279 |
//FB::info($rez, "Check results");
|
| 280 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 281 |
//Filter the returned array to leave only the restricted set of keys that we're interested in.
|
| 282 |
-
$results =
|
| 283 |
-
|
| 284 |
-
if ( array_key_exists($name, $defaults) ){
|
| 285 |
-
$results[$name] = $value;
|
| 286 |
-
}
|
| 287 |
-
}
|
| 288 |
-
$results = array_merge($defaults, $results);
|
| 289 |
-
|
| 290 |
//The result hash is special - see blcLink::status_changed()
|
| 291 |
$new_result_hash = $results['result_hash'];
|
| 292 |
unset($results['result_hash']);
|
| 293 |
-
|
| 294 |
//Update the object's fields with the new results
|
| 295 |
$this->set_values($results);
|
| 296 |
|
|
@@ -305,6 +307,137 @@ class blcLink {
|
|
| 305 |
|
| 306 |
return $this->broken;
|
| 307 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 308 |
|
| 309 |
/**
|
| 310 |
* A helper method used to update timestamps & other state-dependent fields
|
|
@@ -333,10 +466,11 @@ class blcLink {
|
|
| 333 |
//If the link has been marked as a (probable) false positive,
|
| 334 |
//mark it as broken *only* if the new result is different from
|
| 335 |
//the one that caused the user to mark it as a false positive.
|
| 336 |
-
if ( $broken ){
|
| 337 |
if ( $this->result_hash == $new_result_hash ){
|
| 338 |
//Got the same result as before, assume it's still incorrect and the link actually works.
|
| 339 |
-
$broken = false;
|
|
|
|
| 340 |
} else {
|
| 341 |
//Got a new result. Assume (quite optimistically) that it's not a false positive.
|
| 342 |
$this->false_positive = false;
|
|
@@ -353,7 +487,7 @@ class blcLink {
|
|
| 353 |
|
| 354 |
//Update timestamps
|
| 355 |
$this->last_check = $this->last_check_attempt;
|
| 356 |
-
if ( $this->broken ){
|
| 357 |
if ( empty($this->first_failure) ){
|
| 358 |
$this->first_failure = $this->last_check;
|
| 359 |
}
|
|
@@ -364,10 +498,10 @@ class blcLink {
|
|
| 364 |
}
|
| 365 |
|
| 366 |
//Add a line indicating link status to the log
|
| 367 |
-
if (
|
| 368 |
-
$this->log .= "\n" . __("Link is valid.", 'broken-link-checker');
|
| 369 |
-
} else {
|
| 370 |
$this->log .= "\n" . __("Link is broken.", 'broken-link-checker');
|
|
|
|
|
|
|
| 371 |
}
|
| 372 |
}
|
| 373 |
|
|
@@ -381,6 +515,11 @@ class blcLink {
|
|
| 381 |
global $wpdb, $blclog; /** @var wpdb $wpdb */
|
| 382 |
|
| 383 |
if ( !$this->valid() ) return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 384 |
|
| 385 |
//Make a list of fields to be saved and their values in DB format
|
| 386 |
$values = array();
|
|
@@ -526,7 +665,7 @@ class blcLink {
|
|
| 526 |
function to_native_format($values){
|
| 527 |
|
| 528 |
foreach($values as $name => $value){
|
| 529 |
-
//Don't process
|
| 530 |
if ( !isset($this->field_format[$name]) ){
|
| 531 |
continue;
|
| 532 |
}
|
|
@@ -864,8 +1003,7 @@ class blcLink {
|
|
| 864 |
|
| 865 |
} else {
|
| 866 |
|
| 867 |
-
if ( $this->broken ){
|
| 868 |
-
|
| 869 |
$code = BLC_LINK_STATUS_WARNING;
|
| 870 |
$text = __('Unknown Error', 'link status', 'broken-link-checker');
|
| 871 |
|
|
@@ -916,6 +1054,32 @@ class blcLink {
|
|
| 916 |
return blcUtility::idn_to_ascii($this->url);
|
| 917 |
}
|
| 918 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 919 |
/**
|
| 920 |
* Remove the query string from an URL.
|
| 921 |
*
|
| 34 |
var $final_url = '';
|
| 35 |
|
| 36 |
var $broken = false;
|
| 37 |
+
public $warning = false;
|
| 38 |
var $first_failure = 0;
|
| 39 |
var $last_success = 0;
|
| 40 |
var $may_recheck = 1;
|
| 124 |
'timeout' => 'bool',
|
| 125 |
'result_hash' => '%s',
|
| 126 |
'broken' => 'bool',
|
| 127 |
+
'warning' => 'bool',
|
| 128 |
'false_positive' => 'bool',
|
| 129 |
'may_recheck' => 'bool',
|
| 130 |
'being_checked' => 'bool',
|
| 247 |
|
| 248 |
$defaults = array(
|
| 249 |
'broken' => false,
|
| 250 |
+
'warning' => false,
|
| 251 |
'http_code' => 0,
|
| 252 |
'redirect_count' => 0,
|
| 253 |
'final_url' => $this->url,
|
| 280 |
//Check the link
|
| 281 |
$rez = $checker->check($this->get_ascii_url());
|
| 282 |
//FB::info($rez, "Check results");
|
| 283 |
+
|
| 284 |
+
$results = array_merge($defaults, $rez);
|
| 285 |
+
|
| 286 |
+
//Some HTTP errors can be treated as warnings.
|
| 287 |
+
$results = $this->decide_warning_state($results);
|
| 288 |
+
|
| 289 |
//Filter the returned array to leave only the restricted set of keys that we're interested in.
|
| 290 |
+
$results = array_intersect_key($results, $defaults);
|
| 291 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 292 |
//The result hash is special - see blcLink::status_changed()
|
| 293 |
$new_result_hash = $results['result_hash'];
|
| 294 |
unset($results['result_hash']);
|
| 295 |
+
|
| 296 |
//Update the object's fields with the new results
|
| 297 |
$this->set_values($results);
|
| 298 |
|
| 307 |
|
| 308 |
return $this->broken;
|
| 309 |
}
|
| 310 |
+
|
| 311 |
+
/**
|
| 312 |
+
* Decide whether the result of the latest check means that the link is really broken
|
| 313 |
+
* or should just be reported as a warning.
|
| 314 |
+
*
|
| 315 |
+
* @param array $check_results
|
| 316 |
+
* @return array
|
| 317 |
+
*/
|
| 318 |
+
private function decide_warning_state($check_results) {
|
| 319 |
+
if ( !$check_results['broken'] && !$check_results['warning'] ) {
|
| 320 |
+
//Nothing to do, this is a working link.
|
| 321 |
+
return $check_results;
|
| 322 |
+
}
|
| 323 |
+
|
| 324 |
+
$configuration = blc_get_configuration();
|
| 325 |
+
if ( !$configuration->get('warnings_enabled', true) ) {
|
| 326 |
+
//The user wants all failures to be reported as "broken", regardless of severity.
|
| 327 |
+
if ( $check_results['warning'] ) {
|
| 328 |
+
$check_results['broken'] = true;
|
| 329 |
+
$check_results['warning'] = false;
|
| 330 |
+
}
|
| 331 |
+
return $check_results;
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
+
$warning_reason = null;
|
| 335 |
+
$failure_count = $this->check_count;
|
| 336 |
+
$failure_duration = ($this->first_failure != 0) ? (time() - $this->first_failure) : 0;
|
| 337 |
+
//These could be configurable, but lets put that off until someone actually asks for it.
|
| 338 |
+
$duration_threshold = 24 * 3600;
|
| 339 |
+
$count_threshold = 3;
|
| 340 |
+
|
| 341 |
+
//We can't just use ($check_results['status_code'] == 'warning' because some "warning" problems are not
|
| 342 |
+
//temporary. For example, region-restricted YouTube videos use the "warning" status code.
|
| 343 |
+
$maybe_temporary_error = false;
|
| 344 |
+
|
| 345 |
+
//Some basic heuristics to determine if this failure might be temporary.
|
| 346 |
+
//----------------------------------------------------------------------
|
| 347 |
+
if ( $check_results['timeout'] ) {
|
| 348 |
+
$maybe_temporary_error = true;
|
| 349 |
+
$warning_reason = 'Timeouts are sometimes caused by high server load or other temporary issues.';
|
| 350 |
+
}
|
| 351 |
+
|
| 352 |
+
$error_code = isset($check_results['error_code']) ? $check_results['error_code'] : '';
|
| 353 |
+
if ( $error_code === 'connection_failed' ) {
|
| 354 |
+
$maybe_temporary_error = true;
|
| 355 |
+
$warning_reason = 'Connection failures are sometimes caused by high server load or other temporary issues.';
|
| 356 |
+
}
|
| 357 |
+
|
| 358 |
+
$http_code = intval($check_results['http_code']);
|
| 359 |
+
$temporary_http_errors = array(
|
| 360 |
+
408, //Request timeout. Probably a plugin bug, but could just be an overloaded client server.
|
| 361 |
+
420, //Custom Twitter code returned when the client gets rate-limited.
|
| 362 |
+
429, //Client has sent too many requests in a given amount of time.
|
| 363 |
+
502, //Bad Gateway. Often a sign of a temporarily overloaded or misconfigured server.
|
| 364 |
+
503, //Service Unavailable.
|
| 365 |
+
504, //Gateway Timeout.
|
| 366 |
+
509, //Bandwidth Limit Exceeded.
|
| 367 |
+
520, //CloudFlare-specific "Origin Error" code.
|
| 368 |
+
522, //CloudFlare-specific "Connection timed out" code.
|
| 369 |
+
524, //Another CloudFlare-specific timeout code.
|
| 370 |
+
);
|
| 371 |
+
if ( in_array($http_code, $temporary_http_errors) ) {
|
| 372 |
+
$maybe_temporary_error = true;
|
| 373 |
+
|
| 374 |
+
if ( in_array($http_code, array(502, 503, 504, 509)) ) {
|
| 375 |
+
$warning_reason = sprintf(
|
| 376 |
+
'HTTP error %d usually means that the site is down due to high server load or a configuration problem. '
|
| 377 |
+
. 'This error is often temporary and will go away after while.',
|
| 378 |
+
$http_code
|
| 379 |
+
);
|
| 380 |
+
} else {
|
| 381 |
+
$warning_reason = 'This HTTP error is often temporary.';
|
| 382 |
+
}
|
| 383 |
+
}
|
| 384 |
+
|
| 385 |
+
//----------------------------------------------------------------------
|
| 386 |
+
|
| 387 |
+
//Attempt to detect false positives.
|
| 388 |
+
$suspected_false_positive = false;
|
| 389 |
+
|
| 390 |
+
//A "403 Forbidden" error on an internal link usually means something on the site is blocking automated
|
| 391 |
+
//requests. Possible culprits include hotlink protection rules in .htaccess, badly configured IDS, and so on.
|
| 392 |
+
$is_internal_link = $this->is_internal_to_domain();
|
| 393 |
+
if ( $is_internal_link && ($http_code == 403) ) {
|
| 394 |
+
$suspected_false_positive = true;
|
| 395 |
+
$warning_reason = 'This might be a false positive. Make sure the link is not password-protected, '
|
| 396 |
+
. 'and that your server is not set up to block automated requests.';
|
| 397 |
+
}
|
| 398 |
+
|
| 399 |
+
//Some hosting providers turn off loopback connections. This causes all internal links to be reported as broken.
|
| 400 |
+
if ( $is_internal_link && in_array($error_code, array('connection_failed', 'couldnt_resolve_host')) ) {
|
| 401 |
+
$suspected_false_positive = true;
|
| 402 |
+
$warning_reason = 'This is probably a false positive. ';
|
| 403 |
+
if ( $error_code === 'connection_failed' ) {
|
| 404 |
+
$warning_reason .= 'The plugin could not connect to your site. That usually means that your '
|
| 405 |
+
. 'hosting provider has disabled loopback connections.';
|
| 406 |
+
} elseif ( $error_code === 'couldnt_resolve_host' ) {
|
| 407 |
+
$warning_reason .= 'The plugin could not connect to your site because DNS resolution failed. '
|
| 408 |
+
. 'This could mean DNS is configured incorrectly on your server.';
|
| 409 |
+
}
|
| 410 |
+
}
|
| 411 |
+
|
| 412 |
+
//----------------------------------------------------------------------
|
| 413 |
+
|
| 414 |
+
//Temporary problems and suspected false positives start out as warnings. False positives stay that way
|
| 415 |
+
//indefinitely because they are usually caused by bugs and server configuration issues, not temporary downtime.
|
| 416 |
+
if ( ($maybe_temporary_error && ($failure_count < $count_threshold)) || $suspected_false_positive ) {
|
| 417 |
+
$check_results['warning'] = true;
|
| 418 |
+
$check_results['broken'] = false;
|
| 419 |
+
}
|
| 420 |
+
|
| 421 |
+
//Upgrade temporary warnings to "broken" after X consecutive failures or Y hours, whichever comes first.
|
| 422 |
+
$threshold_reached = ($failure_count >= $count_threshold) || ($failure_duration >= $duration_threshold);
|
| 423 |
+
if ( $check_results['warning'] ) {
|
| 424 |
+
if ( ($maybe_temporary_error && $threshold_reached) && !$suspected_false_positive ) {
|
| 425 |
+
$check_results['warning'] = false;
|
| 426 |
+
$check_results['broken'] = true;
|
| 427 |
+
}
|
| 428 |
+
}
|
| 429 |
+
|
| 430 |
+
if ( !empty($warning_reason) && $check_results['warning'] ) {
|
| 431 |
+
$formatted_reason = "\n==========\n"
|
| 432 |
+
. 'Severity: Warning' . "\n"
|
| 433 |
+
. 'Reason: ' . trim($warning_reason)
|
| 434 |
+
. "\n==========\n";
|
| 435 |
+
|
| 436 |
+
$check_results['log'] .= $formatted_reason;
|
| 437 |
+
}
|
| 438 |
+
|
| 439 |
+
return $check_results;
|
| 440 |
+
}
|
| 441 |
|
| 442 |
/**
|
| 443 |
* A helper method used to update timestamps & other state-dependent fields
|
| 466 |
//If the link has been marked as a (probable) false positive,
|
| 467 |
//mark it as broken *only* if the new result is different from
|
| 468 |
//the one that caused the user to mark it as a false positive.
|
| 469 |
+
if ( $broken || $this->warning ){
|
| 470 |
if ( $this->result_hash == $new_result_hash ){
|
| 471 |
//Got the same result as before, assume it's still incorrect and the link actually works.
|
| 472 |
+
$broken = false;
|
| 473 |
+
$this->warning = false;
|
| 474 |
} else {
|
| 475 |
//Got a new result. Assume (quite optimistically) that it's not a false positive.
|
| 476 |
$this->false_positive = false;
|
| 487 |
|
| 488 |
//Update timestamps
|
| 489 |
$this->last_check = $this->last_check_attempt;
|
| 490 |
+
if ( $this->broken || $this->warning ){
|
| 491 |
if ( empty($this->first_failure) ){
|
| 492 |
$this->first_failure = $this->last_check;
|
| 493 |
}
|
| 498 |
}
|
| 499 |
|
| 500 |
//Add a line indicating link status to the log
|
| 501 |
+
if ( $this->broken || $this->warning ) {
|
|
|
|
|
|
|
| 502 |
$this->log .= "\n" . __("Link is broken.", 'broken-link-checker');
|
| 503 |
+
} else {
|
| 504 |
+
$this->log .= "\n" . __("Link is valid.", 'broken-link-checker');
|
| 505 |
}
|
| 506 |
}
|
| 507 |
|
| 515 |
global $wpdb, $blclog; /** @var wpdb $wpdb */
|
| 516 |
|
| 517 |
if ( !$this->valid() ) return false;
|
| 518 |
+
|
| 519 |
+
//A link can't be broken and treated as a warning at the same time.
|
| 520 |
+
if ( $this->broken && $this->warning ) {
|
| 521 |
+
$this->warning = false;
|
| 522 |
+
}
|
| 523 |
|
| 524 |
//Make a list of fields to be saved and their values in DB format
|
| 525 |
$values = array();
|
| 665 |
function to_native_format($values){
|
| 666 |
|
| 667 |
foreach($values as $name => $value){
|
| 668 |
+
//Don't process fields that don't exist in the blc_links table.
|
| 669 |
if ( !isset($this->field_format[$name]) ){
|
| 670 |
continue;
|
| 671 |
}
|
| 1003 |
|
| 1004 |
} else {
|
| 1005 |
|
| 1006 |
+
if ( $this->broken || $this->warning ){
|
|
|
|
| 1007 |
$code = BLC_LINK_STATUS_WARNING;
|
| 1008 |
$text = __('Unknown Error', 'link status', 'broken-link-checker');
|
| 1009 |
|
| 1054 |
return blcUtility::idn_to_ascii($this->url);
|
| 1055 |
}
|
| 1056 |
|
| 1057 |
+
/**
|
| 1058 |
+
* Check if this link points to a page on the same domain as the current site.
|
| 1059 |
+
*
|
| 1060 |
+
* Note: Only checks the domain name, not subdirectory. If there are two separate WP sites A and B installed
|
| 1061 |
+
* in two different subdirectories of the same domain, this method will treat a link from site A to B as internal.
|
| 1062 |
+
*
|
| 1063 |
+
* @return bool
|
| 1064 |
+
*/
|
| 1065 |
+
public function is_internal_to_domain() {
|
| 1066 |
+
$host = @parse_url($this->url, PHP_URL_HOST);
|
| 1067 |
+
if ( empty($host) ) {
|
| 1068 |
+
return false;
|
| 1069 |
+
}
|
| 1070 |
+
|
| 1071 |
+
$site_host = @parse_url(get_site_url(), PHP_URL_HOST);
|
| 1072 |
+
if ( empty($site_host) ) {
|
| 1073 |
+
return false;
|
| 1074 |
+
}
|
| 1075 |
+
|
| 1076 |
+
//Some users are inconsistent with using/not using the www prefix, so get rid of it.
|
| 1077 |
+
$site_host = preg_replace('@^www\.@', '', $site_host, 1);
|
| 1078 |
+
|
| 1079 |
+
//Check if $host ends with $site_host. This means blah.example.com will match example.com.
|
| 1080 |
+
return (substr($host, -strlen($site_host)) === $site_host);
|
| 1081 |
+
}
|
| 1082 |
+
|
| 1083 |
/**
|
| 1084 |
* Remove the query string from an URL.
|
| 1085 |
*
|
includes/parsers.php
CHANGED
|
@@ -165,6 +165,10 @@ class blcParser extends blcModule {
|
|
| 165 |
|
| 166 |
/**
|
| 167 |
* Turn a relative URL into an absolute one.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 168 |
*
|
| 169 |
* @param string $url Relative URL.
|
| 170 |
* @param string $base_url Base URL. If omitted, the blog's root URL will be used.
|
| 165 |
|
| 166 |
/**
|
| 167 |
* Turn a relative URL into an absolute one.
|
| 168 |
+
*
|
| 169 |
+
* WordPress 3.4 has WP_Http::make_absolute_url() which is well-tested but not as comprehensive
|
| 170 |
+
* as this implementation. For example, WP_Http doesn't properly handle directory traversal with "..",
|
| 171 |
+
* and it removes #anchors for no good reason. The BLC implementation deals with both pretty well.
|
| 172 |
*
|
| 173 |
* @param string $url Relative URL.
|
| 174 |
* @param string $base_url Base URL. If omitted, the blog's root URL will be used.
|
languages/broken-link-checker.pot
CHANGED
|
@@ -2,9 +2,9 @@
|
|
| 2 |
# This file is distributed under the same license as the Broken Link Checker package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
-
"Project-Id-Version: Broken Link Checker 1.9.
|
| 6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/broken-link-checker\n"
|
| 7 |
-
"POT-Creation-Date: 2014-
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
|
@@ -12,247 +12,300 @@ msgstr ""
|
|
| 12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
| 13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
| 14 |
|
| 15 |
-
#: core/core.php:
|
| 16 |
msgid "Loading..."
|
| 17 |
msgstr ""
|
| 18 |
|
| 19 |
-
#: core/core.php:
|
| 20 |
msgid "[ Network error ]"
|
| 21 |
msgstr ""
|
| 22 |
|
| 23 |
-
#: core/core.php:
|
| 24 |
msgid "Automatically expand the widget if broken links have been detected"
|
| 25 |
msgstr ""
|
| 26 |
|
| 27 |
-
#: core/core.php:
|
| 28 |
msgid "Link Checker Settings"
|
| 29 |
msgstr ""
|
| 30 |
|
| 31 |
-
#: core/core.php:
|
| 32 |
msgid "Link Checker"
|
| 33 |
msgstr ""
|
| 34 |
|
| 35 |
-
#: core/core.php:
|
| 36 |
msgid "Broken Links"
|
| 37 |
msgstr ""
|
| 38 |
|
| 39 |
-
#: core/core.php:
|
| 40 |
msgid "View Broken Links"
|
| 41 |
msgstr ""
|
| 42 |
|
| 43 |
-
#: core/core.php:
|
| 44 |
msgid "Feedback"
|
| 45 |
msgstr ""
|
| 46 |
|
| 47 |
-
#: core/core.php:
|
| 48 |
msgid "Go to Broken Links"
|
| 49 |
msgstr ""
|
| 50 |
|
| 51 |
-
#: core/core.php:
|
| 52 |
msgid "Settings"
|
| 53 |
msgstr ""
|
| 54 |
|
| 55 |
-
#: core/core.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
msgid "Settings saved."
|
| 57 |
msgstr ""
|
| 58 |
|
| 59 |
-
#: core/core.php:
|
| 60 |
msgid "Thank you for your donation!"
|
| 61 |
msgstr ""
|
| 62 |
|
| 63 |
-
#: core/core.php:
|
| 64 |
msgid "Complete site recheck started."
|
| 65 |
msgstr ""
|
| 66 |
|
| 67 |
-
#: core/core.php:
|
| 68 |
-
msgid "Details"
|
| 69 |
-
msgstr ""
|
| 70 |
-
|
| 71 |
-
#: core/core.php:622
|
| 72 |
msgid "General"
|
| 73 |
msgstr ""
|
| 74 |
|
| 75 |
-
#: core/core.php:
|
| 76 |
msgid "Look For Links In"
|
| 77 |
msgstr ""
|
| 78 |
|
| 79 |
-
#: core/core.php:
|
| 80 |
msgid "Which Links To Check"
|
| 81 |
msgstr ""
|
| 82 |
|
| 83 |
-
#: core/core.php:
|
| 84 |
msgid "Protocols & APIs"
|
| 85 |
msgstr ""
|
| 86 |
|
| 87 |
-
#: core/core.php:
|
| 88 |
msgid "Advanced"
|
| 89 |
msgstr ""
|
| 90 |
|
| 91 |
-
#: core/core.php:
|
| 92 |
msgid "Broken Link Checker Options"
|
| 93 |
msgstr ""
|
| 94 |
|
| 95 |
-
#: core/core.php:
|
| 96 |
msgid "Status"
|
| 97 |
msgstr ""
|
| 98 |
|
| 99 |
-
#: core/core.php:
|
| 100 |
msgid "Show debug info"
|
| 101 |
msgstr ""
|
| 102 |
|
| 103 |
-
#: core/core.php:
|
| 104 |
msgid "Check each link"
|
| 105 |
msgstr ""
|
| 106 |
|
| 107 |
-
#: core/core.php:
|
| 108 |
msgid "Every %s hours"
|
| 109 |
msgstr ""
|
| 110 |
|
| 111 |
-
#: core/core.php:
|
| 112 |
msgid ""
|
| 113 |
"Existing links will be checked this often. New links will usually be checked "
|
| 114 |
"ASAP."
|
| 115 |
msgstr ""
|
| 116 |
|
| 117 |
-
#: core/core.php:
|
| 118 |
msgid "E-mail notifications"
|
| 119 |
msgstr ""
|
| 120 |
|
| 121 |
-
#: core/core.php:
|
| 122 |
msgid "Send me e-mail notifications about newly detected broken links"
|
| 123 |
msgstr ""
|
| 124 |
|
| 125 |
-
#: core/core.php:
|
| 126 |
msgid "Send authors e-mail notifications about broken links in their posts"
|
| 127 |
msgstr ""
|
| 128 |
|
| 129 |
-
#: core/core.php:
|
| 130 |
msgid "Notification e-mail address"
|
| 131 |
msgstr ""
|
| 132 |
|
| 133 |
-
#: core/core.php:
|
| 134 |
msgid ""
|
| 135 |
"Leave empty to use the e-mail address specified in Settings → General."
|
| 136 |
msgstr ""
|
| 137 |
|
| 138 |
-
#: core/core.php:
|
| 139 |
msgid "Link tweaks"
|
| 140 |
msgstr ""
|
| 141 |
|
| 142 |
-
#: core/core.php:
|
| 143 |
msgid "Apply custom formatting to broken links"
|
| 144 |
msgstr ""
|
| 145 |
|
| 146 |
-
#: core/core.php:
|
| 147 |
msgid "Edit CSS"
|
| 148 |
msgstr ""
|
| 149 |
|
| 150 |
-
#: core/core.php:
|
| 151 |
msgid "Example : Lorem ipsum <a %s>broken link</a>, dolor sit amet."
|
| 152 |
msgstr ""
|
| 153 |
|
| 154 |
-
#: core/core.php:
|
| 155 |
msgid "Click \"Save Changes\" to update example output."
|
| 156 |
msgstr ""
|
| 157 |
|
| 158 |
-
#: core/core.php:
|
| 159 |
msgid "Apply custom formatting to removed links"
|
| 160 |
msgstr ""
|
| 161 |
|
| 162 |
-
#: core/core.php:
|
| 163 |
msgid "Example : Lorem ipsum <span %s>removed link</span>, dolor sit amet."
|
| 164 |
msgstr ""
|
| 165 |
|
| 166 |
-
#: core/core.php:
|
| 167 |
msgid "Stop search engines from following broken links"
|
| 168 |
msgstr ""
|
| 169 |
|
| 170 |
-
#: core/core.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 171 |
msgctxt "settings page"
|
| 172 |
msgid "Suggestions"
|
| 173 |
msgstr ""
|
| 174 |
|
| 175 |
-
#: core/core.php:
|
| 176 |
msgid "Suggest alternatives to broken links"
|
| 177 |
msgstr ""
|
| 178 |
|
| 179 |
-
#: core/core.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
msgid "Look for links in"
|
| 181 |
msgstr ""
|
| 182 |
|
| 183 |
-
#: core/core.php:
|
| 184 |
msgid "Post statuses"
|
| 185 |
msgstr ""
|
| 186 |
|
| 187 |
-
#: core/core.php:
|
| 188 |
msgid "Link types"
|
| 189 |
msgstr ""
|
| 190 |
|
| 191 |
-
#: core/core.php:
|
| 192 |
msgid "Error : All link parsers missing!"
|
| 193 |
msgstr ""
|
| 194 |
|
| 195 |
-
#: core/core.php:
|
| 196 |
msgid "Exclusion list"
|
| 197 |
msgstr ""
|
| 198 |
|
| 199 |
-
#: core/core.php:
|
| 200 |
msgid ""
|
| 201 |
"Don't check links where the URL contains any of these words (one per line) :"
|
| 202 |
msgstr ""
|
| 203 |
|
| 204 |
-
#: core/core.php:
|
| 205 |
msgid "Check links using"
|
| 206 |
msgstr ""
|
| 207 |
|
| 208 |
-
#: core/core.php:
|
| 209 |
msgid "Timeout"
|
| 210 |
msgstr ""
|
| 211 |
|
| 212 |
-
#: core/core.php:
|
| 213 |
msgid "%s seconds"
|
| 214 |
msgstr ""
|
| 215 |
|
| 216 |
-
#: core/core.php:
|
| 217 |
msgid "Links that take longer than this to load will be marked as broken."
|
| 218 |
msgstr ""
|
| 219 |
|
| 220 |
-
#: core/core.php:
|
| 221 |
msgid "Link monitor"
|
| 222 |
msgstr ""
|
| 223 |
|
| 224 |
-
#: core/core.php:
|
| 225 |
msgid "Run continuously while the Dashboard is open"
|
| 226 |
msgstr ""
|
| 227 |
|
| 228 |
-
#: core/core.php:
|
| 229 |
msgid "Run hourly in the background"
|
| 230 |
msgstr ""
|
| 231 |
|
| 232 |
-
#: core/core.php:
|
| 233 |
msgid "Show the dashboard widget for"
|
| 234 |
msgstr ""
|
| 235 |
|
| 236 |
-
#: core/core.php:
|
| 237 |
msgctxt "dashboard widget visibility"
|
| 238 |
msgid "Administrator"
|
| 239 |
msgstr ""
|
| 240 |
|
| 241 |
-
#: core/core.php:
|
| 242 |
msgctxt "dashboard widget visibility"
|
| 243 |
msgid "Editor and above"
|
| 244 |
msgstr ""
|
| 245 |
|
| 246 |
-
#: core/core.php:
|
| 247 |
msgctxt "dashboard widget visibility"
|
| 248 |
msgid "Nobody (disables the widget)"
|
| 249 |
msgstr ""
|
| 250 |
|
| 251 |
-
#: core/core.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 252 |
msgid "Max. execution time"
|
| 253 |
msgstr ""
|
| 254 |
|
| 255 |
-
#: core/core.php:
|
| 256 |
msgid ""
|
| 257 |
"The plugin works by periodically launching a background job that parses your "
|
| 258 |
"posts for links, checks the discovered URLs, and performs other time-"
|
|
@@ -260,150 +313,150 @@ msgid ""
|
|
| 260 |
"may run each time before stopping."
|
| 261 |
msgstr ""
|
| 262 |
|
| 263 |
-
#: core/core.php:
|
| 264 |
msgid "Server load limit"
|
| 265 |
msgstr ""
|
| 266 |
|
| 267 |
-
#: core/core.php:
|
| 268 |
msgid "Current load : %s"
|
| 269 |
msgstr ""
|
| 270 |
|
| 271 |
-
#: core/core.php:
|
| 272 |
msgid ""
|
| 273 |
"Link checking will be suspended if the average <a href=\"%s\">server load</"
|
| 274 |
"a> rises above this number. Leave this field blank to disable load limiting."
|
| 275 |
msgstr ""
|
| 276 |
|
| 277 |
-
#: core/core.php:
|
| 278 |
msgid "Not available"
|
| 279 |
msgstr ""
|
| 280 |
|
| 281 |
-
#: core/core.php:
|
| 282 |
msgid ""
|
| 283 |
"Load limiting only works on Linux-like systems where <code>/proc/loadavg</"
|
| 284 |
"code> is present and accessible."
|
| 285 |
msgstr ""
|
| 286 |
|
| 287 |
-
#: core/core.php:
|
| 288 |
msgid "Target resource usage"
|
| 289 |
msgstr ""
|
| 290 |
|
| 291 |
-
#: core/core.php:
|
| 292 |
msgid "Logging"
|
| 293 |
msgstr ""
|
| 294 |
|
| 295 |
-
#: core/core.php:
|
| 296 |
msgid "Enable logging"
|
| 297 |
msgstr ""
|
| 298 |
|
| 299 |
-
#: core/core.php:
|
| 300 |
msgid "Log file location"
|
| 301 |
msgstr ""
|
| 302 |
|
| 303 |
-
#: core/core.php:
|
| 304 |
msgctxt "log file location"
|
| 305 |
msgid "Default"
|
| 306 |
msgstr ""
|
| 307 |
|
| 308 |
-
#: core/core.php:
|
| 309 |
msgctxt "log file location"
|
| 310 |
msgid "Custom"
|
| 311 |
msgstr ""
|
| 312 |
|
| 313 |
-
#: core/core.php:
|
| 314 |
msgid "Forced recheck"
|
| 315 |
msgstr ""
|
| 316 |
|
| 317 |
-
#: core/core.php:
|
| 318 |
msgid "Re-check all pages"
|
| 319 |
msgstr ""
|
| 320 |
|
| 321 |
-
#: core/core.php:
|
| 322 |
msgid ""
|
| 323 |
"The \"Nuclear Option\". Click this button to make the plugin empty its link "
|
| 324 |
"database and recheck the entire site from scratch."
|
| 325 |
msgstr ""
|
| 326 |
|
| 327 |
-
#: core/core.php:
|
| 328 |
msgid "Save Changes"
|
| 329 |
msgstr ""
|
| 330 |
|
| 331 |
-
#: core/core.php:
|
| 332 |
msgid "Configure"
|
| 333 |
msgstr ""
|
| 334 |
|
| 335 |
-
#: core/core.php:
|
| 336 |
msgid ""
|
| 337 |
"Enter the names of custom fields you want to check (one per line). If a "
|
| 338 |
"field contains HTML code, prefix its name with <code>html:</code>. For "
|
| 339 |
"example, <code>html:field_name</code>."
|
| 340 |
msgstr ""
|
| 341 |
|
| 342 |
-
#: core/core.php:
|
| 343 |
msgid "Database error : %s"
|
| 344 |
msgstr ""
|
| 345 |
|
| 346 |
-
#: core/core.php:
|
| 347 |
msgid "You must enter a filter name!"
|
| 348 |
msgstr ""
|
| 349 |
|
| 350 |
-
#: core/core.php:
|
| 351 |
msgid "Invalid search query."
|
| 352 |
msgstr ""
|
| 353 |
|
| 354 |
-
#: core/core.php:
|
| 355 |
msgid "Filter \"%s\" created"
|
| 356 |
msgstr ""
|
| 357 |
|
| 358 |
-
#: core/core.php:
|
| 359 |
msgid "Filter ID not specified."
|
| 360 |
msgstr ""
|
| 361 |
|
| 362 |
-
#: core/core.php:
|
| 363 |
msgid "Filter deleted"
|
| 364 |
msgstr ""
|
| 365 |
|
| 366 |
-
#: core/core.php:
|
| 367 |
msgid "Replaced %d redirect with a direct link"
|
| 368 |
msgid_plural "Replaced %d redirects with direct links"
|
| 369 |
msgstr[0] ""
|
| 370 |
msgstr[1] ""
|
| 371 |
|
| 372 |
-
#: core/core.php:
|
| 373 |
msgid "Failed to fix %d redirect"
|
| 374 |
msgid_plural "Failed to fix %d redirects"
|
| 375 |
msgstr[0] ""
|
| 376 |
msgstr[1] ""
|
| 377 |
|
| 378 |
-
#: core/core.php:
|
| 379 |
msgid "None of the selected links are redirects!"
|
| 380 |
msgstr ""
|
| 381 |
|
| 382 |
-
#: core/core.php:
|
| 383 |
msgid "%d link updated."
|
| 384 |
msgid_plural "%d links updated."
|
| 385 |
msgstr[0] ""
|
| 386 |
msgstr[1] ""
|
| 387 |
|
| 388 |
-
#: core/core.php:
|
| 389 |
msgid "Failed to update %d link."
|
| 390 |
msgid_plural "Failed to update %d links."
|
| 391 |
msgstr[0] ""
|
| 392 |
msgstr[1] ""
|
| 393 |
|
| 394 |
-
#: core/core.php:
|
| 395 |
msgid "%d link removed"
|
| 396 |
msgid_plural "%d links removed"
|
| 397 |
msgstr[0] ""
|
| 398 |
msgstr[1] ""
|
| 399 |
|
| 400 |
-
#: core/core.php:
|
| 401 |
msgid "Failed to remove %d link"
|
| 402 |
msgid_plural "Failed to remove %d links"
|
| 403 |
msgstr[0] ""
|
| 404 |
msgstr[1] ""
|
| 405 |
|
| 406 |
-
#: core/core.php:
|
| 407 |
msgid ""
|
| 408 |
"%d item was skipped because it can't be moved to the Trash. You need to "
|
| 409 |
"delete it manually."
|
|
@@ -413,282 +466,307 @@ msgid_plural ""
|
|
| 413 |
msgstr[0] ""
|
| 414 |
msgstr[1] ""
|
| 415 |
|
| 416 |
-
#: core/core.php:
|
| 417 |
msgid "Didn't find anything to delete!"
|
| 418 |
msgstr ""
|
| 419 |
|
| 420 |
-
#: core/core.php:
|
| 421 |
msgid "%d link scheduled for rechecking"
|
| 422 |
msgid_plural "%d links scheduled for rechecking"
|
| 423 |
msgstr[0] ""
|
| 424 |
msgstr[1] ""
|
| 425 |
|
| 426 |
-
#: core/core.php:
|
| 427 |
msgid "This link was manually marked as working by the user."
|
| 428 |
msgstr ""
|
| 429 |
|
| 430 |
-
#: core/core.php:
|
| 431 |
msgid "Couldn't modify link %d"
|
| 432 |
msgstr ""
|
| 433 |
|
| 434 |
-
#: core/core.php:
|
| 435 |
msgid "%d link marked as not broken"
|
| 436 |
msgid_plural "%d links marked as not broken"
|
| 437 |
msgstr[0] ""
|
| 438 |
msgstr[1] ""
|
| 439 |
|
| 440 |
-
#: core/core.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 441 |
msgid "Table columns"
|
| 442 |
msgstr ""
|
| 443 |
|
| 444 |
-
#: core/core.php:
|
| 445 |
msgid "Show on screen"
|
| 446 |
msgstr ""
|
| 447 |
|
| 448 |
-
#: core/core.php:
|
| 449 |
msgid "links"
|
| 450 |
msgstr ""
|
| 451 |
|
| 452 |
-
#: core/core.php:
|
| 453 |
msgid "Apply"
|
| 454 |
msgstr ""
|
| 455 |
|
| 456 |
-
#: core/core.php:
|
| 457 |
msgid "Misc"
|
| 458 |
msgstr ""
|
| 459 |
|
| 460 |
-
#: core/core.php:
|
| 461 |
msgid "Highlight links broken for at least %s days"
|
| 462 |
msgstr ""
|
| 463 |
|
| 464 |
-
#: core/core.php:
|
| 465 |
msgid "Color-code status codes"
|
| 466 |
msgstr ""
|
| 467 |
|
| 468 |
-
#: core/core.php:
|
| 469 |
-
#: core/core.php:
|
| 470 |
msgid "You're not allowed to do that!"
|
| 471 |
msgstr ""
|
| 472 |
|
| 473 |
-
#: core/core.php:
|
| 474 |
msgid "View broken links"
|
| 475 |
msgstr ""
|
| 476 |
|
| 477 |
-
#: core/core.php:
|
| 478 |
msgid "Found %d broken link"
|
| 479 |
msgid_plural "Found %d broken links"
|
| 480 |
msgstr[0] ""
|
| 481 |
msgstr[1] ""
|
| 482 |
|
| 483 |
-
#: core/core.php:
|
| 484 |
msgid "No broken links found."
|
| 485 |
msgstr ""
|
| 486 |
|
| 487 |
-
#: core/core.php:
|
| 488 |
msgid "%d URL in the work queue"
|
| 489 |
msgid_plural "%d URLs in the work queue"
|
| 490 |
msgstr[0] ""
|
| 491 |
msgstr[1] ""
|
| 492 |
|
| 493 |
-
#: core/core.php:
|
| 494 |
msgid "No URLs in the work queue."
|
| 495 |
msgstr ""
|
| 496 |
|
| 497 |
-
#: core/core.php:
|
| 498 |
msgctxt "for the \"Detected X unique URLs in Y links\" message"
|
| 499 |
msgid "%d unique URL"
|
| 500 |
msgid_plural "%d unique URLs"
|
| 501 |
msgstr[0] ""
|
| 502 |
msgstr[1] ""
|
| 503 |
|
| 504 |
-
#: core/core.php:
|
| 505 |
msgctxt "for the \"Detected X unique URLs in Y links\" message"
|
| 506 |
msgid "%d link"
|
| 507 |
msgid_plural "%d links"
|
| 508 |
msgstr[0] ""
|
| 509 |
msgstr[1] ""
|
| 510 |
|
| 511 |
-
#: core/core.php:
|
| 512 |
msgid "Detected %1$s in %2$s and still searching..."
|
| 513 |
msgstr ""
|
| 514 |
|
| 515 |
-
#: core/core.php:
|
| 516 |
msgid "Detected %1$s in %2$s."
|
| 517 |
msgstr ""
|
| 518 |
|
| 519 |
-
#: core/core.php:
|
| 520 |
msgid "Searching your blog for links..."
|
| 521 |
msgstr ""
|
| 522 |
|
| 523 |
-
#: core/core.php:
|
| 524 |
msgid "No links detected."
|
| 525 |
msgstr ""
|
| 526 |
|
| 527 |
-
#: core/core.php:
|
| 528 |
msgctxt "current load"
|
| 529 |
msgid "Unknown"
|
| 530 |
msgstr ""
|
| 531 |
|
| 532 |
-
#: core/core.php:
|
|
|
|
| 533 |
msgid "Oops, I can't find the link %d"
|
| 534 |
msgstr ""
|
| 535 |
|
| 536 |
-
#: core/core.php:
|
| 537 |
msgid "Oops, couldn't modify the link!"
|
| 538 |
msgstr ""
|
| 539 |
|
| 540 |
-
#: core/core.php:
|
|
|
|
| 541 |
msgid "Error : link_id not specified"
|
| 542 |
msgstr ""
|
| 543 |
|
| 544 |
-
#: core/core.php:
|
| 545 |
msgid "Error : link_id or new_url not specified"
|
| 546 |
msgstr ""
|
| 547 |
|
| 548 |
-
#: core/core.php:
|
| 549 |
msgid "Oops, the new URL is invalid!"
|
| 550 |
msgstr ""
|
| 551 |
|
| 552 |
-
#: core/core.php:
|
| 553 |
msgid "An unexpected error occurred!"
|
| 554 |
msgstr ""
|
| 555 |
|
| 556 |
-
#: core/core.php:
|
| 557 |
msgid "An unexpected error occured!"
|
| 558 |
msgstr ""
|
| 559 |
|
| 560 |
-
#: core/core.php:
|
| 561 |
msgid "You don't have sufficient privileges to access this information!"
|
| 562 |
msgstr ""
|
| 563 |
|
| 564 |
-
#: core/core.php:
|
| 565 |
msgid "Error : link ID not specified"
|
| 566 |
msgstr ""
|
| 567 |
|
| 568 |
-
#: core/core.php:
|
| 569 |
msgid "Failed to load link details (%s)"
|
| 570 |
msgstr ""
|
| 571 |
|
| 572 |
-
#. #-#-#-#-# plugin.pot (Broken Link Checker 1.9.
|
| 573 |
#. Plugin Name of the plugin/theme
|
| 574 |
-
#: core/core.php:
|
| 575 |
msgid "Broken Link Checker"
|
| 576 |
msgstr ""
|
| 577 |
|
| 578 |
-
#: core/core.php:
|
| 579 |
msgid "PHP version"
|
| 580 |
msgstr ""
|
| 581 |
|
| 582 |
-
#: core/core.php:
|
| 583 |
msgid "MySQL version"
|
| 584 |
msgstr ""
|
| 585 |
|
| 586 |
-
#: core/core.php:
|
| 587 |
msgid ""
|
| 588 |
"You have an old version of CURL. Redirect detection may not work properly."
|
| 589 |
msgstr ""
|
| 590 |
|
| 591 |
-
#: core/core.php:
|
| 592 |
msgid "Not installed"
|
| 593 |
msgstr ""
|
| 594 |
|
| 595 |
-
#: core/core.php:
|
| 596 |
msgid "CURL version"
|
| 597 |
msgstr ""
|
| 598 |
|
| 599 |
-
#: core/core.php:
|
| 600 |
msgid "Installed"
|
| 601 |
msgstr ""
|
| 602 |
|
| 603 |
-
#: core/core.php:
|
| 604 |
msgid "You must have either CURL or Snoopy installed for the plugin to work!"
|
| 605 |
msgstr ""
|
| 606 |
|
| 607 |
-
#: core/core.php:
|
| 608 |
msgid "On"
|
| 609 |
msgstr ""
|
| 610 |
|
| 611 |
-
#: core/core.php:
|
| 612 |
msgid "Redirects may be detected as broken links when safe_mode is on."
|
| 613 |
msgstr ""
|
| 614 |
|
| 615 |
-
#: core/core.php:
|
| 616 |
msgid "Off"
|
| 617 |
msgstr ""
|
| 618 |
|
| 619 |
-
#: core/core.php:
|
| 620 |
msgid "On ( %s )"
|
| 621 |
msgstr ""
|
| 622 |
|
| 623 |
-
#: core/core.php:
|
| 624 |
msgid "Redirects may be detected as broken links when open_basedir is on."
|
| 625 |
msgstr ""
|
| 626 |
|
| 627 |
-
#: core/core.php:
|
| 628 |
msgid ""
|
| 629 |
"If this value is zero even after several page reloads you have probably "
|
| 630 |
"encountered a bug."
|
| 631 |
msgstr ""
|
| 632 |
|
| 633 |
-
#: core/core.php:
|
| 634 |
msgid "[%s] Broken links detected"
|
| 635 |
msgstr ""
|
| 636 |
|
| 637 |
-
#: core/core.php:
|
| 638 |
msgid "Broken Link Checker has detected %d new broken link on your site."
|
| 639 |
msgid_plural ""
|
| 640 |
"Broken Link Checker has detected %d new broken links on your site."
|
| 641 |
msgstr[0] ""
|
| 642 |
msgstr[1] ""
|
| 643 |
|
| 644 |
-
#: core/core.php:
|
| 645 |
msgid "Here's a list of the first %d broken links:"
|
| 646 |
msgid_plural "Here's a list of the first %d broken links:"
|
| 647 |
msgstr[0] ""
|
| 648 |
msgstr[1] ""
|
| 649 |
|
| 650 |
-
#: core/core.php:
|
| 651 |
msgid "Here's a list of the new broken links: "
|
| 652 |
msgstr ""
|
| 653 |
|
| 654 |
-
#: core/core.php:
|
| 655 |
msgid "Link text : %s"
|
| 656 |
msgstr ""
|
| 657 |
|
| 658 |
-
#: core/core.php:
|
| 659 |
msgid "Link URL : <a href=\"%s\">%s</a>"
|
| 660 |
msgstr ""
|
| 661 |
|
| 662 |
-
#: core/core.php:
|
| 663 |
msgid "Source : %s"
|
| 664 |
msgstr ""
|
| 665 |
|
| 666 |
-
#: core/core.php:
|
| 667 |
msgid "You can see all broken links here:"
|
| 668 |
msgstr ""
|
| 669 |
|
| 670 |
-
#: core/core.php:
|
| 671 |
msgid "Broken Link Checker has detected %d new broken link in your posts."
|
| 672 |
msgid_plural ""
|
| 673 |
"Broken Link Checker has detected %d new broken links in your posts."
|
| 674 |
msgstr[0] ""
|
| 675 |
msgstr[1] ""
|
| 676 |
|
| 677 |
-
#: core/init.php:
|
| 678 |
msgid "Once Weekly"
|
| 679 |
msgstr ""
|
| 680 |
|
| 681 |
-
#: core/init.php:
|
| 682 |
msgid "Twice a Month"
|
| 683 |
msgstr ""
|
| 684 |
|
| 685 |
-
#: core/init.php:
|
| 686 |
msgid ""
|
| 687 |
"Broken Link Checker installation failed. Try deactivating and then "
|
| 688 |
"reactivating the plugin."
|
| 689 |
msgstr ""
|
| 690 |
|
| 691 |
-
#: core/init.php:
|
| 692 |
msgid ""
|
| 693 |
"Please activate the plugin separately on each site. Network activation is "
|
| 694 |
"not supported."
|
|
@@ -698,110 +776,101 @@ msgstr ""
|
|
| 698 |
msgid "Failed to delete old DB tables. Database error : %s"
|
| 699 |
msgstr ""
|
| 700 |
|
| 701 |
-
#: includes/admin/links-page-js.php:
|
| 702 |
msgid "Wait..."
|
| 703 |
msgstr ""
|
| 704 |
|
| 705 |
-
#: includes/admin/links-page-js.php:
|
| 706 |
-
msgid "Not broken"
|
| 707 |
-
msgstr ""
|
| 708 |
-
|
| 709 |
-
#: includes/admin/links-page-js.php:243
|
| 710 |
msgctxt "link text"
|
| 711 |
msgid "(None)"
|
| 712 |
msgstr ""
|
| 713 |
|
| 714 |
-
#: includes/admin/links-page-js.php:
|
| 715 |
msgctxt "link text"
|
| 716 |
msgid "(Multiple links)"
|
| 717 |
msgstr ""
|
| 718 |
|
| 719 |
-
#: includes/admin/links-page-js.php:
|
| 720 |
msgctxt "link suggestions"
|
| 721 |
msgid "Searching..."
|
| 722 |
msgstr ""
|
| 723 |
|
| 724 |
-
#: includes/admin/links-page-js.php:
|
| 725 |
msgctxt "link suggestions"
|
| 726 |
msgid "No suggestions available."
|
| 727 |
msgstr ""
|
| 728 |
|
| 729 |
-
#: includes/admin/links-page-js.php:
|
| 730 |
msgctxt "link suggestions"
|
| 731 |
msgid "Archived page from %s (via the Wayback Machine)"
|
| 732 |
msgstr ""
|
| 733 |
|
| 734 |
-
#: includes/admin/links-page-js.php:
|
| 735 |
msgid "%d instances of the link were successfully modified."
|
| 736 |
msgstr ""
|
| 737 |
|
| 738 |
-
#: includes/admin/links-page-js.php:
|
| 739 |
msgid ""
|
| 740 |
"However, %d instances couldn't be edited and still point to the old URL."
|
| 741 |
msgstr ""
|
| 742 |
|
| 743 |
-
#: includes/admin/links-page-js.php:
|
| 744 |
msgid "The link could not be modified."
|
| 745 |
msgstr ""
|
| 746 |
|
| 747 |
-
#: includes/admin/links-page-js.php:
|
| 748 |
msgid "The following error(s) occurred :"
|
| 749 |
msgstr ""
|
| 750 |
|
| 751 |
-
#: includes/admin/links-page-js.php:
|
| 752 |
msgid "Error: Link URL must not be empty."
|
| 753 |
msgstr ""
|
| 754 |
|
| 755 |
-
#: includes/admin/links-page-js.php:
|
| 756 |
msgid "%d instances of the link were successfully unlinked."
|
| 757 |
msgstr ""
|
| 758 |
|
| 759 |
-
#: includes/admin/links-page-js.php:
|
| 760 |
msgid "However, %d instances couldn't be removed."
|
| 761 |
msgstr ""
|
| 762 |
|
| 763 |
-
#: includes/admin/links-page-js.php:
|
| 764 |
msgid "The plugin failed to remove the link."
|
| 765 |
msgstr ""
|
| 766 |
|
| 767 |
-
#: includes/admin/links-page-js.php:
|
| 768 |
msgid "The following error(s) occured :"
|
| 769 |
msgstr ""
|
| 770 |
|
| 771 |
-
#: includes/admin/links-page-js.php:
|
| 772 |
-
#: includes/admin/table-printer.php:665
|
| 773 |
-
msgid "Unlink"
|
| 774 |
-
msgstr ""
|
| 775 |
-
|
| 776 |
-
#: includes/admin/links-page-js.php:629
|
| 777 |
msgid "Enter a name for the new custom filter"
|
| 778 |
msgstr ""
|
| 779 |
|
| 780 |
-
#: includes/admin/links-page-js.php:
|
| 781 |
msgid ""
|
| 782 |
"You are about to delete the current filter.\n"
|
| 783 |
"'Cancel' to stop, 'OK' to delete"
|
| 784 |
msgstr ""
|
| 785 |
|
| 786 |
-
#: includes/admin/links-page-js.php:
|
| 787 |
msgid ""
|
| 788 |
"Are you sure you want to delete all posts, bookmarks or other items that "
|
| 789 |
"contain any of the selected links? This action can't be undone.\n"
|
| 790 |
"'Cancel' to stop, 'OK' to delete"
|
| 791 |
msgstr ""
|
| 792 |
|
| 793 |
-
#: includes/admin/links-page-js.php:
|
| 794 |
msgid ""
|
| 795 |
"Are you sure you want to remove the selected links? This action can't be "
|
| 796 |
"undone.\n"
|
| 797 |
"'Cancel' to stop, 'OK' to remove"
|
| 798 |
msgstr ""
|
| 799 |
|
| 800 |
-
#: includes/admin/links-page-js.php:
|
| 801 |
msgid "Enter a search string first."
|
| 802 |
msgstr ""
|
| 803 |
|
| 804 |
-
#: includes/admin/links-page-js.php:
|
| 805 |
msgid "Select one or more links to edit."
|
| 806 |
msgstr ""
|
| 807 |
|
|
@@ -817,7 +886,7 @@ msgstr ""
|
|
| 817 |
msgid "Delete This Filter"
|
| 818 |
msgstr ""
|
| 819 |
|
| 820 |
-
#: includes/admin/search-form.php:32 includes/link-query.php:
|
| 821 |
msgid "Search"
|
| 822 |
msgstr ""
|
| 823 |
|
|
@@ -829,7 +898,7 @@ msgstr ""
|
|
| 829 |
msgid "URL"
|
| 830 |
msgstr ""
|
| 831 |
|
| 832 |
-
#: includes/admin/search-form.php:48 includes/admin/table-printer.php:
|
| 833 |
msgid "HTTP code"
|
| 834 |
msgstr ""
|
| 835 |
|
|
@@ -853,8 +922,8 @@ msgstr ""
|
|
| 853 |
msgid "Search Links"
|
| 854 |
msgstr ""
|
| 855 |
|
| 856 |
-
#: includes/admin/search-form.php:113 includes/admin/table-printer.php:
|
| 857 |
-
#: includes/admin/table-printer.php:
|
| 858 |
msgid "Cancel"
|
| 859 |
msgstr ""
|
| 860 |
|
|
@@ -896,286 +965,283 @@ msgstr ""
|
|
| 896 |
msgid "Redirect URL"
|
| 897 |
msgstr ""
|
| 898 |
|
| 899 |
-
#: includes/admin/table-printer.php:284
|
| 900 |
-
msgid "Bulk Actions"
|
| 901 |
-
msgstr ""
|
| 902 |
-
|
| 903 |
-
#: includes/admin/table-printer.php:285 includes/admin/table-printer.php:662
|
| 904 |
-
msgid "Edit URL"
|
| 905 |
-
msgstr ""
|
| 906 |
-
|
| 907 |
#: includes/admin/table-printer.php:286
|
| 908 |
-
msgid "
|
| 909 |
msgstr ""
|
| 910 |
|
| 911 |
-
#: includes/admin/table-printer.php:
|
| 912 |
msgid "Fix redirects"
|
| 913 |
msgstr ""
|
| 914 |
|
| 915 |
-
#: includes/admin/table-printer.php:
|
| 916 |
msgid "Mark as not broken"
|
| 917 |
msgstr ""
|
| 918 |
|
| 919 |
-
#: includes/admin/table-printer.php:
|
| 920 |
msgid "Move sources to Trash"
|
| 921 |
msgstr ""
|
| 922 |
|
| 923 |
-
#: includes/admin/table-printer.php:
|
| 924 |
msgid "Delete sources"
|
| 925 |
msgstr ""
|
| 926 |
|
| 927 |
-
#: includes/admin/table-printer.php:
|
| 928 |
msgid "«"
|
| 929 |
msgstr ""
|
| 930 |
|
| 931 |
-
#: includes/admin/table-printer.php:
|
| 932 |
msgid "»"
|
| 933 |
msgstr ""
|
| 934 |
|
| 935 |
-
#: includes/admin/table-printer.php:
|
| 936 |
msgid "Displaying %s–%s of <span class=\"current-link-count\">%s</span>"
|
| 937 |
msgstr ""
|
| 938 |
|
| 939 |
-
#: includes/admin/table-printer.php:
|
| 940 |
msgid "Bulk Edit URLs"
|
| 941 |
msgstr ""
|
| 942 |
|
| 943 |
-
#: includes/admin/table-printer.php:
|
| 944 |
msgid "Find"
|
| 945 |
msgstr ""
|
| 946 |
|
| 947 |
-
#: includes/admin/table-printer.php:
|
| 948 |
msgid "Replace with"
|
| 949 |
msgstr ""
|
| 950 |
|
| 951 |
-
#: includes/admin/table-printer.php:
|
| 952 |
msgid "Case sensitive"
|
| 953 |
msgstr ""
|
| 954 |
|
| 955 |
-
#: includes/admin/table-printer.php:
|
| 956 |
msgid "Regular expression"
|
| 957 |
msgstr ""
|
| 958 |
|
| 959 |
-
#: includes/admin/table-printer.php:
|
| 960 |
msgid "Update"
|
| 961 |
msgstr ""
|
| 962 |
|
| 963 |
-
#: includes/admin/table-printer.php:
|
| 964 |
msgid "Post published on"
|
| 965 |
msgstr ""
|
| 966 |
|
| 967 |
-
#: includes/admin/table-printer.php:
|
| 968 |
msgid "Link last checked"
|
| 969 |
msgstr ""
|
| 970 |
|
| 971 |
-
#: includes/admin/table-printer.php:
|
| 972 |
msgid "Never"
|
| 973 |
msgstr ""
|
| 974 |
|
| 975 |
-
#: includes/admin/table-printer.php:
|
| 976 |
msgid "Response time"
|
| 977 |
msgstr ""
|
| 978 |
|
| 979 |
-
#: includes/admin/table-printer.php:
|
| 980 |
msgid "%2.3f seconds"
|
| 981 |
msgstr ""
|
| 982 |
|
| 983 |
-
#: includes/admin/table-printer.php:
|
| 984 |
msgid "Final URL"
|
| 985 |
msgstr ""
|
| 986 |
|
| 987 |
-
#: includes/admin/table-printer.php:
|
| 988 |
msgid "Redirect count"
|
| 989 |
msgstr ""
|
| 990 |
|
| 991 |
-
#: includes/admin/table-printer.php:
|
| 992 |
msgid "Instance count"
|
| 993 |
msgstr ""
|
| 994 |
|
| 995 |
-
#: includes/admin/table-printer.php:
|
| 996 |
msgid "This link has failed %d time."
|
| 997 |
msgid_plural "This link has failed %d times."
|
| 998 |
msgstr[0] ""
|
| 999 |
msgstr[1] ""
|
| 1000 |
|
| 1001 |
-
#: includes/admin/table-printer.php:
|
| 1002 |
msgid "This link has been broken for %s."
|
| 1003 |
msgstr ""
|
| 1004 |
|
| 1005 |
-
#: includes/admin/table-printer.php:
|
| 1006 |
msgid "Log"
|
| 1007 |
msgstr ""
|
| 1008 |
|
| 1009 |
-
#: includes/admin/table-printer.php:
|
| 1010 |
msgid "Show more info about this link"
|
| 1011 |
msgstr ""
|
| 1012 |
|
| 1013 |
-
#: includes/admin/table-printer.php:
|
| 1014 |
msgctxt "checked how long ago"
|
| 1015 |
msgid "Checked"
|
| 1016 |
msgstr ""
|
| 1017 |
|
| 1018 |
-
#: includes/admin/table-printer.php:
|
| 1019 |
msgid "Broken for"
|
| 1020 |
msgstr ""
|
| 1021 |
|
| 1022 |
-
#: includes/admin/table-printer.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1023 |
msgid "Edit this link"
|
| 1024 |
msgstr ""
|
| 1025 |
|
| 1026 |
-
#: includes/admin/table-printer.php:
|
| 1027 |
msgid "Remove this link from all posts"
|
| 1028 |
msgstr ""
|
| 1029 |
|
| 1030 |
-
#: includes/admin/table-printer.php:
|
| 1031 |
msgid "Remove this link from the list of broken links and mark it as valid"
|
| 1032 |
msgstr ""
|
| 1033 |
|
| 1034 |
-
#: includes/admin/table-printer.php:
|
| 1035 |
msgid "Hide this link and do not report it again unless its status changes"
|
| 1036 |
msgstr ""
|
| 1037 |
|
| 1038 |
-
#: includes/admin/table-printer.php:
|
| 1039 |
-
msgid "Dismiss"
|
| 1040 |
-
msgstr ""
|
| 1041 |
-
|
| 1042 |
-
#: includes/admin/table-printer.php:684
|
| 1043 |
msgid "Undismiss this link"
|
| 1044 |
msgstr ""
|
| 1045 |
|
| 1046 |
-
#: includes/admin/table-printer.php:
|
| 1047 |
msgid "Undismiss"
|
| 1048 |
msgstr ""
|
| 1049 |
|
| 1050 |
-
#: includes/admin/table-printer.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1051 |
msgid "Update URL"
|
| 1052 |
msgstr ""
|
| 1053 |
|
| 1054 |
-
#: includes/admin/table-printer.php:
|
| 1055 |
msgid "[An orphaned link! This is a bug.]"
|
| 1056 |
msgstr ""
|
| 1057 |
|
| 1058 |
-
#: includes/admin/table-printer.php:
|
| 1059 |
msgctxt "inline editor title"
|
| 1060 |
msgid "Edit Link"
|
| 1061 |
msgstr ""
|
| 1062 |
|
| 1063 |
-
#: includes/admin/table-printer.php:
|
| 1064 |
msgctxt "inline link editor"
|
| 1065 |
msgid "Text"
|
| 1066 |
msgstr ""
|
| 1067 |
|
| 1068 |
-
#: includes/admin/table-printer.php:
|
| 1069 |
msgctxt "inline link editor"
|
| 1070 |
msgid "URL"
|
| 1071 |
msgstr ""
|
| 1072 |
|
| 1073 |
-
#: includes/admin/table-printer.php:
|
| 1074 |
msgctxt "inline link editor"
|
| 1075 |
msgid "Suggestions"
|
| 1076 |
msgstr ""
|
| 1077 |
|
| 1078 |
-
#: includes/admin/table-printer.php:
|
| 1079 |
msgid "Use this URL"
|
| 1080 |
msgstr ""
|
| 1081 |
|
| 1082 |
-
#: includes/any-post.php:
|
| 1083 |
-
#: modules/containers/comment.php:
|
| 1084 |
msgid "Edit"
|
| 1085 |
msgstr ""
|
| 1086 |
|
| 1087 |
-
#: includes/any-post.php:
|
| 1088 |
msgid "Move this item to the Trash"
|
| 1089 |
msgstr ""
|
| 1090 |
|
| 1091 |
-
#: includes/any-post.php:
|
| 1092 |
msgid "Trash"
|
| 1093 |
msgstr ""
|
| 1094 |
|
| 1095 |
-
#: includes/any-post.php:
|
| 1096 |
msgid "Delete this item permanently"
|
| 1097 |
msgstr ""
|
| 1098 |
|
| 1099 |
-
#: includes/any-post.php:
|
| 1100 |
-
#: modules/containers/custom_field.php:
|
| 1101 |
msgid "Delete"
|
| 1102 |
msgstr ""
|
| 1103 |
|
| 1104 |
-
#: includes/any-post.php:
|
| 1105 |
msgid "Preview “%s”"
|
| 1106 |
msgstr ""
|
| 1107 |
|
| 1108 |
-
#: includes/any-post.php:
|
| 1109 |
msgid "Preview"
|
| 1110 |
msgstr ""
|
| 1111 |
|
| 1112 |
-
#: includes/any-post.php:
|
| 1113 |
msgid "View “%s”"
|
| 1114 |
msgstr ""
|
| 1115 |
|
| 1116 |
-
#: includes/any-post.php:
|
| 1117 |
-
#: modules/containers/custom_field.php:
|
| 1118 |
msgid "View"
|
| 1119 |
msgstr ""
|
| 1120 |
|
| 1121 |
-
#: includes/any-post.php:
|
| 1122 |
msgid "Edit this item"
|
| 1123 |
msgstr ""
|
| 1124 |
|
| 1125 |
-
#: includes/any-post.php:
|
| 1126 |
#: modules/containers/comment.php:43
|
| 1127 |
msgid "Nothing to update"
|
| 1128 |
msgstr ""
|
| 1129 |
|
| 1130 |
-
#: includes/any-post.php:
|
| 1131 |
msgid "Updating post %d failed"
|
| 1132 |
msgstr ""
|
| 1133 |
|
| 1134 |
-
#: includes/any-post.php:
|
| 1135 |
msgid "Failed to delete post \"%s\" (%d)"
|
| 1136 |
msgstr ""
|
| 1137 |
|
| 1138 |
-
#: includes/any-post.php:
|
| 1139 |
msgid ""
|
| 1140 |
"Can't move post \"%s\" (%d) to the trash because the trash feature is "
|
| 1141 |
"disabled"
|
| 1142 |
msgstr ""
|
| 1143 |
|
| 1144 |
-
#: includes/any-post.php:
|
| 1145 |
msgid "Failed to move post \"%s\" (%d) to the trash"
|
| 1146 |
msgstr ""
|
| 1147 |
|
| 1148 |
-
#: includes/any-post.php:
|
| 1149 |
msgid "%d post deleted."
|
| 1150 |
msgid_plural "%d posts deleted."
|
| 1151 |
msgstr[0] ""
|
| 1152 |
msgstr[1] ""
|
| 1153 |
|
| 1154 |
-
#: includes/any-post.php:
|
| 1155 |
msgid "%d page deleted."
|
| 1156 |
msgid_plural "%d pages deleted."
|
| 1157 |
msgstr[0] ""
|
| 1158 |
msgstr[1] ""
|
| 1159 |
|
| 1160 |
-
#: includes/any-post.php:
|
| 1161 |
msgid "%d \"%s\" deleted."
|
| 1162 |
msgid_plural "%d \"%s\" deleted."
|
| 1163 |
msgstr[0] ""
|
| 1164 |
msgstr[1] ""
|
| 1165 |
|
| 1166 |
-
#: includes/any-post.php:
|
| 1167 |
msgid "%d post moved to the Trash."
|
| 1168 |
msgid_plural "%d posts moved to the Trash."
|
| 1169 |
msgstr[0] ""
|
| 1170 |
msgstr[1] ""
|
| 1171 |
|
| 1172 |
-
#: includes/any-post.php:
|
| 1173 |
msgid "%d page moved to the Trash."
|
| 1174 |
msgid_plural "%d pages moved to the Trash."
|
| 1175 |
msgstr[0] ""
|
| 1176 |
msgstr[1] ""
|
| 1177 |
|
| 1178 |
-
#: includes/any-post.php:
|
| 1179 |
msgid "%d \"%s\" moved to the Trash."
|
| 1180 |
msgid_plural "%d \"%s\" moved to the Trash."
|
| 1181 |
msgstr[0] ""
|
|
@@ -1294,114 +1360,127 @@ msgstr ""
|
|
| 1294 |
msgid "Parser '%s' not found."
|
| 1295 |
msgstr ""
|
| 1296 |
|
| 1297 |
-
#: includes/link-query.php:
|
| 1298 |
-
msgid "
|
| 1299 |
msgstr ""
|
| 1300 |
|
| 1301 |
-
#: includes/link-query.php:
|
| 1302 |
-
msgid "
|
| 1303 |
msgstr ""
|
| 1304 |
|
| 1305 |
-
#: includes/link-query.php:
|
| 1306 |
-
msgid "
|
| 1307 |
msgstr ""
|
| 1308 |
|
| 1309 |
-
#: includes/link-query.php:
|
| 1310 |
-
msgid "
|
| 1311 |
msgstr ""
|
| 1312 |
|
| 1313 |
#: includes/link-query.php:38
|
| 1314 |
-
msgid "No
|
| 1315 |
msgstr ""
|
| 1316 |
|
| 1317 |
#: includes/link-query.php:46
|
| 1318 |
-
|
|
|
|
| 1319 |
msgstr ""
|
| 1320 |
|
| 1321 |
#: includes/link-query.php:47
|
| 1322 |
-
msgid "
|
| 1323 |
msgstr ""
|
| 1324 |
|
| 1325 |
#: includes/link-query.php:48
|
| 1326 |
-
msgid "No
|
| 1327 |
msgstr ""
|
| 1328 |
|
| 1329 |
#: includes/link-query.php:56
|
| 1330 |
-
msgid "
|
| 1331 |
msgstr ""
|
| 1332 |
|
| 1333 |
#: includes/link-query.php:57
|
| 1334 |
-
msgid "
|
| 1335 |
msgstr ""
|
| 1336 |
|
| 1337 |
#: includes/link-query.php:58
|
| 1338 |
-
msgid "No
|
| 1339 |
msgstr ""
|
| 1340 |
|
| 1341 |
#: includes/link-query.php:66
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1342 |
msgid "Search Results"
|
| 1343 |
msgstr ""
|
| 1344 |
|
| 1345 |
-
#: includes/link-query.php:
|
| 1346 |
msgid "No links found for your query"
|
| 1347 |
msgstr ""
|
| 1348 |
|
| 1349 |
-
#: includes/links.php:
|
| 1350 |
msgid "The plugin script was terminated while trying to check the link."
|
| 1351 |
msgstr ""
|
| 1352 |
|
| 1353 |
-
#: includes/links.php:
|
| 1354 |
msgid "The plugin doesn't know how to check this type of link."
|
| 1355 |
msgstr ""
|
| 1356 |
|
| 1357 |
-
#: includes/links.php:
|
| 1358 |
-
msgid "Link is
|
| 1359 |
msgstr ""
|
| 1360 |
|
| 1361 |
-
#: includes/links.php:
|
| 1362 |
-
msgid "Link is
|
| 1363 |
msgstr ""
|
| 1364 |
|
| 1365 |
-
#: includes/links.php:
|
| 1366 |
msgid "Link is not valid"
|
| 1367 |
msgstr ""
|
| 1368 |
|
| 1369 |
-
#: includes/links.php:
|
| 1370 |
msgid ""
|
| 1371 |
"This link can not be edited because it is not used anywhere on this site."
|
| 1372 |
msgstr ""
|
| 1373 |
|
| 1374 |
-
#: includes/links.php:
|
| 1375 |
msgid "Failed to create a DB entry for the new URL."
|
| 1376 |
msgstr ""
|
| 1377 |
|
| 1378 |
-
#: includes/links.php:
|
| 1379 |
msgid "This link is not a redirect"
|
| 1380 |
msgstr ""
|
| 1381 |
|
| 1382 |
-
#: includes/links.php:
|
| 1383 |
msgid "Couldn't delete the link's database record"
|
| 1384 |
msgstr ""
|
| 1385 |
|
| 1386 |
-
#: includes/links.php:
|
| 1387 |
msgctxt "link status"
|
| 1388 |
msgid "Unknown"
|
| 1389 |
msgstr ""
|
| 1390 |
|
| 1391 |
-
#: includes/links.php:
|
| 1392 |
-
#: modules/extras/mediafire.php:
|
| 1393 |
msgid "Unknown Error"
|
| 1394 |
msgstr ""
|
| 1395 |
|
| 1396 |
-
#: includes/links.php:
|
| 1397 |
msgid "Not checked"
|
| 1398 |
msgstr ""
|
| 1399 |
|
| 1400 |
-
#: includes/links.php:
|
| 1401 |
msgid "False positive"
|
| 1402 |
msgstr ""
|
| 1403 |
|
| 1404 |
-
#: includes/links.php:
|
| 1405 |
#: modules/extras/rapidshare.php:151 modules/extras/rapidshare.php:178
|
| 1406 |
msgctxt "link status"
|
| 1407 |
msgid "OK"
|
|
@@ -1475,31 +1554,31 @@ msgid_plural "%d months ago"
|
|
| 1475 |
msgstr[0] ""
|
| 1476 |
msgstr[1] ""
|
| 1477 |
|
| 1478 |
-
#: modules/checkers/http.php:
|
| 1479 |
msgid "Server Not Found"
|
| 1480 |
msgstr ""
|
| 1481 |
|
| 1482 |
-
#: modules/checkers/http.php:
|
| 1483 |
msgid "Connection Failed"
|
| 1484 |
msgstr ""
|
| 1485 |
|
| 1486 |
-
#: modules/checkers/http.php:
|
| 1487 |
msgid "HTTP code : %d"
|
| 1488 |
msgstr ""
|
| 1489 |
|
| 1490 |
-
#: modules/checkers/http.php:
|
| 1491 |
msgid "(No response)"
|
| 1492 |
msgstr ""
|
| 1493 |
|
| 1494 |
-
#: modules/checkers/http.php:
|
| 1495 |
msgid "Most likely the connection timed out or the domain doesn't exist."
|
| 1496 |
msgstr ""
|
| 1497 |
|
| 1498 |
-
#: modules/checkers/http.php:
|
| 1499 |
msgid "Request timed out."
|
| 1500 |
msgstr ""
|
| 1501 |
|
| 1502 |
-
#: modules/checkers/http.php:
|
| 1503 |
msgid "Using Snoopy"
|
| 1504 |
msgstr ""
|
| 1505 |
|
|
@@ -1543,38 +1622,38 @@ msgstr ""
|
|
| 1543 |
msgid "Can't move comment %d to the trash"
|
| 1544 |
msgstr ""
|
| 1545 |
|
| 1546 |
-
#: modules/containers/comment.php:
|
| 1547 |
msgid "Edit comment"
|
| 1548 |
msgstr ""
|
| 1549 |
|
| 1550 |
-
#: modules/containers/comment.php:
|
| 1551 |
msgid "Delete Permanently"
|
| 1552 |
msgstr ""
|
| 1553 |
|
| 1554 |
-
#: modules/containers/comment.php:
|
| 1555 |
msgid "Move this comment to the trash"
|
| 1556 |
msgstr ""
|
| 1557 |
|
| 1558 |
-
#: modules/containers/comment.php:
|
| 1559 |
msgctxt "verb"
|
| 1560 |
msgid "Trash"
|
| 1561 |
msgstr ""
|
| 1562 |
|
| 1563 |
-
#: modules/containers/comment.php:
|
| 1564 |
msgid "View comment"
|
| 1565 |
msgstr ""
|
| 1566 |
|
| 1567 |
-
#: modules/containers/comment.php:
|
| 1568 |
msgid "Comment"
|
| 1569 |
msgstr ""
|
| 1570 |
|
| 1571 |
-
#: modules/containers/comment.php:
|
| 1572 |
msgid "%d comment has been deleted."
|
| 1573 |
msgid_plural "%d comments have been deleted."
|
| 1574 |
msgstr[0] ""
|
| 1575 |
msgstr[1] ""
|
| 1576 |
|
| 1577 |
-
#: modules/containers/comment.php:
|
| 1578 |
msgid "%d comment moved to the Trash."
|
| 1579 |
msgid_plural "%d comments moved to the Trash."
|
| 1580 |
msgstr[0] ""
|
|
@@ -1588,11 +1667,11 @@ msgstr ""
|
|
| 1588 |
msgid "Failed to delete the meta field '%s' on %s [%d]"
|
| 1589 |
msgstr ""
|
| 1590 |
|
| 1591 |
-
#: modules/containers/custom_field.php:
|
| 1592 |
msgid "Edit this post"
|
| 1593 |
msgstr ""
|
| 1594 |
|
| 1595 |
-
#: modules/containers/custom_field.php:
|
| 1596 |
msgid "View \"%s\""
|
| 1597 |
msgstr ""
|
| 1598 |
|
|
@@ -1622,11 +1701,15 @@ msgstr ""
|
|
| 1622 |
msgid "Embedded GoogleVideo video"
|
| 1623 |
msgstr ""
|
| 1624 |
|
| 1625 |
-
#: modules/extras/mediafire.php:
|
| 1626 |
#: modules/extras/rapidshare.php:139
|
| 1627 |
msgid "Not Found"
|
| 1628 |
msgstr ""
|
| 1629 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1630 |
#: modules/extras/rapidshare.php:51
|
| 1631 |
msgid "Using RapidShare API"
|
| 1632 |
msgstr ""
|
| 2 |
# This file is distributed under the same license as the Broken Link Checker package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
+
"Project-Id-Version: Broken Link Checker 1.9.5\n"
|
| 6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/broken-link-checker\n"
|
| 7 |
+
"POT-Creation-Date: 2014-11-25 11:57:14+00:00\n"
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
| 13 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
| 14 |
|
| 15 |
+
#: core/core.php:156 includes/admin/links-page-js.php:44
|
| 16 |
msgid "Loading..."
|
| 17 |
msgstr ""
|
| 18 |
|
| 19 |
+
#: core/core.php:180 includes/admin/options-page-js.php:18
|
| 20 |
msgid "[ Network error ]"
|
| 21 |
msgstr ""
|
| 22 |
|
| 23 |
+
#: core/core.php:207
|
| 24 |
msgid "Automatically expand the widget if broken links have been detected"
|
| 25 |
msgstr ""
|
| 26 |
|
| 27 |
+
#: core/core.php:298
|
| 28 |
msgid "Link Checker Settings"
|
| 29 |
msgstr ""
|
| 30 |
|
| 31 |
+
#: core/core.php:299
|
| 32 |
msgid "Link Checker"
|
| 33 |
msgstr ""
|
| 34 |
|
| 35 |
+
#: core/core.php:304 includes/link-query.php:37
|
| 36 |
msgid "Broken Links"
|
| 37 |
msgstr ""
|
| 38 |
|
| 39 |
+
#: core/core.php:320
|
| 40 |
msgid "View Broken Links"
|
| 41 |
msgstr ""
|
| 42 |
|
| 43 |
+
#: core/core.php:335
|
| 44 |
msgid "Feedback"
|
| 45 |
msgstr ""
|
| 46 |
|
| 47 |
+
#: core/core.php:343
|
| 48 |
msgid "Go to Broken Links"
|
| 49 |
msgstr ""
|
| 50 |
|
| 51 |
+
#: core/core.php:372
|
| 52 |
msgid "Settings"
|
| 53 |
msgstr ""
|
| 54 |
|
| 55 |
+
#: core/core.php:401 includes/admin/table-printer.php:287
|
| 56 |
+
#: includes/admin/table-printer.php:678
|
| 57 |
+
msgid "Edit URL"
|
| 58 |
+
msgstr ""
|
| 59 |
+
|
| 60 |
+
#: core/core.php:402 includes/admin/links-page-js.php:699
|
| 61 |
+
#: includes/admin/table-printer.php:292 includes/admin/table-printer.php:681
|
| 62 |
+
msgid "Unlink"
|
| 63 |
+
msgstr ""
|
| 64 |
+
|
| 65 |
+
#: core/core.php:403 includes/admin/links-page-js.php:110
|
| 66 |
+
#: includes/admin/table-printer.php:687
|
| 67 |
+
msgid "Not broken"
|
| 68 |
+
msgstr ""
|
| 69 |
+
|
| 70 |
+
#: core/core.php:404 includes/admin/table-printer.php:291
|
| 71 |
+
#: includes/admin/table-printer.php:695
|
| 72 |
+
msgid "Dismiss"
|
| 73 |
+
msgstr ""
|
| 74 |
+
|
| 75 |
+
#: core/core.php:405 includes/admin/table-printer.php:288
|
| 76 |
+
#: includes/admin/table-printer.php:707
|
| 77 |
+
msgid "Recheck"
|
| 78 |
+
msgstr ""
|
| 79 |
+
|
| 80 |
+
#: core/core.php:406 includes/admin/table-printer.php:715
|
| 81 |
+
msgctxt "link action; replace one redirect with a direct link"
|
| 82 |
+
msgid "Fix redirect"
|
| 83 |
+
msgstr ""
|
| 84 |
+
|
| 85 |
+
#: core/core.php:626
|
| 86 |
msgid "Settings saved."
|
| 87 |
msgstr ""
|
| 88 |
|
| 89 |
+
#: core/core.php:632
|
| 90 |
msgid "Thank you for your donation!"
|
| 91 |
msgstr ""
|
| 92 |
|
| 93 |
+
#: core/core.php:640
|
| 94 |
msgid "Complete site recheck started."
|
| 95 |
msgstr ""
|
| 96 |
|
| 97 |
+
#: core/core.php:662
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
msgid "General"
|
| 99 |
msgstr ""
|
| 100 |
|
| 101 |
+
#: core/core.php:663
|
| 102 |
msgid "Look For Links In"
|
| 103 |
msgstr ""
|
| 104 |
|
| 105 |
+
#: core/core.php:664
|
| 106 |
msgid "Which Links To Check"
|
| 107 |
msgstr ""
|
| 108 |
|
| 109 |
+
#: core/core.php:665
|
| 110 |
msgid "Protocols & APIs"
|
| 111 |
msgstr ""
|
| 112 |
|
| 113 |
+
#: core/core.php:666
|
| 114 |
msgid "Advanced"
|
| 115 |
msgstr ""
|
| 116 |
|
| 117 |
+
#: core/core.php:681
|
| 118 |
msgid "Broken Link Checker Options"
|
| 119 |
msgstr ""
|
| 120 |
|
| 121 |
+
#: core/core.php:723 includes/admin/table-printer.php:211
|
| 122 |
msgid "Status"
|
| 123 |
msgstr ""
|
| 124 |
|
| 125 |
+
#: core/core.php:725 includes/admin/options-page-js.php:56
|
| 126 |
msgid "Show debug info"
|
| 127 |
msgstr ""
|
| 128 |
|
| 129 |
+
#: core/core.php:753
|
| 130 |
msgid "Check each link"
|
| 131 |
msgstr ""
|
| 132 |
|
| 133 |
+
#: core/core.php:758
|
| 134 |
msgid "Every %s hours"
|
| 135 |
msgstr ""
|
| 136 |
|
| 137 |
+
#: core/core.php:767
|
| 138 |
msgid ""
|
| 139 |
"Existing links will be checked this often. New links will usually be checked "
|
| 140 |
"ASAP."
|
| 141 |
msgstr ""
|
| 142 |
|
| 143 |
+
#: core/core.php:774
|
| 144 |
msgid "E-mail notifications"
|
| 145 |
msgstr ""
|
| 146 |
|
| 147 |
+
#: core/core.php:780
|
| 148 |
msgid "Send me e-mail notifications about newly detected broken links"
|
| 149 |
msgstr ""
|
| 150 |
|
| 151 |
+
#: core/core.php:788
|
| 152 |
msgid "Send authors e-mail notifications about broken links in their posts"
|
| 153 |
msgstr ""
|
| 154 |
|
| 155 |
+
#: core/core.php:795
|
| 156 |
msgid "Notification e-mail address"
|
| 157 |
msgstr ""
|
| 158 |
|
| 159 |
+
#: core/core.php:807
|
| 160 |
msgid ""
|
| 161 |
"Leave empty to use the e-mail address specified in Settings → General."
|
| 162 |
msgstr ""
|
| 163 |
|
| 164 |
+
#: core/core.php:814
|
| 165 |
msgid "Link tweaks"
|
| 166 |
msgstr ""
|
| 167 |
|
| 168 |
+
#: core/core.php:820
|
| 169 |
msgid "Apply custom formatting to broken links"
|
| 170 |
msgstr ""
|
| 171 |
|
| 172 |
+
#: core/core.php:824 core/core.php:855
|
| 173 |
msgid "Edit CSS"
|
| 174 |
msgstr ""
|
| 175 |
|
| 176 |
+
#: core/core.php:840
|
| 177 |
msgid "Example : Lorem ipsum <a %s>broken link</a>, dolor sit amet."
|
| 178 |
msgstr ""
|
| 179 |
|
| 180 |
+
#: core/core.php:843 core/core.php:874
|
| 181 |
msgid "Click \"Save Changes\" to update example output."
|
| 182 |
msgstr ""
|
| 183 |
|
| 184 |
+
#: core/core.php:851
|
| 185 |
msgid "Apply custom formatting to removed links"
|
| 186 |
msgstr ""
|
| 187 |
|
| 188 |
+
#: core/core.php:871
|
| 189 |
msgid "Example : Lorem ipsum <span %s>removed link</span>, dolor sit amet."
|
| 190 |
msgstr ""
|
| 191 |
|
| 192 |
+
#: core/core.php:884
|
| 193 |
msgid "Stop search engines from following broken links"
|
| 194 |
msgstr ""
|
| 195 |
|
| 196 |
+
#: core/core.php:890
|
| 197 |
+
msgctxt "\"Link tweaks\" settings"
|
| 198 |
+
msgid ""
|
| 199 |
+
"These settings only apply to the content of posts, not comments or custom "
|
| 200 |
+
"fields."
|
| 201 |
+
msgstr ""
|
| 202 |
+
|
| 203 |
+
#: core/core.php:901
|
| 204 |
msgctxt "settings page"
|
| 205 |
msgid "Suggestions"
|
| 206 |
msgstr ""
|
| 207 |
|
| 208 |
+
#: core/core.php:906
|
| 209 |
msgid "Suggest alternatives to broken links"
|
| 210 |
msgstr ""
|
| 211 |
|
| 212 |
+
#: core/core.php:912
|
| 213 |
+
msgctxt "settings page"
|
| 214 |
+
msgid "Warnings"
|
| 215 |
+
msgstr ""
|
| 216 |
+
|
| 217 |
+
#: core/core.php:917
|
| 218 |
+
msgid "Show uncertain or minor problems as \"warnings\" instead of \"broken\""
|
| 219 |
+
msgstr ""
|
| 220 |
+
|
| 221 |
+
#: core/core.php:920
|
| 222 |
+
msgid ""
|
| 223 |
+
"Turning off this option will make the plugin report all problems as broken "
|
| 224 |
+
"links."
|
| 225 |
+
msgstr ""
|
| 226 |
+
|
| 227 |
+
#: core/core.php:935
|
| 228 |
msgid "Look for links in"
|
| 229 |
msgstr ""
|
| 230 |
|
| 231 |
+
#: core/core.php:946
|
| 232 |
msgid "Post statuses"
|
| 233 |
msgstr ""
|
| 234 |
|
| 235 |
+
#: core/core.php:979
|
| 236 |
msgid "Link types"
|
| 237 |
msgstr ""
|
| 238 |
|
| 239 |
+
#: core/core.php:985
|
| 240 |
msgid "Error : All link parsers missing!"
|
| 241 |
msgstr ""
|
| 242 |
|
| 243 |
+
#: core/core.php:992
|
| 244 |
msgid "Exclusion list"
|
| 245 |
msgstr ""
|
| 246 |
|
| 247 |
+
#: core/core.php:993
|
| 248 |
msgid ""
|
| 249 |
"Don't check links where the URL contains any of these words (one per line) :"
|
| 250 |
msgstr ""
|
| 251 |
|
| 252 |
+
#: core/core.php:1011
|
| 253 |
msgid "Check links using"
|
| 254 |
msgstr ""
|
| 255 |
|
| 256 |
+
#: core/core.php:1030 includes/links.php:1012
|
| 257 |
msgid "Timeout"
|
| 258 |
msgstr ""
|
| 259 |
|
| 260 |
+
#: core/core.php:1036 core/core.php:1123 core/core.php:3409
|
| 261 |
msgid "%s seconds"
|
| 262 |
msgstr ""
|
| 263 |
|
| 264 |
+
#: core/core.php:1045
|
| 265 |
msgid "Links that take longer than this to load will be marked as broken."
|
| 266 |
msgstr ""
|
| 267 |
|
| 268 |
+
#: core/core.php:1052
|
| 269 |
msgid "Link monitor"
|
| 270 |
msgstr ""
|
| 271 |
|
| 272 |
+
#: core/core.php:1060
|
| 273 |
msgid "Run continuously while the Dashboard is open"
|
| 274 |
msgstr ""
|
| 275 |
|
| 276 |
+
#: core/core.php:1068
|
| 277 |
msgid "Run hourly in the background"
|
| 278 |
msgstr ""
|
| 279 |
|
| 280 |
+
#: core/core.php:1076
|
| 281 |
msgid "Show the dashboard widget for"
|
| 282 |
msgstr ""
|
| 283 |
|
| 284 |
+
#: core/core.php:1081
|
| 285 |
msgctxt "dashboard widget visibility"
|
| 286 |
msgid "Administrator"
|
| 287 |
msgstr ""
|
| 288 |
|
| 289 |
+
#: core/core.php:1082
|
| 290 |
msgctxt "dashboard widget visibility"
|
| 291 |
msgid "Editor and above"
|
| 292 |
msgstr ""
|
| 293 |
|
| 294 |
+
#: core/core.php:1083
|
| 295 |
msgctxt "dashboard widget visibility"
|
| 296 |
msgid "Nobody (disables the widget)"
|
| 297 |
msgstr ""
|
| 298 |
|
| 299 |
+
#: core/core.php:1099
|
| 300 |
+
msgctxt "settings page"
|
| 301 |
+
msgid "Show link actions"
|
| 302 |
+
msgstr ""
|
| 303 |
+
|
| 304 |
+
#: core/core.php:1117
|
| 305 |
msgid "Max. execution time"
|
| 306 |
msgstr ""
|
| 307 |
|
| 308 |
+
#: core/core.php:1134
|
| 309 |
msgid ""
|
| 310 |
"The plugin works by periodically launching a background job that parses your "
|
| 311 |
"posts for links, checks the discovered URLs, and performs other time-"
|
| 313 |
"may run each time before stopping."
|
| 314 |
msgstr ""
|
| 315 |
|
| 316 |
+
#: core/core.php:1143
|
| 317 |
msgid "Server load limit"
|
| 318 |
msgstr ""
|
| 319 |
|
| 320 |
+
#: core/core.php:1158
|
| 321 |
msgid "Current load : %s"
|
| 322 |
msgstr ""
|
| 323 |
|
| 324 |
+
#: core/core.php:1163
|
| 325 |
msgid ""
|
| 326 |
"Link checking will be suspended if the average <a href=\"%s\">server load</"
|
| 327 |
"a> rises above this number. Leave this field blank to disable load limiting."
|
| 328 |
msgstr ""
|
| 329 |
|
| 330 |
+
#: core/core.php:1172
|
| 331 |
msgid "Not available"
|
| 332 |
msgstr ""
|
| 333 |
|
| 334 |
+
#: core/core.php:1174
|
| 335 |
msgid ""
|
| 336 |
"Load limiting only works on Linux-like systems where <code>/proc/loadavg</"
|
| 337 |
"code> is present and accessible."
|
| 338 |
msgstr ""
|
| 339 |
|
| 340 |
+
#: core/core.php:1182
|
| 341 |
msgid "Target resource usage"
|
| 342 |
msgstr ""
|
| 343 |
|
| 344 |
+
#: core/core.php:1200
|
| 345 |
msgid "Logging"
|
| 346 |
msgstr ""
|
| 347 |
|
| 348 |
+
#: core/core.php:1206
|
| 349 |
msgid "Enable logging"
|
| 350 |
msgstr ""
|
| 351 |
|
| 352 |
+
#: core/core.php:1213
|
| 353 |
msgid "Log file location"
|
| 354 |
msgstr ""
|
| 355 |
|
| 356 |
+
#: core/core.php:1222
|
| 357 |
msgctxt "log file location"
|
| 358 |
msgid "Default"
|
| 359 |
msgstr ""
|
| 360 |
|
| 361 |
+
#: core/core.php:1236
|
| 362 |
msgctxt "log file location"
|
| 363 |
msgid "Custom"
|
| 364 |
msgstr ""
|
| 365 |
|
| 366 |
+
#: core/core.php:1248
|
| 367 |
msgid "Forced recheck"
|
| 368 |
msgstr ""
|
| 369 |
|
| 370 |
+
#: core/core.php:1251
|
| 371 |
msgid "Re-check all pages"
|
| 372 |
msgstr ""
|
| 373 |
|
| 374 |
+
#: core/core.php:1255
|
| 375 |
msgid ""
|
| 376 |
"The \"Nuclear Option\". Click this button to make the plugin empty its link "
|
| 377 |
"database and recheck the entire site from scratch."
|
| 378 |
msgstr ""
|
| 379 |
|
| 380 |
+
#: core/core.php:1266
|
| 381 |
msgid "Save Changes"
|
| 382 |
msgstr ""
|
| 383 |
|
| 384 |
+
#: core/core.php:1317
|
| 385 |
msgid "Configure"
|
| 386 |
msgstr ""
|
| 387 |
|
| 388 |
+
#: core/core.php:1399
|
| 389 |
msgid ""
|
| 390 |
"Enter the names of custom fields you want to check (one per line). If a "
|
| 391 |
"field contains HTML code, prefix its name with <code>html:</code>. For "
|
| 392 |
"example, <code>html:field_name</code>."
|
| 393 |
msgstr ""
|
| 394 |
|
| 395 |
+
#: core/core.php:1534 core/core.php:1617 core/core.php:1649
|
| 396 |
msgid "Database error : %s"
|
| 397 |
msgstr ""
|
| 398 |
|
| 399 |
+
#: core/core.php:1599
|
| 400 |
msgid "You must enter a filter name!"
|
| 401 |
msgstr ""
|
| 402 |
|
| 403 |
+
#: core/core.php:1603
|
| 404 |
msgid "Invalid search query."
|
| 405 |
msgstr ""
|
| 406 |
|
| 407 |
+
#: core/core.php:1612
|
| 408 |
msgid "Filter \"%s\" created"
|
| 409 |
msgstr ""
|
| 410 |
|
| 411 |
+
#: core/core.php:1639
|
| 412 |
msgid "Filter ID not specified."
|
| 413 |
msgstr ""
|
| 414 |
|
| 415 |
+
#: core/core.php:1646
|
| 416 |
msgid "Filter deleted"
|
| 417 |
msgstr ""
|
| 418 |
|
| 419 |
+
#: core/core.php:1693
|
| 420 |
msgid "Replaced %d redirect with a direct link"
|
| 421 |
msgid_plural "Replaced %d redirects with direct links"
|
| 422 |
msgstr[0] ""
|
| 423 |
msgstr[1] ""
|
| 424 |
|
| 425 |
+
#: core/core.php:1704
|
| 426 |
msgid "Failed to fix %d redirect"
|
| 427 |
msgid_plural "Failed to fix %d redirects"
|
| 428 |
msgstr[0] ""
|
| 429 |
msgstr[1] ""
|
| 430 |
|
| 431 |
+
#: core/core.php:1715
|
| 432 |
msgid "None of the selected links are redirects!"
|
| 433 |
msgstr ""
|
| 434 |
|
| 435 |
+
#: core/core.php:1793
|
| 436 |
msgid "%d link updated."
|
| 437 |
msgid_plural "%d links updated."
|
| 438 |
msgstr[0] ""
|
| 439 |
msgstr[1] ""
|
| 440 |
|
| 441 |
+
#: core/core.php:1804
|
| 442 |
msgid "Failed to update %d link."
|
| 443 |
msgid_plural "Failed to update %d links."
|
| 444 |
msgstr[0] ""
|
| 445 |
msgstr[1] ""
|
| 446 |
|
| 447 |
+
#: core/core.php:1893
|
| 448 |
msgid "%d link removed"
|
| 449 |
msgid_plural "%d links removed"
|
| 450 |
msgstr[0] ""
|
| 451 |
msgstr[1] ""
|
| 452 |
|
| 453 |
+
#: core/core.php:1904
|
| 454 |
msgid "Failed to remove %d link"
|
| 455 |
msgid_plural "Failed to remove %d links"
|
| 456 |
msgstr[0] ""
|
| 457 |
msgstr[1] ""
|
| 458 |
|
| 459 |
+
#: core/core.php:2013
|
| 460 |
msgid ""
|
| 461 |
"%d item was skipped because it can't be moved to the Trash. You need to "
|
| 462 |
"delete it manually."
|
| 466 |
msgstr[0] ""
|
| 467 |
msgstr[1] ""
|
| 468 |
|
| 469 |
+
#: core/core.php:2035
|
| 470 |
msgid "Didn't find anything to delete!"
|
| 471 |
msgstr ""
|
| 472 |
|
| 473 |
+
#: core/core.php:2063
|
| 474 |
msgid "%d link scheduled for rechecking"
|
| 475 |
msgid_plural "%d links scheduled for rechecking"
|
| 476 |
msgstr[0] ""
|
| 477 |
msgstr[1] ""
|
| 478 |
|
| 479 |
+
#: core/core.php:2110 core/core.php:2923
|
| 480 |
msgid "This link was manually marked as working by the user."
|
| 481 |
msgstr ""
|
| 482 |
|
| 483 |
+
#: core/core.php:2117 core/core.php:2175
|
| 484 |
msgid "Couldn't modify link %d"
|
| 485 |
msgstr ""
|
| 486 |
|
| 487 |
+
#: core/core.php:2127
|
| 488 |
msgid "%d link marked as not broken"
|
| 489 |
msgid_plural "%d links marked as not broken"
|
| 490 |
msgstr[0] ""
|
| 491 |
msgstr[1] ""
|
| 492 |
|
| 493 |
+
#: core/core.php:2185
|
| 494 |
+
msgid "%d link dismissed"
|
| 495 |
+
msgid_plural "%d links dismissed"
|
| 496 |
+
msgstr[0] ""
|
| 497 |
+
msgstr[1] ""
|
| 498 |
+
|
| 499 |
+
#: core/core.php:2242
|
| 500 |
+
msgid ""
|
| 501 |
+
"The \"Warnings\" page lists problems that are probably temporary or "
|
| 502 |
+
"suspected to be false positives.<br> Warnings that persist for a long time "
|
| 503 |
+
"will usually be reclassified as broken links."
|
| 504 |
+
msgstr ""
|
| 505 |
+
|
| 506 |
+
#: core/core.php:2247
|
| 507 |
+
msgctxt "admin notice under Tools - Broken links - Warnings"
|
| 508 |
+
msgid "Hide notice"
|
| 509 |
+
msgstr ""
|
| 510 |
+
|
| 511 |
+
#: core/core.php:2253
|
| 512 |
+
msgctxt "a link from the admin notice under Tools - Broken links - Warnings"
|
| 513 |
+
msgid "Change warning settings"
|
| 514 |
+
msgstr ""
|
| 515 |
+
|
| 516 |
+
#: core/core.php:2278
|
| 517 |
msgid "Table columns"
|
| 518 |
msgstr ""
|
| 519 |
|
| 520 |
+
#: core/core.php:2297
|
| 521 |
msgid "Show on screen"
|
| 522 |
msgstr ""
|
| 523 |
|
| 524 |
+
#: core/core.php:2304
|
| 525 |
msgid "links"
|
| 526 |
msgstr ""
|
| 527 |
|
| 528 |
+
#: core/core.php:2305 includes/admin/table-printer.php:171
|
| 529 |
msgid "Apply"
|
| 530 |
msgstr ""
|
| 531 |
|
| 532 |
+
#: core/core.php:2309
|
| 533 |
msgid "Misc"
|
| 534 |
msgstr ""
|
| 535 |
|
| 536 |
+
#: core/core.php:2324
|
| 537 |
msgid "Highlight links broken for at least %s days"
|
| 538 |
msgstr ""
|
| 539 |
|
| 540 |
+
#: core/core.php:2333
|
| 541 |
msgid "Color-code status codes"
|
| 542 |
msgstr ""
|
| 543 |
|
| 544 |
+
#: core/core.php:2350 core/core.php:2907 core/core.php:2948 core/core.php:2981
|
| 545 |
+
#: core/core.php:3070 core/core.php:3114 core/core.php:3175
|
| 546 |
msgid "You're not allowed to do that!"
|
| 547 |
msgstr ""
|
| 548 |
|
| 549 |
+
#: core/core.php:2778
|
| 550 |
msgid "View broken links"
|
| 551 |
msgstr ""
|
| 552 |
|
| 553 |
+
#: core/core.php:2779
|
| 554 |
msgid "Found %d broken link"
|
| 555 |
msgid_plural "Found %d broken links"
|
| 556 |
msgstr[0] ""
|
| 557 |
msgstr[1] ""
|
| 558 |
|
| 559 |
+
#: core/core.php:2785
|
| 560 |
msgid "No broken links found."
|
| 561 |
msgstr ""
|
| 562 |
|
| 563 |
+
#: core/core.php:2792
|
| 564 |
msgid "%d URL in the work queue"
|
| 565 |
msgid_plural "%d URLs in the work queue"
|
| 566 |
msgstr[0] ""
|
| 567 |
msgstr[1] ""
|
| 568 |
|
| 569 |
+
#: core/core.php:2795
|
| 570 |
msgid "No URLs in the work queue."
|
| 571 |
msgstr ""
|
| 572 |
|
| 573 |
+
#: core/core.php:2801
|
| 574 |
msgctxt "for the \"Detected X unique URLs in Y links\" message"
|
| 575 |
msgid "%d unique URL"
|
| 576 |
msgid_plural "%d unique URLs"
|
| 577 |
msgstr[0] ""
|
| 578 |
msgstr[1] ""
|
| 579 |
|
| 580 |
+
#: core/core.php:2805
|
| 581 |
msgctxt "for the \"Detected X unique URLs in Y links\" message"
|
| 582 |
msgid "%d link"
|
| 583 |
msgid_plural "%d links"
|
| 584 |
msgstr[0] ""
|
| 585 |
msgstr[1] ""
|
| 586 |
|
| 587 |
+
#: core/core.php:2811
|
| 588 |
msgid "Detected %1$s in %2$s and still searching..."
|
| 589 |
msgstr ""
|
| 590 |
|
| 591 |
+
#: core/core.php:2817
|
| 592 |
msgid "Detected %1$s in %2$s."
|
| 593 |
msgstr ""
|
| 594 |
|
| 595 |
+
#: core/core.php:2824
|
| 596 |
msgid "Searching your blog for links..."
|
| 597 |
msgstr ""
|
| 598 |
|
| 599 |
+
#: core/core.php:2826
|
| 600 |
msgid "No links detected."
|
| 601 |
msgstr ""
|
| 602 |
|
| 603 |
+
#: core/core.php:2852
|
| 604 |
msgctxt "current load"
|
| 605 |
msgid "Unknown"
|
| 606 |
msgstr ""
|
| 607 |
|
| 608 |
+
#: core/core.php:2915 core/core.php:2956 core/core.php:2996 core/core.php:3080
|
| 609 |
+
#: core/core.php:3129 core/core.php:3190
|
| 610 |
msgid "Oops, I can't find the link %d"
|
| 611 |
msgstr ""
|
| 612 |
|
| 613 |
+
#: core/core.php:2929 core/core.php:2966
|
| 614 |
msgid "Oops, couldn't modify the link!"
|
| 615 |
msgstr ""
|
| 616 |
|
| 617 |
+
#: core/core.php:2932 core/core.php:2969 core/core.php:3106 core/core.php:3120
|
| 618 |
+
#: core/core.php:3181
|
| 619 |
msgid "Error : link_id not specified"
|
| 620 |
msgstr ""
|
| 621 |
|
| 622 |
+
#: core/core.php:2987
|
| 623 |
msgid "Error : link_id or new_url not specified"
|
| 624 |
msgstr ""
|
| 625 |
|
| 626 |
+
#: core/core.php:3005
|
| 627 |
msgid "Oops, the new URL is invalid!"
|
| 628 |
msgstr ""
|
| 629 |
|
| 630 |
+
#: core/core.php:3020
|
| 631 |
msgid "An unexpected error occurred!"
|
| 632 |
msgstr ""
|
| 633 |
|
| 634 |
+
#: core/core.php:3089
|
| 635 |
msgid "An unexpected error occured!"
|
| 636 |
msgstr ""
|
| 637 |
|
| 638 |
+
#: core/core.php:3217
|
| 639 |
msgid "You don't have sufficient privileges to access this information!"
|
| 640 |
msgstr ""
|
| 641 |
|
| 642 |
+
#: core/core.php:3230
|
| 643 |
msgid "Error : link ID not specified"
|
| 644 |
msgstr ""
|
| 645 |
|
| 646 |
+
#: core/core.php:3244
|
| 647 |
msgid "Failed to load link details (%s)"
|
| 648 |
msgstr ""
|
| 649 |
|
| 650 |
+
#. #-#-#-#-# plugin.pot (Broken Link Checker 1.9.5) #-#-#-#-#
|
| 651 |
#. Plugin Name of the plugin/theme
|
| 652 |
+
#: core/core.php:3298
|
| 653 |
msgid "Broken Link Checker"
|
| 654 |
msgstr ""
|
| 655 |
|
| 656 |
+
#: core/core.php:3318
|
| 657 |
msgid "PHP version"
|
| 658 |
msgstr ""
|
| 659 |
|
| 660 |
+
#: core/core.php:3324
|
| 661 |
msgid "MySQL version"
|
| 662 |
msgstr ""
|
| 663 |
|
| 664 |
+
#: core/core.php:3337
|
| 665 |
msgid ""
|
| 666 |
"You have an old version of CURL. Redirect detection may not work properly."
|
| 667 |
msgstr ""
|
| 668 |
|
| 669 |
+
#: core/core.php:3349 core/core.php:3365 core/core.php:3370
|
| 670 |
msgid "Not installed"
|
| 671 |
msgstr ""
|
| 672 |
|
| 673 |
+
#: core/core.php:3352
|
| 674 |
msgid "CURL version"
|
| 675 |
msgstr ""
|
| 676 |
|
| 677 |
+
#: core/core.php:3358
|
| 678 |
msgid "Installed"
|
| 679 |
msgstr ""
|
| 680 |
|
| 681 |
+
#: core/core.php:3371
|
| 682 |
msgid "You must have either CURL or Snoopy installed for the plugin to work!"
|
| 683 |
msgstr ""
|
| 684 |
|
| 685 |
+
#: core/core.php:3382
|
| 686 |
msgid "On"
|
| 687 |
msgstr ""
|
| 688 |
|
| 689 |
+
#: core/core.php:3383
|
| 690 |
msgid "Redirects may be detected as broken links when safe_mode is on."
|
| 691 |
msgstr ""
|
| 692 |
|
| 693 |
+
#: core/core.php:3388 core/core.php:3402
|
| 694 |
msgid "Off"
|
| 695 |
msgstr ""
|
| 696 |
|
| 697 |
+
#: core/core.php:3396
|
| 698 |
msgid "On ( %s )"
|
| 699 |
msgstr ""
|
| 700 |
|
| 701 |
+
#: core/core.php:3397
|
| 702 |
msgid "Redirects may be detected as broken links when open_basedir is on."
|
| 703 |
msgstr ""
|
| 704 |
|
| 705 |
+
#: core/core.php:3426
|
| 706 |
msgid ""
|
| 707 |
"If this value is zero even after several page reloads you have probably "
|
| 708 |
"encountered a bug."
|
| 709 |
msgstr ""
|
| 710 |
|
| 711 |
+
#: core/core.php:3549 core/core.php:3668
|
| 712 |
msgid "[%s] Broken links detected"
|
| 713 |
msgstr ""
|
| 714 |
|
| 715 |
+
#: core/core.php:3554
|
| 716 |
msgid "Broken Link Checker has detected %d new broken link on your site."
|
| 717 |
msgid_plural ""
|
| 718 |
"Broken Link Checker has detected %d new broken links on your site."
|
| 719 |
msgstr[0] ""
|
| 720 |
msgstr[1] ""
|
| 721 |
|
| 722 |
+
#: core/core.php:3585
|
| 723 |
msgid "Here's a list of the first %d broken links:"
|
| 724 |
msgid_plural "Here's a list of the first %d broken links:"
|
| 725 |
msgstr[0] ""
|
| 726 |
msgstr[1] ""
|
| 727 |
|
| 728 |
+
#: core/core.php:3594
|
| 729 |
msgid "Here's a list of the new broken links: "
|
| 730 |
msgstr ""
|
| 731 |
|
| 732 |
+
#: core/core.php:3603
|
| 733 |
msgid "Link text : %s"
|
| 734 |
msgstr ""
|
| 735 |
|
| 736 |
+
#: core/core.php:3604
|
| 737 |
msgid "Link URL : <a href=\"%s\">%s</a>"
|
| 738 |
msgstr ""
|
| 739 |
|
| 740 |
+
#: core/core.php:3605
|
| 741 |
msgid "Source : %s"
|
| 742 |
msgstr ""
|
| 743 |
|
| 744 |
+
#: core/core.php:3619
|
| 745 |
msgid "You can see all broken links here:"
|
| 746 |
msgstr ""
|
| 747 |
|
| 748 |
+
#: core/core.php:3673
|
| 749 |
msgid "Broken Link Checker has detected %d new broken link in your posts."
|
| 750 |
msgid_plural ""
|
| 751 |
"Broken Link Checker has detected %d new broken links in your posts."
|
| 752 |
msgstr[0] ""
|
| 753 |
msgstr[1] ""
|
| 754 |
|
| 755 |
+
#: core/init.php:255
|
| 756 |
msgid "Once Weekly"
|
| 757 |
msgstr ""
|
| 758 |
|
| 759 |
+
#: core/init.php:261
|
| 760 |
msgid "Twice a Month"
|
| 761 |
msgstr ""
|
| 762 |
|
| 763 |
+
#: core/init.php:337
|
| 764 |
msgid ""
|
| 765 |
"Broken Link Checker installation failed. Try deactivating and then "
|
| 766 |
"reactivating the plugin."
|
| 767 |
msgstr ""
|
| 768 |
|
| 769 |
+
#: core/init.php:341
|
| 770 |
msgid ""
|
| 771 |
"Please activate the plugin separately on each site. Network activation is "
|
| 772 |
"not supported."
|
| 776 |
msgid "Failed to delete old DB tables. Database error : %s"
|
| 777 |
msgstr ""
|
| 778 |
|
| 779 |
+
#: includes/admin/links-page-js.php:63 includes/admin/links-page-js.php:639
|
| 780 |
msgid "Wait..."
|
| 781 |
msgstr ""
|
| 782 |
|
| 783 |
+
#: includes/admin/links-page-js.php:368
|
|
|
|
|
|
|
|
|
|
|
|
|
| 784 |
msgctxt "link text"
|
| 785 |
msgid "(None)"
|
| 786 |
msgstr ""
|
| 787 |
|
| 788 |
+
#: includes/admin/links-page-js.php:369
|
| 789 |
msgctxt "link text"
|
| 790 |
msgid "(Multiple links)"
|
| 791 |
msgstr ""
|
| 792 |
|
| 793 |
+
#: includes/admin/links-page-js.php:427
|
| 794 |
msgctxt "link suggestions"
|
| 795 |
msgid "Searching..."
|
| 796 |
msgstr ""
|
| 797 |
|
| 798 |
+
#: includes/admin/links-page-js.php:428
|
| 799 |
msgctxt "link suggestions"
|
| 800 |
msgid "No suggestions available."
|
| 801 |
msgstr ""
|
| 802 |
|
| 803 |
+
#: includes/admin/links-page-js.php:429
|
| 804 |
msgctxt "link suggestions"
|
| 805 |
msgid "Archived page from %s (via the Wayback Machine)"
|
| 806 |
msgstr ""
|
| 807 |
|
| 808 |
+
#: includes/admin/links-page-js.php:523
|
| 809 |
msgid "%d instances of the link were successfully modified."
|
| 810 |
msgstr ""
|
| 811 |
|
| 812 |
+
#: includes/admin/links-page-js.php:529
|
| 813 |
msgid ""
|
| 814 |
"However, %d instances couldn't be edited and still point to the old URL."
|
| 815 |
msgstr ""
|
| 816 |
|
| 817 |
+
#: includes/admin/links-page-js.php:535
|
| 818 |
msgid "The link could not be modified."
|
| 819 |
msgstr ""
|
| 820 |
|
| 821 |
+
#: includes/admin/links-page-js.php:538
|
| 822 |
msgid "The following error(s) occurred :"
|
| 823 |
msgstr ""
|
| 824 |
|
| 825 |
+
#: includes/admin/links-page-js.php:602
|
| 826 |
msgid "Error: Link URL must not be empty."
|
| 827 |
msgstr ""
|
| 828 |
|
| 829 |
+
#: includes/admin/links-page-js.php:677
|
| 830 |
msgid "%d instances of the link were successfully unlinked."
|
| 831 |
msgstr ""
|
| 832 |
|
| 833 |
+
#: includes/admin/links-page-js.php:683
|
| 834 |
msgid "However, %d instances couldn't be removed."
|
| 835 |
msgstr ""
|
| 836 |
|
| 837 |
+
#: includes/admin/links-page-js.php:688
|
| 838 |
msgid "The plugin failed to remove the link."
|
| 839 |
msgstr ""
|
| 840 |
|
| 841 |
+
#: includes/admin/links-page-js.php:691
|
| 842 |
msgid "The following error(s) occured :"
|
| 843 |
msgstr ""
|
| 844 |
|
| 845 |
+
#: includes/admin/links-page-js.php:737
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 846 |
msgid "Enter a name for the new custom filter"
|
| 847 |
msgstr ""
|
| 848 |
|
| 849 |
+
#: includes/admin/links-page-js.php:749
|
| 850 |
msgid ""
|
| 851 |
"You are about to delete the current filter.\n"
|
| 852 |
"'Cancel' to stop, 'OK' to delete"
|
| 853 |
msgstr ""
|
| 854 |
|
| 855 |
+
#: includes/admin/links-page-js.php:773
|
| 856 |
msgid ""
|
| 857 |
"Are you sure you want to delete all posts, bookmarks or other items that "
|
| 858 |
"contain any of the selected links? This action can't be undone.\n"
|
| 859 |
"'Cancel' to stop, 'OK' to delete"
|
| 860 |
msgstr ""
|
| 861 |
|
| 862 |
+
#: includes/admin/links-page-js.php:787
|
| 863 |
msgid ""
|
| 864 |
"Are you sure you want to remove the selected links? This action can't be "
|
| 865 |
"undone.\n"
|
| 866 |
"'Cancel' to stop, 'OK' to remove"
|
| 867 |
msgstr ""
|
| 868 |
|
| 869 |
+
#: includes/admin/links-page-js.php:899
|
| 870 |
msgid "Enter a search string first."
|
| 871 |
msgstr ""
|
| 872 |
|
| 873 |
+
#: includes/admin/links-page-js.php:906
|
| 874 |
msgid "Select one or more links to edit."
|
| 875 |
msgstr ""
|
| 876 |
|
| 886 |
msgid "Delete This Filter"
|
| 887 |
msgstr ""
|
| 888 |
|
| 889 |
+
#: includes/admin/search-form.php:32 includes/link-query.php:81
|
| 890 |
msgid "Search"
|
| 891 |
msgstr ""
|
| 892 |
|
| 898 |
msgid "URL"
|
| 899 |
msgstr ""
|
| 900 |
|
| 901 |
+
#: includes/admin/search-form.php:48 includes/admin/table-printer.php:542
|
| 902 |
msgid "HTTP code"
|
| 903 |
msgstr ""
|
| 904 |
|
| 922 |
msgid "Search Links"
|
| 923 |
msgstr ""
|
| 924 |
|
| 925 |
+
#: includes/admin/search-form.php:113 includes/admin/table-printer.php:368
|
| 926 |
+
#: includes/admin/table-printer.php:747 includes/admin/table-printer.php:872
|
| 927 |
msgid "Cancel"
|
| 928 |
msgstr ""
|
| 929 |
|
| 965 |
msgid "Redirect URL"
|
| 966 |
msgstr ""
|
| 967 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 968 |
#: includes/admin/table-printer.php:286
|
| 969 |
+
msgid "Bulk Actions"
|
| 970 |
msgstr ""
|
| 971 |
|
| 972 |
+
#: includes/admin/table-printer.php:289
|
| 973 |
msgid "Fix redirects"
|
| 974 |
msgstr ""
|
| 975 |
|
| 976 |
+
#: includes/admin/table-printer.php:290
|
| 977 |
msgid "Mark as not broken"
|
| 978 |
msgstr ""
|
| 979 |
|
| 980 |
+
#: includes/admin/table-printer.php:295
|
| 981 |
msgid "Move sources to Trash"
|
| 982 |
msgstr ""
|
| 983 |
|
| 984 |
+
#: includes/admin/table-printer.php:297
|
| 985 |
msgid "Delete sources"
|
| 986 |
msgstr ""
|
| 987 |
|
| 988 |
+
#: includes/admin/table-printer.php:312
|
| 989 |
msgid "«"
|
| 990 |
msgstr ""
|
| 991 |
|
| 992 |
+
#: includes/admin/table-printer.php:313
|
| 993 |
msgid "»"
|
| 994 |
msgstr ""
|
| 995 |
|
| 996 |
+
#: includes/admin/table-printer.php:321
|
| 997 |
msgid "Displaying %s–%s of <span class=\"current-link-count\">%s</span>"
|
| 998 |
msgstr ""
|
| 999 |
|
| 1000 |
+
#: includes/admin/table-printer.php:344
|
| 1001 |
msgid "Bulk Edit URLs"
|
| 1002 |
msgstr ""
|
| 1003 |
|
| 1004 |
+
#: includes/admin/table-printer.php:346
|
| 1005 |
msgid "Find"
|
| 1006 |
msgstr ""
|
| 1007 |
|
| 1008 |
+
#: includes/admin/table-printer.php:350
|
| 1009 |
msgid "Replace with"
|
| 1010 |
msgstr ""
|
| 1011 |
|
| 1012 |
+
#: includes/admin/table-printer.php:358
|
| 1013 |
msgid "Case sensitive"
|
| 1014 |
msgstr ""
|
| 1015 |
|
| 1016 |
+
#: includes/admin/table-printer.php:362
|
| 1017 |
msgid "Regular expression"
|
| 1018 |
msgstr ""
|
| 1019 |
|
| 1020 |
+
#: includes/admin/table-printer.php:370 includes/admin/table-printer.php:873
|
| 1021 |
msgid "Update"
|
| 1022 |
msgstr ""
|
| 1023 |
|
| 1024 |
+
#: includes/admin/table-printer.php:523
|
| 1025 |
msgid "Post published on"
|
| 1026 |
msgstr ""
|
| 1027 |
|
| 1028 |
+
#: includes/admin/table-printer.php:528
|
| 1029 |
msgid "Link last checked"
|
| 1030 |
msgstr ""
|
| 1031 |
|
| 1032 |
+
#: includes/admin/table-printer.php:532
|
| 1033 |
msgid "Never"
|
| 1034 |
msgstr ""
|
| 1035 |
|
| 1036 |
+
#: includes/admin/table-printer.php:547
|
| 1037 |
msgid "Response time"
|
| 1038 |
msgstr ""
|
| 1039 |
|
| 1040 |
+
#: includes/admin/table-printer.php:549
|
| 1041 |
msgid "%2.3f seconds"
|
| 1042 |
msgstr ""
|
| 1043 |
|
| 1044 |
+
#: includes/admin/table-printer.php:552
|
| 1045 |
msgid "Final URL"
|
| 1046 |
msgstr ""
|
| 1047 |
|
| 1048 |
+
#: includes/admin/table-printer.php:557
|
| 1049 |
msgid "Redirect count"
|
| 1050 |
msgstr ""
|
| 1051 |
|
| 1052 |
+
#: includes/admin/table-printer.php:562
|
| 1053 |
msgid "Instance count"
|
| 1054 |
msgstr ""
|
| 1055 |
|
| 1056 |
+
#: includes/admin/table-printer.php:571
|
| 1057 |
msgid "This link has failed %d time."
|
| 1058 |
msgid_plural "This link has failed %d times."
|
| 1059 |
msgstr[0] ""
|
| 1060 |
msgstr[1] ""
|
| 1061 |
|
| 1062 |
+
#: includes/admin/table-printer.php:579
|
| 1063 |
msgid "This link has been broken for %s."
|
| 1064 |
msgstr ""
|
| 1065 |
|
| 1066 |
+
#: includes/admin/table-printer.php:590
|
| 1067 |
msgid "Log"
|
| 1068 |
msgstr ""
|
| 1069 |
|
| 1070 |
+
#: includes/admin/table-printer.php:615 includes/admin/table-printer.php:660
|
| 1071 |
msgid "Show more info about this link"
|
| 1072 |
msgstr ""
|
| 1073 |
|
| 1074 |
+
#: includes/admin/table-printer.php:633
|
| 1075 |
msgctxt "checked how long ago"
|
| 1076 |
msgid "Checked"
|
| 1077 |
msgstr ""
|
| 1078 |
|
| 1079 |
+
#: includes/admin/table-printer.php:649
|
| 1080 |
msgid "Broken for"
|
| 1081 |
msgstr ""
|
| 1082 |
|
| 1083 |
+
#: includes/admin/table-printer.php:661
|
| 1084 |
+
msgctxt "link in the \"Status\" column"
|
| 1085 |
+
msgid "Details"
|
| 1086 |
+
msgstr ""
|
| 1087 |
+
|
| 1088 |
+
#: includes/admin/table-printer.php:678
|
| 1089 |
msgid "Edit this link"
|
| 1090 |
msgstr ""
|
| 1091 |
|
| 1092 |
+
#: includes/admin/table-printer.php:680
|
| 1093 |
msgid "Remove this link from all posts"
|
| 1094 |
msgstr ""
|
| 1095 |
|
| 1096 |
+
#: includes/admin/table-printer.php:686
|
| 1097 |
msgid "Remove this link from the list of broken links and mark it as valid"
|
| 1098 |
msgstr ""
|
| 1099 |
|
| 1100 |
+
#: includes/admin/table-printer.php:694
|
| 1101 |
msgid "Hide this link and do not report it again unless its status changes"
|
| 1102 |
msgstr ""
|
| 1103 |
|
| 1104 |
+
#: includes/admin/table-printer.php:700
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1105 |
msgid "Undismiss this link"
|
| 1106 |
msgstr ""
|
| 1107 |
|
| 1108 |
+
#: includes/admin/table-printer.php:701
|
| 1109 |
msgid "Undismiss"
|
| 1110 |
msgstr ""
|
| 1111 |
|
| 1112 |
+
#: includes/admin/table-printer.php:714
|
| 1113 |
+
msgid "Replace this redirect with a direct link"
|
| 1114 |
+
msgstr ""
|
| 1115 |
+
|
| 1116 |
+
#: includes/admin/table-printer.php:748
|
| 1117 |
msgid "Update URL"
|
| 1118 |
msgstr ""
|
| 1119 |
|
| 1120 |
+
#: includes/admin/table-printer.php:775
|
| 1121 |
msgid "[An orphaned link! This is a bug.]"
|
| 1122 |
msgstr ""
|
| 1123 |
|
| 1124 |
+
#: includes/admin/table-printer.php:852
|
| 1125 |
msgctxt "inline editor title"
|
| 1126 |
msgid "Edit Link"
|
| 1127 |
msgstr ""
|
| 1128 |
|
| 1129 |
+
#: includes/admin/table-printer.php:855
|
| 1130 |
msgctxt "inline link editor"
|
| 1131 |
msgid "Text"
|
| 1132 |
msgstr ""
|
| 1133 |
|
| 1134 |
+
#: includes/admin/table-printer.php:860
|
| 1135 |
msgctxt "inline link editor"
|
| 1136 |
msgid "URL"
|
| 1137 |
msgstr ""
|
| 1138 |
|
| 1139 |
+
#: includes/admin/table-printer.php:865
|
| 1140 |
msgctxt "inline link editor"
|
| 1141 |
msgid "Suggestions"
|
| 1142 |
msgstr ""
|
| 1143 |
|
| 1144 |
+
#: includes/admin/table-printer.php:885
|
| 1145 |
msgid "Use this URL"
|
| 1146 |
msgstr ""
|
| 1147 |
|
| 1148 |
+
#: includes/any-post.php:426 modules/containers/blogroll.php:46
|
| 1149 |
+
#: modules/containers/comment.php:159 modules/containers/custom_field.php:230
|
| 1150 |
msgid "Edit"
|
| 1151 |
msgstr ""
|
| 1152 |
|
| 1153 |
+
#: includes/any-post.php:434 modules/containers/custom_field.php:236
|
| 1154 |
msgid "Move this item to the Trash"
|
| 1155 |
msgstr ""
|
| 1156 |
|
| 1157 |
+
#: includes/any-post.php:436 modules/containers/custom_field.php:238
|
| 1158 |
msgid "Trash"
|
| 1159 |
msgstr ""
|
| 1160 |
|
| 1161 |
+
#: includes/any-post.php:441 modules/containers/custom_field.php:243
|
| 1162 |
msgid "Delete this item permanently"
|
| 1163 |
msgstr ""
|
| 1164 |
|
| 1165 |
+
#: includes/any-post.php:443 modules/containers/blogroll.php:47
|
| 1166 |
+
#: modules/containers/custom_field.php:245
|
| 1167 |
msgid "Delete"
|
| 1168 |
msgstr ""
|
| 1169 |
|
| 1170 |
+
#: includes/any-post.php:456
|
| 1171 |
msgid "Preview “%s”"
|
| 1172 |
msgstr ""
|
| 1173 |
|
| 1174 |
+
#: includes/any-post.php:457
|
| 1175 |
msgid "Preview"
|
| 1176 |
msgstr ""
|
| 1177 |
|
| 1178 |
+
#: includes/any-post.php:464
|
| 1179 |
msgid "View “%s”"
|
| 1180 |
msgstr ""
|
| 1181 |
|
| 1182 |
+
#: includes/any-post.php:465 modules/containers/comment.php:172
|
| 1183 |
+
#: modules/containers/custom_field.php:250
|
| 1184 |
msgid "View"
|
| 1185 |
msgstr ""
|
| 1186 |
|
| 1187 |
+
#: includes/any-post.php:484 modules/containers/custom_field.php:230
|
| 1188 |
msgid "Edit this item"
|
| 1189 |
msgstr ""
|
| 1190 |
|
| 1191 |
+
#: includes/any-post.php:548 modules/containers/blogroll.php:83
|
| 1192 |
#: modules/containers/comment.php:43
|
| 1193 |
msgid "Nothing to update"
|
| 1194 |
msgstr ""
|
| 1195 |
|
| 1196 |
+
#: includes/any-post.php:558
|
| 1197 |
msgid "Updating post %d failed"
|
| 1198 |
msgstr ""
|
| 1199 |
|
| 1200 |
+
#: includes/any-post.php:595 modules/containers/custom_field.php:317
|
| 1201 |
msgid "Failed to delete post \"%s\" (%d)"
|
| 1202 |
msgstr ""
|
| 1203 |
|
| 1204 |
+
#: includes/any-post.php:614 modules/containers/custom_field.php:336
|
| 1205 |
msgid ""
|
| 1206 |
"Can't move post \"%s\" (%d) to the trash because the trash feature is "
|
| 1207 |
"disabled"
|
| 1208 |
msgstr ""
|
| 1209 |
|
| 1210 |
+
#: includes/any-post.php:634 modules/containers/custom_field.php:355
|
| 1211 |
msgid "Failed to move post \"%s\" (%d) to the trash"
|
| 1212 |
msgstr ""
|
| 1213 |
|
| 1214 |
+
#: includes/any-post.php:742
|
| 1215 |
msgid "%d post deleted."
|
| 1216 |
msgid_plural "%d posts deleted."
|
| 1217 |
msgstr[0] ""
|
| 1218 |
msgstr[1] ""
|
| 1219 |
|
| 1220 |
+
#: includes/any-post.php:744
|
| 1221 |
msgid "%d page deleted."
|
| 1222 |
msgid_plural "%d pages deleted."
|
| 1223 |
msgstr[0] ""
|
| 1224 |
msgstr[1] ""
|
| 1225 |
|
| 1226 |
+
#: includes/any-post.php:746
|
| 1227 |
msgid "%d \"%s\" deleted."
|
| 1228 |
msgid_plural "%d \"%s\" deleted."
|
| 1229 |
msgstr[0] ""
|
| 1230 |
msgstr[1] ""
|
| 1231 |
|
| 1232 |
+
#: includes/any-post.php:765
|
| 1233 |
msgid "%d post moved to the Trash."
|
| 1234 |
msgid_plural "%d posts moved to the Trash."
|
| 1235 |
msgstr[0] ""
|
| 1236 |
msgstr[1] ""
|
| 1237 |
|
| 1238 |
+
#: includes/any-post.php:767
|
| 1239 |
msgid "%d page moved to the Trash."
|
| 1240 |
msgid_plural "%d pages moved to the Trash."
|
| 1241 |
msgstr[0] ""
|
| 1242 |
msgstr[1] ""
|
| 1243 |
|
| 1244 |
+
#: includes/any-post.php:769
|
| 1245 |
msgid "%d \"%s\" moved to the Trash."
|
| 1246 |
msgid_plural "%d \"%s\" moved to the Trash."
|
| 1247 |
msgstr[0] ""
|
| 1360 |
msgid "Parser '%s' not found."
|
| 1361 |
msgstr ""
|
| 1362 |
|
| 1363 |
+
#: includes/link-query.php:25
|
| 1364 |
+
msgid "All"
|
| 1365 |
msgstr ""
|
| 1366 |
|
| 1367 |
+
#: includes/link-query.php:26
|
| 1368 |
+
msgid "Detected Links"
|
| 1369 |
msgstr ""
|
| 1370 |
|
| 1371 |
+
#: includes/link-query.php:27
|
| 1372 |
+
msgid "No links found (yet)"
|
| 1373 |
msgstr ""
|
| 1374 |
|
| 1375 |
+
#: includes/link-query.php:36
|
| 1376 |
+
msgid "Broken"
|
| 1377 |
msgstr ""
|
| 1378 |
|
| 1379 |
#: includes/link-query.php:38
|
| 1380 |
+
msgid "No broken links found"
|
| 1381 |
msgstr ""
|
| 1382 |
|
| 1383 |
#: includes/link-query.php:46
|
| 1384 |
+
msgctxt "filter name"
|
| 1385 |
+
msgid "Warnings"
|
| 1386 |
msgstr ""
|
| 1387 |
|
| 1388 |
#: includes/link-query.php:47
|
| 1389 |
+
msgid "Warnings"
|
| 1390 |
msgstr ""
|
| 1391 |
|
| 1392 |
#: includes/link-query.php:48
|
| 1393 |
+
msgid "No warnings found"
|
| 1394 |
msgstr ""
|
| 1395 |
|
| 1396 |
#: includes/link-query.php:56
|
| 1397 |
+
msgid "Redirects"
|
| 1398 |
msgstr ""
|
| 1399 |
|
| 1400 |
#: includes/link-query.php:57
|
| 1401 |
+
msgid "Redirected Links"
|
| 1402 |
msgstr ""
|
| 1403 |
|
| 1404 |
#: includes/link-query.php:58
|
| 1405 |
+
msgid "No redirects found"
|
| 1406 |
msgstr ""
|
| 1407 |
|
| 1408 |
#: includes/link-query.php:66
|
| 1409 |
+
msgid "Dismissed"
|
| 1410 |
+
msgstr ""
|
| 1411 |
+
|
| 1412 |
+
#: includes/link-query.php:67
|
| 1413 |
+
msgid "Dismissed Links"
|
| 1414 |
+
msgstr ""
|
| 1415 |
+
|
| 1416 |
+
#: includes/link-query.php:68
|
| 1417 |
+
msgid "No dismissed links found"
|
| 1418 |
+
msgstr ""
|
| 1419 |
+
|
| 1420 |
+
#: includes/link-query.php:82
|
| 1421 |
msgid "Search Results"
|
| 1422 |
msgstr ""
|
| 1423 |
|
| 1424 |
+
#: includes/link-query.php:83 includes/link-query.php:130
|
| 1425 |
msgid "No links found for your query"
|
| 1426 |
msgstr ""
|
| 1427 |
|
| 1428 |
+
#: includes/links.php:224
|
| 1429 |
msgid "The plugin script was terminated while trying to check the link."
|
| 1430 |
msgstr ""
|
| 1431 |
|
| 1432 |
+
#: includes/links.php:271
|
| 1433 |
msgid "The plugin doesn't know how to check this type of link."
|
| 1434 |
msgstr ""
|
| 1435 |
|
| 1436 |
+
#: includes/links.php:502
|
| 1437 |
+
msgid "Link is broken."
|
| 1438 |
msgstr ""
|
| 1439 |
|
| 1440 |
+
#: includes/links.php:504
|
| 1441 |
+
msgid "Link is valid."
|
| 1442 |
msgstr ""
|
| 1443 |
|
| 1444 |
+
#: includes/links.php:728 includes/links.php:830 includes/links.php:857
|
| 1445 |
msgid "Link is not valid"
|
| 1446 |
msgstr ""
|
| 1447 |
|
| 1448 |
+
#: includes/links.php:745
|
| 1449 |
msgid ""
|
| 1450 |
"This link can not be edited because it is not used anywhere on this site."
|
| 1451 |
msgstr ""
|
| 1452 |
|
| 1453 |
+
#: includes/links.php:771
|
| 1454 |
msgid "Failed to create a DB entry for the new URL."
|
| 1455 |
msgstr ""
|
| 1456 |
|
| 1457 |
+
#: includes/links.php:837
|
| 1458 |
msgid "This link is not a redirect"
|
| 1459 |
msgstr ""
|
| 1460 |
|
| 1461 |
+
#: includes/links.php:884 includes/links.php:921
|
| 1462 |
msgid "Couldn't delete the link's database record"
|
| 1463 |
msgstr ""
|
| 1464 |
|
| 1465 |
+
#: includes/links.php:995
|
| 1466 |
msgctxt "link status"
|
| 1467 |
msgid "Unknown"
|
| 1468 |
msgstr ""
|
| 1469 |
|
| 1470 |
+
#: includes/links.php:1008 modules/checkers/http.php:308
|
| 1471 |
+
#: modules/extras/mediafire.php:115
|
| 1472 |
msgid "Unknown Error"
|
| 1473 |
msgstr ""
|
| 1474 |
|
| 1475 |
+
#: includes/links.php:1032
|
| 1476 |
msgid "Not checked"
|
| 1477 |
msgstr ""
|
| 1478 |
|
| 1479 |
+
#: includes/links.php:1035
|
| 1480 |
msgid "False positive"
|
| 1481 |
msgstr ""
|
| 1482 |
|
| 1483 |
+
#: includes/links.php:1038 modules/extras/rapidshare.php:145
|
| 1484 |
#: modules/extras/rapidshare.php:151 modules/extras/rapidshare.php:178
|
| 1485 |
msgctxt "link status"
|
| 1486 |
msgid "OK"
|
| 1554 |
msgstr[0] ""
|
| 1555 |
msgstr[1] ""
|
| 1556 |
|
| 1557 |
+
#: modules/checkers/http.php:285
|
| 1558 |
msgid "Server Not Found"
|
| 1559 |
msgstr ""
|
| 1560 |
|
| 1561 |
+
#: modules/checkers/http.php:301
|
| 1562 |
msgid "Connection Failed"
|
| 1563 |
msgstr ""
|
| 1564 |
|
| 1565 |
+
#: modules/checkers/http.php:344 modules/checkers/http.php:414
|
| 1566 |
msgid "HTTP code : %d"
|
| 1567 |
msgstr ""
|
| 1568 |
|
| 1569 |
+
#: modules/checkers/http.php:346 modules/checkers/http.php:416
|
| 1570 |
msgid "(No response)"
|
| 1571 |
msgstr ""
|
| 1572 |
|
| 1573 |
+
#: modules/checkers/http.php:352
|
| 1574 |
msgid "Most likely the connection timed out or the domain doesn't exist."
|
| 1575 |
msgstr ""
|
| 1576 |
|
| 1577 |
+
#: modules/checkers/http.php:423
|
| 1578 |
msgid "Request timed out."
|
| 1579 |
msgstr ""
|
| 1580 |
|
| 1581 |
+
#: modules/checkers/http.php:441
|
| 1582 |
msgid "Using Snoopy"
|
| 1583 |
msgstr ""
|
| 1584 |
|
| 1622 |
msgid "Can't move comment %d to the trash"
|
| 1623 |
msgstr ""
|
| 1624 |
|
| 1625 |
+
#: modules/containers/comment.php:159 modules/containers/comment.php:201
|
| 1626 |
msgid "Edit comment"
|
| 1627 |
msgstr ""
|
| 1628 |
|
| 1629 |
+
#: modules/containers/comment.php:166
|
| 1630 |
msgid "Delete Permanently"
|
| 1631 |
msgstr ""
|
| 1632 |
|
| 1633 |
+
#: modules/containers/comment.php:168
|
| 1634 |
msgid "Move this comment to the trash"
|
| 1635 |
msgstr ""
|
| 1636 |
|
| 1637 |
+
#: modules/containers/comment.php:168
|
| 1638 |
msgctxt "verb"
|
| 1639 |
msgid "Trash"
|
| 1640 |
msgstr ""
|
| 1641 |
|
| 1642 |
+
#: modules/containers/comment.php:172
|
| 1643 |
msgid "View comment"
|
| 1644 |
msgstr ""
|
| 1645 |
|
| 1646 |
+
#: modules/containers/comment.php:189
|
| 1647 |
msgid "Comment"
|
| 1648 |
msgstr ""
|
| 1649 |
|
| 1650 |
+
#: modules/containers/comment.php:364
|
| 1651 |
msgid "%d comment has been deleted."
|
| 1652 |
msgid_plural "%d comments have been deleted."
|
| 1653 |
msgstr[0] ""
|
| 1654 |
msgstr[1] ""
|
| 1655 |
|
| 1656 |
+
#: modules/containers/comment.php:383
|
| 1657 |
msgid "%d comment moved to the Trash."
|
| 1658 |
msgid_plural "%d comments moved to the Trash."
|
| 1659 |
msgstr[0] ""
|
| 1667 |
msgid "Failed to delete the meta field '%s' on %s [%d]"
|
| 1668 |
msgstr ""
|
| 1669 |
|
| 1670 |
+
#: modules/containers/custom_field.php:216
|
| 1671 |
msgid "Edit this post"
|
| 1672 |
msgstr ""
|
| 1673 |
|
| 1674 |
+
#: modules/containers/custom_field.php:250
|
| 1675 |
msgid "View \"%s\""
|
| 1676 |
msgstr ""
|
| 1677 |
|
| 1701 |
msgid "Embedded GoogleVideo video"
|
| 1702 |
msgstr ""
|
| 1703 |
|
| 1704 |
+
#: modules/extras/mediafire.php:97 modules/extras/mediafire.php:103
|
| 1705 |
#: modules/extras/rapidshare.php:139
|
| 1706 |
msgid "Not Found"
|
| 1707 |
msgstr ""
|
| 1708 |
|
| 1709 |
+
#: modules/extras/mediafire.php:109
|
| 1710 |
+
msgid "Permission Denied"
|
| 1711 |
+
msgstr ""
|
| 1712 |
+
|
| 1713 |
#: modules/extras/rapidshare.php:51
|
| 1714 |
msgid "Using RapidShare API"
|
| 1715 |
msgstr ""
|
modules/checkers/http.php
CHANGED
|
@@ -166,6 +166,8 @@ class blcCurlHttp extends blcHttpCheckerBase {
|
|
| 166 |
|
| 167 |
$result = array(
|
| 168 |
'broken' => false,
|
|
|
|
|
|
|
| 169 |
);
|
| 170 |
$log = '';
|
| 171 |
|
|
@@ -281,6 +283,7 @@ class blcCurlHttp extends blcHttpCheckerBase {
|
|
| 281 |
case 6: //CURLE_COULDNT_RESOLVE_HOST
|
| 282 |
$result['status_code'] = BLC_LINK_STATUS_WARNING;
|
| 283 |
$result['status_text'] = __('Server Not Found', 'broken-link-checker');
|
|
|
|
| 284 |
break;
|
| 285 |
|
| 286 |
case 28: //CURLE_OPERATION_TIMEDOUT
|
|
@@ -296,6 +299,7 @@ class blcCurlHttp extends blcHttpCheckerBase {
|
|
| 296 |
} else {
|
| 297 |
$result['status_code'] = BLC_LINK_STATUS_WARNING;
|
| 298 |
$result['status_text'] = __('Connection Failed', 'broken-link-checker');
|
|
|
|
| 299 |
}
|
| 300 |
break;
|
| 301 |
|
| 166 |
|
| 167 |
$result = array(
|
| 168 |
'broken' => false,
|
| 169 |
+
'timeout' => false,
|
| 170 |
+
'warning' => false,
|
| 171 |
);
|
| 172 |
$log = '';
|
| 173 |
|
| 283 |
case 6: //CURLE_COULDNT_RESOLVE_HOST
|
| 284 |
$result['status_code'] = BLC_LINK_STATUS_WARNING;
|
| 285 |
$result['status_text'] = __('Server Not Found', 'broken-link-checker');
|
| 286 |
+
$result['error_code'] = 'couldnt_resolve_host';
|
| 287 |
break;
|
| 288 |
|
| 289 |
case 28: //CURLE_OPERATION_TIMEDOUT
|
| 299 |
} else {
|
| 300 |
$result['status_code'] = BLC_LINK_STATUS_WARNING;
|
| 301 |
$result['status_text'] = __('Connection Failed', 'broken-link-checker');
|
| 302 |
+
$result['error_code'] = 'connection_failed';
|
| 303 |
}
|
| 304 |
break;
|
| 305 |
|
modules/containers/blogroll.php
CHANGED
|
@@ -37,7 +37,7 @@ class blcBookmark extends blcContainer{
|
|
| 37 |
|
| 38 |
function ui_get_action_links($container_field){
|
| 39 |
//Inline action links for bookmarks
|
| 40 |
-
$bookmark =
|
| 41 |
|
| 42 |
$delete_url = admin_url( wp_nonce_url("link.php?action=delete&link_id={$this->container_id}", 'delete-bookmark_' . $this->container_id) );
|
| 43 |
|
| 37 |
|
| 38 |
function ui_get_action_links($container_field){
|
| 39 |
//Inline action links for bookmarks
|
| 40 |
+
$bookmark = $this->get_wrapped_object();
|
| 41 |
|
| 42 |
$delete_url = admin_url( wp_nonce_url("link.php?action=delete&link_id={$this->container_id}", 'delete-bookmark_' . $this->container_id) );
|
| 43 |
|
modules/containers/comment.php
CHANGED
|
@@ -24,7 +24,7 @@ class blcComment extends blcContainer{
|
|
| 24 |
*/
|
| 25 |
function get_wrapped_object($ensure_consistency = false){
|
| 26 |
if( $ensure_consistency || is_null($this->wrapped_object) ){
|
| 27 |
-
$this->wrapped_object =
|
| 28 |
}
|
| 29 |
return $this->wrapped_object;
|
| 30 |
}
|
|
@@ -106,7 +106,7 @@ class blcComment extends blcContainer{
|
|
| 106 |
*/
|
| 107 |
function current_user_can_delete(){
|
| 108 |
//TODO: Fix for custom post types? WP itself doesn't care, at least in 3.0.
|
| 109 |
-
$comment =
|
| 110 |
return current_user_can('edit_post', $comment->comment_post_ID);
|
| 111 |
}
|
| 112 |
|
|
@@ -146,9 +146,15 @@ class blcComment extends blcContainer{
|
|
| 146 |
|
| 147 |
$comment = $this->get_wrapped_object();
|
| 148 |
$post = get_post($comment->comment_post_ID); /* @var StdClass $post */
|
| 149 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
//Display Edit & Delete/Trash links only if the user has the right caps.
|
| 151 |
-
$user_can = current_user_can('edit_post', $comment->comment_post_ID);
|
| 152 |
if ( $user_can ){
|
| 153 |
$actions['edit'] = "<a href='". $this->get_edit_url() ."' title='" . esc_attr__('Edit comment') . "'>". __('Edit') . '</a>';
|
| 154 |
|
|
@@ -226,12 +232,12 @@ class blcCommentManager extends blcContainerManager {
|
|
| 226 |
function init(){
|
| 227 |
parent::init();
|
| 228 |
|
| 229 |
-
add_action('post_comment', array(
|
| 230 |
-
add_action('edit_comment', array(
|
| 231 |
-
add_action('transition_comment_status', array(
|
| 232 |
|
| 233 |
-
add_action('trashed_post_comments', array(
|
| 234 |
-
add_action('untrash_post_comments', array(
|
| 235 |
}
|
| 236 |
|
| 237 |
function hook_post_comment($comment_id, $comment_status){
|
|
@@ -261,7 +267,7 @@ class blcCommentManager extends blcContainerManager {
|
|
| 261 |
}
|
| 262 |
}
|
| 263 |
|
| 264 |
-
function hook_trashed_post_comments(
|
| 265 |
foreach($statuses as $comment_id => $comment_status){
|
| 266 |
if ( $comment_status == '1' ){
|
| 267 |
$container = blcContainerHelper::get_container(array($this->container_type, $comment_id));
|
| 24 |
*/
|
| 25 |
function get_wrapped_object($ensure_consistency = false){
|
| 26 |
if( $ensure_consistency || is_null($this->wrapped_object) ){
|
| 27 |
+
$this->wrapped_object = get_comment($this->container_id);
|
| 28 |
}
|
| 29 |
return $this->wrapped_object;
|
| 30 |
}
|
| 106 |
*/
|
| 107 |
function current_user_can_delete(){
|
| 108 |
//TODO: Fix for custom post types? WP itself doesn't care, at least in 3.0.
|
| 109 |
+
$comment = $this->get_wrapped_object();
|
| 110 |
return current_user_can('edit_post', $comment->comment_post_ID);
|
| 111 |
}
|
| 112 |
|
| 146 |
|
| 147 |
$comment = $this->get_wrapped_object();
|
| 148 |
$post = get_post($comment->comment_post_ID); /* @var StdClass $post */
|
| 149 |
+
|
| 150 |
+
//If the post type no longer exists, we can't really do anything with this comment.
|
| 151 |
+
//WordPress will just throw errors if we try.
|
| 152 |
+
if ( !post_type_exists(get_post_type($post)) ) {
|
| 153 |
+
return $actions;
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
//Display Edit & Delete/Trash links only if the user has the right caps.
|
| 157 |
+
$user_can = current_user_can('edit_post', $comment->comment_post_ID);
|
| 158 |
if ( $user_can ){
|
| 159 |
$actions['edit'] = "<a href='". $this->get_edit_url() ."' title='" . esc_attr__('Edit comment') . "'>". __('Edit') . '</a>';
|
| 160 |
|
| 232 |
function init(){
|
| 233 |
parent::init();
|
| 234 |
|
| 235 |
+
add_action('post_comment', array($this, 'hook_post_comment'), 10, 2);
|
| 236 |
+
add_action('edit_comment', array($this, 'hook_edit_comment'));
|
| 237 |
+
add_action('transition_comment_status', array($this, 'hook_comment_status'), 10, 3);
|
| 238 |
|
| 239 |
+
add_action('trashed_post_comments', array($this, 'hook_trashed_post_comments'), 10, 2);
|
| 240 |
+
add_action('untrash_post_comments', array($this, 'hook_untrash_post_comments'));
|
| 241 |
}
|
| 242 |
|
| 243 |
function hook_post_comment($comment_id, $comment_status){
|
| 267 |
}
|
| 268 |
}
|
| 269 |
|
| 270 |
+
function hook_trashed_post_comments(/** @noinspection PhpUnusedParameterInspection */$post_id, $statuses){
|
| 271 |
foreach($statuses as $comment_id => $comment_status){
|
| 272 |
if ( $comment_status == '1' ){
|
| 273 |
$container = blcContainerHelper::get_container(array($this->container_type, $comment_id));
|
modules/containers/custom_field.php
CHANGED
|
@@ -191,6 +191,25 @@ class blcPostMeta extends blcContainer {
|
|
| 191 |
}
|
| 192 |
|
| 193 |
function ui_get_source($container_field = '', $context = 'display'){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 194 |
$post_html = sprintf(
|
| 195 |
'<a class="row-title" href="%s" title="%s">%s</a>',
|
| 196 |
esc_url($this->get_edit_url()),
|
|
@@ -203,6 +222,10 @@ class blcPostMeta extends blcContainer {
|
|
| 203 |
|
| 204 |
function ui_get_action_links($container_field){
|
| 205 |
$actions = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
if ( current_user_can('edit_post', $this->container_id) ) {
|
| 207 |
$actions['edit'] = '<span class="edit"><a href="' . $this->get_edit_url() . '" title="' . esc_attr(__('Edit this item')) . '">' . __('Edit') . '</a>';
|
| 208 |
|
| 191 |
}
|
| 192 |
|
| 193 |
function ui_get_source($container_field = '', $context = 'display'){
|
| 194 |
+
if ( !post_type_exists(get_post_type($this->container_id)) ) {
|
| 195 |
+
//Error: Invalid post type. The user probably removed a CPT without removing the actual posts.
|
| 196 |
+
$post_html = '';
|
| 197 |
+
|
| 198 |
+
$post = get_post($this->container_id);
|
| 199 |
+
if ( $post ) {
|
| 200 |
+
$post_html .= sprintf(
|
| 201 |
+
'<span class="row-title">%s</span><br>',
|
| 202 |
+
get_the_title($post)
|
| 203 |
+
);
|
| 204 |
+
}
|
| 205 |
+
$post_html .= sprintf(
|
| 206 |
+
'Invalid post type "%s"',
|
| 207 |
+
htmlentities($this->container_type)
|
| 208 |
+
);
|
| 209 |
+
|
| 210 |
+
return $post_html;
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
$post_html = sprintf(
|
| 214 |
'<a class="row-title" href="%s" title="%s">%s</a>',
|
| 215 |
esc_url($this->get_edit_url()),
|
| 222 |
|
| 223 |
function ui_get_action_links($container_field){
|
| 224 |
$actions = array();
|
| 225 |
+
if ( !post_type_exists(get_post_type($this->container_id)) ) {
|
| 226 |
+
return $actions;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
if ( current_user_can('edit_post', $this->container_id) ) {
|
| 230 |
$actions['edit'] = '<span class="edit"><a href="' . $this->get_edit_url() . '" title="' . esc_attr(__('Edit this item')) . '">' . __('Edit') . '</a>';
|
| 231 |
|
modules/extras/mediafire.php
CHANGED
|
@@ -12,7 +12,7 @@ ModuleLazyInit: true
|
|
| 12 |
ModuleClassName: blcMediaFireChecker
|
| 13 |
ModulePriority: 100
|
| 14 |
|
| 15 |
-
ModuleCheckerUrlPattern: @^http://(?:www\.)?mediafire\.com/(?:download\.php)
|
| 16 |
*/
|
| 17 |
|
| 18 |
/**
|
|
@@ -81,29 +81,44 @@ class blcMediaFireChecker extends blcChecker {
|
|
| 81 |
$result['broken'] = false;
|
| 82 |
$result['log'] .= "File OK";
|
| 83 |
} elseif ( isset($rez['headers']['location']) ) {
|
| 84 |
-
//Redirect =
|
| 85 |
-
//
|
| 86 |
-
//contains an (undocumented) error code.
|
| 87 |
-
//indicates that the file is invalid or has been deleted.
|
| 88 |
$result['broken'] = true;
|
| 89 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
$result['status_code'] = BLC_LINK_STATUS_ERROR;
|
| 91 |
$result['status_text'] = __('Not Found', 'broken-link-checker');
|
| 92 |
$result['http_code'] = 0;
|
| 93 |
$result['log'] .= "The file is invalid or has been removed.";
|
| 94 |
-
|
|
|
|
| 95 |
$result['status_code'] = BLC_LINK_STATUS_ERROR;
|
| 96 |
$result['status_text'] = __('Not Found', 'broken-link-checker');
|
| 97 |
$result['http_code'] = 0;
|
| 98 |
$result['log'] .= "The file has been removed due to a violation of MediaFire ToS.";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
} else {
|
| 100 |
$result['status_code'] = BLC_LINK_STATUS_INFO;
|
| 101 |
$result['status_text'] = __('Unknown Error', 'broken-link-checker');
|
| 102 |
$result['log'] .= "Unknown error.\n\n";
|
| 103 |
foreach($rez['headers'] as $name => $value){
|
| 104 |
-
$result['log'] .=
|
| 105 |
}
|
| 106 |
}
|
|
|
|
| 107 |
} else {
|
| 108 |
$result['log'] .= "Unknown error.\n\n" . implode("\n",$rez['headers']);
|
| 109 |
}
|
|
@@ -138,28 +153,14 @@ class blcMediaFireChecker extends blcChecker {
|
|
| 138 |
* @return array|WP_Error
|
| 139 |
*/
|
| 140 |
function head($url){
|
| 141 |
-
//Only consider transports that allow redirection to be disabled.
|
| 142 |
-
$args = array();
|
| 143 |
-
if ( class_exists('WP_Http_ExtHttp') && (true === WP_Http_ExtHttp::test($args)) ) {
|
| 144 |
-
$transport = new WP_Http_ExtHttp();
|
| 145 |
-
} else if ( class_exists('WP_Http_Curl') && (true === WP_Http_Curl::test($args)) ) {
|
| 146 |
-
$transport = new WP_Http_Curl();
|
| 147 |
-
} else if ( class_exists('WP_Http_Curl') && (true === WP_Http_Fsockopen::test($args)) ) {
|
| 148 |
-
$transport = new WP_Http_Fsockopen();
|
| 149 |
-
} else {
|
| 150 |
-
return new WP_Error(
|
| 151 |
-
'no_suitable_transport',
|
| 152 |
-
"No suitable HTTP transport found. Please upgrade to a more recent version of PHP or install the CURL extension."
|
| 153 |
-
);
|
| 154 |
-
}
|
| 155 |
-
|
| 156 |
$conf = blc_get_configuration();
|
| 157 |
$args = array(
|
| 158 |
'timeout' => $conf->options['timeout'],
|
| 159 |
'redirection' => 0,
|
| 160 |
-
'
|
| 161 |
);
|
| 162 |
-
|
|
|
|
| 163 |
}
|
| 164 |
|
| 165 |
}
|
| 12 |
ModuleClassName: blcMediaFireChecker
|
| 13 |
ModulePriority: 100
|
| 14 |
|
| 15 |
+
ModuleCheckerUrlPattern: @^http://(?:www\.)?mediafire\.com/(?:(?:download\.php)?\?|download/)([0-9a-zA-Z]{11,20})(?:$|[^0-9a-zA-Z])@
|
| 16 |
*/
|
| 17 |
|
| 18 |
/**
|
| 81 |
$result['broken'] = false;
|
| 82 |
$result['log'] .= "File OK";
|
| 83 |
} elseif ( isset($rez['headers']['location']) ) {
|
| 84 |
+
//Redirect = either an error or a redirect to the full file URL.
|
| 85 |
+
//For errors, the redirect URL is structured like this : '/error.php?errno=320'.
|
| 86 |
+
//The 'errno' argument contains an (undocumented) error code.
|
|
|
|
| 87 |
$result['broken'] = true;
|
| 88 |
+
|
| 89 |
+
if ( strpos($rez['headers']['location'], '/download/') !== false ) {
|
| 90 |
+
$result['broken'] = false;
|
| 91 |
+
$result['http_code'] = 200;
|
| 92 |
+
$result['log'] .= "File OK";
|
| 93 |
+
$result['log'] .= "\nFull URL: " . $rez['headers']['location'];
|
| 94 |
+
|
| 95 |
+
} elseif ( strpos($rez['headers']['location'], 'errno=320') !== false ){
|
| 96 |
$result['status_code'] = BLC_LINK_STATUS_ERROR;
|
| 97 |
$result['status_text'] = __('Not Found', 'broken-link-checker');
|
| 98 |
$result['http_code'] = 0;
|
| 99 |
$result['log'] .= "The file is invalid or has been removed.";
|
| 100 |
+
|
| 101 |
+
} elseif ( strpos($rez['headers']['location'], 'errno=378') !== false ) {
|
| 102 |
$result['status_code'] = BLC_LINK_STATUS_ERROR;
|
| 103 |
$result['status_text'] = __('Not Found', 'broken-link-checker');
|
| 104 |
$result['http_code'] = 0;
|
| 105 |
$result['log'] .= "The file has been removed due to a violation of MediaFire ToS.";
|
| 106 |
+
|
| 107 |
+
} elseif ( strpos($rez['headers']['location'], 'errno=388') !== false ) {
|
| 108 |
+
$result['status_code'] = BLC_LINK_STATUS_WARNING;
|
| 109 |
+
$result['status_text'] = __('Permission Denied', 'broken-link-checker');
|
| 110 |
+
$result['http_code'] = 0;
|
| 111 |
+
$result['log'] .= "Permission denied. Most likely the plugin sent too many requests too quickly. Try again later.";
|
| 112 |
+
|
| 113 |
} else {
|
| 114 |
$result['status_code'] = BLC_LINK_STATUS_INFO;
|
| 115 |
$result['status_text'] = __('Unknown Error', 'broken-link-checker');
|
| 116 |
$result['log'] .= "Unknown error.\n\n";
|
| 117 |
foreach($rez['headers'] as $name => $value){
|
| 118 |
+
$result['log'] .= sprintf("%s: %s\n", $name, $value);
|
| 119 |
}
|
| 120 |
}
|
| 121 |
+
|
| 122 |
} else {
|
| 123 |
$result['log'] .= "Unknown error.\n\n" . implode("\n",$rez['headers']);
|
| 124 |
}
|
| 153 |
* @return array|WP_Error
|
| 154 |
*/
|
| 155 |
function head($url){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
$conf = blc_get_configuration();
|
| 157 |
$args = array(
|
| 158 |
'timeout' => $conf->options['timeout'],
|
| 159 |
'redirection' => 0,
|
| 160 |
+
'_redirection' => 0, //Internal flag that turns off redirect handling. See WP_Http::handle_redirects()
|
| 161 |
);
|
| 162 |
+
|
| 163 |
+
return wp_remote_head($url, $args);
|
| 164 |
}
|
| 165 |
|
| 166 |
}
|
modules/parsers/image.php
CHANGED
|
@@ -60,7 +60,7 @@ class blcHTMLImage extends blcParser {
|
|
| 60 |
};
|
| 61 |
|
| 62 |
if ( !isset($parts['scheme']) ){
|
| 63 |
-
//No
|
| 64 |
$url = $this->relative2absolute($url, $base_url);
|
| 65 |
}
|
| 66 |
|
| 60 |
};
|
| 61 |
|
| 62 |
if ( !isset($parts['scheme']) ){
|
| 63 |
+
//No scheme - likely a relative URL. Turn it into an absolute one.
|
| 64 |
$url = $this->relative2absolute($url, $base_url);
|
| 65 |
}
|
| 66 |
|
readme.txt
CHANGED
|
@@ -3,8 +3,8 @@ Contributors: whiteshadow
|
|
| 3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A6P9S6CE3SRSW
|
| 4 |
Tags: links, broken, maintenance, blogroll, custom fields, admin, comments, posts
|
| 5 |
Requires at least: 3.2
|
| 6 |
-
Tested up to: 4.0
|
| 7 |
-
Stable tag: 1.
|
| 8 |
|
| 9 |
This plugin will check your posts, comments and other content for broken links and missing images, and notify you if any are found.
|
| 10 |
|
|
@@ -98,6 +98,24 @@ To upgrade your installation
|
|
| 98 |
|
| 99 |
== Changelog ==
|
| 100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
= 1.9.5 =
|
| 102 |
* Fixed missing YouTube videos not being detected when the video URL starts with https instead of http.
|
| 103 |
* Enabled the YouTube video checker by default on new installations.
|
| 3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A6P9S6CE3SRSW
|
| 4 |
Tags: links, broken, maintenance, blogroll, custom fields, admin, comments, posts
|
| 5 |
Requires at least: 3.2
|
| 6 |
+
Tested up to: 4.0.1
|
| 7 |
+
Stable tag: 1.10
|
| 8 |
|
| 9 |
This plugin will check your posts, comments and other content for broken links and missing images, and notify you if any are found.
|
| 10 |
|
| 98 |
|
| 99 |
== Changelog ==
|
| 100 |
|
| 101 |
+
= 1.10 =
|
| 102 |
+
* Added a way to hide individual link actions like "Dismiss" and "Unlink".
|
| 103 |
+
* Added a "Fix redirect" link action. It replaces a redirect with a direct link. It is hidden by default and can be enabled through the settings page.
|
| 104 |
+
* Added a "Recheck" link action. Unlike the bulk action by the same name, it checks a link immediately and displays the results without having to refresh the page.
|
| 105 |
+
* Added a "Dismiss" bulk action.
|
| 106 |
+
* Added a note below the "link tweaks" settings explaining that they only apply to the contents of posts (and pages, and CPTs), not comments or custom fields.
|
| 107 |
+
* Made the "Redirect URL" column sortable.
|
| 108 |
+
* Added a "Details" link to the "Status" column.
|
| 109 |
+
* Added a "Warnings" section to Tools -> Broken Links. It shows problems that might be temporary or false positives. Warnings can be disabled through the settings page.
|
| 110 |
+
* Fixed a conflict with plugins that use PHP sessions.
|
| 111 |
+
* Fixed the "post statuses" option. Now disabling a post status (e.g. "Draft") should take effect immediately.
|
| 112 |
+
* Fixed the Mediafire link checker.
|
| 113 |
+
* Fixed the text in the "Status" column being slightly offset vertically when compared to other columns.
|
| 114 |
+
* Fixed search box position in WP 4.1-alpha.
|
| 115 |
+
* Added a few workarounds for situations where a custom post type is removed without first removing the posts.
|
| 116 |
+
* Removed the screen icon. WordPress has deprecated it.
|
| 117 |
+
* Other minor fixes.
|
| 118 |
+
|
| 119 |
= 1.9.5 =
|
| 120 |
* Fixed missing YouTube videos not being detected when the video URL starts with https instead of http.
|
| 121 |
* Enabled the YouTube video checker by default on new installations.
|
