WP File Manager
Current Path:
/
home
/
translil
/
www
/
amitram
/
ecrire0
/
base
/
Name
Action
..
abstract_sql.php
Edit
auxiliaires.php
Edit
connect_sql.php
Edit
create.php
Edit
delete_all.php
Edit
dump.php
Edit
index.php
Edit
objets.php
Edit
repair.php
Edit
serial.php
Edit
trouver_table.php
Edit
upgrade.php
Edit
Editing: create.php
<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2014 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) return; include_spip('inc/acces'); include_spip('base/objets'); include_spip('base/typedoc'); include_spip('base/abstract_sql'); /** * Determiner le flag autoinc pour une table * en fonction de si c'est une table principale * * @param string $table * @param array $desc * @return bool */ function base_determine_autoinc($table,$desc=array()){ if ($t=lister_tables_principales() AND isset($t[$table])) $autoinc = true; elseif ($t=lister_tables_auxiliaires() AND isset($t[$table])) $autoinc = false; else { // essayer de faire au mieux ! $autoinc = (isset($desc['key']['PRIMARY KEY']) AND strpos($desc['key']['PRIMARY KEY'],',')===false AND strpos($desc['field'][$desc['key']['PRIMARY KEY']],'default')===false); } return $autoinc; } /** * Creer une table, * ou ajouter les champs manquants si elle existe deja * * http://doc.spip.org/@creer_ou_upgrader_table * * @param string $table * @param array $desc * @param bool|string $autoinc * 'auto' pour detecter automatiquement si le champ doit etre autoinc ou non * en fonction de la table * @param bool $upgrade * @param string $serveur * @return void */ function creer_ou_upgrader_table($table,$desc,$autoinc,$upgrade=false,$serveur='') { #spip_log("creer_ou_upgrader_table table=$table autoinc=$autoinc upgrade=$upgrade","dbinstall"._LOG_INFO_IMPORTANTE); $sql_desc = $upgrade ? sql_showtable($table,true,$serveur) : false; #if (!$sql_desc) $sql_desc = false; #spip_log("table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); if (!$sql_desc) { if ($autoinc==='auto') $autoinc = base_determine_autoinc($table,$desc); #spip_log("sql_create $table autoinc=$autoinc","dbinstall"._LOG_INFO_IMPORTANTE); sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur); // verifier la bonne installation de la table (php-fpm es-tu la ?) $sql_desc = sql_showtable($table,true,$serveur); #if (!$sql_desc) $sql_desc = false; #spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); if (!$sql_desc){ // on retente avec un sleep ? sleep(1); sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur); $sql_desc = sql_showtable($table,true,$serveur); #if (!$sql_desc) $sql_desc = false; #spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE); if (!$sql_desc){ spip_log("Echec creation table $table","maj"._LOG_CRITIQUE); } } } else { #spip_log("sql_alter $table ... (on s'en fiche)","dbinstall"._LOG_INFO_IMPORTANTE); // ajouter les champs manquants // on ne supprime jamais les champs, car c'est dangereux // c'est toujours a faire manuellement $last = ''; foreach($desc['field'] as $field=>$type){ if (!isset($sql_desc['field'][$field])) sql_alter("TABLE $table ADD $field $type".($last?" AFTER $last":""),$serveur); $last = $field; } foreach($desc['key'] as $key=>$type){ // Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees // par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY" if (!isset($sql_desc['key'][$key]) AND !isset($sql_desc['key']["$key $type"])) sql_alter("TABLE $table ADD $key ($type)",$serveur); $last = $field; } } } /** * Creer ou mettre a jour un ensemble de tables * en fonction du flag $up * * @param array $tables_inc * tables avec autoincrement sur la cle primaire * @param $tables_noinc * tables sans autoincrement sur la cle primaire * @param bool|array $up * upgrader (true) ou creer (false) * si un tableau de table est fournie, seules l'intersection de ces tables * et des $tables_inc / $tables_noinc seront traitees * @param string $serveur * serveur sql * @return void */ function alterer_base($tables_inc, $tables_noinc, $up=false, $serveur='') { if ($up === false) { $old = false; $up = array(); } else { $old = true; if (!is_array($up)) $up = array($up); } foreach($tables_inc as $k => $v) if (!$old OR in_array($k, $up)) creer_ou_upgrader_table($k,$v,true,$old,$serveur); foreach($tables_noinc as $k => $v) if (!$old OR in_array($k, $up)) creer_ou_upgrader_table($k,$v,false,$old,$serveur); } /** * Creer une base de donnee * a partir des tables principales et auxiliaires * * http://doc.spip.org/@creer_base * * @param string $serveur * @return void */ function creer_base($serveur='') { // Note: les mises a jour reexecutent ce code pour s'assurer // de la conformite de la base // pas de panique sur "already exists" et "duplicate entry" donc. alterer_base(lister_tables_principales(), lister_tables_auxiliaires(), false, $serveur); } /** * Mettre a jour une liste de tables, * fonction facilitatrice utilisee pour les maj de base * dans les plugins * * @param array $upgrade_tables * @param string $serveur * @return void */ function maj_tables($upgrade_tables=array(),$serveur=''){ alterer_base(lister_tables_principales(), lister_tables_auxiliaires(), $upgrade_tables, $serveur); } ?>