processDatas)) unset($this->processDatas); $sendToSamp = isset($input->sendToSamp) && $input->sendToSamp; $compression = !$sendToSamp && ($input->compression !== 'none'); $formatstr = $sendToSamp ? 'vot' : $input->fileformat; $tmp = new TTRequestDataClass(); // just to be sure that TTRequestDataClass is loaded with the 'autoload' => TTRequestDataClass is defined $outputformat = $this->getFormatFromString(!empty($formatstr) ? $formatstr : 'vot'); $final = ""; if (is_dir(IHMConfigClass::getDownloadTmpPath())) { foreach (glob(IHMConfigClass::getDownloadTmpPath().'*.zip') as $filename) unlink($filename); foreach (glob(IHMConfigClass::getDownloadTmpPath().'*.tar.gz') as $filename) unlink($filename); } foreach($input->list as $tt) { //create a list of data to treat $processData = new TTRequestDataClass(); if (!isset($tt->id) && !empty($tt->path)) { $ttName = $tt->path; $inputformat = $this->getFormatFromString(!empty($tt->format) ? $tt->format : 'internal'); } else if (strpos($tt->id,"sharedtimeTable_") === 0 || strpos($tt->id,"sharedcatalog_") === 0) { //Shared TimeTable /Catalog $objectType = strpos($tt->id,"timeTable") != 0 ? "timeTable" : "catalog"; $result = IHMSharedObjectsClass::getPath($objectType, $tt->id); if (!$result['success']) throw new Exception('Shared '.$objectType.' '.$tt->name.' not found'); $ttName = $result['path']; $inputformat = TTRequestFileFormatEnum::INTERNAL; } else { //User TimeTable / Catalog $ttName = IHMConfigClass::getUserTTPath().$tt->id.'.xml'; $inputformat = TTRequestFileFormatEnum::INTERNAL; } if (!file_exists($ttName)) throw new Exception('TimeTable or Catalog '.$tt->name.' not found'); $processData->setInputFileName($ttName); $processData->setInputFileFormat($inputformat); $processData->setOutputDir(IHMConfigClass::getDownloadTmpPath()); $processData->setOutputFileFormat($outputformat); switch ($outputformat) { case TTRequestFileFormatEnum::VOTABLE : $outputName = $tt->name.'.xml'; break; case TTRequestFileFormatEnum::ASCII : $outputName = $tt->name.'.txt'; break; default : $outputName = $tt->name.'.xml'; } // $processData->setOutputTimeFormat($input->timeformat); $processData->setOutputFileName($outputName); $final .= " ".$outputName; $processData->setType($function); $processData->setCmd("ttConversion"); $processData->setSendToSamp($sendToSamp); $this->processDatas[] = $processData; } $this->postProcessTT = new PostProcessTTClass(); $this->postProcessTT->setOutputDirAlias($this->processDatas[0]->getOutputDir()); if ($compression) { $this->postProcessTT->compression = true; $archive = "Timetable_archive_".date('Ymd_Hi'); switch ($input->compression) { case 'zip' : $postCmd = "zip -Dj ".$archive.".zip ".$final." 1> /dev/null 2> /dev/null"; $outputFileName = $archive.".zip"; break; case 'tar+gzip': default : $postCmd="tar cfz ".$archive.".tar.gz --directory=".$this->processDatas[0]->getOutputDir()." ".$final; $outputFileName = $archive.".tar.gz"; break; } $this->postProcessTT->setPostCmd($postCmd); $this->postProcessTT->setOutputFileName($outputFileName); $this->postProcessTT->setOutputDir($this->processDatas[0]->getOutputDir()); } return $this->processDatas; } /* * @brief Get format from input string */ private function getFormatFromString($str) { switch (strtolower($str)) { case 'vot': case 'votable': return TTRequestFileFormatEnum::VOTABLE; case 'ascii': case 'text': case 'txt': case 'asc': return TTRequestFileFormatEnum::ASCII; } return TTRequestFileFormatEnum::INTERNAL; } /* * @brief translate output data from AMDA_Integration module to IHM client request */ public function getOutput($data) { if ( $this->postProcessTT->compression ) { $timeStart = time(); $cmd = $this->postProcessTT->getPostCmd(); system($cmd); while (!file_exists($this->postProcessTT->getOutputFileName()) && ( time() - $timeStart ) < KernelConfigClass::getTimeToBatchMode()) sleep(1); foreach ($data as $d) { $rawFileName = $d->getOutputDir().$d->getOutputFileName(); if (file_exists($rawFileName)) unlink($rawFileName); } $result = array('success'=>true, 'download'=>$this->postProcessTT->getOutputDirAlias().$this->postProcessTT->getOutputFileName(), 'compression' => $this->postProcessTT->compression); } else if ($data[0]->getSendToSamp()) { $donwload = array(); foreach ($data as $d) { $donwload[] = $this->postProcessTT->getOutputDirAlias().$d->getOutputFileName(); } $result = array('success'=>$data[0]->getSuccess(), 'sendToSamp' => TRUE, 'download' => $donwload); } else { $result = array('success'=>$data[0]->getSuccess(), 'download' => $this->postProcessTT->getOutputDirAlias().$data[0]->getOutputFileName()); } return $result; } } ?>