Merge pull request #20968 from Hystepik/develop#2
New : function dol_move_dir in htdocs/core/lib/files.lib.php
This commit is contained in:
commit
4cca69706a
@ -964,6 +964,69 @@ function dol_move($srcfile, $destfile, $newmask = 0, $overwriteifexists = 1, $te
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move a directory into another name.
|
||||
*
|
||||
* @param string $srcdir Source directory
|
||||
* @param string $destdir Destination directory
|
||||
* @param int $overwriteifexists Overwrite directory if exists (1 by default)
|
||||
* @param int $indexdatabase Index new file into database.
|
||||
* @param int $renamedircontent Rename contents inside srcdir.
|
||||
*
|
||||
* @return boolean True if OK, false if KO
|
||||
*/
|
||||
function dol_move_dir($srcdir, $destdir, $overwriteifexists = 1, $indexdatabase = 1, $renamedircontent = 1)
|
||||
{
|
||||
|
||||
global $user, $db, $conf;
|
||||
$result = false;
|
||||
|
||||
dol_syslog("files.lib.php::dol_move_dir srcdir=".$srcdir." destdir=".$destdir." overwritifexists=".$overwriteifexists." indexdatabase=".$indexdatabase." renamedircontent=".$renamedircontent);
|
||||
$srcexists = dol_is_dir($srcdir);
|
||||
$srcbasename = basename($srcdir);
|
||||
$destexists = dol_is_dir($destdir);
|
||||
|
||||
if (!$srcexists) {
|
||||
dol_syslog("files.lib.php::dol_move_dir srcdir does not exists. we ignore the move request.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($overwriteifexists || !$destexists) {
|
||||
$newpathofsrcdir = dol_osencode($srcdir);
|
||||
$newpathofdestdir = dol_osencode($destdir);
|
||||
|
||||
$result = @rename($newpathofsrcdir, $newpathofdestdir);
|
||||
|
||||
if ($result && $renamedircontent) {
|
||||
if (file_exists($newpathofdestdir)) {
|
||||
$destbasename = basename($newpathofdestdir);
|
||||
$files = dol_dir_list($newpathofdestdir);
|
||||
if (!empty($files) && is_array($files)) {
|
||||
foreach ($files as $key => $file) {
|
||||
if (!file_exists($file["fullname"])) continue;
|
||||
$filepath = $file["path"];
|
||||
$oldname = $file["name"];
|
||||
|
||||
$newname = str_replace($srcbasename, $destbasename, $oldname);
|
||||
if (!empty($newname) && $newname !== $oldname) {
|
||||
if ($file["type"] == "dir") {
|
||||
$res = dol_move_dir($filepath.'/'.$oldname, $filepath.'/'.$newname, $overwriteifexists, $indexdatabase, $renamedircontent);
|
||||
} else {
|
||||
$res = dol_move($filepath.'/'.$oldname, $filepath.'/'.$newname);
|
||||
}
|
||||
if (!$res) {
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
}
|
||||
$result = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unescape a file submitted by upload.
|
||||
* PHP escape char " (%22) or char ' (%27) into $FILES.
|
||||
|
||||
@ -559,4 +559,72 @@ class FilesLibTest extends PHPUnit\Framework\TestCase
|
||||
$user->rights->facture->lire = $savpermlire;
|
||||
$user->rights->facture->creer = $savpermcreer;
|
||||
}
|
||||
|
||||
/**
|
||||
* testDolDirMove
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDolDirMove()
|
||||
{
|
||||
global $conf,$user,$langs,$db;
|
||||
$conf=$this->savconf;
|
||||
$user=$this->savuser;
|
||||
$langs=$this->savlangs;
|
||||
$db=$this->savdb;
|
||||
|
||||
// To test a move of empty directory that should work
|
||||
$dirsrcpath = $conf->admin->dir_temp.'/directory';
|
||||
$dirdestpath = $conf->admin->dir_temp.'/directory2';
|
||||
$file=dirname(__FILE__).'/Example_import_company_1.csv';
|
||||
dol_mkdir($dirsrcpath);
|
||||
dol_delete_dir_recursive($dirdestpath, 0, 1);
|
||||
$result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertTrue($result, 'move of directory with empty directory');
|
||||
|
||||
// To test a move on existing directory with overwrite
|
||||
dol_mkdir($dirsrcpath);
|
||||
$result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertTrue($result, 'move of directory on existing directory with empty directory');
|
||||
|
||||
// To test a move on existing directory without overwrite
|
||||
dol_mkdir($dirsrcpath);
|
||||
$result=dol_move_dir($dirsrcpath, $dirdestpath, 0, 1, 1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertFalse($result, 'move of directory on existing directory without overwrite');
|
||||
|
||||
// To test a move with a file to rename in src directory
|
||||
dol_mkdir($dirsrcpath);
|
||||
dol_delete_dir_recursive($dirdestpath, 0, 1);
|
||||
dol_copy($file, $dirsrcpath.'/directory_file.csv');
|
||||
$result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertTrue($result, 'move of directory with file in directory');
|
||||
|
||||
// To test a move without a file to rename in src directory
|
||||
dol_mkdir($dirsrcpath);
|
||||
dol_delete_dir_recursive($dirdestpath, 0, 1);
|
||||
dol_copy($file, $dirsrcpath.'/file.csv');
|
||||
$result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertTrue($result, 'move of directory with file whitout rename needed in directory');
|
||||
|
||||
// To test a move with a directory to rename in src directory
|
||||
dol_mkdir($dirsrcpath);
|
||||
dol_delete_dir_recursive($dirdestpath, 0, 1);
|
||||
dol_mkdir($dirsrcpath.'/directory');
|
||||
$result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertTrue($result, 'move of directory with file with rename needed in directory');
|
||||
|
||||
// To test a move without a directory to rename in src directory
|
||||
dol_mkdir($dirsrcpath);
|
||||
dol_delete_dir_recursive($dirdestpath, 0, 1);
|
||||
dol_mkdir($dirsrcpath.'/notorename');
|
||||
$result=dol_move_dir($dirsrcpath, $dirdestpath, 1, 1, 1);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertTrue($result, 'move of directory with directory whitout rename needed in directory');
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user