Location: PHPKode > scripts > Admidio > admidio-2.2.9/adm_program/system/classes/folder.php
<?php
/******************************************************************************
 * Klasse zum vereinfachten Umgang mit Dateiordnern
 *
 * Copyright    : (c) 2004 - 2011 The Admidio Team
 * Homepage     : http://www.admidio.org
 * License      : GNU Public License 2 http://www.gnu.org/licenses/gpl-2.0.html
 *
 * Mit dieser Klasse koennen Ordner leichter verwaltet werden. Das rekursive Verschieben, 
 * Kopieren, Loeschen uvw. wird unterstuetzt.
 *
 * Folgende Funktionen stehen zur Verfuegung:
 *
 * setFolder($folderWithPath = '') - Ordner mit zugehoerigem Pfad setzen
 * getFolder()           - Ordner zurueckgeben
 * createFolder($newFolder, $writeable)     - den Ordner ggf. mit Schreibrechten erstellen
 * copy($destinationFolder, $sourceFolder = '')
 *                       - kopiert den kompletten Ordner mit allen Unterordnern und 
 *                         Dateien in einen neuen Pfad
 * delete($folder = '')  - der Ordner wird mit allen Unterordnern / Dateien geloescht
 * move($destinationFolder, $sourceFolder = '')
 *                       - verschiebt den kompletten Ordner mit allen Unterordnern 
 *                         und Dateien in einen neuen Pfad
 *
 *****************************************************************************/

class Folder
{
    protected $folderWithPath;

    public function __construct($folderWithPath = '')
    {
        $this->folderWithPath = '';
        if(strlen($folderWithPath) > 0 && is_dir($folderWithPath))
        {
            $this->folderWithPath = $folderWithPath;
        }
    }
    
    // Ordner mit zugehoerigem Pfad setzen
    public function setFolder($folderWithPath = '')
    {
        if(strlen($folderWithPath) > 0 && is_dir($folderWithPath))
        {
            $this->folderWithPath = $folderWithPath;
        }
    }
    
    // Ordner zurueckgeben
    public function getFolder()
    {
        return $this->folderWithPath;
    }
    
    // den Ordner der Klasse mit Schreibrechten erstellen
    public function createFolder($newFolder, $writeable)
    {
		$newPath = $this->folderWithPath. '/'. $newFolder;
		$retCode = true;

        // existiert der Ordner noch nicht, dann diesen anlegen
        if(file_exists($newPath) == false)
        {
            if($writeable)
            {
                $retCode = @mkdir($newPath, 0777);
            }
            else
            {
                $retCode = @mkdir($newPath);
            }
        }

        if($writeable)
        {
            // der Ordner existiert, aber die Schreibrechte noch nicht
            if(is_writeable($newPath) == false)
            {
                $retCode = @chmod($newPath, 0777);
            }
        }
        return $retCode;
    }
    
    // kopiert den kompletten Ordner mit allen Unterordnern und Dateien in einen neuen Pfad
    // destinationFolder : das neue Zielverzeichnis
    // sourceFolder      : der zu kopierende Ordner, falls nicht gefuellt wird der Ordner aus der Klasse genommen
    public function copy($destinationFolder, $sourceFolder = '')
    {
        if(strlen($sourceFolder) == 0)
        {
            $sourceFolder = $this->folderWithPath;
        }

		// erst einmal vom Zielpfad den letzten Ordner absplitten, damit dieser angelegt werden kann
		$newFolder = substr($destinationFolder, strrpos($destinationFolder, '/') + 1);
		$newPath   = substr($destinationFolder, 0, strrpos($destinationFolder, '/'));
		
        // nun erst einmal den Zielordner erstellen
        $this->setFolder($newPath);
        $b_return = $this->createFolder($newFolder, true);
        
        if($b_return == true)
        {
            $dh  = @opendir($sourceFolder);
            if($dh)
            {
                while (false !== ($filename = readdir($dh)))
                {
                    if($filename != '.' && $filename != '..')
                    {
                        $act_folder_entry = $sourceFolder.'/'.$filename;

                        if(is_dir($act_folder_entry))
                        {
                            // nun Inhalt des entsprechenden Ordners loeschen
                            $this->copy($destinationFolder.'/'.$filename, $act_folder_entry);
                        }
                        else
                        {
                            // die Datei loeschen
                            if(file_exists($act_folder_entry))
                            {
                                if(copy($act_folder_entry, $destinationFolder.'/'.$filename) == false)
                                {
                                    return false;
                                }
                            }
                        }
                    }
                }
                closedir($dh);
            }
        }
        else
        {
            return false;
        }

        return true;
    }
        
    // der Ordner wird mit allen Unterordnern / Dateien geloescht
    public function delete($folder = '')
    {
        if(strlen($folder) == 0)
        {
            $folder = $this->folderWithPath;
        }
        
        $dh  = @opendir($folder);
        if($dh)
        {
            while (false !== ($filename = readdir($dh)))
            {
                if($filename != '.' && $filename != '..')
                {
                    $act_folder_entry = $folder.'/'.$filename;

                    if(is_dir($act_folder_entry))
                    {
                        // nun Inhalt des entsprechenden Ordners loeschen
                        $this->delete($act_folder_entry);
                    }
                    else
                    {
                        // die Datei loeschen
                        if(file_exists($act_folder_entry))
                        {
                            if(@unlink($act_folder_entry) == false)
                            {
                                return false;
                            }
                        }
                    }
                }
            }
            closedir($dh);
        }

        // nun noch den aktuellen selber Ordner loeschen
        if(@rmdir($folder) == false)
        {
            return false;
        }
        return true;
    }
    
    // verschiebt den kompletten Ordner mit allen Unterordnern und Dateien in einen neuen Pfad
    // destinationFolder : das neue Zielverzeichnis
    // sourceFolder      : der zu verschiebende Ordner, falls nicht gefuellt wird der Ordner aus der Klasse genommen    
    public function move($destinationFolder, $sourceFolder = '')
    {
        if(strlen($sourceFolder) == 0)
        {
            $sourceFolder = $this->folderWithPath;
        }
        
        // erst den kompletten Ordner kopieren und danach im erfolgsfall loeschen
        if($this->copy($destinationFolder, $sourceFolder) == true)
        {
            return $this->delete($sourceFolder);
        }
        return false;
    }
}
?>
Return current item: Admidio