Classe \Decideur

Le décideur calcule les actions qui doivent être faites en fonction de ce qui est demandé et des différentes dépendances des plugins.

Source

Liste des propriétés

Tableau ('identifiant' => tableau de description)

array ask = array()

C'est à dire les actions à faire en plus de celles demandées.

Tableau ('identifiant' => tableau de description)

array changes = array()

Index 'i' : plugins triés par identifiant en base [i][32] = tableau de description Index 'p' : plugins triés par prefixe de plugin [p][MOTS] = tableau de description

array end = array('i' => array(), 'p' => array())

Tableau ('identifiant' => liste des erreurs)

array err = array()

..)

Tableau ('PREFIXE' => tableau de description)

array invalides = array()

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

boolean log = false

Tableau ('PREFIXE' => tableau de description)

array off = array()

Le résultat true permettra d'effectuer toutes les actions. Passe à false dès qu'une erreur est présente !

boolean ok = true

Tableau ('PREFIXE' => numéro de version)

array procure = array()

Index 'i' : plugins triés par identifiant en base [i][32] = tableau de description Index 'p' : plugins triés par prefixe de plugin [p][MOTS] = tableau de description

array start = array('i' => array(), 'p' => array())

Tableau ('identifiant' => tableau de description)

array todo = array()

Liste des méthodes

Initialise la propriété $log en fonction de la configuration

void __construct( )
Proposer une amélioration

Chaque action est analysée et elles sont redispatchées dans différents tableaux via les méthodes :

  • ask : ce qui est demandé (ils y vont tous)
  • todo : ce qui est à faire (ils y vont tous aussi)
  • add : les plugins activés,
  • off : les plugins désactivés

La fonction peut lever des erreurs sur les actions tel que :

  • Paquet demandé inconnu
  • Mise à jour introuvable
  • Paquet à désactiver mais qui n'est pas actif
boolean actionner( array $todo = null )

Paramètres

  1. array $todo = null

    Ce qui est demandé de faire Tableau identifiant du paquet => type d'action (on, off, up...)

Retour

  • boolean

    False en cas d'erreur, true sinon

Proposer une amélioration
void add( array $info )

Paramètres

  1. array $info

    Description du paquet

Proposer une amélioration

Par exemple, une mise à 'off' de paquet entraîne d'autres mises à 'off' des paquets qui en dépendent. Si une action sur un des paquets dépendants était aussi demandée, il faut annuler l'action automatique.

void annule_change( array $info )

Paramètres

  1. array $info

    Description du paquet concerné

Proposer une amélioration

L'ajoute aussi à la liste de toutes les actions !

void ask( array $info , string $quoi )

Paramètres

  1. array $info

    Description du paquet concerné

  2. string $quoi

    Type d'action (on, off, kill, upon...)

Proposer une amélioration

L'ajoute aussi à la liste de toutes les actions !

void change( array $info , string $quoi )

Paramètres

  1. array $info

    Description du paquet concerné

  2. string $quoi

    Type d'action (on, off, kill, upon...)

Proposer une amélioration
boolean | array chercher_plugin_compatible( string $prefixe , string $version )

Paramètres

  1. string $prefixe

    Préfixe du plugin

  2. string $version

    Compatibilité à comparer, exemple '[1.0;]'

Retour

  • boolean | array

    false si pas de plugin plus récent trouvé tableau de description du paquet le plus récent sinon

Proposer une amélioration
boolean | array chercher_plugin_recent( string $prefixe , string $version )

Paramètres

  1. string $prefixe

    Préfixe du plugin

  2. string $version

    Compatibilité à comparer, exemple '[1.0;]'

Retour

  • boolean | array

    false si pas de plugin plus récent trouvé tableau de description du paquet le plus récent sinon

Proposer une amélioration
boolean | array en_erreur( integer $id )

Paramètres

  1. integer $id

    Identifiant de paquet

Retour

  • boolean | array

    false si pas d'erreur, tableau des erreurs sinon.

Proposer une amélioration

Passe le flag OK à false : on ne pourra pas faire les actions demandées.

void erreur( integer $id , string $texte = '' )

Paramètres

  1. integer $id

    Identifiant de paquet

  2. string $texte = ''

    Texte de l'erreur

Proposer une amélioration

Les plugins en attente ont un statut spécial : à la fois dans la liste des plugins actifs, mais désactivés. Un plugin passe 'en attente' lorsqu'il est actif mais perd accidentellement une dépendance, par exemple si une dépendance est supprimée par FTP. Dès que sa dépendance revient, le plugin se réactive.

L'interface de gestion des plugins de SVP, elle, permet pour ces plugins de les désactiver ou réactiver (retéléchargeant alors la dépendance si possible).

boolean est_attente_id( integer $id )

Paramètres

  1. integer $id

    Identifiant du plugin

Retour

  • boolean

    Le plugin est-il en attente ?

Proposer une amélioration
boolean est_presente_lib( string $lib )

Paramètres

  1. string $lib

    Nom de la librairie

Retour

  • boolean

    La librairie est-elle présente ?

Proposer une amélioration

Crée un tableau de description pour chaque paquet dans une écriture courte comme index ('i' pour identifiant) tel que :

  • i = identifiant
  • p = prefixe (en majuscule)
  • n = nom du plugin
  • v = version
  • e = etat
  • a = actif
  • du = dépendances utilise
  • dn = dépendances nécessite
  • dl = dépendances librairie
  • procure = prefixes procurés
  • maj = mise à jour

On passe un where ($condition) et on crée deux tableaux, l'un des paquets triés par identifiant, l'autre par prefixe.

array infos_courtes( array | string $condition , boolean $multiple = false )

Paramètres

  1. array | string $condition

    Condition where

  2. boolean $multiple = false

    Si multiple, le tableau par préfixe est un sous-tableau (il peut alors y avoir plusieurs paquets pour un même prefixe, classés par états décroissants)

Retour

  • array

    Index 'i' : plugins triés par identifiant en base [i][32] = tableau de description Index 'p' : plugins triés par prefixe de plugin [p][MOTS] = tableau de description ou, avec $multiple=true : [p][MOTS][] = tableau de description

Proposer une amélioration
array infos_courtes_id( integer $id )

Paramètres

  1. integer $id

    Identifiant du paquet

Retour

  • array

    Index 'i' : plugins triés par identifiant en base [i][32] = tableau de description Index 'p' : plugins triés par prefixe de plugin [p][MOTS] = tableau de description

Note

  • Attention, retourne un tableau complexe. La description sera dans : ['i'][$id]
Proposer une amélioration

..)

void invalider( array $info )

Paramètres

  1. array $info

    Description du paquet concerné

Proposer une amélioration
void liste_plugins_actifs( )

Var

  • Index 'i' : plugins triés par identifiant en base [i][32] = tableau de description Index 'p' : plugins triés par prefixe de plugin [p][MOTS] = tableau de description
Proposer une amélioration

Calcule la liste des plugins que le core de SPIP déclare procurer.

array liste_plugins_procure( )

Retour

  • array

    Tableau ('PREFIXE' => version)

Proposer une amélioration

Écrit 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
void off( array $info , boolean $recur = false )

Paramètres

  1. array $info

    Description du paquet

  2. boolean $recur = false

    Passer à off les plugins qui en dépendent, de façon récursive ?

Proposer une amélioration
array presenter_actions( string $quoi )

Paramètres

  1. string $quoi

    Type de demande

    • ask : les actions demandées
    • changes : les actions en plus par rapport à ce qui était demandé
    • todo : toutes les actions

Retour

  • array

    Liste des actions (joliement traduites et expliquées)

Proposer une amélioration
void presenter_erreur_dependance( $info , $dependance , $intervalle )

Paramètres

  1. $info
  2. $dependance
  3. $intervalle
Proposer une amélioration
void remove( array $info )

Paramètres

  1. array $info

    Description du paquet concerné

Proposer une amélioration
boolean sera_actif( string $prefixe )

Paramètres

  1. string $prefixe

    Préfixe du paquet

Retour

  • boolean

    Le paquet sera t'il actif ?

Proposer une amélioration
boolean sera_actif_id( integer $id )

Paramètres

  1. integer $id

    Identifiant du paquet

Retour

  • boolean

    Le paquet sera t'il actif ?

Proposer une amélioration
boolean sera_invalide( string $p )

Paramètres

  1. string $p

    Prefixe du paquet

Retour

  • boolean

    Le paquet est t'il invalide ?

Proposer une amélioration
boolean sera_off( string $prefixe )

Paramètres

  1. string $prefixe

    Prefixe du paquet

Retour

  • boolean

    Le paquet sera t'il off ?

Proposer une amélioration
boolean sera_off_id( integer $id )

Paramètres

  1. integer $id

    Identifiant du paquet

Retour

  • boolean

    Le paquet sera t'il off ?

Proposer une amélioration

Les propriété $start et $end reçoivent la liste des plugins actifs $procure celle des plugins procurés par le Core

void start( )
Proposer une amélioration
void todo( array $info , string $quoi )

Paramètres

  1. array $info

    Description du paquet concerné

  2. string $quoi

    Type d'action (on, off, kill, upon...)

Proposer une amélioration

Pour chaque plugin qui sera actif, vérifie qu'il respecte ses dépendances.

Si ce n'est pas le cas, le plugin n'est pas activé et le calcul de dépendances se refait sans lui. À un moment on a normalement rapidement une liste de plugins cohérents (au pire on ne boucle que 100 fois maximum - ce qui ne devrait jamais se produire).

Des erreurs sont levées lorsqu'un plugin ne peut honorer son activation à cause d'un problème de dépendance. On peut les récupérer dans la propriété $err.

boolean verifier_dependances( array $todo = null )

Paramètres

  1. array $todo = null

    Ce qui est demandé de faire Tableau identifiant du paquet => type d'action (on, off, up...)

Retour

  • boolean

    False en cas d'erreur, true sinon

API

Proposer une amélioration

Teste la version de SPIP, les librairies nécessitées, ses dépendances (et tente de les trouver et ajouter si elles ne sont pas là)

Lorsqu'une dépendance est activée, on entre en récursion dans cette fonction avec la description de la dépendance

boolean verifier_dependances_plugin( array $info , integer $prof )

Paramètres

  1. array $info

    Description du paquet

  2. integer $prof

    Profondeur de récursion

Retour

  • boolean

    false si erreur (dépendance non résolue, incompatibilité...), true sinon

Proposer une amélioration