protected function getClassNameHash($dirs) { if (is_string($dirs)) { $dirs = (array) $dirs; } $data = array(); foreach ($dirs as $dir) { if (file_exists($dir)) { $fileList = $this->getFileManager()->getFileList($dir, false, '\\.php$', true); foreach ($fileList as $file) { $filePath = Util::concatPath($dir, $file); $className = Util::getClassName($filePath); $fileName = $this->getFileManager()->getFileName($filePath); $scopeName = ucfirst($fileName); $normalizedScopeName = Util::normilizeScopeName($scopeName); if (empty($this->allowedMethods)) { $data[$normalizedScopeName] = $className; continue; } foreach ($this->allowedMethods as $methodName) { if (method_exists($className, $methodName)) { $data[$normalizedScopeName] = $className; } } } } } return $data; }
protected function restoreFiles() { $GLOBALS['log']->info('Installer: Restore previous files.'); $backupPath = $this->getPath('backupPath'); $backupFilePath = Util::concatPath($backupPath, self::FILES); $backupFileList = $this->getRestoreFileList(); $copyFileList = $this->getCopyFileList(); $deleteFileList = array_diff($copyFileList, $backupFileList); $res = $this->copy($backupFilePath, '', true); $res &= $this->getFileManager()->remove($deleteFileList, null, true); if ($res) { $this->getFileManager()->removeInDir($backupPath, true); } return $res; }
public function getManifest() { if (!isset($this->data['manifest'])) { $packagePath = $this->getPackagePath(); $manifestPath = Util::concatPath($packagePath, $this->manifestName); if (!file_exists($manifestPath)) { $this->throwErrorAndRemovePackage('It\'s not an Installation package.'); } $manifestJson = $this->getFileManager()->getContents($manifestPath); $this->data['manifest'] = Json::decode($manifestJson, true); if (!$this->data['manifest']) { $this->throwErrorAndRemovePackage('Syntax error in manifest.json.'); } if (!$this->checkManifest($this->data['manifest'])) { $this->throwErrorAndRemovePackage('Unsupported package.'); } } return $this->data['manifest']; }
protected function initFieldTypes() { foreach ($this->fieldTypePaths as $path) { $typeList = $this->getFileManager()->getFileList($path, false, '\\.php$'); if ($typeList !== false) { foreach ($typeList as $name) { $typeName = preg_replace('/\\.php$/i', '', $name); $dbalTypeName = strtolower($typeName); $filePath = Util::concatPath($path, $typeName); $class = Util::getClassName($filePath); if (!Type::hasType($dbalTypeName)) { Type::addType($dbalTypeName, $class); } else { Type::overrideType($dbalTypeName, $class); } $dbTypeName = method_exists($class, 'getDbTypeName') ? $class::getDbTypeName() : $dbalTypeName; $this->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping($dbTypeName, $dbalTypeName); } } } }
/** * Get and merge hook data by checking the files exist in $hookDirs * * @param array $hookDirs - it can be an array('Fox/Hooks', 'Fox/Custom/Hooks', 'Fox/Modules/Crm/Hooks') * * @return array */ protected function getHookData($hookDirs) { if (is_string($hookDirs)) { $hookDirs = (array) $hookDirs; } $hooks = array(); foreach ($hookDirs as $hookDir) { if (file_exists($hookDir)) { $fileList = $this->getFileManager()->getFileList($hookDir, 1, '\\.php$', true); foreach ($fileList as $scopeName => $hookFiles) { $hookScopeDirPath = Util::concatPath($hookDir, $scopeName); $scopeHooks = array(); foreach ($hookFiles as $hookFile) { $hookFilePath = Util::concatPath($hookScopeDirPath, $hookFile); $className = Util::getClassName($hookFilePath); foreach ($this->hookList as $hookName) { if (method_exists($className, $hookName)) { $scopeHooks[$hookName][$className::$order][] = $className; } } } //sort hooks by order foreach ($scopeHooks as $hookName => $hookList) { ksort($hookList); $sortedHookList = array(); foreach ($hookList as $hookDetails) { $sortedHookList = array_merge($sortedHookList, $hookDetails); } $normalizedScopeName = Util::normilizeScopeName($scopeName); $hooks[$normalizedScopeName][$hookName] = isset($hooks[$normalizedScopeName][$hookName]) ? array_merge($hooks[$normalizedScopeName][$hookName], $sortedHookList) : $sortedHookList; } } } } return $hooks; }
public function getSetupMessage() { $language = $this->getContainer()->get('language'); $OS = $this->getSystemUtil()->getOS(); $phpBin = $this->getSystemUtil()->getPhpBin(); $cronFile = Util::concatPath($this->getSystemUtil()->getRootDir(), $this->cronFile); $desc = $language->translate('cronSetup', 'options', 'ScheduledJob'); $message = isset($desc[$OS]) ? $desc[$OS] : $desc['default']; $command = isset($this->cronSetup[$OS]) ? $this->cronSetup[$OS] : $this->cronSetup['default']; $command = str_replace(array('{PHP-BIN-DIR}', '{CRON-FILE}'), array($phpBin, $cronFile), $command); return array('message' => $message, 'command' => $command); }
protected function getRestoreFileList() { if (!isset($this->data['restoreFileList'])) { $packagePath = $this->getPackagePath(); $filesPath = Util::concatPath($packagePath, self::FILES); if (!file_exists($filesPath)) { $this->unzipArchive($packagePath); } $this->data['restoreFileList'] = $this->getFileManager()->getFileList($filesPath, true, '', true, true); } return $this->data['restoreFileList']; }
/** * Remove items (files or directories) * * @param string | array $items * @param string $dirPath * @return boolean */ public function remove($items, $dirPath = null, $removeEmptyDirs = false) { if (!is_array($items)) { $items = (array) $items; } $permissionDeniedList = array(); foreach ($items as $item) { if (isset($dirPath)) { $item = Utils\Util::concatPath($dirPath, $item); } if (!is_writable($item)) { $permissionDeniedList[] = $item; } else { if (!is_writable(dirname($item))) { $permissionDeniedList[] = dirname($item); } } } if (!empty($permissionDeniedList)) { $betterPermissionList = $this->getPermissionUtils()->arrangePermissionList($permissionDeniedList); throw new Error("Permission denied for <br>" . implode(", <br>", $betterPermissionList)); } $result = true; foreach ($items as $item) { if (isset($dirPath)) { $item = Utils\Util::concatPath($dirPath, $item); } if (is_dir($item)) { $result &= $this->removeInDir($item, true); } else { $result &= $this->removeFile($item); } if ($removeEmptyDirs) { $result &= $this->removeEmptyDirs($item); } } return (bool) $result; }
/** * Helpful method for get content from files for unite Files * * @param string | array $paths * @param string | array() $defaults - It can be a string like ["metadata","layouts"] OR an array with default values * * @return array */ protected function unifyGetContents($paths, $defaults) { $fileContent = $this->getFileManager()->getContents($paths); $decoded = Utils\Json::getArrayData($fileContent, null); if (!isset($decoded)) { $GLOBALS['log']->emergency('Syntax error in ' . Utils\Util::concatPath($paths)); return array(); } return $decoded; }