<?php
/**
 * Controlador Padre del que heredaran el resto de controladores
 */
require_once 'Excepciones.php';
class AppController extends Zend_Controller_Action
{
	
	public $_layout;
	protected $_aside_left;
	protected $_menu;
	protected $_contenido;
	//Variables de aplicación
	protected $_user = array();
	protected $_perfiles = array(); //Posibles perfiles del usuario
	protected $_perfilActivo = 'invitado';
	protected $_idClienteActivo = -1;
	protected $_idGestor = -1;
	protected $_nombreClienteActivo = '';	
	//protected $configuracion;
	protected $_modeloPrincipal = null;	
	protected $_formularioPrincipal = null;
	protected $_redirectEditar = null;
	protected $_redirectEliminar = null;
	protected $_titulo_edicion = '';
	protected $_titulo_ver= '';
	protected $_redirectEliminarError = null;
	protected $_ajax = true;
	protected $_ajaxEliminar = false;
	protected $_campoId ='';
	private $_model = array();

	public $texto_cabecera;
	
	//definición de regiones
	public $regionCabecera;
	public $regionContenido;
	public $regionDerecha;
	public $regionIzquierda;
	public $regionPie;

	public $renderizarDefecto = true;
	public $renderizarDefectoVer = true;
	
	const ACL_INVITADO = 'invitado';
	const ACL_EMPLEADO = 'empleado';
	const ACL_ADMINISTRADOR = 'administrador';
		
	/////Las constantes acabaran en un fichero externo////
	//Constante por defecto para recoger el valor de una variable por url.
	const SIN_INICIALIZAR = -1;
	//Constantes para el menu
    const MENU_INICIO = 'INICIO';
	//Constantes para Migas de Pan
	const MIGA_INICIO = 'Inicio';
	
	/**
	 * @return the $_titulo_edicion
	 */
	public function getTitulo() {
		return $this->_titulo_edicion;
	}

	/**
	 * @param field_type $_titulo_edicion
	 */
	public function setTitulo($_titulo_edicion) {
		$this->_titulo_edicion = $_titulo_edicion;
	}
	/**
	 * Regresa a la ruta a un fichero temporal
	 * @param string $url
	 * @return string
	 */
	
	public static function leer_fichero_url($url){
		$salida = tempnam(null, md5(uniqid()));
		
		$fp = fopen($salida,"w+");
		
		
		//abrimos el fichero, puede ser de texto o una URL
		$fichero_url = fopen ($url, "r");
		$texto = "";
		//bucle para ir recibiendo todo el contenido del fichero en bloques de 1024 bytes
		while ($trozo = fgets($fichero_url, 1024)){
			$texto .= $trozo;
		}
		
		fwrite($fp, $texto);
		fclose($fp);
		
		return $salida;
	}

	public function getLayout(){
		
		if(!isset($this->_layout))
			$this->_layout = new LYTSmartadmin();
	
		return $this->_layout;
	
	}
	
	//Inicializamos variables
	public function init(){

		//$this->configuracion = new DBConfiguracion();
		$layout = $this->getLayout();
		
		$layout->baseUrl = $this->_request->getBaseUrl();
		$url = $this->_request->getBaseUrl();
		
		if(strlen($url)>9 && substr($url,strlen($url)-9)== 'index.php'){
			$layout->publicUrl = substr($this->_request->getBaseUrl(),0,-10);
		}else{
			
			$layout->publicUrl = substr($_SERVER['SCRIPT_NAME'],0,-10);
		}
		
		$layout->appUrl = substr($this->_request->getBaseUrl(),0,-17).'/application';
		
		// directorio
		$ruta_base = $_SERVER['SCRIPT_FILENAME'];
		$ruta_base = str_replace('public/index.php', '', $ruta_base);
		
		defined('RUTA_FICHEROS') or define('RUTA_FICHEROS', $ruta_base.'ficheros/');
		defined('RUTA_IMAGENES') or define('RUTA_IMAGENES', $ruta_base.'imagenes/');
		defined('RUTA_BASE') or define('RUTA_BASE', $ruta_base);
		defined('PUBLICURL') or define('PUBLICURL', $layout->publicUrl); //Necesaria para el grid
		defined('BASEURL') or define('BASEURL', $this->_request->getBaseUrl()); //Necesaria para el grid y utilidades
		//echo 'PUBLICURL:'.PUBLICURL.'<br>';
		//echo 'BASEURL:'.BASEURL.'<br>';
		$layout->class_body = 'no-right-panel';
		//Nos dice en todo momento en que controlador y action estamos
		$layout->controlador = $this->_request->getParam('controller');
		$layout->vista = $this->_request->getParam('action');
		defined('CONTROLLER') or define('CONTROLLER',$layout->controlador );
		defined('ACTION') or define('ACTION', $layout->vista);
		
		// leer par�metro de loguarse
		$par_auto = $this->getParametro('aut');

		$par_auth_doc = $this->getParametro('authdoc');
		
		if ($par_auto){
			$usuario = Usuario::loadPorToken($par_auto);
			if (!$usuario){
				$this->usuarioInvitado();
			} else {
				$auth = Zend_Auth::getInstance();
				$auth->getStorage()->write($usuario);
				Sesion::set(Sesion::POTENCIAL_NUMERO, $usuario->NUMERO);
				$potencialLogueado = new Potencial($usuario->NUMERO);
				//$potencialLogueado->cargarPerfiles();
				//$potencialLogueado->setPerfilPorDefecto();
				Sesion::set(Sesion::POTENCIAL_OBJETO, $potencialLogueado);
			}
		} elseif ($par_auth_doc) {
			$usuario = Usuario::loadPorAuth($par_auth_doc);
			if (!$usuario){
				$this->usuarioInvitado();
			} else {
				$auth = Zend_Auth::getInstance();
				$auth->getStorage()->write($usuario);
				Sesion::set(Sesion::POTENCIAL_NUMERO, $usuario->NUMERO);
				$potencialLogueado = new Potencial($usuario->NUMERO);
				//$potencialLogueado->cargarPerfiles();
				//$potencialLogueado->setPerfilPorDefecto();
				Sesion::set(Sesion::POTENCIAL_OBJETO, $potencialLogueado);
			}

		} elseif (Usuario::isLoggedIn()) {
			$this->cargaDatosUsuario();
		}
		else{
			$this->usuarioInvitado();
		}
		$this->verificacionAcl();
		
	}
	

	  public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array())
    {
    	parent::__construct($request, $response, $invokeArgs);
    	
    	//$this->_layout = new AppLayout();
    	
    	//$this->inicializaRegiones();
    	
    	
    	
    }
	
    
/**
 * Cargamos en sesion los catos y perfiles dle usuario
 */
	
	public function cargaDatosUsuario(){
		if (Usuario::isLoggedIn()) {
			
			//Iniciar las variables que van a estar disponibles desde los formularios
			$user = new Usuario();
			$user->getIdentity();

			switch ($this->_perfilActivo) {
				case AppController::ACL_ADMINISTRADOR:
					break;
				case AppController::ACL_EMPLEADO:
					break;
				default:
				break;
			}
			
			//Switchea el layout en caso de perfiles distintos (default none)
			
			$this->iniciaMenuSuperior();
			//$this->iniciaTabs();
	
	    			
		}
	
	}
	
	public function usuarioInvitado(){
		
		$this->_layout->perfilActivo = AppController::ACL_INVITADO;	
	}
	
	public function preDispatch()
	{
		
		$this->_layout->menu_lateral = array();
		$this->_layout->menu_superior = array();
		$this->_layout->menu_tabs = array();
		$this->_layout->destinoModal = $this->_request->getParam('destino', '');
		$this->csv = (bool)$this->_request->getParam('csv', 0);
		if(empty($this->_layout->destinoModal)){
			$this::appCargarElementospublicos();
		}
		if($this->csv){
			define('MODO_CSV', TRUE);
			$this->sinRender();
		}else
			define('MODO_CSV', FALSE);
		
		/*
		 * Se encarga de las modificaciones de los modales
		 * */
		
		
		
		
		//Para las modales
		$this->_layout->ancho='500';
		$this->_layout->titulo='Modificación';
		$this->_layout->regenraformulario = true;
		$this->_layout->migas = $this->inicializaMigas();
				
	}
	
	public static function appCargarElementospublicos(){
	}
	
	

	/**
	 * Revisa los permisos por acelo y en caso de no tener el adecuado es reeenviado según su perfil
	 * 
	 */
	
	public function verificacionAcl(){
		$accion = $this->_request->getParam('action','');
		$controller = $this->_request->getParam('controller','');
		$tienePermiso = Acl::UsuarioActualTieneAcceso($controller, $accion);
		
		if(!Usuario::isLoggedIn() && !$tienePermiso){
			if ($controller != 'personal' && $accion != 'documentos') {
				return true;
			}

			if($controller!='usuarios' && $accion !='login'){
				$this->_redirect('usuarios/login');
			}
		}elseif(Usuario::isLoggedIn() && !$tienePermiso){
			if($controller=='usuarios' && $accion =='logout'){
				return true;
			}
			die('Sin permiso');
		}
		
		return true;
	}	
	
	public function cogeHistorial(){
		$session = new Zend_Session_Namespace('historial');
			$controller = $this->_request->getParam('controller');
		$vista = $this->_request->getParam('action');
    	if(!isset($session->historial)){
    	//	$session->historial= array();
       		$session->historial[] = $this->_request->getRequestUri();
    	}
    	
    	
    	return $session;
	}
	public function volverHistorial(){
		$session = $this->cogeHistorial();
		$anterior = array_pop($session->historial);
		$anterior = array_pop($session->historial);
		$session->historial[] =$anterior;
		$pos = strpos ($anterior, 'index.php');
		if($pos !== false){
			$anterior = substr( $anterior ,$pos+9);
		}
		
		
		
		$this->_redirect($anterior);
	}
	public function backAction(){
		$this->volverHistorial();
		$this->ultimoHistorial();
	}
	
	public function ultimoHistorial(){
		$session = $this->cogeHistorial();
		$anterior = array_pop($session->historial);
	
		$session->historial[] =$anterior;
		$pos = strpos ($anterior, 'index.php');
		if($pos !== false){
			$anterior = substr( $anterior ,$pos+9);
		}
		
		
		
		$this->_redirect($anterior);
	}
	
	
	
	public function actualizaHistorial(){
		$session = $this->cogeHistorial();
		
		$controller = $this->_request->getParam('controller');
		$vista = $this->_request->getParam('action');
		
		$actual =$this->_request->getRequestUri();
		
		$anterior = array_pop($session->historial);
		$session->historial[] =$anterior;
		if( $anterior != $actual){
			$session->historial[] = $this->_request->getRequestUri();
			
		}
		

		
	}
	public function postDispatch(){
		
		parent::postDispatch();
		
		if(MODO_CSV){

			foreach ($this->_layout as $elemento){
				if($elemento instanceof AppGrid){
					header ( "Pragma: public" );
					header ( "Cache-Control: no-store, no-cache, must-revalidate" );
					header ( "Cache-Control: pre-check=0, post-check=0, max-age=0" );
					header ( "Pragma: no-cache" );
					header ( "Expires: 0" );
					header ( "Content-Transfer-Encoding: UTF-8" );
					header ( "Content-Type: application/csv;charset=UTF-8" );
					header ( "Content-Disposition: attachment; filename=listado" . date ( 'Ymd' ) . ".csv" );
					
						
					$elemento->setCsv(true);
					echo $elemento->toCsv();
					die();
				}
			}
			
		}
		
		
		if($this->isAjax()){
			if(isset($_REQUEST['modal']) &&$_REQUEST['modal']){
				
				
				$codigo = AppEvento::render().'
    			<div class="modal-dialog">
    				<div class="modal-content">
						<div class="modal-header">
							<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
	
						</div>
						<div class="modal-body">
							'.$this->_layout->renderModal().'
						</div>
						<div class="modal-footer">'
	
							.'<button class="btn btn-primary" onclick="javascript:$(this).parent().prev().find(\'input[type=submit]\').click()">Guardar</button>
						</div>
					</div>
				</div>';
				echo $codigo;
				die();
			}
			
			if(isset($_REQUEST['modalDestino']) && $_REQUEST['modalDestino']){
				echo AppEvento::render().$this->_layout->renderModal();
				die();
			}
			if(AppAjax::conDatos()){
			echo AppAjax::render();
			
			die();
			}else{
				echo $this->_layout->renderAjax();
				die();
			}
		}
		
		if($this->_helper->layout->isEnabled()){
			$layout = $this->_helper->layout->getLayout();
			$noValidos = array('vacio', 'layoutajax', 'layoutajaxoff', 'layoutpdf', 'layoutseleccionar');
			if(! in_array($layout, $noValidos)){
				$this->actualizaHistorial();	
			}
			
		}
		$this->_layout->layout = $this->_layout;
		
		echo $this->_layout;
		die();
		
		$this->_helper->viewRenderer->setNoRender(true);
		//$this->sinRender();
			
	}
	
	
	public function iniciaMenuSuperior()
    {
	   
    }
	
	
	//Inicializa las Migas a index/index ('home'/'inicio')
	protected function inicializaMigas(){
		$miga = array('texto'=>AppController::MIGA_INICIO,'url'=>'/index/index');
		return array($miga);
	}
	
	protected function addClienteMiga(){
	$this->_layout->migas[] = array('texto'=>$this->_nombreClienteActivo,'url'=>'/cliente/editar/id/'.$this->_idClienteActivo);
	$this->_layout->datos_cliente = array('texto'=>$this->_nombreClienteActivo,'url'=>BASEURL.'/clientes/editar/id/'.$this->_idClienteActivo);
	}
	
	
	//FunciÃ³n para debugear
	public function debug($var, $label = 'debug'){
		return Zend_Debug::dump($var, $label, $echo=true);
	}
	
	//FunciÃ³n para debugear
	public function loadForm($formName, array $parametros = null){
		require_once APPLICATION_PATH . '/forms/FRM'.$formName.'.php';
		$formClass = 'Forms_FRM'.$formName;
    	
		return new $formClass($parametros);
	}
	public function loadGrid($name, array $parametros = null){
		require_once APPLICATION_PATH . '/grids/GRD'.$name.'.php';
		$gridClass = 'Grid_GRD'.$name;
    	
		return new $gridClass($parametros);
	}
	
	
	
	
	
	//TODO: establecer el gestor de errores definido
	//Se sobreescribe el dispatch Para controlar errores
	public function dispatch($action){
		try{
			parent::dispatch($action);		
		} catch (SinPermisoException $e) {
	    	echo 'Sucedio un problema: ',  $e->getMessage(), '\n';
	    	//	$this->_redirect('errores/sinpermiso');
		}catch (Exception $e) {
	    	echo 'Sucedio un problema: ',  $e->getMessage(), '\n';
		}
	}
	
	
	
	
	
	/**
	 * Tratamos el fomulario nada mas cargarlo antes de cargarle ningun tipo de dato
	 * utilizado para la eliminación de los compos no necesarios
	 * @param: form $form formulario a tratar
	 * @return: form deberia de ser el mismo formulario tratado
	 */
	
	public function trataForm($form){
	
		return $form;
	}
	
	/**
	 * Funcion llamada tras realizar la comprobación de que es un post
	 * @param: array $values array de valores que se han obtenido del formulario
	 * @param: form $form formulario del que se han obtenido los values en editarAction
	 * @return: array valores con las modificaciones necesarias 
	 */
	public function trataDatos(array $values, $form){
	
		return $values;
	}
	 
	/**
	 * Carga  datos al formulario y lo devuleve para que pueda ser impreso en el view
	 * @param: form $form formulario a tratar
	 * @return: form formulario tratado
	 */
	public function cargaDatosForm($form){
		return $form;
	}
	
	/** 
	 * Funcion realizada tras el guadado de los datos en EditarAction
	 * esta funcion puede realizar las acciones pertinentes como podría 
	 * ser una redirección o guardado de datos en una segunda tabla
	 * @param: form $form formulario usado en editarAction
	 * @param: int $id id del save o update 
	 */
	
	public function postSave($form, $id){

	}
	
	/**
	 * Action encargada de  hacer la visualización de un formulario.
	 */
	public function verAction(){
		$idModelo = $this->_request->getParam('id', -1);
		$form = $this->loadForm($this->_modeloPrincipal);
    	$form = $this->trataForm($form);
    	
    	if ($idModelo != -1){ //Populate
			$modelo = $this->_getModel($this->_modeloPrincipal)->loadById($idModelo);
			$form->populate($modelo->toArray());
			
		}
		$form = $this->cargaDatosForm($form);
		$form->soloLectura();
		$this->_layout->id = $idModelo;
		$this->_layout->form = $form;
		
		
		if(!empty($this->_layout->destinoModal)){
			$this->_helper->layout->setLayout("layoutajax");
		}
		
		if (strlen($this->_titulo_ver)<1)
			$this->_layout->titulo = "Ver ". $this->_modeloPrincipal ;
		else
			$this->_layout->titulo = $this->_titulo_ver ;
		if ($this->renderizarDefectoVer)
			$this->renderScript( 'base/ver.phtml' );
    	

	}
	
	/* Función general de edición */
	public function editarAction()
    {
    	
    	$idModelo = $this->_request->getParam('id', -1);
    	//$this->_helper->layout->setLayout("layoutajax");
    	if(strlen($this->_campoId)>0)
    		if(isset($_REQUEST[$this->_campoId]))
    			$idModelo = $_REQUEST[$this->_campoId];
    	
    	if(empty($this->_formularioPrincipal)){
    		$this->_formularioPrincipal = $this->_modeloPrincipal;
    	}
    	
    	$form = $this->loadForm($this->_formularioPrincipal);
    	$form = $this->trataForm($form);
    	
    	$form->setAction($this->_layout->baseUrl . '/'.$this->_request->getParam('controller').'/editar/id/'.$idModelo);

    	if($this->getRequest()->isPost()) {
			if($form->isValid($_POST)) {
				$values = $form->getValues();
				
				$values = $this->trataDatos($values, $form);
					
				
				//Sino está vacio updateamos
				if(count($values)>0){
					$modelo = $this->_getModel($this->_modeloPrincipal);
					if($idModelo !=-1){ 
						 $modelo->update($idModelo, $values);
					}else{ 
						 $idModelo = $modelo->save($values);
					}
				}
				
				$this->postSave($form, $idModelo);
				
				$_POST = array();
				
				$this->_helper->layout->setLayout("vacio");
				if($this->_ajax){
					//$this->renderScript('base/ok.phtml');
					echo 'OK'.$idModelo;
					die();
				}else{
					$this->_redirect($this->_redirectEditar);
				}			
			}
		}elseif ($idModelo != -1){ //Populate
			$modelo = $this->_getModel($this->_modeloPrincipal)->loadById($idModelo);
			$form->populate($modelo->toArray());
			
		}
		$form = $this->cargaDatosForm($form);
		$this->_layout->id = $idModelo;
		$this->_layout->form = $form;
		
		
		if(!empty($this->_layout->destinoModal)){
			$this->_helper->layout->setLayout("layoutajax");
		}
		
		if (strlen($this->_titulo_edicion)<1)
			$this->_layout->titulo = "Editar ". $this->_modeloPrincipal ;
		else
			$this->_layout->titulo = $this->_titulo_edicion ;
		if ($this->renderizarDefecto)
			$this->renderScript( 'base/editar.phtml' );
    }
    
    
	/* Función eliminar general */
	public function eliminarAction(){
		$idModelo = (int)$this->_request->getParam('id', AppController::SIN_INICIALIZAR);
    	if($this->_getModel($this->_modeloPrincipal)->delete($idModelo)){
    		if($this->_ajaxEliminar){
	    		$this->_helper->layout->setLayout("vacio");    		
				$this->renderScript('base/ok.phtml');
    		}else{
    			$this->_redirect($this->_redirectEliminar);
    		}
    	}else
			if($this->_ajaxEliminar){
	    		$this->_helper->layout->setLayout("vacio");    		
				$this->renderScript('base/error.phtml');
    		}else{
    			$this->_redirect($this->_redirectEliminarError);
    		}
    		
	}
	

	/**
	 * Funcion encargada de poner para descargar una copia temparal de un fichero
	 *@param: $file: fichero que queremos publicar
	 *@param $filename : Nombre con el que queremos publicar el fichero sino se le indica pondra el mismo del fichero
	 *@param $delete: booleano para indicar si queremos que se borre o no un ficher despues de su publicaciÃ³n por defecto a no borrar
	 */
    
    function dl_file($file, $filename='', $delete=false){
	//echo $file;
	    //First, see if the file exists
	    if (!is_file($file)) { die("<b>404 File not found!</b>"); }
	
	    //Gather relevent info about file
	    $len = filesize($file);
	    if ($filename==''){
	    	$filename = basename($file);
	    }
	    $file_extension = strtolower(substr(strrchr($filename,"."),1));
	
	    //This will set the Content-Type to the appropriate setting for the file
	    switch( $file_extension ) {
	          case "pdf": $ctype="application/pdf"; break;
	      case "exe": $ctype="application/octet-stream"; break;
	      case "zip": $ctype="application/zip"; break;
	      case "doc": $ctype="application/msword"; break;
	     // case "odt": $ctype="application/msword"; break;
	      case "xls": $ctype="application/vnd.ms-excel"; break;
	      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
	      case "gif": $ctype="image/gif"; break;
	      case "png": $ctype="image/png"; break;
	      case "jpeg":
	      case "jpg": $ctype="image/jpg"; break;
	      case "mp3": $ctype="audio/mpeg"; break;
	      case "wav": $ctype="audio/x-wav"; break;
	      case "mpeg":
	      case "mpg":
	      case "mpe": $ctype="video/mpeg"; break;
	      case "mov": $ctype="video/quicktime"; break;
	      case "avi": $ctype="video/x-msvideo"; break;
	
	      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
	      case "php":
	      case "htm":
	      case "html":
	      case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
	
	      default: $ctype="application/force-download";
	    }
	
	    //Begin writing headers
	    header("Pragma: public");
	    header("Expires: 0");
	    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
	    header("Cache-Control: public");
	    header("Content-Description: File Transfer");
	   
	    //Use the switch-generated Content-Type
	    header("Content-Type: $ctype");
	
	    //Force the download
	    $header="Content-Disposition: attachment; filename=".$filename.";";
	    header($header );
	    header("Content-Transfer-Encoding: binary");
	    header("Content-Length: ".$len);
	    
	  /*  $f1=fopen($file,"r+");
	    echo $f1;
	    fclose($f1); 
	    */
	    $tmp = tempnam('temp', md5(uniqid()));
	    copy($file, $tmp);
	    
	    
	    readfile($tmp);
    	
	    if($delete){
	    	unlink($file);
	    }
	    
	}
	
	function redimensiona($ancho,$alto,$pathOrigenImagen,$pathDestinoImagen)
	{
		$imagenOrigen = imagecreatefromjpeg($pathOrigenImagen);
		$imagen = Imagecreatetruecolor($ancho, $alto);
		$blanco = imagecolorallocate($imagen, 255, 255, 255);
		imagefill($imagen, 0, 0, $blanco);
		$imgAncho = imagesx ($imagenOrigen);
		$imgAlto = imagesy($imagenOrigen);
		$proporcionAncho = $imgAncho/$ancho;
		$proporcionAlto = $imgAlto/$alto;
		if ($proporcionAncho > $proporcionAlto)
		{
			$altoFinal = $imgAlto/$proporcionAncho;
			$anchoFinal = $ancho;
			$posicionX = 0;
			$posicionY = ($alto-$altoFinal)/2;
		}
		else
		{
			$anchoFinal = $imgAncho/$proporcionAlto;
			$altoFinal = $alto;
			$posicionY = 0;
			$posicionX = ($ancho-$anchoFinal)/2;
		}
		imagecopyresized($imagen, $imagenOrigen, $posicionX, $posicionY, 0, 0, $anchoFinal, $altoFinal, $imgAncho, $imgAlto);
		// Damos salida a la imagen final
		imagejpeg($imagen,$pathDestinoImagen,100);
		// Destruimos ambas imágenes
		imagedestroy($imagen);
		imagedestroy($imagenOrigen);
		return TRUE;
		
	}
	
	/**
	 * Elimina la renderización en vista y layout solo aparecera lo que se envie por echo o print
	 * 
	 */
	

	public function sinRender(){
		$this->_helper->viewRenderer->setNoRender(true);
		$this->_helper->layout()->disableLayout();
	}

	public function isAjax()
	{
		//print_r($_SERVER);
		if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' && !strlen($this->_layout->destinoModal)>0)
		{return true;}
		else
		{return false;}
	}
	
	public function getParametro($variable,$valor_por_defecto = null){
		return $this->_request->getParam($variable,$valor_por_defecto);
	}
	
}
