<?php 
   
/** 
 * The objective of the repository is to provide HTML, PHP, and JavaScript code to manage a folder where images are stored.. 
 * @author António Lira Fernandes 
 * @version 2.1 
 * @updated 301-03-2023 21:50:00 
 * https://github.com/alfZone/imagesFolderNavegation 
 */ 
 
//require __DIR__ . '/../config.php'; 
//require __DIR__ . '/../bootstrap.php'; 
 
  use classes\string\Strings;   
 
  //Text string and definitions 
 
  //$URL_BASE="/images"; 
  $URL_BASE="<Path in the website's URL>";  
  // to see complete path use getcwd 
  //echo getcwd(); 
  //$DIR_BASE="/home/esmonser/justicaepazviana.pt/images"; 
  $DIR_BASE="<Full path to the folder in the file system>"; 
  //$text=array("Imagens", "Gerir as Imagens", "Carregar Imagens", "Procurar", "Imagens na pasta: ", "Zona de upload", "Entrar", "Voltar"); 
  $text=array("Images", "Manager Images", "Load Images", "Search", "Images on folder: ", "Upload zone", "Go", "Go back"); 
   
     
  $st=new Strings(); 
  $actual_link = (empty($_SERVER['HTTPS']) ? 'http' : 'https') . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 
   
  $actual_link=$st->after($URL_BASE, $actual_link); 
  $actual_link=str_replace("//", "/", $actual_link); 
  //echo $actual_link; 
 
  
  //$dir = '/'; //insira aqui o caminho para a pasta que deseja visualizar 
  //$dirbase="/home/uroybek/www/imagens"; 
  //$urlbase="/imagens"; 
  $dir=$DIR_BASE . $actual_link; 
  //echo $dir . "<br>"; 
  //$dir=$DIR_BASE;  
  $url=$URL_BASE . $actual_link; 
  //echo $url; 
 
  $files = scandir($dir); 
 
?> 
 
<!DOCTYPE html> 
<html lang="pt"> 
<head> 
  <title><?=$text[0]?></title> 
  <meta charset="utf-8"> 
  <meta name="viewport" content="width=device-width, initial-scale=1"> 
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"> 
   <link href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css" rel="stylesheet"> 
</head> 
<body> 
<nav class="navbar navbar-expand-sm navbar-dark bg-dark"> 
  <div class="container-fluid"> 
    <a class="navbar-brand" href="/public/<?=$URL_BASE?>"><?=$text[1]?></a> 
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mynavbar"> 
      <span class="navbar-toggler-icon"></span> 
    </button> 
    <div class="collapse navbar-collapse" id="mynavbar"> 
      <ul class="navbar-nav me-auto"> 
        <li class="nav-item"> 
          <a class="nav-link" href="javascript:void(0)"><?=$text[2]?></a> 
        </li> 
      </ul> 
      <form class="d-flex"> 
        <input class="form-control me-2" type="text" placeholder="Search"> 
        <button class="btn btn-primary" type="button"><?=$text[3]?></button> 
      </form> 
    </div> 
  </div> 
</nav> 
 
<div class="container mt-3"> 
  <h2><?=$text[4]?> <?=$url?></h2> 
  <div class="row"> 
    <div class="col-sm-3 p-3 bg-dark"> 
      <div class="card" style="width:250px"> 
        <div class="card-body"> 
          <h3><?=$text[5]?></h3>  
          <form action="<?=$URL_BASE?>/upload.php" class="dropzone">    
            <input type="hidden" name="pathinfo" value=".<?=$actual_link?>"/> 
          </form> 
           
          
        </div> 
      </div> 
    </div> 
     
 
<?php 
      if (($actual_link!="") && ($actual_link!="/")){ 
        $aux=$st->before_last("/",$actual_link); 
        echo $aux; 
        ?> 
                <div class="col-sm-3 p-3 bg-dark"> 
                  <div class="card" style="width:250px"> 
                    <div class="card-body"> 
                      <h4><b><?=$text[7]?></b></h4> 
                    </div> 
                    <div class="card-footer"> 
                      <a href="/public<?=$URL_BASE."/".$aux?>" class="btn btn-primary"> 
                        <?//=$text[6]?> 
                      <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-left" viewBox="0 0 16 16"> 
                        <path fill-rule="evenodd" d="M6 12.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-9a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v2a.5.5 0 0 1-1 0v-2A1.5 1.5 0 0 1 6.5 2h8A1.5 1.5 0 0 1 16 3.5v9a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 5 12.5v-2a.5.5 0 0 1 1 0v2z"/> 
                        <path fill-rule="evenodd" d="M.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L1.707 7.5H10.5a.5.5 0 0 1 0 1H1.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/> 
                      </svg> 
                    </a> 
                    </div> 
                  </div> 
                </div> 
                  <?php 
      } 
      foreach($files as $file) { 
        if($file != '.' && $file != '..') { 
            if(is_dir($dir.'/'.$file)) { 
                //echo '<p><strong>Pasta: '.$file.'</strong></p>'; 
                ?> 
                <div class="col-sm-3 p-3 bg-dark"> 
                  <div class="card" style="width:250px"> 
                    <!--img class="card-img-top" src="<?=$file?>" alt="<?=$file?>" style="width:100%"--> 
                    <div class="card-body"> 
                      <h4><b><?=$file?></b></h4>  
                    </div> 
                    <div class="card-footer"> 
                      <a href="/public<?=$url."/".$file?>" class="btn btn-primary"> 
                        <?//=$text[6]?> 
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-folder2-open" viewBox="0 0 16 16"> 
                          <path d="M1 3.5A1.5 1.5 0 0 1 2.5 2h2.764c.958 0 1.76.56 2.311 1.184C7.985 3.648 8.48 4 9 4h4.5A1.5 1.5 0 0 1 15 5.5v.64c.57.265.94.876.856 1.546l-.64 5.124A2.5 2.5 0 0 1 12.733 15H3.266a2.5 2.5 0 0 1-2.481-2.19l-.64-5.124A1.5 1.5 0 0 1 1 6.14V3.5zM2 6h12v-.5a.5.5 0 0 0-.5-.5H9c-.964 0-1.71-.629-2.174-1.154C6.374 3.334 5.82 3 5.264 3H2.5a.5.5 0 0 0-.5.5V6zm-.367 1a.5.5 0 0 0-.496.562l.64 5.124A1.5 1.5 0 0 0 3.266 14h9.468a1.5 1.5 0 0 0 1.489-1.314l.64-5.124A.5.5 0 0 0 14.367 7H1.633z"/> 
                        </svg> 
                      </a> 
                    </div> 
                  </div> 
                </div> 
                  <?php 
            } 
            else { 
              // Images 
                $ext = pathinfo($file, PATHINFO_EXTENSION); 
                if(in_array($ext, array('jpg', 'jpeg', 'png', 'gif', 'wepb'))) { 
                    //echo '<p>Imagem: '.$file.'</p>'; 
                    //echo '<img src="'.$file.'" alt="'.$file.'" width="100%" height="100%">'; 
                  ?> 
                <div class="col-sm-3 p-3"> 
                  <div class="card" style="width:250px"> 
                    <img class="card-img-top" src="<?=$url."/".$file?>" alt="<?=$file?>" style="width:100%" id="<?=$file?>"> 
                    <div class="card-body"> 
                      <h4><b><?=$file?></b></h4>  
                    </div> 
                    <div class="card-footer"> 
                      <button id="copy-button"  class="btn btn-primary" onclick="copyURL('<?=$file?>')"> 
                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check" viewBox="0 0 16 16"> 
                          <path fill-rule="evenodd" d="M10.854 7.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 9.793l2.646-2.647a.5.5 0 0 1 .708 0z"/> 
                          <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/> 
                          <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/> 
                        </svg> 
                      </button> 
                    </div> 
                  </div> 
                </div> 
                  <?php 
                }    
            } 
        } 
    } 
   
?> 
    </div> 
  </div> 
   
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script> 
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> 
  <script src="https://unpkg.com/[email protected]/dist/dropzone.js"></script> 
  <script type="text/javascript"> 
    //console.log("aqui") 
    Dropzone.options.myAwesomeDropzone = { 
      autoProcessQueue: true, 
      uploadMultiple: true, 
      parallelUploads: 100, 
      maxFiles: 100, 
      acceptedFiles: ".png,.jpg,.gif,.bmp,.jpeg", 
      success: function(file, response) { 
        // O arquivo carregou com sucesso! 
         alert(reponse); 
      }, 
      error: function(file, response) { 
        alert(reponse); 
        //console.log("err: " + response ) 
        // Ocorreu um erro ao carregar o arquivo! 
      } 
    }; 
     
        
    function copyURL(id) { 
      // Seleciona a URL da imagem 
      var photoUrl = document.getElementById(id).src; 
      // Cria um elemento de texto temporário para armazenar a URL da imagem 
      var tempInput = document.createElement("input"); 
      tempInput.value = photoUrl; 
      // Adiciona o elemento de texto temporário ao DOM 
      document.body.appendChild(tempInput); 
      // Seleciona o texto no elemento de texto temporário 
      tempInput.select(); 
      // Copia o texto selecionado para a área de transferência 
      document.execCommand("copy"); 
      // Remove o elemento de texto temporário do DOM 
      document.body.removeChild(tempInput); 
      // Exibe uma mensagem informando que a URL da foto foi copiada com sucesso 
      //alert("URL da foto copiada com sucesso!"); 
    } 
         
  </script> 
</body> 
</html>  
 
 |