File "yaml.php"

Full path: /home/argothem/www/organecyberpresse/plugins/auto/yaml/v3.1.2/inc/yaml.php
File size: 5.14 KB
MIME-type: text/x-php
Charset: utf-8

<?php

if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}

if (!defined('_LIB_YAML')) {
	/**
	 * Les valeurs possibles sont :
	 * - 'symfony' pour le composant YAML le plus récent de Symfony
	 * - 'spyc' pour la librairie YAML spyc la plus récente
	 * - 'libyaml' pour le composant PECL basé sur la librairie libYAML écrite en C.
	 */
	define('_LIB_YAML', 'symfony');
}

/**
 * @api
 *
 * @param mixed $structure
 *        Structure PHP, tableau, chaine... à convertir en YAML.
 * @param array $options
 *        Tableau associatif d'options standard ou spécifique à une librairie donnée.
 *
 * @return string
 *        Chaîne YAML construite, prête pour être éventuellement écrite dans un fichier.
 */
function yaml_encode($structure, $options = []) {

	// Déterminer la librairie à utiliser
	$librairie = _LIB_YAML;
	if (!empty($options['library'])) {
		$librairie = $options['library'];
	}

	// Déterminer la fonction à appeler à partir de la librairie utilisée.
	require_once _DIR_PLUGIN_YAML . 'inc/' . $librairie . '.php';
	$encoder = $librairie . '_yaml_encode';

	return $encoder($structure, $options);
}


if (!function_exists('yaml_decode')) {
	/**
	 * @api
	 *
	 * @param string $input
	 *        La chaîne YAML à décoder.
	 * @param array $options
	 *        Tableau associatif des options du parsing.
	 *        - 'show_error' : indicateur d'affichage des erreurs de parsing, false par défaut.
	 *
	 * @return mixed
	 */
	function yaml_decode($input, $options = []) {

		// Déterminer la librairie à utiliser
		$librairie = _LIB_YAML;
		if (!empty($options['library'])) {
			$librairie = $options['library'];
		}

		// Déterminer la fonction à appeler à partir de la librairie utilisée.
		require_once _DIR_PLUGIN_YAML . 'inc/' . $librairie . '.php';
		$decoder = $librairie . '_yaml_decode';

		return $decoder($input, $options);
	}
}

/*
 * @api
 *
 * Decode un fichier en utilisant yaml_decode
 * @param string $fichier
 */
/**
 * @param $fichier
 *
 * @return array|mixed
 */
function yaml_decode_file($fichier, $options = []) {

	$retour = [];

	// Traitement des options
	if (empty($options['include'])) {
		$options['include'] = false;
	}

	// Lecture du fichier YAML.
	lire_fichier($fichier, $yaml);

	// Décodage du contenu YAML en structure de données PHP.
	if ($yaml) {
		$retour = yaml_decode($yaml, $options);
		if ($options['include']) {
			$retour = decode_inclusions($retour, $options);
		}
	}

	return $retour;
}

/*
 * @internal
 *
 * Charge les inclusions de YAML dans un tableau
 * Les inclusions sont indiquees dans le tableau via la valeur 'inclure:rep/fichier.yaml' ou rep indique le chemin relatif.
 * On passe donc par find_in_path() pour trouver le fichier
 * @param array $tableau
 */
function decode_inclusions($parsed, $options = []) {

	if (is_array($parsed)) {
		$retour = [];
		foreach ($parsed as $cle => $valeur) {
			if (is_string($valeur) && substr($valeur, 0, 8) == 'inclure:' && substr($valeur, -5) == '.yaml') {
				$inclusion = find_in_path(substr($valeur, 8));
				if ($inclusion) {
					$retour = array_merge($retour, yaml_decode_file($inclusion, $options));
				} else {
					$retour = array_merge($retour, [$cle => $valeur]);
				}
			} elseif (is_array($valeur)) {
				$retour = array_merge($retour, [$cle => decode_inclusions($valeur, $options)]);
			} else {
				$retour = array_merge($retour, [$cle => $valeur]);
			}
		}
	} elseif (is_string($parsed) && substr($parsed, 0, 8) == 'inclure:' && substr($parsed, -5) == '.yaml') {
		$inclusion = find_in_path(substr($parsed, 8));
		if ($inclusion) {
			$retour = yaml_decode_file($inclusion, $options);
		} else {
			$retour = $parsed;
		}
	} else {
		$retour = $parsed;
	}

	return $retour;
}

/*
 * @api
 *
 * Charge les inclusions de YAML dans un tableau
 * Les inclusions sont indiquees dans le tableau via la valeur 'inclure:rep/fichier.yaml' ou rep indique le chemin relatif.
 * On passe donc par find_in_path() pour trouver le fichier
 * @param array $tableau
 */
function yaml_charger_inclusions($tableau, $options = []) {

	// Eviter de traiter l'inclure avec la nouvelle approche
	if (isset($options['include'])) {
		unset($options['include']);
	}

	if (is_array($tableau)) {
		$retour = [];
		foreach ($tableau as $cle => $valeur) {
			if (is_string($valeur) && substr($valeur, 0, 8) == 'inclure:' && substr($valeur, -5) == '.yaml') {
				$inclusion = find_in_path(substr($valeur, 8));
				if ($inclusion) {
					$retour = array_merge($retour, yaml_charger_inclusions(yaml_decode_file($inclusion), $options));
				} else {
					$retour = array_merge($retour, [$cle => $valeur]);
				}
			} elseif (is_array($valeur)) {
				$retour = array_merge($retour, [$cle => yaml_charger_inclusions($valeur, $options)]);
			} else {
				$retour = array_replace($retour, [$cle => $valeur]);//Array_replace plutôt qu'array_merge pour préserver $cle si numérique
			}
		}
	} elseif (is_string($tableau) && substr($tableau, 0, 8) == 'inclure:' && substr($tableau, -5) == '.yaml') {
		$inclusion = find_in_path(substr($tableau, 8));
		if ($inclusion) {
			$retour = yaml_charger_inclusions(yaml_decode_file($inclusion, $options));
		} else {
			$retour = $tableau;
		}
	} else {
		$retour = $tableau;
	}

	return $retour;
}