Blame view

php/classes/CatalogMgr.php 15 KB
d18b535d   elena   catalog draft + c...
1
2
3
4
5
6
<?php

/**
 * @class CatalogMgr
 */

901ba3f3   Elena.Budnik   upload catalog
7
8
class CatalogMgr extends TimeTableMgr 
{	             
169f14d2   Benjamin Renard   Add shared object...
9
10
	function __construct($sharedObject = FALSE) {
		parent::__construct('Tt.xml', $sharedObject);
d18b535d   elena   catalog draft + c...
11
12
13
14
15
16
17
		$this->contentRootId = 'catalog-treeRootNode';
		$this->contentRootTag = 'catalogList';
		$this->attributes = array('name' => '', 'intervals' => ''); // +  'parameters' 
		$this->optionalAttributes = array();
		$this->objTagName =   'catalog';
		$this->id_prefix = 'cat_'; // 'tt_' ?

169f14d2   Benjamin Renard   Add shared object...
18
		if (!$sharedObject && !file_exists($this->xmlName)) {
d18b535d   elena   catalog draft + c...
19
20
21
22
			  $this->createDom();
			  $this->xp = new domxpath($this->contentDom); 
		}
	}	
d18b535d   elena   catalog draft + c...
23
	
901ba3f3   Elena.Budnik   upload catalog
24
25
26
27
28
29
30
31
32
33
34
35
36
37
	public function getUploadedObject($name, $format, $onlyDescription = false) 
	{
		if ($format == 'VOT') 
		{
			$attributesToReturn = $this->vot2amda(USERTEMPDIR.$name, $onlyDescription); 
		}
		$attributesToReturn['objName'] = $name;
		$attributesToReturn['objFormat'] = $format;	 

		return  $attributesToReturn;
	}
	
	public function getTmpObject($folderId, $name, $onlyDescription = false) 
	{	
d18b535d   elena   catalog draft + c...
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
		$filePath = USERWORKINGDIR.$folderId.'/'.$name.'.xml';
		
		if (!file_exists($filePath)) 
			return array('error' => 'Cannot find result file');
		
		$dom = new DomDocument('1.0'); 
		$dom->formatOutput = true;
		
		if (!$dom -> load($filePath))
			return array('error' => 'Cannot load result file');
		$nameNodes = $dom->getElementsByTagName('name');
		if ($nameNodes->length > 0)
			$attributesToReturn['name'] = $nameNodes->item(0)->nodeValue;
		
		$descNodes = $dom->getElementsByTagName('description');
		if ($descNodes->length > 0)
			$attributesToReturn['description'] = $descNodes->item(0)->nodeValue;
		
		$creatNodes = $dom->getElementsByTagName('created');
		if ($creatNodes->length > 0)
			$attributesToReturn['created'] = $creatNodes->item(0)->nodeValue;
		
		$histNodes = $dom->getElementsByTagName('history');
		if ($histNodes->length > 0)
			$attributesToReturn['history'] = $histNodes->item(0)->nodeValue;
	
		$attributesToReturn['objName'] = $name;
		$attributesToReturn['folderId'] = $folderId;
		$attributesToReturn['success'] = true;
		
		if (!$onlyDescription)
		{
			$intNodes = $dom->getElementsByTagName('intervals');
			foreach ($intNodes as $intNode)
			{
				$startNodes = $intNode->getElementsByTagName('start');
				if ($startNodes->length <= 0)
					return array('error' => 'Error detected in result file');
					
				$stopNodes = $intNode->getElementsByTagName('stop');
				if ($stopNodes->length <= 0)
					return array('error' => 'Error detected in result file');
					
				// for catalog	
				$paramNodes = $intNode->getElementsByTagName('param');
				$params = array();
				if ($paramNodes->length > 0) 
					foreach ( $paramNodes as $paramNode ) $params[] = $paramNode->nodeValue;
					
					
				$attributesToReturn['intervals'][] = array('start' => $startNodes->item(0)->nodeValue,
									    'stop' => $stopNodes->item(0)->nodeValue,
									    'paramTable' =>  $params);
			}
			// for catalog
			$paramsNodes = $dom->getElementsByTagName('parameter');
			
			if ($paramsNodes->length > 0){
			
			  $paramsArray = array();		 
			  foreach ($paramsNodes as $paramNode) {
			  
			    $oneParam = array();
			    foreach ($paramNode->attributes as $attr) 			    
				    $oneParam[$attr->nodeName] = $attr->nodeValue;
			  
			     if (substr($paramNode->getAttribute('id'),0,8) == 'stat_cov') {		    
				    $oneParam['size'] = '1';
				    $oneParam['name'] = 'Flag';
			      }
			      
			    $paramsArray[] = $oneParam;
			  }
			$attributesToReturn['success'] = true;
			$attributesToReturn['parameters'] = $paramsArray;
			}
			else 
4a438b99   elena   catalog draft
115
116
			    return array('error' => 'No information on parameters in result file');	
		}
d18b535d   elena   catalog draft + c...
117
118
119
120
121
	
		return  $attributesToReturn;
	}

	
e82af71b   elena   catalog draft
122
123
	public function loadIntervalsFromTT($id, $typeTT, $start = NULL, $limit = NULL)
	{
169f14d2   Benjamin Renard   Add shared object...
124
125
126
127
		if ($typeTT == 'sharedcatalog') {
	    	//Shared object
			$sharedObjMgr = new SharedObjectsMgr();
			$path = $sharedObjMgr->getDataFilePath('catalog', $id);
e82af71b   elena   catalog draft
128
129
	      }
	    else {
169f14d2   Benjamin Renard   Add shared object...
130
		    $path = USERTTDIR.$id.'.xml';	
e82af71b   elena   catalog draft
131
132
133
	    }
			  
	      //load intervals from TT id
169f14d2   Benjamin Renard   Add shared object...
134
135
		if (!file_exists($path))
			return array('success' => false, 'message' => "Cannot find Catalog file ".$typeTT);
e82af71b   elena   catalog draft
136
		
169f14d2   Benjamin Renard   Add shared object...
137
	      $this->objectDom->load($path);
e82af71b   elena   catalog draft
138
	      
4a438b99   elena   catalog draft
139
140
		if (!($objToGet = $this->objectDom->getElementById($id)))
			return array('success' => false, 'message' => NO_SUCH_ID." ".$id);
e82af71b   elena   catalog draft
141
142
143
144
145
146
	      
	      $xpath = new DOMXPath($this->objectDom);
	      $intervals =  $xpath->query('//intervals');
	      
	      $result = array();
	      
4a438b99   elena   catalog draft
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
		if (!isset($start) || !isset($limit))
		{
			foreach ($intervals as $interval)
			{
				$startTime = $interval->getElementsByTagName('start')->item(0)->nodeValue;
				$stopTime  = $interval->getElementsByTagName('stop')->item(0)->nodeValue;
				// for catalog	
				$paramNodes = $interval->getElementsByTagName('param');
				$params = array();
				if ($paramNodes->length > 0) 
					foreach ( $paramNodes as $paramNode ) $params[] = $paramNode->nodeValue;
									
				array_push($result, array('start' => $startTime, 'stop' => $stopTime,'paramTable' =>  $params));
				   
			}
		}
		else
e82af71b   elena   catalog draft
164
	      {
4a438b99   elena   catalog draft
165
166
			for ($i = 0; $i < $limit; ++$i)
			{
e82af71b   elena   catalog draft
167
168
			  if ($start+$i >= $intervals->length)
				  break;
4a438b99   elena   catalog draft
169
170
171
172
173
174
175
176
177
178
179
180
				$startTime = $intervals->item($start+$i)->getElementsByTagName('start')->item(0)->nodeValue;
				$stopTime  = $intervals->item($start+$i)->getElementsByTagName('stop')->item(0)->nodeValue;
				// for catalog
				$paramNodes = $intervals->item($start+$i)->getElementsByTagName('param');
				$params = array();
				if ($paramNodes->length > 0) 
					foreach ( $paramNodes as $paramNode ) $params[] = $paramNode->nodeValue;
									
				array_push($result, array('start' => $startTime, 'stop' => $stopTime,'paramTable' =>  $params));
			}
		}
		// for catalog : params header
40890ad7   elena   parameters
181
			$paramsNodes =  $xpath->query('//parameters/parameter');
4a438b99   elena   catalog draft
182
183
184
185
186
187
188
189
190
191
192
193
194
195
			$paramsArray = array();
			
			if ($paramsNodes->length > 0)
			{									 
				foreach ($paramsNodes as $paramNode) 
				{			  
					$oneParam = array();
					foreach ($paramNode->attributes as $attr) 			    
						$oneParam[$attr->nodeName] = $attr->nodeValue;			  			     			      
					$paramsArray[] = $oneParam;
				}
			}			
			 			
		return array(
e82af71b   elena   catalog draft
196
197
			  'totalCount' => $intervals->length,
			  'intervals'  => $result,
4a438b99   elena   catalog draft
198
			  'parameters' => $paramsArray,
e82af71b   elena   catalog draft
199
200
201
202
203
204
			  'start' => isset($start) ? $start : 0,
			  'limit' => isset($limit) ? $limit : 0,
			  'success'    => true
	      );
	  
      }
d18b535d   elena   catalog draft + c...
205
206
207
208

        /*
        *   catalog header
        */
4a438b99   elena   catalog draft
209
210
	protected function setParamDescription($params) 
	{		
40890ad7   elena   parameters
211
		$paramsElement = $this->objectDom->createElement('parameters');
4a438b99   elena   catalog draft
212
213
		foreach ($params as $param) 
		{
40890ad7   elena   parameters
214
			$paramElement = $this->objectDom->createElement('parameter');
4a438b99   elena   catalog draft
215
216
217
218
219
220
221
			$attrArray = (array)$param;            
			foreach ($attrArray as $key => $value)
				$paramElement->setAttribute($key, $value);
			$paramsElement->appendChild($paramElement);    
		}
	
	return $paramsElement;
d18b535d   elena   catalog draft + c...
222
	}
4a438b99   elena   catalog draft
223
224
225
226
227
228
229
230
231
232
233
        
      protected function createIntervalElement($interval) 
      {
		$newInterval = $this->objectDom->createElement('intervals');
		$newInterval->appendChild($this->objectDom->createElement('start',$interval['start']));
		$newInterval->appendChild($this->objectDom->createElement('stop',$interval['stop']));
		foreach ($interval as $key =>$value) {
			if (substr($key,0,5) == 'param')
			$newInterval->appendChild($this->objectDom->createElement('param', $value));
		
		}
d18b535d   elena   catalog draft + c...
234
235
236
	return $newInterval;
      }
      
4a438b99   elena   catalog draft
237
238
	public function createObject($p, $folder)
	{	 
d18b535d   elena   catalog draft + c...
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
		if ($p -> leaf)
		{
			$result = $this->createParameter($p, $folder);
			if ($result['error'])
				return $result;
				
			$cacheMgr = new CatalogCacheMgr();
			
			if (isset($p->cacheToken) && ($p->cacheToken != ''))
			{
				$resultSaveInt = $cacheMgr->saveInTT($result['id'], "update", $p->cacheToken);
				if (!$resultSaveInt['success'])
				{
					if ($resultSaveInt['message'])
						return array('error' => $resultSaveInt['message']);
					else
						return array('error' => 'Unknown error during intervals save');
				}
			}
			return $result;
		}
		//      else return $this->createFolder($p);
		//TODO check if this is possible?
		else return array('error' => 'createFolder should be called from RENAME');
	
	}
	
9d412dda   elena   catalog tmp and r...
266
	public function initForChart($id, $name, $isTmpObject, $typeTT) 
86263051   elena   visu second draft
267
	{
9d412dda   elena   catalog tmp and r...
268
	       $intervals_res = $this->getCatalogParamDescription($id, $name, $isTmpObject, $typeTT);
86263051   elena   visu second draft
269
270
271
272
		
		if (!$intervals_res['success'])
			return $intervals_res;

9d412dda   elena   catalog tmp and r...
273
		$paramHeaders = array();
86263051   elena   visu second draft
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
		
		foreach ( $intervals_res['parameters'] as $param ) {
		 
		  if ($param['size'] > 1) {
		  
			for ($i = 0; $i < $param['size']; $i++) {
				$paramComp = array();
				$paramComp['id'] = $param['id'].'_'.$i;
				$paramComp['name'] = $param['name'].'_'.$i;
			//	$paramComp['size'] = 1;
				
				$paramHeaders[] = $paramComp;
			}
		  }
		  else {
		       $paramHeaders[] = $param;    
		  }
		}
			
9d412dda   elena   catalog tmp and r...
293
	//	unset($intervals_res);
86263051   elena   visu second draft
294
		 
9d412dda   elena   catalog tmp and r...
295
296
		return array('success' => true, 'parameters' => $paramHeaders, 
				'totalCount' =>  $intervals_res['totalCount'], 'name' => $intervals_res['name']);
86263051   elena   visu second draft
297
298
	}
	
9d412dda   elena   catalog tmp and r...
299
300
	   	
	public function getIntervalsForChart($id, $name, $isTmpObject, $type) {
86263051   elena   visu second draft
301
		
9d412dda   elena   catalog tmp and r...
302
303
304
305
		if ($isTmpObject)
			$intervals_res = $this->getTmpObject($id, $name); 
		else
			$intervals_res = $this->loadIntervalsFromTT($id,$type);  
86263051   elena   visu second draft
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
		
		if (!$intervals_res['success'])
			return $intervals_res;
			
		$newIntervals = array();
		 
		foreach ($intervals_res['intervals'] as $interval)
		{
			$newIntervalComp = array();
			$k = 0;
			
			for ( $j = 0; $j < count($interval['paramTable']); $j++ ) {
			 
				$param = $interval['paramTable'][$j];
				$tempArr = explode(',',$param);

				if (count($tempArr) > 1) {
					for ($i = 0; $i < count($tempArr); $i++) {
						$newIntervalComp['param'.$k] = $tempArr[$i];
						$k++;						
					}					 
				} 
				else {
				       $newIntervalComp['param'.$k] = $param;
					$k++; 
				}
			}
			$newIntervals[] = $newIntervalComp; 
		}
		
		return array('success' => true, 'intervals' => $newIntervals);
			
	}
d18b535d   elena   catalog draft + c...
339
	
9d412dda   elena   catalog tmp and r...
340
341
	public function getCatalogParamDescription($id, $name, $isTmpObject, $typeTT)
	{
169f14d2   Benjamin Renard   Add shared object...
342
343
344
345
		if ($typeTT == 'sharedcatalog') {	
			//Shared object
			$sharedObjMgr = new SharedObjectsMgr();
			$path = $sharedObjMgr->getDataFilePath('catalog', $id);
9d412dda   elena   catalog tmp and r...
346
347
		}
		elseif (!$isTmpObject) {
169f14d2   Benjamin Renard   Add shared object...
348
			$path = USERTTDIR.$id.'.xml';		
9d412dda   elena   catalog tmp and r...
349
350
		}
		else {
169f14d2   Benjamin Renard   Add shared object...
351
			$path = USERWORKINGDIR.$id.'/'.$name.'.xml';
9d412dda   elena   catalog tmp and r...
352
353
354
		}
		
	      //load intervals from Catalog id
169f14d2   Benjamin Renard   Add shared object...
355
		if (!file_exists($path))
9d412dda   elena   catalog tmp and r...
356
357
			return array('success' => false, 'message' => "Cannot find Catalog file ".$id);
		
169f14d2   Benjamin Renard   Add shared object...
358
		if (!$this->objectDom->load($path)) 
9d412dda   elena   catalog tmp and r...
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
			return array('success' => false, 'message' => "Cannot load Catalog file ".$id);
	      
// 		if (!($objToGet = $this->objectDom->getElementById($id)))
// 			return array('success' => false, 'message' => NO_SUCH_ID." ".$id);

	      $nameNodes = $this->objectDom->getElementsByTagName('name');
	      
	      if ($nameNodes->length > 0)
			$nameReal = $nameNodes->item(0)->nodeValue;
		else 			
			$nameReal = $name;
			
	      $xpath = new DOMXPath($this->objectDom);
	      $intervals =  $xpath->query('//intervals');

	      
		// params header
		$paramsNodes =  $xpath->query('//parameters/parameter');
		$paramsArray = array();
		
		if ($paramsNodes->length > 0)
		{									 
			foreach ($paramsNodes as $paramNode) 
			{			  
				$oneParam = array();
				foreach ($paramNode->attributes as $attr) 			    
					$oneParam[$attr->nodeName] = $attr->nodeValue;			  			     			      
				$paramsArray[] = $oneParam;
			}
		}			
					
		return array(
			  'name'      =>  $nameReal,
			  'totalCount' => $intervals->length,
			  'parameters' => $paramsArray,
			  'success'    => true
	      );
	  
      }
f9c8b272   elena   edit catalog
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
      
// 	public function modifyObject($p) {
// 		$folder = $this->getObjectFolder($p->id);
// 		
// 		//Copy TT in a tempory file
// 		$ttFilePath = USERTTDIR.$p->id.'.xml';
// 		$tmpFileExist = FALSE;
// 		if (file_exists($ttFilePath))
// 			$tmpFileExist = copy($ttFilePath,$ttFilePath.".tmp");
// 		
// 		//Delete TT
// 		$this->deleteObject($p);
// 		
// 		//Save modifications
// 		try {
// 			$result = $this->createObject($p, $folder);
// 			if ($result['error'])
// 				throw new Exception($result['error']);
// 			if ($tmpFileExist)
// 				unlink($ttFilePath.".tmp");
// 			return array('id' => $p->id, 'info' => $result['nbIntervals'].' intervals' );
// 		}
// 		catch (Exception $e) {
// 			//Restore TT file
// 			if ($tmpFileExist)
// 			{
// 				copy($ttFilePath.".tmp", $ttFilePath);
// 				unlink($ttFilePath.".tmp");
// 			}
// 			return array ('error' => $e->getMessage());
// 		}
// 	}
901ba3f3   Elena.Budnik   upload catalog
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481

/*
* Uploaded vot catalog => convert to AMDA tmp
*/
	protected function vot2amda($tmp_file, $onlyDescription = false) 
	{		  
		// Load Catalog	
		$this->objectDom->load($tmp_file);
		$objToGet = $this->objectDom->getElementsByTagName('TABLEDATA')->item(0);
		
		$attributes = $objToGet->childNodes;
		$paramsNodes = $this->objectDom->getElementsByTagName('FIELD');
		$paramsNumber = $paramsNodes->length;
		
		foreach($attributes as $attribute)
		{
			if ($attribute->tagName == 'TR') 
			{
				$start = $attribute->getElementsByTagName('TD')->item(0)->nodeValue;
				$stop = $attribute->getElementsByTagName('TD')->item(1)->nodeValue;
				$params = array();
				
				for ($i = 2; $i < $paramsNumber; $i++)
				{
					$param = $attribute->getElementsByTagName('TD')->item($i)->nodeValue;
					
					if ($paramsNodes->item($i)->hasAttribute('arraysize'))
					{
						$param = join(",",explode(" ",trim($param)));
					}					   
					$params[] = $param;
				}					
				if (!$onlyDescription) 
					$attributesToReturn['intervals'][] = array('start' => $start, 'stop' => $stop, 'paramTable' => $params);
			}
		}

		if ($paramsNumber > 2)
		{		
			$paramsArray = array();		 
			for ($i = 2; $i < $paramsNumber; $i++)
			{			
				$oneParam = array();
				$paramNode = $paramsNodes->item($i);
				
				if ($paramNode->hasAttribute('arraysize'))
				{
					$oneParam['size'] = $paramNode->getAttribute('arraysize');
				}
				else
				{
					$oneParam['size'] = 1;
7def71a5   Elena.Budnik   redmine #5380
482
483
				}
				
901ba3f3   Elena.Budnik   upload catalog
484
485
486
				foreach ($paramNode->attributes as $attr)
				{
					if ($attr->nodeName == 'datatype')
c865df36   Elena.Budnik   dateTime datatype...
487
					{
7def71a5   Elena.Budnik   redmine #5380
488
489
490
491
						$datatype = $attr->nodeValue;
						
						if ($paramNode->hasAttribute('xtype') && (($paramNode->getAttribute('xtype') == 'dateTime') || ($paramNode->getAttribute('xtype') == 'iso8601')))
						{
c865df36   Elena.Budnik   dateTime datatype...
492
							$oneParam['type'] = 1;
7def71a5   Elena.Budnik   redmine #5380
493
494
495
496
497
498
499
500
501
502
							$paramNode->setAttribute('xtype','dateTime');
							$paramNode->setAttribute('size',1);
						}
						else if ($datatype == 'char')
						{
							$oneParam['type'] = 2;// string
							$paramNode->setAttribute('size', 1);
						}
						else 
						{
c865df36   Elena.Budnik   dateTime datatype...
503
							$oneParam['type'] = 0;//'Double';
7def71a5   Elena.Budnik   redmine #5380
504
						}
c865df36   Elena.Budnik   dateTime datatype...
505
					}
901ba3f3   Elena.Budnik   upload catalog
506
					else if ($attr->nodeName != 'arraysize')
7def71a5   Elena.Budnik   redmine #5380
507
508
509
					{
						$oneParam[$attr->nodeName] = $attr->nodeValue;
					}
901ba3f3   Elena.Budnik   upload catalog
510
511
512
513
514
515
516
517
518
519
520
521
522
523
				}											
				$paramsArray[] = $oneParam;
			}			
			$attributesToReturn['success'] = true;
			$attributesToReturn['parameters'] = $paramsArray;
		}
		
		$suffix = explode('.', basename($tmp_file));   
		$attributesToReturn['name'] = basename($tmp_file, '.'.$suffix[1]); 
		$attributesToReturn['created'] = date('Y-m-d')."T".date('H:i:s');
		$attributesToReturn['description'] = htmlspecialchars($this->objectDom->getElementsByTagName('DESCRIPTION')->item(0)->nodeValue);

		return($attributesToReturn);
	}
d18b535d   elena   catalog draft + c...
524
}
40890ad7   elena   parameters
525
?>