diff --git a/php/classes/WebServer.php b/php/classes/WebServer.php index 7e4bff3..5891ba3 100644 --- a/php/classes/WebServer.php +++ b/php/classes/WebServer.php @@ -1,1045 +1,1038 @@ <?php -/** -* @file WebServer.php -* @brief Web services AMDA -* -* @version $Id: WebServer.php 2968 2015-06-29 13:17:00Z natacha $ -*/ +/** + * @file WebServer.php + * @brief Web services AMDA + * + * @version $Id: WebServer.php 2968 2015-06-29 13:17:00Z natacha $ + */ class WebResultMgr { - private $resDOM; - private $rootEl; - private $resXP; - private $requestManager = null; - private $paramLoader = null; - - function __construct() - { - if (!is_dir(WSRESULT)) - mkdir(WSRESULT); - chmod(WSRESULT,0775); - - $this->resDOM = new DOMDocument("1.0"); - $this->resDOM->formatOutput = TRUE; - $this->resDOM->preserveWhiteSpace = FALSE; - - if (!file_exists(wsResultsXml)) + private $resDOM; + private $rootEl; + private $resXP; + private $requestManager = null; + private $paramLoader = null; + + function __construct() { - $this->rootEl = $this->resDOM->createElement('wsresults'); - $this->resDOM->appendChild($this->rootEl); - $this->resDOM->save(wsResultsXml); + if (!is_dir(WSRESULT)) + mkdir(WSRESULT); + chmod(WSRESULT, 0775); + + $this->resDOM = new DOMDocument("1.0"); + $this->resDOM->formatOutput = TRUE; + $this->resDOM->preserveWhiteSpace = FALSE; + + if (!file_exists(wsResultsXml)) { + $this->rootEl = $this->resDOM->createElement('wsresults'); + $this->resDOM->appendChild($this->rootEl); + $this->resDOM->save(wsResultsXml); + } + + $this->resDOM->load(wsResultsXml); + + $this->resXP = new DOMXPath($this->resDOM); + + $this->rootEl = $this->resDOM->documentElement; } - - $this->resDOM->load(wsResultsXml); - - $this->resXP = new DOMXPath($this->resDOM); - - $this->rootEl = $this->resDOM->documentElement; - } - - public function addResult($function_name,$vars,$user,$IP,$output){ - $nodes = $this->rootEl->getElementsByTagName($function_name); - if($nodes->length < 1){ - $funcNode = $this->resDOM->createElement($function_name); - $this->rootEl->appendChild($funcNode); - } - else - $funcNode = $nodes->item(0); - - $oldOutput = $this->resXP->query('//'.$function_name.'/result[@output="'.$output.'"]'); - if ($oldOutput->length > 0) - $funcNode->removeChild($oldOutput->item(0)); - - $resNode = $this->resDOM->createElement('result'); - $resNode->setAttribute('date',time()); - $resNode->setAttribute('user',$user); + + public function addResult($function_name, $vars, $user, $IP, $output) + { + $nodes = $this->rootEl->getElementsByTagName($function_name); + if ($nodes->length < 1) { + $funcNode = $this->resDOM->createElement($function_name); + $this->rootEl->appendChild($funcNode); + } else + $funcNode = $nodes->item(0); + + $oldOutput = $this->resXP->query('//' . $function_name . '/result[@output="' . $output . '"]'); + if ($oldOutput->length > 0) + $funcNode->removeChild($oldOutput->item(0)); + + $resNode = $this->resDOM->createElement('result'); + $resNode->setAttribute('date', time()); + $resNode->setAttribute('user', $user); // $resNode->setAttribute('IP',$IP); - $resNode->setAttribute('input',json_encode($vars)); - $resNode->setAttribute('output',$output); - $funcNode->appendChild($resNode); - - $this->resDOM->save(wsResultsXml); - - return $resNode; - } - - public function getResOutputName($function_name,$user,$suffixe,$extension) - { - $outputFile = WSRESULT.$function_name."_".$user; - if (isset($suffixe)) - $outputFile .= ("_".$suffixe); - if (isset($extension)) - $outputFile .= (".".$extension); - else - $outputFile .= ".xml"; - return $outputFile; - } + $resNode->setAttribute('input', json_encode($vars)); + $resNode->setAttribute('output', $output); + $funcNode->appendChild($resNode); + + $this->resDOM->save(wsResultsXml); + + return $resNode; + } + + public function getResOutputName($function_name, $user, $suffixe, $extension) + { + $outputFile = WSRESULT . $function_name . "_" . $user; + if (isset($suffixe)) + $outputFile .= ("_" . $suffixe); + if (isset($extension)) + $outputFile .= ("." . $extension); + else + $outputFile .= ".xml"; + return $outputFile; + } } class WebServer { - private $isSoap = false; - private $userID, $userPWD, $sessionID; - private $wsUserMgr; - private $resultMgr, $myParamsInfoMgr; - private $dataFileName; - - function __construct() { - $this->userID = 'impex'; - $this->userPWD = 'impexfp7'; - $this->sessionID = $this->userID; - $this->myParamsInfoMgr = new ParamsInfoMgr(); - $this->resultMgr = new WebResultMgr(); - } - - protected function init($data) { - if(is_object($data)) + private $isSoap = false; + private $userID, $userPWD, $sessionID; + private $wsUserMgr; + private $resultMgr, $myParamsInfoMgr; + private $dataFileName; + + function __construct() { - $vars = get_object_vars($data); - $this->isSoap = true; + $this->userID = 'impex'; + $this->userPWD = 'impexfp7'; + $this->sessionID = $this->userID; + $this->myParamsInfoMgr = new ParamsInfoMgr(); + $this->resultMgr = new WebResultMgr(); } - else - $vars = $data; - if (isset($vars['userID'])) + protected function init($data) { - $this->userID = $vars['userID']; - $this->sessionID = $this->userID; + if (is_object($data)) { + $vars = get_object_vars($data); + $this->isSoap = true; + } else + $vars = $data; + + if (isset($vars['userID'])) { + $this->userID = $vars['userID']; + $this->sessionID = $this->userID; + } else { + $this->userID = 'impex'; + $this->sessionID = $this->userID; + } + if (isset($vars['password'])) + $this->userPWD = $vars['password']; + else + $this->userPWD = 'impexfp7'; + return array('success' => true, 'vars' => $vars); } - else { - $this->userID = 'impex'; - $this->sessionID = $this->userID; + + private function setID() + { + + $nb_min = 10000; + $nb_max = 99999; + $nombre = mt_rand($nb_min, $nb_max); + + $this->IP = $this->getIPclient(); + + return "PP" . $nombre; } - if (isset($vars['password'])) - $this->userPWD = $vars['password']; - else - $this->userPWD = 'impexfp7'; - return array('success' => true, 'vars' => $vars); - } - private function setID(){ + /** + * Function getIPclient return the IP client sent a request for needs DD scripts (DDHtmlLogin, DDCheckUser, DD_Search) + * + * @param void + * @return string + */ + private function getIPclient() + { - $nb_min = 10000; - $nb_max = 99999; - $nombre = mt_rand($nb_min,$nb_max); + if (getenv('REMOTE_ADDR')) { + $realIP = getenv('REMOTE_ADDR'); + } else { + //get local IP + $command = "hostname -i"; + $realIP = exec($command); + } - $this->IP = $this->getIPclient(); + return $realIP; + } - return "PP".$nombre; - } + private function timeInterval2Days($TimeInterval) + { -/** - * Function getIPclient return the IP client sent a request for needs DD scripts (DDHtmlLogin, DDCheckUser, DD_Search) - * - * @param void - * @return string - */ - private function getIPclient(){ - - if (getenv('REMOTE_ADDR')) { - $realIP = getenv('REMOTE_ADDR'); - } - else { - //get local IP - $command="hostname -i"; - $realIP = exec($command); - } - - return $realIP; - } - - private function timeInterval2Days($TimeInterval){ - - $divDays = 60*60*24; + $divDays = 60 * 60 * 24; $nbDays = floor($TimeInterval / $divDays); - $divHours = 60*60; - $nbHours = floor(($TimeInterval - $divDays*$nbDays)/$divHours); - $nbMin = floor(($TimeInterval - $divDays*$nbDays - $divHours*$nbHours)/60); - $nbSec = $TimeInterval - $divDays*$nbDays - $divHours*$nbHours - $nbMin*60; + $divHours = 60 * 60; + $nbHours = floor(($TimeInterval - $divDays * $nbDays) / $divHours); + $nbMin = floor(($TimeInterval - $divDays * $nbDays - $divHours * $nbHours) / 60); + $nbSec = $TimeInterval - $divDays * $nbDays - $divHours * $nbHours - $nbMin * 60; - $DD = sprintf("%03d", $nbDays); // format ex. 005 not 5 - $HH = sprintf("%02d", $nbHours); // format ex. 25 - $MM = sprintf("%02d", $nbMin); // format ex. 03 not 3 - $SS = sprintf("%02d", $nbSec); // format ex. 02 not 2 + $DD = sprintf("%03d", $nbDays); // format ex. 005 not 5 + $HH = sprintf("%02d", $nbHours); // format ex. 25 + $MM = sprintf("%02d", $nbMin); // format ex. 03 not 3 + $SS = sprintf("%02d", $nbSec); // format ex. 02 not 2 - return $DD.':'.$HH.':'.$MM.':'.$SS; + return $DD . ':' . $HH . ':' . $MM . ':' . $SS; } -/* Start Time into AMDA format YYYY:DOY-1:HH:MM:SS */ - private function startTime2Days($startTime){ + /* Start Time into AMDA format YYYY:DOY-1:HH:MM:SS */ + private function startTime2Days($startTime) + { - $ddStart = getdate($startTime); - $date_start = sprintf("%04d",$ddStart["year"]).":".sprintf("%03d", $ddStart["yday"]).":" - .sprintf("%02d",$ddStart["hours"]).":".sprintf("%02d",$ddStart["minutes"]).":" - .sprintf("%02d",$ddStart["seconds"]); + $ddStart = getdate($startTime); + $date_start = sprintf("%04d", $ddStart["year"]) . ":" . sprintf("%03d", $ddStart["yday"]) . ":" + . sprintf("%02d", $ddStart["hours"]) . ":" . sprintf("%02d", $ddStart["minutes"]) . ":" + . sprintf("%02d", $ddStart["seconds"]); return $date_start; } - private function rrmdir($dir){ - if (is_dir($dir)) { - $objects = scandir($dir); - - foreach ($objects as $object) { // Recursively delete a directory that is not empty and directorys in directory - if ($object != "." && $object != "..") { // If object isn't a directory recall recursively this function - if (filetype($dir."/".$object) == "dir") - $this->rrmdir($dir."/".$object); - else - unlink($dir."/".$object); - } + private function rrmdir($dir) + { + if (is_dir($dir)) { + $objects = scandir($dir); + + foreach ($objects as $object) { // Recursively delete a directory that is not empty and directorys in directory + if ($object != "." && $object != "..") { // If object isn't a directory recall recursively this function + if (filetype($dir . "/" . $object) == "dir") + $this->rrmdir($dir . "/" . $object); + else + unlink($dir . "/" . $object); + } + } + reset($objects); + rmdir($dir); } - reset($objects); - rmdir($dir); - } } - protected function initUserMgr() { - if (isset($this->wsUserMgr)) - return array('success' => true); - $this->wsUserMgr = new WSUserMgr(); - $this->wsUserMgr->init($this->userID,$this->userPWD,$this->sessionID, $this->isSoap); - - return array('success' => true); - } - - public function getTimeTablesList($data) { - if(is_object($data)) + protected function initUserMgr() { - $vars = get_object_vars($data); - $this->isSoap = true; - } - else - $vars = $data; - if (isset($vars['userID']) && $vars['userID'] == 'impex'){ - if ($this->isSoap) throw new SoapFault("server00","Server Error: AMDA Login procedure failed"); - else return array("error" => "Server Error: AMDA Login procedure failed"); - } - - - $res = $this->init($data); - $vars = $res['vars']; - - $ttListWSresult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID); - - $dom = new DOMDocument("1.0"); - if ($this->userID == 'impex') { - $sharedObjMgr = new SharedObjectsMgr(); - $loadDom = $dom->load($sharedObjMgr->getTreeFilePath()); - } - else - $loadDom = $dom->load(USERPATH.$this->userID.'/WS/Tt.xml'); - - if ($loadDom == FALSE){ - if ($this->isSoap) throw new SoapFault("server00","Server Error: AMDA Login procedure failed"); - else return array("error" => "Server Error: AMDA Login procedure failed"); - } - - $timetabNode = $dom->documentElement->getElementsByTagName('timetabList'); + if (isset($this->wsUserMgr)) + return array('success' => true); + $this->wsUserMgr = new WSUserMgr(); + $this->wsUserMgr->init($this->userID, $this->userPWD, $this->sessionID, $this->isSoap); - if ($timetabNode->length < 1){ - if ($this->isSoap) throw new SoapFault("server03","Cannot reach TT list"); - else return array('success' => false, 'message' => "Server Error: Cannot reach TT list"); + return array('success' => true); } - $outDOM = new DOMDocument("1.0"); - $outDOM->formatOutput = TRUE; - $outDOM->preserveWhiteSpace = FALSE; - - $newNode = $outDOM->importNode($timetabNode->item(0),TRUE); - $outDOM->appendChild($newNode); - - $outXP = new domxpath($outDOM); - $ttNodes = $outXP->query('//timetab'); + public function getTimeTablesList($data) + { + if (is_object($data)) { + $vars = get_object_vars($data); + $this->isSoap = true; + } else + $vars = $data; + if (isset($vars['userID']) && $vars['userID'] == 'impex') { + if ($this->isSoap) throw new SoapFault("server00", "Server Error: AMDA Login procedure failed"); + else return array("error" => "Server Error: AMDA Login procedure failed"); + } - $outDOM->save($ttListWSresult); - $wsres = $this->resultMgr->addResult(__FUNCTION__,$vars,$this->userID,$ttListWSresult); + $res = $this->init($data); + $vars = $res['vars']; - $ttListResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$ttListWSresult); + $ttListWSresult = $this->resultMgr->getResOutputName(__FUNCTION__, $this->userID); - $timeTablesList = array('success' => true, 'TimeTablesList' => $ttListResult); + $dom = new DOMDocument("1.0"); + if ($this->userID == 'impex') { + $sharedObjMgr = new SharedObjectsMgr(); + $loadDom = $dom->load($sharedObjMgr->getTreeFilePath()); + } else + $loadDom = $dom->load(USERPATH . $this->userID . '/WS/Tt.xml'); - return $timeTablesList; + if ($loadDom == FALSE) { + if ($this->isSoap) throw new SoapFault("server00", "Server Error: AMDA Login procedure failed"); + else return array("error" => "Server Error: AMDA Login procedure failed"); + } - } + $timetabNode = $dom->documentElement->getElementsByTagName('timetabList'); - public function getTimeTable($data) { - $res = $this->init($data); + if ($timetabNode->length < 1) { + if ($this->isSoap) throw new SoapFault("server03", "Cannot reach TT list"); + else return array('success' => false, 'message' => "Server Error: Cannot reach TT list"); + } + $outDOM = new DOMDocument("1.0"); + $outDOM->formatOutput = TRUE; + $outDOM->preserveWhiteSpace = FALSE; - $vars = $res['vars']; - $ttID = $vars['ttID']; + $newNode = $outDOM->importNode($timetabNode->item(0), TRUE); + $outDOM->appendChild($newNode); - if ($this->userID == 'impex') { - $sharedObjMgr = new SharedObjectsMgr(); - $ttSrc = $sharedObjMgr->getDataFilePath('timeTable', $ttID); - } - else - $ttSrc = USERPATH.$this->userID.'/TT/'.$ttID.'.xml'; - if (!file_exists($ttSrc)) { - if ($this->isSoap) throw new SoapFault("server03","Cannot reach time table"); - else return array('success' => false, 'message' => "Cannot reach time table"); + $outXP = new domxpath($outDOM); + $ttNodes = $outXP->query('//timetab'); + + $outDOM->save($ttListWSresult); + + $wsres = $this->resultMgr->addResult(__FUNCTION__, $vars, $this->userID, $ttListWSresult); + + $ttListResult = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $ttListWSresult); + + $timeTablesList = array('success' => true, 'TimeTablesList' => $ttListResult); + + return $timeTablesList; + } - $ttWSresult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID,$ttID); + public function getTimeTable($data) + { + $res = $this->init($data); + + $vars = $res['vars']; + $ttID = $vars['ttID']; + + if ($this->userID == 'impex') { + $sharedObjMgr = new SharedObjectsMgr(); + $ttSrc = $sharedObjMgr->getDataFilePath('timeTable', $ttID); + } else + $ttSrc = USERPATH . $this->userID . '/TT/' . $ttID . '.xml'; + + if (!file_exists($ttSrc)) { + if ($this->isSoap) throw new SoapFault("server03", "Cannot reach time table"); + else return array('success' => false, 'message' => "Cannot reach time table"); + } + + $ttWSresult = $this->resultMgr->getResOutputName(__FUNCTION__, $this->userID, $ttID); + + if (!copy($ttSrc, $ttWSresult)) { + if ($this->isSoap) throw new SoapFault("server04", "Cannot copy time table"); + else return array('success' => false, 'message' => "Cannot copy time table"); + } + + $wsres = $this->resultMgr->addResult(__FUNCTION__, $vars, $this->userID, $ttWSresult); + + $myTimeTableMgr = new TimeTableMgr($this->userID); + $ttWSresultVot = $myTimeTableMgr->xsl2vot($ttWSresult); + if (file_exists($ttWSresultVot)) { + copy($ttWSresultVot, $ttWSresult); + unlink($ttWSresultVot); + } + return array('success' => true, 'ttFileURL' => 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $ttWSresult)); - if (!copy($ttSrc,$ttWSresult)){ - if ($this->isSoap) throw new SoapFault("server04","Cannot copy time table"); - else return array('success' => false, 'message' => "Cannot copy time table"); } - - $wsres = $this->resultMgr->addResult(__FUNCTION__,$vars,$this->userID, $ttWSresult); - - $myTimeTableMgr = new TimeTableMgr($this->userID); - $ttWSresultVot = $myTimeTableMgr->xsl2vot($ttWSresult); - if( file_exists ( $ttWSresultVot)){ - copy($ttWSresultVot, $ttWSresult); - unlink( $ttWSresultVot ) ; + + + public function isAlive() + { + $res = $this->init($data); + return true; } - return array('success' => true, 'ttFileURL' => 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$ttWSresult)); - - } - - - public function isAlive(){ - $res = $this->init($data); - return true; - } - - - public function getObsDataTree() { - - $res = $this->init(); - - $resMgr = $this->initUserMgr(); - - $vars = $res['vars']; - - $locParamSrc = USERPATH.$this->userID.'/WS/LocalParams.xml'; + + + public function getObsDataTree() + { + + $res = $this->init(); + + $resMgr = $this->initUserMgr(); + + $vars = $res['vars']; + + $locParamSrc = USERPATH . $this->userID . '/WS/LocalParams.xml'; // $remoteParamSrc = USERPATH.$this->userID.'/WS/RemoteParams.xml'; - $wsParamSrc = USERPATH.$this->userID.'/WS/WsParams.xml'; - $locParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID.'_'.'LocalParams'); + $wsParamSrc = USERPATH . $this->userID . '/WS/WsParams.xml'; + $locParamResult = $this->resultMgr->getResOutputName(__FUNCTION__, $this->userID . '_' . 'LocalParams'); // $remoteParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,'RemoteParams'); - $wsParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID.'_'.'WsParams'); - - if (!copy($locParamSrc,$locParamResult)) - $locParamResult = ''; - else { - $piBase = new DomDocument("1.0"); - $piBase->formatOutput = true; - $piBase->preserveWhiteSpace = false; - - $dom = new DomDocument("1.0"); - $dom->load($locParamResult); - - $xsl = new DomDocument("1.0"); - $xsl->load(XMLPATH.'dd2WStree.xsl'); - - $xslt = new XSLTProcessor(); - $xslt->importStylesheet($xsl); - - $dom->loadXML($xslt->transformToXML($dom)); - - $dom->formatOutput = true; - $dom->preserveWhiteSpace = false; - $chum_ger = $dom->getElementById("Rosetta@C-G : Plot Only!"); - if ($chum_ger != NULL) $chum_ger->setAttribute("target","Churyumov-Gerasimenko"); - - $dom->save($locParamResult); - } + $wsParamResult = $this->resultMgr->getResOutputName(__FUNCTION__, $this->userID . '_' . 'WsParams'); + + if (!copy($locParamSrc, $locParamResult)) + $locParamResult = ''; + else { + $piBase = new DomDocument("1.0"); + $piBase->formatOutput = true; + $piBase->preserveWhiteSpace = false; + + $dom = new DomDocument("1.0"); + $dom->load($locParamResult); + + $xsl = new DomDocument("1.0"); + $xsl->load(XMLPATH . 'dd2WStree.xsl'); + + $xslt = new XSLTProcessor(); + $xslt->importStylesheet($xsl); + + $dom->loadXML($xslt->transformToXML($dom)); + + $dom->formatOutput = true; + $dom->preserveWhiteSpace = false; + $chum_ger = $dom->getElementById("Rosetta@C-G : Plot Only!"); + if ($chum_ger != NULL) $chum_ger->setAttribute("target", "Churyumov-Gerasimenko"); + + $dom->save($locParamResult); + } // if (!copy($remoteParamSrc,$remoteParamResult)) // $remoteParamResult = ''; - if (!copy($wsParamSrc,$wsParamResult)) - $wsParamResult = ''; - - if ($locParamResult !='') $locParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$locParamResult); + if (!copy($wsParamSrc, $wsParamResult)) + $wsParamResult = ''; + + if ($locParamResult != '') $locParamResult = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $locParamResult); // if ($remoteParamResult !='') $remoteParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$remoteParamResult); - if ($wsParamResult !='') $wsParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$wsParamResult); - - if (($locParamResult =='') && ($remoteParamResult =='') && ($wsParamResult =='')){ - if ($this->isSoap) throw new SoapFault("server05","No params descriptions .xml files for ".$this->userID." user"); - else return array('success' => false, 'message' => "No params descriptions .xml files for ".$this->userID." user"); - } - - $wsres = $this->resultMgr->addResult(__FUNCTION__,$vars,$this->userID,$wsParamResult.";".$locParamResult.";".$remoteParamResult); - - return array('success' => true,'WorkSpace' => array("LocalDataBaseParameters"=>$locParamResult, "RemoteDataBaseParameters"=>$remoteParamResult)); - } - - public function getPlot($data) { - - $res = $this->init($data); - $resMgr = $this->initUserMgr(); - - $vars = $res['vars']; - $mission = $vars["missionID"]; - - $ID = $this->setID(); // unique JobID - $resDirName = WSRESULT.$ID; // Define a temporary directory for results - - if (is_dir($resDirName)) - $this->rrmdir($resDirName); - mkdir($resDirName); - chmod($resDirName,0775); - - $dom = new DomDocument("1.0"); - $dom->load(plotsXml); - - $missionTag = $dom->getElementById($mission); - $params = $missionTag->getElementsByTagName('param'); - - $paramsList = array(); - foreach ($params as $param) - $paramsList[] = $param->getAttribute('name'); - - $requestObject = (Object) array( - "nodeType" => "request", - "file-format" => "PNG", - "file-output" => "WS", - "ws-result-file" => $resDirName."/request.list.png", - "last-plotted-tab" => 1, - "timesrc" => "Interval", - "startDate" => $vars["startTime"], - "stopDate" => $vars["stopTime"], - "tabs" => array() - ); - - $pageObject = (Object) array( - "id" => 1, - "multi-plot-linked" => true, - "page-margins-activated" => true, - "page-margin-x" => 5, - "page-margin-y" => 5, - "page-orientation" => "portrait", - "page-dimension" => "ISO A4", - "page-layout-type" => "vertical", - "page-layout-object" => (Object) array( - "layout-panel-height" => 0.25, - "layout-panel-spacing" => 0, - "layout-expand" => false - ), - "panels" => array() - ); - - foreach ($paramsList as $paramToPlot) - { - $panelObject = (Object) array( - "panel-plot-type" => "timePlot", - "axes" => array(), - "params" => array() - ); - - $timeAxisObject = (Object) array( - "id" => "time", - "axis-type" => "time", - "axis-range-extend" => true - ); - $panelObject->{"axes"}[] = $timeAxisObject; - - $yAxisObject = (Object) array( - "id" => "y-left", - "axis-type" => "y-left", - "axis-range-extend" => true - ); - $panelObject->{"axes"}[] = $yAxisObject; - - $paramObject = (Object) array( - "id" => 1, - "param-id" => $paramToPlot, - "param-drawing-type" => "serie", - "param-drawing-object" => (Object) array( - "serie-yaxis" => "y-left", - "serie-lines-activated" => true - ) - ); - $panelObject->{"params"}[] = $paramObject; - - $pageObject->{"panels"}[] = $panelObject; + if ($wsParamResult != '') $wsParamResult = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $wsParamResult); + + if (($locParamResult == '') && ($remoteParamResult == '') && ($wsParamResult == '')) { + if ($this->isSoap) throw new SoapFault("server05", "No params descriptions .xml files for " . $this->userID . " user"); + else return array('success' => false, 'message' => "No params descriptions .xml files for " . $this->userID . " user"); + } + + $wsres = $this->resultMgr->addResult(__FUNCTION__, $vars, $this->userID, $wsParamResult . ";" . $locParamResult . ";" . $remoteParamResult); + + return array('success' => true, 'WorkSpace' => array("LocalDataBaseParameters" => $locParamResult, "RemoteDataBaseParameters" => $remoteParamResult)); } - - $requestObject->{"tabs"}[] = $pageObject; - - require_once(INTEGRATION_SRC_DIR."RequestManager.php"); - if (!isset($this->requestManager)) - $this->requestManager = new RequestManagerClass(); - - try { - $plotResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PARAMS, $requestObject); - } catch (Exception $e) { - if ($this->isSoap) throw new SoapFault("plot01", 'Exception detected : '.$e->getMessage()); - else return array('success' => false, 'message' => 'Exception detected : '.$e->getMessage()); + + public function getPlot($data) + { + + $res = $this->init($data); + $resMgr = $this->initUserMgr(); + + $vars = $res['vars']; + $mission = $vars["missionID"]; + + $ID = $this->setID(); // unique JobID + $resDirName = WSRESULT . $ID; // Define a temporary directory for results + + if (is_dir($resDirName)) + $this->rrmdir($resDirName); + mkdir($resDirName); + chmod($resDirName, 0775); + + $dom = new DomDocument("1.0"); + $dom->load(plotsXml); + + $missionTag = $dom->getElementById($mission); + $params = $missionTag->getElementsByTagName('param'); + + $paramsList = array(); + foreach ($params as $param) + $paramsList[] = $param->getAttribute('name'); + + $requestObject = (Object)array( + "nodeType" => "request", + "file-format" => "PNG", + "file-output" => "WS", + "ws-result-file" => $resDirName . "/request.list.png", + "last-plotted-tab" => 1, + "timesrc" => "Interval", + "startDate" => $vars["startTime"], + "stopDate" => $vars["stopTime"], + "tabs" => array() + ); + + $pageObject = (Object)array( + "id" => 1, + "multi-plot-linked" => true, + "page-margins-activated" => true, + "page-margin-x" => 5, + "page-margin-y" => 5, + "page-orientation" => "portrait", + "page-dimension" => "ISO A4", + "page-layout-type" => "vertical", + "page-layout-object" => (Object)array( + "layout-panel-height" => 0.25, + "layout-panel-spacing" => 0, + "layout-expand" => false + ), + "panels" => array() + ); + + foreach ($paramsList as $paramToPlot) { + $panelObject = (Object)array( + "panel-plot-type" => "timePlot", + "axes" => array(), + "params" => array() + ); + + $timeAxisObject = (Object)array( + "id" => "time", + "axis-type" => "time", + "axis-range-extend" => true + ); + $panelObject->{"axes"}[] = $timeAxisObject; + + $yAxisObject = (Object)array( + "id" => "y-left", + "axis-type" => "y-left", + "axis-range-extend" => true + ); + $panelObject->{"axes"}[] = $yAxisObject; + + $paramObject = (Object)array( + "id" => 1, + "param-id" => $paramToPlot, + "param-drawing-type" => "serie", + "param-drawing-object" => (Object)array( + "serie-yaxis" => "y-left", + "serie-lines-activated" => true + ) + ); + $panelObject->{"params"}[] = $paramObject; + + $pageObject->{"panels"}[] = $panelObject; + } + + $requestObject->{"tabs"}[] = $pageObject; + + require_once(INTEGRATION_SRC_DIR . "RequestManager.php"); + if (!isset($this->requestManager)) + $this->requestManager = new RequestManagerClass(); + + try { + $plotResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PARAMS, $requestObject); + } catch (Exception $e) { + if ($this->isSoap) throw new SoapFault("plot01", 'Exception detected : ' . $e->getMessage()); + else return array('success' => false, 'message' => 'Exception detected : ' . $e->getMessage()); + } + + return array('success' => true, 'plotDirectoryURL' => $ID); } - return array('success' => true, 'plotDirectoryURL' => $ID); - } - - public function getResultPlot($data) { - - $res = $this->init($data); - $vars = $res['vars']; - $ID = $vars["plotDirectoryURL"]; - $filename = WSRESULT.$ID."/request.list.png"; - if (file_exists($filename)) { - $plotWSresult=WSRESULT.$ID."/request.list.png"; - return array('success' => true, 'plotFileURL' => 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$plotWSresult)); + public function getResultPlot($data) + { + + $res = $this->init($data); + $vars = $res['vars']; + $ID = $vars["plotDirectoryURL"]; + $filename = WSRESULT . $ID . "/request.list.png"; + if (file_exists($filename)) { + $plotWSresult = WSRESULT . $ID . "/request.list.png"; + return array('success' => true, 'plotFileURL' => 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $plotWSresult)); + } else + return array('success' => false); + } - else - return array('success' => false); - } + public function getParameterList($data) + { + + $res = $this->init($data); - public function getParameterList($data) { - - $res = $this->init($data); - - $resMgr = $this->initUserMgr(); + $resMgr = $this->initUserMgr(); - $vars = $res['vars']; + $vars = $res['vars']; - $locParamSrc = USERPATH.$this->userID.'/WS/LocalParams.xml'; + $locParamSrc = USERPATH . $this->userID . '/WS/LocalParams.xml'; // $remoteParamSrc = USERPATH.$this->userID.'/WS/RemoteParams.xml'; - $wsParamSrc = USERPATH.$this->userID.'/WS/WsParams.xml'; - $locParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID.'_'.'LocalParams'); + $wsParamSrc = USERPATH . $this->userID . '/WS/WsParams.xml'; + $locParamResult = $this->resultMgr->getResOutputName(__FUNCTION__, $this->userID . '_' . 'LocalParams'); // $remoteParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,'RemoteParams'); - $wsParamResult = $this->resultMgr->getResOutputName(__FUNCTION__,$this->userID.'_'.'WsParams'); - - if (!copy($locParamSrc,$locParamResult)) - $locParamResult = ''; - else { - $piBase = new DomDocument("1.0"); - $piBase->formatOutput = true; - $piBase->preserveWhiteSpace = false; - - $dom = new DomDocument("1.0"); - $dom->load($locParamResult); - - $xsl = new DomDocument("1.0"); - $xsl->load(XMLPATH.'dd2WStree.xsl'); - - $xslt = new XSLTProcessor(); - $xslt->importStylesheet($xsl); - - $dom->loadXML($xslt->transformToXML($dom)); - - $dom->formatOutput = true; - $dom->preserveWhiteSpace = false; - $chum_ger = $dom->getElementById("Rosetta@C-G : Plot Only!"); - if ($chum_ger != NULL) $chum_ger->setAttribute("target","Churyumov-Gerasimenko"); - $dom->save($locParamResult); - } + $wsParamResult = $this->resultMgr->getResOutputName(__FUNCTION__, $this->userID . '_' . 'WsParams'); + + if (!copy($locParamSrc, $locParamResult)) + $locParamResult = ''; + else { + $piBase = new DomDocument("1.0"); + $piBase->formatOutput = true; + $piBase->preserveWhiteSpace = false; + + $dom = new DomDocument("1.0"); + $dom->load($locParamResult); + + $xsl = new DomDocument("1.0"); + $xsl->load(XMLPATH . 'dd2WStree.xsl'); + + $xslt = new XSLTProcessor(); + $xslt->importStylesheet($xsl); + + $dom->loadXML($xslt->transformToXML($dom)); + + $dom->formatOutput = true; + $dom->preserveWhiteSpace = false; + $chum_ger = $dom->getElementById("Rosetta@C-G : Plot Only!"); + if ($chum_ger != NULL) $chum_ger->setAttribute("target", "Churyumov-Gerasimenko"); + $dom->save($locParamResult); + } // if (!copy($remoteParamSrc,$remoteParamResult)) // $remoteParamResult = ''; - if (!copy($wsParamSrc,$wsParamResult)) - $wsParamResult = ''; - - if ($locParamResult !='') $locParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$locParamResult); + if (!copy($wsParamSrc, $wsParamResult)) + $wsParamResult = ''; + + if ($locParamResult != '') $locParamResult = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $locParamResult); // if ($remoteParamResult !='') $remoteParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$remoteParamResult); - if ($wsParamResult !='') $wsParamResult = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$wsParamResult); + if ($wsParamResult != '') $wsParamResult = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $wsParamResult); - if (($locParamResult =='') && ($remoteParamResult =='') && ($wsParamResult =='')){ - if ($this->isSoap) throw new SoapFault("server05","No params descriptions .xml files for ".$this->userID." user"); - else return array('success' => false, 'message' => "No params descriptions .xml files for ".$this->userID." user"); - } + if (($locParamResult == '') && ($remoteParamResult == '') && ($wsParamResult == '')) { + if ($this->isSoap) throw new SoapFault("server05", "No params descriptions .xml files for " . $this->userID . " user"); + else return array('success' => false, 'message' => "No params descriptions .xml files for " . $this->userID . " user"); + } - $wsres = $this->resultMgr->addResult(__FUNCTION__,$vars,$this->userID,$wsParamResult.";".$locParamResult.";".$remoteParamResult); + $wsres = $this->resultMgr->addResult(__FUNCTION__, $vars, $this->userID, $wsParamResult . ";" . $locParamResult . ";" . $remoteParamResult); - return array('success' => true,'ParameterList' => array("UserDefinedParameters"=>$wsParamResult, "LocalDataBaseParameters"=>$locParamResult, "RemoteDataBaseParameters"=>$remoteParamResult)); - } + return array('success' => true, 'ParameterList' => array("UserDefinedParameters" => $wsParamResult, "LocalDataBaseParameters" => $locParamResult, "RemoteDataBaseParameters" => $remoteParamResult)); + } - public function getNewToken() { - $timeStamp = (new DateTime())->getTimestamp(); - // generate token from timeStamp and some salt - $newToken = md5(1321 * (int)($timeStamp/timeLimitQuery)); - return array('success' => true, 'token' => $newToken); - } + public function getNewToken() + { + $timeStamp = (new DateTime())->getTimestamp(); + // generate token from timeStamp and some salt + $newToken = md5(1321 * (int)($timeStamp / timeLimitQuery)); + return array('success' => true, 'token' => $newToken); + } ///////////////////////////////////////START GET DATASET /////////////////////////////// - public function getParameter($data) { + public function getParameter($data) + { - $multiParam = false; + $multiParam = false; - $res = $this->init($data); - $resMgr = $this->initUserMgr(); + $res = $this->init($data); + $resMgr = $this->initUserMgr(); - if (!$res['success']){ - if ($this->isSoap) throw new SoapFault("server01","Cannot init user manager"); - else return array('success' => false, 'message' => "Cannot init user manager"); - } + if (!$res['success']) { + if ($this->isSoap) throw new SoapFault("server01", "Cannot init user manager"); + else return array('success' => false, 'message' => "Cannot init user manager"); + } - $vars = $res['vars']; + $vars = $res['vars']; - if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0){ - if ($this->isSoap) throw new SoapFault("request01","Start time must be higher than stop time"); - else return array('success' => false, 'message' => "Start time must be higher than stop time"); - } - elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0){ - if ($this->isSoap) throw new SoapFault("request02","You time interval equal 0 start is ".$vars["stopTime"]." stop is ".$vars["startTime"]); - else return array('success' => false, 'message' => "You time interval equal 0"); - } - - $dataFileName = $this->getDataFileName($vars, $multiParam); + if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0) { + if ($this->isSoap) throw new SoapFault("request01", "Start time must be higher than stop time"); + else return array('success' => false, 'message' => "Start time must be higher than stop time"); + } elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0) { + if ($this->isSoap) throw new SoapFault("request02", "You time interval equal 0 start is " . $vars["stopTime"] . " stop is " . $vars["startTime"]); + else return array('success' => false, 'message' => "You time interval equal 0"); + } - if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName']; - else { - if ($this->isSoap) throw new SoapFault("request03",$dataFileName['message']); - else return array('success' => false, 'message' => $dataFileName['message']); - } + $dataFileName = $this->getDataFileName($vars, $multiParam); + + if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName']; + else { + if ($this->isSoap) throw new SoapFault("request03", $dataFileName['message']); + else return array('success' => false, 'message' => $dataFileName['message']); + } - $paramId = array(); - array_push($paramId, $vars["parameterID"]); + $paramId = array(); + array_push($paramId, $vars["parameterID"]); // $paramId[] = $vars["parameterID"]; - if (!$vars["timeFormat"]) - $timeFormat = "ISO8601"; - else - $timeFormat = $vars["timeFormat"]; - - if (!$vars["gzip"]) - $gzip = 0; - else - $gzip = $vars["gzip"]; -/* - if (!$vars["stream"]) - $stream = 0; - else - $stream = $vars["stream"];*/ - - $res = $this->doDownloadRequest( - array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $vars["sampling"]), - array("params" => $paramId), - array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID), - array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream), - $dataFileName); - - - if ($res['success']) return $res; - else { - if ($this->isSoap) throw new SoapFault("request03",$res['message']); - else return array('success' => false, 'message' => $res['message']); + if (!$vars["timeFormat"]) + $timeFormat = "ISO8601"; + else + $timeFormat = $vars["timeFormat"]; + + if (!$vars["gzip"]) + $gzip = 0; + else + $gzip = $vars["gzip"]; + /* + if (!$vars["stream"]) + $stream = 0; + else + $stream = $vars["stream"];*/ + + $res = $this->doDownloadRequest( + array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $vars["sampling"]), + array("params" => $paramId), + array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID), + array("format" => $vars["outputFormat"], "timeFormat" => $timeFormat, "gzip" => $gzip, "stream" => $stream), + $dataFileName); + + + if ($res['success']) return $res; + else { + if ($this->isSoap) throw new SoapFault("request03", $res['message']); + else return array('success' => false, 'message' => $res['message']); + } } - } + ///////////////////////////////////////START GET ORBITES /////////////////////////////// - public function getOrbites($data) { + public function getOrbites($data) + { - $multiParam = false; + $multiParam = false; - $res = $this->init($data); + $res = $this->init($data); - $resMgr = $this->initUserMgr(); + $resMgr = $this->initUserMgr(); - if (!$resMgr['success']){ - if ($this->isSoap) throw new SoapFault("server01","Cannot init user manager"); - else return array('success' => false, 'message' => "Cannot init user manager"); - } + if (!$resMgr['success']) { + if ($this->isSoap) throw new SoapFault("server01", "Cannot init user manager"); + else return array('success' => false, 'message' => "Cannot init user manager"); + } - $vars = $res['vars']; + $vars = $res['vars']; - if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0){ - if ($this->isSoap) throw new SoapFault("request01","Start time must be higher than stop time"); - else return array('success' => false, 'message' => "Start time must be higher than stop time"); - } - elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0){ - if ($this->isSoap) throw new SoapFault("request02","You time interval equal 0 start is ".$vars["stopTime"]." stop is ".$vars["startTime"]); - else return array('success' => false, 'message' => "You time interval equal 0"); - } - - - - $spacecraft = $vars["spacecraft"]; - $coordinateSystem = $vars["coordinateSystem"]; - if ($spacecraft == "GALILEO") $spacecraft = ucfirst(strtolower($spacecraft)); - if (!$vars["units"]) - $units = "km"; - else - $units = $vars["units"]; - - $paramId = array(); - - $orbitRequest = array("startTime" => $vars["startTime"], - "stopTime" => $vars["stopTime"], - "spacecraft" => $spacecraft, - "coordinateSystem" => $coordinateSystem, - "units" => $units - ); - - - $orbitesParam = $this->getOrbitesParameter($orbitRequest); - if ($orbitesParam['success']) $orbParam = $orbitesParam['parameterID']; - else { - $orbParam = 'successEstfalse'; - if ($this->isSoap) throw new SoapFault("request03",$orbitesParam['message']); - else return array('success' => false, 'message' => $orbitesParam['message']); - } + if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0) { + if ($this->isSoap) throw new SoapFault("request01", "Start time must be higher than stop time"); + else return array('success' => false, 'message' => "Start time must be higher than stop time"); + } elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0) { + if ($this->isSoap) throw new SoapFault("request02", "You time interval equal 0 start is " . $vars["stopTime"] . " stop is " . $vars["startTime"]); + else return array('success' => false, 'message' => "You time interval equal 0"); + } - - $dataFileName = $this->getDataFileName($orbitesParam, $multiParam); - if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName']; - else { - if ($this->isSoap) throw new SoapFault("request03",$dataFileName['message']); - else return array('success' => false, 'message' => $dataFileName['message']); - } - - array_push($paramId, $orbParam); + $spacecraft = $vars["spacecraft"]; + $coordinateSystem = $vars["coordinateSystem"]; + if ($spacecraft == "GALILEO") $spacecraft = ucfirst(strtolower($spacecraft)); + if (!$vars["units"]) + $units = "km"; + else + $units = $vars["units"]; + + $paramId = array(); + + $orbitRequest = array("startTime" => $vars["startTime"], + "stopTime" => $vars["stopTime"], + "spacecraft" => $spacecraft, + "coordinateSystem" => $coordinateSystem, + "units" => $units + ); + + + $orbitesParam = $this->getOrbitesParameter($orbitRequest); + if ($orbitesParam['success']) $orbParam = $orbitesParam['parameterID']; + else { + $orbParam = 'successEstfalse'; + if ($this->isSoap) throw new SoapFault("request03", $orbitesParam['message']); + else return array('success' => false, 'message' => $orbitesParam['message']); + } + + + $dataFileName = $this->getDataFileName($orbitesParam, $multiParam); + + if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName']; + else { + if ($this->isSoap) throw new SoapFault("request03", $dataFileName['message']); + else return array('success' => false, 'message' => $dataFileName['message']); + } + + array_push($paramId, $orbParam); // $paramId[] = $vars["parameterID"]; - if (!$vars["timeFormat"]) - $timeFormat = "ISO8601"; - else - $timeFormat = $vars["timeFormat"]; - - if (!$vars["gzip"]) - $gzip = 0; - else - $gzip = $vars["gzip"]; - - $res = $this->doDownloadRequest( - array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $vars["sampling"]), - array("params" => $paramId), - array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID), - array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream), - $dataFileName); - - - if ($res['success']) return $res; - else { - if ($this->isSoap) throw new SoapFault("request03",$res['message']); - else return array('success' => false, 'message' => $res['message']); + if (!$vars["timeFormat"]) + $timeFormat = "ISO8601"; + else + $timeFormat = $vars["timeFormat"]; + + if (!$vars["gzip"]) + $gzip = 0; + else + $gzip = $vars["gzip"]; + + $res = $this->doDownloadRequest( + array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $vars["sampling"]), + array("params" => $paramId), + array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID), + array("format" => $vars["outputFormat"], "timeFormat" => $timeFormat, "gzip" => $gzip, "stream" => $stream), + $dataFileName); + + + if ($res['success']) return $res; + else { + if ($this->isSoap) throw new SoapFault("request03", $res['message']); + else return array('success' => false, 'message' => $res['message']); + } } - } - + ///////////////////////////////////////START GET DATASET /////////////////////////////// - public function getDataset($data) { - $multiParam = true; + public function getDataset($data) + { + $multiParam = true; + + $res = $this->init($data); - $res = $this->init($data); - - $resMgr = $this->initUserMgr(); + $resMgr = $this->initUserMgr(); - $vars = $res['vars']; + $vars = $res['vars']; - if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0){ - if ($this->isSoap) throw new SoapFault("request01","Start time must be higher than stop time"); - else return array('success' => false, 'message' => "Start time must be higher than stop time"); - } - elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0){ - if ($this->isSoap) throw new SoapFault("request02","You time interval equal 0"); - else return array('success' => false, 'message' => "You time interval equal 0"); + if ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) < 0) { + if ($this->isSoap) throw new SoapFault("request01", "Start time must be higher than stop time"); + else return array('success' => false, 'message' => "Start time must be higher than stop time"); + } elseif ((strtotime($vars["stopTime"]) - strtotime($vars["startTime"])) == 0) { + if ($this->isSoap) throw new SoapFault("request02", "You time interval equal 0"); + else return array('success' => false, 'message' => "You time interval equal 0"); + } + + $dataFileName = $this->getDataFileName($vars, $multiParam); + + if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName']; + else { + if ($this->isSoap) throw new SoapFault("request03", $dataFileName['message']); + else return array('success' => false, 'message' => $dataFileName['message']); + } + $paramId = array(); + $localData = simplexml_load_file(USERPATH . $this->userID . '/WS/LocalParams.xml'); + + if (!$vars["sampling"]) { + $xpath = "//dataset[@xml:id='" . $vars['datasetID'] . "']/@sampling"; + $tmp = $localData->xpath($xpath); + $vars["sampling"] = (string)$tmp[0]; + + $matches = array(); + preg_match("/([a-z])$/", $vars["sampling"], $matches); + + + $dataFileName = $this->getDataFileName($vars, $multiParam); + + if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName']; + else { + if ($this->isSoap) throw new SoapFault("request03", $dataFileName['message']); + else return array('success' => false, 'message' => $dataFileName['message']); + } + + $vars["sampling"] = strtr($vars["sampling"], array($matches[1] => "")); + switch ($matches[1]) { + case 's': + $sampling = floatval($vars["sampling"]); + break; + case 'm': + $sampling = floatval($vars["sampling"]) * 60; + break; + case 'h': + $sampling = floatval($vars["sampling"]) * 60 * 60; + break; + default: + } + } + + $xpath = "//dataset[@xml:id='" . $vars['datasetID'] . "']/parameter/@*[namespace-uri()='http://www.w3.org/XML/1998/namespace' and local-name()='id']"; + $pars = $localData->xpath($xpath); + + foreach ($pars as $p) + $paramId[] = (string)$p[0]; + + if (!$vars["timeFormat"]) + $timeFormat = "ISO8601"; + else + $timeFormat = $vars["timeFormat"]; + + if (!$vars["gzip"]) + $gzip = 0; + else + $gzip = $vars["gzip"]; + + $res = $this->doDownloadRequest( + array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $sampling), + array("params" => $paramId), + array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID), + array("format" => $vars["outputFormat"], "timeFormat" => $timeFormat, "gzip" => $gzip, "stream" => $stream), + $dataFileName); + + + if ($res['success']) return $res; + else { + if ($this->isSoap) throw new SoapFault("request03", $res['message']); + else return array('success' => false, 'message' => $res['message']); + } } - - $dataFileName = $this->getDataFileName($vars, $multiParam); - if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName']; - else { - if ($this->isSoap) throw new SoapFault("request03",$dataFileName['message']); - else return array('success' => false, 'message' => $dataFileName['message']); +////////////////////////////////////////END GET PARAMETERS ///////////////////////////////// + protected function getOrbitesParameter($orbitRequest) + { + + $orbitesXml = new DomDocument(); + + if (file_exists(orbitesXml)) { + $orbitesXml->load(orbitesXml); + $xpath = new DOMXpath($orbitesXml); + $path = '//orbites[@mission="' . $orbitRequest['spacecraft'] . '" and @coordinate_system="' . $orbitRequest['coordinateSystem'] . '" and @units="' . $orbitRequest['units'] . '" ] '; + + $orbites = $xpath->query($path); + foreach ($orbites as $orbite) { + $paramInfo = $this->myParamsInfoMgr->GetDDInfoFromParameterID($orbite->getAttribute('xml:id')); + $paramStart = $paramInfo['dataset']['starttime']; + $paramStop = $paramInfo['dataset']['stoptime']; + + if ((strtotime($paramStart) <= strtotime($orbitRequest['startTime']) && (strtotime($orbitRequest['stopTime'])) <= strtotime($paramStop))) { + + return array('success' => true, + 'parameterID' => $orbite->getAttribute('xml:id'), + 'startTime' => $orbitRequest['startTime'], + 'stopTime' => $orbitRequest['stopTime'] + ); + } + } + return array('success' => false, + 'message' => + "Cannot find orbites for " . $orbitRequest['spacecraft'] . " between " . $orbitRequest['startTime'] . " in " . $orbitRequest['units'] . " " . $orbitRequest['coordinateSystem'] . " and " . $orbitRequest['stopTime'] . " ($paramStart - $paramStop) "); + } else { + return array('success' => false, 'message' => "Orbits file doesn't exist"); + } } - $paramId = array(); - $localData = simplexml_load_file(USERPATH.$this->userID.'/WS/LocalParams.xml'); - - if (!$vars["sampling"]){ -$xpath = "//dataset[@xml:id='".$vars['datasetID']."']/@sampling"; -$tmp = $localData->xpath($xpath); -$vars["sampling"] = (string)$tmp[0]; -$matches=array(); -preg_match("/([a-z])$/", $vars["sampling"], $matches); + protected function doDownloadRequest($interval, $paramList, $user, $formatInfo, $dataFileName) + { + if ($interval['sampling']) + $structure = 0;// sampling + else + $structure = 2; // not sampling + + $fileExtension = ""; + switch ($formatInfo['format']) { + case 'netCDF' : + if (!$jobMgr) { + if ($this->isSoap) throw new SoapFault("server01", "netCDF format not implemented"); + else return array('success' => false, 'message' => "netCDF format not implemented"); + } + break; + case 'VOTable' : + $fileformat = "vot"; + $kernelExtension = ".vot"; + $wsExtension = ".xml"; + break; + case 'ASCII' : + default : + $fileformat = "ASCII"; + $kernelExtension = ".txt"; + $wsExtension = ".txt"; + } -$dataFileName = $this->getDataFileName($vars, $multiParam); + switch ($formatInfo['timeFormat']) { + case 'unixtime' : + $timeformat = 'Timestamp'; + break; + default : + $timeformat = 'YYYY-MM-DDThh:mm:ss'; + } -if ($dataFileName['success']) $this->dataFileName = $dataFileName['fileName']; -else { - if ($this->isSoap) throw new SoapFault("request03",$dataFileName['message']); - else return array('success' => false, 'message' => $dataFileName['message']); -} + if ($formatInfo['gzip'] == 1) { + $compression = "gzip"; + $kernelExtension .= ".gz"; + $wsExtension .= ".gz"; + } else + $compression = ""; + + require_once(INTEGRATION_SRC_DIR . "RequestManager.php"); + IHMConfigClass::setUserName($this->userID); + if (!isset($this->paramLoader)) + $this->paramLoader = new IHMUserParamLoaderClass(); + + //Build parameter list + $params = array(); + + //TODO template arguments to implementer ? + foreach ($paramList['params'] as $paramId) { + $param = new stdClass; + + if (preg_match("#^ws_#", $paramId)) { + $res = $this->paramLoader->getDerivedParameterNameFromId($paramId); + if (!$res["success"]) { + if ($this->isSoap) throw new SoapFault("server02", 'Not available derived parameter ' . $paramId); + else return array('success' => false, 'message' => 'Not available derived parameter ' . $paramId); + } + $param->paramid = "ws_" . $res['name']; + } else if (preg_match("#^wsd_#", $paramId)) { + $res = $this->paramLoader->getUploadedParameterNameFromId($paramId); + if (!$res["success"]) { + if ($this->isSoap) throw new SoapFault("server02", 'Not available user parameter ' . $paramId); + else return array('success' => false, 'message' => 'Not available user parameter ' . $paramId); + } + $param->paramid = "wsd_" . $res['name']; + } else { + $param->paramid = $paramId; + } + + $params[] = $param; + } + + $obj = (object)array( + "nodeType" => "download", + "downloadSrc" => "0", + "structure" => $structure, + "refparamSampling" => false, + "sampling" => $interval['sampling'], + "timesrc" => "Interval", + "startDate" => $interval['startTime'], + "stopDate" => $interval['stopTime'], + "list" => $params, + "fileformat" => $fileformat, + "timeformat" => $timeformat, + "compression" => $compression, + "disablebatch" => true + ); + + if (!isset($this->requestManager)) + $this->requestManager = new RequestManagerClass(); + + try { + $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PARAMS, $obj); + } catch (Exception $e) { + if ($this->isSoap) throw new SoapFault("server02", 'Exception detected : ' . $e->getMessage()); + else return array('success' => false, 'message' => 'Exception detected : ' . $e->getMessage()); + } + + if (!$downloadResult['success']) { + if ($this->isSoap) throw new SoapFault("server03", $downloadResult['message']); + else return array('success' => false, 'message' => $downloadResult['message']); + } + + $resultFile = USERPATH . $this->userID . '/RES/' . $downloadResult['folder'] . '/' . $downloadResult['result']; + $resultFile .= $kernelExtension; + + if (!file_exists($resultFile)) { + if ($this->isSoap) throw new SoapFault("server04", 'Cannot retrieve result file ' . $resultFile); + else return array('success' => false, 'message' => 'Cannot retrieve result file'); + } + + rename($resultFile, WSRESULT . $this->dataFileName . $wsExtension); + $outputFile = WSRESULT . $this->dataFileName . $wsExtension; + chmod($outputFile, 0664); + $outputFile = 'http://' . str_replace(BASE_PATH, $_SERVER['SERVER_NAME'] . APACHE_ALIAS, $outputFile); + + $obj = (object)array( + 'id' => $downloadResult['id'] + ); + + try { + $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PROCESSDELETE, $obj); + } catch (Exception $e) { + //Nothing to do + } + + return array('success' => true, 'dataFileURLs' => $outputFile); -$vars["sampling"] = strtr($vars["sampling"], array($matches[1] => "")); - switch ($matches[1]) { - case 's': - $sampling = floatval($vars["sampling"]); - break; - case 'm': - $sampling = floatval($vars["sampling"])*60; - break; - case 'h': - $sampling = floatval($vars["sampling"])*60*60; - break; - default: - } - } - - $xpath = "//dataset[@xml:id='".$vars['datasetID']."']/parameter/@*[namespace-uri()='http://www.w3.org/XML/1998/namespace' and local-name()='id']"; - $pars = $localData->xpath($xpath); - - foreach ($pars as $p) - $paramId[] = (string)$p[0]; - - if (!$vars["timeFormat"]) - $timeFormat = "ISO8601"; - else - $timeFormat = $vars["timeFormat"]; - - if (!$vars["gzip"]) - $gzip = 0; - else - $gzip = $vars["gzip"]; - - $res = $this->doDownloadRequest( - array("startTime" => $vars["startTime"], "stopTime" => $vars["stopTime"], "sampling" => $sampling), - array("params" => $paramId), - array("userName" => $this->userID, "userPwd" => $this->userPWD, "sessionID" => $this->sessionID), - array("format" => $vars["outputFormat"], "timeFormat"=> $timeFormat, "gzip"=>$gzip, "stream"=>$stream), - $dataFileName); - - - if ($res['success']) return $res; - else { - if ($this->isSoap) throw new SoapFault("request03",$res['message']); - else return array('success' => false, 'message' => $res['message']); } - } -////////////////////////////////////////END GET PARAMETERS ///////////////////////////////// - protected function getOrbitesParameter($orbitRequest) { - - $orbitesXml = new DomDocument(); - - if (file_exists(orbitesXml)) { - $orbitesXml -> load(orbitesXml); - $xpath = new DOMXpath($orbitesXml); - $path = '//orbites[@mission="'.$orbitRequest['spacecraft'].'" and @coordinate_system="'.$orbitRequest['coordinateSystem'].'" and @units="'.$orbitRequest['units'].'" ] '; - - $orbites = $xpath->query($path); - foreach ($orbites as $orbite){ - $paramInfo = $this->myParamsInfoMgr->GetDDInfoFromParameterID($orbite->getAttribute('xml:id')); - $paramStart = $paramInfo['dataset']['starttime']; - $paramStop = $paramInfo['dataset']['stoptime']; - - if((strtotime($paramStart) <= strtotime($orbitRequest['startTime']) && (strtotime($orbitRequest['stopTime'])) <= strtotime($paramStop))) { - - return array('success' => true, - 'parameterID' => $orbite->getAttribute('xml:id'), - 'startTime' => $orbitRequest['startTime'], - 'stopTime' => $orbitRequest['stopTime'] + protected function timeIntervalToDuration($startTime, $stopTime) + { + + $duration = strtotime($stopTime) - strtotime($startTime); + $durationDay = intval($duration / (86400)); + $duration = $duration - $durationDay * 86400; + $durationHour = intval($duration / (3600)); + $duration = $duration - $durationHour * 3600; + $durationMin = intval($duration / (60)); + $durationSec = $duration - $durationMin * 60; + + return array("success" => true, "days" => sprintf("%04s", strval($durationDay)), + "hours" => sprintf("%02s", strval($durationHour)), + "mins" => sprintf("%02s", strval($durationMin)), + "secs" => sprintf("%02s", strval($durationSec)) ); + } + + protected function getDataFileName($vars, $multiParam) + { + if ($vars['startTime'] && $vars['stopTime'] && $vars['parameterID'] && !$multiParam) { + $fileName = $vars['parameterID'] . "-" . strtotime($vars['startTime']) . "-" . strtotime($vars['stopTime']); + if (isset($vars['sampling']) && $vars['sampling'] != "" && $vars['sampling'] != 0) + $fileName .= "-" . $vars['sampling']; + return array('success' => true, 'fileName' => $fileName); + } else if ($vars['startTime'] && $vars['stopTime'] && $vars['datasetID'] && $multiParam) { + $datasetName = strtr($vars["datasetID"], array(":" => "_")); + $fileName = $datasetName . "-" . strtotime($vars['startTime']) . "-" . strtotime($vars['stopTime']); + if (isset($vars['sampling']) && $vars['sampling'] != "" && $vars['sampling'] != 0) + $fileName .= "-" . $vars['sampling']; + return array('success' => true, 'fileName' => $fileName); + } else { + if (!$vars['startTime']) + $message = "Start time not specified"; + if (!$vars['stopTime']) + $message = "Stop time not specified"; + if (!$vars['parameterID'] && !$multiParam) + $message = "Parameter not specified"; + if (!$vars['datasetID'] && $multiParam) + $message = "DataSet not specified"; + return array('success' => false, 'message' => $message); } - } - return array('success' => false, - 'message' => - "Cannot find orbites for ".$orbitRequest['spacecraft']." between ".$orbitRequest['startTime']." in ".$orbitRequest['units']." ".$orbitRequest['coordinateSystem']." and ".$orbitRequest['stopTime']." ($paramStart - $paramStop) "); } - else { - return array('success' => false, 'message' => "Orbits file doesn't exist"); - } - } - - - protected function doDownloadRequest($interval,$paramList,$user,$formatInfo,$dataFileName) { - if ($interval['sampling']) - $structure = 0;// sampling - else - $structure = 2; // not sampling - - $fileExtension = ""; - switch ($formatInfo['format']) - { - case 'netCDF' : - if (!$jobMgr){ - if ($this->isSoap) throw new SoapFault("server01","netCDF format not implemented"); - else return array('success' => false, 'message' => "netCDF format not implemented"); - } - break; - case 'VOTable' : - $fileformat = "vot"; - $kernelExtension = ".vot"; - $wsExtension = ".xml"; - break; - case 'ASCII' : - default : - $fileformat = "ASCII"; - $kernelExtension = ".txt"; - $wsExtension = ".txt"; - } - - switch ($formatInfo['timeFormat']) - { - case 'unixtime' : - $timeformat = 'Timestamp'; - break; - default : - $timeformat = 'YYYY-MM-DDThh:mm:ss'; - } - - if ($formatInfo['gzip'] == 1) - { - $compression = "gzip"; - $kernelExtension .= ".gz"; - $wsExtension .= ".gz"; - } - else - $compression = ""; - - require_once(INTEGRATION_SRC_DIR."RequestManager.php"); - IHMConfigClass::setUserName($this->userID); - if (!isset($this->paramLoader)) - $this->paramLoader = new IHMUserParamLoaderClass(); - - //Build parameter list - $params = array(); - - //TODO template arguments to implementer ? - foreach ($paramList['params'] as $paramId) - { - $param = new stdClass; - - if (preg_match("#^ws_#",$paramId)) - { - $res = $this->paramLoader->getDerivedParameterNameFromId($paramId); - if (!$res["success"]) - { - if ($this->isSoap) throw new SoapFault("server02", 'Not available derived parameter '.$paramId); - else return array('success' => false, 'message' => 'Not available derived parameter '.$paramId); - } - $param->paramid = "ws_".$res['name']; - } - else if (preg_match("#^wsd_#",$paramId)) - { - $res = $this->paramLoader->getUploadedParameterNameFromId($paramId); - if (!$res["success"]) - { - if ($this->isSoap) throw new SoapFault("server02", 'Not available user parameter '.$paramId); - else return array('success' => false, 'message' => 'Not available user parameter '.$paramId); - } - $param->paramid = "wsd_".$res['name']; - } - else - { - $param->paramid = $paramId; - } - - $params[] = $param; - } - - $obj = (object)array( - "nodeType" => "download", - "downloadSrc" => "0", - "structure" => $structure, - "refparamSampling" => false, - "sampling" => $interval['sampling'], - "timesrc" => "Interval", - "startDate" => $interval['startTime'], - "stopDate" => $interval['stopTime'], - "list" => $params, - "fileformat" => $fileformat, - "timeformat" => $timeformat, - "compression" => $compression, - "disablebatch" => true - ); - - if (!isset($this->requestManager)) - $this->requestManager = new RequestManagerClass(); - - try { - $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PARAMS, $obj); - } catch (Exception $e) { - if ($this->isSoap) throw new SoapFault("server02", 'Exception detected : '.$e->getMessage()); - else return array('success' => false, 'message' => 'Exception detected : '.$e->getMessage()); - } - - if (!$downloadResult['success']) - { - if ($this->isSoap) throw new SoapFault("server03", $downloadResult['message']); - else return array('success' => false, 'message' => $downloadResult['message']); - } - - $resultFile = USERPATH.$this->userID.'/RES/'.$downloadResult['folder'].'/'.$downloadResult['result']; - $resultFile .= $kernelExtension; - - if (!file_exists($resultFile)) - { - if ($this->isSoap) throw new SoapFault("server04", 'Cannot retrieve result file '.$resultFile); - else return array('success' => false, 'message' => 'Cannot retrieve result file'); - } - - rename($resultFile, WSRESULT.$this->dataFileName.$wsExtension); - $outputFile = WSRESULT.$this->dataFileName.$wsExtension; - chmod ($outputFile, 0664); - $outputFile = 'http://'.str_replace(BASE_PATH,$_SERVER['SERVER_NAME'].APACHE_ALIAS,$outputFile); - - $obj = (object)array( - 'id' => $downloadResult['id'] - ); - - try { - $downloadResult = $this->requestManager->runIHMRequest($this->userID, $this->getIPclient(), FunctionTypeEnumClass::PROCESSDELETE, $obj); - } catch (Exception $e) { - //Nothing to do - } - - return array('success' => true, 'dataFileURLs' => $outputFile); - - } - - protected function timeIntervalToDuration($startTime,$stopTime) { - - $duration = strtotime($stopTime) - strtotime($startTime); - $durationDay = intval($duration/(86400)); - $duration = $duration - $durationDay*86400; - $durationHour = intval($duration/(3600)); - $duration = $duration - $durationHour*3600; - $durationMin = intval($duration/(60)); - $durationSec = $duration - $durationMin*60; - - return array("success" => true, "days" => sprintf("%04s", strval($durationDay)), - "hours" => sprintf("%02s", strval($durationHour)), - "mins" => sprintf("%02s", strval($durationMin)), - "secs" => sprintf("%02s", strval($durationSec)) - ); - } - - protected function getDataFileName($vars, $multiParam){ - if ($vars['startTime'] && $vars['stopTime'] && $vars['parameterID'] && !$multiParam){ - $fileName = $vars['parameterID']."-".strtotime($vars['startTime'])."-".strtotime($vars['stopTime']); - if (isset($vars['sampling']) && $vars['sampling'] != "" && $vars['sampling'] != 0) - $fileName .= "-".$vars['sampling']; - return array('success' => true, 'fileName' => $fileName); - } - else if ($vars['startTime'] && $vars['stopTime'] && $vars['datasetID'] && $multiParam){ - $datasetName = strtr($vars["datasetID"], array(":" => "_")); - $fileName = $datasetName."-".strtotime($vars['startTime'])."-".strtotime($vars['stopTime']); - if (isset($vars['sampling']) && $vars['sampling'] != "" && $vars['sampling'] != 0) - $fileName .= "-".$vars['sampling']; - return array('success' => true, 'fileName' => $fileName); - } - else { - if (!$vars['startTime']) - $message="Start time not specified"; - if (!$vars['stopTime']) - $message="Stop time not specified"; - if (!$vars['parameterID'] && !$multiParam) - $message="Parameter not specified"; - if (!$vars['datasetID'] && $multiParam) - $message="DataSet not specified"; - return array('success' => false, 'message' => $message); - } - } - - private function compress($srcName, $dstName) { - - $fp = fopen($srcName, "r"); - $data = fread ($fp, filesize($srcName)); - fclose($fp); - - $zp = gzopen($dstName, "w9"); - gzwrite($zp, $data); - gzclose($zp); + + private function compress($srcName, $dstName) + { + + $fp = fopen($srcName, "r"); + $data = fread($fp, filesize($srcName)); + fclose($fp); + + $zp = gzopen($dstName, "w9"); + gzwrite($zp, $data); + gzclose($zp); } } + ?> \ No newline at end of file -- libgit2 0.21.2