X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Fbase%2Fcreate.php;fp=www%2Fecrire%2Fbase%2Fcreate.php;h=c13d2c726fa86eb7939399cae9ed588657f5a24f;hb=52cf8ed924d5dcd0c28dde4b6c3196be6ec2d4f7;hp=0000000000000000000000000000000000000000;hpb=90fe1de0acd20fe72334eb4cc59f300ab705c774;p=ptitvelo%2Fweb%2Fwww.git diff --git a/www/ecrire/base/create.php b/www/ecrire/base/create.php new file mode 100644 index 0000000..c13d2c7 --- /dev/null +++ b/www/ecrire/base/create.php @@ -0,0 +1,156 @@ +$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); +} + +?>