From: <jhe...@us...> - 2002-12-04 09:03:20
|
Update of /cvsroot/upcase-project/UpCase/lib In directory sc8-pr-cvs1:/tmp/cvs-serv28745 Modified Files: uc_installer.php Log Message: restructuration to better split the different steps of installation : pre-configuration, configuration, installation Index: uc_installer.php =================================================================== RCS file: /cvsroot/upcase-project/UpCase/lib/uc_installer.php,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** uc_installer.php 28 Nov 2002 14:27:22 -0000 1.8 --- uc_installer.php 4 Dec 2002 09:03:17 -0000 1.9 *************** *** 12,15 **** --- 12,16 ---- define("LOCAL_METADATA_DIR", "/packages/db"); + define("LOCAL_DL_DIR", "/packages/dl"); class UcPackageDBInfo *************** *** 26,44 **** var $metaDataFile; ! function UcPackageInstance($name, $version, $configData) { - $cfg = $GLOBALS["ucConfig"]; $this->name = $name; ! $this->metaDataFile = $cfg->upcaseRoot . LOCAL_METADATA_DIR ! . "/" . $name . "-" . $version . ".inc"; include($this->metaDataFile); $this->description = $description; $this->homePage = $home_page; - $this->version = $version; $this->source = $source; $this->supported = $supported; - $this->path = $configData["PACKAGE_PATH"]; $this->tables = $tables; ! $this->prefix = $configData["TABLES_PREFIX"]; $this->configData = $configData; } --- 27,58 ---- var $metaDataFile; ! function UcPackageInstance($name, $version, $destPath, $tblPrefix, ! $appid = -1) { $this->name = $name; ! $this->version = $version; ! $this->path = $destPath; ! $this->prefix = $tblPrefix; ! $this->fullName = $this->name . "-" . $this->version . "-uc"; ! $this->appid = $appid; ! } ! ! function setMetaData() ! { ! $cfg = $GLOBALS["ucConfig"]; ! $this->metaDataFile = $cfg->upcaseRoot . LOCAL_METADATA_DIR ! . "/" . $this->fullName . "/meta.inc"; include($this->metaDataFile); $this->description = $description; $this->homePage = $home_page; $this->source = $source; $this->supported = $supported; $this->tables = $tables; ! $this->setupScript = $setup_script; ! return true; ! } ! ! function setConfigData($configData) ! { $this->configData = $configData; } *************** *** 52,64 **** class UcInstaller { ! var $metaBackup; var $db; function UcInstaller() { ! $cfg = $GLOBALS["ucConfig"]; ! $this->metaBackup = $cfg->upcaseRoot . LOCAL_METADATA_DIR; $this->db = new UcSql(); - $this->tmpDir = $cfg->upcaseRoot . "/packages/dl"; } --- 66,80 ---- class UcInstaller { ! var $metaDir; ! var $dlDir; ! var $cfg; var $db; function UcInstaller() { ! $this->cfg = $GLOBALS["ucConfig"]; ! $this->metaDir = $this->cfg->upcaseRoot . LOCAL_METADATA_DIR; ! $this->dlDir = $this->cfg->upcaseRoot . LOCAL_DL_DIR; $this->db = new UcSql(); } *************** *** 77,82 **** { $pkg = new UcPackageInstance($o->PKGNAME, $o->PKGVERSION, ! array("PACKAGE_PATH" => $o->PKGPATH, ! "TABLES_PREFIX" => $o->TBLPREFIX)); $pkg->setStatus($o->INSTALLED); $ret[] = $pkg; --- 93,98 ---- { $pkg = new UcPackageInstance($o->PKGNAME, $o->PKGVERSION, ! $o->PKGPATH, $o->TBLPREFIX, ! $o->APPID); $pkg->setStatus($o->INSTALLED); $ret[] = $pkg; *************** *** 85,95 **** return $ret; } ! function saveMetaData($package) { $srcFile = $package->metaDataFile; ! $dstFile = $this->metaBackup . "/" . $package->name ! . "-" . $package->version . ".inc"; ! copy($srcFile, $dstFile); } --- 101,129 ---- return $ret; } ! ! function getPackageById($appid) ! { ! $query = sprintf($GLOBALS["ucsql_getpackagebyid"], $appid); ! $res = $this->db->Execute($query) ! or die("Unable to get package $appid: " . $this->db->ErrorMsg()); ! if ($res->RowCount() == 0) ! return false; ! if ($res->RowCount() != 1) ! die("Problem with your db, more than one application with same appid"); ! $o = $res->FetchNextObject(true); ! $pkgInst = new UcPackageInstance($o->PKGNAME, $o->PKGVERSION, ! $o->PKGPATH, $o->TBLPREFIX, ! $o->APPID); ! $pkgInst->setStatus($o->INSTALLED); ! $pkgInst->setMetaData(); ! return $pkgInst; ! } ! function saveMetaData($package) { $srcFile = $package->metaDataFile; ! $pkgFullName = $package->name . "-" . $package->version . "-uc"; ! $dstFile = $this->metaDir . "/" . $pkgFullName . "/" . "meta.inc"; ! return copy($srcFile, $dstFile); } *************** *** 97,101 **** { $res = download($package->sourceDir . "/" . $package->source, ! $this->tmpDir . "/" . $package->source); if ($res < 0) return false; --- 131,135 ---- { $res = download($package->sourceDir . "/" . $package->source, ! $this->dlDir . "/" . $package->source); if ($res < 0) return false; *************** *** 103,106 **** --- 137,162 ---- } + function extractScripts($package) + { + $pkgFullName = $package->name . "-" . $package->version . "-uc"; + $destDir = $this->metaDir . "/" . $pkgFullName; + if (!createDirectory($destDir)) + return false; + $archive = new Archive_Tar($this->dlDir . "/" + . $package->source, true); + return $archive->extractList($pkgFullName . "/upcase/", + $destDir, $pkgFullName); + } + + function getConfigInputs($package) + { + $pkgFullName = $package->name . "-" . $package->version . "-uc"; + include_once($this->metaDir . "/" . $pkgFullName . PACKAGE_SETUP); + if (!empty($config_input) || count($config_input) > 0) + return $config_input; + else + return false; + } + // Check if a path does not contains '..' and symlinks // Used to check the validity of the module URL given *************** *** 133,151 **** } ! function unpack($package, $toPath) { ! $archive = new Archive_Tar($this->tmpDir ! . "/" . $package->source, true); ! return $archive->extractModify($toPath, $package->name . "-" ! . $package->version ! . "-uc"); } ! function setupMySQL($packageInstance) { ! $cfg = $GLOBALS["ucConfig"]; ! $sqlPath = $cfg->siteRoot . "/" . $packageInstance->path . "/" ! . MYSQL_QUERIES; if (!file_exists($sqlPath)) return false; --- 189,267 ---- } ! function unpack($packageInstance, $toPath) { ! $archive = new Archive_Tar($this->dlDir . "/" ! . $packageInstance->source, true); ! return $archive->extractModify($toPath, $packageInstance->fullName); } ! function createManifest($packageInstance) { ! $archive = new Archive_Tar($this->dlDir ! . "/" . $packageInstance->source, true); ! $manifest = $archive->listContent(); ! $ar = array(); ! $skip = strlen($packageInstance->fullName) + 1; ! foreach ($manifest as $file) ! { ! $fileName = substr($file["filename"], $skip); ! $fileType = "R"; ! if ($file["typeflag"] == 5) ! $fileType = "D"; ! $ar[] = "('" . $packageInstance->appid . ! "', '" . $fileType . ! "', '" . $packageInstance->path . "/" . $fileName . ! "', '" . $file["checksum"] . ! "', '" . $file["mtime"] . ! "', '" . $file["mode"] . "')"; ! } ! $queryParams = join(',', $ar); ! $query = $GLOBALS["ucsql_packagemanifest"] . $queryParams; ! $this->db->Execute($query) ! or die("Unable to create manifest for package: " ! . $this->db->ErrorMsg()); ! return true; ! } + function removeFiles($packageId) + { + $query = sprintf($GLOBALS["ucsql_getfiles"], $packageId); + $res = $this->db->Execute($query) + or die("Unable to retrieve file list for package: " + . $this->db->ErrorMsg()); + $notRemovedFiles = array(); + while (($o = $res->FetchNextObject(true))) + { + $file = $this->cfg->siteRoot . "/" . $o->FILENAME; + if ($o->TYPE == "D") + { + if (!@rmdir($file)) + { + $notRemovedFiles[] = $file; + } + } + else + { + if (!@unlink($file)) + { + $notRemovedFiles[] = $file; + } + } + } + return $notRemovedFiles; + } + + function removeManifest($packageId) + { + $query = sprintf($GLOBALS["ucsql_rmmanifest"], $packageId); + $this->db->Execute($query) + or die("Unable to delete manifest: " . $this->db->ErrorMsg()); + return true; + } + + function setupMySQL(&$packageInstance) + { + $sqlPath = $this->metaDir . "/" . $packageInstance->fullName . "/" + . MYSQL_QUERIES; if (!file_exists($sqlPath)) return false; *************** *** 162,213 **** } - function getConfigInputs($package, $pkgPath) - { - $cfg = $GLOBALS["ucConfig"]; - - include_once($cfg->siteRoot . "/" - . $pkgPath . PACKAGE_SETUP); - if (!empty($config_input) || count($config_input) > 0) - return $config_input; - else - return false; - } ! function setupPackage($packageInstance) { - $cfg = $GLOBALS["ucConfig"]; - $dbinf = new UcPackageDBInfo(); ! $dbinf->name = $cfg->dbName; ! $dbinf->user = $cfg->dbUser; ! $dbinf->passwd = $cfg->dbPasswd; ! $dbinf->host = $cfg->dbHost; $dbinf->prefix = $packageInstance->prefix . "_"; ! include_once($cfg->siteRoot . "/" ! . $packageInstance->path . "/" . PACKAGE_SETUP); ! setup($dbinf, $cfg->siteUrl, $cfg->siteRoot, $packageInstance) or die("Unable to setup package"); return true; } ! function registerPackage($package, $destPath, $tblPrefix) { $query = sprintf($GLOBALS["ucsql_packageregister"], ! $package->name, $package->version, ! $destPath, $tblPrefix); $this->db->Execute($query) or die("Unable to register package: " . $this->db->ErrorMsg()); return true; } ! function unregisterPackage($packageInstance) { ! $query = sprintf($GLOBALS["ucsql_packageunregister"], ! $packageInstance->name, ! $packageInstance->version, ! $packageInstance->path, ! $packageInstance->prefix); $this->db->Execute($query) or die("Unable to unregister package: " . $this->db->ErrorMsg()); --- 278,314 ---- } ! function setupPackage(&$packageInstance) { $dbinf = new UcPackageDBInfo(); ! $dbinf->name = $this->cfg->dbName; ! $dbinf->user = $this->cfg->dbUser; ! $dbinf->passwd = $this->cfg->dbPasswd; ! $dbinf->host = $this->cfg->dbHost; $dbinf->prefix = $packageInstance->prefix . "_"; ! include_once($this->metaDir . "/" ! . $packageInstance->fullName . "/" . PACKAGE_SETUP); ! setup($dbinf, $this->cfg->siteUrl, $this->cfg->siteRoot, ! $packageInstance) or die("Unable to setup package"); return true; } ! function registerPackage(&$packageInstance) { $query = sprintf($GLOBALS["ucsql_packageregister"], ! $packageInstance->name, $packageInstance->version, ! $packageInstance->path, $packageInstance->prefix); $this->db->Execute($query) or die("Unable to register package: " . $this->db->ErrorMsg()); + $packageInstance->appid = $this->db->Insert_ID(); return true; } ! function unregisterPackage($packageId) { ! $query = sprintf($GLOBALS["ucsql_packageunregister"], $packageId); $this->db->Execute($query) or die("Unable to unregister package: " . $this->db->ErrorMsg()); *************** *** 227,252 **** function preInstall($package, $destPath, $tblPrefix) { ! $cfg = $GLOBALS["ucConfig"]; ! $this->saveMetaData($package); $this->download($package) or die("Unable to get package archive"); ! $fullPath = $cfg->siteRoot . "/" .$destPath; ! $this->checkPathValidity($fullPath) or die("Invalid destination path"); ! $this->registerPackage($package, $destPath, $tblPrefix) ! or die("Unable to register package to be installed"); ! createDirectory($fullPath) ! or die("Unable to create directory $pkgPath"); ! $this->unpack($package, $fullPath) ! or die("Unable to unpack package"); } ! function install($package, $configData) { ! $cfg = $GLOBALS["ucConfig"]; ! $packageInstance = new UcPackageInstance($package->name, ! $package->version, ! $configData); ! if ($package->supported == 1) { $this->setupMySQL($packageInstance) --- 328,365 ---- function preInstall($package, $destPath, $tblPrefix) { ! $pkgInst = new UcPackageInstance($package->name, ! $package->version, ! $destPath, ! $tblPrefix); ! ! $this->registerPackage($pkgInst) ! or die("Unable to register package to be installed"); ! $this->download($package) or die("Unable to get package archive"); ! $this->extractScripts($package) ! or die("Unable to get install scripts for package"); ! $this->saveMetaData($package) ! or die("Unable to save meta data for package"); ! $pkgInst->setMetaData() ! or die("Unable to set meta data for package"); ! $this->checkPathValidity($this->cfg->siteRoot . "/" . $destPath) or die("Invalid destination path"); ! ! return $pkgInst; } ! function install(&$packageInstance, $configData) { ! $packageInstance->setConfigData($configData); ! $fullPath = $this->cfg->siteRoot . "/" . $packageInstance->path; ! createDirectory($fullPath) ! or die("Unable to create directory $fullPath"); ! $this->createManifest($packageInstance) ! or die("Unable to store manifest for package"); ! $this->unpack($packageInstance, $fullPath) ! or die("Unable to unpack package"); ! ! if ($packageInstance->supported == 1) { $this->setupMySQL($packageInstance) *************** *** 258,263 **** else { ! $redirect = $cfg->siteUrl . "/" . $packageInstance->path ! . "/" . $package->setupScript; } $this->setInstallComplete($packageInstance); --- 371,376 ---- else { ! $redirect = $this->cfg->siteUrl . "/" . $packageInstance->path ! . "/" . $packageInstance->setupScript; } $this->setInstallComplete($packageInstance); *************** *** 265,281 **** } ! function uninstall($packageName, $packageVersion, $relUrl) { ! $cfg = $GLOBALS["ucConfig"]; ! $pkgAr = $this->getPackages($packageName, $packageVersion, $relUrl); ! $package = $pkgAr[0]; $tablesAr = array(); ! foreach ($package->tables as $table) ! $tablesAr[] = $package->prefix . "_" . $table; $tablesList = join(',', $tablesAr); $query = "DROP TABLE " . $tablesList; $this->db->Execute($query); ! $this->unregisterPackage($package); ! rrmdir($cfg->siteRoot . "/" . $relUrl); } } --- 378,394 ---- } ! function unInstall($packageId) { ! $pkgInst = $this->getPackageById($packageId) ! or die("Unable to get package $packageID"); $tablesAr = array(); ! foreach ($pkgInst->tables as $table) ! $tablesAr[] = $pkgInst->prefix . "_" . $table; $tablesList = join(',', $tablesAr); $query = "DROP TABLE " . $tablesList; $this->db->Execute($query); ! $this->unregisterPackage($packageId); ! $nrm = $this->removeFiles($packageId); ! $this->removeManifest($packageId); } } |