Server IP : 104.21.14.48 / Your IP : 3.12.148.187 [ Web Server : Apache System : Linux b70eb322-3aee-0c53-7c82-0db91281f2c6.secureserver.net 6.1.90-1.el9.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 2 12:09:22 EDT 2024 x86_64 User : root ( 0) PHP Version : 8.0.30.2 Disable Function : NONE Domains : 0 Domains MySQL : ON | cURL : ON | WGET : ON | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/wp-content/plugins/defender-security/vendor/gettext/gettext/src/Scanner/ |
Upload File : |
<?php declare(strict_types = 1); namespace Gettext\Scanner; use Exception; use Gettext\Translation; use Gettext\Translations; /** * Base class with common functions to scan files with code and get gettext translations. */ abstract class CodeScanner extends Scanner { protected $ignoreInvalidFunctions = false; protected $addReferences = true; protected $commentsPrefixes = []; protected $functions = []; /** * @param array $functions [fnName => handler] */ public function setFunctions(array $functions): self { $this->functions = $functions; return $this; } /** * @return array [fnName => handler] */ public function getFunctions(): array { return $this->functions; } public function ignoreInvalidFunctions($ignore = true): self { $this->ignoreInvalidFunctions = $ignore; return $this; } public function addReferences($enabled = true): self { $this->addReferences = $enabled; return $this; } public function extractCommentsStartingWith(string ...$prefixes): self { $this->commentsPrefixes = $prefixes; return $this; } public function scanString(string $string, string $filename): void { $functionsScanner = $this->getFunctionsScanner(); $functions = $functionsScanner->scan($string, $filename); foreach ($functions as $function) { $this->handleFunction($function); } } abstract public function getFunctionsScanner(): FunctionsScannerInterface; protected function handleFunction(ParsedFunction $function) { $handler = $this->getFunctionHandler($function); if (is_null($handler)) { return; } $translation = call_user_func($handler, $function); if ($translation && $this->addReferences) { $translation->getReferences()->add($function->getFilename(), $function->getLine()); } } protected function getFunctionHandler(ParsedFunction $function): ?callable { $name = $function->getName(); $handler = $this->functions[$name] ?? null; return is_null($handler) ? null : [$this, $handler]; } protected function addComments(ParsedFunction $function, ?Translation $translation): ?Translation { if (empty($this->commentsPrefixes) || empty($translation)) { return $translation; } foreach ($function->getComments() as $comment) { if ($this->checkComment($comment)) { $translation->getExtractedComments()->add($comment); } } return $translation; } protected function checkFunction(ParsedFunction $function, int $minLength): bool { if ($function->countArguments() < $minLength) { if ($this->ignoreInvalidFunctions) { return false; } throw new Exception( sprintf( 'Invalid gettext function in %s:%d. At least %d arguments are required', $function->getFilename(), $function->getLine(), $minLength ) ); } $arguments = array_slice($function->getArguments(), 0, $minLength); if (in_array(null, $arguments, true)) { if ($this->ignoreInvalidFunctions) { return false; } throw new Exception( sprintf( 'Invalid gettext function in %s:%d. Some required arguments are not valid', $function->getFilename(), $function->getLine() ) ); } return true; } protected function checkComment(string $comment): bool { foreach ($this->commentsPrefixes as $prefix) { if ($prefix === '' || strpos($comment, $prefix) === 0) { return true; } } return false; } }