Example #1
0
 /**
  * Verification de l''état d'avancement.
  * @return String
  */
 protected static function CheckSyntheseAction()
 {
     $nbProcessusPreceValide = "0";
     $ProcessusEncoursVisible = array();
     $ProcessusPrecedentVisible = array();
     $ProcessusValide = array();
     $ProcessusEnLecture = array();
     $globalConfig = new GlobalConfig();
     UserModel::checkUserSessionExpired($globalConfig);
     $id_user = $globalConfig->getAuthenticatedUser()->getKeyValue();
     $idFtaRole = self::$id_fta_role;
     /**
      * Cette partie n'est plus utilisé car le but était de récupérer le rôle corespondant à l'utilisateur connecter
      * mais désormais id_fta_role est récupé dans l'URL
      */
     /*
      * $modelFta = new FtaModel(self::$id_fta);
      * $id_fta_workflow = $modelFta->getDataField(FtaModel::FIELDNAME_WORKFLOW)->getFieldValue();
      * $ftaWorkflowModel = new FtaWorkflowModel($id_fta_workflow);
      * $id_parent_intranet_actions = $ftaWorkflowModel->getDataField(FtaWorkflowModel::FIELDNAME_ID_INTRANET_ACTIONS)->getFieldValue();
      * $id_intranet_actions[] = IntranetActionsModel::getIdIntranetActionsRoleFromIdParentActionNavigation($id_parent_intranet_actions);
      * $id_actions_role = FtaActionRoleModel::getIdFtaActionRoleFromIdIntranetAtions($id_intranet_actions);
      * $ftaActionRoleModel = new FtaActionRoleModel($id_actions_role);
      */
     /*
      * Si une action est donnée, alors construction du menu des chapitres
      */
     if (self::$synthese_action) {
         /*
          * Nous récuperons les processus en cours.
          */
         $arrayAllProcessus = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT DISTINCT ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' FROM ' . FtaWorkflowStructureModel::TABLENAME . ' WHERE ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . '=' . self::$id_fta_workflow);
         /**
          * On récupère tous les processus
          */
         foreach ($arrayAllProcessus as $rowsAllProcessus) {
             $ProcessusComplet[] = $rowsAllProcessus[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS];
         }
         /*
          * Etat d'avancement de la FTA et Recherche des processus validés (et donc en lecture-seule)             * 
          */
         /*
          * Nous récuperons les processus en cours.
          */
         $req = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT DISTINCT ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' FROM ' . FtaWorkflowStructureModel::TABLENAME . ', ' . FtaProcessusCycleModel::TABLENAME . ',' . IntranetActionsModel::TABLENAME . ',' . IntranetDroitsAccesModel::TABLENAME . ',' . IntranetModulesModel::TABLENAME . ',' . FtaActionRoleModel::TABLENAME . ' WHERE ' . FtaProcessusCycleModel::TABLENAME . '.' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . '=' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' AND ' . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . '=\'' . FtaEtatModel::ETAT_ABREVIATION_VALUE_MODIFICATION . '\'' . ' AND ' . FtaProcessusCycleModel::TABLENAME . '.' . FtaProcessusCycleModel::FIELDNAME_WORKFLOW . '=' . self::$id_fta_workflow . ' AND ' . FtaProcessusCycleModel::TABLENAME . '.' . FtaProcessusCycleModel::FIELDNAME_WORKFLOW . '=' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . ' AND ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_ROLE . '=' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_FTA_ROLE . ' AND ' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_INTRANET_ACTIONS . '=' . IntranetActionsModel::TABLENAME . '.' . IntranetActionsModel::KEYNAME . ' AND ' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_FTA_ROLE . '=' . $idFtaRole . ' AND ' . IntranetActionsModel::TABLENAME . '.' . IntranetActionsModel::KEYNAME . '=' . IntranetDroitsAccesModel::TABLENAME . '.' . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . ' AND ' . IntranetDroitsAccesModel::TABLENAME . '.' . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_MODULES . '=' . IntranetModulesModel::TABLENAME . '.' . IntranetModulesModel::KEYNAME . ' AND ' . IntranetDroitsAccesModel::FIELDNAME_ID_USER . '=' . $id_user . ' AND ' . IntranetModulesModel::FIELDNAME_NOM_INTRANET_MODULES . '=\'' . FtaModel::TABLENAME . '\' AND ' . IntranetDroitsAccesModel::FIELDNAME_NIVEAU_INTRANET_DROITS_ACCES . '=' . IntranetNiveauAccesModel::NIVEAU_GENERIC_TRUE);
         /**
          * On ne récuère que les processus d'init validé
          */
         //            $arrayProcessusValide = DatabaseOperation::convertSqlStatementWithoutKeyToArray(
         //                            'SELECT DISTINCT ' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . ' as ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS
         //                            . ' FROM ' . FtaProcessusCycleModel::TABLENAME
         //                            . ' WHERE ' . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . '=\'' . FtaEtatModel::ETAT_ABREVIATION_VALUE_MODIFICATION . '\''
         //                            . ' AND ' . FtaProcessusCycleModel::FIELDNAME_WORKFLOW
         //                            . '=\'' . self::$id_fta_workflow . '\' '
         /**
          * On récuère les processus validé
          */
         $arrayProcessusValide = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT DISTINCT ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' FROM ' . FtaWorkflowStructureModel::TABLENAME . ' WHERE ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . '=\'' . self::$id_fta_workflow . '\'' . ' AND ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . '<>\'' . FtaProcessusModel::PROCESSUS_PUBLIC . '\'');
         if ($req and $arrayProcessusValide) {
             /*
              * Nous récupérons les processus précédent du processus en cours si ils sont tous validé
              */
             foreach ($req as $rows) {
                 /*
                  * Nous verifions si tous les processus précedents du chapitre que l'utilisateur à les droits d'accès
                  * sont validé ou non et donc visible ou non
                  */
                 $taux_validation_processus = FtaProcessusModel::getFtaProcessusNonValidePrecedent(self::$id_fta, $rows[FtaProcessusModel::KEYNAME], self::$id_fta_workflow);
                 //Liste des processus visible(lecture-seule)
                 if ($taux_validation_processus == 1 or $taux_validation_processus === NULL) {
                     $ProcessusPrecedentVisible[] = $rows[FtaProcessusModel::KEYNAME];
                     /*
                      * Il s'agit du controle des processus multisite,
                      * les droits d'accès à cette Fta étatn controlé précédement je désactive la focntion
                      */
                     //                        foreach ($ProcessusPrecedentVisible as $rowsProcessusVisible) {
                     //                            $multisite_fta_processus = FtaProcessusModel::CheckProcessusMultiSite($rowsProcessusVisible);
                     //
                     //                            if ($multisite_fta_processus) {
                     //                                //Oui, il s'agit d'un Processus répartie sur les sites d'assemblage
                     //                                $ProcessusPrecedentVisibleTmp[] = self::CheckMultiSite($rowsProcessusVisible);
                     //                                $ProcessusPrecedentVisible = $ProcessusPrecedentVisibleTmp;
                     //                            }
                     //                        }
                 }
             }
             //Fin du balayage
             //                if ($ProcessusPrecedentVisible) {
             /*
              * Nous récupérons tous les processus validé pour vérifier plus tard si nous devons les affichers
              */
             foreach ($arrayProcessusValide as $rowsProcessusValide) {
                 $taux_validation_processus = FtaProcessusModel::getValideProcessusEncours(self::$id_fta, $rowsProcessusValide[FtaProcessusModel::KEYNAME], self::$id_fta_workflow);
                 if ($taux_validation_processus == 1) {
                     $ProcessusValide[] = $rowsProcessusValide[FtaProcessusModel::KEYNAME];
                 }
             }
             //                }
         }
         /*
          * Nous récuperons la liste des processus non valider  qui sont en cours
          * par la vérification des droits d'accès de l'utilisateur en cours par Workflow par role 
          * et un balayage  des cycles des processus
          */
         $arrayNext = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT DISTINCT ' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT . ' FROM ' . FtaProcessusCycleModel::TABLENAME . ',' . FtaWorkflowStructureModel::TABLENAME . ',' . IntranetActionsModel::TABLENAME . ',' . IntranetDroitsAccesModel::TABLENAME . ',' . IntranetModulesModel::TABLENAME . ',' . FtaActionRoleModel::TABLENAME . ',' . FtaSuiviProjetModel::TABLENAME . ' WHERE ' . FtaProcessusCycleModel::TABLENAME . '.' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT . '=' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' AND ' . FtaProcessusCycleModel::TABLENAME . '.' . FtaProcessusCycleModel::FIELDNAME_WORKFLOW . '=' . self::$id_fta_workflow . ' AND ' . FtaProcessusCycleModel::TABLENAME . '.' . FtaProcessusCycleModel::FIELDNAME_WORKFLOW . '=' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . ' AND ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_ROLE . '=' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_FTA_ROLE . ' AND ' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_INTRANET_ACTIONS . '=' . IntranetActionsModel::TABLENAME . '.' . IntranetActionsModel::KEYNAME . ' AND ' . FtaActionRoleModel::TABLENAME . '.' . FtaActionRoleModel::FIELDNAME_ID_FTA_ROLE . '=' . $idFtaRole . ' AND ' . IntranetActionsModel::TABLENAME . '.' . IntranetActionsModel::KEYNAME . '=' . IntranetDroitsAccesModel::TABLENAME . '.' . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . ' AND ' . IntranetDroitsAccesModel::TABLENAME . '.' . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_MODULES . '=' . IntranetModulesModel::TABLENAME . '.' . IntranetModulesModel::KEYNAME . ' AND ' . IntranetDroitsAccesModel::FIELDNAME_ID_USER . '=' . $id_user . ' AND ' . IntranetModulesModel::FIELDNAME_NOM_INTRANET_MODULES . '=\'' . FtaModel::TABLENAME . '\' AND ' . IntranetDroitsAccesModel::FIELDNAME_NIVEAU_INTRANET_DROITS_ACCES . '=' . IntranetNiveauAccesModel::NIVEAU_GENERIC_TRUE . ' AND ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . '=' . FtaSuiviProjetModel::TABLENAME . '.' . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . ' AND ' . FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET . '<>' . FtaSuiviProjetModel::SIGNATURE_VALIDATION_SUIVI_PROJET_FALSE);
         if ($arrayNext) {
             foreach ($arrayNext as $rowsNext) {
                 //Pour chaque processus, on vérifie que tous ces précédents sont validés
                 $req = 'SELECT ' . FtaProcessusCycleModel::KEYNAME . ' FROM ' . FtaProcessusCycleModel::TABLENAME . ' WHERE ' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT . '=' . $rowsNext[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT] . ' AND ( ' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . '=0 ';
                 //Ajout de la restriction des processus validé
                 $req .= self::AddValidProcess($ProcessusValide);
                 //Recherche dans le cycle correspondant à l'état en cours de la fiche
                 $req_etat = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT ' . FtaEtatModel::TABLENAME . '.' . FtaEtatModel::FIELDNAME_ABREVIATION . ' FROM ' . FtaEtatModel::TABLENAME . ',' . FtaModel::TABLENAME . ' WHERE ' . FtaEtatModel::TABLENAME . '.' . FtaEtatModel::KEYNAME . '=' . FtaModel::TABLENAME . '.' . FtaModel::FIELDNAME_ID_FTA_ETAT . ' AND ' . FtaModel::TABLENAME . '.' . FtaModel::KEYNAME . '= ' . self::$id_fta);
                 foreach ($req_etat as $rowsEtat) {
                     $abreviation_fta_etat = $rowsEtat[FtaEtatModel::FIELDNAME_ABREVIATION];
                 }
                 $req .= ') AND ' . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . '=\'' . $abreviation_fta_etat . '\' AND ' . FtaProcessusCycleModel::FIELDNAME_WORKFLOW . ' = ' . self::$id_fta_workflow;
                 //Filtrage par catégorie
                 //Finalisation de la requête
                 //Si la requête a un résultat c'est que tous les processus précédents sont validés
                 /*
                  * Nous récupérons tous les processus que l'utilisateur verra en lecture(seule) 
                  * afin qu'ils puissent remplir les données des champs de leurs chapitres
                  */
                 $arrayIdFtaProcessusCyle = DatabaseOperation::convertSqlStatementWithoutKeyToArray($req);
                 if ($arrayIdFtaProcessusCyle) {
                     foreach ($arrayIdFtaProcessusCyle as $rowsIdFtaProcessusCycle) {
                         $idFtaProcessusCyle = $rowsIdFtaProcessusCycle[FtaProcessusCycleModel::KEYNAME];
                         $ftaProcessusCycleModel = new FtaProcessusCycleModel($idFtaProcessusCyle);
                         $ProcessusEnLecture[] = $ftaProcessusCycleModel->getDataField(FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT)->getFieldValue();
                     }
                 }
                 /*
                  * Nombres total de processus précedent pour le processus en cours
                  */
                 $arrayInit = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT DISTINCT ' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . ' FROM ' . FtaWorkflowStructureModel::TABLENAME . ',' . FtaProcessusModel::TABLENAME . ',' . FtaProcessusCycleModel::TABLENAME . ' WHERE ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . '=' . FtaProcessusModel::TABLENAME . '.' . FtaProcessusModel::KEYNAME . ' AND ' . FtaProcessusModel::TABLENAME . '.' . FtaProcessusModel::KEYNAME . '=' . FtaProcessusCycleModel::TABLENAME . '.' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT . ' AND ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_ROLE . '=' . FtaProcessusModel::TABLENAME . '.' . FtaProcessusModel::FIELDNAME_ID_FTA_ROLE . ' AND ' . FtaProcessusModel::TABLENAME . '.' . FtaProcessusModel::KEYNAME . '=' . $rowsNext[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT] . ' AND ' . FtaProcessusCycleModel::TABLENAME . '.' . FtaProcessusCycleModel::FIELDNAME_WORKFLOW . ' = ' . self::$id_fta_workflow);
                 if ($arrayInit) {
                     /*
                      * Vérifie si tous les processus précédent du processus en cours a des chapitres non validé
                      */
                     $nbProcessusPrece = count($arrayInit);
                     foreach ($arrayInit as $rowsInit) {
                         $tauxValidationProcessus = FtaProcessusModel::getValideProcessusEncours(self::$id_fta, $rowsInit[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT], self::$id_fta_workflow);
                         if ($tauxValidationProcessus != 0) {
                             $nbProcessusPreceValide = $nbProcessusPreceValide + 1;
                             //Enregistrement du processus en tant que processus en cours
                             if ($tauxValidationProcessus == "1" and $nbProcessusPreceValide == $nbProcessusPrece) {
                                 $ProcessusEnLecture[] = $rowsInit[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT];
                                 $ProcessusEncoursVisible[] = $rowsNext[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT];
                             }
                             //                            }
                         }
                     }
                     /*
                      * Désactivation des check de multisite voir FtaProcessusmodel::CheckMultisite
                      */
                     /*
                      //Ce processus en cours, est-il du type repartie ou centralisé ?
                      $reqType = DatabaseOperation::convertSqlQueryWithAutomaticKeyToArray(
                      'SELECT ' . FtaProcessusModel::FIELDNAME_MULTISITE_FTA_PROCESSUS
                      . ' FROM ' . FtaProcessusModel::TABLENAME
                      . ' WHERE ' . FtaProcessusModel::KEYNAME
                      . '=' . $rows[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT]
                      );
                      if ($reqType) {
                      foreach ($reqType as $rowsType) {
                      $multisite_fta_processus = $rowsType[FtaProcessusModel::FIELDNAME_MULTISITE_FTA_PROCESSUS];
                      }
                      if ($multisite_fta_processus) {
                      //Oui, il s'agit d'un Processus répartie sur les sites d'assemblage
                      $ProcessusEncoursVisible[] = self::CheckMultiSite($rows[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT]);
                      } else {
                     */
                     //                        }
                 }
             }
             //Fin du balayage des processus non-validés
         }
         //Recherche des processus valide ayant un lien dans processus cycle
         foreach ($ProcessusValide as $rowsProcessusValide2) {
             //Pour chaque processus, on vérifie que tous ces précédents sont validés
             $req = 'SELECT ' . FtaProcessusCycleModel::KEYNAME . ' FROM ' . FtaProcessusCycleModel::TABLENAME . ' WHERE ' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT . '=' . $rowsProcessusValide2 . ' AND ( ' . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . '=0 ';
             //Ajout de la restriction des processus validé
             $req .= self::AddValidProcess($ProcessusValide);
             //Recherche dans le cycle correspondant à l'état en cours de la fiche
             $req_etat = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT ' . FtaEtatModel::TABLENAME . '.' . FtaEtatModel::FIELDNAME_ABREVIATION . ' FROM ' . FtaEtatModel::TABLENAME . ',' . FtaModel::TABLENAME . ' WHERE ' . FtaEtatModel::TABLENAME . '.' . FtaEtatModel::KEYNAME . '=' . FtaModel::TABLENAME . '.' . FtaModel::FIELDNAME_ID_FTA_ETAT . ' AND ' . FtaModel::TABLENAME . '.' . FtaModel::KEYNAME . '= ' . self::$id_fta);
             foreach ($req_etat as $rowsEtat) {
                 $abreviation_fta_etat = $rowsEtat[FtaEtatModel::FIELDNAME_ABREVIATION];
             }
             $req .= ') AND ' . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . '=\'' . $abreviation_fta_etat . '\' AND ' . FtaProcessusCycleModel::FIELDNAME_WORKFLOW . ' = ' . self::$id_fta_workflow;
             //Filtrage par catégorie
             //Finalisation de la requête
             //Si la requête a un résultat c'est que tous les processus précédents sont validés
             /*
              * Nous récupérons tous les processus que l'utilisateur verra en lecture(seule) 
              * afin qu'ils puissent remplir les données des champs de leurs chapitres
              */
             $arrayIdFtaProcessusCyle = DatabaseOperation::convertSqlStatementWithoutKeyToArray($req);
             if ($arrayIdFtaProcessusCyle) {
                 foreach ($arrayIdFtaProcessusCyle as $rowsIdFtaProcessusCycle) {
                     $idFtaProcessusCyle = $rowsIdFtaProcessusCycle[FtaProcessusCycleModel::KEYNAME];
                     $ftaProcessusCycleModel = new FtaProcessusCycleModel($idFtaProcessusCyle);
                     $ProcessusEnLecture[] = $ftaProcessusCycleModel->getDataField(FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT)->getFieldValue();
                 }
             }
         }
         if (self::$id_fta_etat == '1') {
             //Création de la liste des processus dans la barre de navigation
             $t_liste_processus = array_merge($ProcessusEncoursVisible, $ProcessusPrecedentVisible, $ProcessusEnLecture, $ProcessusValide);
         } else {
             $arrayProcessusByWorkflow = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT DISTINCT ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ' FROM ' . FtaWorkflowStructureModel::TABLENAME . ' WHERE ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . '=' . self::$id_fta_workflow);
             foreach ($arrayProcessusByWorkflow as $rowsProcessusByWorkflow) {
                 $t_liste_processus[] .= $rowsProcessusByWorkflow[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS];
             }
         }
         self::$id_fta_processus = $t_liste_processus;
         //Récupération des Chapitres accessible dans le menu de naviguation
         $menu_navigation = self::RecupChapitre($ProcessusComplet);
         //Fin du controle de $synthese_action
     }
     return $menu_navigation;
 }
 /**
  * 
  * @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();
     }
 }
 /**
  * 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();
 }
 /**
  * Donne accès aux bouton de transition 
  * pour les utilisateur se trouvant en fin de parcours de l'espace de travail
  * @param int $paramIdFtaRole
  * @param int $paramIdFtaWorkflow
  * @return boolean
  */
 public static function isAccesTransitionButton($paramIdFtaRole, $paramIdFtaWorkflow)
 {
     $isAccesTransition = FALSE;
     /**
      * Liste des processus pouvant être validé
      */
     $arrayProcessusValidation = FtaProcessusCycleModel::getArrayProcessusValidationFTA($paramIdFtaWorkflow);
     /**
      * Listes des processus auxquel l'utilisateur connecté à les droits d'accès
      */
     $arrayProcessusAcces = FtaWorkflowStructureModel::getArrayProcessusByRoleAndWorkflow($paramIdFtaRole, $paramIdFtaWorkflow);
     $accesTransitionButton = array_intersect($arrayProcessusValidation, $arrayProcessusAcces);
     if ($accesTransitionButton) {
         $isAccesTransition = TRUE;
     }
     return $isAccesTransition;
 }