Classe \Actionneur

L'actionneur calcule l'ordre des actions, permet de les stocker dans un fichier cache et de les effectuer.

Source

Liste des propriétés

Liste de description courtes des paquets + index 'todo' indiquant l'action

array end = array()

Liste des erreurs

array err = array()

Le verrou est posé au moment de passer à l'action.

Index 'id_auteur' : Identifiant de l'auteur ayant déclenché des actions Indix 'time' : timestamp de l'heure de déclenchement de l'action

array lock = array('id_auteur' => 0, 'time' => '')

Sa valeur sera initialisée par la configuration 'mode_log_verbeux' de SVP

boolean log = false

Lorsqu'on ajoute les actions à faire, elles sont réordonnées et classées dans ces quatre sous-tableaux

Chaque sous-tableau est composé d'une description courte du paquet auquel est ajouté dans l'index 'todo' le type d'action à faire.

Index 'off' : les paquets à désactiver (ordre inverse des dépendances) Index 'lib' : les librairies à installer Index 'on' : les paquets à activer (ordre des dépendances) Index 'neutre' : autres actions dont l'ordre a peu d'importance.

array middle = array('off' => array(), 'lib' => array(), 'on' => array(), 'neutre' => array())

Tableau identifiant du paquet => type d'action

array start = array()

Dans ce cas, on tente de le désactiver après d'autres plugins à désactiver sinon l'ensemble des actions suivantes échoueraient.

false si SVP n'est pas à désactiver, true sinon

boolean svp_off = false

Liste des méthodes

Détermine si les logs sont activés et instancie un décideur.

void __construct( )
Proposer une amélioration
void activer_plugin_dossier( string $dossier , array $i , string $constante = '_DIR_PLUGINS' )

Paramètres

  1. string $dossier

    Chemin du répertoire du plugin

  2. array $i

    Description en BDD du paquet - row SQL (tableau clé => valeur)

  3. string $constante = '_DIR_PLUGINS'

    Constante indiquant le chemin de base du plugin (_DIR_PLUGINS, _DIR_PLUGINS_SUPPL, _DIR_PLUGINS_DIST)

Retour

  • void
Proposer une amélioration

Décrémente chaque score de plugin présent dans la méta 'plugins_interessants' et signifiant que ces plugins ont été utilisés récemment.

Les plugins atteignant un score de zéro sont évacués ce la liste.

void actualiser_plugin_interessants( )
Proposer une amélioration

Ajoute l'action de télécharger une librairie, si la libraire n'est pas déjà présente et si le répertoire de librairie est écrivable.

boolean add_lib( string $nom , string $source )

Paramètres

  1. string $nom

    Nom de la librairie

  2. string $source

    URL pour obtenir la librairie

Retour

  • boolean
Proposer une amélioration
void ajouter_actions( array $todo )

Paramètres

  1. array $todo

    Tableau des actions à faire (identifiant de paquet => type d'action)

Proposer une amélioration

Initialise à 30 le score du plugin indiqué par le chemin transmis, dans la liste des plugins intéressants.

void ajouter_plugin_interessants_meta( string $dir )

Paramètres

  1. string $dir

    Chemin du répertoire du plugin

Proposer une amélioration

Ie: si A indique dépendre de B, et B de C, la clé 'dp' (dépendances prefixes). indiquera les préfixes des plugins B et C

On ne s'occupe pas des versions de compatibilité ici

array calculer_necessites_complets( array $infos )

Paramètres

  1. array $infos

    (identifiant => description courte du plugin)

Retour

  • array

    $infos

Proposer une amélioration

Avec une liste fermée connue d'avance des possibilités de plugins (ceux qui seront actionnés)

array calculer_necessites_complets_rec( $necessites , boolean $profondeur )

Paramètres

  1. $necessites
  2. boolean $profondeur

Retour

  • array

    prefixe => liste de prefixe dont il dépend

Proposer une amélioration
string choisir_teleporteur( string $teleporteur , string $defaut = 'http' )

Paramètres

  1. string $teleporteur

    Téléporteur VCS à tester

  2. string $defaut = 'http'

    Téléporteur par défaut

Retour

  • string

    Nom du téléporteur à utiliser

Proposer une amélioration

Appelle une methode do_{todo} de l'Actionneur où todo est le type d'action à faire.

Place dans la clé 'done' de description courte du paquet le résultat de l'action (un booléen indiquant si elle s'est bien déroulée).

void do_action( )
Proposer une amélioration
boolean do_get( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon

Proposer une amélioration
boolean do_getlib( array $info )

Paramètres

  1. array $info

    Description courte du paquet (une librairie ici)

Retour

  • boolean

    false si erreur, true sinon

Proposer une amélioration
boolean do_geton( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon.

Proposer une amélioration
boolean do_install( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon

Proposer une amélioration
boolean do_kill( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon

Proposer une amélioration
boolean do_off( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon

Proposer une amélioration

Soit il est là... soit il est à télécharger...

boolean do_on( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon.

Proposer une amélioration
boolean do_stop( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon

Proposer une amélioration
boolean | array do_up( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean | array

    false si erreur, description courte du nouveau plugin sinon.

Proposer une amélioration
boolean do_upon( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon

Proposer une amélioration

Ajoute une erreur à la liste des erreurs présentées au moment de traiter les actions.

void err( string $erreur )

Paramètres

  1. string $erreur

    Le texte de l'erreur

Proposer une amélioration

Si un id_auteur est transmis, teste que c'est cet auteur précis qui a posé le verrou.

boolean est_verrouille( integer | string $id_auteur = '' )

Paramètres

  1. integer | string $id_auteur = ''

    Identifiant de l'auteur, ou vide

Retour

  • boolean

    true si un verrou est là, false sinon

Voir également

Proposer une amélioration

Restaure les informations contenues dans le fichier de cache et écrites avec la méthode sauver_actions().

void get_actions( )

Voir également

Proposer une amélioration

Supprime les fichiers obsolètes (si présents)

boolean | array get_paquet_id( integer | array $id_or_row , string $dest_ancien = "" )

Paramètres

  1. integer | array $id_or_row

    Identifiant du paquet ou description ligne SQL du paquet

  2. string $dest_ancien = ""

    Chemin vers l'ancien répertoire (pour les mises à jour par VCS)

Retour

  • boolean | array

    False si erreur. Tableau de 2 index sinon :

    • dir : Chemin du paquet téléchargé depuis la racine
    • dossier : Chemin du paquet téléchargé, depuis _DIR_PLUGINS
Proposer une amélioration
boolean installer_plugin( array $info )

Paramètres

  1. array $info

    Description courte du paquet

Retour

  • boolean

    false si erreur, true sinon

Proposer une amélioration

Ajoute un log si la propriété $log l'autorise;

void log( mixed $quoi )

Paramètres

  1. mixed $quoi

    La chose à logguer (souvent un texte)

Proposer une amélioration

Remet tout à zéro pour pouvoir repartir d'un bon pied.

void nettoyer_actions( )
Proposer une amélioration

Ces actions seront traitées en dernier, et peu importe leur ordre car elles n'entrent pas en conflit avec des dépendances.

void neutre( array $info , string $action )

Paramètres

  1. array $info

    Description du paquet

  2. string $action

    Action à réaliser (kill, get, up (sur plugin inactif))

Retour

  • void
Proposer une amélioration

Ces actions seront traitées en premier.

À chaque fois qu'un nouveau paquet arrive ici, on le compare avec ceux déjà présents pour savoir si on doit le traiter avant ou après un des paquets à désactiver déjà présent.

Si le paquet est une dépendance d'un autre plugin, il faut le mettre après (pour désactiver avant celui qui en dépend).

void off( array $info , string $action )

Paramètres

  1. array $info

    Description du paquet

  2. string $action

    Action à réaliser (kill, get, up (sur plugin inactif))

Retour

  • void
Proposer une amélioration

À chaque fois qu'un nouveau paquet arrive ici, on le compare avec ceux déjà présents pour savoir si on doit le traiter avant ou après un des paquets à activer déjà présent.

Si le paquet est une dépendance d'un autre plugin, il faut le mettre avant (pour l'activer avant celui qui en dépend).

Si le paquet demande une librairie, celle-ci est ajoutée (les librairies seront téléchargées avant l'activation des plugins, le plugin aura donc sa librairie lorsqu'il sera activé)

void on( array $info , string $action )

Paramètres

  1. array $info

    Description du paquet

  2. string $action

    Action à réaliser (on, upon)

Retour

  • void
Proposer une amélioration

Dépile une des actions à faire s'il n'y en a pas en cours au moment de l'appel et traite cette action

boolean | array one_action( )

Retour

  • boolean | array

    False si aucune action à faire, sinon tableau de description courte du paquet + index 'todo' indiquant l'action

Voir également

Proposer une amélioration

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
void ordonner_actions( )
Proposer une amélioration

Si c'est un affichage du bilan de fin, et qu'il reste des actions à faire, un lien est proposé pour faire supprimer ces actions restantes et le verrou qui va avec.

string presenter_actions( boolean $fin = false )

Paramètres

  1. boolean $fin = false

    Est-ce un affichage intermédiaire (false) ou le tout dernier (true).

Retour

  • string

    Bilan des actions au format HTML

Proposer une amélioration

Crée un tableau contenant les informations principales qui permettront de retrouver ce qui est à faire comme action, ce qui a été fait, les erreurs générées, et le verrouillage.

Le cache peut être lu avec la méthode get_actions()

void sauver_actions( )

Voir également

Proposer une amélioration
boolean tester_repertoire_destination_ancien_format( string $dir_dans_auto )

Paramètres

  1. string $dir_dans_auto

    Chemin du répertoire à tester

Retour

  • boolean

    true si le répertoire est dans un ancien format

Exemples

  • $this->tester_repertoire_destination_ancien_format(_DIR_PLUGINS_AUTO . $base);
Proposer une amélioration
boolean tester_repertoire_plugins_auto( )

Retour

  • boolean

    True si on peut écrire dedans, false sinon

Proposer une amélioration
boolean tester_si_svp_desactive( )

Retour

  • boolean

    true si SVP a été désactivé, false sinon

Note

  • On ne peut tester sa désactivation que dans le hit où la désinstallation est réalisée, puisque après, s'il a été désactivé, au prochain hit on ne connaîtra plus ce fichier !
Proposer une amélioration

Un verrou permet de garentir qu'une seule exécution d'actions est lancé à la fois, ce qui évite que deux administrateurs puissent demander en même temps des actions qui pourraient s'entrechoquer.

Le verrou est signé par l'id_auteur de l'auteur actuellement identifié.

Le verrou sera sauvegardé en fichier avec la liste des actions

void verrouiller( )

Voir également

Proposer une amélioration