RequestMgr.php 7.96 KB
<?php
/**
 * @class RequestMgr
 * @version $Id: RequestMgr.php 2914 2015-05-19 10:31:38Z elena $
 *
 *
 */

class RequestMgr extends AmdaObjectMgr {

      public $obj;
      public $impex_prefix = array('impex___', 'spase__', 'CLWEB_');
      protected $searchChain;
      protected $jobXml, $jobXmlName;
      protected $parser, $paramBuilder;
      protected $derivedParamMgr;
      protected $request, $nObjects;
      protected $currentInt, $totalInt, $ttName;
      protected $paramsWithoutCode = false;
      protected $spectraParams = false;
      protected $dataBases;
      protected $types = array('request', 'condition');
      protected $argumentsByParam = array();
      protected $defaults = 'select...';
      protected $scatterOffset, $scatterOffsetX, $firstOffset;  
      protected $timeFormat = array('YYYY-MM-DDThh:mm:ss' => 0, 'YYYY MM DD hh mm ss' => 1, 'DD MM YYYY hh mm ss' => 2,  'YYYY DDD hh mm ss' => 3);
      protected $fileMgr;
      
      function __construct($type) {
 
        parent::__construct('Request.xml');
        $this->type = $type;

        $this->contentRootId = $type.'-treeRootNode';
        $this->contentRootTag = $type.'List';
        $this->objTagName = $type; //'request';
        $this->jobXmlName = USERDIR.'jobs.xml';
        $this->jobXml = new DomDocument("1.0");
        if (file_exists($this->jobXmlName)) {
           $this->jobXml->load($this->jobXmlName);
        }
        if ($type == 'request') {
           $this->id_prefix = 'req_';
           $this->attributes = array('name' => '');
           $this->optionalAttributes = array();
       }
       else {
           $this->id_prefix = 'cond_';
           $this->attributes = array('name' => '');
           //, 'timestep' => '', 'datagap' => '', 'buildchain' => '',
           //  'StartTime' => '', 'TimeInt' => '');
           $this->optionalAttributes = array();
       }
       
       if (!file_exists($this->xmlName)) {
          $this->createDom();
          $this->xp = new domxpath($this->contentDom); 
       }
       //external bases       
       if (file_exists(RemoteData.'Bases.xml')) {
          $dataBasesDoc = new DomDocument("1.0");
          $dataBasesDoc->load(RemoteData.'Bases.xml');
          $this->dataBases = $dataBasesDoc->getElementsByTagName('dataCenter');
       }

       putenv("USER_DATA_PATH=".USERDATADIR);
       putenv("USER_WS_PATH=".USERWSDIR); 
       putenv("PHP_CLASSES_PATH=".CLASSPATH);
        
    }

/*********************************************************************
*   BEGIN : generic functions
**********************************************************************/
 

  protected function setObject($obj) 
  {
      $this->obj = $obj;
  }

 
/*********************************************************************
*  END : generic functions
**********************************************************************/

  

   
 
        public function generateVOTableFromDownloadResult($id,$newName,$inputCompressed = true,$canBeAlreadyVOTable = false)
        {
        	//ToDo - use the new kernel
        	$res = array('success' => false, 'message' => 'NOT IMPLEMENTED => To implement with the new Kernel');
        }
 



/*****************************************************************
*                           PUBLIC FUNCTIONS
*****************************************************************/



        /* Stop Time from StartTime and Interval*/ 
        public function convertTime($obj)
        {

                $time = strtotime($obj->startDate);

                $interval = $obj->durationDay*86400 +
                            $obj->durationHour*3600 +
                            $obj->durationMin*60 + $obj->durationSec;
                $stopTime = gmdate("Y-m-d\TH:i:s", $time+$interval);
                $obj->stopDate = $stopTime;

                return $obj;
        }

 

        //TODO 
        public function markAsUndefined($paramId)
        {
            $n_requests = 0;

            return $n_requests;
        }

        /*
        *   Get Object JSON!!! (request or condition) into Edit
        */ 
        public function getObject($id) 
        {
                    if (!file_exists(USERREQDIR.$id)) return array('error' => NO_OBJECT_FILE);
                
                    if (!($objToGet = $this->contentDom->getElementById($id))) return array('error' => NO_SUCH_ID);
                    $obj = json_decode(file_get_contents(USERREQDIR.$id));
                    //if alias exists, replace parameter name by alias name        
                    if (file_exists(USERWSDIR.'Alias.xml')) {
                        if ($this->type == 'condition') {
                                $obj->expression =  $this->setAlias($obj->expression); 
                        }
                        else if ($this->type == 'request') {
                                for ($i=0; $i < count($obj->children); $i++) {
                                        for ($j=0; $j < count($obj->children[$i]->children); $j++) {
                                                $obj->children[$i]->children[$j]->name =  $this->setAlias($obj->children[$i]->children[$j]->name);
                                        }
                                }
                                //TODO Ajout des SCATTER
                                // if $obj->children[$i]->plotType == "SCATTER" 
                                //$obj->children[$i]->scatterParam->data->name pour 1 panel (bug si 2 panels devient $obj->children[$i]->scatterParam->data->data->name)
                            }    
                    }      
                    //if Start Time - Stop Time
                    if (!$obj->timeTables) $obj =  $this->convertTime($obj);    
                return  $obj;
        }


        /*
         * Change NAME in JSON resource
        */
        protected function renameInResource($name, $id) {
        
        	$obj = json_decode(file_get_contents(USERREQDIR.$id));
        	$obj->name = $name;
        
        	$file = fopen(USERREQDIR.$id, 'w');
        	fwrite($file, json_encode($obj));
        	fclose($file);
        }
        
        
        /*
         *    Make new request/condition resource file (JSON!!) and add it to content file
        *    ATTENTION : it is not DD parameter!!!
        */
        protected function createParameter($p)
        {
        	if ($this -> objectExistsByName($p->name)) {
        		$p->id  = $this->getObjectIdByName($p->name);
        		$this -> deleteObject($p);
        	}
        	$this->id = $this->setId();
        	if (!$this->id) return array('error' => ID_CREATION_ERROR);
        
        	//if alias exists, replace alias name by parameter name
        	if (file_exists(USERWSDIR.'Alias.xml')) {
        		if ($this->type == 'condition') {
        			$p->expression =  $this->resetAlias($p->expression);
        			$info = $p->expression;
        		}
        		else if ($this->type == 'request') {
        			$info = '';
        			for ($i=0; $i < count($p->children); $i++) {
        				for ($j=0; $j < count($p->children[$i]->children); $j++) {
        					$p->children[$i]->children[$j]->name =  $this->resetAlias($p->children[$i]->children[$j]->name);
        					$info = $info.' '.$p->children[$i]->children[$j]->name;
        				}
        			}
        		}
        	}
        
        	$this->descFileName = USERREQDIR.$this->id;
        	$p->id = $this->id;
        	// save request as json
        	$file = fopen($this->descFileName, 'w');
        	fwrite($file, json_encode($p));
        	fclose($file);
        
        	$this -> addToContent($p, $folder);
        
        	return array('id' => $this->id, 'info' => $info);
        }
        
        /*
         *        Delete request/condition JSON file
        */
        protected function deleteParameter($id){
        
        	if (file_exists(USERREQDIR.$id))
        		unlink(USERREQDIR.$id);
        }
        
        /*
         * TODO       Check file JSON objects differ in names only
        */
        protected function renameOnly($p) {
        
        	return false;
        }
      
        
}
?>