예제 #1
0
파일: clFoRmX.php 프로젝트: jeromecc/tuv2
 public function applyActions($etape)
 {
     global $formxSession;
     $actions = $etape->getElementsByTagName('ACTION');
     foreach ($actions as $action) {
         //on teste la condition si yen a une
         $condition = $action->getElementsByTagName('Cond')->item(0);
         if ($condition) {
             if (!$this->testCondDOM($action)) {
                 $action->setAttribute('cond', 'false');
                 continue;
             }
             $action->setAttribute('cond', 'true');
         }
         switch ($action->getAttribute('type')) {
             //creation d'une autre instance de formulaire
             case 'formxproc':
                 $this->callFunc($action->getAttribute('id_formxproc'));
                 break;
             case 'goto':
                 //goto revient à dupliquer une partie du code xml situé entre les étapes etape_goto et etape_courante
                 $currentEtapeId = $etape->getAttribute('id');
                 $gotoEtapeId = $action->getAttribute('step');
                 $options = $action->getAttribute('options');
                 $etapes = $this->XMLDOM->getElementsByTagName('ETAPE');
                 $objBas = $etape;
                 $trouveCurrent = false;
                 $trouveGoto = false;
                 foreach ($etapes as $etapeTraitee) {
                     //parcours des étapes
                     if ($etapeTraitee->getAttribute('id') == $gotoEtapeId) {
                         //etape goto
                         $trouveGoto = true;
                         if ($trouveCurrent == false) {
                             //On est arrivé à l'etape goto qui est avant l'etape courante
                             $newEtape = $this->cloneEtape($gotoEtapeId, $objBas->getAttribute('id'), $options);
                             $objBas = $newEtape;
                             if ($currentEtapeId == $gotoEtapeId) {
                                 //si l'etape goto est egalement l'etape courante, sortie
                                 break;
                             }
                         } else {
                             // On est arrivé à l'etape goto apres avoir trouvé l'etape courante, fin du traitement
                             break;
                         }
                     } else {
                         if ($etapeTraitee->getAttribute('id') == $currentEtapeId) {
                             //etape action
                             $trouveCurrent = true;
                             if ($trouveGoto && !$etapeTraitee->hasAttribute('IamAclone')) {
                                 $this->cloneEtape($currentEtapeId, $objBas->getAttribute('id'), $options);
                                 // clonage de l'etape courante puis fin du traitement
                                 break;
                             } elseif ($trouveGoto) {
                                 break;
                             }
                         } else {
                             //etape quelconque
                             if (!$trouveCurrent && !$trouveGoto) {
                                 //sortie de la boucle si l'etape en cours de traitement n'est pas concernée
                                 continue;
                             } elseif (!$trouveCurrent && $trouveGoto && !$etapeTraitee->hasAttribute('IamAclone')) {
                                 //cas ou il faut cloner l'etape traitée apres l'etape courrante
                                 $newEtape = $this->cloneEtape($etapeTraitee->getAttribute('id'), $objBas->getAttribute('id'), $options);
                                 $objBas = $newEtape;
                             } elseif ($trouveCurrent && !$trouveGoto) {
                                 //cas ou il faut sauter l'étape
                                 $this->closeEtape($etapeTraitee);
                             }
                         }
                     }
                 }
                 break;
             case 'trigger':
                 $newInstance = new clFoRmX($this->ids, 'NO_POST_THREAT');
                 if ($newInstance->loadForm($action->getAttribute('id_formx') . '.xml')) {
                     $valeurs = $action->getElementsByTagName('Affect');
                     foreach ($valeurs as $valeur) {
                         $newInstance->setFormVar($valeur->getAttribute('id_var'), utf8_decode(getValueFrom($valeur->nodeValue)), 'no_simplexml_update');
                     }
                     $newInstance->initInstance();
                 }
                 unset($newInstance);
                 break;
                 //envoi de mail
             //envoi de mail
             case 'mail':
                 $sujet = utf8_decode($action->getElementsByTagName('Libelle')->item(0)->nodeValue);
                 $content_type = "Content-Type: text/html; charset=\"iso-8859-1\"";
                 if (is_object($action->getElementsByTagName('Expediteur')->item(0))) {
                     $from = $this->getValueFrom($action->getElementsByTagName('Expediteur')->item(0)->nodeValue);
                 } else {
                     $from = '*****@*****.**';
                 }
                 $head = "From :{$from}\n" . $content_type . "\n";
                 $message = utf8_decode(formxTools::helper_str_mef($action->getElementsByTagName('Message')->item(0)->nodeValue));
                 if ($action->getAttribute('joindreForm')) {
                     $htmlform = utf8_decode(formxTools::helper_str_mef($this->affFoRmX()));
                     $filename = "css/FoRmX_mail.css";
                     $handle = fopen($filename, 'r');
                     $style = fread($handle, filesize($filename));
                     fclose($handle);
                     $filename = "css/FoRmX.css";
                     $handle = fopen($filename, 'r');
                     $style .= fread($handle, filesize($filename));
                     fclose($handle);
                     $htmlMessage = "<html><body><style>{$style}</style><br/>{$message}<br/><br/>{$htmlform}</body></html>";
                 } else {
                     $htmlMessage = "<html><body><br/>{$message}<br/></body></html>";
                 }
                 foreach ($action->getElementsByTagName('Destinataire') as $dest) {
                     $strDesti = $this->getValueFrom($dest->nodeValue, true);
                     mail($strDesti, $sujet, $htmlMessage, $head);
                 }
                 break;
             case 'editdoc':
                 //vidage du cache
                 //$mapoub = new clPoubelle();
                 //$mapoub ->setRepertoire (FX_URLCACHE) ;
                 //$mapoub ->purgerRepertoire(3600);
                 $i = 0;
                 if (isset($output)) {
                     unset($output);
                 }
                 foreach ($action->getElementsByTagName('Document') as $docu) {
                     //mail($dest->nodeValue,$sujet,$htmlMessage,$head);
                     if (isset($param)) {
                         unset($param);
                     }
                     if ($docu->getAttribute('nom_doc')) {
                         $param[cw] = "WHERE nom='" . utf8_decode($docu->getAttribute('nom_doc')) . "' ORDER BY VERSION DESC LIMIT 0,1";
                     }
                     if ($docu->getAttribute('id_doc')) {
                         $param[cw] = "WHERE \t\t\t\tiddocument='" . utf8_decode($docu->getAttribute('id_doc')) . "'";
                     }
                     $req = new clResultQuery();
                     $ras = $req->Execute("Fichier", "getDocuments", $param, "ResultQuery");
                     $ok = '';
                     if ($ras['INDIC_SVC'][2] >= 1) {
                         $docs = new clDocuments("impr", 'DocumentsTegeria');
                         $date = new clDate();
                         $rep = $date->getYear() . "/" . $date->getMonthNumber() . "/";
                         $output[$i] = $date->getTimestamp() . "-" . $this->ids . "-" . $ras['iddocument'][0] . ".pdf";
                         $dataa[idpatient] = $this->ids;
                         $dataa[iddocument] = $ras['iddocument'][0];
                         $dataa[nomedition] = $ras[nom][0];
                         $dataa[urledition] = $rep . $output[0];
                         $dataa[iduser] = $formxSession->getUser();
                         $dataa[date] = $date->getDatetime();
                         $sel[$i] = $dataa[iddocument];
                         $requetee = $this->getSession()->getObjRequete($dataa, BDD, DOCSEDITES);
                         $requetee->addRecord();
                         unset($dataa);
                         $rep = $date->getYear() . "/" . $date->getMonthNumber() . "/";
                         $ok = 'y';
                     } else {
                         eko($ras[INDIC_SVC]);
                         $this->addErreur("le document type " . $docu->getAttribute('nom_doc') . " n'a pas été trouvé");
                         break;
                     }
                     $i++;
                 }
                 if (!$ok) {
                     break;
                 }
                 $rep = $date->getYear() . "/" . $date->getMonthNumber() . "/";
                 $buff_pdf = $docs->genDoc($sel, $this->ids, $output, FX_URLDOCS . $rep);
                 //popup de l'ouverture du doc
                 $this->af .= "<SCRIPT LANGUAGE=\"JavaScript\">window.open('" . FX_URLCACHEWEB . $buff_pdf . "','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0');</SCRIPT>";
                 break;
             default:
                 break;
         }
     }
 }
예제 #2
0
 function imprDocuments()
 {
     global $session;
     global $options;
     // Si on se sert du module externe de documents (Brignoles)
     if ($options->getOption("documentsExterne")) {
         $this->err1 = "";
         $this->err2 = "";
         // Chargement du template ModeliXe
         $mod = new ModeliXe("Mobidoc.html");
         $mod->SetModeliXe();
         $mod->MxText("errs", $this->err1 . "<br/>" . $this->err2);
         // Récupération du code HTML généré.
         $mod->MxHidden("hidden", "navi=" . $session->genNavi($session->getNavi(0), $session->getNavi(1), $session->getNavi(2)));
         // CHB Start
         $cMobidoc = new clMobidocTU($this->patient->getID());
         $str = $cMobidoc->OpenMobidoc();
         //eko ( $str ) ;
         if (ereg('NACK-', $str)) {
             $mod->MxText("errs", "<b>L'appel à mobidoc a échoué (Erreur: COMRPC Impossible)</b>'");
         }
         // CHB Stop
         /* Ancienne version
            $str = OpenMobidoc($this->patient->getID ( ),$_SERVER["REMOTE_ADDR"],$options->getOption('CCAMExterne_MRPCPORT'),$options->getOption('CCAMExterne_MRPCTIMEOUT'));
            //$str = 'ERROR' ;
            if ( $str == 'ERROR' ) {
            	$mod -> MxText ( "errs", "<b>L'appel à mobidoc a échoué (Erreur: COMRPC Impossible)</b>'") ;
            }
            */
         return $this->af .= $mod->MxWrite("1");
     } else {
         if ($_POST['Imprimer'] or $_POST['Imprimer_x']) {
             $session->setLogSup('Impression de documents');
             $sel = $_POST['selection'];
             $docs = new clDocuments("impr");
             $date = new clDate();
             for ($i = 0; isset($sel[$i]); $i++) {
                 $param[cw] = "WHERE iddocument='" . $sel[$i] . "'";
                 $req = new clResultQuery();
                 $ras = $req->Execute("Fichier", "getDocuments", $param, "ResultQuery");
                 $rep = $date->getYear() . "/" . $date->getMonthNumber() . "/";
                 $output[$i] = $date->getTimestamp() . "-" . $this->patient->getID() . "-" . $sel[$i] . ".pdf";
                 $data['idpatient'] = $this->patient->getID();
                 $data['iddocument'] = $sel[$i];
                 $data['nomedition'] = $ras['nom'][0];
                 $data['urledition'] = $rep . $output[$i];
                 $data['iduser'] = $session->getUser();
                 $data['date'] = $date->getDatetime();
                 $requete = new clRequete(BDD, DOCSEDITES, $data);
                 $requete->addRecord();
             }
             $rep = $date->getYear() . "/" . $date->getMonthNumber() . "/";
             $docs->genDoc($sel, $this->patient->getID(), $output, URLDOCS . $rep, $rep);
         } else {
             // Chargement du template ModeliXe.
             $mod = new ModeliXe("ImprimerDocuments.mxt");
             $mod->SetModeliXe();
             $mod->MxImage("imgCloseImprimer", URLIMGFER, "Fermer");
             $mod->MxUrl("lienCloseImprimer", URLNAVI . $session->genNavi($session->getNavi(0), $session->getNavi(1), $session->getNavi(2)));
             // Récupération de la liste des catégories de documents.
             $param['cw'] = " ORDER BY categorie";
             $req = new clResultQuery();
             $res = $req->Execute("Fichier", "getCategoriesDocuments", $param, "ResultQuery");
             // Parcours des différentes catégories de documents.
             for ($i = 0; isset($res['categorie'][$i]); $i++) {
                 // Recherche des dernières versions des documents de la catégorie parcourue.
                 $param['cw'] = "WHERE categorie='" . $res['categorie'][$i] . "' AND fin_validite='0000-00-00 00:00:00' ORDER BY nom";
                 $req = new clResultQuery();
                 $ras = $req->Execute("Fichier", "getDocuments", $param, "ResultQuery");
                 // Si on a un résultat, alors on parcourt ces documents.
                 if ($ras['INDIC_SVC'][2]) {
                     // Et on affiche le titre de la catégorie.
                     $mod->MxText("categorie.titre", $res['categorie'][$i]);
                     $k = 0;
                     for ($j = 0; isset($ras['iddocument'][$j]); $j++) {
                         // Nom du document.
                         $param['cw'] = "WHERE iddocument='" . $ras['iddocument'][$j] . "' AND idpatient='" . $this->patient->getID() . "'";
                         $req = new clResultQuery();
                         $rus = $req->Execute("Fichier", "getDocumentsEdites", $param, "ResultQuery");
                         if ($rus['INDIC_SVC'][2]) {
                             $td = "<td class=\"dejaedite\" style=\"text-align: left;\">";
                         } else {
                             $td = "<td style=\"text-align: left;\">";
                         }
                         if (!($j % $options->getOption("DocumentsParLigne")) and $j != 0) {
                             $tr = "<tr>";
                             if ($k) {
                                 $tr .= "<td class=\"nostyle\"></td>";
                             }
                         } else {
                             $tr = "";
                         }
                         if (!(($j + 1) % $options->getOption("DocumentsParLigne")) or !isset($ras['iddocument'][$j + 1])) {
                             $ftr = "</tr>";
                             $k++;
                         } else {
                             $ftr = "";
                         }
                         $mod->MxText("categorie.documents.tdo", $tr . $td);
                         $mod->MxCheckerField("categorie.documents.c", "checkbox", "selection[]", $ras['iddocument'][$j]);
                         $mod->MxText("categorie.documents.doc", $ras['nom'][$j]);
                         $mod->MxText("categorie.documents.tdf", "</td>{$ftr}");
                         $mod->MxBloc("categorie.documents", "loop");
                     }
                     $mod->MxBloc("categorie", "loop");
                 }
             }
             // Variable de navigation dans le cas du lancement des éditions.
             $mod->MxHidden("hidden1", "navi=" . $session->genNavi($session->getNavi(0), $session->getNavi(1), $session->getNavi(2), "genEdition"));
             // Variable de navigation dans le cas d'une action d'annulation.
             $mod->MxHidden("hidden2", "navi=" . $session->genNavi($session->getNavi(0), $session->getNavi(1), $session->getNavi(2)));
             // Récupération du code HTML généré.
             $this->af .= $mod->MxWrite("1");
         }
     }
 }