Broken Link Checker - Version 0.9.2

Version Description

  • In Tools -> Broken Links, highlight links that have been broken for a long time (off by default).
  • Fixed an invalid parameter bug in the HTTP link checking routine.
  • Added nofollow to broken links (optional, only works for links in posts).
  • Fixed some PHP notices and a bunch of deprecated function calls.
  • Fixed "Trash" links for comments.
Download this release

Release Info

Developer whiteshadow
Plugin Icon 128x128 Broken Link Checker
Version 0.9.2
Comparing to
See all releases

Code changes from version 0.9.1 to 0.9.2

broken-link-checker.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: Broken Link Checker
5
  Plugin URI: http://w-shadow.com/blog/2007/08/05/broken-link-checker-for-wordpress/
6
  Description: Checks your blog for broken links and missing images and notifies you on the dashboard if any are found.
7
- Version: 0.9.1
8
  Author: Janis Elsts
9
  Author URI: http://w-shadow.com/blog/
10
  Text Domain: broken-link-checker
@@ -79,6 +79,7 @@ $blc_config_manager = new blcConfigurationManager(
79
 
80
  'mark_broken_links' => true, //Whether to add the broken_link class to broken links in posts.
81
  'broken_link_css' => ".broken_link, a.broken_link {\n\ttext-decoration: line-through;\n}",
 
82
 
83
  'mark_removed_links' => false, //Whether to add the removed_link class when un-linking a link.
84
  'removed_link_css' => ".removed_link, a.removed_link {\n\ttext-decoration: line-through;\n}",
@@ -105,6 +106,10 @@ $blc_config_manager = new blcConfigurationManager(
105
  //system-wide /tmp directory will be used instead.
106
 
107
  'timeout' => 30, //(in seconds) Links that take longer than this to respond will be treated as broken.
 
 
 
 
108
  )
109
  );
110
 
@@ -298,7 +303,7 @@ if ( is_admin() || defined('DOING_CRON') ){
298
 
299
  //If broken links need to be marked, we also need to load parsers
300
  //(used to find & modify links) and utilities (used by some parsers).
301
- if ( $blc_config_manager->options['mark_broken_links'] ){
302
  require $blc_directory . '/utility-class.php';
303
  add_action('plugins_loaded', 'blc_init_parsers');
304
  }
4
  Plugin Name: Broken Link Checker
5
  Plugin URI: http://w-shadow.com/blog/2007/08/05/broken-link-checker-for-wordpress/
6
  Description: Checks your blog for broken links and missing images and notifies you on the dashboard if any are found.
7
+ Version: 0.9.2
8
  Author: Janis Elsts
9
  Author URI: http://w-shadow.com/blog/
10
  Text Domain: broken-link-checker
79
 
80
  'mark_broken_links' => true, //Whether to add the broken_link class to broken links in posts.
81
  'broken_link_css' => ".broken_link, a.broken_link {\n\ttext-decoration: line-through;\n}",
82
+ 'nofollow_broken_links' => false, //Whether to add rel="nofollow" to broken links in posts.
83
 
84
  'mark_removed_links' => false, //Whether to add the removed_link class when un-linking a link.
85
  'removed_link_css' => ".removed_link, a.removed_link {\n\ttext-decoration: line-through;\n}",
106
  //system-wide /tmp directory will be used instead.
107
 
108
  'timeout' => 30, //(in seconds) Links that take longer than this to respond will be treated as broken.
109
+
110
+ 'highlight_permanent_failures' => false,//Highlight links that have appear to be permanently broken (in Tools -> Broken Links).
111
+ 'failure_duration_threshold' => 3, //(days) Assume a link is permanently broken if it still hasn't
112
+ //recovered after this many days.
113
  )
114
  );
115
 
303
 
304
  //If broken links need to be marked, we also need to load parsers
305
  //(used to find & modify links) and utilities (used by some parsers).
306
+ if ( $blc_config_manager->options['mark_broken_links'] || $blc_config_manager->options['nofollow_broken_links'] ){
307
  require $blc_directory . '/utility-class.php';
308
  add_action('plugins_loaded', 'blc_init_parsers');
309
  }
core.php CHANGED
@@ -61,6 +61,7 @@ class wsBrokenLinkChecker {
61
  add_action( 'wp_ajax_blc_link_details', array(&$this,'ajax_link_details') );
62
  add_action( 'wp_ajax_blc_unlink', array(&$this,'ajax_unlink') );
63
  add_action( 'wp_ajax_blc_current_load', array(&$this,'ajax_current_load') );
 
64
 
65
  //Check if it's possible to create a lockfile and nag the user about it if not.
66
  if ( $this->lockfile_name() ){
@@ -360,10 +361,10 @@ EOD;
360
  `link_id` int(10) unsigned NOT NULL,
361
  `container_id` int(10) unsigned NOT NULL,
362
  `container_type` varchar(40) NOT NULL DEFAULT 'post',
363
- `link_text` varchar(250) NOT NULL,
364
  `parser_type` varchar(40) NOT NULL DEFAULT 'link',
365
- `container_field` varchar(250) NOT NULL,
366
- `link_context` varchar(250) NOT NULL,
367
  `raw_url` text NOT NULL,
368
 
369
  PRIMARY KEY (`instance_id`),
@@ -397,7 +398,7 @@ EOT;
397
  `final_url` text CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
398
  `redirect_count` smallint(5) unsigned NOT NULL DEFAULT '0',
399
  `log` text NOT NULL,
400
- `http_code` smallint(6) NOT NULL,
401
  `request_duration` float NOT NULL DEFAULT '0',
402
  `timeout` tinyint(1) unsigned NOT NULL DEFAULT '0',
403
  `broken` tinyint(1) NOT NULL DEFAULT '0',
@@ -431,7 +432,7 @@ EOS;
431
  `container_id` int(20) unsigned NOT NULL,
432
  `container_type` varchar(40) NOT NULL,
433
  `synched` tinyint(3) unsigned NOT NULL,
434
- `last_synch` datetime NOT NULL,
435
 
436
  PRIMARY KEY (`container_type`,`container_id`),
437
  KEY `synched` (`synched`)
@@ -487,7 +488,31 @@ EOZ;
487
  add_action( 'admin_print_styles-' . $links_page_hook, array(&$this, 'links_page_css') );
488
  add_action( 'admin_print_scripts-' . $options_page_hook, array(&$this, 'enqueue_settings_scripts') );
489
  add_action( 'admin_print_scripts-' . $links_page_hook, array(&$this, 'enqueue_link_page_scripts') );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
490
  }
 
 
 
 
 
 
 
 
 
491
 
492
  /**
493
  * plugin_action_links()
@@ -543,6 +568,8 @@ EOZ;
543
  $this->conf->options['mark_removed_links'] = !empty($_POST['mark_removed_links']);
544
  $new_removed_link_css = trim($_POST['removed_link_css']);
545
  $this->conf->options['removed_link_css'] = $new_removed_link_css;
 
 
546
 
547
  $this->conf->options['exclusion_list'] = array_filter(
548
  preg_split(
@@ -756,6 +783,17 @@ EOZ;
756
 
757
  </td>
758
  </tr>
 
 
 
 
 
 
 
 
 
 
 
759
 
760
  <tr valign="top">
761
  <th scope="row"><?php _e('Exclusion list', 'broken-link-checker'); ?></th>
@@ -1116,7 +1154,7 @@ EOZ;
1116
  <h2><?php
1117
  //Output a header matching the current filter
1118
  if ( $current_filter['count'] > 0 ){
1119
- echo $current_filter['heading'] . " (<span class='current-link-count'>{$current_filter[count]}</span>)";
1120
  } else {
1121
  echo $current_filter['heading_zero'] . "<span class='current-link-count'></span>";
1122
  }
@@ -1137,7 +1175,7 @@ EOZ;
1137
  }
1138
 
1139
  $items[] = "<li><a href='tools.php?page=view-broken-links&filter_id=$filter' $class>
1140
- {$data[name]}</a> <span class='count'>(<span class='$number_class'>{$data[count]}</span>)</span>";
1141
  }
1142
  echo implode(' |</li>', $items);
1143
  unset($items);
@@ -1177,7 +1215,7 @@ EOZ;
1177
  <select name="action" id="blc-bulk-action">
1178
  <?php echo $bulk_actions_html; ?>
1179
  </select>
1180
- <input type="submit" name="doaction" id="doaction" value="<?php echo attribute_escape(__('Apply', 'broken-link-checker')); ?>" class="button-secondary action">
1181
  </div>
1182
  <?php
1183
  //Display pagination links
@@ -1230,12 +1268,23 @@ EOZ;
1230
  $rowclass .= ' blc-redirect';
1231
  }
1232
 
 
1233
  if ( $link->broken ){
1234
  $rowclass .= ' blc-broken-link';
 
 
 
 
 
 
 
 
 
1235
  }
 
1236
 
1237
  ?>
1238
- <tr id='<?php echo "blc-row-" . $link->link_id; ?>' class='blc-row <?php echo $rowclass; ?>'>
1239
 
1240
  <th class="check-column" scope="row">
1241
  <input type="checkbox" name="selected_links[]" value="<?php echo $link->link_id; ?>">
@@ -1302,9 +1351,9 @@ EOZ;
1302
  //Output inline action links for the link/URL
1303
  $actions = array();
1304
 
1305
- $actions['details'] = "<span class='view'><a class='blc-details-button' href='javascript:void(0)' title='". attribute_escape(__('Show more info about this link', 'broken-link-checker')) . "'>". __('Details', 'broken-link-checker') ."</a>";
1306
 
1307
- $actions['delete'] = "<span class='delete'><a class='submitdelete blc-unlink-button' title='" . attribute_escape( __('Remove this link from all posts', 'broken-link-checker') ). "' ".
1308
  "id='unlink-button-$rownum' href='javascript:void(0);'>" . __('Unlink', 'broken-link-checker') . "</a>";
1309
 
1310
  if ( $link->broken ){
@@ -1315,13 +1364,13 @@ EOZ;
1315
  );
1316
  }
1317
 
1318
- $actions['edit'] = "<span class='edit'><a href='javascript:void(0)' class='blc-edit-button' title='" . attribute_escape( __('Edit link URL' , 'broken-link-checker') ) . "'>". __('Edit URL' , 'broken-link-checker') ."</a>";
1319
 
1320
  echo '<div class="row-actions">';
1321
  echo implode(' | </span>', $actions);
1322
 
1323
  echo "<span style='display:none' class='blc-cancel-button-container'> " .
1324
- "| <a href='javascript:void(0)' class='blc-cancel-button' title='". attribute_escape(__('Cancel URL editing' , 'broken-link-checker')) ."'>". __('Cancel' , 'broken-link-checker') ."</a></span>";
1325
 
1326
  echo '</div>';
1327
  ?>
@@ -1340,7 +1389,7 @@ EOZ;
1340
  <select name="action2" id="blc-bulk-action2">
1341
  <?php echo $bulk_actions_html; ?>
1342
  </select>
1343
- <input type="submit" name="doaction2" id="doaction2" value="<?php echo attribute_escape(__('Apply', 'broken-link-checker')); ?>" class="button-secondary action">
1344
  </div><?php
1345
 
1346
  //Also display pagination links at the bottom
@@ -1747,6 +1796,14 @@ EOZ;
1747
  _n('This link has failed %d time.', 'This link has failed %d times.', $link->check_count, 'broken-link-checker'),
1748
  $link->check_count
1749
  );
 
 
 
 
 
 
 
 
1750
  ?>
1751
  </li>
1752
  <?php } ?>
@@ -1767,6 +1824,110 @@ EOZ;
1767
  <?php
1768
  }
1769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1770
  function start_timer(){
1771
  $this->execution_start_time = microtime_float();
1772
  }
@@ -1825,7 +1986,7 @@ EOZ;
1825
  //encountered when activating the plugin.
1826
  //(Disable when debugging or you won't get the FirePHP output)
1827
  if ( !constant('BLC_DEBUG') ){
1828
- ob_end_clean();
1829
  header("Connection: close");
1830
  ob_start();
1831
  echo ('Connection closed'); //This could be anything
@@ -2139,7 +2300,6 @@ EOZ;
2139
  }
2140
 
2141
  /**
2142
- * ws_broken_link_checker::get_status()
2143
  * Returns an array with various status information about the plugin. Array key reference:
2144
  * check_threshold - date/time; links checked before this threshold should be checked again.
2145
  * recheck_threshold - date/time; broken links checked before this threshold should be re-checked.
@@ -2362,6 +2522,29 @@ EOZ;
2362
  }
2363
  }
2364
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2365
  /**
2366
  * Create and lock a temporary file.
2367
  *
61
  add_action( 'wp_ajax_blc_link_details', array(&$this,'ajax_link_details') );
62
  add_action( 'wp_ajax_blc_unlink', array(&$this,'ajax_unlink') );
63
  add_action( 'wp_ajax_blc_current_load', array(&$this,'ajax_current_load') );
64
+ add_action( 'wp_ajax_blc_save_highlight_settings', array(&$this,'ajax_save_highlight_settings') );
65
 
66
  //Check if it's possible to create a lockfile and nag the user about it if not.
67
  if ( $this->lockfile_name() ){
361
  `link_id` int(10) unsigned NOT NULL,
362
  `container_id` int(10) unsigned NOT NULL,
363
  `container_type` varchar(40) NOT NULL DEFAULT 'post',
364
+ `link_text` varchar(250) NOT NULL DEFAULT '',
365
  `parser_type` varchar(40) NOT NULL DEFAULT 'link',
366
+ `container_field` varchar(250) NOT NULL DEFAULT '',
367
+ `link_context` varchar(250) NOT NULL DEFAULT '',
368
  `raw_url` text NOT NULL,
369
 
370
  PRIMARY KEY (`instance_id`),
398
  `final_url` text CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
399
  `redirect_count` smallint(5) unsigned NOT NULL DEFAULT '0',
400
  `log` text NOT NULL,
401
+ `http_code` smallint(6) NOT NULL DEFAULT '0',
402
  `request_duration` float NOT NULL DEFAULT '0',
403
  `timeout` tinyint(1) unsigned NOT NULL DEFAULT '0',
404
  `broken` tinyint(1) NOT NULL DEFAULT '0',
432
  `container_id` int(20) unsigned NOT NULL,
433
  `container_type` varchar(40) NOT NULL,
434
  `synched` tinyint(3) unsigned NOT NULL,
435
+ `last_synch` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
436
 
437
  PRIMARY KEY (`container_type`,`container_id`),
438
  KEY `synched` (`synched`)
488
  add_action( 'admin_print_styles-' . $links_page_hook, array(&$this, 'links_page_css') );
489
  add_action( 'admin_print_scripts-' . $options_page_hook, array(&$this, 'enqueue_settings_scripts') );
490
  add_action( 'admin_print_scripts-' . $links_page_hook, array(&$this, 'enqueue_link_page_scripts') );
491
+
492
+ /*
493
+ Display a checkbox in "Screen Options" that lets the user highlight links that
494
+ have been broken for a long time. The "Screen Options" panel isn't directly
495
+ customizable, so we must resort to ugly hacks using add_meta_box() and JavaScript.
496
+ */
497
+ $input_html = sprintf(
498
+ '</label><input style="margin-left: -1em" type="text" name="failure_duration_threshold" id="failure_duration_threshold" value="%d" size="2">',
499
+ $this->conf->options['failure_duration_threshold']
500
+ );
501
+ $title_html = sprintf(
502
+ __('Highlight links broken for at least %s days', 'broken-link-checker'),
503
+ $input_html
504
+ );
505
+ add_meta_box('highlight_permanent_failures', $title_html, array(&$this, 'noop'), $links_page_hook);
506
  }
507
+
508
+ /**
509
+ * Dummy callback for the non-existent 'highlight_permanent_failures' meta box. Does nothing.
510
+ *
511
+ * @return void
512
+ */
513
+ function noop(){
514
+ //Do nothing.
515
+ }
516
 
517
  /**
518
  * plugin_action_links()
568
  $this->conf->options['mark_removed_links'] = !empty($_POST['mark_removed_links']);
569
  $new_removed_link_css = trim($_POST['removed_link_css']);
570
  $this->conf->options['removed_link_css'] = $new_removed_link_css;
571
+
572
+ $this->conf->options['nofollow_broken_links'] = !empty($_POST['nofollow_broken_links']);
573
 
574
  $this->conf->options['exclusion_list'] = array_filter(
575
  preg_split(
783
 
784
  </td>
785
  </tr>
786
+
787
+ <tr valign="top">
788
+ <th scope="row"><?php _e('Broken link SEO','broken-link-checker'); ?></th>
789
+ <td>
790
+ <label for='nofollow_broken_links'>
791
+ <input type="checkbox" name="nofollow_broken_links" id="nofollow_broken_links"
792
+ <?php if ($this->conf->options['nofollow_broken_links']) echo ' checked="checked"'; ?>/>
793
+ <?php _e('Apply <em>rel="nofollow"</em> to broken links', 'broken-link-checker'); ?>
794
+ </label>
795
+ </td>
796
+ </tr>
797
 
798
  <tr valign="top">
799
  <th scope="row"><?php _e('Exclusion list', 'broken-link-checker'); ?></th>
1154
  <h2><?php
1155
  //Output a header matching the current filter
1156
  if ( $current_filter['count'] > 0 ){
1157
+ echo $current_filter['heading'] . " (<span class='current-link-count'>{$current_filter['count']}</span>)";
1158
  } else {
1159
  echo $current_filter['heading_zero'] . "<span class='current-link-count'></span>";
1160
  }
1175
  }
1176
 
1177
  $items[] = "<li><a href='tools.php?page=view-broken-links&filter_id=$filter' $class>
1178
+ {$data['name']}</a> <span class='count'>(<span class='$number_class'>{$data['count']}</span>)</span>";
1179
  }
1180
  echo implode(' |</li>', $items);
1181
  unset($items);
1215
  <select name="action" id="blc-bulk-action">
1216
  <?php echo $bulk_actions_html; ?>
1217
  </select>
1218
+ <input type="submit" name="doaction" id="doaction" value="<?php echo esc_attr(__('Apply', 'broken-link-checker')); ?>" class="button-secondary action">
1219
  </div>
1220
  <?php
1221
  //Display pagination links
1268
  $rowclass .= ' blc-redirect';
1269
  }
1270
 
1271
+ $days_broken = 0;
1272
  if ( $link->broken ){
1273
  $rowclass .= ' blc-broken-link';
1274
+
1275
+ //Add a highlight to broken links that appear to be permanently broken
1276
+ $days_broken = intval( (time() - $link->first_failure) / (3600*24) );
1277
+ if ( $days_broken >= $this->conf->options['failure_duration_threshold'] ){
1278
+ $rowclass .= ' blc-permanently-broken';
1279
+ if ( $this->conf->options['highlight_permanent_failures'] ){
1280
+ $rowclass .= ' blc-permanently-broken-hl';
1281
+ }
1282
+ }
1283
  }
1284
+
1285
 
1286
  ?>
1287
+ <tr id='<?php echo "blc-row-" . $link->link_id; ?>' class='blc-row <?php echo $rowclass; ?>' days_broken="<?php echo $days_broken; ?>">
1288
 
1289
  <th class="check-column" scope="row">
1290
  <input type="checkbox" name="selected_links[]" value="<?php echo $link->link_id; ?>">
1351
  //Output inline action links for the link/URL
1352
  $actions = array();
1353
 
1354
+ $actions['details'] = "<span class='view'><a class='blc-details-button' href='javascript:void(0)' title='". esc_attr(__('Show more info about this link', 'broken-link-checker')) . "'>". __('Details', 'broken-link-checker') ."</a>";
1355
 
1356
+ $actions['delete'] = "<span class='delete'><a class='submitdelete blc-unlink-button' title='" . esc_attr( __('Remove this link from all posts', 'broken-link-checker') ). "' ".
1357
  "id='unlink-button-$rownum' href='javascript:void(0);'>" . __('Unlink', 'broken-link-checker') . "</a>";
1358
 
1359
  if ( $link->broken ){
1364
  );
1365
  }
1366
 
1367
+ $actions['edit'] = "<span class='edit'><a href='javascript:void(0)' class='blc-edit-button' title='" . esc_attr( __('Edit link URL' , 'broken-link-checker') ) . "'>". __('Edit URL' , 'broken-link-checker') ."</a>";
1368
 
1369
  echo '<div class="row-actions">';
1370
  echo implode(' | </span>', $actions);
1371
 
1372
  echo "<span style='display:none' class='blc-cancel-button-container'> " .
1373
+ "| <a href='javascript:void(0)' class='blc-cancel-button' title='". esc_attr(__('Cancel URL editing' , 'broken-link-checker')) ."'>". __('Cancel' , 'broken-link-checker') ."</a></span>";
1374
 
1375
  echo '</div>';
1376
  ?>
1389
  <select name="action2" id="blc-bulk-action2">
1390
  <?php echo $bulk_actions_html; ?>
1391
  </select>
1392
+ <input type="submit" name="doaction2" id="doaction2" value="<?php echo esc_attr(__('Apply', 'broken-link-checker')); ?>" class="button-secondary action">
1393
  </div><?php
1394
 
1395
  //Also display pagination links at the bottom
1796
  _n('This link has failed %d time.', 'This link has failed %d times.', $link->check_count, 'broken-link-checker'),
1797
  $link->check_count
1798
  );
1799
+
1800
+ echo '<br>';
1801
+
1802
+ $delta = time() - $link->first_failure;
1803
+ printf(
1804
+ __('This link has been broken for %s.', 'broken-link-checker'),
1805
+ $this->fuzzy_delta($delta)
1806
+ );
1807
  ?>
1808
  </li>
1809
  <?php } ?>
1824
  <?php
1825
  }
1826
 
1827
+ /**
1828
+ * Format a time delta using a fuzzy format, e.g. 'less than a minute', '2 days', etc.
1829
+ *
1830
+ * @param int $delta Time period in seconds.
1831
+ * @return string
1832
+ */
1833
+ function fuzzy_delta($delta){
1834
+ $ONE_MINUTE = 60;
1835
+ $ONE_HOUR = 60 * $ONE_MINUTE;
1836
+ $ONE_DAY = 24 * $ONE_HOUR;
1837
+ $ONE_MONTH = $ONE_DAY * 3652425 / 120000;
1838
+ $ONE_YEAR = $ONE_DAY * 3652425 / 10000;
1839
+
1840
+ if ( $delta < $ONE_MINUTE ){
1841
+ return __('less than a minute', 'broken-link-checker');
1842
+ }
1843
+
1844
+ if ( $delta < $ONE_HOUR ){
1845
+ $minutes = intval($delta / $ONE_MINUTE);
1846
+
1847
+ return sprintf(
1848
+ _n(
1849
+ '%d minute',
1850
+ '%d minutes',
1851
+ $minutes,
1852
+ 'broken-link-checker'
1853
+ ),
1854
+ $minutes
1855
+ );
1856
+ }
1857
+
1858
+ if ( $delta < $ONE_DAY ){
1859
+ $hours = intval($delta / $ONE_HOUR);
1860
+
1861
+ return sprintf(
1862
+ _n(
1863
+ '%d hour',
1864
+ '%d hours',
1865
+ $hours,
1866
+ 'broken-link-checker'
1867
+ ),
1868
+ $hours
1869
+ );
1870
+ }
1871
+
1872
+ if ( $delta < $ONE_MONTH ){
1873
+ $days = intval($delta / $ONE_DAY);
1874
+ $hours = intval( ($delta - $days * $ONE_DAY)/$ONE_HOUR );
1875
+
1876
+ $ret = sprintf(
1877
+ _n(
1878
+ '%d day',
1879
+ '%d days',
1880
+ $days,
1881
+ 'broken-link-checker'
1882
+ ),
1883
+ $days
1884
+ );
1885
+
1886
+
1887
+ if ( ($days < 2) && ($hours > 0) ){
1888
+ $ret .= ' ' . sprintf(
1889
+ _n(
1890
+ '%d hour',
1891
+ '%d hours',
1892
+ $hours,
1893
+ 'broken-link-checker'
1894
+ ),
1895
+ $hours
1896
+ );
1897
+ }
1898
+
1899
+ return $ret;
1900
+ }
1901
+
1902
+
1903
+ $months = intval( $delta / $ONE_MONTH );
1904
+ $days = intval( ($delta - $months * $ONE_MONTH)/$ONE_DAY );
1905
+
1906
+ $ret = sprintf(
1907
+ _n(
1908
+ '%d month',
1909
+ '%d months',
1910
+ $months,
1911
+ 'broken-link-checker'
1912
+ ),
1913
+ $months
1914
+ );
1915
+
1916
+ if ( $days > 0 ){
1917
+ $ret .= ' ' . sprintf(
1918
+ _n(
1919
+ '%d day',
1920
+ '%d days',
1921
+ $days,
1922
+ 'broken-link-checker'
1923
+ ),
1924
+ $days
1925
+ );
1926
+ }
1927
+
1928
+ return $ret;
1929
+ }
1930
+
1931
  function start_timer(){
1932
  $this->execution_start_time = microtime_float();
1933
  }
1986
  //encountered when activating the plugin.
1987
  //(Disable when debugging or you won't get the FirePHP output)
1988
  if ( !constant('BLC_DEBUG') ){
1989
+ @ob_end_clean(); //Discard the existing buffer, if any
1990
  header("Connection: close");
1991
  ob_start();
1992
  echo ('Connection closed'); //This could be anything
2300
  }
2301
 
2302
  /**
 
2303
  * Returns an array with various status information about the plugin. Array key reference:
2304
  * check_threshold - date/time; links checked before this threshold should be checked again.
2305
  * recheck_threshold - date/time; broken links checked before this threshold should be re-checked.
2522
  }
2523
  }
2524
 
2525
+ /**
2526
+ * AJAX hook for saving the settings from the "Screen Options" panel in Tools -> Broken Links.
2527
+ *
2528
+ * @return void
2529
+ */
2530
+ function ajax_save_highlight_settings(){
2531
+ if (!current_user_can('edit_others_posts') || !check_ajax_referer('blc_save_highlight_settings', false, false)){
2532
+ die( json_encode( array(
2533
+ 'error' => __("You're not allowed to do that!", 'broken-link-checker')
2534
+ )));
2535
+ }
2536
+
2537
+ $this->conf->options['highlight_permanent_failures'] = !empty($_POST['highlight_permanent_failures']);
2538
+
2539
+ $failure_duration_threshold = intval($_POST['failure_duration_threshold']);
2540
+ if ( $failure_duration_threshold >=1 ){
2541
+ $this->conf->options['failure_duration_threshold'] = $failure_duration_threshold;
2542
+ }
2543
+
2544
+ $this->conf->save_options();
2545
+ die('1');
2546
+ }
2547
+
2548
  /**
2549
  * Create and lock a temporary file.
2550
  *
css/links-page.css CHANGED
@@ -30,7 +30,7 @@ td.blc-link-details {
30
  /*width: 35%;*/
31
  }
32
 
33
- /* Styles for broken links, redirects and excluded links */
34
 
35
  .blc-redirect { }
36
 
@@ -52,6 +52,14 @@ td.blc-link-details {
52
  background-color: #E2E2E2;
53
  }
54
 
 
 
 
 
 
 
 
 
55
 
56
  /* Misc table styles */
57
 
@@ -121,4 +129,10 @@ div.search-box{
121
  margin-right: 0pt;
122
  margin-bottom: 0pt;
123
  margin-left: 0pt;
 
 
 
 
 
 
124
  }
30
  /*width: 35%;*/
31
  }
32
 
33
+ /* Styles for broken links, redirects and other link states or types */
34
 
35
  .blc-redirect { }
36
 
52
  background-color: #E2E2E2;
53
  }
54
 
55
+ .blc-permanently-broken {
56
+
57
+ }
58
+
59
+ .blc-permanently-broken-hl {
60
+ background-image: url("../images/red_highlight.png");
61
+ }
62
+
63
 
64
  /* Misc table styles */
65
 
129
  margin-right: 0pt;
130
  margin-bottom: 0pt;
131
  margin-left: 0pt;
132
+ }
133
+
134
+ /* Misc link page styles */
135
+
136
+ .tools_page_view-broken-links #screen-options-wrap h5 {
137
+ display: none;
138
  }
images/red_highlight.png ADDED
Binary file
includes/admin/links-page-js.php CHANGED
@@ -377,7 +377,87 @@ jQuery(function($){
377
  }
378
  });
379
 
380
- //Not implemented yet
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  });
382
 
383
  </script>
377
  }
378
  });
379
 
380
+ //------------------------------------------------------------
381
+ // Manipulate highlight settings for permanently broken links
382
+ //------------------------------------------------------------
383
+ var highlight_permanent_failures_checkbox = $('#highlight_permanent_failures-hide');
384
+ var failure_duration_threshold_input = $('#failure_duration_threshold');
385
+
386
+ //Update the checkbox depending on current settings.
387
+ <?php
388
+ $conf = blc_get_configuration();
389
+ if ( $conf->options['highlight_permanent_failures'] ){
390
+ echo 'highlight_permanent_failures_checkbox.attr("checked", "checked");';
391
+ } else {
392
+ echo 'highlight_permanent_failures_checkbox.removeAttr("checked");';
393
+ }
394
+ ?>;
395
+
396
+ //Apply/remove highlights when the checkbox is (un)checked
397
+ highlight_permanent_failures_checkbox.change(function(){
398
+ save_highlight_settings();
399
+
400
+ if ( this.checked ){
401
+ $('#blc-links tr.blc-permanently-broken').addClass('blc-permanently-broken-hl');
402
+ } else {
403
+ $('#blc-links tr.blc-permanently-broken').removeClass('blc-permanently-broken-hl');
404
+ }
405
+ });
406
+
407
+ //Apply/remove highlights when the duration threshold is changed.
408
+ failure_duration_threshold_input.change(function(){
409
+ var new_threshold = parseInt($(this).val());
410
+ save_highlight_settings();
411
+ if (isNaN(new_threshold) || (new_threshold < 1)) {
412
+ return;
413
+ }
414
+
415
+ highlight_permanent_failures = highlight_permanent_failures_checkbox.is(':checked');
416
+
417
+ $('#blc-links tr.blc-row').each(function(index){
418
+ var days_broken = $(this).attr('days_broken');
419
+ if ( days_broken >= new_threshold ){
420
+ $(this).addClass('blc-permanently-broken');
421
+ if ( highlight_permanent_failures ){
422
+ $(this).addClass('blc-permanently-broken-hl');
423
+ }
424
+ } else {
425
+ $(this).removeClass('blc-permanently-broken').removeClass('blc-permanently-broken-hl');
426
+ }
427
+ });
428
+ });
429
+
430
+ //Don't let the user manually submit the "Screen Options" form - it wouldn't work properly anyway.
431
+ $('#adv-settings').submit(function(){
432
+ return false;
433
+ });
434
+
435
+ //Save highlight settings using AJAX
436
+ function save_highlight_settings(){
437
+ var $ = jQuery;
438
+
439
+ var highlight_permanent_failures = highlight_permanent_failures_checkbox.is(':checked');
440
+ var failure_duration_threshold = parseInt(failure_duration_threshold_input.val());
441
+
442
+ if ( isNaN(failure_duration_threshold) || ( failure_duration_threshold < 1 ) ){
443
+ failure_duration_threshold = 1;
444
+ }
445
+
446
+ failure_duration_threshold_input.val(failure_duration_threshold);
447
+
448
+ $.post(
449
+ "<?php echo admin_url('admin-ajax.php'); ?>",
450
+ {
451
+ 'action' : 'blc_save_highlight_settings',
452
+ 'failure_duration_threshold' : failure_duration_threshold,
453
+ 'highlight_permanent_failures' : highlight_permanent_failures?1:0,
454
+ '_ajax_nonce' : '<?php echo esc_js(wp_create_nonce('blc_save_highlight_settings')); ?>'
455
+ }
456
+ );
457
+ }
458
+
459
+
460
+
461
  });
462
 
463
  </script>
includes/checkers/http.php CHANGED
@@ -56,7 +56,7 @@ class blcHttpChecker extends blcChecker{
56
  */
57
  function urlencodefix($url){
58
  return preg_replace_callback(
59
- '|[^a-z0-9\+\-\/\\#:.=?&%@]|i',
60
  create_function('$str','return rawurlencode($str[0]);'),
61
  $url
62
  );
@@ -138,7 +138,7 @@ class blcCurlHttp extends blcHttpChecker {
138
  curl_setopt($ch, CURLOPT_NOBODY, true);
139
  } else {
140
  //If we must use GET at least limit the amount of downloaded data.
141
- curl_setopt($ch, HTTP_HEADER, array('Range: bytes=0-2048')); //2 KB
142
  }
143
 
144
  //Register a callback function which will process the HTTP header(s).
56
  */
57
  function urlencodefix($url){
58
  return preg_replace_callback(
59
+ '|[^a-z0-9\+\-\/\\#:.,;=?!&%@()$\|*]|i',
60
  create_function('$str','return rawurlencode($str[0]);'),
61
  $url
62
  );
138
  curl_setopt($ch, CURLOPT_NOBODY, true);
139
  } else {
140
  //If we must use GET at least limit the amount of downloaded data.
141
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array('Range: bytes=0-2048')); //2 KB
142
  }
143
 
144
  //Register a callback function which will process the HTTP header(s).
includes/containers.php CHANGED
@@ -154,7 +154,7 @@ class blcContainerRegistry {
154
  return array();
155
  }
156
 
157
- if ( is_string($first[0]) && is_numeric($first[1]) ){
158
  //The argument is an array of [container_type, id].
159
  //Divide the container IDs by container type.
160
  $by_type = array();
154
  return array();
155
  }
156
 
157
+ if ( isset($first[0]) && is_string($first[0]) && is_numeric($first[1]) ){
158
  //The argument is an array of [container_type, id].
159
  //Divide the container IDs by container type.
160
  $by_type = array();
includes/containers/blogroll.php CHANGED
@@ -35,7 +35,7 @@ class blcBookmark extends blcContainer{
35
 
36
  $actions = array();
37
  if ( current_user_can('manage_links') ) {
38
- $actions['edit'] = '<span class="edit"><a href="' . $this->get_edit_url() . '" title="' . attribute_escape(__('Edit this bookmark', 'broken-link-checker')) . '">' . __('Edit') . '</a>';
39
  $actions['delete'] = "<span class='delete'><a class='submitdelete' href='" . esc_url($delete_url) . "' onclick=\"if ( confirm('" . js_escape(sprintf( __("You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete."), $bookmark->link_name)) . "') ) { return true;}return false;\">" . __('Delete') . "</a>";
40
  }
41
 
35
 
36
  $actions = array();
37
  if ( current_user_can('manage_links') ) {
38
+ $actions['edit'] = '<span class="edit"><a href="' . $this->get_edit_url() . '" title="' . esc_attr(__('Edit this bookmark', 'broken-link-checker')) . '">' . __('Edit') . '</a>';
39
  $actions['delete'] = "<span class='delete'><a class='submitdelete' href='" . esc_url($delete_url) . "' onclick=\"if ( confirm('" . js_escape(sprintf( __("You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete."), $bookmark->link_name)) . "') ) { return true;}return false;\">" . __('Delete') . "</a>";
40
  }
41
 
includes/containers/comment.php CHANGED
@@ -99,6 +99,7 @@ class blcComment extends blcContainer{
99
  $actions = array();
100
 
101
  $comment = $this->get_wrapped_object();
 
102
 
103
  //Display Edit & Delete/Trash links only if the user has the right caps.
104
  $user_can = current_user_can('edit_post', $comment->comment_post_ID);
@@ -116,7 +117,7 @@ class blcComment extends blcContainer{
116
  }
117
  }
118
 
119
- $actions['view'] = '<span class="view"><a href="' . get_comment_link($this->container_id) . '" title="' . attribute_escape(__('View comment', 'broken-link-checker')) . '" rel="permalink">' . __('View') . '</a>';
120
 
121
  return $actions;
122
  }
@@ -235,7 +236,7 @@ class blcCommentManager extends blcContainerManager {
235
  $q = "DELETE synch.*
236
  FROM
237
  {$wpdb->prefix}blc_synch AS synch LEFT JOIN {$wpdb->comments} AS comments
238
- ON comments.ID = synch.container_id
239
  WHERE
240
  synch.container_type = '{$this->container_type}' AND comments.comment_ID IS NULL";
241
  $wpdb->query( $q );
@@ -321,7 +322,7 @@ class blcCommentManager extends blcContainerManager {
321
  $comment = get_comment($comment);
322
 
323
  //Attach it to the container
324
- $key = $this->container_type . '|' . $post->ID;
325
  if ( isset($containers[$key]) ){
326
  $containers[$key]->wrapped_object = $comment;
327
  }
99
  $actions = array();
100
 
101
  $comment = $this->get_wrapped_object();
102
+ $post = get_post($comment->comment_post_ID);
103
 
104
  //Display Edit & Delete/Trash links only if the user has the right caps.
105
  $user_can = current_user_can('edit_post', $comment->comment_post_ID);
117
  }
118
  }
119
 
120
+ $actions['view'] = '<span class="view"><a href="' . get_comment_link($this->container_id) . '" title="' . esc_attr(__('View comment', 'broken-link-checker')) . '" rel="permalink">' . __('View') . '</a>';
121
 
122
  return $actions;
123
  }
236
  $q = "DELETE synch.*
237
  FROM
238
  {$wpdb->prefix}blc_synch AS synch LEFT JOIN {$wpdb->comments} AS comments
239
+ ON comments.comment_ID = synch.container_id
240
  WHERE
241
  synch.container_type = '{$this->container_type}' AND comments.comment_ID IS NULL";
242
  $wpdb->query( $q );
322
  $comment = get_comment($comment);
323
 
324
  //Attach it to the container
325
+ $key = $this->container_type . '|' . $comment->comment_ID;
326
  if ( isset($containers[$key]) ){
327
  $containers[$key]->wrapped_object = $comment;
328
  }
includes/containers/custom_field.php CHANGED
@@ -188,7 +188,7 @@ class blcPostMeta extends blcContainer {
188
  $post_html = sprintf(
189
  '<a class="row-title" href="%s" title="%s">%s</a>',
190
  esc_url($this->get_edit_url()),
191
- attribute_escape(__('Edit this post')),
192
  get_the_title($this->container_id)
193
  );
194
 
@@ -198,7 +198,7 @@ class blcPostMeta extends blcContainer {
198
  function ui_get_action_links($container_field){
199
  $actions = array();
200
  if ( current_user_can('edit_post', $this->container_id) ) {
201
- $actions['edit'] = '<span class="edit"><a href="' . $this->get_edit_url() . '" title="' . attribute_escape(__('Edit this post')) . '">' . __('Edit') . '</a>';
202
 
203
  if ( EMPTY_TRASH_DAYS ) {
204
  $actions['trash'] = "<a class='submitdelete' title='" . esc_attr(__('Move this post to the Trash')) . "' href='" . get_delete_post_link($this->container_id) . "'>" . __('Trash') . "</a>";
@@ -206,7 +206,7 @@ class blcPostMeta extends blcContainer {
206
  $actions['delete'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this post permanently')) . "' href='" . wp_nonce_url( admin_url("post.php?action=delete&amp;post=".$this->container_id), 'delete-post_' . $this->container_id) . "' onclick=\"if ( confirm('" . js_escape(sprintf( __("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), get_the_title($this->container_id) )) . "') ) { return true;}return false;\">" . __('Delete') . "</a>";
207
  }
208
  }
209
- $actions['view'] = '<span class="view"><a href="' . get_permalink($this->container_id) . '" title="' . attribute_escape(sprintf(__('View "%s"', 'broken-link-checker'), get_the_title($this->container_id))) . '" rel="permalink">' . __('View') . '</a>';
210
 
211
  return $actions;
212
  }
188
  $post_html = sprintf(
189
  '<a class="row-title" href="%s" title="%s">%s</a>',
190
  esc_url($this->get_edit_url()),
191
+ esc_attr(__('Edit this post')),
192
  get_the_title($this->container_id)
193
  );
194
 
198
  function ui_get_action_links($container_field){
199
  $actions = array();
200
  if ( current_user_can('edit_post', $this->container_id) ) {
201
+ $actions['edit'] = '<span class="edit"><a href="' . $this->get_edit_url() . '" title="' . esc_attr(__('Edit this post')) . '">' . __('Edit') . '</a>';
202
 
203
  if ( EMPTY_TRASH_DAYS ) {
204
  $actions['trash'] = "<a class='submitdelete' title='" . esc_attr(__('Move this post to the Trash')) . "' href='" . get_delete_post_link($this->container_id) . "'>" . __('Trash') . "</a>";
206
  $actions['delete'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this post permanently')) . "' href='" . wp_nonce_url( admin_url("post.php?action=delete&amp;post=".$this->container_id), 'delete-post_' . $this->container_id) . "' onclick=\"if ( confirm('" . js_escape(sprintf( __("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), get_the_title($this->container_id) )) . "') ) { return true;}return false;\">" . __('Delete') . "</a>";
207
  }
208
  }
209
+ $actions['view'] = '<span class="view"><a href="' . get_permalink($this->container_id) . '" title="' . esc_attr(sprintf(__('View "%s"', 'broken-link-checker'), get_the_title($this->container_id))) . '" rel="permalink">' . __('View') . '</a>';
210
 
211
  return $actions;
212
  }
includes/containers/post.php CHANGED
@@ -13,7 +13,7 @@ class blcPostContainer extends blcContainer {
13
  function ui_get_action_links($container_field = ''){
14
  $actions = array();
15
  if ( current_user_can('edit_post', $this->container_id) ) {
16
- $actions['edit'] = '<span class="edit"><a href="' . $this->get_edit_url() . '" title="' . attribute_escape(__('Edit this post')) . '">' . __('Edit') . '</a>';
17
 
18
  if ( EMPTY_TRASH_DAYS ) {
19
  $actions['trash'] = "<a class='submitdelete' title='" . esc_attr(__('Move this post to the Trash')) . "' href='" . get_delete_post_link($this->container_id) . "'>" . __('Trash') . "</a>";
@@ -21,7 +21,7 @@ class blcPostContainer extends blcContainer {
21
  $actions['delete'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this post permanently')) . "' href='" . wp_nonce_url( admin_url("post.php?action=delete&amp;post=".$this->container_id), 'delete-post_' . $this->container_id) . "' onclick=\"if ( confirm('" . esc_js(sprintf( __("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), get_the_title($this->container_id) )) . "') ) { return true;}return false;\">" . __('Delete') . "</a>";
22
  }
23
  }
24
- $actions['view'] = '<span class="view"><a href="' . get_permalink($this->container_id) . '" title="' . attribute_escape(sprintf(__('View "%s"', 'broken-link-checker'), get_the_title($this->container_id))) . '" rel="permalink">' . __('View') . '</a>';
25
 
26
  return $actions;
27
  }
@@ -38,7 +38,7 @@ class blcPostContainer extends blcContainer {
38
  $source = sprintf(
39
  $source,
40
  $this->get_edit_url(),
41
- attribute_escape(__('Edit this post')),
42
  get_the_title($this->container_id)
43
  );
44
 
@@ -136,6 +136,8 @@ class blcPostContainer extends blcContainer {
136
  class blcPostContainerManager extends blcContainerManager {
137
  var $container_class_name = 'blcPostContainer';
138
 
 
 
139
  /**
140
  * Set up hooks that monitor added/modified/deleted posts.
141
  *
@@ -149,11 +151,11 @@ class blcPostContainerManager extends blcContainerManager {
149
  add_action('trash_post', array(&$this,'post_deleted'));
150
  add_action('untrash_post', array(&$this,'post_saved'));
151
 
152
- //Highlight broken links in posts & pages
153
- $conf = blc_get_configuration();
154
- if ( $conf->options['mark_broken_links'] ){
155
  add_filter( 'the_content', array(&$this,'hook_the_content') );
156
- if ( !empty( $conf->options['broken_link_css'] ) ){
157
  add_action( 'wp_head', array(&$this,'hook_wp_head') );
158
  }
159
  }
@@ -339,7 +341,6 @@ class blcPostContainerManager extends blcContainerManager {
339
  $broken_link_urls[] = $link['raw_url'];
340
  }
341
 
342
-
343
  //Iterate over all HTML links and modify the broken ones
344
  $parser = blc_get_parser('link');
345
  $content = $parser->multi_edit($content, array(&$this, 'highlight_broken_link'), $broken_link_urls);
@@ -363,14 +364,29 @@ class blcPostContainerManager extends blcContainerManager {
363
  }
364
 
365
  //Add 'broken_link' to the 'class' attribute (unless already present).
366
- if ( isset($link['class']) ){
367
- $classes = explode(' ', $link['class']);
368
- if ( !in_array('broken_link', $classes) ){
369
- $classes[] = 'broken_link';
370
- $link['class'] = implode(' ', $classes);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
371
  }
372
- } else {
373
- $link['class'] = 'broken_link';
374
  }
375
 
376
  return $link;
13
  function ui_get_action_links($container_field = ''){
14
  $actions = array();
15
  if ( current_user_can('edit_post', $this->container_id) ) {
16
+ $actions['edit'] = '<span class="edit"><a href="' . $this->get_edit_url() . '" title="' . esc_attr(__('Edit this post')) . '">' . __('Edit') . '</a>';
17
 
18
  if ( EMPTY_TRASH_DAYS ) {
19
  $actions['trash'] = "<a class='submitdelete' title='" . esc_attr(__('Move this post to the Trash')) . "' href='" . get_delete_post_link($this->container_id) . "'>" . __('Trash') . "</a>";
21
  $actions['delete'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this post permanently')) . "' href='" . wp_nonce_url( admin_url("post.php?action=delete&amp;post=".$this->container_id), 'delete-post_' . $this->container_id) . "' onclick=\"if ( confirm('" . esc_js(sprintf( __("You are about to delete this post '%s'\n 'Cancel' to stop, 'OK' to delete."), get_the_title($this->container_id) )) . "') ) { return true;}return false;\">" . __('Delete') . "</a>";
22
  }
23
  }
24
+ $actions['view'] = '<span class="view"><a href="' . get_permalink($this->container_id) . '" title="' . esc_attr(sprintf(__('View "%s"', 'broken-link-checker'), get_the_title($this->container_id))) . '" rel="permalink">' . __('View') . '</a>';
25
 
26
  return $actions;
27
  }
38
  $source = sprintf(
39
  $source,
40
  $this->get_edit_url(),
41
+ esc_attr(__('Edit this post')),
42
  get_the_title($this->container_id)
43
  );
44
 
136
  class blcPostContainerManager extends blcContainerManager {
137
  var $container_class_name = 'blcPostContainer';
138
 
139
+ var $_conf; //Keep a local reference to the BLC configuration manager. Yields a minor performance benefit.
140
+
141
  /**
142
  * Set up hooks that monitor added/modified/deleted posts.
143
  *
151
  add_action('trash_post', array(&$this,'post_deleted'));
152
  add_action('untrash_post', array(&$this,'post_saved'));
153
 
154
+ //Highlight and nofollow broken links in posts & pages
155
+ $this->_conf = blc_get_configuration();
156
+ if ( $this->_conf->options['mark_broken_links'] || $this->_conf->options['nofollow_broken_links'] ){
157
  add_filter( 'the_content', array(&$this,'hook_the_content') );
158
+ if ( $this->_conf->options['mark_broken_links'] && !empty( $this->_conf->options['broken_link_css'] ) ){
159
  add_action( 'wp_head', array(&$this,'hook_wp_head') );
160
  }
161
  }
341
  $broken_link_urls[] = $link['raw_url'];
342
  }
343
 
 
344
  //Iterate over all HTML links and modify the broken ones
345
  $parser = blc_get_parser('link');
346
  $content = $parser->multi_edit($content, array(&$this, 'highlight_broken_link'), $broken_link_urls);
364
  }
365
 
366
  //Add 'broken_link' to the 'class' attribute (unless already present).
367
+ if ( $this->_conf->options['mark_broken_links'] ){
368
+ if ( isset($link['class']) ){
369
+ $classes = explode(' ', $link['class']);
370
+ if ( !in_array('broken_link', $classes) ){
371
+ $classes[] = 'broken_link';
372
+ $link['class'] = implode(' ', $classes);
373
+ }
374
+ } else {
375
+ $link['class'] = 'broken_link';
376
+ }
377
+ }
378
+
379
+ //Nofollow the link (unless it's already nofollow'ed)
380
+ if ( $this->_conf->options['nofollow_broken_links'] ){
381
+ if ( isset($link['rel']) ){
382
+ $relations = explode(' ', $link['rel']);
383
+ if ( !in_array('nofollow', $relations) ){
384
+ $relations[] = 'nofollow';
385
+ $link['rel'] = implode(' ', $relations);
386
+ }
387
+ } else {
388
+ $link['rel'] = 'nofollow';
389
  }
 
 
390
  }
391
 
392
  return $link;
languages/broken-link-checker.pot CHANGED
@@ -1,4 +1,4 @@
1
- # Translation of the WordPress plugin Broken Link Checker 0.9 by Janis Elsts.
2
  # Copyright (C) 2010 Janis Elsts
3
  # This file is distributed under the same license as the Broken Link Checker package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
@@ -6,9 +6,9 @@
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
- "Project-Id-Version: Broken Link Checker 0.9\n"
10
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/broken-link-checker\n"
11
- "POT-Creation-Date: 2010-04-21 17:01+0000\n"
12
  "PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,176 +17,189 @@ msgstr ""
17
  "Content-Transfer-Encoding: 8bit\n"
18
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
19
 
20
- #: broken-link-checker.php:268
21
  msgid "Once Weekly"
22
  msgstr ""
23
 
24
- #: core.php:136 includes/admin/links-page-js.php:21
25
  msgid "Loading..."
26
  msgstr ""
27
 
28
- #: core.php:159 core.php:669
29
  msgid "[ Network error ]"
30
  msgstr ""
31
 
32
- #: core.php:184
33
  msgid "Automatically expand the widget if broken links have been detected"
34
  msgstr ""
35
 
36
- #: core.php:295
37
  #, php-format
38
  msgid "Failed to delete old DB tables. Database error : %s"
39
  msgstr ""
40
 
41
- #: core.php:312
42
  #, php-format
43
  msgid ""
44
  "Unexpected error: The plugin doesn't know how to upgrade its database to "
45
  "version '%d'."
46
  msgstr ""
47
 
48
- #: core.php:348 core.php:377 core.php:419 core.php:444
49
  #, php-format
50
  msgid "Failed to create table '%s'. Database error: %s"
51
  msgstr ""
52
 
53
- #: core.php:472
54
  msgid "Link Checker Settings"
55
  msgstr ""
56
 
57
- #: core.php:473
58
  msgid "Link Checker"
59
  msgstr ""
60
 
61
- #: core.php:479
62
  msgid "View Broken Links"
63
  msgstr ""
64
 
65
- #: core.php:480 includes/links.php:771
66
  msgid "Broken Links"
67
  msgstr ""
68
 
69
- #: core.php:503
 
 
 
 
 
70
  msgid "Settings"
71
  msgstr ""
72
 
73
- #: core.php:513 core.php:1001
74
  #, php-format
75
  msgid ""
76
  "Error: The plugin's database tables are not up to date! (Current version : %"
77
  "d, expected : %d)"
78
  msgstr ""
79
 
80
- #: core.php:626
81
  msgid "Settings saved."
82
  msgstr ""
83
 
84
- #: core.php:634
85
  msgid "Broken Link Checker Options"
86
  msgstr ""
87
 
88
- #: core.php:647
89
  msgid "Status"
90
  msgstr ""
91
 
92
- #: core.php:649 core.php:981
93
  msgid "Show debug info"
94
  msgstr ""
95
 
96
- #: core.php:682
97
  msgid "Re-check all pages"
98
  msgstr ""
99
 
100
- #: core.php:706
101
  msgid "Check each link"
102
  msgstr ""
103
 
104
- #: core.php:711
105
  #, php-format
106
  msgid "Every %s hours"
107
  msgstr ""
108
 
109
- #: core.php:720
110
  msgid ""
111
  "Existing links will be checked this often. New links will usually be checked "
112
  "ASAP."
113
  msgstr ""
114
 
115
- #: core.php:727
116
  msgid "Broken link CSS"
117
  msgstr ""
118
 
119
- #: core.php:732
120
  msgid "Apply <em>class=\"broken_link\"</em> to broken links"
121
  msgstr ""
122
 
123
- #: core.php:744
124
  msgid "Removed link CSS"
125
  msgstr ""
126
 
127
- #: core.php:749
128
  msgid "Apply <em>class=\"removed_link\"</em> to unlinked links"
129
  msgstr ""
130
 
131
- #: core.php:761
 
 
 
 
 
 
 
 
132
  msgid "Exclusion list"
133
  msgstr ""
134
 
135
- #: core.php:762
136
  msgid ""
137
  "Don't check links where the URL contains any of these words (one per line) :"
138
  msgstr ""
139
 
140
- #: core.php:772
141
  msgid "Custom fields"
142
  msgstr ""
143
 
144
- #: core.php:773
145
  msgid "Check URLs entered in these custom fields (one per line) :"
146
  msgstr ""
147
 
148
- #: core.php:783
149
  msgid "E-mail notifications"
150
  msgstr ""
151
 
152
- #: core.php:789
153
  msgid "Send me e-mail notifications about newly detected broken links"
154
  msgstr ""
155
 
156
- #: core.php:797
157
  msgid "Advanced"
158
  msgstr ""
159
 
160
- #: core.php:803
161
  msgid "Timeout"
162
  msgstr ""
163
 
164
- #: core.php:809 core.php:853
165
  #, php-format
166
  msgid "%s seconds"
167
  msgstr ""
168
 
169
- #: core.php:818
170
  msgid "Links that take longer than this to load will be marked as broken."
171
  msgstr ""
172
 
173
- #: core.php:825
174
  msgid "Link monitor"
175
  msgstr ""
176
 
177
- #: core.php:831
178
  msgid "Run continuously while the Dashboard is open"
179
  msgstr ""
180
 
181
- #: core.php:839
182
  msgid "Run hourly in the background"
183
  msgstr ""
184
 
185
- #: core.php:847
186
  msgid "Max. execution time"
187
  msgstr ""
188
 
189
- #: core.php:864
190
  msgid ""
191
  "The plugin works by periodically launching a background job that parses your "
192
  "posts for links, checks the discovered URLs, and performs other time-"
@@ -194,377 +207,414 @@ msgid ""
194
  "may run each time before stopping."
195
  msgstr ""
196
 
197
- #: core.php:874
198
  msgid "Custom temporary directory"
199
  msgstr ""
200
 
201
- #: core.php:883
202
  msgid "OK"
203
  msgstr ""
204
 
205
- #: core.php:886
206
  msgid "Error : This directory isn't writable by PHP."
207
  msgstr ""
208
 
209
- #: core.php:891
210
  msgid "Error : This directory doesn't exist."
211
  msgstr ""
212
 
213
- #: core.php:899
214
  msgid ""
215
  "Set this field if you want the plugin to use a custom directory for its "
216
  "lockfiles. Otherwise, leave it blank."
217
  msgstr ""
218
 
219
- #: core.php:906
220
  msgid "Server load limit"
221
  msgstr ""
222
 
223
- #: core.php:947
224
  #, php-format
225
  msgid ""
226
  "Link checking will be suspended if the average <a href=\"%s\">server load</"
227
  "a> rises above this number. Leave this field blank to disable load limiting."
228
  msgstr ""
229
 
230
- #: core.php:957
231
  msgid ""
232
  "Load limiting only works on Linux-like systems where <code>/proc/loadavg</"
233
  "code> is present and accessible."
234
  msgstr ""
235
 
236
- #: core.php:966
237
  msgid "Save Changes"
238
  msgstr ""
239
 
240
- #: core.php:979
241
  msgid "Hide debug info"
242
  msgstr ""
243
 
244
- #: core.php:1087 core.php:1409 core.php:1441
245
  #, php-format
246
  msgid "Database error : %s"
247
  msgstr ""
248
 
249
- #: core.php:1162
250
  msgid "Bulk Actions"
251
  msgstr ""
252
 
253
- #: core.php:1163
254
  msgid "Recheck"
255
  msgstr ""
256
 
257
- #: core.php:1164
258
  msgid "Fix redirects"
259
  msgstr ""
260
 
261
- #: core.php:1165 core.php:1308 includes/admin/links-page-js.php:293
262
  msgid "Unlink"
263
  msgstr ""
264
 
265
- #: core.php:1166
266
  msgid "Delete sources"
267
  msgstr ""
268
 
269
- #: core.php:1180 core.php:1343
270
  msgid "Apply"
271
  msgstr ""
272
 
273
- #: core.php:1187
274
  msgid "&laquo;"
275
  msgstr ""
276
 
277
- #: core.php:1188
278
  msgid "&raquo;"
279
  msgstr ""
280
 
281
- #: core.php:1195 core.php:1349
282
  #, php-format
283
  msgid "Displaying %s&#8211;%s of <span class=\"current-link-count\">%s</span>"
284
  msgstr ""
285
 
286
- #: core.php:1214
287
  msgid "Source"
288
  msgstr ""
289
 
290
- #: core.php:1215
291
  msgid "Link Text"
292
  msgstr ""
293
 
294
- #: core.php:1216 includes/admin/search-form.php:42
295
  msgid "URL"
296
  msgstr ""
297
 
298
- #: core.php:1281
299
  msgid "[An orphaned link! This is a bug.]"
300
  msgstr ""
301
 
302
- #: core.php:1305
303
  msgid "Show more info about this link"
304
  msgstr ""
305
 
306
- #: core.php:1305 core.php:2542
307
  msgid "Details"
308
  msgstr ""
309
 
310
- #: core.php:1307
311
  msgid "Remove this link from all posts"
312
  msgstr ""
313
 
314
- #: core.php:1313
315
  msgid "Remove this link from the list of broken links and mark it as valid"
316
  msgstr ""
317
 
318
- #: core.php:1314 includes/admin/links-page-js.php:78
319
  msgid "Not broken"
320
  msgstr ""
321
 
322
- #: core.php:1318
323
  msgid "Edit link URL"
324
  msgstr ""
325
 
326
- #: core.php:1318 includes/admin/links-page-js.php:199
327
  #: includes/admin/links-page-js.php:227
328
  msgid "Edit URL"
329
  msgstr ""
330
 
331
- #: core.php:1324
332
  msgid "Cancel URL editing"
333
  msgstr ""
334
 
335
- #: core.php:1324 includes/admin/search-form.php:87
336
  msgid "Cancel"
337
  msgstr ""
338
 
339
- #: core.php:1392
340
  msgid "You must enter a filter name!"
341
  msgstr ""
342
 
343
- #: core.php:1396
344
  msgid "Invalid search query."
345
  msgstr ""
346
 
347
- #: core.php:1404
348
  #, php-format
349
  msgid "Filter \"%s\" created"
350
  msgstr ""
351
 
352
- #: core.php:1432
353
  msgid "Filter ID not specified."
354
  msgstr ""
355
 
356
- #: core.php:1438
357
  msgid "Filter deleted"
358
  msgstr ""
359
 
360
- #: core.php:1486
361
  #, php-format
362
  msgid "Replaced %d redirect with a direct link"
363
  msgid_plural "Replaced %d redirects with direct links"
364
  msgstr[0] ""
365
  msgstr[1] ""
366
 
367
- #: core.php:1497
368
  #, php-format
369
  msgid "Failed to fix %d redirect"
370
  msgid_plural "Failed to fix %d redirects"
371
  msgstr[0] ""
372
  msgstr[1] ""
373
 
374
- #: core.php:1507
375
  msgid "None of the selected links are redirects!"
376
  msgstr ""
377
 
378
- #: core.php:1553
379
  #, php-format
380
  msgid "%d link removed"
381
  msgid_plural "%d links removed"
382
  msgstr[0] ""
383
  msgstr[1] ""
384
 
385
- #: core.php:1564
386
  #, php-format
387
  msgid "Failed to remove %d link"
388
  msgid_plural "Failed to remove %d links"
389
  msgstr[0] ""
390
  msgstr[1] ""
391
 
392
- #: core.php:1652
393
  msgid "Didn't find anything to delete!"
394
  msgstr ""
395
 
396
- #: core.php:1680
397
  #, php-format
398
  msgid "%d link scheduled for rechecking"
399
  msgid_plural "%d links scheduled for rechecking"
400
  msgstr[0] ""
401
  msgstr[1] ""
402
 
403
- #: core.php:1703
404
  msgid "Post published on"
405
  msgstr ""
406
 
407
- #: core.php:1708
408
  msgid "Link last checked"
409
  msgstr ""
410
 
411
- #: core.php:1712
412
  msgid "Never"
413
  msgstr ""
414
 
415
- #: core.php:1718 includes/admin/search-form.php:45
416
  msgid "HTTP code"
417
  msgstr ""
418
 
419
- #: core.php:1723
420
  msgid "Response time"
421
  msgstr ""
422
 
423
- #: core.php:1725
424
  #, php-format
425
  msgid "%2.3f seconds"
426
  msgstr ""
427
 
428
- #: core.php:1728
429
  msgid "Final URL"
430
  msgstr ""
431
 
432
- #: core.php:1733
433
  msgid "Redirect count"
434
  msgstr ""
435
 
436
- #: core.php:1738
437
  msgid "Instance count"
438
  msgstr ""
439
 
440
- #: core.php:1747
441
  #, php-format
442
  msgid "This link has failed %d time."
443
  msgid_plural "This link has failed %d times."
444
  msgstr[0] ""
445
  msgstr[1] ""
446
 
447
- #: core.php:1758
 
 
 
 
 
448
  msgid "Log"
449
  msgstr ""
450
 
451
- #: core.php:2070
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
452
  msgid "View broken links"
453
  msgstr ""
454
 
455
- #: core.php:2071
456
  #, php-format
457
  msgid "Found %d broken link"
458
  msgid_plural "Found %d broken links"
459
  msgstr[0] ""
460
  msgstr[1] ""
461
 
462
- #: core.php:2077
463
  msgid "No broken links found."
464
  msgstr ""
465
 
466
- #: core.php:2084
467
  #, php-format
468
  msgid "%d URL in the work queue"
469
  msgid_plural "%d URLs in the work queue"
470
  msgstr[0] ""
471
  msgstr[1] ""
472
 
473
- #: core.php:2087
474
  msgid "No URLs in the work queue."
475
  msgstr ""
476
 
477
- #: core.php:2093
478
  #, php-format
479
  msgid "Detected %d unique URL"
480
  msgid_plural "Detected %d unique URLs"
481
  msgstr[0] ""
482
  msgstr[1] ""
483
 
484
- #: core.php:2094
485
  #, php-format
486
  msgid "in %d link"
487
  msgid_plural "in %d links"
488
  msgstr[0] ""
489
  msgstr[1] ""
490
 
491
- #: core.php:2099
492
  msgid "and still searching..."
493
  msgstr ""
494
 
495
- #: core.php:2105
496
  msgid "Searching your blog for links..."
497
  msgstr ""
498
 
499
- #: core.php:2107
500
  msgid "No links detected."
501
  msgstr ""
502
 
503
- #: core.php:2192 core.php:2228 core.php:2291
504
  msgid "You're not allowed to do that!"
505
  msgstr ""
506
 
507
- #: core.php:2200 core.php:2238 core.php:2301
508
  #, php-format
509
  msgid "Oops, I can't find the link %d"
510
  msgstr ""
511
 
512
- #: core.php:2207
513
  msgid "This link was manually marked as working by the user."
514
  msgstr ""
515
 
516
- #: core.php:2213
517
  msgid "Oops, couldn't modify the link!"
518
  msgstr ""
519
 
520
- #: core.php:2216 core.php:2327
521
  msgid "Error : link_id not specified"
522
  msgstr ""
523
 
524
- #: core.php:2248
525
  msgid "Oops, the new URL is invalid!"
526
  msgstr ""
527
 
528
- #: core.php:2259 core.php:2310
529
  msgid "An unexpected error occured!"
530
  msgstr ""
531
 
532
- #: core.php:2277
533
  msgid "Error : link_id or new_url not specified"
534
  msgstr ""
535
 
536
- #: core.php:2336
537
  msgid "You don't have sufficient privileges to access this information!"
538
  msgstr ""
539
 
540
- #: core.php:2349
541
  msgid "Error : link ID not specified"
542
  msgstr ""
543
 
544
- #: core.php:2360
545
  #, php-format
546
  msgid "Failed to load link details (%s)"
547
  msgstr ""
548
 
549
- #: core.php:2528
550
  #, php-format
551
  msgid ""
552
  "The current temporary directory is not accessible; please <a href=\"%s\">set "
553
  "a different one</a>."
554
  msgstr ""
555
 
556
- #: core.php:2533
557
  #, php-format
558
  msgid ""
559
  "Please make the directory <code>%1$s</code> writable by plugins or <a href="
560
  "\"%2$s\">set a custom temporary directory</a>."
561
  msgstr ""
562
 
563
- #: core.php:2540
564
  msgid "Broken Link Checker can't create a lockfile."
565
  msgstr ""
566
 
567
- #: core.php:2545
568
  msgid ""
569
  "The plugin uses a file-based locking mechanism to ensure that only one "
570
  "instance of the resource-heavy link checking algorithm is running at any "
@@ -575,66 +625,66 @@ msgid ""
575
  "specify a custom temporary directory in the plugin's settings."
576
  msgstr ""
577
 
578
- #: core.php:2564
579
  msgid "PHP version"
580
  msgstr ""
581
 
582
- #: core.php:2570
583
  msgid "MySQL version"
584
  msgstr ""
585
 
586
- #: core.php:2583
587
  msgid ""
588
  "You have an old version of CURL. Redirect detection may not work properly."
589
  msgstr ""
590
 
591
- #: core.php:2595 core.php:2611 core.php:2616
592
  msgid "Not installed"
593
  msgstr ""
594
 
595
- #: core.php:2598
596
  msgid "CURL version"
597
  msgstr ""
598
 
599
- #: core.php:2604
600
  msgid "Installed"
601
  msgstr ""
602
 
603
- #: core.php:2617
604
  msgid "You must have either CURL or Snoopy installed for the plugin to work!"
605
  msgstr ""
606
 
607
- #: core.php:2628
608
  msgid "On"
609
  msgstr ""
610
 
611
- #: core.php:2629
612
  msgid "Redirects may be detected as broken links when safe_mode is on."
613
  msgstr ""
614
 
615
- #: core.php:2634 core.php:2648
616
  msgid "Off"
617
  msgstr ""
618
 
619
- #: core.php:2642
620
  #, php-format
621
  msgid "On ( %s )"
622
  msgstr ""
623
 
624
- #: core.php:2643
625
  msgid "Redirects may be detected as broken links when open_basedir is on."
626
  msgstr ""
627
 
628
- #: core.php:2662
629
  msgid "Can't create a lockfile. Please specify a custom temporary directory."
630
  msgstr ""
631
 
632
- #: core.php:2691
633
  #, php-format
634
  msgid "[%s] Broken links detected"
635
  msgstr ""
636
 
637
- #: core.php:2697
638
  #, php-format
639
  msgid "Broken Link Checker has detected %d new broken link on your site."
640
  msgid_plural ""
@@ -642,33 +692,33 @@ msgid_plural ""
642
  msgstr[0] ""
643
  msgstr[1] ""
644
 
645
- #: core.php:2712
646
  #, php-format
647
  msgid "Here's a list of the first %d broken links:"
648
  msgid_plural "Here's a list of the first %d broken links:"
649
  msgstr[0] ""
650
  msgstr[1] ""
651
 
652
- #: core.php:2720
653
  msgid "Here's a list of the new broken links: "
654
  msgstr ""
655
 
656
- #: core.php:2732
657
  #, php-format
658
  msgid "Link text : %s"
659
  msgstr ""
660
 
661
- #: core.php:2733
662
  #, php-format
663
  msgid "Link URL : <a href=\"%s\">%s</a>"
664
  msgstr ""
665
 
666
- #: core.php:2734
667
  #, php-format
668
  msgid "Source : %s"
669
  msgstr ""
670
 
671
- #: core.php:2748
672
  msgid "You can see all broken links here:"
673
  msgstr ""
674
 
@@ -778,7 +828,7 @@ msgstr ""
778
  msgid "Bookmark"
779
  msgstr ""
780
 
781
- #: includes/admin/search-form.php:73 includes/containers/comment.php:136
782
  msgid "Comment"
783
  msgstr ""
784
 
@@ -786,24 +836,24 @@ msgstr ""
786
  msgid "Search Links"
787
  msgstr ""
788
 
789
- #: includes/checkers/http.php:182 includes/checkers/http.php:249
790
  #, php-format
791
  msgid "HTTP code : %d"
792
  msgstr ""
793
 
794
- #: includes/checkers/http.php:184 includes/checkers/http.php:251
795
  msgid "(No response)"
796
  msgstr ""
797
 
798
- #: includes/checkers/http.php:190
799
  msgid "Most likely the connection timed out or the domain doesn't exist."
800
  msgstr ""
801
 
802
- #: includes/checkers/http.php:258
803
  msgid "Request timed out."
804
  msgstr ""
805
 
806
- #: includes/checkers/http.php:276
807
  msgid "Using Snoopy"
808
  msgstr ""
809
 
@@ -823,7 +873,7 @@ msgstr[1] ""
823
  msgid "Edit this bookmark"
824
  msgstr ""
825
 
826
- #: includes/containers/blogroll.php:38 includes/containers/comment.php:106
827
  #: includes/containers/custom_field.php:201 includes/containers/post.php:16
828
  msgid "Edit"
829
  msgstr ""
@@ -872,40 +922,40 @@ msgstr ""
872
  msgid "Failed to delete comment %d"
873
  msgstr ""
874
 
875
- #: includes/containers/comment.php:106 includes/containers/comment.php:148
876
  msgid "Edit comment"
877
  msgstr ""
878
 
879
- #: includes/containers/comment.php:113
880
  msgid "Delete Permanently"
881
  msgstr ""
882
 
883
- #: includes/containers/comment.php:115
884
  msgid "Move this comment to the trash"
885
  msgstr ""
886
 
887
- #: includes/containers/comment.php:115
888
  msgctxt "verb"
889
  msgid "Trash"
890
  msgstr ""
891
 
892
- #: includes/containers/comment.php:119
893
  msgid "View comment"
894
  msgstr ""
895
 
896
- #: includes/containers/comment.php:119
897
  #: includes/containers/custom_field.php:209 includes/containers/post.php:24
898
  msgid "View"
899
  msgstr ""
900
 
901
- #: includes/containers/comment.php:272
902
  #, php-format
903
  msgid "%d comment moved to the trash"
904
  msgid_plural "%d comments moved to the trash"
905
  msgstr[0] ""
906
  msgstr[1] ""
907
 
908
- #: includes/containers/comment.php:282
909
  #, php-format
910
  msgid "%d comment has been deleted"
911
  msgid_plural "%d comments have been deleted"
@@ -957,14 +1007,14 @@ msgstr ""
957
  msgid "Failed to delete post \"%s\" (%d)"
958
  msgstr ""
959
 
960
- #: includes/containers/custom_field.php:479 includes/containers/post.php:298
961
  #, php-format
962
  msgid "%d post moved to the trash"
963
  msgid_plural "%d posts moved to the trash"
964
  msgstr[0] ""
965
  msgstr[1] ""
966
 
967
- #: includes/containers/custom_field.php:481 includes/containers/post.php:300
968
  #, php-format
969
  msgid "%d post deleted"
970
  msgid_plural "%d posts deleted"
1
+ # Translation of the WordPress plugin Broken Link Checker 0.9.2 by Janis Elsts.
2
  # Copyright (C) 2010 Janis Elsts
3
  # This file is distributed under the same license as the Broken Link Checker package.
4
  # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
+ "Project-Id-Version: Broken Link Checker 0.9.2\n"
10
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/broken-link-checker\n"
11
+ "POT-Creation-Date: 2010-04-28 18:48+0000\n"
12
  "PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
17
  "Content-Transfer-Encoding: 8bit\n"
18
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
19
 
20
+ #: broken-link-checker.php:273
21
  msgid "Once Weekly"
22
  msgstr ""
23
 
24
+ #: core.php:137 includes/admin/links-page-js.php:21
25
  msgid "Loading..."
26
  msgstr ""
27
 
28
+ #: core.php:160 core.php:696
29
  msgid "[ Network error ]"
30
  msgstr ""
31
 
32
+ #: core.php:185
33
  msgid "Automatically expand the widget if broken links have been detected"
34
  msgstr ""
35
 
36
+ #: core.php:296
37
  #, php-format
38
  msgid "Failed to delete old DB tables. Database error : %s"
39
  msgstr ""
40
 
41
+ #: core.php:313
42
  #, php-format
43
  msgid ""
44
  "Unexpected error: The plugin doesn't know how to upgrade its database to "
45
  "version '%d'."
46
  msgstr ""
47
 
48
+ #: core.php:349 core.php:378 core.php:420 core.php:445
49
  #, php-format
50
  msgid "Failed to create table '%s'. Database error: %s"
51
  msgstr ""
52
 
53
+ #: core.php:473
54
  msgid "Link Checker Settings"
55
  msgstr ""
56
 
57
+ #: core.php:474
58
  msgid "Link Checker"
59
  msgstr ""
60
 
61
+ #: core.php:480
62
  msgid "View Broken Links"
63
  msgstr ""
64
 
65
+ #: core.php:481 includes/links.php:771
66
  msgid "Broken Links"
67
  msgstr ""
68
 
69
+ #: core.php:502
70
+ #, php-format
71
+ msgid "Highlight links broken for at least %s days"
72
+ msgstr ""
73
+
74
+ #: core.php:528
75
  msgid "Settings"
76
  msgstr ""
77
 
78
+ #: core.php:538 core.php:1039
79
  #, php-format
80
  msgid ""
81
  "Error: The plugin's database tables are not up to date! (Current version : %"
82
  "d, expected : %d)"
83
  msgstr ""
84
 
85
+ #: core.php:653
86
  msgid "Settings saved."
87
  msgstr ""
88
 
89
+ #: core.php:661
90
  msgid "Broken Link Checker Options"
91
  msgstr ""
92
 
93
+ #: core.php:674
94
  msgid "Status"
95
  msgstr ""
96
 
97
+ #: core.php:676 core.php:1019
98
  msgid "Show debug info"
99
  msgstr ""
100
 
101
+ #: core.php:709
102
  msgid "Re-check all pages"
103
  msgstr ""
104
 
105
+ #: core.php:733
106
  msgid "Check each link"
107
  msgstr ""
108
 
109
+ #: core.php:738
110
  #, php-format
111
  msgid "Every %s hours"
112
  msgstr ""
113
 
114
+ #: core.php:747
115
  msgid ""
116
  "Existing links will be checked this often. New links will usually be checked "
117
  "ASAP."
118
  msgstr ""
119
 
120
+ #: core.php:754
121
  msgid "Broken link CSS"
122
  msgstr ""
123
 
124
+ #: core.php:759
125
  msgid "Apply <em>class=\"broken_link\"</em> to broken links"
126
  msgstr ""
127
 
128
+ #: core.php:771
129
  msgid "Removed link CSS"
130
  msgstr ""
131
 
132
+ #: core.php:776
133
  msgid "Apply <em>class=\"removed_link\"</em> to unlinked links"
134
  msgstr ""
135
 
136
+ #: core.php:788
137
+ msgid "Broken link SEO"
138
+ msgstr ""
139
+
140
+ #: core.php:793
141
+ msgid "Apply <em>rel=\"nofollow\"</em> to broken links"
142
+ msgstr ""
143
+
144
+ #: core.php:799
145
  msgid "Exclusion list"
146
  msgstr ""
147
 
148
+ #: core.php:800
149
  msgid ""
150
  "Don't check links where the URL contains any of these words (one per line) :"
151
  msgstr ""
152
 
153
+ #: core.php:810
154
  msgid "Custom fields"
155
  msgstr ""
156
 
157
+ #: core.php:811
158
  msgid "Check URLs entered in these custom fields (one per line) :"
159
  msgstr ""
160
 
161
+ #: core.php:821
162
  msgid "E-mail notifications"
163
  msgstr ""
164
 
165
+ #: core.php:827
166
  msgid "Send me e-mail notifications about newly detected broken links"
167
  msgstr ""
168
 
169
+ #: core.php:835
170
  msgid "Advanced"
171
  msgstr ""
172
 
173
+ #: core.php:841
174
  msgid "Timeout"
175
  msgstr ""
176
 
177
+ #: core.php:847 core.php:891
178
  #, php-format
179
  msgid "%s seconds"
180
  msgstr ""
181
 
182
+ #: core.php:856
183
  msgid "Links that take longer than this to load will be marked as broken."
184
  msgstr ""
185
 
186
+ #: core.php:863
187
  msgid "Link monitor"
188
  msgstr ""
189
 
190
+ #: core.php:869
191
  msgid "Run continuously while the Dashboard is open"
192
  msgstr ""
193
 
194
+ #: core.php:877
195
  msgid "Run hourly in the background"
196
  msgstr ""
197
 
198
+ #: core.php:885
199
  msgid "Max. execution time"
200
  msgstr ""
201
 
202
+ #: core.php:902
203
  msgid ""
204
  "The plugin works by periodically launching a background job that parses your "
205
  "posts for links, checks the discovered URLs, and performs other time-"
207
  "may run each time before stopping."
208
  msgstr ""
209
 
210
+ #: core.php:912
211
  msgid "Custom temporary directory"
212
  msgstr ""
213
 
214
+ #: core.php:921
215
  msgid "OK"
216
  msgstr ""
217
 
218
+ #: core.php:924
219
  msgid "Error : This directory isn't writable by PHP."
220
  msgstr ""
221
 
222
+ #: core.php:929
223
  msgid "Error : This directory doesn't exist."
224
  msgstr ""
225
 
226
+ #: core.php:937
227
  msgid ""
228
  "Set this field if you want the plugin to use a custom directory for its "
229
  "lockfiles. Otherwise, leave it blank."
230
  msgstr ""
231
 
232
+ #: core.php:944
233
  msgid "Server load limit"
234
  msgstr ""
235
 
236
+ #: core.php:985
237
  #, php-format
238
  msgid ""
239
  "Link checking will be suspended if the average <a href=\"%s\">server load</"
240
  "a> rises above this number. Leave this field blank to disable load limiting."
241
  msgstr ""
242
 
243
+ #: core.php:995
244
  msgid ""
245
  "Load limiting only works on Linux-like systems where <code>/proc/loadavg</"
246
  "code> is present and accessible."
247
  msgstr ""
248
 
249
+ #: core.php:1004
250
  msgid "Save Changes"
251
  msgstr ""
252
 
253
+ #: core.php:1017
254
  msgid "Hide debug info"
255
  msgstr ""
256
 
257
+ #: core.php:1125 core.php:1458 core.php:1490
258
  #, php-format
259
  msgid "Database error : %s"
260
  msgstr ""
261
 
262
+ #: core.php:1200
263
  msgid "Bulk Actions"
264
  msgstr ""
265
 
266
+ #: core.php:1201
267
  msgid "Recheck"
268
  msgstr ""
269
 
270
+ #: core.php:1202
271
  msgid "Fix redirects"
272
  msgstr ""
273
 
274
+ #: core.php:1203 core.php:1357 includes/admin/links-page-js.php:293
275
  msgid "Unlink"
276
  msgstr ""
277
 
278
+ #: core.php:1204
279
  msgid "Delete sources"
280
  msgstr ""
281
 
282
+ #: core.php:1218 core.php:1392
283
  msgid "Apply"
284
  msgstr ""
285
 
286
+ #: core.php:1225
287
  msgid "&laquo;"
288
  msgstr ""
289
 
290
+ #: core.php:1226
291
  msgid "&raquo;"
292
  msgstr ""
293
 
294
+ #: core.php:1233 core.php:1398
295
  #, php-format
296
  msgid "Displaying %s&#8211;%s of <span class=\"current-link-count\">%s</span>"
297
  msgstr ""
298
 
299
+ #: core.php:1252
300
  msgid "Source"
301
  msgstr ""
302
 
303
+ #: core.php:1253
304
  msgid "Link Text"
305
  msgstr ""
306
 
307
+ #: core.php:1254 includes/admin/search-form.php:42
308
  msgid "URL"
309
  msgstr ""
310
 
311
+ #: core.php:1330
312
  msgid "[An orphaned link! This is a bug.]"
313
  msgstr ""
314
 
315
+ #: core.php:1354
316
  msgid "Show more info about this link"
317
  msgstr ""
318
 
319
+ #: core.php:1354 core.php:2726
320
  msgid "Details"
321
  msgstr ""
322
 
323
+ #: core.php:1356
324
  msgid "Remove this link from all posts"
325
  msgstr ""
326
 
327
+ #: core.php:1362
328
  msgid "Remove this link from the list of broken links and mark it as valid"
329
  msgstr ""
330
 
331
+ #: core.php:1363 includes/admin/links-page-js.php:78
332
  msgid "Not broken"
333
  msgstr ""
334
 
335
+ #: core.php:1367
336
  msgid "Edit link URL"
337
  msgstr ""
338
 
339
+ #: core.php:1367 includes/admin/links-page-js.php:199
340
  #: includes/admin/links-page-js.php:227
341
  msgid "Edit URL"
342
  msgstr ""
343
 
344
+ #: core.php:1373
345
  msgid "Cancel URL editing"
346
  msgstr ""
347
 
348
+ #: core.php:1373 includes/admin/search-form.php:87
349
  msgid "Cancel"
350
  msgstr ""
351
 
352
+ #: core.php:1441
353
  msgid "You must enter a filter name!"
354
  msgstr ""
355
 
356
+ #: core.php:1445
357
  msgid "Invalid search query."
358
  msgstr ""
359
 
360
+ #: core.php:1453
361
  #, php-format
362
  msgid "Filter \"%s\" created"
363
  msgstr ""
364
 
365
+ #: core.php:1481
366
  msgid "Filter ID not specified."
367
  msgstr ""
368
 
369
+ #: core.php:1487
370
  msgid "Filter deleted"
371
  msgstr ""
372
 
373
+ #: core.php:1535
374
  #, php-format
375
  msgid "Replaced %d redirect with a direct link"
376
  msgid_plural "Replaced %d redirects with direct links"
377
  msgstr[0] ""
378
  msgstr[1] ""
379
 
380
+ #: core.php:1546
381
  #, php-format
382
  msgid "Failed to fix %d redirect"
383
  msgid_plural "Failed to fix %d redirects"
384
  msgstr[0] ""
385
  msgstr[1] ""
386
 
387
+ #: core.php:1556
388
  msgid "None of the selected links are redirects!"
389
  msgstr ""
390
 
391
+ #: core.php:1602
392
  #, php-format
393
  msgid "%d link removed"
394
  msgid_plural "%d links removed"
395
  msgstr[0] ""
396
  msgstr[1] ""
397
 
398
+ #: core.php:1613
399
  #, php-format
400
  msgid "Failed to remove %d link"
401
  msgid_plural "Failed to remove %d links"
402
  msgstr[0] ""
403
  msgstr[1] ""
404
 
405
+ #: core.php:1701
406
  msgid "Didn't find anything to delete!"
407
  msgstr ""
408
 
409
+ #: core.php:1729
410
  #, php-format
411
  msgid "%d link scheduled for rechecking"
412
  msgid_plural "%d links scheduled for rechecking"
413
  msgstr[0] ""
414
  msgstr[1] ""
415
 
416
+ #: core.php:1752
417
  msgid "Post published on"
418
  msgstr ""
419
 
420
+ #: core.php:1757
421
  msgid "Link last checked"
422
  msgstr ""
423
 
424
+ #: core.php:1761
425
  msgid "Never"
426
  msgstr ""
427
 
428
+ #: core.php:1767 includes/admin/search-form.php:45
429
  msgid "HTTP code"
430
  msgstr ""
431
 
432
+ #: core.php:1772
433
  msgid "Response time"
434
  msgstr ""
435
 
436
+ #: core.php:1774
437
  #, php-format
438
  msgid "%2.3f seconds"
439
  msgstr ""
440
 
441
+ #: core.php:1777
442
  msgid "Final URL"
443
  msgstr ""
444
 
445
+ #: core.php:1782
446
  msgid "Redirect count"
447
  msgstr ""
448
 
449
+ #: core.php:1787
450
  msgid "Instance count"
451
  msgstr ""
452
 
453
+ #: core.php:1796
454
  #, php-format
455
  msgid "This link has failed %d time."
456
  msgid_plural "This link has failed %d times."
457
  msgstr[0] ""
458
  msgstr[1] ""
459
 
460
+ #: core.php:1804
461
+ #, php-format
462
+ msgid "This link has been broken for %s."
463
+ msgstr ""
464
+
465
+ #: core.php:1815
466
  msgid "Log"
467
  msgstr ""
468
 
469
+ #: core.php:1841
470
+ msgid "less than a minute"
471
+ msgstr ""
472
+
473
+ #: core.php:1849
474
+ #, php-format
475
+ msgid "%d minute"
476
+ msgid_plural "%d minutes"
477
+ msgstr[0] ""
478
+ msgstr[1] ""
479
+
480
+ #: core.php:1863 core.php:1890
481
+ #, php-format
482
+ msgid "%d hour"
483
+ msgid_plural "%d hours"
484
+ msgstr[0] ""
485
+ msgstr[1] ""
486
+
487
+ #: core.php:1878 core.php:1919
488
+ #, php-format
489
+ msgid "%d day"
490
+ msgid_plural "%d days"
491
+ msgstr[0] ""
492
+ msgstr[1] ""
493
+
494
+ #: core.php:1908
495
+ #, php-format
496
+ msgid "%d month"
497
+ msgid_plural "%d months"
498
+ msgstr[0] ""
499
+ msgstr[1] ""
500
+
501
+ #: core.php:2231
502
  msgid "View broken links"
503
  msgstr ""
504
 
505
+ #: core.php:2232
506
  #, php-format
507
  msgid "Found %d broken link"
508
  msgid_plural "Found %d broken links"
509
  msgstr[0] ""
510
  msgstr[1] ""
511
 
512
+ #: core.php:2238
513
  msgid "No broken links found."
514
  msgstr ""
515
 
516
+ #: core.php:2245
517
  #, php-format
518
  msgid "%d URL in the work queue"
519
  msgid_plural "%d URLs in the work queue"
520
  msgstr[0] ""
521
  msgstr[1] ""
522
 
523
+ #: core.php:2248
524
  msgid "No URLs in the work queue."
525
  msgstr ""
526
 
527
+ #: core.php:2254
528
  #, php-format
529
  msgid "Detected %d unique URL"
530
  msgid_plural "Detected %d unique URLs"
531
  msgstr[0] ""
532
  msgstr[1] ""
533
 
534
+ #: core.php:2255
535
  #, php-format
536
  msgid "in %d link"
537
  msgid_plural "in %d links"
538
  msgstr[0] ""
539
  msgstr[1] ""
540
 
541
+ #: core.php:2260
542
  msgid "and still searching..."
543
  msgstr ""
544
 
545
+ #: core.php:2266
546
  msgid "Searching your blog for links..."
547
  msgstr ""
548
 
549
+ #: core.php:2268
550
  msgid "No links detected."
551
  msgstr ""
552
 
553
+ #: core.php:2353 core.php:2389 core.php:2452 core.php:2534
554
  msgid "You're not allowed to do that!"
555
  msgstr ""
556
 
557
+ #: core.php:2361 core.php:2399 core.php:2462
558
  #, php-format
559
  msgid "Oops, I can't find the link %d"
560
  msgstr ""
561
 
562
+ #: core.php:2368
563
  msgid "This link was manually marked as working by the user."
564
  msgstr ""
565
 
566
+ #: core.php:2374
567
  msgid "Oops, couldn't modify the link!"
568
  msgstr ""
569
 
570
+ #: core.php:2377 core.php:2488
571
  msgid "Error : link_id not specified"
572
  msgstr ""
573
 
574
+ #: core.php:2409
575
  msgid "Oops, the new URL is invalid!"
576
  msgstr ""
577
 
578
+ #: core.php:2420 core.php:2471
579
  msgid "An unexpected error occured!"
580
  msgstr ""
581
 
582
+ #: core.php:2438
583
  msgid "Error : link_id or new_url not specified"
584
  msgstr ""
585
 
586
+ #: core.php:2497
587
  msgid "You don't have sufficient privileges to access this information!"
588
  msgstr ""
589
 
590
+ #: core.php:2510
591
  msgid "Error : link ID not specified"
592
  msgstr ""
593
 
594
+ #: core.php:2521
595
  #, php-format
596
  msgid "Failed to load link details (%s)"
597
  msgstr ""
598
 
599
+ #: core.php:2712
600
  #, php-format
601
  msgid ""
602
  "The current temporary directory is not accessible; please <a href=\"%s\">set "
603
  "a different one</a>."
604
  msgstr ""
605
 
606
+ #: core.php:2717
607
  #, php-format
608
  msgid ""
609
  "Please make the directory <code>%1$s</code> writable by plugins or <a href="
610
  "\"%2$s\">set a custom temporary directory</a>."
611
  msgstr ""
612
 
613
+ #: core.php:2724
614
  msgid "Broken Link Checker can't create a lockfile."
615
  msgstr ""
616
 
617
+ #: core.php:2729
618
  msgid ""
619
  "The plugin uses a file-based locking mechanism to ensure that only one "
620
  "instance of the resource-heavy link checking algorithm is running at any "
625
  "specify a custom temporary directory in the plugin's settings."
626
  msgstr ""
627
 
628
+ #: core.php:2748
629
  msgid "PHP version"
630
  msgstr ""
631
 
632
+ #: core.php:2754
633
  msgid "MySQL version"
634
  msgstr ""
635
 
636
+ #: core.php:2767
637
  msgid ""
638
  "You have an old version of CURL. Redirect detection may not work properly."
639
  msgstr ""
640
 
641
+ #: core.php:2779 core.php:2795 core.php:2800
642
  msgid "Not installed"
643
  msgstr ""
644
 
645
+ #: core.php:2782
646
  msgid "CURL version"
647
  msgstr ""
648
 
649
+ #: core.php:2788
650
  msgid "Installed"
651
  msgstr ""
652
 
653
+ #: core.php:2801
654
  msgid "You must have either CURL or Snoopy installed for the plugin to work!"
655
  msgstr ""
656
 
657
+ #: core.php:2812
658
  msgid "On"
659
  msgstr ""
660
 
661
+ #: core.php:2813
662
  msgid "Redirects may be detected as broken links when safe_mode is on."
663
  msgstr ""
664
 
665
+ #: core.php:2818 core.php:2832
666
  msgid "Off"
667
  msgstr ""
668
 
669
+ #: core.php:2826
670
  #, php-format
671
  msgid "On ( %s )"
672
  msgstr ""
673
 
674
+ #: core.php:2827
675
  msgid "Redirects may be detected as broken links when open_basedir is on."
676
  msgstr ""
677
 
678
+ #: core.php:2846
679
  msgid "Can't create a lockfile. Please specify a custom temporary directory."
680
  msgstr ""
681
 
682
+ #: core.php:2875
683
  #, php-format
684
  msgid "[%s] Broken links detected"
685
  msgstr ""
686
 
687
+ #: core.php:2881
688
  #, php-format
689
  msgid "Broken Link Checker has detected %d new broken link on your site."
690
  msgid_plural ""
692
  msgstr[0] ""
693
  msgstr[1] ""
694
 
695
+ #: core.php:2896
696
  #, php-format
697
  msgid "Here's a list of the first %d broken links:"
698
  msgid_plural "Here's a list of the first %d broken links:"
699
  msgstr[0] ""
700
  msgstr[1] ""
701
 
702
+ #: core.php:2904
703
  msgid "Here's a list of the new broken links: "
704
  msgstr ""
705
 
706
+ #: core.php:2916
707
  #, php-format
708
  msgid "Link text : %s"
709
  msgstr ""
710
 
711
+ #: core.php:2917
712
  #, php-format
713
  msgid "Link URL : <a href=\"%s\">%s</a>"
714
  msgstr ""
715
 
716
+ #: core.php:2918
717
  #, php-format
718
  msgid "Source : %s"
719
  msgstr ""
720
 
721
+ #: core.php:2932
722
  msgid "You can see all broken links here:"
723
  msgstr ""
724
 
828
  msgid "Bookmark"
829
  msgstr ""
830
 
831
+ #: includes/admin/search-form.php:73 includes/containers/comment.php:137
832
  msgid "Comment"
833
  msgstr ""
834
 
836
  msgid "Search Links"
837
  msgstr ""
838
 
839
+ #: includes/checkers/http.php:186 includes/checkers/http.php:253
840
  #, php-format
841
  msgid "HTTP code : %d"
842
  msgstr ""
843
 
844
+ #: includes/checkers/http.php:188 includes/checkers/http.php:255
845
  msgid "(No response)"
846
  msgstr ""
847
 
848
+ #: includes/checkers/http.php:194
849
  msgid "Most likely the connection timed out or the domain doesn't exist."
850
  msgstr ""
851
 
852
+ #: includes/checkers/http.php:262
853
  msgid "Request timed out."
854
  msgstr ""
855
 
856
+ #: includes/checkers/http.php:280
857
  msgid "Using Snoopy"
858
  msgstr ""
859
 
873
  msgid "Edit this bookmark"
874
  msgstr ""
875
 
876
+ #: includes/containers/blogroll.php:38 includes/containers/comment.php:107
877
  #: includes/containers/custom_field.php:201 includes/containers/post.php:16
878
  msgid "Edit"
879
  msgstr ""
922
  msgid "Failed to delete comment %d"
923
  msgstr ""
924
 
925
+ #: includes/containers/comment.php:107 includes/containers/comment.php:149
926
  msgid "Edit comment"
927
  msgstr ""
928
 
929
+ #: includes/containers/comment.php:114
930
  msgid "Delete Permanently"
931
  msgstr ""
932
 
933
+ #: includes/containers/comment.php:116
934
  msgid "Move this comment to the trash"
935
  msgstr ""
936
 
937
+ #: includes/containers/comment.php:116
938
  msgctxt "verb"
939
  msgid "Trash"
940
  msgstr ""
941
 
942
+ #: includes/containers/comment.php:120
943
  msgid "View comment"
944
  msgstr ""
945
 
946
+ #: includes/containers/comment.php:120
947
  #: includes/containers/custom_field.php:209 includes/containers/post.php:24
948
  msgid "View"
949
  msgstr ""
950
 
951
+ #: includes/containers/comment.php:273
952
  #, php-format
953
  msgid "%d comment moved to the trash"
954
  msgid_plural "%d comments moved to the trash"
955
  msgstr[0] ""
956
  msgstr[1] ""
957
 
958
+ #: includes/containers/comment.php:283
959
  #, php-format
960
  msgid "%d comment has been deleted"
961
  msgid_plural "%d comments have been deleted"
1007
  msgid "Failed to delete post \"%s\" (%d)"
1008
  msgstr ""
1009
 
1010
+ #: includes/containers/custom_field.php:479 includes/containers/post.php:300
1011
  #, php-format
1012
  msgid "%d post moved to the trash"
1013
  msgid_plural "%d posts moved to the trash"
1014
  msgstr[0] ""
1015
  msgstr[1] ""
1016
 
1017
+ #: includes/containers/custom_field.php:481 includes/containers/post.php:302
1018
  #, php-format
1019
  msgid "%d post deleted"
1020
  msgid_plural "%d posts deleted"
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: whiteshadow
3
  Tags: links, broken, maintenance, blogroll, custom fields, admin, comments, posts
4
  Requires at least: 2.9.0
5
  Tested up to: 3.0-beta1
6
- Stable tag: 0.9.1
7
 
8
  This plugin will check your posts, comments and other places for broken links and missing images and notify you if any are found.
9
 
@@ -73,6 +73,18 @@ To upgrade your installation
73
 
74
  *This is an automatically generated changelog*
75
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  = 0.9 =
77
  * Masquerade as IE 7 when using the Snoopy library to check links. Should prevent some false positives.
78
  * Fixed relative URL handling (yet again). It'll work this time, honest ;)
@@ -239,7 +251,7 @@ To upgrade your installation
239
 
240
  = 0.5 =
241
  * This is a near-complete rewrite with a lot of new features.
242
- * See http://w-shadow.com/blog/2009/05/22/broken-link-checker-05/ for details.
243
 
244
  = 0.4.14 =
245
  * Fix false positives when the URL contains an #anchor
@@ -364,3 +376,4 @@ To upgrade your installation
364
 
365
  = 0.1 =
366
  * *There are no release notes for this version*
 
3
  Tags: links, broken, maintenance, blogroll, custom fields, admin, comments, posts
4
  Requires at least: 2.9.0
5
  Tested up to: 3.0-beta1
6
+ Stable tag: 0.9.2
7
 
8
  This plugin will check your posts, comments and other places for broken links and missing images and notify you if any are found.
9
 
73
 
74
  *This is an automatically generated changelog*
75
 
76
+ = 0.9.2 =
77
+ * In Tools -> Broken Links, highlight links that have been broken for a long time (off by default).
78
+ * Fixed an invalid parameter bug in the HTTP link checking routine.
79
+ * Added nofollow to broken links (optional, only works for links in posts).
80
+ * Fixed some PHP notices and a bunch of deprecated function calls.
81
+ * Fixed "Trash" links for comments.
82
+
83
+ = 0.9.1 =
84
+ * Fixed the "syntax error: unexpected $end" problem caused by a unintentional PHP shorttag.
85
+ * Eliminated a bunch of false positives by adding a workaround for buggy servers that incorrectly respond with 404 to HEAD requests.
86
+ * Increased the default server load limit to 4.0 to prevent the plugin from idling endlessly on weakling servers.
87
+
88
  = 0.9 =
89
  * Masquerade as IE 7 when using the Snoopy library to check links. Should prevent some false positives.
90
  * Fixed relative URL handling (yet again). It'll work this time, honest ;)
251
 
252
  = 0.5 =
253
  * This is a near-complete rewrite with a lot of new features.
254
+ * Seehttp://w-shadow.com/blog/2009/05/22/broken-link-checker-05/ for details.
255
 
256
  = 0.4.14 =
257
  * Fix false positives when the URL contains an #anchor
376
 
377
  = 0.1 =
378
  * *There are no release notes for this version*
379
+