IHMPlotContextFileClass.php 4.83 KB
<?php

class IHMPlotContextFileClass {
	public static function parse($filePath) {
		if (!file_exists($filePath))
			return array("success" => false, "message" => "Cannot load plot context file");
		
		$doc = new DOMDocument("1.0", "UTF-8");
		$doc->preserveWhiteSpace = false;
		$doc->formatOutput = true;
		
		if (!$doc->load($filePath))
			return array("success" => false, "message" => "Cannot load plot context file");
		
		//<page>
		$pageNodes = $doc->getElementsByTagName('page');
		
		if ($pageNodes->length <= 0)
			return array("success" => false, "message" => "Cannot load context page node");
		
		$pageNode = $pageNodes->item(0);
		
		$isPortrait = $pageNode->getAttribute('portrait') == "true";
		
		$pageContext = array(
			'startTime' => $pageNode->getAttribute('startTime'),
			'stopTime'  => $pageNode->getAttribute('stopTime'),
			'superposeMode' => ($pageNode->getAttribute('superposeMode') == "true"),
			'ttName' => $pageNode->getAttribute('ttName'),
			'ttIndex' => ($pageNode->getAttribute('ttIndex') == '') ? 0 : intval($pageNode->getAttribute('ttIndex')),
			'ttNbIntervals' => ($pageNode->getAttribute('ttNbIntervals') == '') ? 0 : intval($pageNode->getAttribute('ttNbIntervals')),
			'portrait'  => $isPortrait,
			//An image rotation of 90 deg. is done after request execution if a page is in "portrait" mode
			'width'     => ($isPortrait ? intval($pageNode->getAttribute('height')) : intval($pageNode->getAttribute('width'))),
			'height'    => ($isPortrait ? intval($pageNode->getAttribute('width')) : intval($pageNode->getAttribute('height'))),
			'panels'    => array()
		);
		
		//<panel>
		$panelNodes = $pageNode->getElementsByTagName('panel');
		
		foreach ($panelNodes as $panelNode)
		{
			$panelContext = array(
				'id'     => $panelNode->getAttribute('id')
			);
			
			if ($isPortrait)
			{
				$panelContext['x']      = intval($panelNode->getAttribute('y'));
				$panelContext['width']  = intval($panelNode->getAttribute('height'));
				$panelContext['height'] = intval($panelNode->getAttribute('width'));
				$panelContext['y']      = $pageContext['height'] - intval($panelNode->getAttribute('x')) - $panelContext['height'];
			}
			else
			{
				$panelContext['x']      = intval($panelNode->getAttribute('x'));
				$panelContext['height'] = intval($panelNode->getAttribute('height'));
				$panelContext['y']      = $pageContext['height'] - intval($panelNode->getAttribute('y')) - $panelContext['height'];
				$panelContext['width']  = intval($panelNode->getAttribute('width'));
			}

			//<intervals>
			$intervalsNodes = $panelNode->getElementsByTagName('intervals');
			if ($intervalsNodes->length > 0) {
				$panelContext['intervals'] = array();
			}
			foreach ($intervalsNodes as $intervalsNode) {
				$intervalsContext = array(
					'name' => $intervalsNode->getAttribute('name'),
					'id' => $intervalsNode->getAttribute('id'),
					'startTime' => $intervalsNode->getAttribute('startTime'),
					'stopTime'  => $intervalsNode->getAttribute('stopTime'),
				);

				$panelContext['intervals'][] = $intervalsContext;
			}

			//<plotArea>
			$plotAreaNodes = $panelNode->getElementsByTagName('plotArea');
			
			if ($plotAreaNodes->length > 0)
			{
				$panelContext['plotArea'] = array();
				$plotAreaNode = $plotAreaNodes->item(0);
			
				if ($isPortrait)
				{
					$panelContext['plotArea']['x']      = intval($plotAreaNode->getAttribute('y'));
					$panelContext['plotArea']['width']  = intval($plotAreaNode->getAttribute('height'));
					$panelContext['plotArea']['height'] = intval($plotAreaNode->getAttribute('width'));
					$panelContext['plotArea']['y']      = $pageContext['height'] - intval($plotAreaNode->getAttribute('x')) - $panelContext['plotArea']['height'];
				}
				else
				{
					$panelContext['plotArea']['x']      = intval($plotAreaNode->getAttribute('x'));
					$panelContext['plotArea']['height'] = intval($plotAreaNode->getAttribute('height'));
					$panelContext['plotArea']['y']      = $pageContext['height'] - intval($plotAreaNode->getAttribute('y')) - $panelContext['plotArea']['height'];
					$panelContext['plotArea']['width']  = intval($plotAreaNode->getAttribute('width'));
				}
				
				//hasSpectro
				$panelContext['plotArea']['hasSpectro']  = ($plotAreaNode->getAttribute('hasSpectro') == "true");
				
				//<axis>
				$panelContext['plotArea']['axes'] = array();
				
				$axisNodes = $plotAreaNode->getElementsByTagName('axis');
				
				foreach($axisNodes as $axisNode)
				{
					$axisContext = array(
							'id' => $axisNode->getAttribute('id'),
							'logarithmic' => ($axisNode->getAttribute('logarithmic') == "true"),
							'min' => floatval($axisNode->getAttribute('min')),
							'max' => floatval($axisNode->getAttribute('max'))
					);
					
					$panelContext['plotArea']['axes'][] = $axisContext;
				}
			}
			
			$pageContext['panels'][] = $panelContext;
		}
		
		return array("success" => true, "page" => $pageContext);
	}
}

?>