<?php

Class Vista extends AppObjeto{
	
	public $nombre;
	public $id_controller;
	public $perfiles = array();
	//Configuración de tabla

	
	protected static $_aliasTabla = 'a';
	protected static $_nombreTabla = 'vista';
	protected static $_campoPK = 'id_vista';
	
	
	
	public function save(){
		parent::save();
		$this->guradaPerfiles();
	}
	
	public function load($id){
		parent::load($id);
		if($this->id){
			$this->loadPerfiles();
				
		}
	}
	
	private function loadPerfiles(){

		$db = $this->getDb();
		$select = $db->select();
		$select->setIntegrityCheck(false);
		$select->from(array('a' => 'vista_has_perfil'), array('id_perfil'));
		$select->where('id_vista = ?', $this->id);
		$resultado = $db->fetchAll($select);
				
		foreach ($resultado as $elemento) {
			$this->perfiles[] = $elemento->id_perfil;
		}

	}
	
	private function guradaPerfiles(){
		if (isset($this->id)) {
			try
			{
				$dbAdapter = $this->getDb()->getAdapter();
					
				$sql = 'DELETE FROM vista_has_perfil WHERE id_vista ='.$this->id;
				$stmt = $dbAdapter->prepare($sql);
				$stmt->execute();
				if(is_array($this->perfiles))
				foreach ($this->perfiles as $idPerfil) {
						
					$sql = 'insert into vista_has_perfil(id_vista, id_perfil) values ('.
							$this->id. ', '. $idPerfil.')';
						
					$stmt = $dbAdapter->prepare($sql);
					$stmt->execute();
				}
					
			}
			catch (Exception $e) {
				echo $e->getMessage();
				die();
			}
	
		}
	}
	
	public static function loadByNombre($nombre, $id_controller){
		$select = self::select();
		$select->where('nombre= ?', $nombre);
		$select->where('id_controller= ?', $id_controller);
		$result = self::fetchRow($select);
		if(count($result)>0){
			$vista = new Vista($result[self::$primary]);
		}else{
			$vista = new Vista();
			$vista->nombre = $nombre;
			$vista->id_controller= $id_controller;
			
			$vista->save();
		}
	}
	
	public static function loadAllListado($parametros){
		$select = parent::loadAllListado($parametros);
		if(isset($parametros['id_controller']) && $parametros['id_controller'])
			$select->where("a.id_controller = ".$parametros['id_controller']);
		$resultado = self::cargaListado($select, $parametros);
		return $resultado->render();
	
	}
	
	public static function loadAllListadoAcl($parametros = array()){
		$db = self::getDb();
		$select = $db->select();
		$select->setIntegrityCheck(false);
		$select->from(array('c'=>'controller'), array('id_controller','controller'=>'nombre'));
		$select->joinLeft(array('v'=>'vista'), 'v.id_controller = c.id_controller', array('vista'=>'nombre', 'id_vista'));
		$perfiles = Perfil::getAll(null)->toArray();
		foreach ($perfiles as $perfil){
			$select->joinLeft(array('vhp'.$perfil['id_perfil']=> 'vista_has_perfil'), 'vhp'.$perfil['id_perfil'].'.id_vista = v.id_vista and vhp'.$perfil['id_perfil'].'.id_perfil = '.$perfil['id_perfil'], array('perfil_'.$perfil['id_perfil'] =>'if(vhp'.$perfil['id_perfil'].'.id_perfil is null, 0, 1)'));
		}
		return self::selectExecute($select, $parametros);
		
	}
	
	public static function guardaPermisos($permisos){
		try
		{
			$dbAdapter = self::getDb()->getAdapter();
			foreach ($permisos as $id_vista => $perfiles){
				$sql = 'DELETE FROM vista_has_perfil where id_vista='.$id_vista;
				$stmt = $dbAdapter->prepare($sql);
				$stmt->execute();
				foreach ($perfiles as $id_perfil => $value){
					$sql = 'insert into vista_has_perfil(id_vista, id_perfil) values ('.
							$id_vista. ', '. $id_perfil.')';
						
					$stmt = $dbAdapter->prepare($sql);
					$stmt->execute();
				}
			}
		}
		catch (Exception $e) {
			echo $e->getMessage();
			die();
		}
	}
	
	public static function cargaVistaByNombres($controller, $vista){
		$db = self::getDb();
		$select = $db->select();
		$select->setIntegrityCheck(false);
		$select->from(array('c'=> 'controller'), array('id_controller'));
		$select->joinLeft(array('v'=> 'vista'), "c.id_controller = v.id_controller and v.nombre='".$vista."'", array('id_vista'));
		$select->where("c.nombre='". $controller ."'");
		$resultado = $db->fetchRow($select);
		if(count($resultado)){
			if($resultado->id_vista){
				$mivista = new Vista($resultado->id_vista);
			}else{
				$mivista = new Vista();
				$mivista->nombre = $vista;
				$mivista->id_controller = $resultado->id_controller;
				$mivista->save();
			}
				
		}else{
			$micontroller = new Controller();
			$micontroller->nombre = $controller;
			$micontroller->save();
				
			$mivista = new Vista();
			$mivista->nombre = $vista;
			$mivista->id_controller = $micontroller->id;
			$mivista->save();
		}
		return $mivista;
		/*
		
		$select = self::selectObjeto();
		$select->from(array('c'=> 'controller'), array('id_controller'));
		$select->joinLeft(array('v'=> 'vista'), "c.id_controller = v.id_controller and v.nombre='".$vista."'", array('id_vista'));
		$select->where("c.nombre='". $controller ."'");
		echo $select;
		die();
		$resultado = self::selectExecute($select, null, true);
		$resultado = $resultado->getRegistroToArray();
		if(count($resultado)){
			if($resultado['id_vista']){
				$mivista = new Vista($resultado['id_vista']);
			}else{
				$mivista = new Vista();
				$mivista->nombre = $vista;
				$mivista->id_controller = $resultado['id_controller'];
				$mivista->save();
			}
			
		}else{
			$micontroller = new Controller();
			$micontroller->nombre = $controller;
			$micontroller->save();
			
			$mivista = new Vista();
			$mivista->nombre = $vista;
			$mivista->id_controller = $micontroller->id;
			$mivista->save();
		}
		
		return $mivista;
		*/
	}
	
	
}