<?
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();
}
}
?>