You are here

public function DbQuerySniff::processFunctionCall in Coder 8.3.x

Same name and namespace in other branches
  1. 8.3 coder_sniffer/DrupalPractice/Sniffs/FunctionCalls/DbQuerySniff.php \DrupalPractice\Sniffs\FunctionCalls\DbQuerySniff::processFunctionCall()
  2. 8.2 coder_sniffer/DrupalPractice/Sniffs/FunctionCalls/DbQuerySniff.php \DrupalPractice\Sniffs\FunctionCalls\DbQuerySniff::processFunctionCall()

Processes this function call.

Parameters

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

int $stackPtr The position of the function call in: the stack.

int $openBracket The position of the opening: parenthesis in the stack.

int $closeBracket The position of the closing: parenthesis in the stack.

Return value

void|int

File

coder_sniffer/DrupalPractice/Sniffs/FunctionCalls/DbQuerySniff.php, line 52

Class

DbQuerySniff
Check that UPDATE/DELETE queries are not used in db_query() in Drupal 7.

Namespace

DrupalPractice\Sniffs\FunctionCalls

Code

public function processFunctionCall(File $phpcsFile, $stackPtr, $openBracket, $closeBracket) {

  // This check only applies to Drupal 7, not Drupal 6.
  if (Project::getCoreVersion($phpcsFile) !== 7) {
    return $phpcsFile->numTokens + 1;
  }
  $tokens = $phpcsFile
    ->getTokens();
  $argument = $this
    ->getArgument(1);
  $queryStart = '';
  for ($start = $argument['start']; $tokens[$start]['code'] === T_CONSTANT_ENCAPSED_STRING && empty($queryStart) === true; $start++) {

    // Remove quote and white space from the beginning.
    $queryStart = trim(substr($tokens[$start]['content'], 1));

    // Just look at the first word.
    $parts = explode(' ', $queryStart);
    $queryStart = $parts[0];
    if (in_array(strtoupper($queryStart), [
      'INSERT',
      'UPDATE',
      'DELETE',
      'TRUNCATE',
    ]) === true) {
      $warning = 'Do not use %s queries with db_query(), use %s instead';
      $phpcsFile
        ->addWarning($warning, $start, 'DbQuery', [
        $queryStart,
        'db_' . strtolower($queryStart) . '()',
      ]);
    }
  }
}