initial code layout
[gwvp-mini.git] / gwvpmini / gwvpmini_db.php
1 <?php
2
3
4 global $DB_CONNECTION;\r
5 $DB_CONNECTION = false;\r
6 \r
7 \r
8 global $db_url, $db_type;\r
9 error_log("in include for database, $db_type, $db_name");
10
11
12 function gwvpmini_DBExists()
13 {
14         global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name;
15         
16         // oh this isnt working. poo.
17         error_log("checking for $db_name, $db_type");
18         
19         if($db_type == "sqlite") {
20                 if(file_exists($db_name)) {
21                         error_log("Exists");
22                         return true;
23                 }
24                 else {
25                         error_log("no exists");
26                         return false;
27                 }
28         }
29 }\r
30
31 function gwvpmini_getUser($username=null, $email=null, $id=null)\r
32 {\r
33         $conn = gwvpmini_ConnectDB();\r
34 \r
35         if($username != null) {\r
36                 $res = $conn->query("select * from users where user_username='$username'");\r
37         } else if($email != null) {\r
38                 $res = $conn->query("select * from users where user_email='$email'");\r
39         } else if($id != null) {\r
40                 $res = $conn->query("select * from users where users_id='$id'");\r
41         } else return false;\r
42 \r
43         $returns = false;\r
44         foreach($res as $u_res) {\r
45                 $returns["id"] = $u_res["user_id"];\r
46                 $returns["fullname"] = $u_res["user_full_name"];\r
47                 $returns["password"] = $u_res["user_password"];\r
48                 $returns["username"] = $u_res["user_username"];\r
49                 $returns["email"] = $u_res["user_email"];\r
50                 $returns["desc"] = $u_res["user_desc"];\r
51                 $returns["status"] = $u_res["user_status"];\r
52         }\r
53 \r
54         return $returns;\r
55 \r
56 }\r
57
58 function gwvpmini_ConnectDB()\r
59 {\r
60         global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;\r
61 \r
62         // first check if $DB_CONNECTION IS live\r
63         error_log("in connection $db_type, $db_name");\r
64 \r
65         if($DB_CONNECTION != false) return $DB_CONNECTION;\r
66 \r
67         if($db_type == "sqlite") {\r
68                 $db_url = $db_name;\r
69                 if(!file_exists($db_name)) {\r
70                         error_log("$db_name does not exist - problem");
71                         // TODO: NEED A SETUP AGENT!
72                         gwvpmini_dbCreateSQLiteStructure($db_name);
73                         gwvpmini_setConfigVal("repodir", "$data_directory/repos");\r
74                 }\r
75         }\r
76 \r
77         // and here we go with pdo.\r
78         error_log("attmpting to open db, $db_type:$db_url");\r
79         try {\r
80                 $DB_CONNECTION = new PDO("$db_type:$db_url");\r
81         } catch(PDOException $exep) {\r
82                 error_log("execpt on db open");\r
83                 return false;\r
84         }\r
85 \r
86         return $DB_CONNECTION;\r
87 }\r
88
89
90 function gwvpmini_dbCreateSQLiteStructure($dbloc)\r
91 {\r
92         $usersql = '\r
93         CREATE TABLE "users" (\r
94         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
95         "user_full_name" TEXT,\r
96         "user_password" TEXT,\r
97         "user_username" TEXT,\r
98         "user_email" TEXT,\r
99         "user_desc" TEXT,
100         "user_level" TEXT,\r
101         "user_status" TEXT\r
102         )';\r
103 \r
104         $initialuser_admin = '
105         insert into "users" values ( null, "Administrator", "'.sha1("password").'", "admin", "admin@localhost", "the admin", "1", "0");\r
106         ';\r
107
108         $initialuser_user = '\r
109         insert into "users" values ( null, "User", "'.sha1("password").'", "user", "user@localhost", "the user", "0", "0");\r
110         ';\r
111         \r
112         $reposql = '\r
113         CREATE TABLE "repos" (\r
114         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
115         "repos_name" TEXT,\r
116         "repos_description" TEXT,\r
117         "repos_owner" INTEGER\r
118         )';\r
119 \r
120         // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
121         // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
122         // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
123         // TODO: is this sufficient? i have to think about it\r
124 \r
125         $configsql = '\r
126         CREATE TABLE "config" (\r
127         "config_name" TEXT,\r
128         "config_value" TEXT\r
129         )';\r
130 \r
131         try {\r
132                 $DB_CONNECTION = new PDO("sqlite:$dbloc");\r
133         } catch(PDOException $exep) {\r
134                 error_log("execpt on db open");\r
135                 return false;\r
136         }\r
137
138         $DB_CONNECTION->query($usersql);\r
139         $DB_CONNECTION->query($initialuser_admin);
140         $DB_CONNECTION->query($initialuser_user);
141         $DB_CONNECTION->query($reposql);\r
142         $DB_CONNECTION->query($configsql);\r
143 }
144
145 function gwvpmini_getConfigVal($confname)\r
146 {\r
147         /*\r
148          *      $configsql = '\r
149         CREATE TABLE "config" (\r
150                         "config_name" TEXT,\r
151                         "config_value" TEXT\r
152         )';\r
153 \r
154         */\r
155 \r
156         $conn = gwvpmini_ConnectDB();\r
157 \r
158         $sql = "select config_value from config where config_name='$confname'";\r
159 \r
160         $res = $conn->query($sql);\r
161 \r
162         $return = null;\r
163         foreach($res as $val) {\r
164                 $return = $val["config_value"];\r
165         }\r
166 \r
167         return $return;\r
168 }\r
169 \r
170 function gwvpmini_eraseConfigVal($confname)\r
171 {\r
172         /*\r
173          *      $configsql = '\r
174         CREATE TABLE "config" (\r
175                         "config_name" TEXT,\r
176                         "config_value" TEXT\r
177         )';\r
178 \r
179         */\r
180 \r
181         $conn = gwvpmini_ConnectDB();\r
182 \r
183         $sql = "delete from config where config_name='$confname'";\r
184 \r
185         return $conn->query($sql);\r
186 }
187
188 function gwvpmini_GetRepoId($reponame)
189 {
190
191         /*
192          *      $reposql = '
193         CREATE TABLE "repos" (
194         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
195         "repos_name" TEXT,
196         "repos_description" TEXT,
197         "repos_owner" INTEGER
198         )';
199
200          */
201         
202         $conn = gwvpmini_ConnectDB();
203         
204         $sql = "select repos_id from repos where repos_name='$reponame'";
205         
206         $res = $conn->query($sql);
207         
208         $retval = -1;
209         if(!$res) return -1;
210         foreach($res as $row) {
211                 $reval = (int)$row[0];
212         }
213         
214         return $retval;
215 }
216 \r
217 \r
218 function gwvpmini_setConfigVal($confname, $confval)\r
219 {\r
220         /*\r
221          *      $configsql = '\r
222         CREATE TABLE "config" (\r
223                         "config_name" TEXT,\r
224                         "config_value" TEXT\r
225         )';\r
226 \r
227         */\r
228         gwvpmini_eraseConfigVal($confname);\r
229 \r
230         $conn = gwvpmini_ConnectDB();\r
231 \r
232         $sql = "insert into config values('$confname', '$confval')";\r
233 \r
234         return $conn->query($sql);\r
235 }
236
237 function gwvpmini_AddRepo($name, $desc, $ownerid)
238 {
239         
240         error_log("addrepo in db for $name, $desc, $ownerid");
241         $conn = gwvpmini_ConnectDB();\r
242         \r
243         $sql = "insert into repos values (null, '$name', '$desc', '$ownerid')";\r
244         \r
245         $conn->query($sql);\r
246 }
247
248 function gwvpmini_GetUserId($username)
249 {
250         $conn = gwvpmini_ConnectDB();\r
251         
252         $sql = "select user_id from users where user_username='$username'";
253
254         error_log("userid sql $sql");\r
255         
256         $res = $conn->query($sql);
257         
258         $retval = false;
259         foreach($res as $row) {
260                 $retval = $row[0];
261         }
262         
263         return $retval;
264 }
265
266 function gwvpmini_GetOwnedRepos($username)\r
267 {
268         /*
269          *      CREATE TABLE "repos" (
270         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
271         "repos_name" TEXT,
272         "repos_description" TEXT,
273         "repos_owner" INTEGER
274         )';
275
276          */
277         $conn = gwvpmini_ConnectDB();
278         
279         $uid = gwvpmini_GetUserId($username);
280         $sql = "select * from repos where repos_owner='$uid'";
281         error_log("owned repos sql $sql");
282         $res = $conn->query($sql);
283         
284         $retval = false;
285         foreach($res as $row) {
286                 $id = $row["repos_id"];
287                 $retval[$id]["name"] = $row["repos_name"];
288                 $retval[$id]["desc"] = $row["repos_description"];
289                 error_log(print_r($row, true));
290         }
291         
292         error_log(print_r($retval, true));\r
293         return $retval;\r
294 }
295
296 function gwvpmini_userLevel($id)
297 {
298         $conn = gwvpmini_ConnectDB();
299         
300         $sql = "select user_level from users where user_id='$id'";
301         
302         $res = $conn->query($sql);
303         
304         $lev = -1;
305         if(!$res) return -1;
306         foreach($res as $row) {
307                 $lev = (int)$row[0];
308         }
309         
310         return $lev;
311 }
312
313 function gwvpmini_GetUsers()
314 {
315         $conn = gwvpmini_ConnectDB();
316         
317         /*
318          *      CREATE TABLE "users" (
319         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
320         "user_full_name" TEXT,
321         "user_password" TEXT,
322         "user_username" TEXT,
323         "user_email" TEXT,
324         "user_desc" TEXT,
325         "user_level" TEXT,
326         "user_status" TEXT
327
328          */\r
329         \r
330         $sql = "select * from users";
331         
332         $res = $conn->query($sql);
333         
334         $retval = false;
335         foreach($res as $row) {
336                 $id = $row["user_id"];
337                 $retval[$id]["fullname"] = $row["user_full_name"];
338                 $retval[$id]["username"] = $row["user_username"];
339                 $retval[$id]["email"] = $row["user_email"];
340                 $retval[$id]["desc"] = $row["user_desc"];
341                 $retval[$id]["level"] = $row["user_level"];
342                 $retval[$id]["status"] = $row["user_status"];
343         }
344         
345         return $retval;
346 }\r
347
348
349 ?>