Location: PHPKode > projects > NAR contents manager > software/libs/accion.php
<?
require_once("BD.php");
require_once("modelos.php");
require_once("vistas.php");
require_once("controlador.php");
require_once("dialogos.php");
require_once("entorno.php");
require_once("plantilla\plantilla.php");

//Muestra la página de autentificación y determina si el usuario puede o no acceder al sistema
class action_login {
	var $username;
	var $password;
	var $result;
	var $ticket;
	
	function action_login($usname,$pass){
		$this->username=$usname;
		$this->password=$pass;
	}
		
	function execute(){
		$this->result=login($this->username,$this->password,$this->ticket);
	}

	function update(){
				
		if ($this->result=='0'){  
			//La contraseña no es correcta
			$error="epassword";
			$menu='2';  //Es el menu de login 
			$divisions='1'; //Tiene una única pantalla además del menú
			$user=""; //En este punto no hay usuario autentificado
			$sub='0';//No se muestra submenú en pantalla
			$object2=""; //no hay objeto 2º
			$mens1="";
			$mens2="";
			$subtype="";

			$pantalla=new first_dialog($error);
			$object1=$pantalla->show();
			
			$asignara="";
			$tipoasignara="";
			$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
			$ent->show_table();
		}else if ($this->result=='1'){ 
			//Todo es correcto
			$menu='1';  //Es el menu de usuario
			$user=$this->username; 
			$sub='0';//No se muestra submenú en pantalla
			$mens1="";
			$mens2="";
			$subtype="";
			
			//Sacamos el rol del usuario para ver si en la pantalla de bienvenida son necesarias 2 divisiones
			$BDcontrolador = new db_handling;
			$BDcontrolador->connection();
			$currentuser=$this->username;
			$BDcontrolador->query("SELECT rol FROM user WHERE username='$currentuser'");
			@$BDcontrolador->one_result("0","rol");
			$userrol=$BDcontrolador->finalresult;

			//En cualquier caso, mostramos en el objeto1 la pantalla de bienvenida
			$bienve=new welcome_dialog($this->username,$this->ticket);
			$object1=$bienve->show();

			if ($userrol=="redactor" || $userrol=="editor" || $userrol=="corrector"){
				//Solo en este caso se muestra el objeto2
				$divisions='2';
				$pend=new outstanding_dialog($this->username,$this->ticket);
				$object2=$pend->show();
			}else{
				$divisions='1'; 
				$object2="";
			}
			
			$asignara="";
			$tipoasignara="";
			$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
			$ent->show_table();
		}else if ($this->result=='2'){  
			//El usuario no existe
			$error="euser";
			$menu='2';  //Es el menu de login 
			$divisions='1'; //Tiene una única pantalla además del menú
			$user=""; //En este punto no hay usuario autentificado
			$sub='0';//No se muestra submenú en pantalla
			$object2=""; //no hay objeto 2º
			$mens1="";
			$mens2="";
			$subtype="";

			$pantalla=new first_dialog($error);
			$object1=$pantalla->show();
			$asignara="";
			$tipoasignara="";
			$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
			$ent->show_table();
		}else if ($this->result=='3'){  
			//El usuario ya tiene otra sesión iniciada
			$error="esesion";
			$menu='2';  //Es el menu de login 
			$divisions='1'; //Tiene una única pantalla además del menú
			$user=""; //En este punto no hay usuario autentificado
			$sub='0';//No se muestra submenú en pantalla
			$object2=""; //no hay objeto 2º
			$mens1="";
			$mens2="";
			$subtype="";

			$pantalla=new first_dialog($error);
			$object1=$pantalla->show();
			$asignara="";
			$tipoasignara="";
			$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
			$ent->show_table();
		}
	}
}


//Elimina el ticket del usuario y vuelve a mostrar la página de inicio
class action_logout{
	var $tic;
	var $result;

	function action_logout($ticket){
		$this->tic=$ticket;
	}	
	
	function execute(){
		$this->result=logout($this->tic);
	}

	function update(){
		if ($this->result=='1'){
			$error="ok";
			$menu='2';  //Es el menu de login 
			$divisions='1'; //Tiene una única pantalla además del menú
			$user=""; //En este punto no hay usuario autentificado
			$sub='0';//No se muestra submenú en pantalla
			$object2=""; //no hay objeto 2º
			$mens1="";
			$mens2="";
			$subtype="";

			$pantalla=new first_dialog($error);
			$object1=$pantalla->show();
			$asignara="";
			$tipoasignara="";
			$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
			$ent->show_table();
		}
	}
}


//Muestra el cuadro de búsqueda y de resulatdos o la búsqueda avanzada
class action_search{
	var $currentuser;
	var $advanced;   //indica si el cuadro es el de búsqueda avanzada (1) o no (0)
	var $itemtype;   //Tipo del objeto que se va a buscar
	var $erase;		//Indica si el objeto permite ser borrado
	var $select;	//Indica si el objeto permite ser seleccionado
	var $dif;		//Indica si el objeto permite ser difundido
	var $asignara;   //Si se trata de un material a asignar,la clave del objeto al que se va a asignar
	var $tipoasignara;  //Si se trata de un material a asignar,el tipo del objeto al que se va a asignar

	function action_search($adv,$cuser,$type,$era,$sel,$dif,$asignara,$tipoasignara){
		$this->currentuser=$cuser;
		$this->advanced=$adv;
		$this->itemtype=$type;
		$this->erase=$era;
		$this->select=$sel;
		$this->dif=$dif;
		$this->asignara=$asignara;
		$this->tipoasignara=$tipoasignara;
	}

	
	function update(){
		
		if ($this->advanced=='0'){
			$menu='1';
			$divisions='2';
			$sub="1";
			$subtype=$this->itemtype;
		}elseif ($this->advanced=='1'){
			$menu='0';
			$divisions='1';
			$sub="0";
			$subtype="";
		} 
		$user=$this->currentuser;
		$mens1="";
		$mens2="";
						
		//Sacamos el ticket del usuario
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$usname=$this->currentuser;
		$BDcontrolador->query("SELECT id_ticket FROM ticket WHERE username='$usname'");
		@$BDcontrolador->one_result('0','id_ticket');
		$tic=$BDcontrolador->finalresult;
		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;

		$busqueda=new search_dialog($this->itemtype,$this->advanced,$tic,$asignara,$tipoasignara);
		$object1=$busqueda->show();

		if ($this->advanced=='0'){
			$results="";
			$erase=$this->erase;		
			$select=$this->select;
			$dif=$this->dif; //Es una publicación que va a ser difundida
			$secs="";
			$asigna=$this->asignara;  //Objeto al q se va a asignar el material
			$tipoasigna=$this->tipoasignara; //tipo del objeto al q se va a asignar el material
			$cuser=$this->currentuser;
			$busqueda2 = new results_dialog($results,$erase,$select,$this->itemtype,$dif,$tic,$secs,$asigna,$tipoasigna,$cuser);
			$object2=$busqueda2->show();
		}else if ($this->advanced=='1'){
			$object2="";
		}

		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}

}



//Abre un objeto en el modo indicado
class action_open{
	var $type;
	var $itemkey;
	var $currentuser;
	var $way;
	var $objeto;
	var $aquien;  //Cuando es material que se va a asignar (desde archivo), clave del objeto al que se asigna
	var $tipoaquien; //tipo del objeto al que se asigna
	
	function action_open($itemtype,$cuser,$key,$way,$aquien,$tipoaquien){
		$this->type=$itemtype;
		$this->currentuser=$cuser;
		$this->itemkey=$key;
		$this->way=$way;  //indica si se abre para leer (readonly), modificar(edit) o crear(create)
		$this->aquien=$aquien;
		$this->tipoaquien=$tipoaquien;
	}

	function execute(){
		$this->objeto=open($this->type,$this->itemkey);
	}

	function update(){
		$menu='1';
		$divisions='1';
		$user=$this->currentuser;
		$object2="";
		$sub="0";
		$subtype="";
		$mens1="";
		$mens2="";

		if ($this->type=="user"){
			$obj=new user_view();
			$obj->setuser($this->objeto);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate($this->way);
			$object1=$obj->show("");
		}else if ($this->type=="news"){
			$obj=new news_view();
			$obj->setnews($this->objeto);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate($this->way);
			$object1=$obj->show("");
		}if ($this->type=="report"){
			$obj=new report_view();
			$obj->setreport($this->objeto);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate($this->way);
			$object1=$obj->show("");
		}if ($this->type=="material"){
			$obj=new material_view();
			$obj->setmaterial($this->objeto);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate($this->way);
			$object1=$obj->show("",$this->aquien,$this->tipoaquien);
		}if ($this->type=="structure"){
			$obj=new structure_view();
			$obj->setstructure($this->objeto);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate($this->way);
			$object1=$obj->show("");
		}if ($this->type=="publication"){
			$obj=new publication_view();
			$obj->setpublication($this->objeto);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate($this->way);
			$object1=$obj->show("");
		} 

		$asignara="";
		$tipoasignara="";
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}
}


//Crea un objeto mostrando mensaje de error si no se pudiese llegar a crear
class action_create{
	var $type;
	var $item;
	var $currentuser;
	var $incomplete;
	var $aquien;  //En el caso de crear un material para posteriormente asignarlo (asignar material desde archivo) aquí va la clave del objeto al que se le va a asignar.
	var $tipoaquien; //tipo del objeto al que se asigna el material
	var $clave; //variable en la que se devuelve la clave asignada a la noticia
		
	function action_create($itemtype,$item,$cuser,$aquien,$tipoaquien){
		$this->type=$itemtype;
		$this->item=$item;
		$this->currentuser=$cuser;
		$this->aquien=$aquien;
		$this->tipoaquien=$tipoaquien;
	}

	function execute(){
		//controlamos que no estén vacíos los campos imprescindibles y que no se repitan las claves primarias

		$this->incomplete='0';

		if ($this->type=='user'){
			$BDcontrolador = new db_handling;
			$BDcontrolador->connection();
			$usern=$this->item->username;
			$BDcontrolador->query("SELECT * FROM user WHERE username='$usern'");
			@$BDcontrolador->all_results_into_array();
			$res=$BDcontrolador->arrayfinalresult;
			if ($res != ""){
				//Ya existe otro campo con esa clave
				$this->incomplete='2';
			}

			if ($this->item->username=="" || $this->item->name=="" || $this->item->surnames=="" || $this->item->rol=="" || $this->item->telephone=="" || $this->item->password==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='news'){
			if ($this->item->matter=="" || $this->item->state=="" || $this->item->ndate=="" || $this->item->title=="" || $this->item->contents==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='report'){
			if ($this->item->title=="" || $this->item->type=="" || $this->item->state=="" || $this->item->rdate=="" || $this->item->contents=="" || $this->item->username==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='material'){
			$BDcontrolador = new db_handling;
			$BDcontrolador->connection();
			$matdes=$this->item->descriptor;
			$BDcontrolador->query("SELECT * FROM material WHERE descriptor='$matdes'");
			@$BDcontrolador->all_results_into_array();
			$res=$BDcontrolador->arrayfinalresult;
			if ($res != ""){
				//Ya existe otro campo con esa clave
				$this->incomplete='2';
			}

			if ($this->item->descriptor=="" || $this->item->type=="" || $this->item->mdate=="" || $this->item->attachednote=="" || $this->item->contents=="" || $this->item->username==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='publication'){
			$BDcontrolador = new db_handling;
			$BDcontrolador->connection();
			$pubn=$this->item->publicationname;
			$BDcontrolador->query("SELECT publicationname FROM publication WHERE publicationname='$pubn'");
			@$BDcontrolador->one_result('0','publicationname');
			$res=$BDcontrolador->finalresult;
			if ($res != ""){
				//Ya existe otro campo con esa clave
				$this->incomplete='2';
			}

			if ($this->item->publicationname=="" || $this->item->pdate=="" || $this->item->sections=="" || $this->item->state==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='structure'){
			if ($this->item->name=="" || $this->item->state=="" || $this->item->type=="" || $this->item->category=="" || $this->item->pagewi=="" || $this->item->pagehe=="" || $this->item->marginsize=="" || $this->item->username==""){
				$this->incomplete='1';
			}
		}    
		
		//Creamos si todo es correcto
		if ($this->incomplete=='0'){
			create($this->type,$this->item,$this->clave);
			

			if ($this->type=='news'){
				return $this->clave;
			}

		}
	}

	function update(){
		$menu='1';
		$divisions='1';
		$user=$this->currentuser;
		$object2="";
		$sub="0";
		$subtype="";
		$mens1="";
		$mens2="";

		if ($this->incomplete=='1'){
			$error="incomplete";
		}else if ($this->incomplete=='0'){
			$error="no";
		}else if ($this->incomplete=='2'){
			$error="bad";
		}

		if ($this->type=="user"){
			$obj=new user_view();
			$obj->setuser($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("create");
			$object1=$obj->show($error);
		}else if ($this->type=="news"){
			$obj=new news_view();
			$obj->setnews($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("create");
			$object1=$obj->show($error);
		}if ($this->type=="report"){
			$obj=new report_view();
			$obj->setreport($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("create");
			$object1=$obj->show($error);
		}if ($this->type=="material"){
			$obj=new material_view();
			$obj->setmaterial($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("create");
			$object1=$obj->show($error,$this->aquien,$this->tipoaquien);
		}if ($this->type=="structure"){
			$obj=new structure_view();
			$obj->setstructure($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("create");
			$object1=$obj->show($error);
		}if ($this->type=="publication"){
			$obj=new publication_view();
			$obj->setpublication($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("create");
			$object1=$obj->show($error);
		} 

		$asignara="";
		$tipoasignara="";
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}
}



//Modifica un objeto y muestra el error si este no se hubiera podido modificar
class action_modify{
	var $type;
	var $item;
	var $olditemkey;
	var $incomplete;
	var $currentuser;
	var $cambiado;  //Si es un material, será vacío si no se ha cambiado su contenido. Si se va a modificar el contenido, contiene la dirección temporal en la que está el nuevo contenido subido.
	var $aquien; //En caso de ser un material, a quién se le va a asignar (desde archivo)
	var $tipoaquien;

	function action_modify($itemtype,$newitem,$oldkey,$cuser,$cambiado,$aquien,$tipoaquien){
		$this->type=$itemtype;
		$this->item=$newitem;
		$this->olditemkey=$oldkey;
		$this->currentuser=$cuser;
		$this->cambiado=$cambiado;
		$this->aquien=$aquien;
		$this->tipoaquien=$tipoaquien;
	}

	function execute(){
		//controlamos que no estén vacíos los campos imprescindibles y que,si se cambia la clave, esta no exista ya

		$this->incomplete='0';

		if ($this->type=='user'){
			if ($this->item->username != $this->olditemkey){
				$BDcontrolador = new db_handling;
				$BDcontrolador->connection();
				$usern=$this->item->username;
				$BDcontrolador->query("SELECT * FROM user WHERE username='$usern'");
				@$BDcontrolador->all_results_into_array();
				$res=$BDcontrolador->arrayfinalresult;
				if ($res != ""){
					//Ya existe otro campo con esa clave
					$this->incomplete='2';
				}
			}

			if ($this->item->username=="" || $this->item->name=="" || $this->item->surnames=="" || $this->item->rol=="" || $this->item->telephone=="" || $this->item->password==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='news'){
			if ($this->item->matter=="" || $this->item->state=="" || $this->item->ndate=="" || $this->item->title=="" || $this->item->contents==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='report'){
			if ($this->item->title=="" || $this->item->type=="" || $this->item->state=="" || $this->item->rdate=="" || $this->item->contents=="" || $this->item->username==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='material'){
			if ($this->item->descriptor != $this->olditemkey){
				$BDcontrolador = new db_handling;
				$BDcontrolador->connection();
				$matdes=$this->item->descriptor;
				$BDcontrolador->query("SELECT * FROM material WHERE descriptor='$matdes'");
				@$BDcontrolador->all_results_into_array();
				$res=$BDcontrolador->arrayfinalresult;
				if ($res != ""){
					//Ya existe otro campo con esa clave
					$this->incomplete='2';
				}
			}

			if ($this->item->descriptor=="" || $this->item->type=="" || $this->item->mdate=="" || $this->item->attachednote=="" || $this->item->contents=="" || $this->item->username==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='publication'){
			if ($this->item->publicationname != $this->olditemkey){
				$BDcontrolador = new db_handling;
				$BDcontrolador->connection();
				$pubn=$this->item->publicationname;
				$BDcontrolador->query("SELECT publicationname FROM publication WHERE publicationname='$pubn'");
				@$BDcontrolador->one_result('0','publicationname');
				$res=$BDcontrolador->finalresult;
				if ($res != ""){
					//Ya existe otro campo con esa clave
					$this->incomplete='2';
				}
			}

			if ($this->item->publicationname=="" || $this->item->pdate=="" || $this->item->sections=="" || $this->item->state==""){
				$this->incomplete='1';
			}
		}else if ($this->type=='structure'){
			if ($this->item->name=="" || $this->item->state=="" || $this->item->type=="" || $this->item->category=="" || $this->item->pagewi=="" || $this->item->pagehe=="" || $this->item->marginsize=="" || $this->item->username==""){
				$this->incomplete='1';
			}
		}    
		
		//Creamos si todo es correcto
		if ($this->incomplete=='0'){
			if ($this->type=='material'){
				//Si es un material habrá que subir el nuevo material si lo cambian
				if ($this->cambiado != ""){  //Se ha cambiado
					modify($this->type,$this->olditemkey,$this->item);  //modificamos el objeto material

					$newmaterial = open('material',$this->olditemkey);
					addmaterial_from_file("","",$newmaterial,$this->cambiado);  //subimos el material
					
				}else{
					modify($this->type,$this->olditemkey,$this->item);
				}

			}else{
				modify($this->type,$this->olditemkey,$this->item);
			}
		}
	}

	function update(){
		$menu='1';
		$divisions='1';
		$user=$this->currentuser;
		$object2="";
		$sub="0";
		$subtype="";
		$mens1="";
		$mens2="";

		if ($this->incomplete=='1'){
			$error="incomplete";
		}else if ($this->incomplete=='0'){
			$error="no";
		}else if ($this->incomplete=='2'){
			$error="bad";
		}

		if ($this->type=="user"){
			$obj=new user_view();
			$obj->setuser($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("edit");
			$object1=$obj->show($error);
		}else if ($this->type=="news"){
			$obj=new news_view();
			$obj->setnews($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("edit");
			$object1=$obj->show($error);
		}if ($this->type=="report"){
			$obj=new report_view();
			$obj->setreport($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("edit");
			$object1=$obj->show($error);
		}if ($this->type=="material"){
			$obj=new material_view();
			$obj->setmaterial($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("edit");
			$object1=$obj->show($error,$this->aquien,$this->tipoaquien);
		}if ($this->type=="structure"){
			$obj=new structure_view();
			$obj->setstructure($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("edit");
			$object1=$obj->show($error);
		}if ($this->type=="publication"){
			$obj=new publication_view();
			$obj->setpublication($this->item);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("edit");
			$object1=$obj->show($error);
		} 

		$asignara="";
		$tipoasignara="";
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}
}


//Elimina la asociación de un elemento y un material
class action_erase_mat{
	var $matkey;  //indica si lo q se borra es un objeto de búsqueda o un material desde la ventana de editar un objeto
	var $itemkey;
	var $type; //indica el tipo del objeto al que se le ha eliminado el material
	var $currentuser;

	function action_erase_mat($itemtype,$itemkey,$matkey,$cuser){
		$this->type=$itemtype;
		$this->itemkey=$itemkey;
		$this->currentuser=$cuser;
		$this->matkey=$matkey;
	}

	function execute(){
		erase_mat($this->type,$this->itemkey,$this->matkey);
	}

	function update(){
		$menu='1';
		$divisions='1';
		$user=$this->currentuser;
		$object2="";
		$sub="0";
		$subtype="";
		$mens1="";
		$mens2="";

		if ($this->type=="news"){
			$obj=new news_view();
			//sacamos la noticia completa
			$objeto=open('news',$this->itemkey);
			$obj->setnews($objeto);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("edit");
			$object1=$obj->show("");
		}else if ($this->type=="report"){
			$obj=new report_view();
			//sacamos el informe completo
			$objeto=open('report',$this->itemkey);
			$obj->setreport($objeto);
			$obj->setcurrentuser($this->currentuser);
			$obj->setstate("edit");
			$object1=$obj->show("");
		}

		$asignara="";
		$tipoasignara="";
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();

	}


}


//Elimina un objeto
class action_erase{
	var $type;
	var $itemkey;
	var $currentuser;
	var $sel;  //Si el objeto permite selección
	//variables que hacen falta para pasar el objeto al que se le va a asignar el material desde la BD
	var $asignara;
	var $tipoasignara;
	
	
	function action_erase($itemtype,$key,$cuser,$select,$asignara,$tipoasignara){
		$this->type=$itemtype;
		$this->itemkey=$key;
		$this->currentuser=$cuser;
		$this->sel=$select;
		$this->asignara=$asignara;
		$this->tipoasignara=$tipoasignara;
	}

	function execute(){
		erase($this->type,$this->itemkey);
	}

	function update(){

		$menu='1';
		$divisions='2';
		$user=$this->currentuser;
		$sub="1";
		$subtype=$this->type;
		$mens1="";
		$mens2="El borrado se ha llevado <BR>a cabo de forma correcta";
		
		//Sacamos el ticket del usuario
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$usname=$this->currentuser;
		$BDcontrolador->query("SELECT id_ticket FROM ticket WHERE username='$usname'");
		@$BDcontrolador->one_result('0','id_ticket');
		$tic=$BDcontrolador->finalresult;

		$type=$this->type;
		$advanced='0';
		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$busqueda=new search_dialog($type,$advanced,$tic,$asignara,$tipoasignara);
		$object1=$busqueda->show();

		$results="";
		$erase='1';		
		$select=$this->sel;
		$secs="";
		$dif='0'; //Se va a borrar, no a difundir
		$asigna=$this->asignara;
		$tipoasigna=$this->tipoasignara;
		$cuser=$this->currentuser;
		$busqueda2=new results_dialog($results,$erase,$select,$type,$dif,$tic,$secs,$asigna,$tipoasigna,$cuser);
		$object2=$busqueda2->show();

		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}

}


//Asigna una noticia a una publicación e informa de si se ha llevado a cabo la asignación
//(Vuelve a mostrar tras esto la pantalla de búsqueda y muestra de resultados vacía)
class action_assignnews_to_pub{
	var $pubkey;
	var $news;
	var $currentuser;
	var $asignara;
	var $tipoasignara;
	var $repe;
	
	function action_assignnews_to_pub($key,$news,$cuser,$asignara,$tipoasignara){
		$this->pubkey=$key;
		$this->news=$news;
		$this->currentuser=$cuser;
		$this->asignara=$asignara;
		$this->tipoasignara=$tipoasignara;
	}

	function execute(){
		//Comprobamos primero que no exista la misma combinación ya en la tabla
		$this->repe='0';
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$newskey=$this->news->id_news;
		$pubkey=$this->pubkey;
		$BDcontrolador->query("SELECT id_newspublication FROM mnewspublication WHERE id_news='$newskey' and publicationname='$pubkey'");
		@$BDcontrolador->one_result('0','id_newspublication');
		$res=$BDcontrolador->finalresult;

		if ($res != ""){
			//Ya existe otro campo igual
			$this->repe='1';
		}
		
		if ($this->repe=='0'){
			assignnews_to_pub($this->news,$this->pubkey);
		}
	
	}

	function update(){
		$menu='1';
		$divisions='2';
		$user=$this->currentuser;
		$sub="1";
		$subtype="publication";
		$mens1="";
		if ($this->repe == '0'){
			$mens2="La noticia ha sido<BR>asignada con éxito";
		}else if ($this->repe == '1'){
			$mens2="La asignación solicitada<BR>ya existe";
		}
		
		//Sacamos el ticket del usuario
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$usname=$this->currentuser;
		$BDcontrolador->query("SELECT id_ticket FROM ticket WHERE username='$usname'");
		@$BDcontrolador->one_result('0','id_ticket');
		$tic=$BDcontrolador->finalresult;

		$type='publication';
		$advanced='0';
		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$busqueda=new search_dialog($type,$advanced,$tic,$asignara,$tipoasignara);
		$object1=$busqueda->show();

		$results="";
		$erase='0';		
		$select='1';
		$secs="";
		$dif='0'; //Se va a asignar, no a difundir
		$asigna=$this->asignara;
		$tipoasigna=$this->tipoasignara;
		$cuser=$this->currentuser;
		$busqueda2=new results_dialog($results,$erase,$select,$type,$dif,$tic,$secs,$asigna,$tipoasigna,$cuser);
		$object2=$busqueda2->show();

		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}
}


//Comprueba si el usuari que intenta acceder posee un ticket. Si lo posee se devuelve un 1 y,si no, se muestra la
//pantalla de inicio con un mensaje de error.
class action_check_ticket{
	var $tic;
	var $valido;

	function action_check_ticket($ticket){
		$this->tic=$ticket;
	}

	function execute(){
		$this->valido = check_userticket($this->tic);
	}

	function update(){
		if ($this->valido=='0'){
			//Si el ticket no es válido, muestra la pantalla de login adecuada
			$error="eticket";
			$menu='2';  //Es el menu de login 
			$divisions='1'; //Tiene una única pantalla además del menú
			$user=""; //En este punto no hay usuario autentificado
			$sub='0';//No se muestra submenú en pantalla
			$subtype="";
			$object2=""; //no hay objeto 2º
			$mens1="";
			$mens2="";

			$pantalla=new first_dialog($error);
			$object1=$pantalla->show();

			$asignara="";
			$tipoasignara="";
			$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
			$ent->show_table();
		}else if ($this->valido=='1'){
			return '1';  //Si el ticket es válido simplemente informa de ello devolviendo 1
		} 
	}
}


//Asigna un material al objeto indicado (noticia o informe) comprobando que esa asignación no existe ya.
//(Vuelve a mostrar tras esto la pantalla de búsqueda y muestra de resultados vacía)
class action_addmaterial_from_DB{
	var $materialkey;
	var $type;
	var $item;
	var $currentuser;
	var $repe;
	//Variables para conservar el objeto al que se debe asignar el material
	var $asignara;
	var $tipoasignara;
	
	function action_addmaterial_from_DB ($itemtype,$item,$mat,$cuser,$asignara,$tipoasignara){
		$this->type=$itemtype;
		$this->materialkey=$mat;
		$this->item=$item;
		$this->currentuser=$cuser;
		$this->asignara=$asignara;
		$this->tipoasignara=$tipoasignara;
	}

	function execute(){
		//Comprobamos primero que no exista la misma combinación ya en la tabla
		$this->repe='0';
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$matk=$this->materialkey;
		if ($this->type=='news'){
			$itemk=$this->item->id_news;
			$BDcontrolador->query("SELECT id_materialnews FROM mmaterialnews WHERE descriptor='$matk' and id_news='$itemk'");
			@$BDcontrolador->one_result('0','id_materialnews');
		}else if ($this->type=='report'){
			$itemk=$this->item->id_report;
			$BDcontrolador->query("SELECT id_materialreport FROM mmaterialreport WHERE descriptor='$matk' and id_report='$itemk'");
			@$BDcontrolador->one_result('0','id_materialreport');
		} 
				
		$res=$BDcontrolador->finalresult;
		if ($res != ""){
			//Ya existe otro campo igual
			$this->repe='1';
		}
		
		if ($this->repe=='0'){
			addmaterial_from_DB($this->type,$this->item,$this->materialkey);
		}
	}

	function update(){
		$menu='1';
		$divisions='2';
		$user=$this->currentuser;
		$sub="1";
		$subtype="material";
		$mens1="";
		if ($this->repe=='0'){
			$mens2="El material se ha agregado<BR>de forma correcta";
		}else if ($this->repe=='1'){
			$mens2="El material ya estaba <BR>asignado al elemento seleccionado";
		} 
		
		//Sacamos el ticket del usuario
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$usname=$this->currentuser;
		$BDcontrolador->query("SELECT id_ticket FROM ticket WHERE username='$usname'");
		@$BDcontrolador->one_result('0','id_ticket');
		$tic=$BDcontrolador->finalresult;

		$type='material';
		$advanced='0';
		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$busqueda=new search_dialog($type,$advanced,$tic,$asignara,$tipoasignara);
		$object1=$busqueda->show();

		$results="";
		$erase='0';		
		$select='1';
		$dif=""; //Da igual (no es una publicación)
		$secs=""; //Da igual. No vamos a asignar estructuras a secciones de una publicación
		$asigna=$this->asignara;
		$tipoasigna=$this->tipoasignara;
		$cuser=$this->currentuser;
		$busqueda2=new results_dialog($results,$erase,$select,$type,$dif,$tic,$secs,$asigna,$tipoasigna,$cuser);
		$object2=$busqueda2->show();

		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}
}



//Muestra la lista de elementos resultante de una búsqueda
class action_show_list{
	var $filters;  //vector con las condiciones de búsqueda en la BD. Será "" si no hay condiciones
	var $type;		//Tipo del elemento a buscar
	var $currentuser;
	var $resultados; //Contendrá el vector con las claves primarias de los resultados de la búsqueda
	var $erase;      //¿Hay botón de borrado en los resultados?
	var $select;     //¿Hay botón de selección en los resultados?
	var $dif;        //Si el tipo de elemento es publicación será 1 si se ha de difundir o 0 si es para asignarle noticia
	var $asignara;       //Es la clave del objeto al que se asigna el material en caso de una búsqueda para asignar material desde la BD
	var $tipoasignara;   //Es el tipo del objeto al que se asigna el material en caso de una búsqueda para asignar material desde la BD
	
	function action_show_list ($itemtype,$filters,$erase,$select,$difundir,$cuser,$asigna,$tipoasigna){
		$this->type=$itemtype;
		$this->filters=$filters;
		$this->erase=$erase;
		$this->select=$select;
		$this->dif=$difundir;
		$this->currentuser=$cuser;
		$this->asignara=$asigna;
		$this->tipoasignara=$tipoasigna;
	}

	function execute(){
		$this->resultados=show_list ($this->type,$this->filters);
	}

	function update(){
		$menu='1';
		$divisions='2';
		$user=$this->currentuser;
		$sub="1";
		$subtype=$this->type;
		$mens1="";
		$mens2="";
				
		//Sacamos el ticket del usuario
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$usname=$this->currentuser;
		$BDcontrolador->query("SELECT id_ticket FROM ticket WHERE username='$usname'");
		@$BDcontrolador->one_result('0','id_ticket');
		$tic=$BDcontrolador->finalresult;

		$type=$this->type;
		$advanced='0';
		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$busqueda=new search_dialog($type,$advanced,$tic,$asignara,$tipoasignara);
		$object1=$busqueda->show();

		$results=$this->resultados;
		
		$erase=$this->erase;		
		$select=$this->select;
		$dif=$this->dif; 
		$secs="";
		$asigna=$this->asignara;
		$tipoasigna=$this->tipoasignara;
		$cuser=$this->currentuser;
		$busqueda2=new results_dialog($results,$erase,$select,$type,$dif,$tic,$secs,$asigna,$tipoasigna,$cuser);
		$object2=$busqueda2->show();

		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}
}



//Agrega un material desde archivo a la BD y se lo asigna al objeto pasado(item).
//Luego muestra de nuevo la pantalla de crear material vacía y con el mensaje de error o asignación correcta 
class action_addmaterial_from_file{
	var $material;
	var $type;
	var $item;
	var $filetemplocation;//localización temporal del fichero subido
	var $currentuser;
	var $incomplete;  //0=estábien;1=faltan datos (campos vacíos);2=ya existe uno con igual descriptor
	
	function action_addmaterial_from_file ($itemtype,$item,$mat,$templocation,$cuser){
		$this->type=$itemtype;
		$this->material=$mat;
		$this->item=$item;
		$this->filetemplocation=$templocation;
		$this->currentuser=$cuser;
	}

	function execute(){
		$this->incomplete='0';
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$matdes=$this->material->descriptor;
		$BDcontrolador->query("SELECT * FROM material WHERE descriptor='$matdes'");
		@$BDcontrolador->all_results_into_array();
		$res=$BDcontrolador->arrayfinalresult;
		if ($res != ""){
			//Ya existe otro campo con esa clave
			$this->incomplete='2';
		}

		if ($this->material->descriptor=="" || $this->material->type=="" || $this->material->mdate=="" || $this->material->attachednote=="" || $this->material->contents=="" || $this->material->username==""){
			$this->incomplete='1';
		}

		if ($this->incomplete=='0'){
			addmaterial_from_file($this->type,$this->item,$this->material,$this->filetemplocation);
		}

	}

	function update(){
		$menu='1';
		$divisions='1';
		$user=$this->currentuser;
		$object2="";
		$sub="0";
		$subtype="";
		$mens1="";
		$mens2="";

		if ($this->incomplete=='1'){
			$error="incomplete";
		}else if ($this->incomplete=='0'){
			$error="no";
		}else if ($this->incomplete=='2'){
			$error="bad";
		}

		$obj=new material_view();
		$obj->setmaterial($this->material);
		$obj->setcurrentuser($this->currentuser);
		$obj->setstate("create");
		if ($this->type=='news'){
			$object1=$obj->show($error,$this->item->id_news,$this->type); 
		}else if ($this->type=='report'){
			$object1=$obj->show($error,$this->item->id_report,$this->type); 
		}else if($this->type==''){
			$object1=$obj->show($error,"","");
		}

		$asignara="";
		$tipoasignara="";
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();

	}
}

//Pone la publicación indicada al estado 'difundir'
//Vuelve a mostrar el cuadro de búsqueda y resultados vacíos y un mensaje de ejecución correcta o incorrecta
class action_circulate_publication{
	var $pubkey;
	var $currentuser;
	var $exists;
	
	function action_circulate_publication ($publikey,$cuser){
		$this->pubkey=$publikey;
		$this->currentuser=$cuser;
	}

	function execute(){
		$this->exists='0'; 
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$pkey=$this->pubkey;
		$BDcontrolador->query("SELECT state FROM publication WHERE publicationname='$pkey'");
		@$BDcontrolador->one_result('0','state');
		$res=$BDcontrolador->finalresult;
		if ($res == "publicar"){
			//Ya esta difundida esa publicación
			$this->exists='1';
		}else if ($res == "en curso"){
			circulate_publication($this->pubkey);
		}
	}

	function update(){
		$menu='1';
		$divisions='2';
		$user=$this->currentuser;
		$sub="1";
		$subtype="publication";
		$mens1="";
		if ($this->exists == '0'){
			$mens2="La publicación está preparada<BR>para ser difundida";
		}else if ($this->exists == '1'){
			$mens2="La publicación elegida ya estaba<BR>seleccionada para ser difundida";
		}
				
		//Sacamos el ticket del usuario
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$usname=$this->currentuser;
		$BDcontrolador->query("SELECT id_ticket FROM ticket WHERE username='$usname'");
		@$BDcontrolador->one_result('0','id_ticket');
		$tic=$BDcontrolador->finalresult;

		$type='publication';
		$advanced='0';
		$asignara="";
		$tipoasignara="";
		$busqueda=new search_dialog($type,$advanced,$tic,$asignara,$tipoasignara);
		$object1=$busqueda->show();

		$results="";
		$erase='0';		
		$select='1';
		$dif="1"; //Es una publicación que va a ser difundida
		$secs="";
		$asigna="";
		$tipoasigna="";
		$cuser=$this->currentuser;
		$busqueda2=new results_dialog($results,$erase,$select,$type,$dif,$tic,$secs,$asigna,$tipoasigna,$cuser);
		$object2=$busqueda2->show();

		$asignara="";
		$tipoasignara="";
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}
}


//Dada la clave de una publicación, muestra una lista de resultados con esa única publicación y su lista de 
//secciones asociadas
class action_show_sections{
	var $pubkey;
	var $currentuser;
	var $resultados;
	//variables para decir a que objeto se va a asignar la publicación
	var $asignara;
	var $tipoasignara;

	function action_show_sections($pkey,$cuser,$asignara,$tipoasignara){
		$this->pubkey=$pkey;
		$this->currentuser=$cuser;
		$this->asignara=$asignara;
		$this->tipoasignara=$tipoasignara;
	} 

	function execute(){
		$pub=$this->pubkey;
		$filters[0]="publicationname='$pub'";
		$this->resultados=show_list ('publication',$filters);
	}

	function update(){
		$menu='1';
		$divisions='2';
		$user=$this->currentuser;
		$sub="1";
		$subtype="publication";
		$mens1="";
		$mens2="";
				
		//Sacamos el ticket del usuario
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$usname=$this->currentuser;
		$BDcontrolador->query("SELECT id_ticket FROM ticket WHERE username='$usname'");
		@$BDcontrolador->one_result('0','id_ticket');
		$tic=$BDcontrolador->finalresult;

		$type='publication';
		$advanced='0';
		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$busqueda=new search_dialog($type,$advanced,$tic,$asignara,$tipoasignara);
		$object1=$busqueda->show();

		$results=$this->resultados;
		
		$erase='0';		
		$select='1';
		$dif='0';
		
		//Sacamos las secciones de la publicación
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$pubkey=$this->pubkey;
		$BDcontrolador->query("SELECT sections FROM publication WHERE publicationname='$pubkey'");
		@$BDcontrolador->one_result('0','sections');
		$res=$BDcontrolador->finalresult;
		$separador="\n";
		$secs=split($separador,$res);
		$asigna=$this->asignara;
		$tipoasigna=$this->tipoasignara;
		$cuser=$this->currentuser;
		$busqueda2=new results_dialog($results,$erase,$select,$type,$dif,$tic,$secs,$asigna,$tipoasigna,$cuser);
		$object2=$busqueda2->show();

		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	
	}


}

//Mete una entrada que asocia a un usuario con una noticia
class action_assignnews_to_user{
	var $newskey;
	var $username;

	function action_assignnews_to_user ($newskey,$username){
		$this->newskey=$newskey;
		$this->username=$username;
	}

	function execute(){
		assignnews_to_user($this->newskey,$this->username);
	}

}


//Mete una entrada que asocia la estructura a la publicación en la tabla mstructurepublication
//Vuelve a mostrar el cuadro de búsqueda y resultados vacíos y un mensaje de ejecución correcta o incorrecta
class action_assignstruct_to_publication{
	var $pubkey;
	var $struct;
	var $fromsection;  //Informa de si la estructura se va a asignar a una seccion (1) o a la publicación (0)
	var $section;      //Sección a la que se asigna la estructura (en caso de que $fromsection=1)
	var $currentuser;
	var $repe;
	var $asignara;
	var $tipoasignara;
	
	function action_assignstruct_to_publication ($pubkey,$struct,$fromsection,$section,$cuser,$asignara,$tipoasignara){
		$this->pubkey=$pubkey;
		$this->struct=$struct;
		$this->fromsection=$fromsection;
		$this->section=$section;
		$this->currentuser=$cuser;
		$this->asignara=$asignara;
		$this->tipoasignara=$tipoasignara;
	}

	function execute(){
		//Comprobamos primero que no exista la misma combinación ya en la tabla
		$this->repe='0';
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$structkey=$this->struct->id_structure;
		$pubkey=$this->pubkey;
		$fromsect=$this->fromsection;
		$sect=$this->section;
		$BDcontrolador->query("SELECT id_structurepublication FROM mstructurepublication WHERE id_structure='$structkey' and publicationname='$pubkey' and isfromsection='$fromsect' and section='$sect'");
		@$BDcontrolador->one_result('0','id_structurepublication');
		$res=$BDcontrolador->finalresult;

		if ($res != ""){
			//Ya existe otro campo igual
			$this->repe='1';
		}
		
		if ($this->repe=='0'){
			assignstruct_to_pubication($this->pubkey,$this->struct,$this->fromsection,$this->section);
		}	
		
	}

	function update(){
		$menu='1';
		$divisions='2';
		$user=$this->currentuser;
		$sub="1";
		$subtype="publication";
		$mens1="";
		if ($this->repe == '0'){
			$mens2="La estructura ha sido<BR>asignada con éxito";
		}else if ($this->repe == '1'){
			$mens2="La asignación solicitada<BR>ya existe";
		}
				
		//Sacamos el ticket del usuario
		$BDcontrolador = new db_handling;
		$BDcontrolador->connection();
		$usname=$this->currentuser;
		$BDcontrolador->query("SELECT id_ticket FROM ticket WHERE username='$usname'");
		@$BDcontrolador->one_result('0','id_ticket');
		$tic=$BDcontrolador->finalresult;

		$type='publication';
		$advanced='0';
		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$busqueda=new search_dialog($type,$advanced,$tic,$asignara,$tipoasignara);
		$object1=$busqueda->show();

		$results="";
		$erase='0';		
		$select='1';
		$dif="0"; //Se va a asignar
		
		$secs="";
		$asigna=$this->asignara;
		$tipoasigna=$this->tipoasignara;
		$cuser=$this->currentuser;
		$busqueda2=new results_dialog($results,$erase,$select,$type,$dif,$tic,$secs,$asigna,$tipoasigna,$cuser);
		$object2=$busqueda2->show();

		$asignara=$this->asignara;
		$tipoasignara=$this->tipoasignara;
		$ent= new enviroment($menu,$divisions,$user,$object1,$object2,$sub,$mens1,$mens2,$subtype,$asignara,$tipoasignara);
		$ent->show_table();
	}
}


?>
Return current item: NAR contents manager