<?php
/**
 * Example 1 for HTML_QuickForm_Controller: using the Controller
 * infrastructure to create and process the basic single-page form
 * 
 * $Id: modifMaterial.php,v 1.87 2004/11/19 12:03:04 toni Exp $
 */
require_once "../conf.inc";
require_once APP_DIR."qfc_base.php";

class ModifMaterial_Page extends Base_Page
{
    var $idm;
    
    function ModifMaterial_Page ($pag,$idm) {
		if ($idm) {$this->idm = $idm;}
		$this->Base_Page($pag);
    }
    
    function buildForm()
    {
    	$this->_formBuilt = true;
	
	$x = new Material($this->idm);
#	print "<br>:::<pre>";print_r ($x);print"</pre>";
	
	$def[titulo] = $x->titulo;
	$def[resumen] = $x->resumen;
	$def[userfile] = $x->imagen;
	$def[userfile2] = $x->archivo;
	$def[anyo] = $x->anyo;
	$def[proyecto] = $x->proyecto_fk;
	$def[soporte] = $x->soporte_fk;
	$def[dispo] = $x->disponibilidad;
	$def[enlace_reserva] = $x->enlace_reserva;
	$def[enlace_contenido] = $x->enlace_contenido;
	$def[temas] = $x->temas;
	$def[ambitos] = array_keys ($x->ambitos);
	$def[destinos] = array_keys ($x->destinos);
	$def[idiomas] = array_keys ($x->idiomas);

#	print "<br>:::<pre>";print_r ($def);print"</pre>";

	#$def = $x->toArray();
    	
		require_once (APP_DIR.'Tema.php');
		require_once (APP_DIR.'Idioma.php');
		require_once (APP_DIR.'Soporte.php');
		require_once (APP_DIR.'Ambito.php');
		require_once (APP_DIR.'Destino.php');
		require_once (APP_DIR.'Proyecto.php');
		
		// Recoger datos para los selects.
		$t = new Tema(); $_temas = $t->lista();unset($t);
		$i = new Idioma(); $_idiomas = $i->lista();unset($i);
		$s = new Soporte(); $_soportes = $s->lista();unset($s);
		$a = new Ambito(); $_ambitos = $a->lista();unset($a);
		$d = new Destino(); $_destinos = $d->lista(); unset($d);
		$p = new Proyecto(); $_proyectos = $p->lista();unset($p); //el select no es multiple (0..1)

        $this->setDefaults($def);
	#print "<br>:::<pre>";print_r ($def);print"</pre>";
		$_img = $def[userfile];
		$_arc = $def[userfile2];
		#unset($def);
		
		//Elementos del Formulario
		$this->addElement('hidden','idm',$this->idm);
  	    $path_img = APP_DIR."imagenes/"; //carpeta de imagenes.
  	    $path_arc = APP_DIR."archivos/"; //carpeta de archivos de contenidos.
        $this->addElement('header', 'header', 'Material');
        $this->addElement('text', 'titulo', 'Titulo:', array('size'=>20, 'maxlength'=>50));
        $this->addElement('textarea', 'resumen', 'Resumen:', array('cols'=>40, 'rows'=>10));
        $this->addElement('text', 'anyo', 'Año edición:', array('size'=>20, 'maxlength'=>50));
        $this->addElement('select', 'temas', 'Temas:', $_temas, array('size'=>5,'multiple'=>'multiple'));
        $this->addElement('select', 'idiomas', 'Idiomas:', $_idiomas, array('size'=>5,'multiple'=>'multiple'));
        $this->addElement('select', 'destinos', 'Destinos:', $_destinos, array('size'=>5,'multiple'=>'multiple'));
        $this->addElement('select', 'ambitos', 'Ambitos:', $_ambitos, array('size'=>5,'multiple'=>'multiple'));
        $this->addElement('select', 'soporte', 'Soporte:', $_soportes);
        $this->addElement('select', 'proyecto', 'Proyecto:', $_proyectos);
	    $this->addElement('hidden', 'path_img', $path_img);
 		$this->addElement('header', 'img', $_img);
        $this->file =& $this->addElement('file', 'userfile', 'Imagen:(max:1MB)', array('size'=>50, 'maxlength'=>100));
	    $this->addElement('hidden', 'path_arc', $path_arc);
		$this->addElement('header', 'arc', $_arc);
		$this->file2 =& $this->addElement('file', 'userfile2', 'Archivo:(max:2MB)', array('size'=>50, 'maxlength'=>100));
        $this->addElement('text', 'dispo', 'Disponibilidad:', array('size'=>20, 'maxlength'=>50));
        $this->addElement('text', 'enlace_contenido', 'Para más información: http://', array('size'=>20, 'maxlength'=>50));
        $this->addElement('text', 'enlace_reserva', 'Enlace para reservar:', array('size'=>20, 'maxlength'=>50));
        
        $this->addElement('submit', 'submit', 'Modificar');

#print "XXXXXXXXXX:<pre>";print_r($def[temas]);print "</pre>";
#print "XXXXXXXXXX:<pre>";print_r(array_keys($def[temas]));print "</pre>";


		$tt =& $this->getElement ("temas"); $tt->setSelected(array_keys($def[temas]));

		//Filtros
        $this->applyFilter('titulo', 'trim');
        
        //Reglas de validacion
		$this->addRule('titulo', 'Titulo es un campo requerido!', 'required', null, 'client');
        $this->addRule('temas', 'Debes elegir uno o más temas!', 'required', null, 'client');
        $this->addRule('idiomas', 'Debes elgir uno o más idiomas!', 'required', null, 'client');
        $this->addRule('soporte', 'Debes elgir un tipo de soporte!', 'required', null, 'client');
		$this->addRule('ambitos', 'Debes elgir uno o más ambitos!', 'required', null, 'client');
		$this->addRule('destinos', 'Debes elgir uno o más destinos!', 'required', null, 'client');
		$this->addRule('userfile', 'El fichero de imagen es demasiado grande.', 'maxfilesize', 1048576,'client');
		#$this->addRule('userfile', 'Must be a jpeg', 'mimetype', array('image/jpeg', 'image/jpeg'), 'client' );
		$this->addRule('userfile2', 'El fichero es demasiado grande.', 'maxfilesize', 2097152,'client');
        $this->setDefaultAction('submit');
#print "<br>::def::<pre>";print_r ($def);print"</pre>";

    }
}

class ModifMaterial_Action extends HTML_QuickForm_Action
{
	var $lastError = '';
	
    function perform(&$page, $actionName)
    {
		DB_DataObject::debugLevel(1);
	
    	// modif del material
		$m = new Material($page->exportValue('idm'));
		$m->titulo = $page->exportValue('titulo');
		$m->resumen = $page->exportValue('resumen');
		$m->anyo = $page->exportValue('anyo');
		$m->disponibilidad = $page->exportValue('dispo');
		$m->enlace_contenido = $page->exportValue('enlace_contenido');
		$m->enlace_reserva = $page->exportValue('enlace_reserva');
		#if ($page->exportValue('proyecto')==0) {
		#	$m->proyecto_fk = NULL;			
		#}
		#else {
			$m->proyecto_fk = $page->exportValue('proyecto');
		#}
		$m->soporte_fk = $page->exportValue('soporte');
		
		// imagen
		if (!$this->lastError) {
            $f = $page->getElementValue('userfile');
	        if ($page->file->isUploadedFile()) {
	        	$p = $page->exportValue('path_img');
	            $page->file->moveUploadedFile($p);
	            $m->imagen = $f['name']; 
	        }
	        elseif ($f['error']==2) { //massa gran!
	        	$error = "<br />El archivo de imagen es demasiado grande.";
	        }
		}
		
		// archivo
		if (!$this->lastError) {
            $f = $page->getElementValue('userfile2');
	        if ($page->file2->isUploadedFile()) {
	        	$p = $page->exportValue('path_arc');
	            $page->file2->moveUploadedFile($p);
	            $m->archivo = $f['name']; 
	        }
	        elseif ($f['error']==2) { //massa gran!
	        	$error = "<br />El archivo de imagen es demasiado grande.";
	        }
		}
		
#		print"MATERIAL:<pre>";print_r($m->toArray());print"</pre>";

		if (!$this->lastError) {
			$m->update();
		}
		else {
			$this->lastError .= "<br />ModifMaterial_Action (perform:update): Error al modificar Material. ";
			$this->lastError .= $m->_lastError->message;
		}
		if (PEAR::isError($m->_lastError)) {
			$this->lastError .= "<br />ModifMaterial_Action (perform): Error al modificar Material. ";
			$this->lastError .= $m->_lastError->message;
		}
		// update de los temas
		if (!$this->lastError) {
			$mat_tema = new DataObjects_Mat_Tema;
			$mat_tema->idm = $m->idm;
			$mat_tema->find();
			while ($mat_tema->fetch()) {
				$mat_tema->delete();
			}
			$t = $page->exportValue('temas');
			foreach ($t as $v) {
				$mt = new DataObjects_Mat_Tema;
				$mt->idm = $m->idm;
				$mt->idt = $v;
				$mt->insert();
				if (PEAR::isError($mt->_lastError)) {
					$this->lastError .= "<br />ModifMaterial_Action (perform): Error al modificar Tema. ";
					$this->lastError .= $mt->_lastError->message;
					continue;			
				}
			}
			unset($mat_tema);
		}
		// update de los idiomas
		if (!$this->lastError) {
			$mat_id = new DataObjects_Mat_Idioma;
			$mat_id->idm = $m->idm;
			$mat_id->find();
			while ($mat_id->fetch()) {
				$mat_id->delete();
			}
			$t = $page->exportValue('idiomas');
			foreach ($t as $v) {
				$mat_id = new DataObjects_Mat_Idioma;
				$mat_id->idm = $m->idm;
				$mat_id->idi = $v;
				$mat_id->insert();
				if (PEAR::isError($mat_id->_lastError)) {
					$this->lastError .= "<br />ModifMaterial_Action (perform): Error al modificar Idioma. ";
					$this->lastError .= $mat_id->_lastError->message;
					continue;			
				}
			}
			unset($mat_id);
		}
		// update de los ambitos
		if (!$this->lastError) {
			$mat_amb = new DataObjects_Mat_Ambito;
			$mat_amb->idm = $m->idm;
			$mat_amb->find();
			while ($mat_amb->fetch()) {
				$mat_amb->delete();
			}
			$t = $page->exportValue('ambitos');
			foreach ($t as $v) {
				$mat_amb = new DataObjects_Mat_Ambito;
				$mat_amb->idm = $m->idm;
				$mat_amb->ida = $v;
				$mat_amb->insert();
				if (PEAR::isError($mat_amb->_lastError)) {
					$this->lastError .= "<br />ModifMaterial_Action (perform): Error al modificar Ambito. ";
					$this->lastError .= $mat_amb->_lastError->message;
					continue;			
				}
			}
			unset($mat_amb);
		}
		// update de los destinos
		if (!$this->lastError) {
			$mat_des = new DataObjects_Mat_Destino;
			$mat_des->idm = $m->idm;
			$mat_des->find();
			while ($mat_des->fetch()) {
				$mat_des->delete();
			}
			$t = $page->exportValue('destinos');
			foreach ($t as $v) {
				$mat_des = new DataObjects_Mat_Destino;
				$mat_des->idm = $m->idm;
				$mat_des->idd = $v;
				$mat_des->insert();
				if (PEAR::isError($mat_des->_lastError)) {
					$this->lastError .= "<br />ModifMaterial_Action (perform): Error al modificar Destino. ";
					$this->lastError .= $mat_des->_lastError->message;
					continue;			
				}
			}
			unset($mat_des);
		}
			 
		$this->lastError .= $error; //el error del upload
				
		//hay que hacer una funcion en un include
		//para que saque el error con smarty.
		print $this->lastError;
		print "<br 	/><a href=\"../detalle.php?id=".$m->idm."\">Atrás</a>";
		unset($m);
		DB_DataObject::debugLevel(0);
		
    } //perform
} //ModifMaterial_Action

#print "GET:<pre>";print_r($_GET);print "</pre>";
#print "POST:<pre>";print_r($_POST);print "</pre>";

$page =& new ModifMaterial_Page('modifMaterial',$_GET[id]);

// We actually add these handlers here for the sake of example
// They can be automatically loaded and added by the controller
$page->addAction('display', new Base_Action_Display('insertMaterial.tpl'));
$page->addAction('submit', new HTML_QuickForm_Action_Submit());

// This is the action we should always define ourselves
$page->addAction('process', new ModifMaterial_Action());

$controller =& new HTML_QuickForm_Controller('modifMaterial');
$controller->addPage($page);
$controller->run();
$controller->container(true); //borramos el container.
unset($controller);
?>
