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; } } }
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"); } } }