* Change extension package to extension/pkg.
This commit is contained in:
@@ -360,8 +360,10 @@ class extension extends control
|
||||
|
||||
$this->extension->executeDB($extension, 'uninstall');
|
||||
$this->extension->updateExtension($extension, array('status' => 'available'));
|
||||
$this->extension->togglePackageDisable($extension, 'disabled');
|
||||
|
||||
$this->view->title = $this->lang->extension->uninstallFinished;
|
||||
$this->view->removeCommands = $this->extension->removePackage($extension);
|
||||
$this->view->title = $this->lang->extension->uninstallFinished;
|
||||
|
||||
if($postUninstallHook = $this->extension->getHookFile($extension, 'postuninstall')) include $postUninstallHook;
|
||||
$this->display();
|
||||
@@ -388,6 +390,7 @@ class extension extends control
|
||||
}
|
||||
}
|
||||
|
||||
$this->extension->togglePackageDisable($extension, 'active');
|
||||
$this->extension->copyPackageFiles($extension);
|
||||
$this->extension->updateExtension($extension, array('status' => 'installed'));
|
||||
$this->view->title = $this->lang->extension->activateFinished;
|
||||
@@ -405,6 +408,7 @@ class extension extends control
|
||||
public function deactivate($extension)
|
||||
{
|
||||
$this->extension->updateExtension($extension, array('status' => 'deactivated'));
|
||||
$this->extension->togglePackageDisable($extension, 'disabled');
|
||||
$this->view->removeCommands = $this->extension->removePackage($extension);
|
||||
$this->view->title = $this->lang->extension->deactivateFinished;
|
||||
$this->view->position[] = $this->lang->extension->deactivateFinished;
|
||||
@@ -435,6 +439,8 @@ class extension extends control
|
||||
$tmpName = $_FILES['file']['tmp_name'];
|
||||
$fileName = $_FILES['file']['name'];
|
||||
$dest = $this->app->getTmpRoot() . "extension/$fileName";
|
||||
|
||||
if(!is_dir(dirname($dest))) mkdir(dirname($dest));
|
||||
if(!move_uploaded_file($tmpName, $dest))
|
||||
{
|
||||
$downloadPath = $this->app->getTmpRoot() . 'extension/';
|
||||
|
||||
+50
-14
@@ -24,6 +24,14 @@ class extensionModel extends model
|
||||
*/
|
||||
public $apiRoot;
|
||||
|
||||
/**
|
||||
* The package root.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $pkgRoot;
|
||||
|
||||
/**
|
||||
* The construct function.
|
||||
*
|
||||
@@ -35,6 +43,7 @@ class extensionModel extends model
|
||||
parent::__construct();
|
||||
$this->setApiRoot();
|
||||
$this->classFile = $this->app->loadClass('zfile');
|
||||
$this->pkgRoot = $this->app->getExtensionRoot() . 'pkg' . DS;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -216,7 +225,7 @@ class extensionModel extends model
|
||||
$info = new stdclass();
|
||||
|
||||
/* First, try ini file. before 2.5 version. */
|
||||
$infoFile = "ext/$extension/doc/copyright.txt";
|
||||
$infoFile = $this->pkgRoot . "$extension/doc/copyright.txt";
|
||||
if(file_exists($infoFile)) return (object)parse_ini_file($infoFile);
|
||||
|
||||
/**
|
||||
@@ -225,8 +234,8 @@ class extensionModel extends model
|
||||
|
||||
/* Try the yaml of current lang, then try en. */
|
||||
$lang = $this->app->getClientLang();
|
||||
$infoFile = "ext/$extension/doc/$lang.yaml";
|
||||
if(!file_exists($infoFile)) $infoFile = "ext/$extension/doc/en.yaml";
|
||||
$infoFile = $this->pkgRoot . "$extension/doc/$lang.yaml";
|
||||
if(!file_exists($infoFile)) $infoFile = $this->pkgRoot . "$extension/doc/en.yaml";
|
||||
if(!file_exists($infoFile)) return $info;
|
||||
|
||||
/* Load the yaml file and parse it into object. */
|
||||
@@ -284,9 +293,6 @@ class extensionModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
/* Append the paths to stored the extracted files. */
|
||||
$paths[] = "module/extension/ext/";
|
||||
|
||||
return array_unique($paths);
|
||||
}
|
||||
|
||||
@@ -299,7 +305,7 @@ class extensionModel extends model
|
||||
*/
|
||||
public function getFilesFromPackage($extension)
|
||||
{
|
||||
$extensionDir = "ext/$extension/";
|
||||
$extensionDir = $this->pkgRoot . $extension;
|
||||
$files = $this->classFile->readDir($extensionDir, array('db', 'doc'));
|
||||
return $files;
|
||||
}
|
||||
@@ -357,7 +363,7 @@ class extensionModel extends model
|
||||
*/
|
||||
public function getHookFile($extension, $hook)
|
||||
{
|
||||
$hookFile = "ext/$extension/hook/$hook.php";
|
||||
$hookFile = $this->pkgRoot . "$extension/hook/$hook.php";
|
||||
if(file_exists($hookFile)) return $hookFile;
|
||||
return false;
|
||||
}
|
||||
@@ -372,7 +378,7 @@ class extensionModel extends model
|
||||
*/
|
||||
public function getDBFile($extension, $method = 'install')
|
||||
{
|
||||
return "ext/$extension/db/$method.sql";
|
||||
return $this->pkgRoot . "$extension/db/$method.sql";
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -427,6 +433,18 @@ class extensionModel extends model
|
||||
$checkResult->chmodCommands = '';
|
||||
$checkResult->dirs2Created = array();
|
||||
|
||||
if(!is_dir($this->pkgRoot) and !mkdir($this->pkgRoot))
|
||||
{
|
||||
$checkResult->errors .= sprintf($this->lang->extension->errorTargetPathNotExists, $this->pkgRoot) . '<br />';
|
||||
$checkResult->mkdirCommands .= "sudo mkdir -p {$this->pkgRoot}<br />";
|
||||
$checkResult->chmodCommands .= "sudo chmod -R 777 {$this->pkgRoot}<br />";
|
||||
}
|
||||
if(is_dir($this->pkgRoot) and !is_writable($this->pkgRoot))
|
||||
{
|
||||
$checkResult->errors .= sprintf($this->lang->extension->errorTargetPathNotWritable, $this->pkgRoot) . '<br />';
|
||||
$checkResult->chmodCommands .= "sudo chmod -R 777 {$this->pkgRoot}<br />";
|
||||
}
|
||||
|
||||
$appRoot = $this->app->getAppRoot();
|
||||
$paths = $this->getPathsFromPackage($extension);
|
||||
foreach($paths as $path)
|
||||
@@ -456,7 +474,7 @@ class extensionModel extends model
|
||||
$checkResult->errors .= sprintf($this->lang->extension->errorTargetPathNotExists, $path) . '<br />';
|
||||
$checkResult->mkdirCommands .= "sudo mkdir -p $path<br />";
|
||||
}
|
||||
if(file_exists($path) and realpath($path) != realpath($appRoot . 'module/extension') . 'ext') $checkResult->dirs2Created[] = $path;
|
||||
if(file_exists($path) and realpath($path) != $this->pkgRoot) $checkResult->dirs2Created[] = $path;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -501,7 +519,7 @@ class extensionModel extends model
|
||||
$appRoot = $this->app->getAppRoot();
|
||||
foreach($extensionFiles as $extensionFile)
|
||||
{
|
||||
$compareFile = $appRoot . str_replace(realpath("ext/$extension") . '/', '', $extensionFile);
|
||||
$compareFile = $appRoot . str_replace($this->pkgRoot . $extension . DS, '', $extensionFile);
|
||||
if(!file_exists($compareFile)) continue;
|
||||
if(md5_file($extensionFile) != md5_file($compareFile)) $return->error .= $compareFile . '<br />';
|
||||
}
|
||||
@@ -524,7 +542,7 @@ class extensionModel extends model
|
||||
$return->error = '';
|
||||
|
||||
/* try remove pre extracted files. */
|
||||
$extensionPath = "ext/$extension";
|
||||
$extensionPath = $this->pkgRoot . $extension;
|
||||
if(is_dir($extensionPath)) $this->classFile->removeDir($extensionPath);
|
||||
|
||||
/* Extract files. */
|
||||
@@ -554,7 +572,7 @@ class extensionModel extends model
|
||||
public function copyPackageFiles($extension)
|
||||
{
|
||||
$appRoot = $this->app->getAppRoot();
|
||||
$extensionDir = "ext/$extension/";
|
||||
$extensionDir = $this->pkgRoot . $extension . DS;
|
||||
$paths = scandir($extensionDir);
|
||||
$copiedFiles = array();
|
||||
|
||||
@@ -686,7 +704,7 @@ class extensionModel extends model
|
||||
}
|
||||
|
||||
/* Remove the extracted files. */
|
||||
$extractedDir = realpath("ext/$extension");
|
||||
$extractedDir = $this->pkgRoot . $extension;
|
||||
if($extractedDir and $extractedDir != '/' and !$this->classFile->removeDir($extractedDir))
|
||||
{
|
||||
$removeCommands[] = PHP_OS == 'Linux' ? "rm -fr $extractedDir" : "rmdir $extractedDir /s";
|
||||
@@ -967,4 +985,22 @@ class extensionModel extends model
|
||||
}
|
||||
return $plugins;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark package active or disabled
|
||||
*
|
||||
* @param string $extension
|
||||
* @param string $action disabled|active
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function togglePackageDisable($extension, $action = 'disabled')
|
||||
{
|
||||
if(!is_dir($this->pkgRoot . $extension)) return true;
|
||||
|
||||
$disabledFile = $this->pkgRoot . $extension . DS . 'disabled';
|
||||
if($action == 'disabled') touch($disabledFile);
|
||||
if($action == 'active' && file_exists($disabledFile)) unlink($disabledFile);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user