requestData)) return false; if ($this->requestData->getType(ProcessTypeEnumClass::KILL)) return true; $this->requestData->setType(ProcessTypeEnumClass::RUN); switch ($this->requestData->getRequestType()) { case ParamsRequestTypeEnumClass::XMLREQUEST: $cmd = ""; foreach ($this->requestData->getRequestNodes() as $request_index => $requestNode) { if ($cmd != "") $cmd .= " && "; $cmd .= KernelConfigClass::getKernelBinPath() . "amdaXMLRequestorTool " . $this->getRequestFilePath($request_index); } $this->requestData->setCmd($cmd); break; case ParamsRequestTypeEnumClass::PARAMGEN: $this->requestData->setCmd(KernelConfigClass::getKernelBinPath() . "amdaParameterGenerator -p " . $this->requestData->getParamId()); break; case ParamsRequestTypeEnumClass::PARAMSINFOGEN: $this->requestData->setCmd(KernelConfigClass::getKernelBinPath() . "amdaParameterInfo -p " . $this->requestData->getParamId()); break; } $this->requestData->setEnvVars(KernelConfigClass::getExecEnvVarArray()); if (!parent::init()) return false; $this->requestData->setSuccess(false); $this->requestData->setLastErrorMessage('Cannot init params request'); if ($this->requestData->getCompilationPath() == '') { $this->requestData->setLastErrorMessage('Compilation path for params request not defined'); return false; } if (!is_dir($this->requestData->getCompilationPath())) { if (!mkdir($this->requestData->getCompilationPath(), 0777)) { $this->requestData->setLastErrorMessage('Cannot create compilation path for params request'); return false; } } if ($this->requestData->getRequestType() == ParamsRequestTypeEnumClass::XMLREQUEST) { foreach ($this->requestData->getRequestNodes() as $request_index => $requestNode) { //inject time restriction if (count($this->requestData->getParamsTimeRestrictions()) > 0) { //Here foreach ($this->requestData->getParamsTimeRestrictions() as $paramId => $timeRestriction) { $requestNode->getParamsTimeRestrictions()->addParamTimeRestriction($paramId, strtotime($timeRestriction)); } } //create XML request file $doc = new DOMDocument("1.0", "UTF-8"); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; if (!$xmlNode = $requestNode->toXMLNode($doc)) { $this->requestData->setLastErrorMessage('Cannot create params request XML file for request'); return false; } $doc->appendChild($xmlNode); if (!$doc->save($this->getRequestFilePath($request_index))) { $this->requestData->setLastErrorMessage('Cannot save params request XML file for request'); return false; } libxml_use_internal_errors(true); if (!$doc->schemaValidate(KernelConfigClass::getXSDRequestFilePath())) { $error_msg = ""; $errors = libxml_get_errors(); foreach ($errors as $error) { if ($error_msg != "") $error_msg .= PHP_EOL; $error_msg .= 'XML error "' . $error->message . '" [' . $error->level . '] (Code ' . $error->code . ') in ' . $error->file . ' on line ' . $error->line . ' column ' . $error->column; } libxml_clear_errors(); $this->requestData->setLastErrorMessage('Params request XML file not valid for request' . ' (' . $error_msg . ')'); return false; } //libxml_use_internal_errors(false); } } //create config files KernelConfigClass::write($this->requestData->getWorkingPath(), $this->requestData->getCompilationPath(), $this->requestData->getLocalBasePath()); //copy parameters files foreach ($this->requestData->getParamsToCopy() as $key => $value) { if (!file_exists($value)) { $this->requestData->setLastErrorMessage('Cannot find param definition file for ' . $key); return false; } $destinationFile = KernelConfigClass::getRequestParamsPath($this->requestData->getWorkingPath()) . $key . ".xml"; if (!copy($value, $destinationFile)) { $this->requestData->setLastErrorMessage('Cannot copy param definition file for ' . $key); return false; } // get datasetID for statistics $doc = new DOMDocument("1.0", "UTF-8"); if (@$doc->load($value)) { $dsID = $doc->getElementsByTagName('dataset_id'); if ($dsID->length > 0) { if ($dsID->item(0)->nodeValue) $dsName = $dsID->item(0)->nodeValue; elseif (strpos($key, 'spase_') !== false) $dsName = 'impex'; else $dsName = 'unknown'; $this->requestData->addDatasetForStat($dsName); } } touch($destinationFile, filemtime($value)); } //create processed params files foreach ($this->requestData->getProcessParamsToCreate() as $key => $value) { $doc = new DOMDocument("1.0", "UTF-8"); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; if (!$xmlNode = $value["param"]->toXMLNode($doc)) { $this->requestData->setLastErrorMessage('Cannot create params XML file for ' . $key); return false; } $doc->appendChild($xmlNode); /*if (!$doc->schemaValidate(KernelConfigClass::getXSDParameterFilePath())) { $this->requestData->setLastErrorMessage('Params XML file not valid for '.$key); return false; }*/ $destinationFile = KernelConfigClass::getRequestParamsPath($this->requestData->getWorkingPath()) . $key . ".xml"; if (!$doc->save($destinationFile)) { $this->requestData->setLastErrorMessage('Cannot save params XML file for ' . $key); return false; } touch($destinationFile, $value["dateModif"]); } //create local params files foreach ($this->requestData->getLocalParamsToCreate() as $key => $value) { $doc = new DOMDocument("1.0", "UTF-8"); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; if (!$xmlNode = $value["param"]->toXMLNode($doc)) { $this->requestData->setLastErrorMessage('Cannot create params XML file for ' . $key); return false; } $doc->appendChild($xmlNode); $destinationFile = KernelConfigClass::getRequestParamsPath($this->requestData->getWorkingPath()) . $key . ".xml"; if (!$doc->save($destinationFile)) { $this->requestData->setLastErrorMessage('Cannot save params XML file for ' . $key); return false; } $this->requestData->addDatasetForStat('uploadedData'); touch($destinationFile, $value["dateModif"]); } //create and copy local params files foreach ($this->requestData->getLocalParamsToCreateAndCopy() as $key => $value) { $doc = new DOMDocument("1.0", "UTF-8"); $doc->preserveWhiteSpace = false; $doc->formatOutput = true; if (!$xmlNode = $value["param"]->toXMLNode($doc)) { $this->requestData->setLastErrorMessage('Cannot create params XML file for ' . $key); return false; } $doc->appendChild($xmlNode); $originFile = IHMConfigClass::getUserWSPath() . $key . ".xml"; $destinationFile = KernelConfigClass::getRequestParamsPath($this->requestData->getWorkingPath()) . $key . ".xml"; if (!$doc->save($destinationFile) || !$doc->save($originFile)) { $this->requestData->setLastErrorMessage('Cannot save params XML file for ' . $key); return false; } touch($originFile, $value["dateModif"]); touch($destinationFile, $value["dateModif"]); } return true; } /* * @brief Run a params request */ public function run() { $amdaStat = new AmdaStats($this->requestData->getUser()); if (count($this->requestData->getDatasetForStat()) > 0) $amdaStat->addTask(IHMConfigClass::getUserName(), $this->requestData->getTask(), $this->requestData->getDatasetForStat()); return parent::run(); } /* * @brief Get the request file path for AMDA_Kernel */ private function getRequestFilePath($request_index) { return $this->requestData->getWorkingPath() . "request_" . $request_index . ".xml"; } }