<?php
/**
 * Klasa obsĹ‚ugi tablicy organizacji/stowarzyszen
 *
 */
class MfRouterDAL extends DefaultDAL {


    protected static $objClassName;
		protected static $objClassTable;
		protected static $objClassTablePK;
    private static $optClass;


	public static function Save( $obj) {
		$id = null;
		if($obj->GetId()==-1) {
			$id = self::Insert($obj);
		} else {
			self::Update($obj);
			$id = $obj->GetId();
		}

		return $id;
	}


	/**
     * @param Feed $obj
     *
     */
	public static function Insert($obj) {

		$dalData = new DalData();
		$dalData->setObjClassTable(self::GetObjClassTable());
		$dalData->setObj($obj);
		$id = self::DefaultInsert($dalData);

		return $id;
	}
	/**
     * @param Text $obj
     *
     */
	public static function Update($obj) {
		//Utils::ArrayDisplay($obj);
		$dalData = new DalData();
		$dalData->setObjClassTable(self::GetObjClassTable());
		$dalData->setObjClassTablePK(self::GetObjClassTablePK());
		$dalData->setObj($obj);
		return self::DefaultUpdate($dalData);
	}

	/**
     *
     * @param integer $id
     *
     */
	public static function Delete($obj) {
		$dalData = new DalData();
		$dalData->setObjClassTable(self::GetObjClassTable());
		$dalData->setObjClassTablePK(self::GetObjClassTablePK());
		$dalData->setObj($obj);
		return self::DefaultDelete($dalData);
	}

	/**
     *
     * @param  $id
     */
	public static function GetById($id) {
		$dalData = self::GetDalDataObj();
		$dalData->setCondition(array(self::GetObjClassTablePK()=>$id));
		$dalData->setLimit(1);
		$result = self::GetResult($dalData);
		if ((count($result) > 0) && (is_object($result[0]))) {
			return $result[0];
		} else {
			return false;
			//throw new Exception('Brak rekordu w tablicy '.self::GetObjClassTable().' o id <b>'.$id.'</b>!');
		}
	}
	
	public static function GetResult($dalData) {
		return self::DefaultGetResult($dalData);
	}

    public static function GetArrayObjAll() {
			$dalData = self::GetDalDataObj();		
			$result = self::GetResult($dalData);
			return $result;
    }


    public static function GetResultOld($data,$queryFields = array(),$limit = 0, $sortBy = null,$count = null) {

		if(!is_array($data)){
			$data = array();
		}

		$db = Registry::Get('db');

		$queryCacheName = __CLASS__. "_" .__FUNCTION__. "_" .md5(implode($queryFields));

		if(isset(QueryCacheTemp::$cacheQuery[$queryCacheName]))
		{
			$sql = QueryCacheTemp::$cacheQuery[$queryCacheName];
		}
		else
		{
			if($count == true)
				$select = "count(*) as count";
			else
				$select =" " . SQL::ToSelect(self::GetOptClass(),$queryFields) . " ";

			$sql = " SELECT $select FROM " . self::GetObjClassTable() . " WHERE 1=1 ";
			$q = new QueryCache($queryCacheName,$sql);
		}

		foreach ($data as $key => $value)
		{
			if($key == "id")
			$key = $objId ;

			if(is_array($value))
			$sql .= ( is_numeric($value['value']) || $value ? " AND ".$key." ".$value['condition']." ". $value['value'] : "");
			else
			$sql .= ( is_numeric($value) || $value ? " AND ".$key." = ". $value : "");
		}

		$sql .= ( $sortBy ? " ORDER BY $sortBy " : "").
		( $limit ? " LIMIT " . $limit : "").
			  " ";

		$stmt = $db->prepare($sql)
		->execute();


		$array = $stmt->fetchAllAssoc();

		if($count == true)
		return  $array[0]['count'];

		$done = array();

		for($i=0;$i<count($array);$i++)
		{
            $className=self::GetObjClassName();
			$obj = new $className();
			$obj->FromArray($array[$i],1);
			$done[] = $obj;
		}
		return $done;

	}
	
	public static function UpdateParamPush($idRouter, $arrayParam = array()) {
		
		$db = Registry::Get('db');
		
		$sql = "SELECT param FROM mf_router WHERE id_mf_router = $idRouter";
		$stmt = $db->execute($sql);
		
		$array = array();
		if ($row = $stmt->FetchArray()) {
			//$param = $row['param'];
			$array = unserialize($row['param']);
		}

		$arrayParam = array_merge($array, $arrayParam);
				
		$serializeParam = serialize($arrayParam);
				
		$sql = "UPDATE mf_router SET param = '$serializeParam' WHERE id_mf_router = $idRouter";
		//Utils::ArrayDisplay($sql);
		$stmt = $db->execute($sql);		
	}
	
	
	public function AddRouterByStructure($routerOld, $objStructure, $lang) {		
		
		$dalData = new DalData();
		$dalData->setObjClassTable(self::GetObjClassTable());
		
		$router = new MfRouter();
			$router->SetController($routerOld->GetController());
			$router->SetMethod($routerOld->GetMethod());
			$router->SetUrl($routerOld->GetUrl());
			$router->SetLabelUrl($routerOld->GetLabelUrl());
			$router->SetParam($routerOld->GetParam());
			$router->SetConfig($routerOld->GetConfig());
			$router->SetIdMfModule($routerOld->GetIdMfModule());
			$router->SetLang($lang);
			
		$dalData->setObj($router);
		$id = self::DefaultInsert($dalData);
		
		$objStructure->SetIdRouter($id);
		StructureDAL::Update($objStructure);

		return $id;
		
	}

	public static function GetObjClassName() {
        if(self::$objClassName != '') {
            $class = self::$objClassName;
        } else {
            $class = str_replace('DAL', '', __CLASS__);
        }

        return $class;
    }

    public static function GetOptClass() {
        if(self::$optClass!=null) {
            return self::$optClass;
        } else {
            return self::GetObjClassName();
        }
    }

    public static function GetObjClassTablePK() {
        if(self::$objClassTablePK != '') {
            $return = self::$objClassTablePK;
        } else {
            $class = self::GetObjClassName();
            $classObj = new $class();
            $return = $classObj->GetClassTablePK();
        }
        return $return;
    }

    public static function GetObjClassTable() {
        if(self::$objClassTable!='') {
            $return = self::$objClassTable;
        } else {
            $class = self::GetObjClassName();
            $classObj = new $class();
            $return = $classObj->GetTableName();
        }

        return $return;
    }
    
    	public static function GetDalDataObj() {

		$dalData = new DalData();
		$dalData->setObjClassName(self::GetObjClassName());
		$dalData->setObjClassTable(self::GetObjClassTable());
		$dalData->setObjClassTablePK(self::GetObjClassTablePK());
		$dalData->setOptClass(self::GetOptClass());
		//$dalData->setDatabaseType('dbTemp');

		return $dalData;
	}
	
	
	
}
?>