class-wpml-absolute-links-blacklist.php
1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?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;
}
}