2012-01-20 10:08:16 +01:00
< ? php
2012-01-21 18:46:36 +01:00
/* Copyright ( C ) 2010 - 2012 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2012 Regis Houssin < regis . houssin @ inodbox . com >
2023-05-07 14:31:35 +02:00
* Copyright ( C ) 2023 Alexandre Janniaux < alexandre . janniaux @ gmail . com >
2024-02-16 02:28:32 +01:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2024-11-14 00:16:43 +01:00
* Copyright ( C ) 2024 Frédéric France < frederic . france @ free . fr >
2012-01-20 10:08:16 +01:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2012-01-20 10:08:16 +01:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
* or see https :// www . gnu . org /
2012-01-20 10:08:16 +01:00
*/
/**
* \file test / phpunit / FilesLibTest . php
* \ingroup test
* \brief PHPUnit test
* \remarks To run this script as CLI : phpunit filename . php
*/
global $conf , $user , $langs , $db ;
//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
2014-05-01 19:57:53 +02:00
//require_once 'PHPUnit/Autoload.php';
2012-01-20 10:08:16 +01:00
require_once dirname ( __FILE__ ) . '/../../htdocs/master.inc.php' ;
require_once dirname ( __FILE__ ) . '/../../htdocs/core/lib/files.lib.php' ;
2024-02-16 23:26:32 +01:00
require_once dirname ( __FILE__ ) . '/CommonClassTest.class.php' ;
2012-01-20 10:08:16 +01:00
2021-01-14 15:09:08 +01:00
if ( empty ( $user -> id )) {
2012-01-20 10:08:16 +01:00
print " Load permissions for admin user nb 1 \n " ;
$user -> fetch ( 1 );
2024-11-14 00:16:43 +01:00
$user -> loadRights ();
2012-01-20 10:08:16 +01:00
}
2024-02-16 02:28:32 +01:00
$conf -> global -> MAIN_DISABLE_ALL_MAILS = 1 ;
2012-01-20 10:08:16 +01:00
/**
* Class for PHPUnit tests
*
* @ backupGlobals disabled
* @ backupStaticAttributes enabled
* @ remarks backupGlobals must be disabled to have db , conf , user and lang not erased .
*/
2024-02-16 23:26:32 +01:00
class FilesLibTest extends CommonClassTest
2012-01-20 10:08:16 +01:00
{
2012-06-24 19:32:19 +02:00
/**
2021-01-14 15:09:08 +01:00
* testDolBasename
*
* @ return void
*/
public function testDolBasename ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2012-06-24 19:32:19 +02:00
2024-02-16 02:28:32 +01:00
$result = dol_basename ( 'adir/a_file' );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-01-14 12:26:37 +01:00
$this -> assertEquals ( 'a_file' , $result );
2012-06-24 19:32:19 +02:00
2024-02-16 02:28:32 +01:00
$result = dol_basename ( 'adir/a_file/' );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-01-14 12:26:37 +01:00
$this -> assertEquals ( 'a_file' , $result );
2012-06-24 19:32:19 +02:00
2024-02-16 02:28:32 +01:00
$result = dol_basename ( 'adir/νεο' ); // With cyrillic data. Here basename fails to return correct value
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2019-01-27 13:07:22 +01:00
$this -> assertEquals ( 'νεο' , $result );
2012-06-24 19:32:19 +02:00
2024-02-16 02:28:32 +01:00
$result = dol_basename ( 'adir/νεο/' ); // With cyrillic data. Here basename fails to return correct value
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2019-01-27 13:07:22 +01:00
$this -> assertEquals ( 'νεο' , $result );
2021-01-14 15:09:08 +01:00
}
2012-06-24 19:32:19 +02:00
2021-01-14 15:09:08 +01:00
/**
* testDolCountNbOfLine
*
* @ return int
*/
public function testDolCountNbOfLine ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2012-01-20 10:08:16 +01:00
2024-02-17 18:59:57 +01:00
$file = dirname ( __FILE__ ) . '/file_import_company_1.csv' ;
2024-02-16 02:28:32 +01:00
$result = dol_count_nb_of_line ( $file );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2019-01-27 13:07:22 +01:00
$this -> assertEquals ( 3 , $result );
2012-01-20 10:08:16 +01:00
return $result ;
2021-01-14 15:09:08 +01:00
}
/**
* testDolIsFileDir
*
* @ return int
*/
public function testDolIsFileDir ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2012-01-20 19:39:58 +01:00
2024-02-17 18:59:57 +01:00
$file = dirname ( __FILE__ ) . '/file_import_company_1.csv' ;
2012-01-20 19:39:58 +01:00
2024-02-16 02:28:32 +01:00
$result = dol_is_file ( $file );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2012-01-20 19:39:58 +01:00
$this -> assertTrue ( $result );
2024-02-16 02:28:32 +01:00
$result = dol_is_dir ( $file );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2012-01-20 19:39:58 +01:00
$this -> assertFalse ( $result );
return $result ;
2021-01-14 15:09:08 +01:00
}
/**
* testDolOther
*
* @ return boolean
*/
public function testDolOther ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
2024-02-16 02:28:32 +01:00
$url = 'http://www.dolibarr.org' ;
$result = dol_is_url ( $url );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertTrue ( $result );
2024-02-16 02:28:32 +01:00
$url = 'https://www.dolibarr.org' ;
$result = dol_is_url ( $url );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertTrue ( $result );
2024-02-16 02:28:32 +01:00
$url = 'file://www.dolibarr.org/download/file.zip' ;
$result = dol_is_url ( $url );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertTrue ( $result );
return $result ;
}
/**
* testDolMimeType
*
* @ return void
*/
public function testDolMimeType ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
// file.png
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.png' , '' , 0 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'image/png' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.png' , '' , 1 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'png' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.png' , '' , 2 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'image.png' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.png' , '' , 3 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( '' , $result );
// file.odt
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.odt' , '' , 0 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'application/vnd.oasis.opendocument.text' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.odt' , '' , 1 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'vnd.oasis.opendocument.text' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.odt' , '' , 2 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'ooffice.png' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.odt' , '' , 3 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( '' , $result );
// file.php
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.php' , '' , 0 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'text/plain' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.php' , '' , 1 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'plain' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.php' , '' , 2 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'php.png' , $result );
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.php' , '' , 3 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'php' , $result );
// file.php.noexe
2024-02-16 02:28:32 +01:00
$result = dol_mimetype ( 'file.php.noexe' , '' , 0 );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 'text/plain' , $result );
}
/**
* testDolDeleteDir
*
* @ return void
*/
public function testDolDeleteDir ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
2024-02-16 02:28:32 +01:00
$dirout = $conf -> admin -> dir_temp . '/test' ;
$dirout2 = $conf -> admin -> dir_temp . '/test2' ;
2021-01-14 15:09:08 +01:00
2024-02-16 02:28:32 +01:00
$count = 0 ;
$result = dol_delete_dir_recursive ( $dirout , $count ); // If it has no permission to delete, it will fails as if dir does not exists, so we can't test it
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 0 , $result );
2024-02-16 02:28:32 +01:00
$count = 0 ;
$countdeleted = 0 ;
$result = dol_delete_dir_recursive ( $dirout , $count , 1 , 0 , $countdeleted ); // If it has no permission to delete, it will fails as if dir does not exists, so we can't test it
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 0 , $result );
$this -> assertGreaterThanOrEqual ( 0 , $countdeleted );
dol_mkdir ( $dirout2 );
2024-02-16 02:28:32 +01:00
$count = 0 ;
$countdeleted = 0 ;
$result = dol_delete_dir_recursive ( $dirout2 , $count , 1 , 0 , $countdeleted ); // If it has no permission to delete, it will fails as if dir does not exists, so we can't test it
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 1 , $result );
$this -> assertGreaterThanOrEqual ( 1 , $countdeleted );
}
/**
* testDolCopyMoveDelete
*
* @ return void
2024-03-11 20:46:21 +01:00
* @ group WindowsWaitingForFix
2021-01-14 15:09:08 +01:00
*/
public function testDolCopyMoveDelete ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
2024-02-17 18:59:57 +01:00
$file = dirname ( __FILE__ ) . '/file_import_company_1.csv' ;
$result = dol_copy ( $file , '/adir/that/does/not/exists/file.csv' );
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertLessThan ( 0 , $result , " $result " . 'copy dir that does not exists' ); // We should have error
2021-01-14 15:09:08 +01:00
2024-02-16 02:28:32 +01:00
$result = dol_copy ( $file , '/adir/that/does/not/exists/file.csv' );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-02-16 02:28:32 +01:00
$this -> assertLessThan ( 0 , $result , " $result " . 'copy dir that does not exists' ); // We should have error
2021-01-14 15:09:08 +01:00
2024-02-16 02:28:32 +01:00
$result = dol_copy ( $file , $conf -> admin -> dir_temp . '/file.csv' , 0 , 1 );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 1 , $result , 'copy file (' . $file . ') into a dir that exists (' . $conf -> admin -> dir_temp . '/file.csv)' ); // Should be 1
// Again to test with overwriting=0
2024-02-16 02:28:32 +01:00
$result = dol_copy ( $file , $conf -> admin -> dir_temp . '/file.csv' , 0 , 0 );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( 0 , $result , 'copy destination already exists, no overwrite' ); // Should be 0
// Again to test with overwriting=1
2024-02-16 02:28:32 +01:00
$result = dol_copy ( $file , $conf -> admin -> dir_temp . '/file.csv' , 0 , 1 );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 1 , $result , 'copy destination already exists, overwrite' ); // Should be 1
// To test a move that should work
2024-02-16 02:28:32 +01:00
$result = dol_move ( $conf -> admin -> dir_temp . '/file.csv' , $conf -> admin -> dir_temp . '/file2.csv' , 0 , 1 );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertTrue ( $result , 'move with default mask' );
// To test a move that should work with forced mask
2024-02-16 02:28:32 +01:00
$result = dol_move ( $conf -> admin -> dir_temp . '/file2.csv' , $conf -> admin -> dir_temp . '/file3.csv' , '0754' , 1 ); // file should be rwxr-wr--
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertTrue ( $result , 'move with forced mask' );
// To test a delete that should success
2024-02-16 02:28:32 +01:00
$result = dol_delete_file ( $conf -> admin -> dir_temp . '/file3.csv' );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertTrue ( $result , 'delete file' );
// Again to test there is error when deleting a non existing file with option disableglob
2024-02-16 02:28:32 +01:00
$result = dol_delete_file ( $conf -> admin -> dir_temp . '/file3.csv' , 1 , 1 );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2025-02-05 18:16:09 +01:00
$this -> assertFalse ( $result , 'delete file that does not exists with disabling glob must return ko' );
2021-01-14 15:09:08 +01:00
// Again to test there is no error when deleting a non existing file without option disableglob
2024-02-16 02:28:32 +01:00
$result = dol_delete_file ( $conf -> admin -> dir_temp . '/file3csv' , 0 , 1 );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertTrue ( $result , 'delete file that does not exists without disabling glob must return ok' );
// Test copy with special char / delete with blob
2024-02-16 02:28:32 +01:00
$result = dol_copy ( $file , $conf -> admin -> dir_temp . '/file with [x] and é.csv' , 0 , 1 );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThanOrEqual ( 1 , $result , 'copy file with special chars, overwrite' ); // Should be 1
// Try to delete using a glob criteria
2024-02-16 02:28:32 +01:00
$result = dol_delete_file ( $conf -> admin -> dir_temp . '/file with [x]*é.csv' );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertTrue ( $result , 'delete file using glob' );
2024-02-17 18:59:57 +01:00
$file = dirname ( __FILE__ ) . '/file_pdf_with_js.pdf.jpg' ;
$result = dol_copy ( $file , $conf -> admin -> dir_temp . '/file_pdf_with_js.pdf.jpg' );
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertGreaterThan ( 0 , $result , " $result " . ' failed to copy pdf file' );
$result = dol_move ( $conf -> admin -> dir_temp . '/file_pdf_with_js.pdf.jpg' , $conf -> admin -> dir_temp . '/file_pdf_with_js.pdf' );
print __METHOD__ . " dol_move of corrupted file result= " . $result . " \n " ;
$this -> assertFalse ( $result , " $result " . ' move of a jpg into a corrupted pdf should fails' );
2021-01-14 15:09:08 +01:00
}
/**
* testDolCompressUnCompress
*
* @ return void
*/
public function testDolCompressUnCompress ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
2022-04-05 17:19:12 +02:00
// Format zip
print " \n " ;
print 'testDolCompressUnCompress zip' . " \n " ;
2024-02-16 02:28:32 +01:00
$format = 'zip' ;
2024-02-17 18:59:57 +01:00
$filein = dirname ( __FILE__ ) . '/file_import_company_1.csv' ;
2024-02-16 02:28:32 +01:00
$fileout = $conf -> admin -> dir_temp . '/test.' . $format ;
$dirout = $conf -> admin -> dir_temp . '/testdir' . $format ;
2021-01-14 15:09:08 +01:00
dol_delete_file ( $fileout );
2024-02-16 02:28:32 +01:00
$count = 0 ;
2021-01-14 15:09:08 +01:00
dol_delete_dir_recursive ( $dirout , $count , 1 );
$errorstring = '' ;
dol_mkdir ( $conf -> admin -> dir_temp );
2024-02-16 02:28:32 +01:00
$conf -> global -> MAIN_ENABLE_LOG_TO_HTML = 1 ;
2023-04-15 03:16:53 +02:00
$conf -> modules [ 'syslog' ] = 'syslog' ;
2024-02-16 02:28:32 +01:00
$_REQUEST [ 'logtohtml' ] = 1 ;
$conf -> logbuffer = array ();
2021-01-14 15:09:08 +01:00
2024-02-16 02:28:32 +01:00
$result = dol_compress_file ( $filein , $fileout , $format , $errorstring );
2022-04-05 17:19:12 +02:00
print __METHOD__ . " compress result= " . $result . " \n " ;
print join ( ', ' , $conf -> logbuffer );
$this -> assertGreaterThanOrEqual ( 1 , $result , " Pb with dol_compress_file on " . $filein . " into " . $fileout . " : " . $errorstring );
2024-02-16 02:28:32 +01:00
$result = dol_uncompress ( $fileout , $dirout );
2022-04-05 17:19:12 +02:00
print __METHOD__ . " uncompress result= " . join ( ',' , $result ) . " \n " ;
2023-04-15 03:16:53 +02:00
print join ( ', ' , $conf -> logbuffer );
2022-04-05 17:19:12 +02:00
$this -> assertEquals ( 0 , count ( $result ), " Pb with dol_uncompress_file of file " . $fileout );
// Format gz
print " \n " ;
print 'testDolCompressUnCompress gz' . " \n " ;
2024-02-16 02:28:32 +01:00
$format = 'gz' ;
2024-02-17 18:59:57 +01:00
$filein = dirname ( __FILE__ ) . '/file_import_company_1.csv' ;
2024-02-16 02:28:32 +01:00
$fileout = $conf -> admin -> dir_temp . '/test.' . $format ;
$dirout = $conf -> admin -> dir_temp . '/testdir' . $format ;
2022-04-05 17:19:12 +02:00
dol_delete_file ( $fileout );
2024-02-16 02:28:32 +01:00
$count = 0 ;
2022-04-05 17:19:12 +02:00
dol_delete_dir_recursive ( $dirout , $count , 1 );
$errorstring = '' ;
dol_mkdir ( $conf -> admin -> dir_temp );
2024-02-16 02:28:32 +01:00
$conf -> global -> MAIN_ENABLE_LOG_TO_HTML = 1 ;
2023-04-15 03:16:53 +02:00
$conf -> modules [ 'syslog' ] = 'syslog' ;
2024-02-16 02:28:32 +01:00
$_REQUEST [ 'logtohtml' ] = 1 ;
$conf -> logbuffer = array ();
2022-04-05 17:19:12 +02:00
2024-02-16 02:28:32 +01:00
$result = dol_compress_file ( $filein , $fileout , $format , $errorstring );
2022-04-05 17:19:12 +02:00
print __METHOD__ . " compress result= " . $result . " \n " ;
2021-01-14 15:09:08 +01:00
print join ( ', ' , $conf -> logbuffer );
$this -> assertGreaterThanOrEqual ( 1 , $result , " Pb with dol_compress_file on " . $filein . " into " . $fileout . " : " . $errorstring );
2024-02-16 02:28:32 +01:00
$result = dol_uncompress ( $fileout , $dirout );
2022-04-05 17:19:12 +02:00
print __METHOD__ . " uncompress result= " . join ( ',' , $result ) . " \n " ;
print join ( ', ' , $conf -> logbuffer );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 0 , count ( $result ), " Pb with dol_uncompress_file of file " . $fileout );
2021-03-16 14:57:04 +01:00
2022-04-05 17:19:12 +02:00
// Test compression of a directory
// $dirout is $conf->admin->dir_temp.'/testdirgz'
2021-03-16 14:57:04 +01:00
$excludefiles = '/(\.back|\.old|\.log|documents[\/\\\]admin[\/\\\]documents[\/\\\])/i' ;
2023-12-04 11:22:28 +01:00
if ( preg_match ( $excludefiles , 'a/temp/b' )) {
echo '----- Regex OK -----' . " \n " ;
}
2024-02-16 02:28:32 +01:00
$result = dol_compress_dir ( $dirout , $conf -> admin -> dir_temp . '/testcompressdirzip.zip' , 'zip' , $excludefiles );
2022-04-05 17:19:12 +02:00
print __METHOD__ . " dol_compress_dir result= " . $result . " \n " ;
2021-03-16 14:57:04 +01:00
print join ( ', ' , $conf -> logbuffer );
$this -> assertGreaterThanOrEqual ( 1 , $result , " Pb with dol_compress_dir of " . $dirout . " into " . $conf -> admin -> dir_temp . '/testdir.zip' );
2021-01-14 15:09:08 +01:00
}
/**
* testDolCheckSecureAccessDocument
*
* @ return void
*/
public function testDolCheckSecureAccessDocument ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2021-01-14 15:09:08 +01:00
//$dummyuser=new User($db);
//$result=restrictedArea($dummyuser,'societe');
// We save user properties
2023-05-12 19:28:44 +02:00
$savpermlire = $user -> hasRight ( 'facture' , 'lire' );
$savpermcreer = $user -> hasRight ( 'facture' , 'creer' );
2017-07-13 00:18:58 +02:00
2023-05-12 19:28:44 +02:00
if ( empty ( $user -> rights -> facture )) {
$user -> rights -> facture = new stdClass ();
}
2017-07-13 00:18:58 +02:00
2017-05-22 01:19:16 +02:00
// Check access to SPECIMEN
2021-01-14 15:09:08 +01:00
$user -> rights -> facture -> lire = 0 ;
$user -> rights -> facture -> creer = 0 ;
2024-02-16 02:28:32 +01:00
$filename = 'SPECIMEN.pdf' ; // Filename relative to module part
$result = dol_check_secure_access_document ( 'facture' , $filename , 0 , '' , '' , 'read' );
$this -> assertEquals ( 1 , $result [ 'accessallowed' ], " Check access allowed to ' $filename ' " . json_encode ( $result ));
2021-01-14 15:09:08 +01:00
// Check read permission
$user -> rights -> facture -> lire = 1 ;
$user -> rights -> facture -> creer = 1 ;
2024-02-16 02:28:32 +01:00
$filename = 'FA010101/FA010101.pdf' ; // Filename relative to module part
$result = dol_check_secure_access_document ( 'facture' , $filename , 0 , '' , '' , 'read' );
$this -> assertEquals ( 1 , $result [ 'accessallowed' ], " Check access allowed to ' $filename ' " . json_encode ( $result ));
2021-01-14 15:09:08 +01:00
$user -> rights -> facture -> lire = 0 ;
$user -> rights -> facture -> creer = 0 ;
2024-02-16 02:28:32 +01:00
$filename = 'FA010101/FA010101.pdf' ; // Filename relative to module part
$result = dol_check_secure_access_document ( 'facture' , $filename , 0 , '' , '' , 'read' );
$this -> assertEquals ( 0 , $result [ 'accessallowed' ], " Check access denied to ' $filename ': " . json_encode ( $result ));
2021-01-14 15:09:08 +01:00
// Check write permission
$user -> rights -> facture -> lire = 0 ;
$user -> rights -> facture -> creer = 0 ;
2024-02-16 02:28:32 +01:00
$filename = 'FA010101/FA010101.pdf' ; // Filename relative to module part
$result = dol_check_secure_access_document ( 'facture' , $filename , 0 , '' , '' , 'write' );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 0 , $result [ 'accessallowed' ]);
$user -> rights -> facture -> lire = 1 ;
$user -> rights -> facture -> creer = 1 ;
2024-02-16 02:28:32 +01:00
$filename = 'FA010101/FA010101.pdf' ; // Filename relative to module part
$result = dol_check_secure_access_document ( 'facture' , $filename , 0 , '' , '' , 'write' );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 1 , $result [ 'accessallowed' ]);
$user -> rights -> facture -> lire = 1 ;
$user -> rights -> facture -> creer = 0 ;
2024-02-16 02:28:32 +01:00
$filename = 'FA010101/FA010101.pdf' ; // Filename relative to module part
$result = dol_check_secure_access_document ( 'facture' , $filename , 0 , '' , '' , 'write' );
2021-01-14 15:09:08 +01:00
$this -> assertEquals ( 0 , $result [ 'accessallowed' ]);
// We restore user properties
$user -> rights -> facture -> lire = $savpermlire ;
$user -> rights -> facture -> creer = $savpermcreer ;
}
2022-05-22 15:46:04 +02:00
/**
* testDolDirMove
*
* @ return void
2024-03-11 20:46:21 +01:00
* @ group WindowsWaitingForFix
2022-05-22 15:46:04 +02:00
*/
public function testDolDirMove ()
{
global $conf , $user , $langs , $db ;
2024-02-16 02:28:32 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2022-05-22 15:46:04 +02:00
// To test a move of empty directory that should work
$dirsrcpath = $conf -> admin -> dir_temp . '/directory' ;
$dirdestpath = $conf -> admin -> dir_temp . '/directory2' ;
2024-02-17 18:59:57 +01:00
$file = dirname ( __FILE__ ) . '/file_import_company_1.csv' ;
2022-05-22 15:46:04 +02:00
dol_mkdir ( $dirsrcpath );
dol_delete_dir_recursive ( $dirdestpath , 0 , 1 );
2024-02-16 02:28:32 +01:00
$result = dol_move_dir ( $dirsrcpath , $dirdestpath , 1 , 1 , 1 );
2022-05-22 15:46:04 +02:00
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 );
2024-02-16 02:28:32 +01:00
$result = dol_move_dir ( $dirsrcpath , $dirdestpath , 1 , 1 , 1 );
2022-05-22 15:46:04 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-02-16 02:28:32 +01:00
$this -> assertTrue ( $result , " move of directory on existing directory with empty directory " );
2022-05-22 15:46:04 +02:00
// To test a move on existing directory without overwrite
dol_mkdir ( $dirsrcpath );
2024-02-16 02:28:32 +01:00
$result = dol_move_dir ( $dirsrcpath , $dirdestpath , 0 , 1 , 1 );
2022-05-22 15:46:04 +02:00
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' );
2024-02-16 02:28:32 +01:00
$result = dol_move_dir ( $dirsrcpath , $dirdestpath , 1 , 1 , 1 );
2022-05-22 15:46:04 +02:00
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' );
2024-02-16 02:28:32 +01:00
$result = dol_move_dir ( $dirsrcpath , $dirdestpath , 1 , 1 , 1 );
2022-05-22 15:46:04 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-01-12 17:14:13 +01:00
$this -> assertTrue ( $result , 'move of directory with file without rename needed in directory' );
2022-05-22 15:46:04 +02:00
// 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' );
2024-02-16 02:28:32 +01:00
$result = dol_move_dir ( $dirsrcpath , $dirdestpath , 1 , 1 , 1 );
2022-05-22 15:46:04 +02:00
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' );
2024-02-16 02:28:32 +01:00
$result = dol_move_dir ( $dirsrcpath , $dirdestpath , 1 , 1 , 1 );
2022-05-22 15:46:04 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
2024-01-12 17:14:13 +01:00
$this -> assertTrue ( $result , 'move of directory with directory without rename needed in directory' );
2022-05-22 15:46:04 +02:00
}
2012-01-20 10:08:16 +01:00
}