CatalogCacheMgr.php 5.76 KB
<?php

/**
 * @class CatalogCacheMgr
 */

class CatalogCacheMgr extends TimeTableCacheMgr
{

	protected static $cache_file = "cacheCat";

	protected $ttMgr = null;
	protected $cache = null;

	function __construct() {

		$this->ttMgr = new CatalogMgr();
	}


	public function initFromTmpObject($folderId, $name) {

		//Create new cache
		$this->cache = new CatalogCacheObject();

		//Load intervals from TmpObject file (Statistics Module)
		$intervals_res = $this->ttMgr->getTmpObject($folderId, $name);

		if (!isset($intervals_res))
			return array('success' => false, 'message' => 'Cannot get Tmp Object');

		if (array_key_exists('intervals', $intervals_res))
		{
			foreach ($intervals_res['intervals'] as $interval)
			{
				//Add interval
				$this->cache->addInterval($interval['start'], $interval['stop'], $interval['paramTable']);

			}
		}

		$this->cache->setIsModified(true);

		$paramHeaders = $intervals_res['parameters'];

		$this->cache->setParamsNumber(count($paramHeaders));
		$this->cache->setParamsSizes($paramHeaders);
		$this->cache->setParamsTypes($paramHeaders);

		unset($intervals_res);

		//Update cache
		$this->cache->updateIndexes();

		//Save cache file
		return array('success'=>$this->saveToFile(), 'token'=>$this->cache->getToken(),
		             'status'=>$this->cache->getStatus(), 'parameters'=>$paramHeaders);
	}

	public function initFromUploadedFile($name, $format)
	{
		//Create new cache
		$this->cache = new CatalogCacheObject();

		//Load intervals from uploaded file
		$intervals_res = $this->ttMgr->getUploadedObject($name, $format);

		if (!isset($intervals_res))
			return array('success' => false, 'message' => 'Cannot get Uploaded Object');

		if (array_key_exists('intervals', $intervals_res))
		{
			foreach ($intervals_res['intervals'] as $interval)
			{
				//Add interval
				$this->cache->addInterval($interval['start'], $interval['stop'], $interval['paramTable']);
			}
		}

		$this->cache->setIsModified(true);
		$paramHeaders = $intervals_res['parameters'];

		$this->cache->setParamsNumber(count($paramHeaders));
		$this->cache->setParamsSizes($paramHeaders);
		$this->cache->setParamsTypes($paramHeaders);

		unset($intervals_res);

		//Update cache
		$this->cache->updateIndexes();

		//Save cache file
		return array('success'=>$this->saveToFile(), 'token'=>$this->cache->getToken(),
		'status'=>$this->cache->getStatus(), 'parameters'=>$paramHeaders);
	}

	public function initFromTT($id, $typeTT)
	{
		//Create new cache
		$this->cache = new CatalogCacheObject();

		//Load intervals from catalog file and add to cache
		$intervals_res = $this->ttMgr->loadIntervalsFromTT($id,$typeTT);

		if (!$intervals_res['success'])
			return $intervals_res;

		foreach ($intervals_res['intervals'] as $interval)
		{
			//Add interval
			$this->cache->addInterval($interval['start'], $interval['stop'], $interval['paramTable']);
		}

		$paramHeaders = $intervals_res['parameters'];

		$this->cache->setParamsNumber(count($paramHeaders));
		$this->cache->setParamsSizes($paramHeaders);
		$this->cache->setParamsTypes($paramHeaders);

		unset($intervals_res);

		//Update cache
		$this->cache->updateIndexes();

		//Save cache file
		return array('success' => $this->saveToFile(), 'token' => $this->cache->getToken(),
			     'status' => $this->cache->getStatus(),'parameters' => $paramHeaders);
	}


	protected function loadFromFile()
	{
		if (!file_exists($this->getCacheFilePath()))
			return false;
		$this->cache = new CatalogCacheObject();
		$handle = fopen($this->getCacheFilePath(), 'rb');
		$result = false;
		if (flock($handle, LOCK_SH))
		{
			$this->cache->loadBin($handle);
			flock( $handle, LOCK_UN );
			$result = true;
		}
		fclose($handle);
	return $result;
	}

	protected function getCacheFilePath()
	{
		return USERTTDIR.(self::$cache_file);
	}

	public function saveInTT($id, $action, $token)
	{
		if (!$this->loadFromFile())
			return array('success' => false, 'message' => 'Cannot load cache file');

		if ($token != $this->cache->getToken())
			return array('success' => false, 'message' => 'Cache token check error');

		$this->cache->updateIndexes();
		$this->saveToFile();

		$intervals = $this->cache->getIntervalsArray(NULL,NULL,true);

		$this->cache->reset();

	return $this->ttMgr->saveIntervals($id, $intervals, $action);
	}

	public function addInterval($index, $start, $stop, $params) {
		if (!$this->loadFromFile())
			return array('success' => false, 'message' => 'Cannot load cache file');

		if (!isset($index))
			$index = 0;

		if (!isset($start))
			$start = date('Y-m-d\TH:i:s');

		if (!isset($stop))
			$stop = date('Y-m-d\TH:i:s');

		if (!isset($params))
			$params = [];

		$this->cache->addInterval($start, $stop, $params, true, $index);

		//$this->cache->updateIndexes();

		$this->saveToFile();

		return array('success' => true, 'index' => $index, 'status' => $this->cache->getStatus());
	}

	public function modifyIntervalFromId($obj) {
		if (!$this->loadFromFile())
			return array('success' => false, 'message' => 'Cannot load cache file');

		$this->cache->modifyIntervalFromId($obj);

		$this->saveToFile();

		return array('success' => true, 'status' => $this->cache->getStatus());
	}

	public function initTTCache($nparams) {
		//Create new cache
		$this->cache = new CatalogCacheObject();
		$this->cache->setParamsNumber((int)$nparams);
		$paramHeaders = array();

		for ($i = 0; $i < (int)$nparams; $i++) {
			$paramHeaders[$i]['id'] = 'id_'.(string)($i+1);
			$paramHeaders[$i]['name'] = 'param_'.(string)($i+1);
			$paramHeaders[$i]['size'] = 1;
			$paramHeaders[$i]['type'] = 'Float';

		}
		$this->cache->setParamsSizes($paramHeaders);
		$this->cache->setParamsTypes($paramHeaders);
		//Save cache file
		return array('success' => $this->saveToFile(), 'token' => $this->cache->getToken(),
			     'status' => $this->cache->getStatus(), 'parameters' => $paramHeaders);
	}
   }
?>