<?php
 
 
/*
 
    +------------------------------------------+
 
    |  Sistema que monta árvore de diretórios  |
 
    +--                                      --+
 
    |  Sistema desenvolvido em: PHP            |
 
    +------------------------------------------+
 
    |  @access        restrict
 
    |
 
    |  @author        Paulo Afonso Alcântara
 
    |
 
    |  @contact        [email protected]
 
    |
 
    |  @package        WIMAJAX!
 
    |
 
    |  @version        0.1.0.0
 
    |
 
    |  @released    02.08.2006
 
    |
 
    +------------------------------------------+
 
    |
 
    | -> Esta classe é de uso livre, mas deve-se manter os créditos do autor(estão logo acima)
 
    | e deixar versões baseadas/derivadas desta para uso livre.
 
    |
 
    | -> Ainda não testada em PHP 5x. Se você é um usuário autorizado e quizer testar no PHP 5x,
 
    | por favor me informe como este sistema se sai nesta nova versão do PHP.
 
    |
 
    | -> Se você leu até aqui, obrigado.  :)
 
    |
 
    +------------------------------------------+
 
*/
 
 
/*
 
    +-- Este arquivo: --+
 
    |
 
    | @name        ArvorePastas_class02_ptbr.inc.class.php
 
    |
 
    | -> Este arquivo contém uma classe que cria uma árvore de diretórios.
 
    |
 
    +-------------------+
 
*/
 
 
// ********** COMEÇO DA CLASSE "ArvorePastas" **********
 
class ArvorePastas{
 
 
    // Este é o construtor da classe
 
    function ArvorePastas($diretorio="",$html="",$ini="nu",$dif="nu") {
 
        $this->diretorio = $diretorio;
 
        $this->nivel = -1;
 
        $this->barra = DIRECTORY_SEPARATOR;
 
        $this->html = $html;
 
        $this->ini = $ini;
 
        $this->dif = $dif;
 
        if ( !empty($this->diretorio) ) {
 
            $this->LerPasta($this->diretorio,$this->nivel);
 
        } else {
 
            return false;
 
        }
 
    }
 
 
    // Esta função lê o diretório passado no parâmetro $nome_dir
 
    function LerPasta($nome_dir="",$nivel) {
 
 
        if ( !empty($nome_dir) ) {
 
        
 
            // O Diretorio especificado é aberto com extensão DIR do php
 
            $grupo = dir($nome_dir) or die("Erro: Diretório solicitado inexistente!");
 
 
            // Inicia um contador/iterador em zero(que é o número padrao inicial em arrays no php)
 
            $i_g = 1;
 
        
 
            $lista_grupo = Array();
 
            
 
            // Lê arquivo por arquivo o diretório especificado
 
            while (false !== ($grupo_file = $grupo->read())) {
 
                if( $grupo_file != "." and $grupo_file != ".." and is_dir($nome_dir . $this->barra . $grupo_file) ) {
 
                    $lista_grupo['abs'][$i_g] = $nome_dir . $this->barra . $grupo_file;
 
                    $lista_grupo['rel'][$i_g] = $grupo_file;
 
                    $lista_grupo['niv'][$i_g] = $nivel + 1;
 
                    $i_g++;
 
                }
 
            }
 
            $grupo->close();
 
        
 
            // Verifica se a variável que retorna o array com os diretórios e níveis está do modo esperado
 
            if ( isset($lista_grupo['rel']) and isset($lista_grupo['abs']) and is_array($lista_grupo['abs']) and count($lista_grupo['abs']) >= 1 ) {
 
                // Chama a função que monta a árvore com os diretórios com base nos seus respectivos níveis
 
                $this->ExibePasta($lista_grupo['abs'],$lista_grupo['rel'],$lista_grupo['niv']);
 
                return "Diretório lido com sucesso.";
 
            } else {
 
                return "Erro na leitura dos dados.";
 
            }
 
        
 
        } else {
 
            
 
            return "Erro na leitura dos dados.";
 
            
 
        }
 
 
    }
 
 
    // Função que monta e exibe a árvore de diterótios com base nos seus respectivos níveis
 
    function ExibePasta($caminho_dir=0, $nome_dir=0, $nivel_dir=0) {
 
 
        if ( is_array($caminho_dir) and is_array($nome_dir) and is_array($nivel_dir) and count($caminho_dir) >= 1 ) {
 
            // Inicia um iterador para ser usado nesta função e apenas na leitura do diretório especificicado
 
            $i_gb = 1;
 
            
 
            while ($i_gb <= count($caminho_dir)) {
 
                if ( $this->ini == 'pdr' ) {
 
                    echo 'Nível do diretório: ' . $nivel_dir[$i_gb] . ' ';
 
                } else if ( $this->ini != 'nu' ) {
 
                    $newini = str_replace ("{nome}", $nome_dir[$i_gb], $this->ini);
 
                    $newini = str_replace ("{nivel}", $nivel_dir[$i_gb], $this->ini);
 
                    echo $newini;
 
                    unset($newini);
 
                }
 
                if ( $this->dif == 'pdr' ) {
 
                    for ($i=$nivel_dir[$i_gb]; $i > 0; $i--) {
 
                        echo '_';
 
                    }
 
                } else if ( $this->dif != 'nu' ) {
 
                    for ($i=$nivel_dir[$i_gb]; $i > 0; $i--) {
 
                        echo $this->dif;
 
                    }
 
                }
 
                
 
                // Exibe a árvore com XHTML
 
                if ( $this->html == "" ) {
 
                    echo '<a href="' . $caminho_dir[$i_gb] . '" title="' . $caminho_dir[$i_gb] . '">' . $nome_dir[$i_gb] . '</a>';
 
                    echo '<br />';
 
                } else {
 
                    $newhtml = str_replace ("{caminho}", $caminho_dir[$i_gb], $this->html);
 
                    $newhtml = str_replace ("{nome}", $nome_dir[$i_gb], $newhtml);
 
                    $newhtml = str_replace ("{nivel}", $nivel_dir[$i_gb], $newhtml);
 
                    echo $newhtml;
 
                    unset($newhtml);
 
                }
 
                $this->LerPasta($caminho_dir[$i_gb],$nivel_dir[$i_gb]);
 
                $i_gb++;
 
            }
 
            unset($i_gb);
 
            return "Sucesso na realização.";
 
        } else {
 
            return "Erro na leitura dos dados.";
 
        }
 
 
    }
 
 
}
 
// ********** TÉMINO DA CLASSE "ArvorePastas" **********
 
 
?>
 
 |