예제 #1
0
	function cextras_declarer_champs_apres_les_autres($tables_principales) {
		include_spip('base/cextras');
		return cextras_declarer_tables_principales($tables_principales);
	}
예제 #2
0
/**
 * Cree en base les champs extras demandes
 * @param $champs : objet ChampExtra ou tableau d'objets ChampExtra
 */
function creer_champs_extras($champs) {
	if (!$champs) {
		return;
	}
	
	if (!is_array($champs)) 
		$champs = array($champs);
				
	// on recupere juste les differentes tables a mettre a jour
	$tables = array();
	foreach ($champs as $c){ 
		if ($table = $c->_table_sql) {
			$tables[$table] = $table;
		} else {
			// ici on est bien ennuye, vu qu'on ne pourra pas creer ce champ.
			extras_log("Aucune table trouvee pour le champs extras ; il ne pourra etre cree :", true);
			extras_log($c, true);
		}
	}	

	if (!$tables) {
		return false;
	}
	
	// on met a jour les tables trouvees
	// recharger les tables principales et auxiliaires
	include_spip('base/serial');
	include_spip('base/auxiliaires');
	global $tables_principales, $tables_auxiliaires;
	base_serial($tables_principales);
	base_auxiliaires($tables_auxiliaires);
	
	// inclure les champs extras declares ALORS que le pipeline
	// n'est pas encore actif : important lorsqu'on active
	// en meme temps CE2 et un plugin dependant
	// et non l'un apres l'autre
	if (!defined('_CHAMPS_EXTRAS_DECLARES')) {
		include_spip('base/cextras');
		$tables_principales = cextras_declarer_tables_principales($tables_principales);
	}

	// executer la mise a jour
	include_spip('base/create');
	maj_tables($tables);

	// pour chaque champ a creer, on verifie qu'il existe bien maintenant !
	$trouver_table = charger_fonction('trouver_table','base');
	$trouver_table(''); // recreer la description des tables.
	$retour = true;
	foreach ($champs as $c){
		if ($objet = $c->_objet) {
			$desc = $trouver_table($objet);
			if (!isset($desc['field'][$c->champ])) {
				extras_log("Le champ extra '" . $c->champ . "' sur $objet n'a pas ete cree :(", true);
				$retour = false;
			}
		} else {
			$retour = false;
		}
	}
	return $retour;
}