|
|
|
|
@ -1,12 +1,11 @@ |
|
|
|
|
<?php |
|
|
|
|
/* For licensing terms, see /license.txt */ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
============================================================================== |
|
|
|
|
* This is the file manage library for Dokeos. |
|
|
|
|
* This is the file manage library for Chamilo. |
|
|
|
|
* Include/require it in your code to use its functionality. |
|
|
|
|
* |
|
|
|
|
* @package chamilo.library |
|
|
|
|
============================================================================== |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -14,41 +13,37 @@ |
|
|
|
|
* |
|
|
|
|
* @author - Hugues Peeters <peeters@ipm.ucl.ac.be> |
|
|
|
|
* @param - action (string) - action type require : 'delete' or 'update' |
|
|
|
|
* @param - oldPath (string) - old path info stored to change |
|
|
|
|
* @param - newPath (string) - new path info to substitute |
|
|
|
|
* @param - old_path (string) - old path info stored to change |
|
|
|
|
* @param - new_path (string) - new path info to substitute |
|
|
|
|
* @desc Update the file or directory path in the document db document table |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
function update_db_info($action, $old_path, $new_path = '') { |
|
|
|
|
|
|
|
|
|
function update_db_info($action, $oldPath, $newPath="") |
|
|
|
|
{ |
|
|
|
|
global $dbTable; // table 'document' // RH: see below |
|
|
|
|
global $dbTable; // Table 'document' |
|
|
|
|
|
|
|
|
|
/* DELETE */ |
|
|
|
|
|
|
|
|
|
if ($action == "delete") |
|
|
|
|
{ |
|
|
|
|
if ($action == 'delete') { |
|
|
|
|
/* // RH: metadata, update 2004/08/23 |
|
|
|
|
these two lines replaced by new code below: |
|
|
|
|
$query = "DELETE FROM `$dbTable` |
|
|
|
|
WHERE path='".$oldPath."' OR path LIKE '".$oldPath."/%'"; |
|
|
|
|
WHERE path='".$old_path."' OR path LIKE '".$old_path."/%'"; |
|
|
|
|
*/ |
|
|
|
|
$to_delete = "WHERE path LIKE BINARY '".$oldPath."' OR path LIKE BINARY '".$oldPath."/%'"; |
|
|
|
|
$to_delete = "WHERE path LIKE BINARY '".$old_path."' OR path LIKE BINARY '".$old_path."/%'"; |
|
|
|
|
$query = "DELETE FROM $dbTable " . $to_delete; |
|
|
|
|
|
|
|
|
|
$result = Database::query("SELECT id FROM $dbTable " . $to_delete); |
|
|
|
|
|
|
|
|
|
if (Database::num_rows($result)) |
|
|
|
|
{ |
|
|
|
|
require_once(api_get_path(INCLUDE_PATH) . "../metadata/md_funcs.php"); |
|
|
|
|
if (Database::num_rows($result)) { |
|
|
|
|
|
|
|
|
|
require_once api_get_path(INCLUDE_PATH).'../metadata/md_funcs.php'; |
|
|
|
|
$mdStore = new mdstore(TRUE); // create if needed |
|
|
|
|
|
|
|
|
|
$mdType = (substr($dbTable, -13) == 'scormdocument') ? |
|
|
|
|
'Scorm' : 'Document'; |
|
|
|
|
$md_type = (substr($dbTable, -13) == 'scormdocument') ? 'Scorm' : 'Document'; |
|
|
|
|
|
|
|
|
|
while ($row = Database::fetch_array($result)) |
|
|
|
|
{ |
|
|
|
|
$eid = $mdType . '.' . $row['id']; |
|
|
|
|
while ($row = Database::fetch_array($result)) { |
|
|
|
|
$eid = $md_type . '.' . $row['id']; |
|
|
|
|
$mdStore->mds_delete($eid); |
|
|
|
|
$mdStore->mds_delete_offspring($eid); |
|
|
|
|
} |
|
|
|
|
@ -57,23 +52,22 @@ function update_db_info($action, $oldPath, $newPath="") |
|
|
|
|
|
|
|
|
|
/* UPDATE */ |
|
|
|
|
|
|
|
|
|
if ($action == "update") |
|
|
|
|
{ |
|
|
|
|
//Display::display_normal_message("newPath = $newPath"); |
|
|
|
|
if ($newPath[0] == ".") $newPath = substr($newPath,1); |
|
|
|
|
$newPath = str_replace('//','/',$newPath); |
|
|
|
|
//Display::display_normal_message("character 0 = " . $newPath[0] . " 1=" . $newPath[1]); |
|
|
|
|
//Display::display_normal_message("newPath = $newPath"); |
|
|
|
|
if ($action == 'update') { |
|
|
|
|
//Display::display_normal_message("new_path = $new_path"); |
|
|
|
|
if ($new_path[0] == '.') $new_path = substr($new_path, 1); |
|
|
|
|
$new_path = str_replace('//', '/', $new_path); |
|
|
|
|
//Display::display_normal_message("character 0 = " . $new_path[0] . " 1=" . $new_path[1]); |
|
|
|
|
//Display::display_normal_message("new_path = $new_path"); |
|
|
|
|
|
|
|
|
|
//older broken version |
|
|
|
|
// Older broken version |
|
|
|
|
//$query = "UPDATE `$dbTable` |
|
|
|
|
//SET path = CONCAT('".$newPath."', SUBSTRING(path, LENGTH('".$oldPath."')+1) ) |
|
|
|
|
//WHERE path = '".$oldPath."' OR path LIKE '".$oldPath."/%'"; |
|
|
|
|
//SET path = CONCAT('".$new_path."', SUBSTRING(path, LENGTH('".$old_path."')+1) ) |
|
|
|
|
//WHERE path = '".$old_path."' OR path LIKE '".$old_path."/%'"; |
|
|
|
|
|
|
|
|
|
//attempt to update - tested & working for root dir |
|
|
|
|
// Attempt to update - tested & working for root dir |
|
|
|
|
$query = "UPDATE $dbTable |
|
|
|
|
SET path = CONCAT('".$newPath."', SUBSTRING(path, LENGTH('".$oldPath."')+1) ) |
|
|
|
|
WHERE path LIKE BINARY '".$oldPath."' OR path LIKE BINARY '".$oldPath."/%'"; |
|
|
|
|
SET path = CONCAT('".$new_path."', SUBSTRING(path, LENGTH('".$old_path."')+1) ) |
|
|
|
|
WHERE path LIKE BINARY '".$old_path."' OR path LIKE BINARY '".$old_path."/%'"; |
|
|
|
|
} |
|
|
|
|
//echo $query; |
|
|
|
|
//error_log($query,0); |
|
|
|
|
@ -81,43 +75,34 @@ function update_db_info($action, $oldPath, $newPath="") |
|
|
|
|
//Display::display_normal_message("query = $query"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Cheks a file or a directory actually exist at this location |
|
|
|
|
* |
|
|
|
|
* @author - Hugues Peeters <peeters@ipm.ucl.ac.be> |
|
|
|
|
* @param - filePath (string) - path of the presume existing file or dir |
|
|
|
|
* @param - file_path (string) - path of the presume existing file or dir |
|
|
|
|
* @return - boolean TRUE if the file or the directory exists |
|
|
|
|
* boolean FALSE otherwise. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
function check_name_exist($filePath) |
|
|
|
|
{ |
|
|
|
|
function check_name_exist($file_path) { |
|
|
|
|
clearstatcache(); |
|
|
|
|
$save_dir = getcwd(); |
|
|
|
|
if(!is_dir(dirname($filePath))) |
|
|
|
|
{ |
|
|
|
|
if (!is_dir(dirname($file_path))) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
chdir ( dirname($filePath) ); |
|
|
|
|
$fileName = basename ($filePath); |
|
|
|
|
chdir(dirname($file_path)); |
|
|
|
|
$file_name = basename($file_path); |
|
|
|
|
|
|
|
|
|
if (file_exists( $fileName )) |
|
|
|
|
{ |
|
|
|
|
if (file_exists($file_name)) { |
|
|
|
|
chdir($save_dir); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
} else { |
|
|
|
|
chdir($save_dir); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Delete a file or a directory |
|
|
|
|
* Deletes a file or a directory |
|
|
|
|
* |
|
|
|
|
* @author - Hugues Peeters |
|
|
|
|
* @param - $file (String) - the path of file or directory to delete |
|
|
|
|
@ -125,34 +110,22 @@ function check_name_exist($filePath) |
|
|
|
|
* bolean - false otherwise. |
|
|
|
|
* @see - delete() uses check_name_exist() and removeDir() functions |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
function my_delete($file) |
|
|
|
|
{ |
|
|
|
|
if ( check_name_exist($file) ) |
|
|
|
|
{ |
|
|
|
|
if ( is_file($file) ) // FILE CASE |
|
|
|
|
{ |
|
|
|
|
function my_delete($file) { |
|
|
|
|
if (check_name_exist($file)) { |
|
|
|
|
if (is_file($file)) { // FILE CASE |
|
|
|
|
unlink($file); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
elseif ( is_dir($file) ) // DIRECTORY CASE |
|
|
|
|
{ |
|
|
|
|
} elseif (is_dir($file)) { // DIRECTORY CASE |
|
|
|
|
removeDir($file); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
} else { |
|
|
|
|
return false; // no file or directory to delete |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* removes a directory recursively |
|
|
|
|
* Removes a directory recursively |
|
|
|
|
* |
|
|
|
|
* @returns true if OK, otherwise false |
|
|
|
|
* |
|
|
|
|
@ -161,29 +134,19 @@ function my_delete($file) |
|
|
|
|
* |
|
|
|
|
* @param string $dir directory to remove |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
function removeDir($dir) |
|
|
|
|
{ |
|
|
|
|
if(!@$opendir = opendir($dir)) |
|
|
|
|
{ |
|
|
|
|
function removeDir($dir) { |
|
|
|
|
if (!@$opendir = opendir($dir)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
while($readdir = readdir($opendir)) |
|
|
|
|
{ |
|
|
|
|
if($readdir != '..' && $readdir != '.') |
|
|
|
|
{ |
|
|
|
|
if(is_file($dir.'/'.$readdir)) |
|
|
|
|
{ |
|
|
|
|
if(!@unlink($dir.'/'.$readdir)) |
|
|
|
|
{ |
|
|
|
|
while ($readdir = readdir($opendir)) { |
|
|
|
|
if ($readdir != '..' && $readdir != '.') { |
|
|
|
|
if (is_file($dir.'/'.$readdir)) { |
|
|
|
|
if (!@unlink($dir.'/'.$readdir)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
elseif(is_dir($dir.'/'.$readdir)) |
|
|
|
|
{ |
|
|
|
|
if(!removeDir($dir.'/'.$readdir)) |
|
|
|
|
{ |
|
|
|
|
} elseif (is_dir($dir.'/'.$readdir)) { |
|
|
|
|
if (!removeDir($dir.'/'.$readdir)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -192,66 +155,61 @@ function removeDir($dir) |
|
|
|
|
|
|
|
|
|
closedir($opendir); |
|
|
|
|
|
|
|
|
|
if(!@rmdir($dir)) |
|
|
|
|
{ |
|
|
|
|
if (!@rmdir($dir)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Rename a file or a directory |
|
|
|
|
* Renames a file or a directory |
|
|
|
|
* |
|
|
|
|
* @author - Hugues Peeters <peeters@ipm.ucl.ac.be> |
|
|
|
|
* @param - $filePath (string) - complete path of the file or the directory |
|
|
|
|
* @param - $newFileName (string) - new name for the file or the directory |
|
|
|
|
* @param - $file_path (string) - complete path of the file or the directory |
|
|
|
|
* @param - $new_file_name (string) - new name for the file or the directory |
|
|
|
|
* @return - boolean - true if succeed |
|
|
|
|
* - boolean - false otherwise |
|
|
|
|
* @see - rename() uses the check_name_exist() and php2phps() functions |
|
|
|
|
*/ |
|
|
|
|
function my_rename($file_path, $new_file_name) { |
|
|
|
|
|
|
|
|
|
function my_rename($filePath, $newFileName) |
|
|
|
|
{ |
|
|
|
|
$save_dir = getcwd(); |
|
|
|
|
$path = dirname($filePath); |
|
|
|
|
$oldFileName = basename($filePath); |
|
|
|
|
$path = dirname($file_path); |
|
|
|
|
$old_file_name = basename($file_path); |
|
|
|
|
|
|
|
|
|
$newFileName = replace_dangerous_char($newFileName); |
|
|
|
|
$new_file_name = replace_dangerous_char($new_file_name); |
|
|
|
|
|
|
|
|
|
// If no extension, take the old one |
|
|
|
|
if ((strpos($newFileName, '.') === FALSE) |
|
|
|
|
&& ($dotpos = strrpos($oldFileName, '.'))) |
|
|
|
|
{ |
|
|
|
|
$newFileName .= substr($oldFileName, $dotpos); |
|
|
|
|
if ((strpos($new_file_name, '.') === false) && ($dotpos = strrpos($old_file_name, '.'))) { |
|
|
|
|
$new_file_name .= substr($old_file_name, $dotpos); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Note: still possible: 'xx.yy' -rename-> '.yy' -rename-> 'zz' |
|
|
|
|
// This is useful for folder names, where otherwise '.' would be sticky |
|
|
|
|
|
|
|
|
|
// Extension PHP is not allowed, change to PHPS |
|
|
|
|
$newFileName = php2phps($newFileName); |
|
|
|
|
$new_file_name = php2phps($new_file_name); |
|
|
|
|
|
|
|
|
|
if ($newFileName == $oldFileName) return $oldFileName; |
|
|
|
|
if ($new_file_name == $old_file_name) { |
|
|
|
|
return $old_file_name; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (strtolower($newFileName) != strtolower($oldFileName) && check_name_exist($path."/".$newFileName)) return false; |
|
|
|
|
if (strtolower($new_file_name) != strtolower($old_file_name) && check_name_exist($path.'/'.$new_file_name)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
// On a Windows server, it would be better not to do the above check |
|
|
|
|
// because it succeeds for some new names resembling the old name. |
|
|
|
|
// But on Unix/Linux the check must be done because rename overwrites. |
|
|
|
|
|
|
|
|
|
chdir($path); |
|
|
|
|
$res = rename($oldFileName, $newFileName) ? $newFileName : false; |
|
|
|
|
$res = rename($old_file_name, $new_file_name) ? $new_file_name : false; |
|
|
|
|
chdir($save_dir); |
|
|
|
|
return $res; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Move a file or a directory to an other area |
|
|
|
|
* Moves a file or a directory to an other area |
|
|
|
|
* |
|
|
|
|
* @author - Hugues Peeters <peeters@ipm.ucl.ac.be> |
|
|
|
|
* @param - $source (String) - the path of file or directory to move |
|
|
|
|
@ -260,116 +218,86 @@ function my_rename($filePath, $newFileName) |
|
|
|
|
* bolean - false otherwise. |
|
|
|
|
* @see - move() uses check_name_exist() and copyDirTo() functions |
|
|
|
|
*/ |
|
|
|
|
function move($source, $target) { |
|
|
|
|
|
|
|
|
|
if (check_name_exist($source)) { |
|
|
|
|
$file_name = basename($source); |
|
|
|
|
|
|
|
|
|
function move($source, $target) |
|
|
|
|
{ |
|
|
|
|
if ( check_name_exist($source) ) |
|
|
|
|
{ |
|
|
|
|
$fileName = basename($source); |
|
|
|
|
|
|
|
|
|
if ( check_name_exist($target."/".$fileName) ) |
|
|
|
|
{ |
|
|
|
|
if (check_name_exist($target.'/'.$file_name)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ /* File case */ |
|
|
|
|
if ( is_file($source) ) |
|
|
|
|
{ |
|
|
|
|
copy($source , $target."/".$fileName); |
|
|
|
|
} else { |
|
|
|
|
/* File case */ |
|
|
|
|
if (is_file($source)) { |
|
|
|
|
copy($source , $target.'/'.$file_name); |
|
|
|
|
unlink($source); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
/* Directory case */ |
|
|
|
|
elseif (is_dir($source)) |
|
|
|
|
{ |
|
|
|
|
// check to not copy the directory inside itself |
|
|
|
|
if (ereg("^".$source."/", $target."/")) |
|
|
|
|
{ |
|
|
|
|
elseif (is_dir($source)) { |
|
|
|
|
// Check to not copy the directory inside itself |
|
|
|
|
if (ereg('^'.$source.'/', $target.'/')) { // TODO: ereg() function is deprecated in PHP 5.3 |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
} else { |
|
|
|
|
copyDirTo($source, $target); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
} else { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Move a directory and its content to an other area |
|
|
|
|
* Moves a directory and its content to an other area |
|
|
|
|
* |
|
|
|
|
* @author - Hugues Peeters <peeters@ipm.ucl.ac.be> |
|
|
|
|
* @param - $origDirPath (String) - the path of the directory to move |
|
|
|
|
* @param - $destination (String) - the path of the new area |
|
|
|
|
* @return - no return !! |
|
|
|
|
* @param - $orig_dir_path (string) - the path of the directory to move |
|
|
|
|
* @param - $destination (string) - the path of the new area |
|
|
|
|
* @return - no return |
|
|
|
|
*/ |
|
|
|
|
function copyDirTo($orig_dir_path, $destination, $move = true) { |
|
|
|
|
|
|
|
|
|
function copyDirTo($origDirPath, $destination, $move=true) |
|
|
|
|
{ |
|
|
|
|
$save_dir = getcwd(); |
|
|
|
|
// extract directory name - create it at destination - update destination trail |
|
|
|
|
$dirName = basename($origDirPath); |
|
|
|
|
if(is_dir($dirName)){ |
|
|
|
|
mkdir ($destination."/".$dirName, api_get_permissions_for_new_directories()); |
|
|
|
|
$destinationTrail = $destination."/".$dirName; |
|
|
|
|
// Extract directory name - create it at destination - update destination trail |
|
|
|
|
$dir_name = basename($orig_dir_path); |
|
|
|
|
if (is_dir($dir_name)) { |
|
|
|
|
mkdir($destination.'/'.$dir_name, api_get_permissions_for_new_directories()); |
|
|
|
|
$destination_trail = $destination.'/'.$dir_name; |
|
|
|
|
if (is_dir($destination)) { |
|
|
|
|
chdir ($origDirPath) ; |
|
|
|
|
$handle = opendir($origDirPath); |
|
|
|
|
chdir ($orig_dir_path) ; |
|
|
|
|
$handle = opendir($orig_dir_path); |
|
|
|
|
|
|
|
|
|
while ($element = readdir($handle) ) |
|
|
|
|
{ |
|
|
|
|
if ( $element == "." || $element == "..") |
|
|
|
|
{ |
|
|
|
|
continue; // skip the current and parent directories |
|
|
|
|
} |
|
|
|
|
elseif ( is_file($element) ) |
|
|
|
|
{ |
|
|
|
|
copy($element, $destinationTrail."/".$element); |
|
|
|
|
while ($element = readdir($handle)) { |
|
|
|
|
if ( $element == '.' || $element == '..') { |
|
|
|
|
continue; // Skip the current and parent directories |
|
|
|
|
} elseif (is_file($element)) { |
|
|
|
|
copy($element, $destination_trail.'/'.$element); |
|
|
|
|
|
|
|
|
|
if($move) |
|
|
|
|
{ |
|
|
|
|
if ($move) { |
|
|
|
|
unlink($element) ; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
elseif ( is_dir($element) ) |
|
|
|
|
{ |
|
|
|
|
$dirToCopy[] = $origDirPath."/".$element; |
|
|
|
|
} elseif (is_dir($element)) { |
|
|
|
|
$dir_to_copy[] = $orig_dir_path.'/'.$element; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
closedir($handle) ; |
|
|
|
|
|
|
|
|
|
if ( sizeof($dirToCopy) > 0) |
|
|
|
|
{ |
|
|
|
|
foreach($dirToCopy as $thisDir) |
|
|
|
|
{ |
|
|
|
|
copyDirTo($thisDir, $destinationTrail, $move); // recursivity |
|
|
|
|
if (sizeof($dir_to_copy) > 0) { |
|
|
|
|
foreach ($dir_to_copy as $this_dir) { |
|
|
|
|
copyDirTo($this_dir, $destination_trail, $move); // Recursivity |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if($move) |
|
|
|
|
{ |
|
|
|
|
rmdir ($origDirPath) ; |
|
|
|
|
if ($move) { |
|
|
|
|
rmdir($orig_dir_path) ; |
|
|
|
|
} |
|
|
|
|
chdir($save_dir); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* NOTE: These functions batch is used to automatically build HTML forms |
|
|
|
|
* with a list of the directories contained on the course Directory. |
|
|
|
|
* |
|
|
|
|
@ -384,35 +312,33 @@ function copyDirTo($origDirPath, $destination, $move=true) |
|
|
|
|
* @param - path (string) - directory path of the one to index |
|
|
|
|
* @return - an array containing the path of all the subdirectories |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
function index_dir($path) { |
|
|
|
|
$dirArray = array(); |
|
|
|
|
$dir_array = array(); |
|
|
|
|
$save_dir = getcwd(); |
|
|
|
|
if (is_dir($path)){ |
|
|
|
|
chdir($path); |
|
|
|
|
$handle = opendir($path); |
|
|
|
|
// reads directory content end record subdirectoies names in $dir_array |
|
|
|
|
// Reads directory content end record subdirectoies names in $dir_array |
|
|
|
|
if ($handle !== false) { |
|
|
|
|
while ($element = readdir($handle)) { |
|
|
|
|
if ( $element == "." || $element == "..") continue; // skip the current and parent directories |
|
|
|
|
if ( is_dir($element) ) $dirArray[] = $path."/".$element; |
|
|
|
|
if ($element == '.' || $element == '..') continue; // Skip the current and parent directories |
|
|
|
|
if (is_dir($element)) $dir_array[] = $path.'/'.$element; |
|
|
|
|
} |
|
|
|
|
closedir($handle) ; |
|
|
|
|
} |
|
|
|
|
// recursive operation if subdirectories exist |
|
|
|
|
$dirNumber = sizeof($dirArray); |
|
|
|
|
if ( $dirNumber > 0 ) { |
|
|
|
|
for ($i = 0 ; $i < $dirNumber ; $i++ ) { |
|
|
|
|
$subDirArray = index_dir( $dirArray[$i] ) ; // function recursivity |
|
|
|
|
$dirArray = array_merge( (array)$dirArray , (array)$subDirArray ); // data merge |
|
|
|
|
// Recursive operation if subdirectories exist |
|
|
|
|
$dir_number = sizeof($dir_array); |
|
|
|
|
if ($dir_number > 0) { |
|
|
|
|
for ($i = 0 ; $i < $dir_number ; $i++) { |
|
|
|
|
$sub_dir_array = index_dir($dir_array[$i]); // Function recursivity |
|
|
|
|
$dir_array = array_merge((array)$dir_array, (array)$sub_dir_array); // Data merge |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
chdir($save_dir) ; |
|
|
|
|
return $dirArray ; |
|
|
|
|
return $dir_array ; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Indexes all the directories and subdirectories |
|
|
|
|
* contented in a given directory, and sort them alphabetically |
|
|
|
|
@ -423,123 +349,91 @@ function index_dir($path) { |
|
|
|
|
* false, if there is no directory |
|
|
|
|
* @see - index_and_sort_dir uses the index_dir() function |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
function index_and_sort_dir($path) |
|
|
|
|
{ |
|
|
|
|
function index_and_sort_dir($path) { |
|
|
|
|
$dir_list = index_dir($path); |
|
|
|
|
|
|
|
|
|
if ($dir_list) |
|
|
|
|
{ |
|
|
|
|
//sort($dir_list); |
|
|
|
|
if ($dir_list) { |
|
|
|
|
natsort($dir_list); |
|
|
|
|
|
|
|
|
|
return $dir_list; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* build an html form listing all directories of a given directory |
|
|
|
|
* Builds a html form listing all directories of a given directory |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
function form_dir_list($source_type, $source_component, $command, $base_work_dir) { |
|
|
|
|
|
|
|
|
|
function form_dir_list($sourceType, $sourceComponent, $command, $baseWorkDir) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
$dirList = index_and_sort_dir($baseWorkDir); |
|
|
|
|
$dialogBox .= "<form action=\"".api_get_self()."\" method=\"post\">\n" ; |
|
|
|
|
$dialogBox .= "<input type=\"hidden\" name=\"".$sourceType."\" value=\"".$sourceComponent."\">\n" ; |
|
|
|
|
$dialogBox .= get_lang('Move').' '.$sourceComponent.' '.get_lang('To'); |
|
|
|
|
$dialogBox .= "<select name=\"".$command."\">\n" ; |
|
|
|
|
$dialogBox .= "<option value=\"\" style=\"color:#999999\">".get_lang('Root')."\n"; |
|
|
|
|
$dir_list = index_and_sort_dir($base_work_dir); |
|
|
|
|
$dialog_box .= "<form action=\"".api_get_self()."\" method=\"post\">\n" ; |
|
|
|
|
$dialog_box .= "<input type=\"hidden\" name=\"".$source_type."\" value=\"".$source_component."\">\n" ; |
|
|
|
|
$dialog_box .= get_lang('Move').' '.$source_component.' '.get_lang('To'); |
|
|
|
|
$dialog_box .= "<select name=\"".$command."\">\n" ; |
|
|
|
|
$dialog_box .= "<option value=\"\" style=\"color:#999999\">".get_lang('Root')."\n"; |
|
|
|
|
|
|
|
|
|
$bwdLen = strlen($baseWorkDir) ; // base directories lenght, used under |
|
|
|
|
$bwdLen = strlen($base_work_dir) ; // base directories lenght, used under |
|
|
|
|
|
|
|
|
|
/* build html form inputs */ |
|
|
|
|
if ($dirList) |
|
|
|
|
{ |
|
|
|
|
while (list( , $pathValue) = each($dirList) ) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
$pathValue = substr ( $pathValue , $bwdLen ); // truncate cunfidential informations confidentielles |
|
|
|
|
$dirname = basename ($pathValue); // extract $pathValue directory name du nom |
|
|
|
|
if ($dir_list) { |
|
|
|
|
while (list( , $path_value) = each($dir_list) ) { |
|
|
|
|
$path_value = substr ( $path_value , $bwdLen ); // Truncates cunfidential informations confidentielles |
|
|
|
|
$dirname = basename ($path_value); // Extracts $path_value directory name du nom |
|
|
|
|
|
|
|
|
|
/* compute de the display tab */ |
|
|
|
|
|
|
|
|
|
$tab = ""; // $tab reinitialisation |
|
|
|
|
$depth = substr_count($pathValue, "/"); // The number of nombre '/' indicates the directory deepness |
|
|
|
|
$depth = substr_count($path_value, '/'); // The number of nombre '/' indicates the directory deepness |
|
|
|
|
|
|
|
|
|
for ($h=0; $h<$depth; $h++) |
|
|
|
|
{ |
|
|
|
|
for ($h = 0; $h < $depth; $h++) { |
|
|
|
|
$tab .= " "; |
|
|
|
|
} |
|
|
|
|
$dialogBox .= "<option value=\"$pathValue\">$tab>$dirname\n"; |
|
|
|
|
$dialog_box .= "<option value=\"$path_value\">$tab>$dirname\n"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$dialogBox .= "</select>\n"; |
|
|
|
|
$dialogBox .= "<input type=\"submit\" value=\"".get_lang('Ok')."\">"; |
|
|
|
|
$dialogBox .= "</form>\n"; |
|
|
|
|
$dialog_box .= "</select>\n"; |
|
|
|
|
$dialog_box .= "<input type=\"submit\" value=\"".get_lang('Ok')."\">"; |
|
|
|
|
$dialog_box .= "</form>\n"; |
|
|
|
|
|
|
|
|
|
return $dialogBox; |
|
|
|
|
return $dialog_box; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* to extract the extention of the filename |
|
|
|
|
* Extracting extention of a filename |
|
|
|
|
* |
|
|
|
|
* @returns array |
|
|
|
|
* @param string $filename filename |
|
|
|
|
*/ |
|
|
|
|
function getextension($filename) |
|
|
|
|
{ |
|
|
|
|
$bouts = explode(".", $filename); |
|
|
|
|
return array(array_pop($bouts), implode(".", $bouts)); |
|
|
|
|
function getextension($filename) { |
|
|
|
|
$bouts = explode('.', $filename); |
|
|
|
|
return array(array_pop($bouts), implode('.', $bouts)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* to compute the size of the directory |
|
|
|
|
* Calculation size of a directory |
|
|
|
|
* |
|
|
|
|
* @returns integer size |
|
|
|
|
* @param string $path path to size |
|
|
|
|
* @param boolean $recursive if true , include subdir in total |
|
|
|
|
*/ |
|
|
|
|
function dirsize($root,$recursive=true) |
|
|
|
|
{ |
|
|
|
|
function dirsize($root, $recursive = true) { |
|
|
|
|
$dir = @opendir($root); |
|
|
|
|
|
|
|
|
|
$size = 0; |
|
|
|
|
|
|
|
|
|
while($file=@readdir($dir)) |
|
|
|
|
{ |
|
|
|
|
if(!in_array($file,array('.','..'))) |
|
|
|
|
{ |
|
|
|
|
if(is_dir($root.'/'.$file)) |
|
|
|
|
{ |
|
|
|
|
while ($file = @readdir($dir)) { |
|
|
|
|
if (!in_array($file, array('.', '..'))) { |
|
|
|
|
if (is_dir($root.'/'.$file)) { |
|
|
|
|
$size += $recursive ? dirsize($root.'/'.$file) : 0; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
} else { |
|
|
|
|
$size += @filesize($root.'/'.$file); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@closedir($dir); |
|
|
|
|
|
|
|
|
|
return $size; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
=============================================================== |
|
|
|
|
CLASS FileManager |
|
|
|
|
=============================================================== |
|
|
|
|
*/ |
|
|
|
|
/* CLASS FileManager */ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
This class contains functions that you can access statically. |
|
|
|
|
@ -556,7 +450,6 @@ class FileManager |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
--------------------------------------------------------------- |
|
|
|
|
Returns a list of all directories, except the base dir, |
|
|
|
|
of the current course. This function uses recursion. |
|
|
|
|
|
|
|
|
|
@ -564,103 +457,82 @@ class FileManager |
|
|
|
|
|
|
|
|
|
@author Roan Embrechts |
|
|
|
|
@version 1.0.1 |
|
|
|
|
--------------------------------------------------------------- |
|
|
|
|
*/ |
|
|
|
|
function list_all_directories($path) |
|
|
|
|
{ |
|
|
|
|
$resultArray = array(); |
|
|
|
|
function list_all_directories($path) { |
|
|
|
|
|
|
|
|
|
$result_array = array(); |
|
|
|
|
if (is_dir($path)) { |
|
|
|
|
$save_dir = getcwd(); |
|
|
|
|
chdir($path); |
|
|
|
|
$handle = opendir($path); |
|
|
|
|
while ($element = readdir($handle) ) |
|
|
|
|
{ |
|
|
|
|
if ( $element == "." || $element == "..") continue; // skip the current and parent directories |
|
|
|
|
if ( is_dir($element) ) |
|
|
|
|
{ |
|
|
|
|
$dirArray[] = $path."/".$element; |
|
|
|
|
while ($element = readdir($handle)) { |
|
|
|
|
if ($element == '.' || $element == '..') continue; // Skip the current and parent directories |
|
|
|
|
if (is_dir($element)) { |
|
|
|
|
$dir_array[] = $path.'/'.$element; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
closedir($handle); |
|
|
|
|
// recursive operation if subdirectories exist |
|
|
|
|
$dirNumber = sizeof($dirArray); |
|
|
|
|
if ( $dirNumber > 0 ) |
|
|
|
|
{ |
|
|
|
|
for ($i = 0 ; $i < $dirNumber ; $i++ ) |
|
|
|
|
{ |
|
|
|
|
$subDirArray = FileManager::list_all_directories($dirArray[$i]) ; // function recursivity |
|
|
|
|
if (is_array($dirArray) && is_array($subDirArray)) { |
|
|
|
|
$dirArray = array_merge( $dirArray , $subDirArray ) ; // data merge |
|
|
|
|
// Recursive operation if subdirectories exist |
|
|
|
|
$dir_number = sizeof($dir_array); |
|
|
|
|
if ($dir_number > 0) { |
|
|
|
|
for ($i = 0 ; $i < $dir_number ; $i++) { |
|
|
|
|
$sub_dir_array = FileManager::list_all_directories($dir_array[$i]); // Function recursivity |
|
|
|
|
if (is_array($dir_array) && is_array($sub_dir_array)) { |
|
|
|
|
$dir_array = array_merge($dir_array, $sub_dir_array); // Data merge |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$resultArray = $dirArray; |
|
|
|
|
$result_array = $dir_array; |
|
|
|
|
chdir($save_dir) ; |
|
|
|
|
} |
|
|
|
|
return $resultArray ; |
|
|
|
|
return $result_array ; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
=============================================================== |
|
|
|
|
This function receives a list of directories. |
|
|
|
|
It returns a list of all files in these directories |
|
|
|
|
|
|
|
|
|
@author Roan Embrechts |
|
|
|
|
@version 1.0 |
|
|
|
|
=============================================================== |
|
|
|
|
*/ |
|
|
|
|
function list_all_files($dirArray) |
|
|
|
|
{ |
|
|
|
|
$elementArray = array(); |
|
|
|
|
if(is_dir($dirArray)) |
|
|
|
|
{ |
|
|
|
|
function list_all_files($dir_array) { |
|
|
|
|
|
|
|
|
|
$element_array = array(); |
|
|
|
|
if (is_dir($dir_array)) { |
|
|
|
|
|
|
|
|
|
$save_dir = getcwd(); |
|
|
|
|
foreach ($dirArray as $directory) |
|
|
|
|
{ |
|
|
|
|
foreach ($dir_array as $directory) { |
|
|
|
|
chdir($directory); |
|
|
|
|
$handle = opendir($directory); |
|
|
|
|
while ($element = readdir($handle) ) |
|
|
|
|
{ |
|
|
|
|
if ( $element == "." || $element == ".." || $element == '.htaccess') continue; // skip the current and parent directories |
|
|
|
|
if ( ! is_dir($element) ) |
|
|
|
|
{ |
|
|
|
|
$elementArray[] = $directory."/".$element; |
|
|
|
|
while ($element = readdir($handle)) { |
|
|
|
|
if ($element == '.' || $element == '..' || $element == '.htaccess') continue; // Skip the current and parent directories |
|
|
|
|
if (!is_dir($element)) { |
|
|
|
|
$element_array[] = $directory.'/'.$element; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
closedir($handle); |
|
|
|
|
chdir("..") ; |
|
|
|
|
chdir('..'); |
|
|
|
|
chdir($save_dir); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return $elementArray; |
|
|
|
|
|
|
|
|
|
return $element_array; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
Load contents of file $filename into memory |
|
|
|
|
and return them as a string. |
|
|
|
|
Loads contents of file $filename into memory and returns them as a string. |
|
|
|
|
Function kept for compatibility with older PHP versions. |
|
|
|
|
Function is binary safe (is needed on Windows) |
|
|
|
|
*/ |
|
|
|
|
function compat_load_file($file_name) |
|
|
|
|
{ |
|
|
|
|
function compat_load_file($file_name) { |
|
|
|
|
$buffer = ''; |
|
|
|
|
if(file_exists($file_name)) |
|
|
|
|
{ |
|
|
|
|
$fp = fopen($file_name, "rb"); |
|
|
|
|
if (file_exists($file_name)) { |
|
|
|
|
$fp = fopen($file_name, 'rb'); |
|
|
|
|
$buffer = fread ($fp, filesize($file_name)); |
|
|
|
|
fclose ($fp); |
|
|
|
|
//api_display_debug_info(htmlentities($buffer)); |
|
|
|
|
} |
|
|
|
|
return $buffer; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Adds file/folder to document table in database |
|
|
|
|
* improvement from set_default_settings (see below): |
|
|
|
|
@ -678,41 +550,35 @@ class FileManager |
|
|
|
|
* @author Roan Embrechts |
|
|
|
|
* @version 1.2 |
|
|
|
|
*/ |
|
|
|
|
function set_default_settings($upload_path, $filename, $filetype="file", $glued_table, $default_visibility='v') |
|
|
|
|
{ |
|
|
|
|
if (!$default_visibility) $default_visibility="v"; |
|
|
|
|
function set_default_settings($upload_path, $filename, $filetype = 'file', $glued_table, $default_visibility = 'v') { |
|
|
|
|
if (!$default_visibility) $default_visibility = 'v'; |
|
|
|
|
|
|
|
|
|
//make sure path is not wrongly formed |
|
|
|
|
if( strlen($upload_path) ) $upload_path = "/$upload_path"; |
|
|
|
|
else $upload_path = ""; |
|
|
|
|
// Make sure path is not wrongly formed |
|
|
|
|
$upload_path = !empty($upload_path) ? "/$upload_path" : ''; |
|
|
|
|
|
|
|
|
|
$endchar = substr($filename, strlen($filename) - 1, 1); |
|
|
|
|
if($endchar=="\\" || $endchar=="/") |
|
|
|
|
{ |
|
|
|
|
if ($endchar == "\\" || $endchar == '/') { |
|
|
|
|
$filename = substr($filename, 0, strlen($filename) - 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$full_file_name = $upload_path."/".$filename; |
|
|
|
|
//$upload_path = str_replace("//", "/", $upload_path); |
|
|
|
|
$full_file_name = str_replace("//", "/", $full_file_name); |
|
|
|
|
$full_file_name = $upload_path.'/'.$filename; |
|
|
|
|
//$upload_path = str_replace("//", '/', $upload_path); |
|
|
|
|
$full_file_name = str_replace("//", '/', $full_file_name); |
|
|
|
|
|
|
|
|
|
$sql_query = "SELECT count(*) as number_existing FROM $glued_table WHERE path='$full_file_name'"; |
|
|
|
|
//api_display_debug_info($sql_query); |
|
|
|
|
$sql_result = Database::query($sql_query); |
|
|
|
|
$result = Database::fetch_array($sql_result); |
|
|
|
|
//determine which query to execute |
|
|
|
|
if( $result["number_existing"] > 0 ) |
|
|
|
|
{ |
|
|
|
|
//entry exists, update |
|
|
|
|
// Determine which query to execute |
|
|
|
|
if ($result['number_existing'] > 0) { |
|
|
|
|
// Entry exists, update |
|
|
|
|
$query = "UPDATE $glued_table SET path='$full_file_name',visibility='$default_visibility', filetype='$filetype' WHERE path='$full_file_name'"; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
//no entry exists, create new one |
|
|
|
|
} else { |
|
|
|
|
// No entry exists, create new one |
|
|
|
|
$query = "INSERT INTO $glued_table (path,visibility,filetype) VALUES('$full_file_name','$default_visibility','$filetype')"; |
|
|
|
|
} |
|
|
|
|
Database::query($query); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Like in Java, creates the directory named by this abstract pathname, |
|
|
|
|
* including any necessary but nonexistent parent directories. |
|
|
|
|
@ -725,14 +591,10 @@ class FileManager |
|
|
|
|
* |
|
|
|
|
* @return boolean TRUE if succeeds FALSE otherwise |
|
|
|
|
*/ |
|
|
|
|
function mkdirs($path, $mode = '0770') |
|
|
|
|
{ |
|
|
|
|
if (file_exists($path)) |
|
|
|
|
{ |
|
|
|
|
function mkdirs($path, $mode = '0770') { |
|
|
|
|
if (file_exists($path)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
} else { |
|
|
|
|
FileManager :: mkdirs(dirname($path), $mode); |
|
|
|
|
//mkdir($path, $mode); |
|
|
|
|
return true; |
|
|
|
|
@ -742,11 +604,7 @@ class FileManager |
|
|
|
|
} //end class FileManager |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
=============================================================== |
|
|
|
|
DEPRECATED FUNCTIONS |
|
|
|
|
=============================================================== |
|
|
|
|
*/ |
|
|
|
|
/* DEPRECATED FUNCTIONS */ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @deprecated 06-FEB-2010. The function mkdir() is able to create directories recursively. |
|
|
|
|
@ -763,56 +621,43 @@ class FileManager |
|
|
|
|
* @param string $mode fix if chmod is same of parent or default (Note: This misterious parameter is not used). |
|
|
|
|
* @global string $langCreatedIn string to say "create in" |
|
|
|
|
*/ |
|
|
|
|
function mkpath($path, $verbose = false, $mode = "herit") |
|
|
|
|
{ |
|
|
|
|
function mkpath($path, $verbose = false, $mode = 'herit') { |
|
|
|
|
global $langCreatedIn, $_configuration; |
|
|
|
|
|
|
|
|
|
$path = str_replace("/", "\\", $path); |
|
|
|
|
$path = str_replace('/', "\\", $path); |
|
|
|
|
$dirs = explode("\\", $path); |
|
|
|
|
|
|
|
|
|
$path = $dirs[0]; |
|
|
|
|
|
|
|
|
|
if ($verbose) |
|
|
|
|
{ |
|
|
|
|
echo "<ul>"; |
|
|
|
|
if ($verbose) { |
|
|
|
|
echo '<ul>'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for ($i = 1; $i < sizeof($dirs); $i++) |
|
|
|
|
{ |
|
|
|
|
for ($i = 1; $i < sizeof($dirs); $i++) { |
|
|
|
|
$path .= '/'.$dirs[$i]; |
|
|
|
|
|
|
|
|
|
if (ereg('^'.$path,$_configuration['root_sys']) && strlen($path) < strlen($_configuration['root_sys'])) |
|
|
|
|
{ |
|
|
|
|
if (ereg('^'.$path, $_configuration['root_sys']) && strlen($path) < strlen($_configuration['root_sys'])) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!is_dir($path)) |
|
|
|
|
{ |
|
|
|
|
if (!is_dir($path)) { |
|
|
|
|
$ret = mkdir($path, api_get_permissions_for_new_directories()); |
|
|
|
|
|
|
|
|
|
if ($ret) |
|
|
|
|
{ |
|
|
|
|
if($verbose) |
|
|
|
|
{ |
|
|
|
|
if ($ret) { |
|
|
|
|
if ($verbose) { |
|
|
|
|
echo '<li><strong>'.basename($path).'</strong><br />'.$langCreatedIn.'<br /><strong>'.realpath($path.'/..').'</strong></li>'; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if ($verbose) |
|
|
|
|
{ |
|
|
|
|
} else { |
|
|
|
|
if ($verbose) { |
|
|
|
|
echo '</ul>error : '.$path.' not created'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$ret = false; |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($verbose) |
|
|
|
|
{ |
|
|
|
|
if ($verbose) { |
|
|
|
|
echo '</ul>'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|