MOD Passage de MySQL à un vrai SGBDR : PostgreSQL
[cl7.git] / php / update_db.php
1 <?php # encoding:utf-8
2 /**
3 * Met à jour la base de données en fonction de la version courante de celle ci.
4 * Si des tables n'existes pas elles sont automatiquement créées.
5 */
6
7 include_once("connexion.php");
8
9 $connexion = new Connexion();
10
11 function creer_db()
12 {
13 pg_query("
14 CREATE TABLE config (
15 nom varchar(50) NOT NULL,
16 valeur varchar(255) NOT NULL,
17 PRIMARY KEY (nom)
18 );
19 ");
20 pg_query("
21 CREATE TABLE pizzas (
22 id serial NOT NULL,
23 nom varchar(40) NOT NULL,
24 composition varchar(255) NOT NULL,
25 prix smallint NOT NULL,
26 PRIMARY KEY (id)
27 );
28 ");
29 pg_query("
30 CREATE TABLE jeux (
31 id serial NOT NULL,
32 nom varchar(200) NOT NULL,
33 PRIMARY KEY (id),
34 UNIQUE (nom)
35 );
36 ");
37 pg_query("
38 CREATE TABLE participants (
39 id serial NOT NULL,
40 pseudo varchar(50) DEFAULT NULL,
41 clan_nom varchar(30) DEFAULT NULL,
42 clan_tag varchar(10) DEFAULT NULL,
43 password varchar(10) DEFAULT NULL,
44 nom varchar(30) DEFAULT NULL,
45 prenom varchar(30) DEFAULT NULL,
46 age varchar(30) DEFAULT NULL,
47 e_mail varchar(50) DEFAULT NULL,
48 remarques varchar(255) DEFAULT NULL,
49 admin boolean NOT NULL default FALSE,
50 a_paye boolean NOT NULL default FALSE,
51 pizza int DEFAULT NULL,
52 pizza_paye boolean NOT NULL default FALSE,
53 PRIMARY KEY (id),
54 UNIQUE (pseudo),
55 FOREIGN KEY (pizza) REFERENCES pizzas (id) ON DELETE SET NULL ON UPDATE SET NULL
56 );
57 ");
58 pg_query("
59 CREATE TABLE jeux_choisis (
60 participant_id int NOT NULL,
61 jeu_id int NOT NULL,
62 PRIMARY KEY (participant_id, jeu_id),
63 FOREIGN KEY (participant_id) REFERENCES participants (id) ON DELETE CASCADE ON UPDATE CASCADE,
64 FOREIGN KEY (jeu_id) REFERENCES jeux (id) ON DELETE CASCADE ON UPDATE CASCADE
65 );
66 ");
67 pg_query("
68 CREATE TABLE periodes (
69 id serial NOT NULL,
70 nom varchar(200) NOT NULL,
71 nom_abrege varchar(20) NOT NULL DEFAULT '',
72 PRIMARY KEY (id)
73 );
74 ");
75 pg_query("
76 CREATE TABLE participations (
77 participant_id serial NOT NULL,
78 periode_id int NOT NULL,
79 PRIMARY KEY (participant_id, periode_id),
80 FOREIGN KEY (participant_id) REFERENCES participants (id) ON DELETE CASCADE ON UPDATE CASCADE,
81 FOREIGN KEY (periode_id) REFERENCES periodes (id) ON DELETE CASCADE ON UPDATE CASCADE
82 );
83 ");
84 }
85
86 function initialiser_db()
87 {
88 pg_query("INSERT INTO config (nom, valeur) VALUES ('version', 1)");
89
90 pg_query("INSERT INTO config (nom, valeur) VALUES ('cout_periode', '15')");
91 pg_query("INSERT INTO config (nom, valeur) VALUES ('cout_total', '40')");
92 pg_query("INSERT INTO config (nom, valeur) VALUES ('nb_max_participant', '25')");
93 pg_query("INSERT INTO config (nom, valeur) VALUES ('nb_votes_jeux', '3')");
94 pg_query("INSERT INTO config (nom, valeur) VALUES ('inscription_terminees', 'FALSE')");
95 pg_query("INSERT INTO config (nom, valeur) VALUES ('pizza_visible', 'FALSE')");
96 pg_query("INSERT INTO config (nom, valeur) VALUES ('pizza_peut_commander', 'TRUE')");
97
98 pg_query("INSERT INTO periodes (nom, nom_abrege) VALUES ('vendredi soir à samedi', 'v->s')");
99 pg_query("INSERT INTO periodes (nom, nom_abrege) VALUES ('samedi à dimanche', 's->d')");
100 pg_query("INSERT INTO periodes (nom, nom_abrege) VALUES ('dimanche à lundi', 'd->l')");
101 }
102
103 function update_db()
104 {
105 # si la table 'config' n'existe pas alors on suppose qu'aucune table n'existe
106 $version = 0;
107 $res = @pg_fetch_object(pg_query("SELECT valeur FROM config WHERE nom = 'version'"));
108 if (pg_result_status($res) != PGSQL_COMMAND_OK)
109 $version = $res->valeur;
110
111 if($version == 0)
112 {
113 echo "Création de la base de donnée, version = 1";
114 pg_query("BEGIN");
115 creer_db();
116 initialiser_db();
117 pg_query("COMMIT");
118 $version = 1;
119 }
120
121 # version 1 -> 2 (à utiliser pour une utilisation future)
122 /*
123 if ($version == 1)
124 {
125 pg_query("BEGIN");
126
127 # queries...
128 pg_query("UPDATE config SET valeur = '2' WHERE nom = 'version'");
129
130 pg_query("COMMIT");
131 }*/
132 }
133
134 update_db();
135
136 ?>