ok, remote clones are working... i think... need some data validation
[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 // TODO: deal with multiple repos from one ownerid
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
375 function gwvpmini_SetRepoCloning($rid)\r
376 {\r
377         $conn = gwvpmini_ConnectDB();\r
378 \r
379         if($rid < 0) return;\r
380 \r
381         $sql = "update repos set repos_status=2 where repos_id='$rid'";\r
382 \r
383         return $conn->query($sql);\r
384 }\r
385 \r
386 function gwvpmini_DisableRepo($rid)
387 {
388         $conn = gwvpmini_ConnectDB();\r
389         \r
390         if($rid < 0) return;\r
391         \r
392         $sql = "update repos set repos_status=1 where repos_id='$rid'";\r
393         \r
394         return $conn->query($sql);
395 }\r
396
397 function gwvpmini_EnableRepo($rid)\r
398 {\r
399         $conn = gwvpmini_ConnectDB();\r
400 \r
401         if($rid < 0) return;
402         
403         $sql = "update repos set repos_status=0 where repos_id='$rid'";
404         \r
405         return $conn->query($sql);\r
406 }\r
407 \r
408
409 function gwvpmini_ConnectDB()\r
410 {\r
411         global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;\r
412 \r
413         // first check if $DB_CONNECTION IS live\r
414         //// error_log("in connection $db_type, $db_name");
415         $db_url = false;\r
416 \r
417         if($DB_CONNECTION != false) return $DB_CONNECTION;\r
418 \r
419         if($db_type == "sqlite") {\r
420                 $db_url = $db_name;\r
421                 if(!file_exists($db_name)) {\r
422                         //// error_log("$db_name does not exist - problem");
423                         // TODO: NEED A SETUP AGENT!
424                         gwvpmini_dbCreateSQLiteStructure($db_name);
425                         gwvpmini_setConfigVal("repodir", "$data_directory/repos");\r
426                 }\r
427         }\r
428 \r
429         // and here we go with pdo.\r
430         // error_log("attmpting to open db, $db_type:$db_url");\r
431         try {\r
432                 $DB_CONNECTION = new PDO("$db_type:$db_url");\r
433         } catch(PDOException $exep) {\r
434                 // error_log("execpt on db open");\r
435                 return false;\r
436         }\r
437 \r
438         return $DB_CONNECTION;\r
439 }
440
441 function gwvpmini_UpdateStatusFromConfirm($confirmhash)
442 {
443         $conn = gwvpmini_ConnectDB();\r
444         \r
445         $sql = "select count(*) from users where user_status='2:$confirmhash'";
446         
447         $res = $conn->query($sql);
448         
449         if(!$res) return false;
450         
451         foreach($res as $row) {
452                 $retval = $row[0];
453         }
454         
455         if($retval > 0) {
456                 $sql = "update users set user_status='0' where user_status='2:$confirmhash'";
457                 return $conn->query($sql);
458         } else return false;
459 }
460
461
462 function gwvpmini_AddUser($username, $password, $fullname, $email, $desc, $level, $status)
463 {
464         \r
465         
466         \r
467         $conn = gwvpmini_ConnectDB();\r
468         \r
469         $sql = "insert into 'users' values ( null, '$fullname', '".sha1($password)."', '$username', '$email', '$desc', '$level', '$status')";\r
470         \r
471         $res = $conn->query($sql);
472         if(!$res) return -1;
473         
474         $sql = "select user_id from users where user_username='$username'";\r
475         $res = $conn->query($sql);\r
476         if(!$res) return -1;\r
477         
478         $retval = -1;
479         foreach($res as $row) {
480                 $retval = $row[0];
481         }
482         
483         return $retval;
484 }\r
485
486 function gwvpmini_AddActivityLog($type, $userid, $repoid, $commitid, $commitlog, $visibleto="a")
487 {
488         /*
489          *      CREATE TABLE "activity" (
490                 "activity_id" INTEGER PRIMARY KEY AUTOINCREMENT,
491                 "activity_type" TEXT,
492                 "activity_date" TEXT,
493                 "activity_user" TEXT,
494                 "activity_repo" TEXT,
495                 "activity_commitid" TEXT,
496                 "activity_commitlog" TEXT,
497                 "activity_visibleto" TEXT
498         )';
499
500          */
501         
502         $conn = gwvpmini_ConnectDB();
503         
504         // TODO: implement visibility
505         //$visibleto = "a";\r
506         \r
507         $sql = "insert into 'activity' values ( null, '$type', '".time()."', '$userid', '$repoid', '$commitid', '$commitlog', '$visibleto')";
508         
509         // error_log("SQL IS $sql");\r
510         \r
511         $res = $conn->query($sql);\r
512         if(!$res) return -1;
513         return true;
514 }
515
516 function gwvpmini_dbCreateSQLiteStructure($dbloc)\r
517 {\r
518         $usersql = '\r
519         CREATE TABLE "users" (\r
520         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
521         "user_full_name" TEXT,\r
522         "user_password" TEXT,\r
523         "user_username" TEXT,\r
524         "user_email" TEXT,\r
525         "user_desc" TEXT,
526         "user_level" TEXT,\r
527         "user_status" TEXT,
528         UNIQUE(user_username)\r
529         )';\r
530 \r
531         $initialuser_admin = '
532         insert into "users" values ( null, "Administrator", "'.sha1("password").'", "admin", "admin@localhost", "the admin", "1", "0");\r
533         ';\r
534
535         $initialuser_user = '\r
536         insert into "users" values ( null, "User", "'.sha1("password").'", "user", "user@localhost", "the user", "0", "0");\r
537         ';\r
538         \r
539         $reposql = '\r
540         CREATE TABLE "repos" (\r
541         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
542         "repos_name" TEXT,\r
543         "repos_description" TEXT,\r
544         "repos_owner" INTEGER,
545         "repos_perms" TEXT,
546         "repos_status" TEXT,
547         "repos_origin" TEXT,
548         UNIQUE(repos_name)\r
549         )';\r
550 \r
551         // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
552         // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
553         // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
554         // TODO: is this sufficient? i have to think about it
555         
556         
557         // type for now will only be "git"
558         // date is obvious
559         // desc is a desction of the activity
560         // link is of the form "repo,reponame,repoid:user,username,useremail,userid" so it
561         // can be attached simply
562         // viewby is a simple list of uid's that should be able to see it... "r" for all registered
563         // "a" for everyone
564         $activitysql = '
565         CREATE TABLE "activity" (
566                 "activity_id" INTEGER PRIMARY KEY AUTOINCREMENT,
567                 "activity_type" TEXT,
568                 "activity_date" TEXT,
569                 "activity_user" TEXT,
570                 "activity_repo" TEXT,
571                 "activity_commitid" TEXT,
572                 "activity_commitlog" TEXT,
573                 "activity_visibleto" TEXT
574         )';\r
575 \r
576         $configsql = '\r
577         CREATE TABLE "config" (\r
578         "config_name" TEXT,\r
579         "config_value" TEXT\r
580         )';\r
581 \r
582         try {\r
583                 $DB_CONNECTION = new PDO("sqlite:$dbloc");\r
584         } catch(PDOException $exep) {\r
585                 // error_log("execpt on db open");\r
586                 return false;\r
587         }\r
588
589         $DB_CONNECTION->query($usersql);\r
590         $DB_CONNECTION->query($initialuser_admin);
591         $DB_CONNECTION->query($initialuser_user);
592         $DB_CONNECTION->query($reposql);\r
593         $DB_CONNECTION->query($configsql);
594         $DB_CONNECTION->query($activitysql);\r
595 }
596
597 function gwvpmini_getConfigVal($confname)\r
598 {\r
599         /*\r
600          *      $configsql = '\r
601         CREATE TABLE "config" (\r
602                         "config_name" TEXT,\r
603                         "config_value" TEXT\r
604         )';\r
605 \r
606         */\r
607 \r
608         $conn = gwvpmini_ConnectDB();\r
609 \r
610         $sql = "select config_value from config where config_name='$confname'";\r
611 \r
612         $res = $conn->query($sql);\r
613 \r
614         $return = null;\r
615         foreach($res as $val) {\r
616                 $return = $val["config_value"];\r
617         }\r
618 \r
619         return $return;\r
620 }\r
621 \r
622 function gwvpmini_eraseConfigVal($confname)\r
623 {\r
624         /*\r
625          *      $configsql = '\r
626         CREATE TABLE "config" (\r
627                         "config_name" TEXT,\r
628                         "config_value" TEXT\r
629         )';\r
630 \r
631         */\r
632 \r
633         $conn = gwvpmini_ConnectDB();\r
634 \r
635         $sql = "delete from config where config_name='$confname'";\r
636 \r
637         return $conn->query($sql);\r
638 }
639
640 function gwvpmini_GetRepoId($reponame)
641 {
642
643         /*
644          *      $reposql = '
645         CREATE TABLE "repos" (
646         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
647         "repos_name" TEXT,
648         "repos_description" TEXT,
649         "repos_owner" INTEGER
650         )';
651
652          */
653         
654         $conn = gwvpmini_ConnectDB();
655         
656         $sql = "select repos_id from repos where repos_name='$reponame'";
657         
658         $res = $conn->query($sql);
659         
660         $retval = -1;
661         if(!$res) return -1;
662         foreach($res as $row) {
663                 $retval = (int)$row[0];
664         }
665         
666         return $retval;
667 }
668
669 function gwvpmini_GetRepoDescFromName($reponame)\r
670 {\r
671 \r
672         /*\r
673          *      $reposql = '\r
674         CREATE TABLE "repos" (\r
675                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
676                         "repos_name" TEXT,\r
677                         "repos_description" TEXT,\r
678                         "repos_owner" INTEGER\r
679         )';\r
680 \r
681         */\r
682 \r
683         $conn = gwvpmini_ConnectDB();\r
684 \r
685         $sql = "select repos_description from repos where repos_name='$reponame'";
686         // error_log("desc for name sql: $sql");\r
687 \r
688         $res = $conn->query($sql);\r
689 \r
690         $retval = -1;\r
691         if(!$res) return -1;\r
692         foreach($res as $row) {\r
693                 $retval = $row[0];\r
694         }\r
695 \r
696         return $retval;\r
697 }
698 \r
699 function gwvpmini_GetRepoOwnerDetailsFromName($reponame)\r
700 {\r
701 \r
702         /*\r
703          *      $reposql = '\r
704         CREATE TABLE "repos" (\r
705                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
706                         "repos_name" TEXT,\r
707                         "repos_description" TEXT,\r
708                         "repos_owner" INTEGER\r
709         )';
710         
711                 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
712         "user_full_name" TEXT,
713         "user_password" TEXT,
714         "user_username" TEXT,
715         "user_email" TEXT,
716         "user_desc" TEXT,
717         "user_level" TEXT,
718         "user_status" TEXT,
719         UNIQUE(user_username)\r
720 \r
721         */\r
722 \r
723         $conn = gwvpmini_ConnectDB();\r
724 \r
725         $sql = "select users.* from repos,users where repos_name='$reponame' and repos_owner=user_id";\r
726 \r
727         $res = $conn->query($sql);\r
728 \r
729         $retval = -1;\r
730         if(!$res) return -1;\r
731         foreach($res as $row) {
732                 $retval = array();
733                 // error_log("STUFF2: ".print_r($row,true));\r
734                 $retval["id"] = $row["user_id"];
735                 $retval["fullname"] = $row["user_full_name"];
736                 $retval["username"] = $row["user_username"];
737                 $retval["email"] = $row["user_email"];
738                 $retval["desc"] = $row["user_desc"];
739                 $retval["level"] = $row["user_level"];
740                 $retval["status"] = $row["user_status"];\r
741         }\r
742 \r
743         return $retval;\r
744 }\r
745 \r
746 function gwvpmini_setConfigVal($confname, $confval)\r
747 {\r
748         /*\r
749          *      $configsql = '\r
750         CREATE TABLE "config" (\r
751                         "config_name" TEXT,\r
752                         "config_value" TEXT\r
753         )';\r
754 \r
755         */\r
756         gwvpmini_eraseConfigVal($confname);\r
757 \r
758         $conn = gwvpmini_ConnectDB();
759         
760         $sql = "delete from config where config_name='$confname'";
761         $conn->query($sql);\r
762 \r
763         $sql = "insert into config values('$confname', '$confval')";\r
764 \r
765         return $conn->query($sql);\r
766 }
767
768 function gwvpmini_AddRepo($name, $desc, $ownerid, $defperms, $clonefrom)
769 {
770         
771         // error_log("addrepo in db for $name, $desc, $ownerid");
772         $conn = gwvpmini_ConnectDB();\r
773         
774         $perms["b"] = $defperms;
775         
776         $encperms = base64_encode(serialize($perms));
777         
778         if($clonefrom === false) $clonefrom = "";
779         \r
780         $sql = "insert into repos values (null, '$name', '$desc', '$ownerid', '$encperms', 0, '$clonefrom')";\r
781         \r
782         $conn->query($sql);\r
783 }
784
785 function gwvpmini_GetUserId($username)
786 {
787         $conn = gwvpmini_ConnectDB();\r
788         
789         $sql = "select user_id from users where user_username='$username'";
790
791         // error_log("userid sql $sql");\r
792         
793         $res = $conn->query($sql);
794         
795         $retval = false;
796         foreach($res as $row) {
797                 $retval = $row[0];
798         }
799         
800         return $retval;
801 }
802
803 function gwvpmini_GetUserNameFromEmail($email)\r
804 {\r
805         $conn = gwvpmini_ConnectDB();\r
806 \r
807         $sql = "select user_username from users where user_email='$email'";\r
808 \r
809         // error_log("username sql $sql");\r
810 \r
811         $res = $conn->query($sql);\r
812 \r
813         $retval = false;\r
814         foreach($res as $row) {\r
815                 $retval = $row[0];\r
816         }\r
817 \r
818         return $retval;\r
819 }
820
821 function gwvpmini_GetOwnedRepos($username)\r
822 {
823         /*
824          *      CREATE TABLE "repos" (
825         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
826         "repos_name" TEXT,
827         "repos_description" TEXT,
828         "repos_owner" INTEGER
829         )';
830
831          */
832         $conn = gwvpmini_ConnectDB();
833         
834         
835         $uid = gwvpmini_GetUserId($username);
836         $sql = "select * from repos where repos_owner='$uid'";
837         // error_log("owned repos sql $sql for username $username");
838         $res = $conn->query($sql);
839         if($username == "") return false;\r
840         
841         $retval = false;
842         foreach($res as $row) {
843                 $id = $row["repos_id"];
844                 $retval[$id]["name"] = $row["repos_name"];
845                 $retval[$id]["desc"] = $row["repos_description"];
846                 $retval[$id]["id"] = $row["repos_id"];
847                 $retval[$id]["status"] = $row["repos_status"];
848                 // error_log(print_r($row, true));
849         }
850         
851         // error_log(print_r($retval, true));\r
852         return $retval;\r
853 }
854
855 function gwvpmini_GetContributedRepos($username)\r
856 {\r
857         /*\r
858          *      CREATE TABLE "repos" (\r
859                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
860                         "repos_name" TEXT,\r
861                         "repos_description" TEXT,\r
862                         "repos_owner" INTEGER\r
863          )';\r
864 \r
865         */\r
866         $conn = gwvpmini_ConnectDB();\r
867 \r
868 \r
869         $uid = gwvpmini_GetUserId($username);\r
870         $sql = "select repos_id,repos_description,repos_perms,repos_owner,repos_status,repos_name from repos";\r
871         $res = $conn->query($sql);\r
872         if($username == "") return false;\r
873 \r
874         $retval = false;
875         $rids = null;
876         $i = 0;\r
877         foreach($res as $row) {
878                 $perms = unserialize(base64_decode($row["repos_perms"]));
879                 // error_log("CONTRIB: $uid for ".$row["repos_id"]." - ".print_r($perms,true));
880                 if(isset($perms["$uid"])) if($perms["$uid"] > 1) {
881                         $rids[$i]["id"] = $row["repos_id"];
882                         $rids[$i]["desc"] = $row["repos_description"];
883                         $rids[$i]["owner"] = $row["repos_owner"];
884                         $rids[$i]["status"] = $row["repos_status"];
885                         $rids[$i]["name"] = $row["repos_name"];
886                         $i++;
887                 }
888         }
889         $retval = $rids;
890         
891         if($i == 0) {
892                 // error_log("CONTRIBREPOS: no repos found?");
893                 return false;
894         }\r
895 \r
896         // error_log("CONTRIBREPOS: ".print_r($retval, true));\r
897         return $retval;\r
898 }
899
900 function gwvpmini_userLevel($id)
901 {
902         $conn = gwvpmini_ConnectDB();
903         
904         $sql = "select user_level from users where user_id='$id'";
905         
906         $res = $conn->query($sql);
907         
908         $lev = -1;
909         if(!$res) return -1;
910         foreach($res as $row) {
911                 $lev = (int)$row[0];
912         }
913         
914         return $lev;
915 }
916
917 function gwvpmini_GetUsers($startat = 0, $num = 10)
918 {
919         $conn = gwvpmini_ConnectDB();
920         
921         /*
922          *      CREATE TABLE "users" (
923         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
924         "user_full_name" TEXT,
925         "user_password" TEXT,
926         "user_username" TEXT,
927         "user_email" TEXT,
928         "user_desc" TEXT,
929         "user_level" TEXT,
930         "user_status" TEXT
931
932          */\r
933         \r
934         $sql = "select * from users where user_id>='$startat' order by user_id asc limit $num";
935         
936         $res = $conn->query($sql);
937         
938         $retval = false;
939         foreach($res as $row) {
940                 $id = $row["user_id"];
941                 $retval[$id]["fullname"] = $row["user_full_name"];
942                 $retval[$id]["username"] = $row["user_username"];
943                 $retval[$id]["email"] = $row["user_email"];
944                 $retval[$id]["desc"] = $row["user_desc"];
945                 $retval[$id]["level"] = $row["user_level"];
946                 $retval[$id]["status"] = $row["user_status"];
947                 $retval[$id]["id"] = $row["user_id"];
948         }
949         
950         return $retval;
951 }\r
952
953 function gwvpmini_findPeopleLike($search)\r
954 {\r
955         $conn = gwvpmini_ConnectDB();
956         
957         $sql = "select * from users where user_username like '%$search%' or user_full_name like '%$search%'";\r
958         \r
959         $res = $conn->query($sql);
960         
961         if(!$res) {
962                 // error_log("SERACHUSER: $sql returned false");
963                 return false;
964         } else {
965                 // error_log("SERACHUSER: $sql returned true");
966         }\r
967         \r
968         $retval = false;\r
969         foreach($res as $row) {\r
970                 $id = $row["user_id"];\r
971                 $retval[$id]["fullname"] = $row["user_full_name"];\r
972                 $retval[$id]["username"] = $row["user_username"];\r
973                 $retval[$id]["email"] = $row["user_email"];\r
974                 $retval[$id]["desc"] = $row["user_desc"];\r
975                 $retval[$id]["level"] = $row["user_level"];\r
976                 $retval[$id]["status"] = $row["user_status"];\r
977                 $retval[$id]["id"] = $row["user_id"];\r
978         }\r
979         
980         // error_log("SEARCHUSER: array is ".print_r($retval, true));\r
981         return $retval;
982 }
983
984 function gwvpmini_GetRepos($startat=0, $num=200)\r
985 {\r
986         $conn = gwvpmini_ConnectDB();\r
987         \r
988         /*\r
989          *      CREATE TABLE "repos" (
990         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
991         "repos_name" TEXT,
992         "repos_description" TEXT,
993         "repos_owner" INTEGER
994         )';
995         \r
996                         */\r
997         \r
998         $sql = "select * from repos where repos_id > '$startat' order by repos_id asc limit $num";\r
999         \r
1000         $res = $conn->query($sql);\r
1001         \r
1002         $retval = false;\r
1003         foreach($res as $row) {\r
1004                 $id = $row["repos_id"];\r
1005                 $retval[$id]["name"] = $row["repos_name"];\r
1006                 $retval[$id]["desc"] = $row["repos_description"];\r
1007                 $retval[$id]["owner"] = $row["repos_owner"];\r
1008                 $retval[$id]["id"] = $row["repos_id"];
1009                 $retval[$id]["status"] = $row["repos_status"];          
1010         }\r
1011         \r
1012         return $retval;\r
1013         \r
1014         \r
1015 }\r
1016
1017 function gwvpmini_findReposLike($search)\r
1018 {\r
1019         $conn = gwvpmini_ConnectDB();
1020         
1021         /*
1022          *      CREATE TABLE "repos" (
1023         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
1024         "repos_name" TEXT,
1025         "repos_description" TEXT,
1026         "repos_owner" INTEGER
1027         )';
1028         
1029                         */
1030         
1031         $sql = "select * from repos where repos_name like '%$search%' or repos_description like '%$search%'";
1032         
1033         $res = $conn->query($sql);
1034         
1035         if(!$res) return false;
1036         
1037         $retval = false;
1038         foreach($res as $row) {
1039                 $id = $row["repos_id"];
1040                 $retval[$id]["name"] = $row["repos_name"];
1041                 $retval[$id]["desc"] = $row["repos_description"];
1042                 $retval[$id]["owner"] = $row["repos_owner"];
1043                 $retval[$id]["id"] = $row["repos_id"];
1044                 $retval[$id]["status"] = $row["repos_status"];
1045         }
1046         
1047         return $retval;
1048         \r
1049 }\r
1050 \r
1051 function gwvpmini_GetNRepos()
1052 {
1053         $conn = gwvpmini_ConnectDB();
1054
1055         $sql = "select count(*) from repos";
1056         
1057         $res = $conn->query($sql);
1058         
1059         $retval = -1;
1060         foreach($res as $row) {
1061                 $retval = $row[0];
1062         }
1063         
1064         return $retval;
1065 }
1066
1067 \r
1068 function gwvpmini_GetNUsers()\r
1069 {\r
1070         $conn = gwvpmini_ConnectDB();\r
1071 \r
1072         $sql = "select count(*) from users";\r
1073 \r
1074         $res = $conn->query($sql);\r
1075 \r
1076         $retval = -1;\r
1077         foreach($res as $row) {\r
1078                 $retval = $row[0];\r
1079         }\r
1080 \r
1081         return $retval;\r
1082 }\r
1083
1084
1085 ?>