/**
  * Devalidation d'un chapitre
  * @param type $paramIdFta
  * @param type $paramIdProcessus
  * @param type $htmlResult
  * @return type
  */
 public static function buildDevalidationChapitre($paramIdFta, $paramIdProcessus, $htmlResult)
 {
     //Déclarion des variables
     $modelFta = new FtaModel($paramIdFta);
     $id_fta_workflow = $modelFta->getDataField(FtaModel::FIELDNAME_WORKFLOW)->getFieldValue();
     $return[UserModel::FIELDNAME_MAIL];
     //Tableau contenant les adresses email des utilisateurs concerné par la dévalidation.
     $return['processus'];
     //Tableau contenant la liste des identifiants des processus dévalidés
     //Récupération des données
     $arrayFtaEtatAndFta = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT ' . FtaEtatModel::FIELDNAME_ABREVIATION . ' FROM ' . FtaModel::TABLENAME . ',' . FtaEtatModel::TABLENAME . ' WHERE ' . FtaModel::KEYNAME . '=' . $paramIdFta . ' AND ' . FtaEtatModel::TABLENAME . '.' . FtaEtatModel::KEYNAME . '=' . FtaModel::TABLENAME . '.' . FtaModel::FIELDNAME_ID_FTA_ETAT);
     foreach ($arrayFtaEtatAndFta as $rowsFtaEtatAndFta) {
         $abreviation_fta_etat = $rowsFtaEtatAndFta[FtaEtatModel::FIELDNAME_ABREVIATION];
     }
     //Dénotification des chapitres en cours
     $reqDenotification = 'UPDATE ' . FtaWorkflowStructureModel::TABLENAME . ',' . FtaSuiviProjetModel::TABLENAME . ' SET ' . FtaSuiviProjetModel::FIELDNAME_NOTIFICATION_FTA_SUIVI_PROJET . '=0 ' . ' WHERE ( ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . '=' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . ' ) ' . ' AND ( ( ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' = \'' . $paramIdProcessus . '\' ' . ' AND ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . '=' . $id_fta_workflow . ' AND ' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA . ' = \'' . $paramIdFta . '\' ) )';
     DatabaseOperation::execute($reqDenotification);
     //Recherches des processus suivants
     $arrayProcessusCycle = FtaProcessusCycleModel::getArrayProccusNextValidateFromIdFta($paramIdFta, $id_fta_workflow, $abreviation_fta_etat, $paramIdProcessus);
     //Enregistrement du processus
     $htmlResult->setProcessus($paramIdProcessus);
     if ($htmlResult->getHtmlResult() == NULL) {
         $array = array('processus' => $htmlResult->getProcessus());
         $htmlResult->setHtmlResult($array);
     } else {
         $array = $htmlResult->getHtmlResult();
         $arrayTmp = array('processus' => $htmlResult->getProcessus());
         $array3 = array_merge_recursive($arrayTmp, $array);
         $htmlResult->setHtmlResult($array3);
     }
     //Parcour des processus suivants
     if ($arrayProcessusCycle != NULL) {
         foreach ($arrayProcessusCycle as $rowsProcessusCycle) {
             //Recherche et Dévalidation des chapitres dans le suivi de projet
             $paramIdProcessus = $rowsProcessusCycle[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT];
             $multisite_fta_processus = $rowsProcessusCycle[FtaProcessusModel::FIELDNAME_MULTISITE_FTA_PROCESSUS];
             $reqDevalidation = 'UPDATE ' . FtaWorkflowStructureModel::TABLENAME . ',' . FtaSuiviProjetModel::TABLENAME . ' SET ' . FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET . '=0 ' . ' WHERE ( ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . '=' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . ' ) ' . ' AND ( ( ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' = \'' . $paramIdProcessus . '\' ' . ' AND ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . '=' . $id_fta_workflow . ' AND ' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA . ' = \'' . $paramIdFta . '\' ) )';
             DatabaseOperation::execute($reqDevalidation);
             if ($reqDevalidation) {
                 //Si le processus a été dévalidé, alors on informe
                 //Dénotification
                 $reqDenotification = 'UPDATE ' . FtaWorkflowStructureModel::TABLENAME . ',' . FtaSuiviProjetModel::TABLENAME . ' SET ' . FtaSuiviProjetModel::FIELDNAME_NOTIFICATION_FTA_SUIVI_PROJET . '=0 ' . ' WHERE ( ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . '=' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . ' ) ' . ' AND ( ( ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' = \'' . $paramIdProcessus . '\' ' . ' AND ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . '=' . $id_fta_workflow . ' AND ' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA . ' = \'' . $paramIdFta . '\' ) )';
                 DatabaseOperation::execute($reqDenotification);
                 /**
                  * Récuparation des adresses emails
                  */
                 $req = 'SELECT  ' . UserModel::FIELDNAME_MAIL . ' FROM ' . IntranetActionsModel::TABLENAME . ',' . IntranetDroitsAccesModel::TABLENAME . ',' . UserModel::TABLENAME . ',' . FtaWorkflowStructureModel::TABLENAME . ',' . FtaSuiviProjetModel::TABLENAME . ',' . FtaActionRoleModel::TABLENAME . ' WHERE ( ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_ROLE . '=' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_FTA_ROLE . ' AND ' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_FTA_WORKFLOW . '=' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . ' AND ' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_INTRANET_ACTIONS . '=' . IntranetActionsModel::TABLENAME . '.' . IntranetActionsModel::KEYNAME . ' AND ' . IntranetActionsModel::TABLENAME . '.' . IntranetActionsModel::KEYNAME . '=' . IntranetDroitsAccesModel::TABLENAME . '.' . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . ' AND ' . UserModel::TABLENAME . '.' . UserModel::KEYNAME . '=' . IntranetDroitsAccesModel::TABLENAME . '.' . IntranetDroitsAccesModel::FIELDNAME_ID_USER . ' AND ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . '= \'' . $paramIdProcessus . '\' ' . ' AND ' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . '=' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . ') ' . ' AND ' . IntranetDroitsAccesModel::TABLENAME . '.' . IntranetDroitsAccesModel::FIELDNAME_NIVEAU_INTRANET_DROITS_ACCES . ' = ' . IntranetNiveauAccesModel::NIVEAU_GENERIC_TRUE . ' AND ' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA . ' = \'' . $paramIdFta . '\'  ' . ' AND ' . UserModel::TABLENAME . '.' . UserModel::FIELDNAME_ACTIF . ' = \'' . UserModel::USER_ACTIF . '\'  ' . ' GROUP BY ' . UserModel::TABLENAME . '.' . UserModel::FIELDNAME_MAIL;
                 /**
                  * Enregistrement de la liste des utilisateur à informer
                  */
                 $arrayMail = DatabaseOperation::convertSqlStatementWithoutKeyToArray($req);
                 if ($arrayMail) {
                     foreach ($arrayMail as $rowsMail) {
                         if ($rowsMail[UserModel::FIELDNAME_MAIL]) {
                             $return[UserModel::FIELDNAME_MAIL][] = $rowsMail[UserModel::FIELDNAME_MAIL];
                         }
                     }
                     $htmlResult->setMail($return[UserModel::FIELDNAME_MAIL]);
                     $array = $htmlResult->getHtmlResult();
                     $arrayTmp[UserModel::FIELDNAME_MAIL] = $htmlResult->getMail();
                     $array3 = array_merge_recursive($arrayTmp, $array);
                     $htmlResult->setHtmlResult($array3);
                 }
             }
             //Fin de l'information de la dévalidation
             //Mise à jour de la validation de l'échéance du processus
             BuildFtaProcessusValidationDelai($paramIdFta, $paramIdProcessus);
             //Appel récursif de la fonction pour continuer à dévalider les processus suivants
             FtaChapitreModel::buildDevalidationChapitre($paramIdFta, $paramIdProcessus, $htmlResult);
         }
     }
     //Retour de la fonction
     return $htmlResult->getHtmlResult();
 }
 /**
  * 
  * @param int $paramIdFta
  * @param int $paramIdProcessus
  * @param int $paramIdFtaWorkflow
  * @param string $paramAbreviation_fta_etat
  * @param HtmlResult2 $htmlResult
  * @param array $idFtaProcessusEffectue
  * @param string $paramFirstPass
  * @return array
  */
 public static function getProcessusNextFromIdFtaChapitres($paramIdFta, $paramIdProcessus, $paramIdFtaWorkflow, $paramAbreviation_fta_etat, HtmlResult2 $htmlResult, $idFtaProcessusEffectue, $paramFirstPass = NULL)
 {
     /**
      * On vérifie si le processus à deja été utilisé.
      */
     $cheackIdFtaProcessus = in_array($paramIdProcessus, $idFtaProcessusEffectue);
     if (!$cheackIdFtaProcessus) {
         $idFtaProcessusEffectue[] = $paramIdProcessus;
         //Recherches des processus suivants
         $arrayProcessusCycle = FtaProcessusCycleModel::getArrayProccusNextValidateFromIdFta($paramIdFta, $paramIdFtaWorkflow, $paramAbreviation_fta_etat, $paramIdProcessus);
         //Enregistrement du processus
         if ($paramFirstPass) {
             $htmlResult->setProcessus($paramIdProcessus);
         }
         if ($htmlResult->getHtmlResult() == NULL) {
             $array = array('processus' => $htmlResult->getProcessus());
             $htmlResult->setHtmlResult($array);
         } else {
             $array = $htmlResult->getHtmlResult();
             $arrayTmp = array('processus' => $htmlResult->getProcessus());
             $array3 = array_merge_recursive($arrayTmp, $array);
             $htmlResult->setHtmlResult($array3);
         }
         if ($arrayProcessusCycle != NULL) {
             foreach ($arrayProcessusCycle as $rowsProcessusCycle) {
                 $paramIdProcessus = $rowsProcessusCycle[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT];
                 $paramFirstPass = "******";
                 //Appel récursif de la fonction pour continuer à dévalider les processus suivants
                 FtaProcessusModel::getProcessusNextFromIdFtaChapitres($paramIdFta, $paramIdProcessus, $paramIdFtaWorkflow, $paramAbreviation_fta_etat, $htmlResult, $idFtaProcessusEffectue, $paramFirstPass);
             }
         }
         //Retour de la fonction
         return $htmlResult->getHtmlResult();
     }
 }