Download all files related to a lead bean

hello everyone, it is possible to download all the files together related for example to a lead or to another entity in zip format

That feature doesn’t exist in the standard version. You will need to create a custom button and the custom logic to collect, zip and download the related files.

Check these nice post from @pgr on how files work on SuiteCRM:

https://pgorod.github.io/How-Attachments-Stored/
https://pgorod.github.io/How-Documents-Stored/
https://pgorod.github.io/How-Photos-Stored/

Thanks,

BrozTechnologies

1 Like

Thank you.

I’m made:

  if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');

$bean_azi_ProgettoEasy = BeanFactory::getBean('azi_ProgettoEasy', $_GET["id"]);
$bean_azi_ProgettoEasy->load_relationship('azi_progettoeasy_prt_documentipratica_1');
$Documenti = $bean_azi_ProgettoEasy->azi_progettoeasy_prt_documentipratica_1->get();

function rmdirr($dir) {
   if($objs = @glob($dir."/*")){
        foreach($objs as $obj) {
	 @is_dir($obj)? rmdirr($obj) : @unlink($obj);
	  }
 }
@rmdir($dir);
}		


if (!file_exists('/var/www/html/Kredias/Temp')) {
    mkdir('/var/www/html/Kredias/Temp', 0777, true);
}


if (!file_exists('/var/www/html/Kredias/Temp/'.$_GET["id"])) {
    mkdir('/var/www/html/Kredias/Temp/'.$_GET["id"], 0777, true);
}

$files = array();


for ($i = 0; $i < count($Documenti); $i++) {
       

$NewDocumenti = BeanFactory::getBean('prt_DocumentiPratica', $Documenti[$i]);
$file_ext=$NewDocumenti->file_ext;

if(!empty($file_ext)){
copy('/var/www/html/Kredias/upload/'.$Documenti[$i], '/var/www/html/Kredias/Temp/'.$_GET["id"]."/".$NewDocumenti->filename);
    } 
}

//File ZIp Totale
$Documentazione = BeanFactory::newBean('prt_DocumentiPratica');
$Documentazione->tipologia_c="Pratica Zippata";
$Documentazione->name="0) Pratica Zippata";
$Documentazione->document_name="0) Pratica Zippata";
$Documentazione->assigned_user_id=$current_user->id;
$Documentazione->status_id="Caricata";
$Documentazione->filename=$bean_azi_ProgettoEasy->name.".zip";
$Documentazione->file_ext="zip";
$Documentazione->save();

$dir = '/var/www/html/Kredias/Temp/'.$_GET["id"];
$zip_file = '/var/www/html/Kredias/upload/'.$Documentazione->id;

// Get real path for our folder
$rootPath = realpath($dir);

// Initialize archive object
$zip = new ZipArchive();
$zip->open($zip_file, ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        // Add current file to archive
        $zip->addFile($filePath, $relativePath);
    }
}

// Zip archive will be created only after closing object
$zip->close();
$bean_azi_ProgettoEasy->azi_progettoeasy_prt_documentipratica_1->add($Documentazione);
rmdirr('/var/www/html/Kredias/Temp/'.$_GET["id"]);

header("location: ./?action=ajaxui#ajaxUILoc=index.php%3Fmodule%3Dazi_ProgettoEasy%26offset%3D3%26stamp%3D1561381368091239700%26return_module%3Dazi_ProgettoEasy%26action%3DDetailView%26record%3D".$_GET["id"]);
die();
2 Likes

@massimo.capuano,

Good work. Thanks for sharing!!!