From 28957fca2fc90858c22b72205dbd34521ee28d0d Mon Sep 17 00:00:00 2001 From: wangchunsheng Date: Tue, 25 Oct 2011 01:54:20 +0000 Subject: [PATCH] * finish task#481. --- module/extension/control.php | 15 +++++++++------ module/extension/model.php | 19 +++++++++++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/module/extension/control.php b/module/extension/control.php index 5f7d65e783..89350f3c9d 100644 --- a/module/extension/control.php +++ b/module/extension/control.php @@ -204,6 +204,8 @@ class extension extends control die($this->display()); } + if($preInstallHook = $this->extension->getHookFile($extension, 'preinstall')) include $preInstallHook; + /* Save to database. */ $this->extension->saveExtension($extension, $type); @@ -224,15 +226,12 @@ class extension extends control $this->view->error = sprintf($this->lang->extension->errorInstallDB, $return->error); die($this->display()); } - $this->extension->updateExtension($extension, $data); } - else - { - $this->extension->updateExtension($extension, $data); - } - + $this->extension->updateExtension($extension, $data); $this->view->downloadedPackage = !empty($downLink); + if($postInstallHook = $this->extension->getHookFile($extension, 'postinstall')) include $postInstallHook; + $this->display(); } @@ -245,10 +244,14 @@ class extension extends control */ public function uninstall($extension) { + if($preUninstallHook = $this->extension->getHookFile($extension, 'preuninstall')) include $preUninstallHook; + $this->extension->executeDB($extension, 'uninstall'); $this->extension->updateExtension($extension, array('status' => 'available')); $this->view->removeCommands = $this->extension->removePackage($extension); $this->view->header->title = $this->lang->extension->uninstallFinished; + + if($postUninstallHook = $this->extension->getHookFile($extension, 'postuninstall')) include $postUninstallHook; $this->display(); } diff --git a/module/extension/model.php b/module/extension/model.php index ce0f7ed223..2df8a27627 100644 --- a/module/extension/model.php +++ b/module/extension/model.php @@ -315,6 +315,21 @@ class extensionModel extends model return $license; } + /** + * Get hook file for install or uninstall. + * + * @param string $extension + * @param string $hook preinstall|postinstall|preuninstall|postuninstall + * @access public + * @return string|bool + */ + public function getHookFile($extension, $hook) + { + $hookFile = "ext/$extension/hook/$hook.php"; + if(file_exists($hookFile)) return $hookFile; + return false; + } + /** * Get the install db file. * @@ -382,7 +397,7 @@ class extensionModel extends model $pathes = $this->getPathesFromPackage($extension); foreach($pathes as $path) { - if($path == 'db' or $path == 'doc') continue; + if($path == 'db' or $path == 'doc' or $path == 'hook') continue; $path = $appRoot . $path; if(is_dir($path)) { @@ -492,7 +507,7 @@ class extensionModel extends model foreach($pathes as $path) { - if($path == 'db' or $path == 'doc' or $path == '..' or $path == '.') continue; + if($path == 'db' or $path == 'doc' or $path == 'hook' or $path == '..' or $path == '.') continue; $copiedFiles = $this->classFile->copyDir($extensionDir . $path, $appRoot . $path); } foreach($copiedFiles as $key => $copiedFile)