annotate vendor/drupal/coder/coder_sniffer/DrupalPractice/Sniffs/Yaml/RoutingAccessSniff.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /**
Chris@17 4 * \DrupalPractice\Sniffs\Yaml\RoutingAccessSniff.
Chris@0 5 *
Chris@0 6 * @category PHP
Chris@0 7 * @package PHP_CodeSniffer
Chris@0 8 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 9 */
Chris@0 10
Chris@17 11 namespace DrupalPractice\Sniffs\Yaml;
Chris@17 12
Chris@17 13 use PHP_CodeSniffer\Files\File;
Chris@17 14 use PHP_CodeSniffer\Sniffs\Sniff;
Chris@17 15
Chris@0 16 /**
Chris@0 17 * Checks that there are no undocumented open access callbacks in *.routing.yml files.
Chris@0 18 *
Chris@0 19 * Also adds a warning if the permission "access administration pages" is used.
Chris@0 20 *
Chris@0 21 * @category PHP
Chris@0 22 * @package PHP_CodeSniffer
Chris@0 23 * @link http://pear.php.net/package/PHP_CodeSniffer
Chris@0 24 */
Chris@17 25 class RoutingAccessSniff implements Sniff
Chris@0 26 {
Chris@0 27
Chris@0 28
Chris@0 29 /**
Chris@0 30 * Returns an array of tokens this test wants to listen for.
Chris@0 31 *
Chris@0 32 * @return array
Chris@0 33 */
Chris@0 34 public function register()
Chris@0 35 {
Chris@0 36 return array(T_INLINE_HTML);
Chris@0 37
Chris@0 38 }//end register()
Chris@0 39
Chris@0 40
Chris@0 41 /**
Chris@0 42 * Processes this test, when one of its tokens is encountered.
Chris@0 43 *
Chris@17 44 * @param \PHP_CodeSniffer\Files\File $phpcsFile The current file being processed.
Chris@17 45 * @param int $stackPtr The position of the current token
Chris@17 46 * in the stack passed in $tokens.
Chris@0 47 *
Chris@0 48 * @return int
Chris@0 49 */
Chris@17 50 public function process(File $phpcsFile, $stackPtr)
Chris@0 51 {
Chris@0 52 $tokens = $phpcsFile->getTokens();
Chris@0 53
Chris@0 54 $fileExtension = strtolower(substr($phpcsFile->getFilename(), -12));
Chris@0 55 if ($fileExtension !== '.routing.yml') {
Chris@0 56 return ($phpcsFile->numTokens + 1);
Chris@0 57 }
Chris@0 58
Chris@0 59 if (preg_match('/^[\s]+_access: \'TRUE\'/', $tokens[$stackPtr]['content']) === 1
Chris@0 60 && isset($tokens[($stackPtr - 1)]) === true
Chris@0 61 && preg_match('/^[\s]*#/', $tokens[($stackPtr - 1)]['content']) === 0
Chris@0 62 ) {
Chris@0 63 $warning = 'Open page callback found, please add a comment before the line why there is no access restriction';
Chris@0 64 $phpcsFile->addWarning($warning, $stackPtr, 'OpenCallback');
Chris@0 65 }
Chris@0 66
Chris@0 67 if (preg_match('/^[\s]+_permission: \'access administration pages\'/', $tokens[$stackPtr]['content']) === 1) {
Chris@0 68 $warning = 'The administration page callback should probably use "administer site configuration" - which implies the user can change something - rather than "access administration pages" which is about viewing but not changing configurations.';
Chris@0 69 $phpcsFile->addWarning($warning, $stackPtr, 'PermissionFound');
Chris@0 70 }
Chris@0 71
Chris@0 72 }//end process()
Chris@0 73
Chris@0 74
Chris@0 75 }//end class