diff --git a/module/extension/model.php b/module/extension/model.php index 4a19e3406c..810fcdc1bb 100644 --- a/module/extension/model.php +++ b/module/extension/model.php @@ -201,6 +201,86 @@ class extensionModel extends model return $this->app->getTmpRoot() . 'extension/' . $extension . '.zip'; } + /** + * Get pathes from an extension package. + * + * @param string $extension + * @access public + * @return array + */ + public function getPathesFromPackage($extension) + { + $pathes = array(); + $packageFile = $this->getPackageFile($extension); + + /* Get files from the package file. */ + $this->app->loadClass('pclzip', true); + $zip = new pclzip($packageFile); + $files = $zip->listContent(); + if($files) + { + foreach($files as $file) + { + $file = (object)$file; + if($file->folder) continue; + $file->filename = substr($file->filename, strpos($file->filename, '/') + 1); + $pathes[] = dirname($file->filename); + } + } + + /* Append the pathes to stored the extracted files. */ + $pathes[] = "module/extension/ext/"; + + return array_unique($pathes); + } + + /** + * Get all files from a package. + * + * @param string $extension + * @access public + * @return array + */ + public function getFilesFromPackage($extension) + { + $extensionDir = "ext/$extension/"; + $files = $this->readDir($extensionDir, array('db', 'doc')); + return $files; + } + + /** + * Get the extension's zentaoVersion + * + * @param string $extenstion + * @access public + * @return string + */ + public function getZentaoVersion($extension) + { + $zentaoVersion = ''; + $infoFile = "ext/$extension/doc/copyright.txt"; + if(!file_exists($infoFile)) return $zentaoVersion; + + $info = parse_ini_file($infoFile); + if(!isset($info['zentaoVersion'])) return $zentaoVersion; + $zentaoVersion = $info['zentaoVersion']; + + return $zentaoVersion; + } + + /** + * Get the install db file. + * + * @param string $extension + * @param string $method + * @access public + * @return string + */ + public function getDBFile($extension, $method = 'install') + { + return "ext/$extension/db/$method.sql"; + } + /** * Check the download path. * @@ -281,6 +361,48 @@ class extensionModel extends model return $return; } + /** + * Check the extension's version is compatibility for zentao version + * + * @param string $version + * @access public + * @return bool + */ + public function checkVersion($version) + { + if($version == 'all') return true; + $version = explode(',', $version); + if(in_array($this->config->version, $version)) return true; + return false; + } + + /** + * Check files in the package conflicts with exists files or not. + * + * @param string $extension + * @param string $type + * @param bool $isCheck + * @access public + * @return object + */ + public function checkFile($extension) + { + $return->result = 'ok'; + $return->error = ''; + + $extensionFiles = $this->getFilesFromPackage($extension); + $appRoot = $this->app->getAppRoot(); + foreach($extensionFiles as $extensionFile) + { + $compareFile = $appRoot . str_replace(realpath("ext/$extension") . '/', '', $extensionFile); + if(!file_exists($compareFile)) continue; + if(md5_file($extensionFile) != md5_file($compareFile)) $return->error .= $compareFile . '
'; + } + + if($return->error != '') $return->result = 'fail'; + return $return; + } + /** * Extract an extension. * @@ -307,39 +429,6 @@ class extensionModel extends model return $return; } - /** - * Get pathes from an extension package. - * - * @param string $extension - * @access public - * @return array - */ - public function getPathesFromPackage($extension) - { - $pathes = array(); - $packageFile = $this->getPackageFile($extension); - - /* Get files from the package file. */ - $this->app->loadClass('pclzip', true); - $zip = new pclzip($packageFile); - $files = $zip->listContent(); - if($files) - { - foreach($files as $file) - { - $file = (object)$file; - if($file->folder) continue; - $file->filename = substr($file->filename, strpos($file->filename, '/') + 1); - $pathes[] = dirname($file->filename); - } - } - - /* Append the pathes to stored the extracted files. */ - $pathes[] = "module/extension/ext/"; - - return array_unique($pathes); - } - /** * Copy package files. * @@ -431,19 +520,6 @@ class extensionModel extends model return $removeCommands; } - /** - * Get the install db file. - * - * @param string $extension - * @param string $method - * @access public - * @return string - */ - public function getDBFile($extension, $method = 'install') - { - return "ext/$extension/db/$method.sql"; - } - /** * Judge need execute db install or not. * @@ -524,7 +600,7 @@ class extensionModel extends model $data = (object)$data; $appRoot = $this->app->getAppRoot(); - if(isset($data->dirs)) + if(isset($data->dirs) and $data->dirs) { foreach($data->dirs as $key => $dir) { @@ -624,82 +700,6 @@ class extensionModel extends model return true; } - /** - * Check the extension's version is compatibility for zentao version - * - * @param string $version - * @access public - * @return bool - */ - public function checkVersion($version) - { - if($version == 'all') return true; - $version = explode(',', $version); - if(in_array($this->config->version, $version)) return true; - return false; - } - - /** - * Get the extension's zentaoVersion - * - * @param string $extenstion - * @access public - * @return string - */ - public function getZentaoVersion($extension) - { - $zentaoVersion = ''; - $infoFile = "ext/$extension/doc/copyright.txt"; - if(!file_exists($infoFile)) return $zentaoVersion; - - $info = parse_ini_file($infoFile); - if(!isset($info['zentaoVersion'])) return $zentaoVersion; - $zentaoVersion = $info['zentaoVersion']; - - return $zentaoVersion; - } - - /** - * Check files in the package conflicts with exists files or not. - * - * @param string $extension - * @param string $type - * @param bool $isCheck - * @access public - * @return object - */ - public function checkFile($extension) - { - $return->result = 'ok'; - $return->error = ''; - - $extensionFiles = $this->getAllExtensionFile($extension); - $appRoot = $this->app->getAppRoot(); - foreach($extensionFiles as $extensionFile) - { - $compareFile = $appRoot . str_replace(realpath("ext/$extension") . '/', '', $extensionFile); - if(!file_exists($compareFile)) continue; - if(md5_file($extensionFile) != md5_file($compareFile)) $return->error .= $compareFile . '
'; - } - - if($return->error != '') $return->result = 'fail'; - return $return; - } - - /** - * Get all extension files - * - * @param string $extension - * @access public - * @return array - */ - public function getAllExtensionFile($extension) - { - $extensionDir = "ext/$extension/"; - $files = $this->getFile($extensionDir, array('db', 'doc')); - return $files; - } - /** * Get files under a directory recursive. * @@ -708,7 +708,7 @@ class extensionModel extends model * @access private * @return array */ - private function getFile($dir, $exceptions = array()) + private function readDir($dir, $exceptions = array()) { static $files = array(); @@ -730,7 +730,7 @@ class extensionModel extends model else { $nextDir = $dir . $entry; - $this->getFile($nextDir); + $this->readDir($nextDir); } } return $files;