dbe294f682161117c48a7c7ad34e90085eb4fa69
[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 function gwvpmini_GetActivityLog($nentries = 20, $forid=-1)
59 {
60         /*
61          *              "activity_id" INTEGER PRIMARY KEY AUTOINCREMENT,
62                 "activity_type" TEXT,
63                 "activity_date" TEXT,
64                 "activity_user" TEXT,
65                 "activity_repo" TEXT,
66                 "activity_commitid" TEXT,
67                 "activity_commitlog" TEXT,
68                 "activity_visibleto" TEXT
69
70          */
71         $conn = gwvpmini_ConnectDB();\r
72         
73         if($forid == -1) {
74                 // we're searching for anonymous ones
75                 $sql = "select * from activity where activity_visibleto='a' order by activity_date desc limit $nentries";
76         } else {
77                 $sql = "select * from activity where activity_visibleto='a' or activity_visibleto='r' or activity_visibleto like '%:$forid:%' order by activity_date desc limit $nentries";
78         }
79         
80         $vls = $conn->query($sql);
81         
82         $nent = 0;
83         $ret = array();
84         if($vls !== false) foreach($vls as $vals) {
85                 $ret[$nent]["type"] = $vals["activity_type"];
86                 $ret[$nent]["date"] = $vals["activity_date"];
87                 $ret[$nent]["userid"] = $vals["activity_user"];
88                 $ret[$nent]["repoid"] = $vals["activity_repo"];
89                 $ret[$nent]["commitid"] = $vals["activity_commitid"];
90                 $ret[$nent]["commitlog"] = $vals["activity_commitlog"];
91                 $nent++;
92         }
93         
94         if($nent == 0) return false;
95         else return $ret;
96 }
97
98
99 function gwvpmini_getRepo($ownerid=null, $name=null, $id=null)\r
100 {\r
101         $conn = gwvpmini_ConnectDB();
102         
103         /*
104          *      $reposql = '
105         CREATE TABLE "repos" (
106         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
107         "repos_name" TEXT,
108         "repos_description" TEXT,
109         "repos_owner" INTEGER,
110         "repos_readperms" TEXT,
111         UNIQUE(repos_name)
112         )';
113
114          */\r
115 \r
116         if($ownerid != null) {\r
117                 $res = $conn->query("select * from repos where repos_owner='$ownerid'");\r
118         } else if($name != null) {\r
119                 $res = $conn->query("select * from repos where repos_name='$name'");\r
120         } else if($id != null) {\r
121                 $res = $conn->query("select * from repos where repos_id='$id'");\r
122         } else return false;\r
123 \r
124         $returns = false;
125         if(!$res) return false;\r
126         foreach($res as $u_res) {\r
127                 $returns["id"] = $u_res["repos_id"];\r
128                 $returns["name"] = $u_res["repos_name"];\r
129                 $returns["desc"] = $u_res["repos_description"];\r
130                 $returns["ownerid"] = $u_res["repos_owner"];
131                 $returns["status"] = $u_res["repos_status"];\r
132         }\r
133 \r
134         return $returns;\r
135 \r
136 }
137
138 // $rid = repo id
139 // $uid = user id (a for "anyone", r for "registered")
140 // $acc = 0 or 1, 0 = no access, 1 = read access, 2 = write
141 // first part of ths is the "base" repo permissions
142 // this is spec'd as b:t where t = a (anyone can read), r (only registered can read) or x (explicit read perms)
143 function gwvpmini_ChangeRepoPerm($rid, $uid, $acc)
144 {
145         $conn = gwvpmini_ConnectDB();
146         
147         $sql = "select repos_perms from repos where repos_id='$rid'";
148         
149         $res = $conn->query($sql);
150         
151         // error_log("CHANGEREPOPERMS: call with $rid, $uid, $acc");
152         
153         $cperms_t = "";
154         foreach($res as $row) {
155                 $cperms_t = $row[0];
156         }
157         
158         if($cperms_t === false) return false;
159         
160         $permsarray = array();
161         if($uid != "b") {
162                 if($cperms_t == "") {
163                         $permsarray[$uid] = $acc;
164                 } else {
165                         $permsarray = unserialize(base64_decode($cperms_t));
166                         $permsarray[$uid] = $acc;
167                         if($acc == 0) {
168                                 // error_log("PERMSUPDATE: REMOVE $uid");
169                                 unset($permsarray[$uid]);
170                         }
171                 }
172         } else {
173                 // error_log("CHANGEREPOPERMS for b of $acc");
174                 $permsarray["b"] = $acc;
175         }
176         
177         // check if base is now r or a, we can drop any 1's
178         if($permsarray["b"] == "a" || $permsarray["b"] == "r") {
179                 foreach($permsarray as $key => $val) {
180                         if($val == 1) {
181                                 // error_log("CHANGEREPOPERMS removed $key $val for base perm change");
182                                 unset($permsarray[$key]);
183                         }
184                 }
185         }
186         
187         if(is_array($permsarray)) {
188                 if(!isset($permsarray["b"])) {
189                         // something went wrong, repalce b bit
190                         $permsarray["b"] = "a";
191                 }
192         } else {
193                 // something went even wronger
194                 $permsarray["b"] = "a";
195         }
196         
197
198         $encperms = base64_encode(serialize($permsarray));
199         
200         $sql = "update repos set repos_perms='$encperms' where repos_id='$rid'";\r
201
202         // error_log("PERMSARRAYNOW $sql ".print_r($permsarray,true));\r
203         
204         $conn->query($sql);
205         
206 }
207
208 function gwvpmini_GetRepoPerms($rid)
209 {
210         $conn = gwvpmini_ConnectDB();\r
211         \r
212         $sql = "select repos_perms from repos where repos_id='$rid'";\r
213         \r
214         $res = $conn->query($sql);\r
215         \r
216         $cperms_t = false;\r
217         if($res !== false) foreach($res as $row) {\r
218                 $cperms_t = $row[0];\r
219         }\r
220         \r
221         if($cperms_t === false) return false;\r
222         \r
223         $permsarray = unserialize(base64_decode($cperms_t));
224         
225         return $permsarray;
226 }
227
228 //returns 0 for none, 1 for read, 2 for writes
229 function gwvpmini_GetRepoPerm($rid, $uid)
230 {
231         $conn = gwvpmini_ConnectDB();\r
232         \r
233         $dets = gwvpmini_getRepo(null, null, $rid);
234         
235         $sql = "select repos_perms from repos where repos_id='$rid'";\r
236         \r
237         $res = $conn->query($sql);
238         
239         $cperms_t = false;\r
240         if($res !== false) foreach($res as $row) {\r
241                 $cperms_t = $row[0];\r
242         }\r
243         \r
244         if($cperms_t === false) return 0;
245         
246         // error_log("PERMSCHECK $rid, $uid:".print_r($dets, true));\r
247         \r
248         if($dets === false) return 0;
249         
250         if($dets["ownerid"] == $uid) return 2;\r
251         \r
252         $permsarray = unserialize(base64_decode($cperms_t));
253         
254         error_log("PERMSARRAY: with call for $rid and user $uid ".print_r($permsarray,true));
255         
256         
257         
258         $perm = 0;
259         if($uid != "a") {
260                 if(isset($permsarray[$uid])) {
261                         $perm = $permsarray[$uid];
262                 } else if($permsarray["b"] == "a" ||$permsarray["b"] == "r") {
263                         $perm = 1;
264                 }
265         } else {
266                 if($permsarray["b"] == "a") $perm = 1;
267         }
268         
269         return $perm;\r
270
271 }
272
273 function gwvpmini_RemoveRepoDB($id)
274 {
275         $conn = gwvpmini_ConnectDB();\r
276         \r
277         if($id < 0) return;\r
278         \r
279         $sql = "delete from repos where repos_id='$id'";\r
280         \r
281         return $conn->query($sql);\r
282         
283 }
284
285 function gwvpmini_RemoveUser($uid)
286 {
287         $conn = gwvpmini_ConnectDB();\r
288         
289         if($uid < 0) return;
290         
291         $sql = "delete from users where user_id='$uid'";
292         
293         return $conn->query($sql);
294 }
295
296 function gwvpmini_UpdateUserEmail($uid, $email)
297 {
298         $conn = gwvpmini_ConnectDB();\r
299         \r
300         if($uid < 0) return;\r
301         \r
302         $sql = "update users set user_email='$email' where user_id='$uid'";\r
303         \r
304         return $conn->query($sql);
305 }
306
307 function gwvpmini_UpdateUserDesc($uid, $desc)\r
308 {\r
309         $conn = gwvpmini_ConnectDB();\r
310 \r
311         if($uid < 0) return;\r
312 \r
313         $sql = "update users set user_desc='$desc' where user_id='$uid'";\r
314 \r
315         return $conn->query($sql);\r
316 }\r
317
318 function gwvpmini_SetUserStatusAdmin($uid, $adminstat)
319 {
320         $conn = gwvpmini_ConnectDB();\r
321         \r
322         if($uid < 0) return;\r
323         \r
324         $sql = "update users set user_level='$adminstat' where user_id='$uid'";\r
325         \r
326         return $conn->query($sql);
327 }
328
329 function gwvpmini_UpdateUserPassword($uid, $pass)
330 {
331         $conn = gwvpmini_ConnectDB();
332
333         if($uid < 0) return;
334
335         $sql = "update users set user_password='".sha1($pass)."' where user_id='$uid'";
336
337         return $conn->query($sql);
338 }
339
340 function gwvpmini_DisableUser($uid)\r
341 {\r
342         $conn = gwvpmini_ConnectDB();\r
343 \r
344         if($uid < 0) return;\r
345 \r
346         $sql = "update users set user_status=1 where user_id='$uid'";\r
347 \r
348         return $conn->query($sql);\r
349 }
350
351 function gwvpmini_UpdateRepoDescription($rid, $desc)
352 {
353         $conn = gwvpmini_ConnectDB();\r
354         
355         // remove any tag elements
356         $newdesc_r = preg_replace("/[\<\>\;]+/", "", $desc);
357         $newdesc = preg_replace("/\n/", "<br>", $newdesc_r);
358         
359         $sql = "update repos set repos_description='$newdesc' where repos_id='$rid'";
360         
361         return $conn->query($sql);
362 }\r
363 \r
364 function gwvpmini_EnableUser($uid)\r
365 {\r
366         $conn = gwvpmini_ConnectDB();\r
367 \r
368         if($uid < 0) return;\r
369 \r
370         $sql = "update users set user_status=0 where user_id='$uid'";\r
371 \r
372         return $conn->query($sql);\r
373 }\r
374 \r
375 function gwvpmini_DisableRepo($rid)
376 {
377         $conn = gwvpmini_ConnectDB();\r
378         \r
379         if($rid < 0) return;\r
380         \r
381         $sql = "update repos set repos_status=1 where repos_id='$rid'";\r
382         \r
383         return $conn->query($sql);
384 }\r
385
386 function gwvpmini_EnableRepo($rid)\r
387 {\r
388         $conn = gwvpmini_ConnectDB();\r
389 \r
390         if($rid < 0) return;
391         
392         $sql = "update repos set repos_status=0 where repos_id='$rid'";
393         \r
394         return $conn->query($sql);\r
395 }\r
396 \r
397
398 function gwvpmini_ConnectDB()\r
399 {\r
400         global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;\r
401 \r
402         // first check if $DB_CONNECTION IS live\r
403         //// error_log("in connection $db_type, $db_name");
404         $db_url = false;\r
405 \r
406         if($DB_CONNECTION != false) return $DB_CONNECTION;\r
407 \r
408         if($db_type == "sqlite") {\r
409                 $db_url = $db_name;\r
410                 if(!file_exists($db_name)) {\r
411                         //// error_log("$db_name does not exist - problem");
412                         // TODO: NEED A SETUP AGENT!
413                         gwvpmini_dbCreateSQLiteStructure($db_name);
414                         gwvpmini_setConfigVal("repodir", "$data_directory/repos");\r
415                 }\r
416         }\r
417 \r
418         // and here we go with pdo.\r
419         // error_log("attmpting to open db, $db_type:$db_url");\r
420         try {\r
421                 $DB_CONNECTION = new PDO("$db_type:$db_url");\r
422         } catch(PDOException $exep) {\r
423                 // error_log("execpt on db open");\r
424                 return false;\r
425         }\r
426 \r
427         return $DB_CONNECTION;\r
428 }
429
430 function gwvpmini_UpdateStatusFromConfirm($confirmhash)
431 {
432         $conn = gwvpmini_ConnectDB();\r
433         \r
434         $sql = "select count(*) from users where user_status='2:$confirmhash'";
435         
436         $res = $conn->query($sql);
437         
438         if(!$res) return false;
439         
440         foreach($res as $row) {
441                 $retval = $row[0];
442         }
443         
444         if($retval > 0) {
445                 $sql = "update users set user_status='0' where user_status='2:$confirmhash'";
446                 return $conn->query($sql);
447         } else return false;
448 }
449
450
451 function gwvpmini_AddUser($username, $password, $fullname, $email, $desc, $level, $status)
452 {
453         \r
454         
455         \r
456         $conn = gwvpmini_ConnectDB();\r
457         \r
458         $sql = "insert into 'users' values ( null, '$fullname', '".sha1($password)."', '$username', '$email', '$desc', '$level', '$status')";\r
459         \r
460         $res = $conn->query($sql);
461         if(!$res) return -1;
462         
463         $sql = "select user_id from users where user_username='$username'";\r
464         $res = $conn->query($sql);\r
465         if(!$res) return -1;\r
466         
467         $retval = -1;
468         foreach($res as $row) {
469                 $retval = $row[0];
470         }
471         
472         return $retval;
473 }\r
474
475 function gwvpmini_AddActivityLog($type, $userid, $repoid, $commitid, $commitlog, $visibleto="a")
476 {
477         /*
478          *      CREATE TABLE "activity" (
479                 "activity_id" INTEGER PRIMARY KEY AUTOINCREMENT,
480                 "activity_type" TEXT,
481                 "activity_date" TEXT,
482                 "activity_user" TEXT,
483                 "activity_repo" TEXT,
484                 "activity_commitid" TEXT,
485                 "activity_commitlog" TEXT,
486                 "activity_visibleto" TEXT
487         )';
488
489          */
490         
491         $conn = gwvpmini_ConnectDB();
492         
493         // TODO: implement visibility
494         //$visibleto = "a";\r
495         \r
496         $sql = "insert into 'activity' values ( null, '$type', '".time()."', '$userid', '$repoid', '$commitid', '$commitlog', '$visibleto')";
497         
498         // error_log("SQL IS $sql");\r
499         \r
500         $res = $conn->query($sql);\r
501         if(!$res) return -1;
502         return true;
503 }
504
505 function gwvpmini_dbCreateSQLiteStructure($dbloc)\r
506 {\r
507         $usersql = '\r
508         CREATE TABLE "users" (\r
509         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
510         "user_full_name" TEXT,\r
511         "user_password" TEXT,\r
512         "user_username" TEXT,\r
513         "user_email" TEXT,\r
514         "user_desc" TEXT,
515         "user_level" TEXT,\r
516         "user_status" TEXT,
517         UNIQUE(user_username)\r
518         )';\r
519 \r
520         $initialuser_admin = '
521         insert into "users" values ( null, "Administrator", "'.sha1("password").'", "admin", "admin@localhost", "the admin", "1", "0");\r
522         ';\r
523
524         $initialuser_user = '\r
525         insert into "users" values ( null, "User", "'.sha1("password").'", "user", "user@localhost", "the user", "0", "0");\r
526         ';\r
527         \r
528         $reposql = '\r
529         CREATE TABLE "repos" (\r
530         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
531         "repos_name" TEXT,\r
532         "repos_description" TEXT,\r
533         "repos_owner" INTEGER,
534         "repos_perms" TEXT,
535         "repos_status" TEXT,
536         "repos_origin" TEXT,
537         UNIQUE(repos_name)\r
538         )';\r
539 \r
540         // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
541         // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
542         // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
543         // TODO: is this sufficient? i have to think about it
544         
545         
546         // type for now will only be "git"
547         // date is obvious
548         // desc is a desction of the activity
549         // link is of the form "repo,reponame,repoid:user,username,useremail,userid" so it
550         // can be attached simply
551         // viewby is a simple list of uid's that should be able to see it... "r" for all registered
552         // "a" for everyone
553         $activitysql = '
554         CREATE TABLE "activity" (
555                 "activity_id" INTEGER PRIMARY KEY AUTOINCREMENT,
556                 "activity_type" TEXT,
557                 "activity_date" TEXT,
558                 "activity_user" TEXT,
559                 "activity_repo" TEXT,
560                 "activity_commitid" TEXT,
561                 "activity_commitlog" TEXT,
562                 "activity_visibleto" TEXT
563         )';\r
564 \r
565         $configsql = '\r
566         CREATE TABLE "config" (\r
567         "config_name" TEXT,\r
568         "config_value" TEXT\r
569         )';\r
570 \r
571         try {\r
572                 $DB_CONNECTION = new PDO("sqlite:$dbloc");\r
573         } catch(PDOException $exep) {\r
574                 // error_log("execpt on db open");\r
575                 return false;\r
576         }\r
577
578         $DB_CONNECTION->query($usersql);\r
579         $DB_CONNECTION->query($initialuser_admin);
580         $DB_CONNECTION->query($initialuser_user);
581         $DB_CONNECTION->query($reposql);\r
582         $DB_CONNECTION->query($configsql);
583         $DB_CONNECTION->query($activitysql);\r
584 }
585
586 function gwvpmini_getConfigVal($confname)\r
587 {\r
588         /*\r
589          *      $configsql = '\r
590         CREATE TABLE "config" (\r
591                         "config_name" TEXT,\r
592                         "config_value" TEXT\r
593         )';\r
594 \r
595         */\r
596 \r
597         $conn = gwvpmini_ConnectDB();\r
598 \r
599         $sql = "select config_value from config where config_name='$confname'";\r
600 \r
601         $res = $conn->query($sql);\r
602 \r
603         $return = null;\r
604         foreach($res as $val) {\r
605                 $return = $val["config_value"];\r
606         }\r
607 \r
608         return $return;\r
609 }\r
610 \r
611 function gwvpmini_eraseConfigVal($confname)\r
612 {\r
613         /*\r
614          *      $configsql = '\r
615         CREATE TABLE "config" (\r
616                         "config_name" TEXT,\r
617                         "config_value" TEXT\r
618         )';\r
619 \r
620         */\r
621 \r
622         $conn = gwvpmini_ConnectDB();\r
623 \r
624         $sql = "delete from config where config_name='$confname'";\r
625 \r
626         return $conn->query($sql);\r
627 }
628
629 function gwvpmini_GetRepoId($reponame)
630 {
631
632         /*
633          *      $reposql = '
634         CREATE TABLE "repos" (
635         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
636         "repos_name" TEXT,
637         "repos_description" TEXT,
638         "repos_owner" INTEGER
639         )';
640
641          */
642         
643         $conn = gwvpmini_ConnectDB();
644         
645         $sql = "select repos_id from repos where repos_name='$reponame'";
646         
647         $res = $conn->query($sql);
648         
649         $retval = -1;
650         if(!$res) return -1;
651         foreach($res as $row) {
652                 $retval = (int)$row[0];
653         }
654         
655         return $retval;
656 }
657
658 function gwvpmini_GetRepoDescFromName($reponame)\r
659 {\r
660 \r
661         /*\r
662          *      $reposql = '\r
663         CREATE TABLE "repos" (\r
664                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
665                         "repos_name" TEXT,\r
666                         "repos_description" TEXT,\r
667                         "repos_owner" INTEGER\r
668         )';\r
669 \r
670         */\r
671 \r
672         $conn = gwvpmini_ConnectDB();\r
673 \r
674         $sql = "select repos_description from repos where repos_name='$reponame'";
675         // error_log("desc for name sql: $sql");\r
676 \r
677         $res = $conn->query($sql);\r
678 \r
679         $retval = -1;\r
680         if(!$res) return -1;\r
681         foreach($res as $row) {\r
682                 $retval = $row[0];\r
683         }\r
684 \r
685         return $retval;\r
686 }
687 \r
688 function gwvpmini_GetRepoOwnerDetailsFromName($reponame)\r
689 {\r
690 \r
691         /*\r
692          *      $reposql = '\r
693         CREATE TABLE "repos" (\r
694                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
695                         "repos_name" TEXT,\r
696                         "repos_description" TEXT,\r
697                         "repos_owner" INTEGER\r
698         )';
699         
700                 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
701         "user_full_name" TEXT,
702         "user_password" TEXT,
703         "user_username" TEXT,
704         "user_email" TEXT,
705         "user_desc" TEXT,
706         "user_level" TEXT,
707         "user_status" TEXT,
708         UNIQUE(user_username)\r
709 \r
710         */\r
711 \r
712         $conn = gwvpmini_ConnectDB();\r
713 \r
714         $sql = "select users.* from repos,users where repos_name='$reponame' and repos_owner=user_id";\r
715 \r
716         $res = $conn->query($sql);\r
717 \r
718         $retval = -1;\r
719         if(!$res) return -1;\r
720         foreach($res as $row) {
721                 $retval = array();
722                 // error_log("STUFF2: ".print_r($row,true));\r
723                 $retval["id"] = $row["user_id"];
724                 $retval["fullname"] = $row["user_full_name"];
725                 $retval["username"] = $row["user_username"];
726                 $retval["email"] = $row["user_email"];
727                 $retval["desc"] = $row["user_desc"];
728                 $retval["level"] = $row["user_level"];
729                 $retval["status"] = $row["user_status"];\r
730         }\r
731 \r
732         return $retval;\r
733 }\r
734 \r
735 function gwvpmini_setConfigVal($confname, $confval)\r
736 {\r
737         /*\r
738          *      $configsql = '\r
739         CREATE TABLE "config" (\r
740                         "config_name" TEXT,\r
741                         "config_value" TEXT\r
742         )';\r
743 \r
744         */\r
745         gwvpmini_eraseConfigVal($confname);\r
746 \r
747         $conn = gwvpmini_ConnectDB();
748         
749         $sql = "delete from config where config_name='$confname'";
750         $conn->query($sql);\r
751 \r
752         $sql = "insert into config values('$confname', '$confval')";\r
753 \r
754         return $conn->query($sql);\r
755 }
756
757 function gwvpmini_AddRepo($name, $desc, $ownerid, $defperms, $clonefrom)
758 {
759         
760         // error_log("addrepo in db for $name, $desc, $ownerid");
761         $conn = gwvpmini_ConnectDB();\r
762         
763         $perms["b"] = $defperms;
764         
765         $encperms = base64_encode(serialize($perms));
766         
767         if($clonefrom === false) $clonefrom = "";
768         \r
769         $sql = "insert into repos values (null, '$name', '$desc', '$ownerid', '$encperms', 0, '$clonefrom')";\r
770         \r
771         $conn->query($sql);\r
772 }
773
774 function gwvpmini_GetUserId($username)
775 {
776         $conn = gwvpmini_ConnectDB();\r
777         
778         $sql = "select user_id from users where user_username='$username'";
779
780         // error_log("userid sql $sql");\r
781         
782         $res = $conn->query($sql);
783         
784         $retval = false;
785         foreach($res as $row) {
786                 $retval = $row[0];
787         }
788         
789         return $retval;
790 }
791
792 function gwvpmini_GetUserNameFromEmail($email)\r
793 {\r
794         $conn = gwvpmini_ConnectDB();\r
795 \r
796         $sql = "select user_username from users where user_email='$email'";\r
797 \r
798         // error_log("username sql $sql");\r
799 \r
800         $res = $conn->query($sql);\r
801 \r
802         $retval = false;\r
803         foreach($res as $row) {\r
804                 $retval = $row[0];\r
805         }\r
806 \r
807         return $retval;\r
808 }
809
810 function gwvpmini_GetOwnedRepos($username)\r
811 {
812         /*
813          *      CREATE TABLE "repos" (
814         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
815         "repos_name" TEXT,
816         "repos_description" TEXT,
817         "repos_owner" INTEGER
818         )';
819
820          */
821         $conn = gwvpmini_ConnectDB();
822         
823         
824         $uid = gwvpmini_GetUserId($username);
825         $sql = "select * from repos where repos_owner='$uid'";
826         // error_log("owned repos sql $sql for username $username");
827         $res = $conn->query($sql);
828         if($username == "") return false;\r
829         
830         $retval = false;
831         foreach($res as $row) {
832                 $id = $row["repos_id"];
833                 $retval[$id]["name"] = $row["repos_name"];
834                 $retval[$id]["desc"] = $row["repos_description"];
835                 $retval[$id]["id"] = $row["repos_id"];
836                 $retval[$id]["status"] = $row["repos_status"];
837                 // error_log(print_r($row, true));
838         }
839         
840         // error_log(print_r($retval, true));\r
841         return $retval;\r
842 }
843
844 function gwvpmini_GetContributedRepos($username)\r
845 {\r
846         /*\r
847          *      CREATE TABLE "repos" (\r
848                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
849                         "repos_name" TEXT,\r
850                         "repos_description" TEXT,\r
851                         "repos_owner" INTEGER\r
852          )';\r
853 \r
854         */\r
855         $conn = gwvpmini_ConnectDB();\r
856 \r
857 \r
858         $uid = gwvpmini_GetUserId($username);\r
859         $sql = "select repos_id,repos_description,repos_perms,repos_owner,repos_status,repos_name from repos";\r
860         $res = $conn->query($sql);\r
861         if($username == "") return false;\r
862 \r
863         $retval = false;
864         $rids = null;
865         $i = 0;\r
866         foreach($res as $row) {
867                 $perms = unserialize(base64_decode($row["repos_perms"]));
868                 // error_log("CONTRIB: $uid for ".$row["repos_id"]." - ".print_r($perms,true));
869                 if(isset($perms["$uid"])) if($perms["$uid"] > 1) {
870                         $rids[$i]["id"] = $row["repos_id"];
871                         $rids[$i]["desc"] = $row["repos_description"];
872                         $rids[$i]["owner"] = $row["repos_owner"];
873                         $rids[$i]["status"] = $row["repos_status"];
874                         $rids[$i]["name"] = $row["repos_name"];
875                         $i++;
876                 }
877         }
878         $retval = $rids;
879         
880         if($i == 0) {
881                 // error_log("CONTRIBREPOS: no repos found?");
882                 return false;
883         }\r
884 \r
885         // error_log("CONTRIBREPOS: ".print_r($retval, true));\r
886         return $retval;\r
887 }
888
889 function gwvpmini_userLevel($id)
890 {
891         $conn = gwvpmini_ConnectDB();
892         
893         $sql = "select user_level from users where user_id='$id'";
894         
895         $res = $conn->query($sql);
896         
897         $lev = -1;
898         if(!$res) return -1;
899         foreach($res as $row) {
900                 $lev = (int)$row[0];
901         }
902         
903         return $lev;
904 }
905
906 function gwvpmini_GetUsers($startat = 0, $num = 10)
907 {
908         $conn = gwvpmini_ConnectDB();
909         
910         /*
911          *      CREATE TABLE "users" (
912         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
913         "user_full_name" TEXT,
914         "user_password" TEXT,
915         "user_username" TEXT,
916         "user_email" TEXT,
917         "user_desc" TEXT,
918         "user_level" TEXT,
919         "user_status" TEXT
920
921          */\r
922         \r
923         $sql = "select * from users where user_id>='$startat' order by user_id asc limit $num";
924         
925         $res = $conn->query($sql);
926         
927         $retval = false;
928         foreach($res as $row) {
929                 $id = $row["user_id"];
930                 $retval[$id]["fullname"] = $row["user_full_name"];
931                 $retval[$id]["username"] = $row["user_username"];
932                 $retval[$id]["email"] = $row["user_email"];
933                 $retval[$id]["desc"] = $row["user_desc"];
934                 $retval[$id]["level"] = $row["user_level"];
935                 $retval[$id]["status"] = $row["user_status"];
936                 $retval[$id]["id"] = $row["user_id"];
937         }
938         
939         return $retval;
940 }\r
941
942 function gwvpmini_findPeopleLike($search)\r
943 {\r
944         $conn = gwvpmini_ConnectDB();
945         
946         $sql = "select * from users where user_username like '%$search%' or user_full_name like '%$search%'";\r
947         \r
948         $res = $conn->query($sql);
949         
950         if(!$res) {
951                 // error_log("SERACHUSER: $sql returned false");
952                 return false;
953         } else {
954                 // error_log("SERACHUSER: $sql returned true");
955         }\r
956         \r
957         $retval = false;\r
958         foreach($res as $row) {\r
959                 $id = $row["user_id"];\r
960                 $retval[$id]["fullname"] = $row["user_full_name"];\r
961                 $retval[$id]["username"] = $row["user_username"];\r
962                 $retval[$id]["email"] = $row["user_email"];\r
963                 $retval[$id]["desc"] = $row["user_desc"];\r
964                 $retval[$id]["level"] = $row["user_level"];\r
965                 $retval[$id]["status"] = $row["user_status"];\r
966                 $retval[$id]["id"] = $row["user_id"];\r
967         }\r
968         
969         // error_log("SEARCHUSER: array is ".print_r($retval, true));\r
970         return $retval;
971 }
972
973 function gwvpmini_GetRepos($startat=0, $num=200)\r
974 {\r
975         $conn = gwvpmini_ConnectDB();\r
976         \r
977         /*\r
978          *      CREATE TABLE "repos" (
979         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
980         "repos_name" TEXT,
981         "repos_description" TEXT,
982         "repos_owner" INTEGER
983         )';
984         \r
985                         */\r
986         \r
987         $sql = "select * from repos where repos_id > '$startat' order by repos_id asc limit $num";\r
988         \r
989         $res = $conn->query($sql);\r
990         \r
991         $retval = false;\r
992         foreach($res as $row) {\r
993                 $id = $row["repos_id"];\r
994                 $retval[$id]["name"] = $row["repos_name"];\r
995                 $retval[$id]["desc"] = $row["repos_description"];\r
996                 $retval[$id]["owner"] = $row["repos_owner"];\r
997                 $retval[$id]["id"] = $row["repos_id"];
998                 $retval[$id]["status"] = $row["repos_status"];          
999         }\r
1000         \r
1001         return $retval;\r
1002         \r
1003         \r
1004 }\r
1005
1006 function gwvpmini_findReposLike($search)\r
1007 {\r
1008         $conn = gwvpmini_ConnectDB();
1009         
1010         /*
1011          *      CREATE TABLE "repos" (
1012         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
1013         "repos_name" TEXT,
1014         "repos_description" TEXT,
1015         "repos_owner" INTEGER
1016         )';
1017         
1018                         */
1019         
1020         $sql = "select * from repos where repos_name like '%$search%' or repos_description like '%$search%'";
1021         
1022         $res = $conn->query($sql);
1023         
1024         if(!$res) return false;
1025         
1026         $retval = false;
1027         foreach($res as $row) {
1028                 $id = $row["repos_id"];
1029                 $retval[$id]["name"] = $row["repos_name"];
1030                 $retval[$id]["desc"] = $row["repos_description"];
1031                 $retval[$id]["owner"] = $row["repos_owner"];
1032                 $retval[$id]["id"] = $row["repos_id"];
1033                 $retval[$id]["status"] = $row["repos_status"];
1034         }
1035         
1036         return $retval;
1037         \r
1038 }\r
1039 \r
1040 function gwvpmini_GetNRepos()
1041 {
1042         $conn = gwvpmini_ConnectDB();
1043
1044         $sql = "select count(*) from repos";
1045         
1046         $res = $conn->query($sql);
1047         
1048         $retval = -1;
1049         foreach($res as $row) {
1050                 $retval = $row[0];
1051         }
1052         
1053         return $retval;
1054 }
1055
1056 \r
1057 function gwvpmini_GetNUsers()\r
1058 {\r
1059         $conn = gwvpmini_ConnectDB();\r
1060 \r
1061         $sql = "select count(*) from users";\r
1062 \r
1063         $res = $conn->query($sql);\r
1064 \r
1065         $retval = -1;\r
1066         foreach($res as $row) {\r
1067                 $retval = $row[0];\r
1068         }\r
1069 \r
1070         return $retval;\r
1071 }\r
1072
1073
1074 ?>