<?php
/**
 * Clase de la que debe heredar todo componente para la gestión del banco del tiempo de Málaga.
 **/
class ComponenteBtMalaga extends ContenidoEditableConPermisos {
	
    static $has_one = array(
                            'UsuarioModifica' => 'UsuarioBtMalaga'	
	                   );

    public $AccionVer;
    public $AccionEditar;
    public $AccionBorrar;
    
    /**
     * Indica si puede editar en un listado.
     **/
    public $variablePuedeEditarEnListado;
    
    /**
     * Indica al usuario conectado actualmente
     * y se utiliza para evitar cargas de base de datos que no son necesarias.
     **/
    private $usuarioConectado;    

    /**
     * Devuelve el nombre del componente 
     **/
    public function getNombreComponente() {
        return 'ComponenteGenerico';
    }
	
    /**
     * Asigna las acciones al control. Esto no funciona en el constructor y por 
     * tanto se pone en una función aparte que se llama al cargar los contenidos
     * en el DataGrid.
     **/
    public function cargarAcciones() {
      $this->AccionVer = 'btmalaga/images/show.png^Ver^javascript:verComponente('.$this->ID.')^_self'; 
	if ($this->puedeEscribir()) {
	    $this->AccionEditar = 'btmalaga/images/edit.gif^Editar^javascript:editarComponente('.$this->ID.')^_self';
	    $this->AccionBorrar = 'btmalaga/images/delete.gif^Borrar^javascript:borrarComponente('.$this->ID.')^_self';
	} else {
	    $this->AccionEditar = 'btmalaga/images/editdisabled.gif^Editar';		
	    $this->AccionBorrar = 'btmalaga/images/deletedisabled.gif^Borrar';
	}	      
    } 

    /**
     * Función que devuelve las categorias en las que
     * se organiza el contenido.
     **/
    protected function obtenerCategorias() {
        $resultado = array(
                           'MALAGA_COMUN'
                          );
        return $resultado;
    }
					           
    /**
     * Función que indica los campos para poner en el grid de listado.
     * El formato a utilizar es JSON.	  
     **/
    public function getCamposGrid() {
        $resultado = '{"Campos":[';
	$resultado .= $this->camposGrid();
	$resultado .= ']}';
	return $resultado;
    }
	
    /**
     * Clase que devuelve los campos del grid.
     * Nota: debe ser sobreescrito por cada componentes.
     **/
    protected function camposGrid() {
        $resultado = '{"Nombre": "", "Columna":"Seleccionado", "Ordenacion":"na", "Tipo":"ch", "Tamano":20, "Filtro":"&nbsp;", "Alineacion":"left"},';
	$resultado .= '{"Nombre": "", "Columna":"AccionVer", "Ordenacion":"na", "Tipo":"img", "Tamano":20, "Filtro":"&nbsp;", "Alineacion":"left"},';
	//$resultado .= '{"Nombre": "", "Columna":"AccionEditar", "Ordenacion":"na", "Tipo":"img", "Tamano":20, "Filtro":"&nbsp;", "Alineacion":"left"},';
	//$resultado .= '{"Nombre": "", "Columna":"AccionBorrar", "Ordenacion":"na", "Tipo":"img", "Tamano":20, "Filtro":"&nbsp;", "Alineacion":"left"},';		
	return $resultado;	 
    } 
	
    /**
     * Devuelve el código par ver el componente.
     **/
    public function getCodigoVer() { 
        return $this->renderWith('PlantillaVerComponente');
    }

    /**
     * Devuelve el código par ver el componente.
     **/	
    protected function CodigoVer() {
        return "";
    }
	
    /**
     * Indica el tipo del grupo que puede tener permisos.
     **/
    protected function tipoGrupos() {
        return 'GrupoBtMalaga';
    }
	
    /**
     * Devuelve el código javascript necesario para añadir una nueva fila
     * al datagrid.
     **/
    public function cargarFilaGrid() {
        $resultado = 'mygrid.addRow('.$this->ID.',",");';	  
	$resultado .= 'mygrid.selectRowById('.$this->ID.');';
	$this->cargarAcciones();
  	$campos = json_decode($this->getCamposGrid());
  	$contador = 0;
  	foreach ($campos->Campos as $campo) {
  	    $nombreCampo = $campo->Columna;  	  	  
  	    $resultado .= "mygrid.cells(".$this->ID.",".$contador++.").setValue('".$this->$nombreCampo."');";
  	}  

	return $resultado;	  
    }
	
    /**
     * Devuelve la dirección para ver el componente.
     **/
    private $direccionVerComponente;
    public function DireccionVerComponente() {
        if ($this->direccionVerComponente == null) {	
	    $this->direccionVerComponente = Director::CurrentPage()->URLSegment.'/verComponente';
        }
        return $this->direccionVerComponente;  
    }
	
    /**
     * Sobreescribe el método para indicar el usuario que modifica un componte.
     **/
    protected function guardar($datos) {
        $usuario = $this->obtenerUsuarioConectado();
	$this->UsuarioModificaID = $usuario->ID;
	parent::guardar($datos);
    }
	
    /**
     * Clase que devuelve los botones para el toolbar.
     * Nota: debe ser sobreescrito por cada componente.
     **/
    public function botonesToolbar() {
        $xml = '<item id="back" type="button" text="Atras" img="btmalaga/images/back-icon.png" imgdis="btmalaga/images/back-icondisabled.png" enabled="false"></item>';
        $xml .= '<item id="forward" type="button" text="Adelante" img="btmalaga/images/next-icon.png" imgdis="btmalaga/images/next-icondisabled.png" enabled="false"></item>';
        return $xml;
    }
    
    /**
     * Indica si un usuario puede editar para un
     * determinado tipo.
     */
    public function puedeEditarEnListado() {
        if ($this->variablePuedeEditarEnListado === null) {
    	    $carpetaPadre = DataObject::get_one('CarpetaBtMalaga', "Nombre='Contenedor".$this->ClassName."'");
    	    if ($carpetaPadre) {
    	        $this->variablePuedeEditarEnListado = $carpetaPadre->puedeEscribir();
    	    }   
    	} 
    	return $this->variablePuedeEditarEnListado;
    }    
    
    /**
     * Devuelve los parámetros para el listado de componentes.
     **/
    public function parametrosListado() {
      return '';
    }
    
    /**
     * Devuelve el usaurio conectado.
     **/
    public function obtenerUsuarioConectado() {
        if (!$this->usuarioConectado) {
            $this->usuarioConectado = Member::CurrentMember();
        }
        return $this->usuarioConectado;
    }        
}
?>
