/** * Upgrade a plugin to a newer version from the user's filesystem * @param $path string path to plugin Directory * @param $templateMgr reference to template manager * @return boolean */ function upgradePlugin($path, &$templateMgr) { $versionFile = $path . VERSION_FILE; $templateMgr->assign('error', true); $templateMgr->assign('path', 'upgrade'); if (FileManager::fileExists($versionFile)) { $versionInfo =& VersionCheck::parseVersionXML($versionFile); } else { $templateMgr->assign('message', 'manager.plugins.versionFileNotFound'); return false; } $pluginVersion = $versionInfo['version']; $pluginName = $versionInfo['application']; $category = explode(".", $pluginVersion->getProductType()); $versionDao =& DAORegistry::getDAO('VersionDAO'); $installedPlugin = $versionDao->getCurrentVersion($pluginName); if (!$installedPlugin) { $templateMgr->assign('message', 'manager.plugins.pleaseInstall'); return false; } if (PluginManagementHandler::checkIfNewer($pluginName, $pluginVersion)) { $templateMgr->assign('message', 'manager.plugins.installedVersionNewer'); return false; } else { $pluginDest = Core::getBaseDir() . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . $category . DIRECTORY_SEPARATOR . $pluginName; FileManager::rmtree($pluginDest); if (FileManager::fileExists($pluginDest, 'dir')) { $templateMgr->assign('message', 'manager.plugins.deleteError'); return false; } if (!FileManager::copyDir($path, $pluginDest)) { $templateMgr->assign('message', 'manager.plugins.copyError'); return false; } $upgradeFile = $pluginDest . DIRECTORY_SEPARATOR . UPGRADE_FILE; if (FileManager::fileExists($upgradeFile)) { $params = PluginManagementHandler::setConnectionParams(); $installer = new Upgrade($params, $upgradeFile, true); if (!$installer->execute()) { $templateMgr->assign('message', array('manager.plugins.upgradeFailed', $installer->getErrorString())); return false; } } $installedPlugin->setCurrent(0); $pluginVersion->setCurrent(1); $versionDao->insertVersion($pluginVersion); $templateMgr->assign('message', array('manager.plugins.upgradeSuccessful', $pluginVersion->getVersionString())); $templateMgr->assign('uploaded', true); $templateMgr->assign('error', false); return true; } }