/wp-content/plugins/broken-link-checker/includes/checkers.php
PHP | 121 lines | 38 code | 14 blank | 69 comment | 4 complexity | 8c4ad442345ad1041d331768eb96e698 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, AGPL-1.0
- <?php
- /**
- * Base class for link checking algorithms.
- *
- * All link checkering algorithms should extend this class.
- *
- * @package Broken Link Checker
- * @access public
- */
- class blcChecker extends blcModule {
-
- /**
- * Priority determines the order in which the plugin will try all registered checkers
- * when looking for one that can check a particular URL. Registered checkers will be
- * tried in order, from highest to lowest priority, and the first one that returns
- * true when its can_check() method is called will be used.
- *
- * Checker implementations should set their priority depending on how specific they are
- * in choosing the URLs that they check.
- *
- * -10 .. 10 : checks all URLs that have a certain protocol, e.g. all HTTP URLs.
- * 11 .. 100 : checks only URLs from a restricted number of domains, e.g. video site URLs.
- * 100+ : checks only certain URLs from a certain domain, e.g. YouTube video links.
- *
- */
- var $priority = -100;
-
- /**
- * Check if this checker knows how to check a particular URL.
- *
- * @param string $url
- * @param array|false $parsed_url The result of parsing $url with parse_url(). See PHP docs for details.
- * @return bool
- */
- function can_check($url, $parsed_url){
- return false;
- }
-
- /**
- * Check an URL.
- *
- * This method returns an associative array containing results of
- * the check. The following array keys are recognized by the plugin and
- * their values will be stored in the link's DB record :
- * 'broken' (bool) - True if the URL points to a missing/broken page. Required.
- * 'http_code' (int) - HTTP code returned when requesting the URL. Defaults to 0.
- * 'redirect_count' (int) - The number of redirects. Defaults to 0.
- * 'final_url' (string) - The redirected-to URL. Assumed to be equal to the checked URL by default.
- * 'request_duration' (float) - How long it took for the server to respond. Defaults to 0 seconds.
- * 'timeout' (bool) - True if checking the URL resulted in a timeout. Defaults to false.
- * 'may_recheck' (bool) - Allow the plugin to re-check the URL after 'recheck_threshold' seconds (see broken-link-checker.php).
- * 'log' (string) - Free-form log of the performed check. It will be displayed in the "Details" section of the checked link.
- * 'result_hash' (string) - A free-form hash or code uniquely identifying the detected link status. See sub-classes for examples. Max 200 characters.
- *
- * @see blcLink:check()
- *
- * @param string $url
- * @return array
- */
- function check($url){
- trigger_error('Function blcChecker::check() must be over-ridden in a subclass', E_USER_ERROR);
- }
- }
- class blcCheckerHelper {
-
- /**
- * Get a reference to a specific checker.
- *
- * @uses blcModuleManager::get_module()
- *
- * @param string $checker_id
- * @return blcChecker
- */
- static function get_checker($checker_id){
- $manager = blcModuleManager::getInstance();
- return $manager->get_module($checker_id, true, 'checker');
- }
-
- /**
- * Get a checker object that can check the specified URL.
- *
- * @param string $url
- * @return blcChecker|null
- */
- static function get_checker_for($url){
- $parsed = @parse_url($url);
-
- $manager = blcModuleManager::getInstance();
- $active_checkers = $manager->get_active_by_category('checker');
-
- foreach($active_checkers as $module_id => $module_data){
- //Try the URL pattern in the header first. If it doesn't match,
- //we can avoid loading the module altogether.
- if ( !empty($module_data['ModuleCheckerUrlPattern']) ){
- if ( !preg_match($module_data['ModuleCheckerUrlPattern'], $url) ){
- continue;
- }
- }
-
- $checker = $manager->get_module($module_id);
-
- if ( !$checker ){
- continue;
- }
-
- //The can_check() method can perform more sophisticated filtering,
- //or just return true if the checker thinks matching the URL regex
- //is sufficient.
- if ( $checker->can_check($url, $parsed) ){
- return $checker;
- }
- }
- $checker = null;
- return $checker;
- }
- }
-
- ?>