コード例 #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;
         }
     }
 }