|
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);
}
}
|