Exemplo n.º 1
0
 /**
  * determine if the extension is active
  *
  * @param \Doctrine\DBAL\Connection $conn
  * @param string $class
  * @param string $type
  *
  * @return bool
  */
 private function extensionIsActive(ZikulaKernel $kernel, $conn, $class, $type)
 {
     $extensionNameArray = explode('\\', $class);
     $extensionName = array_pop($extensionNameArray);
     if (isset($this->extensionStateMap[$extensionName])) {
         // used cached value
         $state = $this->extensionStateMap[$extensionName];
     } else {
         // load all values into class var for lookup
         $sql = "SELECT m.name, m.state, m.id FROM modules as m";
         $rows = $conn->executeQuery($sql);
         foreach ($rows as $row) {
             $this->extensionStateMap[$row['name']] = array('state' => (int) $row['state'], 'id' => (int) $row['id']);
         }
         $sql = "SELECT t.name, t.state, t.id FROM themes as t";
         $rows = $conn->executeQuery($sql);
         foreach ($rows as $row) {
             $this->extensionStateMap[$row['name']] = array('state' => (int) $row['state'], 'id' => (int) $row['id']);
         }
         if (isset($this->extensionStateMap[$extensionName])) {
             $state = $this->extensionStateMap[$extensionName];
         } else {
             $state = array('state' => $type == 'T' ? \ThemeUtil::STATE_INACTIVE : \ModUtil::STATE_UNINITIALISED);
         }
     }
     switch ($type) {
         case 'T':
             return $state['state'] == \ThemeUtil::STATE_ACTIVE;
             break;
         default:
             if ($state['state'] == \ModUtil::STATE_ACTIVE) {
                 return true;
             }
             if ($state['state'] == \ModUtil::STATE_UPGRADED && isset($_GET['id']) && $state['id'] == $_GET['id'] && isset($_GET['secret'])) {
                 $secret = $_GET['secret'];
                 $rootDir = $kernel->getRootDir() . "/config";
                 $path = $rootDir . "/custom_parameters.yml";
                 if (!is_readable($path)) {
                     $path = $rootDir . "/parameters.yml";
                 }
                 $parameters = Yaml::parse(file_get_contents($path));
                 $urlSecret = $parameters['parameters']['url_secret'];
                 // Only set module to active if the secret matches.
                 $turnActive = $secret === $urlSecret;
                 if ($turnActive) {
                     // Make sure to clear the cache here, as the module becomes active which it wasn't before.
                     $fs = new Filesystem();
                     $fs->remove($kernel->getCacheDir());
                 }
                 return $turnActive;
             }
             return false;
     }
 }