You are here

public function GetRequestDataSniff::process in Coder 8.3

Same name and namespace in other branches
  1. 8.3.x coder_sniffer/DrupalPractice/Sniffs/Variables/GetRequestDataSniff.php \DrupalPractice\Sniffs\Variables\GetRequestDataSniff::process()

Processes this test, when one of its tokens is encountered.

Parameters

\PHP_CodeSniffer\Files\File $phpcsFile The file being scanned.:

int $stackPtr The position of the current token: in the stack passed in $tokens.

Return value

void|int

File

coder_sniffer/DrupalPractice/Sniffs/Variables/GetRequestDataSniff.php, line 52

Class

GetRequestDataSniff
Ensures that Symfony request object is used to access super globals.

Namespace

DrupalPractice\Sniffs\Variables

Code

public function process(File $phpcsFile, $stackPtr) {
  if (Project::getCoreVersion($phpcsFile) < 8) {

    // No need to check this file again, mark it as done.
    return $phpcsFile->numTokens + 1;
  }
  $tokens = $phpcsFile
    ->getTokens();
  $varName = $tokens[$stackPtr]['content'];
  if ($varName !== '$_REQUEST' && $varName !== '$_GET' && $varName !== '$_POST' && $varName !== '$_FILES' && $varName !== '$_COOKIE') {
    return;
  }

  // If we get to here, the super global was used incorrectly.
  // First find out how it is being used.
  $usedVar = '';
  $openBracket = $phpcsFile
    ->findNext(T_WHITESPACE, $stackPtr + 1, null, true);
  if ($tokens[$openBracket]['code'] === T_OPEN_SQUARE_BRACKET) {
    $closeBracket = $tokens[$openBracket]['bracket_closer'];
    $usedVar = $phpcsFile
      ->getTokensAsString($openBracket + 1, $closeBracket - $openBracket - 1);
  }
  $requestPropertyMap = [
    '$_REQUEST' => 'request',
    '$_GET' => 'query',
    '$_POST' => 'request',
    '$_FILES' => 'files',
    '$_COOKIE' => 'cookies',
  ];
  $type = 'SuperglobalAccessed';
  $error = 'The %s super global must not be accessed directly; inject the request.stack service and use $stack->getCurrentRequest()->%s';
  $data = [
    $varName,
    $requestPropertyMap[$varName],
  ];
  if ($usedVar !== '') {
    $type .= 'WithVar';
    $error .= '->get(%s)';
    $data[] = $usedVar;
  }
  $error .= ' instead';
  $phpcsFile
    ->addError($error, $stackPtr, $type, $data);
}