CatalogMgr.php 6.17 KB
<?php

/**
 * @class CatalogMgr
 */

class CatalogMgr extends TimeTableMgr
{
	function __construct($sharedObject = FALSE) {
		parent::__construct('Tt.xml', $sharedObject);
		$this->contentRootId = 'catalog-treeRootNode';
		$this->contentRootTag = 'catalogList';
		$this->attributes = array('name' => '', 'intervals' => ''); // +  'parameters'
		$this->optionalAttributes = array();
		$this->objTagName =   'catalog';
		$this->id_prefix = 'cat_'; // 'tt_' ?

		if (!$sharedObject && !file_exists($this->xmlName)) {
			  $this->createDom();
			  $this->xp = new domxpath($this->contentDom);
		}
	}

	public function getTmpObject($folderId, $name, $onlyDescription = false)
	{
		$result = parent::getTmpObject($folderId, $name, $onlyDescription);
		if (!isset($result['success']) || !$result['success']) {
			return $result;
		}
		return $result + array('parameters' => $this->getCatalogParamDescription(array('folder' => $folderId, 'name' => $name)));
	}


	public function loadIntervalsFromObject($id, $type = '', $start = NULL, $limit = NULL)
	{
		$result = parent::loadIntervalsFromObject($id, $type, $start, $limit);
		if (!isset($result['success']) || !$result['success']) {
			return $result;
		}

		return $result + array('parameters' => $this->getCatalogParamDescription(array('id' => $id, 'type' => $type)));
  }

        /*
        *   catalog header
        */
	protected function setParamDescription($params)
	{
		$paramsElement = $this->objectDom->createElement('parameters');
		foreach ($params as $param)
		{
			$paramElement = $this->objectDom->createElement('parameter');
			$attrArray = (array)$param;
			foreach ($attrArray as $key => $value)
				$paramElement->setAttribute($key, $value);
			$paramsElement->appendChild($paramElement);
		}

	return $paramsElement;
	}

      protected function createIntervalElement($interval, $options = array())
      {
		$newInterval = $this->objectDom->createElement('intervals');
		$newInterval->appendChild($this->objectDom->createElement('start',$interval['start']));
		$newInterval->appendChild($this->objectDom->createElement('stop',$interval['stop']));
		if (!empty($options['parameters'])) {
			foreach ($options['parameters'] as $parameter) {
				$newInterval->appendChild($this->objectDom->createElement('param', $interval[$parameter['id']]));
			}
		}
	return $newInterval;
      }

	public function createObject($p, $folder)
	{
		if ($p -> leaf)
		{
			$result = $this->createParameter($p, $folder);
			if ($result['error'])
				return $result;

			$cacheMgr = new CatalogCacheMgr();

			if (isset($p->cacheToken) && ($p->cacheToken != ''))
			{
				$resultSaveInt = $cacheMgr->saveInObject($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');
				}
				$result['minStart'] = TimeUtils::stamp2iso($resultSaveInt['minStart']);
				$result['maxStop'] = TimeUtils::stamp2iso($resultSaveInt['maxStop']);
			}
			return $result;
		}
		//      else return $this->createFolder($p);
		//TODO check if this is possible?
		else return array('error' => 'createFolder should be called from RENAME');

	}

	public function getCatalogParamDescription($options)
	{
		if (!empty($options['id'])) {
			if (isset($options['type']) && ($options['type'] == 'sharedcatalog')) {
				$sharedObjMgr = new SharedObjectsMgr();
				$path = $sharedObjMgr->getDataFilePath('catalog', $options['id']);
			}
			else {
				$path = USERTTDIR.$options['id'].'.xml';
			}
		}
		else {
			$path = $options['folder'].'/'.$options['name'].'.xml';
		}

      //load intervals from Catalog id
		if (!file_exists($path))
			return array('success' => false, 'message' => "Cannot find Catalog file");

		if (!$this->objectDom->load($path))
			return array('success' => false, 'message' => "Cannot load Catalog file");

    $xpath = new DOMXPath($this->objectDom);

		// 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(
			  'parameters' => $paramsArray,
			  'success'    => true
    );

    }

			public function getUploadedObject($name, $format, $onlyDescription = false)
			{
				$result = parent::getUploadedObject($name, $format, $onlyDescription);
				if (!isset($result['success']) || !$result['success']) {

					return array('success' => FALSE, 'error' => 'Error to retrieve catalog info');
				}


				return $result + array('parameters' => $this->getCatalogParamDescription(array('folder' => USERTEMPDIR, 'name' => $name)));
			}

			/**
			 * Load interval from DOMElement
			 * @param DOMElement
			 * @return interval
			 */
			protected function loadIntervalElement($intervalNode)
			{
				$interval = parent::loadIntervalElement($intervalNode);
				if ($interval === FALSE) {
					return FALSE;
				}
				$paramNodes = $intervalNode->getElementsByTagName('param');
				$interval['paramTable'] = array();
				if ($paramNodes->length > 0)
        	foreach ( $paramNodes as $paramNode ) $interval['paramTable'][] = $paramNode->nodeValue;

				return $interval;
			}

// 	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());
// 		}
// 	}


}
?>