mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-12 23:14:18 +01:00
N°6964 - Add API to allow modules to register files to include in the backup (#547)
* Allow to include backup extra file via interface * Update application/applicationextension.inc.php Co-authored-by: Thomas Casteleyn <thomas.casteleyn@me.com> * Add iBackupExtraFilesExtension to plugin list * decouple extra_files via config and interface * Add unit tests for iBackupExtraFilesExtension * Enable recursive creation of destination directories * Update application/applicationextension.inc.php Co-authored-by: Molkobain <lajarige.guillaume@free.fr> * Update setup/backup.class.inc.php Co-authored-by: Molkobain <lajarige.guillaume@free.fr> * Update tests/php-unit-tests/unitary-tests/application/applicationextension/ApplicationExtensionTest.php Co-authored-by: Molkobain <lajarige.guillaume@free.fr> * Update application/applicationextension.inc.php Co-authored-by: Molkobain <lajarige.guillaume@free.fr> * Update core/metamodel.class.php Co-authored-by: Molkobain <lajarige.guillaume@free.fr> * Update setup/backup.class.inc.php Co-authored-by: Molkobain <lajarige.guillaume@free.fr> --------- Co-authored-by: Thomas Casteleyn <thomas.casteleyn@me.com> Co-authored-by: Molkobain <lajarige.guillaume@free.fr>
This commit is contained in:
committed by
GitHub
parent
2a9add241e
commit
93e1f6ae03
@@ -265,35 +265,45 @@ class DBBackup
|
||||
SetupUtils::copydir($sExtraDir, $sFile);
|
||||
$aRet[] = $sFile;
|
||||
}
|
||||
|
||||
$aExtraFiles = [];
|
||||
if (MetaModel::GetConfig() !== null) // During unattended install config file may be absent
|
||||
{
|
||||
$aExtraFiles = MetaModel::GetModuleSetting('itop-backup', 'extra_files', []);
|
||||
foreach($aExtraFiles as $sExtraFileOrDir)
|
||||
}
|
||||
|
||||
foreach (utils::GetClassesForInterface('iBackupExtraFilesExtension', '', ['[\\\\/]lib[\\\\/]', '[\\\\/]node_modules[\\\\/]', '[\\\\/]test[\\\\/]', '[\\\\/]tests[\\\\/]']) as $sExtensionClass)
|
||||
{
|
||||
/** @var iBackupExtraFilesExtension $oExtensionInstance */
|
||||
$oExtensionInstance = new $sExtensionClass();
|
||||
$aExtraFiles = array_merge($aExtraFiles, $oExtensionInstance->GetExtraFiles());
|
||||
}
|
||||
|
||||
foreach($aExtraFiles as $sExtraFileOrDir)
|
||||
{
|
||||
if(!file_exists(APPROOT.'/'.$sExtraFileOrDir)) {
|
||||
continue; // Ignore non-existing files
|
||||
}
|
||||
|
||||
$sExtraFullPath = utils::RealPath(APPROOT.'/'.$sExtraFileOrDir, APPROOT);
|
||||
if ($sExtraFullPath === false)
|
||||
{
|
||||
if(!file_exists(APPROOT.'/'.$sExtraFileOrDir)) {
|
||||
continue; // Ignore non-existing files
|
||||
}
|
||||
|
||||
$sExtraFullPath = utils::RealPath(APPROOT.'/'.$sExtraFileOrDir, APPROOT);
|
||||
if ($sExtraFullPath === false)
|
||||
{
|
||||
throw new Exception("Backup: Aborting, resource '$sExtraFileOrDir'. Considered as UNSAFE because not inside the iTop directory.");
|
||||
}
|
||||
if (is_dir($sExtraFullPath))
|
||||
{
|
||||
$sFile = $sTmpFolder.'/'.$sExtraFileOrDir;
|
||||
$this->LogInfo("backup: adding directory '$sExtraFileOrDir'");
|
||||
SetupUtils::copydir($sExtraFullPath, $sFile);
|
||||
$aRet[] = $sFile;
|
||||
}
|
||||
elseif (file_exists($sExtraFullPath))
|
||||
{
|
||||
$sFile = $sTmpFolder.'/'.$sExtraFileOrDir;
|
||||
$this->LogInfo("backup: adding file '$sExtraFileOrDir'");
|
||||
@mkdir(dirname($sFile), 0755, true);
|
||||
copy($sExtraFullPath, $sFile);
|
||||
$aRet[] = $sFile;
|
||||
}
|
||||
throw new Exception("Backup: Aborting, resource '$sExtraFileOrDir'. Considered as UNSAFE because not inside the iTop directory.");
|
||||
}
|
||||
if (is_dir($sExtraFullPath))
|
||||
{
|
||||
$sFile = $sTmpFolder.'/'.$sExtraFileOrDir;
|
||||
$this->LogInfo("backup: adding directory '$sExtraFileOrDir'");
|
||||
SetupUtils::copydir($sExtraFullPath, $sFile);
|
||||
$aRet[] = $sFile;
|
||||
}
|
||||
elseif (file_exists($sExtraFullPath))
|
||||
{
|
||||
$sFile = $sTmpFolder.'/'.$sExtraFileOrDir;
|
||||
$this->LogInfo("backup: adding file '$sExtraFileOrDir'");
|
||||
@mkdir(dirname($sFile), 0755, true);
|
||||
copy($sExtraFullPath, $sFile);
|
||||
$aRet[] = $sFile;
|
||||
}
|
||||
}
|
||||
if (!$bSkipSQLDumpForTesting)
|
||||
|
||||
Reference in New Issue
Block a user