Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/classes/url-handling/class-wpml-absolute-links-blacklist.php
2023-09-12 21:41:04 +02:00

47 lines
1.2 KiB
PHP

<?php
use WPML\FP\Str;
use WPML\FP\Lst;
use WPML\FP\Fns;
use WPML\FP\Wrapper;
use function WPML\FP\pipe;
class WPML_Absolute_Links_Blacklist {
private $blacklist_requests;
public function __construct( $blacklist_requests ) {
$this->blacklist_requests = $blacklist_requests;
if ( ! is_array( $this->blacklist_requests ) ) {
$this->blacklist_requests = array();
}
}
public function is_blacklisted( $request ) {
$isBlacklisted = function ( $request ) {
return Lst::includes( $request, $this->blacklist_requests )
|| $this->is_blacklisted_with_regex( $request );
};
return Wrapper::of( $request )
->map( Str::split( '/' ) )
->map( Fns::map( Fns::unary( pipe( 'urlencode', 'strtolower' ) ) ) )
->map( Lst::join( '/' ) )
->map( $isBlacklisted )
->get();
}
private function is_blacklisted_with_regex( $request ) {
foreach ( $this->blacklist_requests as $blacklist_request ) {
if ( $this->is_regex( $blacklist_request ) && preg_match( $blacklist_request, $request ) ) {
return true;
}
}
return false;
}
private function is_regex( $blacklist_request ) {
return strpos( $blacklist_request, '/' ) === 0 && strrpos( $blacklist_request, '/' ) === strlen( $blacklist_request ) - 1;
}
}