/** * 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; } }