Beispiel #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);
 }