traitements_bureau

/**
 * plugin_transactions_bureau_traitements_bureau()
 * 
 * Ce plugin va appliquer une série de plugins sur le bureau
 * Ces plugins vont généralement modifier le bureau (mais pas obligatoirement)
 * 
 * Certains plugins sont susceptibles de retourner une close [break], auquel cas les traitements sont interrompus
 * Le plugin retournera alors lui-même une close [break-1], ce qui fait que plusieurs plugins traitements_bureau peuvent être
 * inclus les uns dans les autres
 * 
 * Signature des plugins du traitement :
 * ([bureau], [break])=plugin([bureau])
 * 
 * @param [bureau] => le bureau
 * @param [traitements][0,1,2...] => liste des traitements à effectuer sur le bureau
 * @param ------ [nom_plugin | parametres...]
 * 
 * @return [bureau] => le bureau modifié
 * @return [break] => une close break
 */

extract_2_bureau

/**
 * plugin_transactions_bureau_extract_2_bureau()
 * 
 * Ce plugin enrichit une variable passée en paramètre (une array appelée $bureau)
 * avec des variables, soit constantes (string, array, json)
 * soit extraites d'un plugin
 * soit extraites d'un autre emplacement du bureau (on copie une variable du bureau vers lui-même mais ailleurs)
 * 
 * Si [plugin_extraction] est défini, on récupérera les données d'un plugin (sinon, on copie des valeurs constantes)
 * 
 * Pour chaque extraction, on doit spécifier [destination] qui est l'endroit du BUREAU où copier les données
 * On peut copier 5 types de données :
 * > Une constante : [valeur]=xxx
 * > Une array (vide) : [type_data]=array
 * > Une array complexe via json : [type_data]=json et [valeur]="la chaine json à évaluer"
 * > Un élément retourné par le plugin : [origine] = data_plugin/xx/yy/zz (data_plugin correspond à $tmp[resultat])
 * > Un élément déjà présent sur le bureau : [origine] = bureau/xx/yy/zz
 * 
 * @param mixed $parametres
 * @param [bureau] => le bureau à enrichir
 * @param [plugin_extraction] => (optionnel) : s'il faut enrichir le bureau avec des variables extraites d'un plugin
 * @param [extractions][0,1,2...]
 * @param -------[destination] => emplacement dans le bureau où copier la valeur
 * @param -------[type_data] => type de valeur à copier. array|json (cf explication plus haut)
 * @param -------[valeur] => valeur à copier ou chaine json
 * @param -------[origine] => emplacement de la valeur à copier (si extraite du plugin ou du bureau)
 * 
 * @return [bureau] => le bureau avec les valeurs extraites
 */

eval_bureau

/**
 * plugin_transactions_bureau_eval_bureau()
 * 
 * Ce plugin utilise le plugin [plugin_evaluation] pour évaluer certaines variables du bureau par ex. bureau/nb_docs > bureau/nb_docs_max
 * En fonction de ce qui est retourné (généralement 0 ou 1), on utilise une close [switch] pour appliquer certaines actions
 * Pour chaque cas on pourra déterminer :
 * > une liste de plugins à effectuer (chaque plugin étant susceptible de modifier le bureau)
 * > une close break
 * 
 * Signature du plugin évaluation :
 * ([eval])=plugin_evaluation([type_plugin], [p1], [p2], [liste_param(option)])
 * 
 * Signatue des plugins dans le switch :
 * ([bureau])=plugin([bureau]) => !!! le retour de [bureau] n'est pas obligatoire. S'il n'est pas retourné, le bureau n'est pas modifié.
 * 
 * 
 * 
 * @param mixed $parametres
 * @param [bureau] => le bureau
 * @param [plugin_evaluation] => le plugin utilisé pour évaluer certaines propriétés du bureau. 
 * @param                        En fonction des valeurs trouvées, on appliquera telle ou telle action définies dans le switch
 * @param [switch][cond1, cond2, cond3..., else] => les différents retours possibles de [plugin_evaluation]. On peut aussi utiliser la clef "else"
 * @param ---------- [break] => >0 il faudra arrêter les traitements à l'issue de celui-ci'
 * @param ---------- [plugins][0,1,2...] => les plugins à appliquer si cette condition est remplie. Chaque plugin est susceptible de modifier le bureau (mais pas forcément)
 * 
 * @return [bureau] => bureau éventuellement modifié par les plugins du switch
 * @return [eval] => la valeur retournée (0 ou 1 généralement)
 * @return [break] => si >0 il faudra interrompre les traitements
 */

eval_conditions

/**
 * plugin_transactions_bureau_eval_conditions()
 * 
 * Ce plugin évalue les paramètres fournis (comparateurs mathématiques, logiques...)
 * [type_eval] indique le type d'évaluation à effectuer
 * 
 * Il retourne [eval] qui vaut généralement 0 ou 1
 * 
 * On peut utiliser un équivalent de parenthèses en incluant des plugins à la place d'un des paramètres avec !!
 * 
 * @param [type_eval] => type d'évaluation : egal|sup|sup_egal|inf|inf_egal|and|or
 * @param [p1] => paramètre 1
 * @param [p2] => paramètre 2
 * @param [liste_param] => liste de paramètres : si non fourni, on utilise p1 et p2 pour générer cette liste (utilisé quand on veut évaluer + de 2 paramètres par exemple pour and, or...)
 * 
 * @return [eval] => 0 ou 1
 */