You are here

public function DbQuerySniff::processFunctionCall in Coder 8.2

Same name and namespace in other branches
  1. 8.3 coder_sniffer/DrupalPractice/Sniffs/FunctionCalls/DbQuerySniff.php \DrupalPractice\Sniffs\FunctionCalls\DbQuerySniff::processFunctionCall()
  2. 8.3.x 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

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.x') {
    return;
  }
  $tokens = $phpcsFile
    ->getTokens();
  $argument = $this
    ->getArgument(1);
  $query_start = '';
  for ($start = $argument['start']; $tokens[$start]['code'] === T_CONSTANT_ENCAPSED_STRING && empty($query_start) === true; $start++) {

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

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