= 0 && strpos($haystack, $needle, $temp) !== false); } protected function preparePattern($pattern) { $pattern = str_replace('*', '', $pattern); $pattern = str_replace('.', '\.', $pattern); return $pattern; } public function isLoggedUserExcluded() { $excludedClients = globalsetting\GlobalSetting::byKey('blocked_strings_excluded_clients'); if(empty($excludedClients)) { return false; } $excludedClients = explode(',', $excludedClients); return in_array($_SESSION['uid'], $excludedClients); } public function isRecordBlocked($pattern, $subject) { if($pattern === "") { return; } $isBlocked = false; if(strpos($pattern, '*') !== false) { if($this->endsWith($pattern, '*')) { $isBlocked = preg_match(sprintf('/^%s/', $this->preparePattern($pattern)), $subject); } else if($this->startsWith($pattern, '*')) { $isBlocked = preg_match(sprintf('/%s$/', $this->preparePattern($pattern)), $subject); } else { list($exp1, $exp2) = explode('*', $pattern); $isBlocked = preg_match(sprintf('/\b%s(.*)%s\b/', $exp1, $exp2), $subject); } } else if(strpos($pattern, '.') !== false) { if($this->endsWith($pattern, '.') || $this->startsWith($pattern, '.')) { if(strpos($subject, $pattern) !== false) { $isBlocked = true; } } else { $isBlocked = preg_match(sprintf('/\b%s\b/', $pattern), $subject); } } else { $isBlocked = preg_match(sprintf('/\b%s\b/', $pattern), $subject); } return $isBlocked; } public function getRules($rDNS = false){ $useRdnsSameAsDns = globalsetting\GlobalSetting::byKey('use_rdns_blocked_same_as_for_dns'); if($useRdnsSameAsDns != 'on' && $rDNS === true) { $settings = globalsetting\GlobalSetting::byKey('rdns_blocked_strings'); } else { $settings = globalsetting\GlobalSetting::byKey('dns_blocked_strings'); } return $this->multipleExplode([PHP_EOL, ', ', ',', ' '], $settings->value); } protected function multipleExplode($delimiters = [], $strings){ if(in_array(PHP_EOL, $delimiters)){ unset($delimiters[array_search(PHP_EOL, $delimiters)]); } $readyString = str_replace($delimiters, PHP_EOL, $strings); if($readyString == ''){ return; } return explode(PHP_EOL, $readyString); } }