Blame view

src/InputOutput/IHMImpl/Tools/IHMUserParamManagerClass.php 18 KB
22521f1c   Benjamin Renard   First commit
1
2
3
<?php

/**
96c9cffa   Benjamin Renard   Keep expression p...
4
5
 * @class IHMUserParamManagerClass
 * @brief Manager for IHM user parameter properties file
22521f1c   Benjamin Renard   First commit
6
7
 * @details
 */
96c9cffa   Benjamin Renard   Keep expression p...
8
class IHMUserParamManagerClass
22521f1c   Benjamin Renard   First commit
9
10
11
12
{
	protected $userParamsList = null;
	
	//derived parameter in manager file
4c975261   Benjamin Renard   Add modif. time f...
13
14
15
16
17
	private static $mgrDerivedNode                 = 'paramList';
	private static $mgrDerivedParamNode            = 'param';
	private static $mgrDerivedParamIdAtt           = 'xml:id';
	private static $mgrDerivedParamNameAtt         = 'name';
	private static $mgrDerivedParamExpressionAtt   = 'buildchain';
22521f1c   Benjamin Renard   First commit
18
19
	
	//additional info for derived parameter
96c9cffa   Benjamin Renard   Keep expression p...
20
21
22
	private static $infoDerivedUnitsNode          = 'units';
	private static $infoDerivedYTitleNode         = 'ytitle';
	private static $infoDerivedDescriptionNode    = 'description';
b1a5ee3c   Erdogan Furkan   Integration part ...
23
	private static $infoDerivedStatusNode   	  = 'status';
96c9cffa   Benjamin Renard   Keep expression p...
24
25
26
	private static $infoDerivedParsedExpNode      = 'parsedExp';
	private static $infoDerivedParsedExpValAtt    = 'exp';
	private static $infoDerivedParsedExpHashAtt   = 'hash';
ec67a1c5   Benjamin Renard   Store template ar...
27
28
29
30
	private static $infoDerivedParsedExpParamNode    = 'param';
	private static $infoDerivedParsedExpParamIdAtt = "paramid";
	private static $infoDerivedParsedExpParamArgNode = 'arg';
	private static $infoDerivedParsedExpParamArgNameAtt = 'name';
4c975261   Benjamin Renard   Add modif. time f...
31
32
33
	private static $infoDerivedSamplingModeNode   = 'sampling_mode';
	private static $infoDerivedTimeStepNode       = 'timestep';
	private static $infoDerivedRefParamNode       = 'reference_param';
c0535e83   Benjamin Renard   Use units and yTi...
34
35

	private static $infoDerivedUndefined       = 'undefined';
22521f1c   Benjamin Renard   First commit
36
	
944199fe   Benjamin Renard   Use table definit...
37
38
39
40
41
42
43
44
45
46
47
48
49
	//uploaded parameters in manager file
	private static $mgrUploadedNode           = 'mydataList';
	private static $mgrUploadedParamNode      = 'mydata';
	private static $mgrUploadedParamIdAtt     = 'xml:id';
	private static $mgrUploadedParamNameAtt   = 'name';
	
	//additional info for uploaded parameter
	private static $infoUploadedMinSamplingNode = 'minsampling';
	private static $infoUploadedMaxSamplingNode = 'maxsampling';
	private static $infoUploadedRealVarNode     = 'realvar';
	private static $infoUploadedTypeNode        = 'type';
	private static $infoUploadedSizeNode        = 'size';
	private static $infoUploadedVIIdNode        = 'vi';
e99d9ed4   Benjamin Renard   Support fillValue...
50
        private static $infoUploadedFillValNode     = 'fillvalue';
944199fe   Benjamin Renard   Use table definit...
51
52
	private static $infoUploadedPlotTypeNode    = 'plottype';
	private static $infoUploadedTableDefNode    = 'tableDef';
b1a5ee3c   Erdogan Furkan   Integration part ...
53
	private static $infoUploadedStatusNode   	= 'status';
944199fe   Benjamin Renard   Use table definit...
54
55
56
	private static $infoUploadedUnitsNode       = 'units';
	private static $infoUploadedYTitleNode      = 'ytitle';
	
22521f1c   Benjamin Renard   First commit
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
	/*
	 * @brief Constructor
	*/
	function __construct()
	{
	}
	
	/*
	 * @brief Get derived parameter info from name ("ws_***")
	 */
	public function getDerivedParameterFromName($paramName)
	{
		if (!preg_match("#^ws_#",$paramName))
			return array("success" => false, "message" => "Bad derived parameter name");
		
		//extract real parameter name
		$realName = substr($paramName , 3);
		
		//try to load user parameters definition if not already done
		if (!isset($this->userParamsList))
			$this->userParamsList = $this->loadUserParamManagerFile();
		
		if (!$this->userParamsList["success"])
			return $this->userParamsList["success"];
		
		if (isset($this->userParamsList["params"]) && isset($this->userParamsList["params"]["derived"]))
		{
			//find the parameter info
			foreach($this->userParamsList["params"]["derived"] as $paramInfo)
			{
				if ($paramInfo["name"] == $realName)
					return array("success" => true, "param" => $paramInfo);
			}
		}
		
		return array("success" => false, "message" => "Cannot find derived parameter");
	}
	
	/*
02abc780   Benjamin Renard   Support request f...
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
	 * @brief Get derived parameter name from id
	*/
	public function getDerivedParameterNameFromId($paramId)
	{
		if (!preg_match("#^ws_#",$paramId))
			return array("success" => false, "message" => "Bad derived parameter id");
		
		//try to load user parameters definition if not already done
		if (!isset($this->userParamsList))
			$this->userParamsList = $this->loadUserParamManagerFile();
		
		if (!$this->userParamsList["success"])
			return $this->userParamsList["success"];
		
		if (isset($this->userParamsList["params"]) && isset($this->userParamsList["params"]["derived"]))
		{
			//find the parameter name
			foreach($this->userParamsList["params"]["derived"] as $paramInfo)
			{
				if ($paramInfo["id"] == $paramId)
					return array("success" => true, "name" => $paramInfo["name"]);
			}
		}

		return array("success" => false, "message" => "Cannot find derived parameter");
	}
	
	/*
944199fe   Benjamin Renard   Use table definit...
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
	 * @brief Get uploaded parameter info from name ("wsd_***")
	*/
	public function getUploadedParameterFromName($paramName)
	{
		if (!preg_match("#^wsd_#",$paramName))
			return array("success" => false, "message" => "Bad uploaded parameter name");
	
		//extract real parameter name
		$realName = substr($paramName , 4);
	
		//try to load user parameters definition if not already done
		if (!isset($this->userParamsList))
			$this->userParamsList = $this->loadUserParamManagerFile();
	
		if (!$this->userParamsList["success"])
			return $this->userParamsList["success"];
	
		if (isset($this->userParamsList["params"]) && isset($this->userParamsList["params"]["uploaded"]))
		{
			//find the parameter info
			foreach($this->userParamsList["params"]["uploaded"] as $paramInfo)
			{
				if ($paramInfo["name"] == $realName)
					return array("success" => true, "param" => $paramInfo);
			}
		}
	
		return array("success" => false, "message" => "Cannot find uploaded parameter");
	}
	
	/*
02abc780   Benjamin Renard   Support request f...
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
	 * @brief Get uploaded parameter name from id
	*/
	public function getUploadedParameterNameFromId($paramId)
	{
		if (!preg_match("#^wsd_#",$paramId))
			return array("success" => false, "message" => "Bad uploaded parameter id");
	
		//try to load user parameters definition if not already done
		if (!isset($this->userParamsList))
			$this->userParamsList = $this->loadUserParamManagerFile();
	
		if (!$this->userParamsList["success"])
			return $this->userParamsList["success"];
	
		if (isset($this->userParamsList["params"]) && isset($this->userParamsList["params"]["uploaded"]))
		{
			//find the parameter info
			foreach($this->userParamsList["params"]["uploaded"] as $paramInfo)
			{
				if ($paramInfo["id"] == $paramId)
					return array("success" => true, "name" => $paramInfo["name"]);
			}
		}
	
		return array("success" => false, "message" => "Cannot find uploaded parameter");
	}
	
	/*
22521f1c   Benjamin Renard   First commit
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
	 * @brief Load derived parameter manager file
	 */
	private function loadUserParamManagerFile()
	{
		//load xml file
		$dom = new DomDocument("1.0");
		if (!$dom->load(IHMConfigClass::getUserParamManagerFilePath()))
			return array("success" => false, "message" => "Cannot load user parameter manager file");
		
		$userParams = array();
		
		//get derived parameter node
		$derivedNodes = $dom->getElementsByTagName(self::$mgrDerivedNode);
				
		$derivedParams = array();
c582ff6c   Benjamin Renard   Fix test used to ...
198
		if ($derivedNodes->length > 0)
22521f1c   Benjamin Renard   First commit
199
200
201
202
203
204
205
		{	
			$derivedParamNodes = $derivedNodes->item(0)->getElementsByTagName(self::$mgrDerivedParamNode);
			foreach ($derivedParamNodes as $derivedParamNode)
			{	
				//id
				$paramId         = $derivedParamNode->getAttribute(self::$mgrDerivedParamIdAtt);
				
286f7924   Benjamin Renard   Derived parameter...
206
207
208
				//modification date
				$dateModif       = filemtime(IHMConfigClass::getUserDerivedParamFilePath($paramId));
				
22521f1c   Benjamin Renard   First commit
209
210
211
212
213
				//name
				$paramName       = $derivedParamNode->getAttribute(self::$mgrDerivedParamNameAtt);
				
				//expression
				$paramExpression = $derivedParamNode->getAttribute(self::$mgrDerivedParamExpressionAtt);
96c9cffa   Benjamin Renard   Keep expression p...
214

22521f1c   Benjamin Renard   First commit
215
				array_push($derivedParams,array(
4c975261   Benjamin Renard   Add modif. time f...
216
217
218
219
220
					"id"              => $paramId,
					"name"            => $paramName,
					"expression"      => $paramExpression,
					"info"            => $this->loadDerivedParameterInfo($paramId, $paramExpression),
					"dateModif"       => $dateModif
22521f1c   Benjamin Renard   First commit
221
222
223
224
225
226
				));
			}
		}
		
		$userParams["derived"] = $derivedParams;
		
944199fe   Benjamin Renard   Use table definit...
227
228
229
230
		//get uploaded parameter node
		$uploadedNodes = $dom->getElementsByTagName(self::$mgrUploadedNode);
		
		$uploadedParams = array();
c582ff6c   Benjamin Renard   Fix test used to ...
231
		if ($uploadedNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
		{
			$uploadedParamNodes = $uploadedNodes->item(0)->getElementsByTagName(self::$mgrUploadedParamNode);
			foreach ($uploadedParamNodes as $uploadedParamNode)
			{
				//id
				$paramId         = $uploadedParamNode->getAttribute(self::$mgrUploadedParamIdAtt);
		
				//modification date
				$dateModif       = filemtime(IHMConfigClass::getUserUploadedParamFilePath($paramId));
				
				//name
				$paramName       = $uploadedParamNode->getAttribute(self::$mgrUploadedParamNameAtt);
		
				array_push($uploadedParams,array(
				"id"         => $paramId,
				"name"       => $paramName,
				"info"       => $this->loadUploadedParameterInfo($paramId),
				"dateModif"  => $dateModif
				));
			}
		}
		
		$userParams["uploaded"] = $uploadedParams;
		
22521f1c   Benjamin Renard   First commit
256
257
258
259
260
261
		return array("success" => true, "params" => $userParams);
	}
	
	/*
	 * @brief Load additionnal derived parameter info from paramId
	*/
b1a5ee3c   Erdogan Furkan   Integration part ...
262
	private function loadDerivedParameterInfo($paramId, $paramExpression=NULL)
22521f1c   Benjamin Renard   First commit
263
264
	{
		//get full path
944199fe   Benjamin Renard   Use table definit...
265
		$path = IHMConfigClass::getUserDerivedParamFilePath($paramId);
22521f1c   Benjamin Renard   First commit
266
267
	
		$result = array(
96c9cffa   Benjamin Renard   Keep expression p...
268
269
270
				"units"            => "",
				"yTitle"           => "",
				"description"      => "",
b1a5ee3c   Erdogan Furkan   Integration part ...
271
				"status"		   => "",
96c9cffa   Benjamin Renard   Keep expression p...
272
				"parsedExpression" => NULL,
4c975261   Benjamin Renard   Add modif. time f...
273
274
275
				"sampling_mode"    => "timestep",
				"timestep"         => 0,
				"reference_param"  => "",
22521f1c   Benjamin Renard   First commit
276
277
278
279
280
281
282
283
284
		);
		
		if (!file_exists($path))
			return $result;
	
		//load xml file
		$dom = new DomDocument("1.0");
		if (!$dom->load($path))
			return $result;
4c975261   Benjamin Renard   Add modif. time f...
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308

		//sampling mode
		$samplingModeNodes = $dom->getElementsByTagName(self::$infoDerivedSamplingModeNode);
		if ($samplingModeNodes->length > 0) {
			$result["sampling_mode"] = $samplingModeNodes->item(0)->nodeValue;
		}

		switch ($result["sampling_mode"]) {
			case 'refparam':
				//reference param
				$refParamNodes = $dom->getElementsByTagName(self::$infoDerivedRefParamNode);
				if ($refParamNodes->length > 0) {
					$result["reference_param"] = $refParamNodes->item(0)->nodeValue;
				}
				break;
			default:
				$result["sampling_mode"] = 'timestep';
				//time step
				$timestepNodes = $dom->getElementsByTagName(self::$infoDerivedTimeStepNode);
				if ($timestepNodes->length > 0) {
					$result["timestep"] = $timestepNodes->item(0)->nodeValue;
				}
		}

22521f1c   Benjamin Renard   First commit
309
310
311
	
		//get parameter units
		$unitsNodes = $dom->getElementsByTagName(self::$infoDerivedUnitsNode);
c582ff6c   Benjamin Renard   Fix test used to ...
312
		if ($unitsNodes->length > 0) {
22521f1c   Benjamin Renard   First commit
313
			$result["units"] = $unitsNodes->item(0)->nodeValue;
c0535e83   Benjamin Renard   Use units and yTi...
314
315
316
317
318
319
320
			if ($result["units"] == self::$infoDerivedUndefined) {
				$result["units"] = "";
			}
		}

		//get parameter y title
		$yTitleNodes = $dom->getElementsByTagName(self::$infoDerivedYTitleNode);
c582ff6c   Benjamin Renard   Fix test used to ...
321
		if ($yTitleNodes->length > 0) {
c0535e83   Benjamin Renard   Use units and yTi...
322
323
324
325
326
			$result["yTitle"] = $yTitleNodes->item(0)->nodeValue;
			if ($result["yTitle"] == self::$infoDerivedUndefined) {
				$result["yTitle"] = "";
			}
		}
22521f1c   Benjamin Renard   First commit
327
328
329
	
		//get parameter description
		$descNodes = $dom->getElementsByTagName(self::$infoDerivedDescriptionNode);
c582ff6c   Benjamin Renard   Fix test used to ...
330
		if ($descNodes->length > 0)
22521f1c   Benjamin Renard   First commit
331
			$result["description"] = $descNodes->item(0)->nodeValue;
96c9cffa   Benjamin Renard   Keep expression p...
332

b1a5ee3c   Erdogan Furkan   Integration part ...
333
334
335
336
		//get parameter status
		$statusNodes = $dom->getElementsByTagName(self::$infoDerivedStatusNode);
		if ($statusNodes->length > 0)
			$result["status"] = $statusNodes->item(0)->nodeValue;
96c9cffa   Benjamin Renard   Keep expression p...
337
338
339
340
341
342
		//get parsed expression if exists
		$parsedExpNodes = $dom->getElementsByTagName(self::$infoDerivedParsedExpNode);
		if ($parsedExpNodes->length > 0) {
			$parsedExpNode    = $parsedExpNodes->item(0);
			$parsedExpVal     = $parsedExpNode->getAttribute(self::$infoDerivedParsedExpValAtt);
			$parsedExpHash    = $parsedExpNode->getAttribute(self::$infoDerivedParsedExpHashAtt);
ec67a1c5   Benjamin Renard   Store template ar...
343
344
345
			$parsedExpParamNodes = $parsedExpNode->getElementsByTagName(self::$infoDerivedParsedExpParamNode);
			if (!empty($parsedExpVal) && !empty($parsedExpParams) && !empty($parsedExpParamNodes) && (md5($paramExpression) == $parsedExpHash)) {
				$error = FALSE;
96c9cffa   Benjamin Renard   Keep expression p...
346
				$params = array();
ec67a1c5   Benjamin Renard   Store template ar...
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
				foreach ($parsedExpParamNodes as $parsedExpParamNode) {
					$parsedParamId = $parsedExpParamNode->getAttribute(self::$infoDerivedParsedExpParamIdAtt);
					if (empty($parsedParamId)) {
						$error = TRUE;
						break;
					}
					$param_to_add = array(
						'paramid' => $parsedParamId,
					);
					$parsedExpParamArgNodes = $parsedExpParamNode->getElementsByTagName(self::$infoDerivedParsedExpParamArgNode);
					if (!empty($parsedExpParamArgNodes)) {
						$param_to_add['template_args'] = array();
						foreach ($parsedExpParamArgNodes as $parsedExpParamArgNode) {
							$attName = $parsedExpParamArgNode->getAttribute(self::$infoDerivedParsedExpParamArgNameAtt);
							if (empty($attName)) {
								$error = TRUE;
								break;
							}
							$param_to_add['template_args'][$attName] = $parsedExpParamArgNode->nodeValue;
						}
						if ($error) {
							break;
						}
					}
					$params[] = $param_to_add;
				}
				if (!$error) {
					$result['parsedExpression'] = array(
						"expression" => $parsedExpVal,
						"params"     => $params,
96c9cffa   Benjamin Renard   Keep expression p...
377
378
					);
				}
96c9cffa   Benjamin Renard   Keep expression p...
379
380
			}
		}
22521f1c   Benjamin Renard   First commit
381
382
383
	
		return $result;
	}
944199fe   Benjamin Renard   Use table definit...
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
	
	/*
	 * @brief Load additionnal uploaded parameter info from paramId
	*/
	private function loadUploadedParameterInfo($paramId)
	{
		//get full path
		$path = IHMConfigClass::getUserUploadedParamFilePath($paramId);
	
		$result = array();
		
		if (!file_exists($path))
			return $result;
		
		//load xml file
		$dom = new DomDocument("1.0");
		if (!$dom->load($path))
			return $result;
	
		//get parameter min sampling
		$minSamplingNodes = $dom->getElementsByTagName(self::$infoUploadedMinSamplingNode);
c582ff6c   Benjamin Renard   Fix test used to ...
405
		if ($minSamplingNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
406
407
408
409
			$result["minSampling"] = $minSamplingNodes->item(0)->nodeValue;
		
		//get parameter max sampling
		$maxSamplingNodes = $dom->getElementsByTagName(self::$infoUploadedMaxSamplingNode);
c582ff6c   Benjamin Renard   Fix test used to ...
410
		if ($maxSamplingNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
411
			$result["maxSampling"] = $maxSamplingNodes->item(0)->nodeValue;
c582ff6c   Benjamin Renard   Fix test used to ...
412
413
		else
			$result["maxSampling"] = $result["minSampling"];
944199fe   Benjamin Renard   Use table definit...
414
415
416
		
		//get parameter real var
		$realVarNodes = $dom->getElementsByTagName(self::$infoUploadedRealVarNode);
c582ff6c   Benjamin Renard   Fix test used to ...
417
		if ($realVarNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
418
419
420
421
			$result["realVar"] = $realVarNodes->item(0)->nodeValue;
		
		//get parameter type
		$typeNodes = $dom->getElementsByTagName(self::$infoUploadedTypeNode);
c582ff6c   Benjamin Renard   Fix test used to ...
422
		if ($typeNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
423
424
			$result["type"] = $typeNodes->item(0)->nodeValue;
		
b1a5ee3c   Erdogan Furkan   Integration part ...
425
426
427
428
429
		//get parameter status
		$statusNodes = $dom->getElementsByTagName(self::$infoUploadedStatusNode);
		if ($statusNodes->length > 0)
			$result["status"] = $statusNodes->item(0)->nodeValue;
		
944199fe   Benjamin Renard   Use table definit...
430
431
		//get parameter size
		$sizeNodes = $dom->getElementsByTagName(self::$infoUploadedSizeNode);
c582ff6c   Benjamin Renard   Fix test used to ...
432
		if ($sizeNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
433
434
435
436
			$result["size"] = $sizeNodes->item(0)->nodeValue;
		
		//get parameter VirtualInstrument ID
		$viIdNodes = $dom->getElementsByTagName(self::$infoUploadedVIIdNode);
c582ff6c   Benjamin Renard   Fix test used to ...
437
		if ($viIdNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
438
439
440
441
			$result["viId"] = $viIdNodes->item(0)->nodeValue;
		
		//get parameter plot type
		$plotTypeNodes = $dom->getElementsByTagName(self::$infoUploadedPlotTypeNode);
c582ff6c   Benjamin Renard   Fix test used to ...
442
		if ($plotTypeNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
443
			$result["plotType"] = $plotTypeNodes->item(0)->nodeValue;
e99d9ed4   Benjamin Renard   Support fillValue...
444
445
446
447
448
449

                //get parameter fil value
                $result["fillValue"] = NULL;
                $fillValueNodes = $dom->getElementsByTagName(self::$infoUploadedFillValNode);
                if (($fillValueNodes->length > 0) && ($fillValueNodes->item(0)->nodeValue != ''))
                        $result["fillValue"] = $fillValueNodes->item(0)->nodeValue;
944199fe   Benjamin Renard   Use table definit...
450
451
452
		
		//get parameter y units
		$unitsNodes = $dom->getElementsByTagName(self::$infoUploadedUnitsNode);
c582ff6c   Benjamin Renard   Fix test used to ...
453
		if ($unitsNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
454
455
456
457
			$result["units"] = $unitsNodes->item(0)->nodeValue;
		
		//get parameter y title
		$yTitleNodes = $dom->getElementsByTagName(self::$infoUploadedYTitleNode);
c582ff6c   Benjamin Renard   Fix test used to ...
458
		if ($yTitleNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
459
460
461
462
			$result["yTitle"] = $yTitleNodes->item(0)->nodeValue;
		
		//get table definition
		$tableDefNodes = $dom->getElementsByTagName(self::$infoUploadedTableDefNode);
c582ff6c   Benjamin Renard   Fix test used to ...
463
		if ($tableDefNodes->length > 0)
944199fe   Benjamin Renard   Use table definit...
464
465
466
467
		{
			$tableDefNode = $tableDefNodes->item(0);
			$tableDefType = $tableDefNode->getAttribute('tableDefType');
			$channelsDefType = $tableDefNode->getAttribute('channelsDefType');
df380a21   Benjamin Renard   Fix table name de...
468
469
			$tableName = $tableDefNode->getAttribute('tableName');
			$tableUnits = $tableDefNode->getAttribute('tableUnits');
944199fe   Benjamin Renard   Use table definit...
470
471
472
473
474
475
476
			$tableData = array();
			foreach ($tableDefNode->childNodes as $tableDataNode)
			{
				if ($tableDataNode->nodeType != XML_ELEMENT_NODE)
					continue;
		    	$tableData[$tableDataNode->tagName] = $tableDataNode->nodeValue;
			}
df380a21   Benjamin Renard   Fix table name de...
477
			$result["tableDef"] = array('tableDefType' => $tableDefType, 'channelsDefType' => $channelsDefType, 'tableName' => $tableName, 'tableUnits' => $tableUnits, 'data' => $tableData);
944199fe   Benjamin Renard   Use table definit...
478
479
480
481
		}
		
		return $result;
	}
96c9cffa   Benjamin Renard   Keep expression p...
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503

	public function saveDerivedParameterParsedExpression($paramId, $expression, $hash, $params) {
		//get full path
		$path = IHMConfigClass::getUserDerivedParamFilePath($paramId);

		if (!file_exists($path))
                        return FALSE;

                //load xml file
                $dom = new DomDocument("1.0");
                if (!$dom->load($path))
                        return FALSE;
		$modifTime = filemtime($path);

		$parsedExpNodes = $dom->getElementsByTagName(self::$infoDerivedParsedExpNode);
                if ($parsedExpNodes->length == 0) {
			//create node
			$parsedExpNode = $dom->createElement(self::$infoDerivedParsedExpNode);
			$dom->documentElement->appendChild($parsedExpNode);
		}
		else {
			$parsedExpNode = $parsedExpNodes->item(0);
ec67a1c5   Benjamin Renard   Store template ar...
504
505
506
			while ($parsedExpNode->hasChildNodes()) {
				$parsedExpNode->removeChild($parsedExpNode->firstChild);
			}
96c9cffa   Benjamin Renard   Keep expression p...
507
508
		}

ec67a1c5   Benjamin Renard   Store template ar...
509
		
96c9cffa   Benjamin Renard   Keep expression p...
510
511
		$parsedExpNode->setAttribute(self::$infoDerivedParsedExpValAtt, $expression);
		$parsedExpNode->setAttribute(self::$infoDerivedParsedExpHashAtt, $hash);
ec67a1c5   Benjamin Renard   Store template ar...
512
513
514
515
516
517
518
519
520
521
522
523
524
525

		foreach ($params as $param) {
			$paramNode = $dom->createElement(self::$infoDerivedParsedExpParamNode);
			$paramNode->setAttribute(self::$infoDerivedParsedExpParamIdAtt, $param['paramid']);
			$parsedExpNode->appendChild($paramNode);
			if (!empty($param['template_args'])) {
				foreach ($param['template_args'] as $arg_name => $arg_value) {
					$argNode = $dom->createElement(self::$infoDerivedParsedExpParamArgNode);
					$argNode->setAttribute(self::$infoDerivedParsedExpParamArgNameAtt, $arg_name);
					$argNode->nodeValue = $arg_value;
					$paramNode->appendChild($argNode);
				}
			}
		}
96c9cffa   Benjamin Renard   Keep expression p...
526
527
528
529
530
531
532

		$dom->save($path);

		//Restore file modification time to prevent librairie re-compilation
		touch($path, $modifTime);
		return TRUE;
	}
c0535e83   Benjamin Renard   Use units and yTi...
533
}