/** * 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; }