cf3e0fd8ffd7b8f0e9479dbd8569ea5f16f899ab
[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 }
88
89 function gwvpmini_AddUser($username, $password, $fullname, $email, $desc, $level, $status)
90 {
91         \r
92         
93         \r
94         $conn = gwvpmini_ConnectDB();\r
95         \r
96         $sql = "insert into 'users' values ( null, '$fullname', '".sha1($password)."', '$username', '$email', '$desc', '$level', '$status')";\r
97         \r
98         $res = $conn->query($sql);
99         if(!$res) return -1;
100         
101         $sql = "select user_id from users where user_username='$username'";\r
102         $res = $conn->query($sql);\r
103         if(!$res) return -1;\r
104         
105         $retval = -1;
106         foreach($res as $row) {
107                 $retval = $row[0];
108         }
109         
110         return $retval;
111 }\r
112
113
114 function gwvpmini_dbCreateSQLiteStructure($dbloc)\r
115 {\r
116         $usersql = '\r
117         CREATE TABLE "users" (\r
118         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
119         "user_full_name" TEXT,\r
120         "user_password" TEXT,\r
121         "user_username" TEXT,\r
122         "user_email" TEXT,\r
123         "user_desc" TEXT,
124         "user_level" TEXT,\r
125         "user_status" TEXT,
126         UNIQUE(user_username)\r
127         )';\r
128 \r
129         $initialuser_admin = '
130         insert into "users" values ( null, "Administrator", "'.sha1("password").'", "admin", "admin@localhost", "the admin", "1", "0");\r
131         ';\r
132
133         $initialuser_user = '\r
134         insert into "users" values ( null, "User", "'.sha1("password").'", "user", "user@localhost", "the user", "0", "0");\r
135         ';\r
136         \r
137         $reposql = '\r
138         CREATE TABLE "repos" (\r
139         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
140         "repos_name" TEXT,\r
141         "repos_description" TEXT,\r
142         "repos_owner" INTEGER,
143         "repos_readperms" TEXT,
144         UNIQUE(repos_name)\r
145         )';\r
146 \r
147         // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
148         // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
149         // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
150         // TODO: is this sufficient? i have to think about it\r
151 \r
152         $configsql = '\r
153         CREATE TABLE "config" (\r
154         "config_name" TEXT,\r
155         "config_value" TEXT\r
156         )';\r
157 \r
158         try {\r
159                 $DB_CONNECTION = new PDO("sqlite:$dbloc");\r
160         } catch(PDOException $exep) {\r
161                 error_log("execpt on db open");\r
162                 return false;\r
163         }\r
164
165         $DB_CONNECTION->query($usersql);\r
166         $DB_CONNECTION->query($initialuser_admin);
167         $DB_CONNECTION->query($initialuser_user);
168         $DB_CONNECTION->query($reposql);\r
169         $DB_CONNECTION->query($configsql);\r
170 }
171
172 function gwvpmini_getConfigVal($confname)\r
173 {\r
174         /*\r
175          *      $configsql = '\r
176         CREATE TABLE "config" (\r
177                         "config_name" TEXT,\r
178                         "config_value" TEXT\r
179         )';\r
180 \r
181         */\r
182 \r
183         $conn = gwvpmini_ConnectDB();\r
184 \r
185         $sql = "select config_value from config where config_name='$confname'";\r
186 \r
187         $res = $conn->query($sql);\r
188 \r
189         $return = null;\r
190         foreach($res as $val) {\r
191                 $return = $val["config_value"];\r
192         }\r
193 \r
194         return $return;\r
195 }\r
196 \r
197 function gwvpmini_eraseConfigVal($confname)\r
198 {\r
199         /*\r
200          *      $configsql = '\r
201         CREATE TABLE "config" (\r
202                         "config_name" TEXT,\r
203                         "config_value" TEXT\r
204         )';\r
205 \r
206         */\r
207 \r
208         $conn = gwvpmini_ConnectDB();\r
209 \r
210         $sql = "delete from config where config_name='$confname'";\r
211 \r
212         return $conn->query($sql);\r
213 }
214
215 function gwvpmini_GetRepoId($reponame)
216 {
217
218         /*
219          *      $reposql = '
220         CREATE TABLE "repos" (
221         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
222         "repos_name" TEXT,
223         "repos_description" TEXT,
224         "repos_owner" INTEGER
225         )';
226
227          */
228         
229         $conn = gwvpmini_ConnectDB();
230         
231         $sql = "select repos_id from repos where repos_name='$reponame'";
232         
233         $res = $conn->query($sql);
234         
235         $retval = -1;
236         if(!$res) return -1;
237         foreach($res as $row) {
238                 $reval = (int)$row[0];
239         }
240         
241         return $retval;
242 }
243
244 function gwvpmini_GetRepoDescFromName($reponame)\r
245 {\r
246 \r
247         /*\r
248          *      $reposql = '\r
249         CREATE TABLE "repos" (\r
250                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
251                         "repos_name" TEXT,\r
252                         "repos_description" TEXT,\r
253                         "repos_owner" INTEGER\r
254         )';\r
255 \r
256         */\r
257 \r
258         $conn = gwvpmini_ConnectDB();\r
259 \r
260         $sql = "select repos_description from repos where repos_name='$reponame'";
261         error_log("desc for name sql: $sql");\r
262 \r
263         $res = $conn->query($sql);\r
264 \r
265         $retval = -1;\r
266         if(!$res) return -1;\r
267         foreach($res as $row) {\r
268                 $retval = $row[0];\r
269         }\r
270 \r
271         return $retval;\r
272 }
273 \r
274 function gwvpmini_GetRepoOwnerDetailsFromName($reponame)\r
275 {\r
276 \r
277         /*\r
278          *      $reposql = '\r
279         CREATE TABLE "repos" (\r
280                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
281                         "repos_name" TEXT,\r
282                         "repos_description" TEXT,\r
283                         "repos_owner" INTEGER\r
284         )';
285         
286                 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
287         "user_full_name" TEXT,
288         "user_password" TEXT,
289         "user_username" TEXT,
290         "user_email" TEXT,
291         "user_desc" TEXT,
292         "user_level" TEXT,
293         "user_status" TEXT,
294         UNIQUE(user_username)\r
295 \r
296         */\r
297 \r
298         $conn = gwvpmini_ConnectDB();\r
299 \r
300         $sql = "select users.* from repos,users where repos_name='$reponame' and repos_owner=user_id";\r
301 \r
302         $res = $conn->query($sql);\r
303 \r
304         $retval = -1;\r
305         if(!$res) return -1;\r
306         foreach($res as $row) {
307                 $retval = array();
308                 error_log("STUFF2: ".print_r($row,true));\r
309                 $retval["id"] = $row["user_id"];
310                 $retval["fullname"] = $row["user_full_name"];
311                 $retval["username"] = $row["user_username"];
312                 $retval["email"] = $row["user_email"];
313                 $retval["desc"] = $row["user_desc"];
314                 $retval["level"] = $row["user_level"];
315                 $retval["status"] = $row["user_status"];\r
316         }\r
317 \r
318         return $retval;\r
319 }\r
320 \r
321 function gwvpmini_setConfigVal($confname, $confval)\r
322 {\r
323         /*\r
324          *      $configsql = '\r
325         CREATE TABLE "config" (\r
326                         "config_name" TEXT,\r
327                         "config_value" TEXT\r
328         )';\r
329 \r
330         */\r
331         gwvpmini_eraseConfigVal($confname);\r
332 \r
333         $conn = gwvpmini_ConnectDB();\r
334 \r
335         $sql = "insert into config values('$confname', '$confval')";\r
336 \r
337         return $conn->query($sql);\r
338 }
339
340 function gwvpmini_AddRepo($name, $desc, $ownerid, $perms = "perms-public")
341 {
342         
343         error_log("addrepo in db for $name, $desc, $ownerid");
344         $conn = gwvpmini_ConnectDB();\r
345         \r
346         $sql = "insert into repos values (null, '$name', '$desc', '$ownerid', '$perms')";\r
347         \r
348         $conn->query($sql);\r
349 }
350
351 function gwvpmini_GetUserId($username)
352 {
353         $conn = gwvpmini_ConnectDB();\r
354         
355         $sql = "select user_id from users where user_username='$username'";
356
357         error_log("userid sql $sql");\r
358         
359         $res = $conn->query($sql);
360         
361         $retval = false;
362         foreach($res as $row) {
363                 $retval = $row[0];
364         }
365         
366         return $retval;
367 }
368
369 function gwvpmini_GetUserNameFromEmail($email)\r
370 {\r
371         $conn = gwvpmini_ConnectDB();\r
372 \r
373         $sql = "select user_username from users where user_email='$email'";\r
374 \r
375         error_log("username sql $sql");\r
376 \r
377         $res = $conn->query($sql);\r
378 \r
379         $retval = false;\r
380         foreach($res as $row) {\r
381                 $retval = $row[0];\r
382         }\r
383 \r
384         return $retval;\r
385 }
386 function gwvpmini_GetOwnedRepos($username)\r
387 {
388         /*
389          *      CREATE TABLE "repos" (
390         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
391         "repos_name" TEXT,
392         "repos_description" TEXT,
393         "repos_owner" INTEGER
394         )';
395
396          */
397         $conn = gwvpmini_ConnectDB();
398         
399         $uid = gwvpmini_GetUserId($username);
400         $sql = "select * from repos where repos_owner='$uid'";
401         error_log("owned repos sql $sql");
402         $res = $conn->query($sql);
403         
404         $retval = false;
405         foreach($res as $row) {
406                 $id = $row["repos_id"];
407                 $retval[$id]["name"] = $row["repos_name"];
408                 $retval[$id]["desc"] = $row["repos_description"];
409                 error_log(print_r($row, true));
410         }
411         
412         error_log(print_r($retval, true));\r
413         return $retval;\r
414 }
415
416 function gwvpmini_userLevel($id)
417 {
418         $conn = gwvpmini_ConnectDB();
419         
420         $sql = "select user_level from users where user_id='$id'";
421         
422         $res = $conn->query($sql);
423         
424         $lev = -1;
425         if(!$res) return -1;
426         foreach($res as $row) {
427                 $lev = (int)$row[0];
428         }
429         
430         return $lev;
431 }
432
433 function gwvpmini_GetUsers($startat = 0, $num = 10)
434 {
435         $conn = gwvpmini_ConnectDB();
436         
437         /*
438          *      CREATE TABLE "users" (
439         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
440         "user_full_name" TEXT,
441         "user_password" TEXT,
442         "user_username" TEXT,
443         "user_email" TEXT,
444         "user_desc" TEXT,
445         "user_level" TEXT,
446         "user_status" TEXT
447
448          */\r
449         \r
450         $sql = "select * from users where user_id>'$startat' order by user_id asc limit $num";
451         
452         $res = $conn->query($sql);
453         
454         $retval = false;
455         foreach($res as $row) {
456                 $id = $row["user_id"];
457                 $retval[$id]["fullname"] = $row["user_full_name"];
458                 $retval[$id]["username"] = $row["user_username"];
459                 $retval[$id]["email"] = $row["user_email"];
460                 $retval[$id]["desc"] = $row["user_desc"];
461                 $retval[$id]["level"] = $row["user_level"];
462                 $retval[$id]["status"] = $row["user_status"];
463         }
464         
465         return $retval;
466 }\r
467
468 function gwvpmini_GetRepos($startat=0, $num=200)\r
469 {\r
470         $conn = gwvpmini_ConnectDB();\r
471         \r
472         /*\r
473          *      CREATE TABLE "repos" (
474         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
475         "repos_name" TEXT,
476         "repos_description" TEXT,
477         "repos_owner" INTEGER
478         )';
479         \r
480                         */\r
481         \r
482         $sql = "select * from repos where repos_id > '$startat' order by repos_id asc limit $num";\r
483         \r
484         $res = $conn->query($sql);\r
485         \r
486         $retval = false;\r
487         foreach($res as $row) {\r
488                 $id = $row["repos_id"];\r
489                 $retval[$id]["name"] = $row["repos_name"];\r
490                 $retval[$id]["desc"] = $row["repos_description"];\r
491                 $retval[$id]["owner"] = $row["repos_owner"];\r
492         }\r
493         \r
494         return $retval;\r
495         \r
496         \r
497 }\r
498
499 function gwvpmini_GetNRepos()
500 {
501         $conn = gwvpmini_ConnectDB();
502
503         $sql = "select count(*) from repos";
504         
505         $res = $conn->query($sql);
506         
507         $retval = -1;
508         foreach($res as $row) {
509                 $retval = $row[0];
510         }
511         
512         return $retval;
513 }
514
515 \r
516 function gwvpmini_GetNUsers()\r
517 {\r
518         $conn = gwvpmini_ConnectDB();\r
519 \r
520         $sql = "select count(*) from users";\r
521 \r
522         $res = $conn->query($sql);\r
523 \r
524         $retval = -1;\r
525         foreach($res as $row) {\r
526                 $retval = $row[0];\r
527         }\r
528 \r
529         return $retval;\r
530 }\r
531
532
533 ?>