gluon-web-remote

Web remote Administration for big size of gluon routers
git clone git://archive.git.mtrnord.blog/MTRNord/gluon-web-remote.git
Log | Files | Refs | README

Blacklist.php (3163B)


      1 <?php
      2 /*
      3  * This file is part of the GlobalState package.
      4  *
      5  * (c) Sebastian Bergmann <sebastian@phpunit.de>
      6  *
      7  * For the full copyright and license information, please view the LICENSE
      8  * file that was distributed with this source code.
      9  */
     10 
     11 namespace SebastianBergmann\GlobalState;
     12 
     13 use ReflectionClass;
     14 
     15 /**
     16  * A blacklist for global state elements that should not be snapshotted.
     17  */
     18 class Blacklist
     19 {
     20     /**
     21      * @var array
     22      */
     23     private $globalVariables = array();
     24 
     25     /**
     26      * @var array
     27      */
     28     private $classes = array();
     29 
     30     /**
     31      * @var array
     32      */
     33     private $classNamePrefixes = array();
     34 
     35     /**
     36      * @var array
     37      */
     38     private $parentClasses = array();
     39 
     40     /**
     41      * @var array
     42      */
     43     private $interfaces = array();
     44 
     45     /**
     46      * @var array
     47      */
     48     private $staticAttributes = array();
     49 
     50     /**
     51      * @param string $variableName
     52      */
     53     public function addGlobalVariable($variableName)
     54     {
     55         $this->globalVariables[$variableName] = true;
     56     }
     57 
     58     /**
     59      * @param string $className
     60      */
     61     public function addClass($className)
     62     {
     63         $this->classes[] = $className;
     64     }
     65 
     66     /**
     67      * @param string $className
     68      */
     69     public function addSubclassesOf($className)
     70     {
     71         $this->parentClasses[] = $className;
     72     }
     73 
     74     /**
     75      * @param string $interfaceName
     76      */
     77     public function addImplementorsOf($interfaceName)
     78     {
     79         $this->interfaces[] = $interfaceName;
     80     }
     81 
     82     /**
     83      * @param string $classNamePrefix
     84      */
     85     public function addClassNamePrefix($classNamePrefix)
     86     {
     87         $this->classNamePrefixes[] = $classNamePrefix;
     88     }
     89 
     90     /**
     91      * @param string $className
     92      * @param string $attributeName
     93      */
     94     public function addStaticAttribute($className, $attributeName)
     95     {
     96         if (!isset($this->staticAttributes[$className])) {
     97             $this->staticAttributes[$className] = array();
     98         }
     99 
    100         $this->staticAttributes[$className][$attributeName] = true;
    101     }
    102 
    103     /**
    104      * @param  string $variableName
    105      * @return bool
    106      */
    107     public function isGlobalVariableBlacklisted($variableName)
    108     {
    109         return isset($this->globalVariables[$variableName]);
    110     }
    111 
    112     /**
    113      * @param  string $className
    114      * @param  string $attributeName
    115      * @return bool
    116      */
    117     public function isStaticAttributeBlacklisted($className, $attributeName)
    118     {
    119         if (in_array($className, $this->classes)) {
    120             return true;
    121         }
    122 
    123         foreach ($this->classNamePrefixes as $prefix) {
    124             if (strpos($className, $prefix) === 0) {
    125                 return true;
    126             }
    127         }
    128 
    129         $class = new ReflectionClass($className);
    130 
    131         foreach ($this->parentClasses as $type) {
    132             if ($class->isSubclassOf($type)) {
    133                 return true;
    134             }
    135         }
    136 
    137         foreach ($this->interfaces as $type) {
    138             if ($class->implementsInterface($type)) {
    139                 return true;
    140             }
    141         }
    142 
    143         if (isset($this->staticAttributes[$className][$attributeName])) {
    144             return true;
    145         }
    146 
    147         return false;
    148     }
    149 }