Exemple #1
0
 /**
  * Ordonne les actions demandées
  *
  * La fonction définie quelles sont les actions graduellement réalisables.
  * Si un plugin A dépend de B qui dépend de C
  * - pour tout ce qui est à installer : ordre des dependances (d'abord C, puis B, puis A)
  * - pour tout ce qui est à désinstaller : ordre inverse des dependances. (d'abord A, puis B, puis C)
  *
  * On commence donc par séparer
  * - ce qui est à désinstaller,
  * - ce qui est à installer,
  * - les actions neutres (get, up sur non actif, kill)
  *
  * Dans les traitements, on commencera par faire
  * - ce qui est à désinstaller (il est possible que certains plugins
  * nécessitent la désinstallation d'autres présents - tel que : 1 seul
  * service d'envoi de mail)
  * - puis ce qui est a installer (à commencer par les librairies, puis paquets),
  * - puis les actions neutres
  */
 function ordonner_actions()
 {
     // nettoyer le terrain
     $this->clear();
     foreach ($this->start as $id => $action) {
         $i = $this->decideur->infos_courtes_id($id);
         $i = $i['i'][$id];
         switch ($action) {
             case 'getlib':
                 // le plugin en ayant besoin le fera
                 // comme un grand...
                 break;
             case 'geton':
             case 'on':
                 $this->on($i, $action);
                 break;
             case 'up':
                 // si le plugin est actif
                 if ($i['a'] == 'oui') {
                     $this->on($i, $action);
                 } else {
                     $this->neutre($i, $action);
                 }
                 break;
             case 'upon':
                 $this->on($i, $action);
                 break;
             case 'off':
             case 'stop':
                 $this->off($i, $action);
                 break;
             case 'get':
             case 'kill':
                 $this->neutre($i, $action);
                 break;
         }
     }
     // c'est termine, on passe tout dans la fin...
     foreach ($this->middle as $acts) {
         $this->end = array_merge($this->end, $acts);
     }
     // si on a vu une desactivation de SVP
     // on le met comme derniere action...
     // sinon on ne pourrait pas faire les suivantes !
     if ($this->svp_off) {
         $this->log("SVP a desactiver a la fin.");
         foreach ($this->end as $c => $info) {
             if ($info['p'] == 'SVP') {
                 unset($this->end[$c]);
                 $this->end[] = $info;
                 break;
             }
         }
     }
     $this->log("------------");
     #$this->log("Fin du tri :");
     #$this->log($this->end);
 }
 /**
  * Ordonne les actions demandées
  *
  * La fonction définie quelles sont les actions graduellement réalisables.
  * Si un plugin A dépend de B qui dépend de C
  * - pour tout ce qui est à installer : ordre des dependances (d'abord C, puis B, puis A)
  * - pour tout ce qui est à désinstaller : ordre inverse des dependances. (d'abord A, puis B, puis C)
  *
  * On commence donc par séparer
  * - ce qui est à désinstaller,
  * - ce qui est à installer,
  * - les actions neutres (get, up sur non actif, kill)
  *
  * Dans les traitements, on commencera par faire
  * - ce qui est à désinstaller (il est possible que certains plugins
  * nécessitent la désinstallation d'autres présents - tel que : 1 seul
  * service d'envoi de mail)
  * - puis ce qui est a installer (à commencer par les librairies, puis paquets),
  * - puis les actions neutres
  */
 public function ordonner_actions()
 {
     $this->log("Ordonner les actions à réaliser");
     // nettoyer le terrain
     $this->clear();
     // récupérer les descriptions de chaque paquet
     $this->log("> Récupérer les descriptions des paquets concernés");
     $infos = array();
     foreach ($this->start as $id => $action) {
         // seulement les identifiants de paquets (pas les librairies)
         if (is_int($id)) {
             $info = $this->decideur->infos_courtes_id($id);
             $infos[$id] = $info['i'][$id];
         }
     }
     // Calculer les dépendances (nécessite) profondes pour chaque paquet,
     // si les plugins en questions sont parmis ceux actionnés
     // (ie A dépend de B qui dépend de C => a dépend de B et C).
     $infos = $this->calculer_necessites_complets($infos);
     foreach ($this->start as $id => $action) {
         // infos du paquet. Ne s'applique pas sur librairie ($id = md5)
         $i = is_int($id) ? $infos[$id] : array();
         switch ($action) {
             case 'getlib':
                 // le plugin en ayant besoin le fera
                 // comme un grand...
                 break;
             case 'geton':
             case 'on':
                 $this->on($i, $action);
                 break;
             case 'up':
                 // si le plugin est actif
                 if ($i['a'] == 'oui') {
                     $this->on($i, $action);
                 } else {
                     $this->neutre($i, $action);
                 }
                 break;
             case 'upon':
                 $this->on($i, $action);
                 break;
             case 'off':
             case 'stop':
                 $this->off($i, $action);
                 break;
             case 'get':
             case 'kill':
                 $this->neutre($i, $action);
                 break;
         }
     }
     // c'est termine, on passe tout dans la fin...
     foreach ($this->middle as $acts) {
         $this->end = array_merge($this->end, $acts);
     }
     // si on a vu une desactivation de SVP
     // on le met comme derniere action...
     // sinon on ne pourrait pas faire les suivantes !
     if ($this->svp_off) {
         $this->log("SVP a desactiver a la fin.");
         foreach ($this->end as $c => $info) {
             if ($info['p'] == 'SVP') {
                 unset($this->end[$c]);
                 $this->end[] = $info;
                 break;
             }
         }
     }
     $this->log("------------");
     #$this->log("Fin du tri :");
     #$this->log($this->end);
 }
/**
 * Gère la partie vérifier des formulaires utilisant le Décideur
 *
 * @param array $a_actionner
 *     Tableau des actions par paquet (id_paquet => action)
 * @param array $erreurs
 *     Tableau d'erreurs de verifier (CVT)
 * @return bool
 *     true si tout va bien, false sinon (erreur pour trouver les dépendances, ...)
 **/
function svp_decider_verifier_actions_demandees($a_actionner, &$erreurs)
{
    $decideur = new Decideur();
    $decideur->erreur_sur_maj_introuvable = false;
    $decideur->verifier_dependances($a_actionner);
    if (!$decideur->ok) {
        $erreurs['decideur_erreurs'] = array();
        foreach ($decideur->err as $id => $errs) {
            foreach ($errs as $err) {
                $erreurs['decideur_erreurs'][] = $err;
            }
        }
        return false;
    }
    // On construit la liste des libellés d'actions
    $actions = array();
    $actions['decideur_propositions'] = $decideur->presenter_actions('changes');
    $actions['decideur_demandes'] = $decideur->presenter_actions('ask');
    $actions['decideur_actions'] = $decideur->presenter_actions('todo');
    set_request('_libelles_actions', $actions);
    // On construit la liste des actions pour la passer au formulaire en hidden
    $todo = array();
    foreach ($decideur->todo as $_todo) {
        $todo[$_todo['i']] = $_todo['todo'];
    }
    set_request('_todo', serialize($todo));
    return true;
}