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; } }