Subversion Repositories oidplus

Rev

Rev 1367 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #!/usr/bin/env php
  2. <?php
  3.  
  4. /*
  5.  * OIDplus 2.0
  6.  * Copyright 2019 - 2023 Daniel Marschall, ViaThinkSoft
  7.  *
  8.  * Licensed under the Apache License, Version 2.0 (the "License");
  9.  * you may not use this file except in compliance with the License.
  10.  * You may obtain a copy of the License at
  11.  *
  12.  *     http://www.apache.org/licenses/LICENSE-2.0
  13.  *
  14.  * Unless required by applicable law or agreed to in writing, software
  15.  * distributed under the License is distributed on an "AS IS" BASIS,
  16.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17.  * See the License for the specific language governing permissions and
  18.  * limitations under the License.
  19.  */
  20.  
  21. $dir = __DIR__ . '/../../';
  22.  
  23. define('INSIDE_OIDPLUS',true);
  24. include_once $dir.'vendor/danielmarschall/php_utils/misc_functions.inc.php'; // PHP 7.x compat functions
  25. require_once $dir.'includes/classes/OIDplusBaseClass.class.php';
  26. require_once $dir.'includes/classes/OIDplusLogger.class.php';
  27.  
  28. const VERBOSE = false;
  29.  
  30. use ViaThinkSoft\OIDplus\OIDplusLogger;
  31.  
  32. // ---
  33.  
  34. $errors_found = false;
  35.  
  36. $cntfiles = 0;
  37. $cntcodes = 0;
  38. $it = new RecursiveDirectoryIterator($dir);
  39. $it->setFlags(FilesystemIterator::SKIP_DOTS); // DOES NOT WORK! Folders with . prefix still get evaluated!
  40. foreach(new RecursiveIteratorIterator($it) as $file) {
  41.         if ((strpos(str_replace('\\','/',realpath($file)),'/vendor/') !== false) && (strpos(str_replace('\\','/',realpath($file)),'/vendor/danielmarschall/') === false)) continue; // ignore third-party-code
  42.         if (strpos(str_replace('\\','/',realpath($file)),'/dev/') !== false) continue; // ignore development utilities
  43.  
  44.         if (preg_match('@[/\\\\]\\.[^\\.]@',$file,$m)) continue; // Alternative to SKIP_DOTS
  45.  
  46.         if ($file->getExtension() == 'php') {
  47.                 $cont = file_get_contents($file);
  48.                 $cont = phpRemoveComments($cont);
  49.  
  50.                 $cntfiles++;
  51.  
  52.                 preg_match_all('@OIDplus::logger\(\)\->log\(\s*(["\'])([^"\']+)(["\'])@', $cont, $m);
  53.                 foreach ($m[2] as $str) {
  54.                         $cntcodes++;
  55.                         if (OIDplusLogger::parse_maskcode($str) === false) {
  56.                                 $file = substr($file, strlen($dir));
  57.                                 echo "Invalid maskcode '$str' in file '$file'\n";
  58.                                 $errors_found = true;
  59.                         } else {
  60.                                 if (VERBOSE) echo 'Valid: '.$str."\n";
  61.                         }
  62.                 }
  63.         }
  64. }
  65. echo "Done. Checked $cntcodes mask codes in $cntfiles files.\n";
  66.  
  67. exit($errors_found ? 1 : 0);
  68.  
  69. # ---
  70.  
  71. /**
  72.  * @param string $fileStr
  73.  * @return string
  74.  */
  75. function phpRemoveComments(string $fileStr): string {
  76.  
  77.         // https://stackoverflow.com/questions/503871/best-way-to-automatically-remove-comments-from-php-code
  78.  
  79.         $newStr  = '';
  80.  
  81.         $commentTokens = array(T_COMMENT);
  82.  
  83.         if (defined('T_DOC_COMMENT')) $commentTokens[] = T_DOC_COMMENT; // PHP 5
  84.         if (defined('T_ML_COMMENT'))  $commentTokens[] = T_ML_COMMENT;  // PHP 4
  85.  
  86.         $tokens = token_get_all($fileStr);
  87.  
  88.         foreach ($tokens as $token) {
  89.                 if (is_array($token)) {
  90.                         if (in_array($token[0], $commentTokens)) continue;
  91.                         $token = $token[1];
  92.                 }
  93.                 $newStr .= $token;
  94.         }
  95.  
  96.         return $newStr;
  97.  
  98. }
  99.