Пример #1
0
 /**
  * Backend area (only rightpane) with a
  * form to download multiple files and directories
  * @return void
  */
 public function downloadMultiple()
 {
     $temp_out_path = $this->config_area['temp_out_path'] . '/' . md5(time());
     $fsm = sf_api('LIB', 'FilesystemManipulation');
     $fsm->createDirectory($temp_out_path);
     $dirtree = $this->directory_sql_tree;
     $dirtree->setIdclient($this->config_area['idclient']);
     //$dirtree->setIdlang( $this->config_area['idlang'] );
     $dirtree->setArea($this->config_area['area_name']);
     $dirtree->setPermCheck($this->directory_sql_item->getObjectPermType(), $this->directory_sql_item->getObjectPermId('download'), TRUE);
     $dirtree->generate();
     $iddirectories = $this->req->req('d', array());
     foreach ($iddirectories as $iddirectory) {
         if ($this->directory_sql_item->loadById($iddirectory)) {
             $this->_prepareDownloadDirectory($iddirectory, $temp_out_path, $dirtree);
         }
     }
     $idfiles = $this->req->req('f', array());
     foreach ($idfiles as $idfile) {
         if ($this->file_sql_item->loadById($idfile)) {
             $fsm->copyFile($this->file_sql_item->getPath(), $temp_out_path . '/' . $this->file_sql_item->getField('filename'));
         }
     }
     $id = $this->req->req('iddirectory', 0);
     if ($id > 0 && $this->directory_sql_item->loadById($id)) {
         $archivename = $this->directory_sql_item->getField('name');
     } else {
         $archivename = $this->lng->get($this->config_area['area_name'] . '_base_directory');
     }
     $archive = sf_api('LIB', 'Archive');
     $archive::extract($archive::read($temp_out_path), $archive::toArchive($archivename . '.' . $this->config_area['download_archive_filetype'], $archive::toOutput()));
     $fsm->deleteDirectoryRecursive($temp_out_path);
 }