1995e7dfb4023bfded96e913682809df6ba5a94b
[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 user_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 }
57
58
59 function gwvpmini_getRepo($ownerid=null, $name=null, $id=null)\r
60 {\r
61         $conn = gwvpmini_ConnectDB();
62         
63         /*
64          *      $reposql = '
65         CREATE TABLE "repos" (
66         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
67         "repos_name" TEXT,
68         "repos_description" TEXT,
69         "repos_owner" INTEGER,
70         "repos_readperms" TEXT,
71         UNIQUE(repos_name)
72         )';
73
74          */\r
75 \r
76         if($ownerid != null) {\r
77                 $res = $conn->query("select * from repos where repos_owner='$ownerid'");\r
78         } else if($name != null) {\r
79                 $res = $conn->query("select * from repos where repos_name='$name'");\r
80         } else if($id != null) {\r
81                 $res = $conn->query("select * from repos where repos_id='$id'");\r
82         } else return false;\r
83 \r
84         $returns = false;
85         if(!$res) return false;\r
86         foreach($res as $u_res) {\r
87                 $returns["id"] = $u_res["repos_id"];\r
88                 $returns["name"] = $u_res["repos_name"];\r
89                 $returns["desc"] = $u_res["repos_description"];\r
90                 $returns["ownerid"] = $u_res["repos_owner"];\r
91                 $returns["perms"] = $u_res["repos_readperms"];\r
92         }\r
93 \r
94         return $returns;\r
95 \r
96 }
97
98 function gwvpmini_RemoveRepoDB($id)
99 {
100         $conn = gwvpmini_ConnectDB();\r
101         \r
102         if($id < 0) return;\r
103         \r
104         $sql = "delete from repos where repos_id='$id'";\r
105         \r
106         return $conn->query($sql);\r
107         
108 }
109
110 function gwvpmini_RemoveUser($uid)
111 {
112         $conn = gwvpmini_ConnectDB();\r
113         
114         if($uid < 0) return;
115         
116         $sql = "delete from users where user_id='$uid'";
117         
118         return $conn->query($sql);
119 }
120
121 function gwvpmini_DisableUser($uid)
122 {
123         $conn = gwvpmini_ConnectDB();\r
124         \r
125         if($uid < 0) return;\r
126         \r
127         $sql = "update users set user_status=1 where user_id='$uid'";\r
128         \r
129         return $conn->query($sql);
130 }\r
131
132 function gwvpmini_EnableUser($uid)\r
133 {\r
134         $conn = gwvpmini_ConnectDB();\r
135 \r
136         if($uid < 0) return;\r
137 \r
138         $sql = "update users set user_status=0 where user_id='$uid'";\r
139 \r
140         return $conn->query($sql);\r
141 }\r
142 \r
143
144 function gwvpmini_ConnectDB()\r
145 {\r
146         global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;\r
147 \r
148         // first check if $DB_CONNECTION IS live\r
149         error_log("in connection $db_type, $db_name");\r
150 \r
151         if($DB_CONNECTION != false) return $DB_CONNECTION;\r
152 \r
153         if($db_type == "sqlite") {\r
154                 $db_url = $db_name;\r
155                 if(!file_exists($db_name)) {\r
156                         error_log("$db_name does not exist - problem");
157                         // TODO: NEED A SETUP AGENT!
158                         gwvpmini_dbCreateSQLiteStructure($db_name);
159                         gwvpmini_setConfigVal("repodir", "$data_directory/repos");\r
160                 }\r
161         }\r
162 \r
163         // and here we go with pdo.\r
164         error_log("attmpting to open db, $db_type:$db_url");\r
165         try {\r
166                 $DB_CONNECTION = new PDO("$db_type:$db_url");\r
167         } catch(PDOException $exep) {\r
168                 error_log("execpt on db open");\r
169                 return false;\r
170         }\r
171 \r
172         return $DB_CONNECTION;\r
173 }
174
175 function gwvpmini_UpdateStatusFromConfirm($confirmhash)
176 {
177         $conn = gwvpmini_ConnectDB();\r
178         \r
179         $sql = "select count(*) from users where user_status='2:$confirmhash'";
180         
181         $res = $conn->query($sql);
182         
183         if(!$res) return false;
184         
185         foreach($res as $row) {
186                 $retval = $row[0];
187         }
188         
189         if($retval > 0) {
190                 $sql = "update users set user_status='0' where user_status='2:$confirmhash'";
191                 return $conn->query($sql);
192         } else return false;
193 }
194
195
196 function gwvpmini_AddUser($username, $password, $fullname, $email, $desc, $level, $status)
197 {
198         \r
199         
200         \r
201         $conn = gwvpmini_ConnectDB();\r
202         \r
203         $sql = "insert into 'users' values ( null, '$fullname', '".sha1($password)."', '$username', '$email', '$desc', '$level', '$status')";\r
204         \r
205         $res = $conn->query($sql);
206         if(!$res) return -1;
207         
208         $sql = "select user_id from users where user_username='$username'";\r
209         $res = $conn->query($sql);\r
210         if(!$res) return -1;\r
211         
212         $retval = -1;
213         foreach($res as $row) {
214                 $retval = $row[0];
215         }
216         
217         return $retval;
218 }\r
219
220
221 function gwvpmini_dbCreateSQLiteStructure($dbloc)\r
222 {\r
223         $usersql = '\r
224         CREATE TABLE "users" (\r
225         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
226         "user_full_name" TEXT,\r
227         "user_password" TEXT,\r
228         "user_username" TEXT,\r
229         "user_email" TEXT,\r
230         "user_desc" TEXT,
231         "user_level" TEXT,\r
232         "user_status" TEXT,
233         UNIQUE(user_username)\r
234         )';\r
235 \r
236         $initialuser_admin = '
237         insert into "users" values ( null, "Administrator", "'.sha1("password").'", "admin", "admin@localhost", "the admin", "1", "0");\r
238         ';\r
239
240         $initialuser_user = '\r
241         insert into "users" values ( null, "User", "'.sha1("password").'", "user", "user@localhost", "the user", "0", "0");\r
242         ';\r
243         \r
244         $reposql = '\r
245         CREATE TABLE "repos" (\r
246         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
247         "repos_name" TEXT,\r
248         "repos_description" TEXT,\r
249         "repos_owner" INTEGER,
250         "repos_readperms" TEXT,
251         UNIQUE(repos_name)\r
252         )';\r
253 \r
254         // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
255         // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
256         // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
257         // TODO: is this sufficient? i have to think about it\r
258 \r
259         $configsql = '\r
260         CREATE TABLE "config" (\r
261         "config_name" TEXT,\r
262         "config_value" TEXT\r
263         )';\r
264 \r
265         try {\r
266                 $DB_CONNECTION = new PDO("sqlite:$dbloc");\r
267         } catch(PDOException $exep) {\r
268                 error_log("execpt on db open");\r
269                 return false;\r
270         }\r
271
272         $DB_CONNECTION->query($usersql);\r
273         $DB_CONNECTION->query($initialuser_admin);
274         $DB_CONNECTION->query($initialuser_user);
275         $DB_CONNECTION->query($reposql);\r
276         $DB_CONNECTION->query($configsql);\r
277 }
278
279 function gwvpmini_getConfigVal($confname)\r
280 {\r
281         /*\r
282          *      $configsql = '\r
283         CREATE TABLE "config" (\r
284                         "config_name" TEXT,\r
285                         "config_value" TEXT\r
286         )';\r
287 \r
288         */\r
289 \r
290         $conn = gwvpmini_ConnectDB();\r
291 \r
292         $sql = "select config_value from config where config_name='$confname'";\r
293 \r
294         $res = $conn->query($sql);\r
295 \r
296         $return = null;\r
297         foreach($res as $val) {\r
298                 $return = $val["config_value"];\r
299         }\r
300 \r
301         return $return;\r
302 }\r
303 \r
304 function gwvpmini_eraseConfigVal($confname)\r
305 {\r
306         /*\r
307          *      $configsql = '\r
308         CREATE TABLE "config" (\r
309                         "config_name" TEXT,\r
310                         "config_value" TEXT\r
311         )';\r
312 \r
313         */\r
314 \r
315         $conn = gwvpmini_ConnectDB();\r
316 \r
317         $sql = "delete from config where config_name='$confname'";\r
318 \r
319         return $conn->query($sql);\r
320 }
321
322 function gwvpmini_GetRepoId($reponame)
323 {
324
325         /*
326          *      $reposql = '
327         CREATE TABLE "repos" (
328         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
329         "repos_name" TEXT,
330         "repos_description" TEXT,
331         "repos_owner" INTEGER
332         )';
333
334          */
335         
336         $conn = gwvpmini_ConnectDB();
337         
338         $sql = "select repos_id from repos where repos_name='$reponame'";
339         
340         $res = $conn->query($sql);
341         
342         $retval = -1;
343         if(!$res) return -1;
344         foreach($res as $row) {
345                 $reval = (int)$row[0];
346         }
347         
348         return $retval;
349 }
350
351 function gwvpmini_GetRepoDescFromName($reponame)\r
352 {\r
353 \r
354         /*\r
355          *      $reposql = '\r
356         CREATE TABLE "repos" (\r
357                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
358                         "repos_name" TEXT,\r
359                         "repos_description" TEXT,\r
360                         "repos_owner" INTEGER\r
361         )';\r
362 \r
363         */\r
364 \r
365         $conn = gwvpmini_ConnectDB();\r
366 \r
367         $sql = "select repos_description from repos where repos_name='$reponame'";
368         error_log("desc for name sql: $sql");\r
369 \r
370         $res = $conn->query($sql);\r
371 \r
372         $retval = -1;\r
373         if(!$res) return -1;\r
374         foreach($res as $row) {\r
375                 $retval = $row[0];\r
376         }\r
377 \r
378         return $retval;\r
379 }
380 \r
381 function gwvpmini_GetRepoOwnerDetailsFromName($reponame)\r
382 {\r
383 \r
384         /*\r
385          *      $reposql = '\r
386         CREATE TABLE "repos" (\r
387                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
388                         "repos_name" TEXT,\r
389                         "repos_description" TEXT,\r
390                         "repos_owner" INTEGER\r
391         )';
392         
393                 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
394         "user_full_name" TEXT,
395         "user_password" TEXT,
396         "user_username" TEXT,
397         "user_email" TEXT,
398         "user_desc" TEXT,
399         "user_level" TEXT,
400         "user_status" TEXT,
401         UNIQUE(user_username)\r
402 \r
403         */\r
404 \r
405         $conn = gwvpmini_ConnectDB();\r
406 \r
407         $sql = "select users.* from repos,users where repos_name='$reponame' and repos_owner=user_id";\r
408 \r
409         $res = $conn->query($sql);\r
410 \r
411         $retval = -1;\r
412         if(!$res) return -1;\r
413         foreach($res as $row) {
414                 $retval = array();
415                 error_log("STUFF2: ".print_r($row,true));\r
416                 $retval["id"] = $row["user_id"];
417                 $retval["fullname"] = $row["user_full_name"];
418                 $retval["username"] = $row["user_username"];
419                 $retval["email"] = $row["user_email"];
420                 $retval["desc"] = $row["user_desc"];
421                 $retval["level"] = $row["user_level"];
422                 $retval["status"] = $row["user_status"];\r
423         }\r
424 \r
425         return $retval;\r
426 }\r
427 \r
428 function gwvpmini_setConfigVal($confname, $confval)\r
429 {\r
430         /*\r
431          *      $configsql = '\r
432         CREATE TABLE "config" (\r
433                         "config_name" TEXT,\r
434                         "config_value" TEXT\r
435         )';\r
436 \r
437         */\r
438         gwvpmini_eraseConfigVal($confname);\r
439 \r
440         $conn = gwvpmini_ConnectDB();
441         
442         $sql = "delete from config where config_name='$confname'";
443         $conn->query($sql);\r
444 \r
445         $sql = "insert into config values('$confname', '$confval')";\r
446 \r
447         return $conn->query($sql);\r
448 }
449
450 function gwvpmini_AddRepo($name, $desc, $ownerid, $perms = "perms-public")
451 {
452         
453         error_log("addrepo in db for $name, $desc, $ownerid");
454         $conn = gwvpmini_ConnectDB();\r
455         \r
456         $sql = "insert into repos values (null, '$name', '$desc', '$ownerid', '$perms')";\r
457         \r
458         $conn->query($sql);\r
459 }
460
461 function gwvpmini_GetUserId($username)
462 {
463         $conn = gwvpmini_ConnectDB();\r
464         
465         $sql = "select user_id from users where user_username='$username'";
466
467         error_log("userid sql $sql");\r
468         
469         $res = $conn->query($sql);
470         
471         $retval = false;
472         foreach($res as $row) {
473                 $retval = $row[0];
474         }
475         
476         return $retval;
477 }
478
479 function gwvpmini_GetUserNameFromEmail($email)\r
480 {\r
481         $conn = gwvpmini_ConnectDB();\r
482 \r
483         $sql = "select user_username from users where user_email='$email'";\r
484 \r
485         error_log("username sql $sql");\r
486 \r
487         $res = $conn->query($sql);\r
488 \r
489         $retval = false;\r
490         foreach($res as $row) {\r
491                 $retval = $row[0];\r
492         }\r
493 \r
494         return $retval;\r
495 }
496 function gwvpmini_GetOwnedRepos($username)\r
497 {
498         /*
499          *      CREATE TABLE "repos" (
500         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
501         "repos_name" TEXT,
502         "repos_description" TEXT,
503         "repos_owner" INTEGER
504         )';
505
506          */
507         $conn = gwvpmini_ConnectDB();
508         
509         
510         $uid = gwvpmini_GetUserId($username);
511         $sql = "select * from repos where repos_owner='$uid'";
512         error_log("owned repos sql $sql for username $username");
513         $res = $conn->query($sql);
514         if($username == "") return false;\r
515         
516         $retval = false;
517         foreach($res as $row) {
518                 $id = $row["repos_id"];
519                 $retval[$id]["name"] = $row["repos_name"];
520                 $retval[$id]["desc"] = $row["repos_description"];
521                 $retval[$id]["id"] = $row["repos_id"];
522                 error_log(print_r($row, true));
523         }
524         
525         error_log(print_r($retval, true));\r
526         return $retval;\r
527 }
528
529 function gwvpmini_userLevel($id)
530 {
531         $conn = gwvpmini_ConnectDB();
532         
533         $sql = "select user_level from users where user_id='$id'";
534         
535         $res = $conn->query($sql);
536         
537         $lev = -1;
538         if(!$res) return -1;
539         foreach($res as $row) {
540                 $lev = (int)$row[0];
541         }
542         
543         return $lev;
544 }
545
546 function gwvpmini_GetUsers($startat = 0, $num = 10)
547 {
548         $conn = gwvpmini_ConnectDB();
549         
550         /*
551          *      CREATE TABLE "users" (
552         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
553         "user_full_name" TEXT,
554         "user_password" TEXT,
555         "user_username" TEXT,
556         "user_email" TEXT,
557         "user_desc" TEXT,
558         "user_level" TEXT,
559         "user_status" TEXT
560
561          */\r
562         \r
563         $sql = "select * from users where user_id>='$startat' order by user_id asc limit $num";
564         
565         $res = $conn->query($sql);
566         
567         $retval = false;
568         foreach($res as $row) {
569                 $id = $row["user_id"];
570                 $retval[$id]["fullname"] = $row["user_full_name"];
571                 $retval[$id]["username"] = $row["user_username"];
572                 $retval[$id]["email"] = $row["user_email"];
573                 $retval[$id]["desc"] = $row["user_desc"];
574                 $retval[$id]["level"] = $row["user_level"];
575                 $retval[$id]["status"] = $row["user_status"];
576                 $retval[$id]["id"] = $row["user_id"];
577         }
578         
579         return $retval;
580 }\r
581
582 function gwvp_findPeopleLike($search)\r
583 {\r
584         $conn = gwvpmini_ConnectDB();
585         
586         $sql = "select * from users where user_username like '%$search%' or user_full_name like '%$search%'";\r
587         \r
588         $res = $conn->query($sql);
589         
590         if(!$res) {
591                 error_log("SERACHUSER: $sql returned false");
592                 return false;
593         } else {
594                 error_log("SERACHUSER: $sql returned true");
595         }\r
596         \r
597         $retval = false;\r
598         foreach($res as $row) {\r
599                 $id = $row["user_id"];\r
600                 $retval[$id]["fullname"] = $row["user_full_name"];\r
601                 $retval[$id]["username"] = $row["user_username"];\r
602                 $retval[$id]["email"] = $row["user_email"];\r
603                 $retval[$id]["desc"] = $row["user_desc"];\r
604                 $retval[$id]["level"] = $row["user_level"];\r
605                 $retval[$id]["status"] = $row["user_status"];\r
606                 $retval[$id]["id"] = $row["user_id"];\r
607         }\r
608         
609         error_log("SEARCHUSER: array is ".print_r($retval, true));\r
610         return $retval;
611 }
612
613 function gwvpmini_GetRepos($startat=0, $num=200)\r
614 {\r
615         $conn = gwvpmini_ConnectDB();\r
616         \r
617         /*\r
618          *      CREATE TABLE "repos" (
619         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
620         "repos_name" TEXT,
621         "repos_description" TEXT,
622         "repos_owner" INTEGER
623         )';
624         \r
625                         */\r
626         \r
627         $sql = "select * from repos where repos_id > '$startat' order by repos_id asc limit $num";\r
628         \r
629         $res = $conn->query($sql);\r
630         \r
631         $retval = false;\r
632         foreach($res as $row) {\r
633                 $id = $row["repos_id"];\r
634                 $retval[$id]["name"] = $row["repos_name"];\r
635                 $retval[$id]["desc"] = $row["repos_description"];\r
636                 $retval[$id]["owner"] = $row["repos_owner"];\r
637                 $retval[$id]["id"] = $row["repos_id"];
638         }\r
639         \r
640         return $retval;\r
641         \r
642         \r
643 }\r
644
645 function gwvp_findReposLike($search)\r
646 {\r
647         $conn = gwvpmini_ConnectDB();
648         
649         /*
650          *      CREATE TABLE "repos" (
651         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
652         "repos_name" TEXT,
653         "repos_description" TEXT,
654         "repos_owner" INTEGER
655         )';
656         
657                         */
658         
659         $sql = "select * from repos where repos_name like '%$search%' or repos_description like '%$search%'";
660         
661         $res = $conn->query($sql);
662         
663         if(!$res) return false;
664         
665         $retval = false;
666         foreach($res as $row) {
667                 $id = $row["repos_id"];
668                 $retval[$id]["name"] = $row["repos_name"];
669                 $retval[$id]["desc"] = $row["repos_description"];
670                 $retval[$id]["owner"] = $row["repos_owner"];
671                 $retval[$id]["id"] = $row["repos_id"];
672         }
673         
674         return $retval;
675         \r
676 }\r
677 \r
678 function gwvpmini_GetNRepos()
679 {
680         $conn = gwvpmini_ConnectDB();
681
682         $sql = "select count(*) from repos";
683         
684         $res = $conn->query($sql);
685         
686         $retval = -1;
687         foreach($res as $row) {
688                 $retval = $row[0];
689         }
690         
691         return $retval;
692 }
693
694 \r
695 function gwvpmini_GetNUsers()\r
696 {\r
697         $conn = gwvpmini_ConnectDB();\r
698 \r
699         $sql = "select count(*) from users";\r
700 \r
701         $res = $conn->query($sql);\r
702 \r
703         $retval = -1;\r
704         foreach($res as $row) {\r
705                 $retval = $row[0];\r
706         }\r
707 \r
708         return $retval;\r
709 }\r
710
711
712 ?>