public function ExportFlightsAndFolders($flightIds, $folderDest)
 {
     $Fd = new Folder();
     $uId = $this->_user->userInfo['id'];
     $role = $this->_user->userInfo['role'];
     $allFolders = [];
     if (User::isModerator($role)) {
         $uId = $this->_user->GetUserIdsByAuthor($this->_user->username);
     }
     foreach ($folderDest as $dest) {
         $allFolders = $Fd->SubfoldersDeepScan($dest, $uId, $adminRole);
     }
     foreach ($allFolders as $folderId) {
         $flightIds = array_merge($flightIds, $Fd->GetFlightsByFolder($folderId, $uId, $adminRole));
     }
     unset($Fd);
     $exportedFiles = array();
     $exportedFileName = '';
     error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
     $Fl = new Flight();
     $C = new DataBaseConnector();
     $Bru = new Bru();
     foreach ($flightIds as $flightId) {
         $flightInfo = $Fl->GetFlightInfo($flightId);
         $fileGuid = uniqid();
         $exportedFileDir = UPLOADED_FILES_PATH;
         $exportedFileName = $flightInfo['bort'] . "_" . date("Y-m-d", $flightInfo['startCopyTime']) . "_" . $flightInfo['voyage'] . "_" . $fileGuid;
         $exportedFileRoot = $exportedFileDir . $exportedFileName;
         $headerFile['dir'] = $exportedFileDir;
         $headerFile['filename'] = "header_" . $flightInfo['bort'] . "_" . $flightInfo['voyage'] . $fileGuid . ".json";
         $headerFile['root'] = $headerFile['dir'] . $headerFile['filename'];
         $exportedFiles[] = $headerFile;
         $apPrefixes = $Bru->GetBruApCycloPrefixes($flightInfo["bruType"]);
         for ($i = 0; $i < count($apPrefixes); $i++) {
             $exportedTable = $C->ExportTable($flightInfo["apTableName"] . "_" . $apPrefixes[$i], $flightInfo["apTableName"] . "_" . $apPrefixes[$i] . "_" . $fileGuid, $exportedFileDir);
             $exportedFiles[] = $exportedTable;
             $flightInfo["apTables"][] = array("pref" => $apPrefixes[$i], "file" => $exportedTable["filename"]);
         }
         $bpPrefixes = $Bru->GetBruBpCycloPrefixes($flightInfo["bruType"]);
         for ($i = 0; $i < count($bpPrefixes); $i++) {
             $exportedTable = $C->ExportTable($flightInfo["bpTableName"] . "_" . $apPrefixes[$i], $flightInfo["bpTableName"] . "_" . $bpPrefixes[$i] . "_" . $fileGuid, $exportedFileDir);
             $exportedFiles[] = $exportedTable;
             $flightInfo["bpTables"][] = array("pref" => $bpPrefixes[$i], "file" => $exportedTable["filename"]);
         }
         if ($flightInfo["exTableName"] != "") {
             $exportedTable = $C->ExportTable($flightInfo["exTableName"], $flightInfo["exTableName"] . "_" . $fileGuid, $exportedFileDir);
             $exportedFiles[] = $exportedTable;
             $flightInfo["exTables"] = $exportedTable["filename"];
         }
         $exportedFileDesc = fopen($headerFile['root'], "w");
         fwrite($exportedFileDesc, json_encode($flightInfo));
         fclose($exportedFileDesc);
     }
     unset($Fl);
     unset($C);
     unset($Bru);
     $zip = new ZipArchive();
     if ($zip->open($exportedFileRoot . '.zip', ZipArchive::CREATE) === TRUE) {
         for ($i = 0; $i < count($exportedFiles); $i++) {
             $zip->addFile($exportedFiles[$i]['root'], $exportedFiles[$i]['filename']);
         }
         $zip->close();
     } else {
         error_log('Failed zipping flight. Page asyncFileProcessor.php"');
     }
     for ($i = 0; $i < count($exportedFiles); $i++) {
         if (file_exists($exportedFiles[$i]['root'])) {
             unlink($exportedFiles[$i]['root']);
         }
     }
     $zipURL = 'http';
     if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {
         $zipURL .= "s";
     }
     $zipURL .= "://";
     if ($_SERVER["SERVER_PORT"] != "80") {
         $zipURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"];
     } else {
         $zipURL .= $_SERVER["SERVER_NAME"];
     }
     $zipURL .= UPLOADED_FILES_DIR . $exportedFileName . '.zip';
     error_reporting(E_ALL);
     if ($exportedFileName == '') {
         return false;
     }
     return $zipURL;
 }
 public function ImportFlight($importedFileName)
 {
     $copiedFilesDir = UPLOADED_FILES_PATH;
     $copiedFilePath = $copiedFilesDir . $importedFileName;
     $zip = new ZipArchive();
     $res = $zip->open($copiedFilePath);
     $importFolderName = sprintf("Imported_%s", date('Y-m-d'));
     $needToCreateImportedFolder = true;
     $Fl = new Flight();
     $Bru = new Bru();
     $Fr = new Frame();
     $FlE = new FlightException();
     $Fd = new Folder();
     $folderInfo = [];
     $userId = $this->_user->GetUserIdByName($this->_user->username);
     if ($res === TRUE) {
         $i = 0;
         $headerFiles = [];
         do {
             $fileName = $zip->getNameIndex($i);
             if (strpos($fileName, "header") !== false) {
                 $headerFiles[] = $fileName;
             }
             $i++;
         } while ($i < $zip->numFiles);
         foreach ($headerFiles as $name) {
             $zip->extractTo($copiedFilesDir, $name);
             $json = file_get_contents($copiedFilesDir . "/" . $name);
             unlink($copiedFilesDir . "/" . $name);
             $flightInfoImported = json_decode($json, true);
             $bruType = $flightInfoImported['bruType'];
             $flightId = $Fl->InsertNewFlight($flightInfoImported['bort'], $flightInfoImported['voyage'], $flightInfoImported['startCopyTime'], $flightInfoImported['bruType'], $flightInfoImported['performer'], $flightInfoImported['departureAirport'], $flightInfoImported['arrivalAirport'], $importedFileName, $flightInfoImported['flightAditionalInfo']);
             $flightInfo = $Fl->GetFlightInfo($flightId);
             $tableNameAp = $flightInfo['apTableName'];
             $tableNameBp = $flightInfo['bpTableName'];
             $bruInfo = $Bru->GetBruInfo($bruType);
             $apPrefixes = $Bru->GetBruApCycloPrefixes($bruType);
             $bpPrefixes = $Bru->GetBruBpCycloPrefixes($bruType);
             $apCyclo = $Bru->GetBruApCycloPrefixOrganized($bruType);
             $tables = $Fl->CreateFlightParamTables($flightId, $apCyclo, $bpPrefixes);
             $apTables = $flightInfoImported["apTables"];
             for ($j = 0; $j < count($apTables); $j++) {
                 $zip->extractTo($copiedFilesDir, $apTables[$j]["file"]);
                 if (file_exists($copiedFilesDir . $apTables[$j]["file"])) {
                     $Fr->LoadFileToTable($tableNameAp . "_" . $apTables[$j]["pref"], $copiedFilesDir . $apTables[$j]["file"]);
                     unlink($copiedFilesDir . $apTables[$j]["file"]);
                 }
             }
             $bpTables = $flightInfoImported["bpTables"];
             for ($j = 0; $j < count($bpTables); $j++) {
                 $zip->extractTo($copiedFilesDir, $bpTables[$j]["file"]);
                 if (file_exists($copiedFilesDir . $bpTables[$j]["file"])) {
                     $Fr->LoadFileToTable($tableNameBp . "_" . $bpTables[$j]["pref"], $copiedFilesDir . $bpTables[$j]["file"]);
                     unlink($copiedFilesDir . $bpTables[$j]["file"]);
                 }
             }
             if (isset($flightInfoImported["exTableName"]) && $flightInfoImported["exTableName"] != "") {
                 $tableGuid = substr($tableNameAp, 0, 14);
                 $FlE->CreateFlightExceptionTable($flightId, $tableGuid);
                 $flightInfo = $Fl->GetFlightInfo($flightId);
                 $exTables = $flightInfoImported["exTables"];
                 $zip->extractTo($copiedFilesDir, $exTables);
                 $Fr->LoadFileToTable($flightInfo["exTableName"], $copiedFilesDir . $exTables);
                 if (file_exists($copiedFilesDir . $exTables)) {
                     unlink($copiedFilesDir . $exTables);
                 }
             }
             $this->_user->SetFlightAvaliable($this->_user->username, $flightId);
             if (count($headerFiles) > 1) {
                 if ($needToCreateImportedFolder) {
                     $folderInfo = $Fd->CreateFolder($importFolderName, 0, $userId);
                     $needToCreateImportedFolder = false;
                 }
                 if (isset($folderInfo['folderId'])) {
                     $Fd->PutFlightInFolder($flightId, $folderInfo['folderId'], $userId);
                 } else {
                     $Fd->PutFlightInFolder($flightId, 0, $userId);
                     //we put currently uploaded file in root
                 }
             } else {
                 //into root if only one
                 $Fd->PutFlightInFolder($flightId, 0, $userId);
                 //we put currently uploaded file in root
             }
         }
         $zip->close();
         unlink($copiedFilePath);
         unset($zip);
         unset($Fl);
         unset($FlE);
         unset($Fr);
         unset($Fd);
         unset($Bru);
         if (count($headerFiles) <= 0) {
             return false;
         }
         return true;
     } else {
         return false;
     }
 }