fc6babc401a213e4427a59df645012bf274b8b07
[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         )';
550         
551         $msgsql = '
552         CREATE TABLE "messages" (
553         "msgs_id" INTEGER PRIMARY KEY AUTOINCREMENT,
554         "msgs_type" TEXT,
555         "msgs_data" TEXT,
556         "msgs_to_id" TEXT
557         )';
558         \r
559 \r
560         // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
561         // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
562         // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
563         // TODO: is this sufficient? i have to think about it
564         
565         
566         // type for now will only be "git"
567         // date is obvious
568         // desc is a desction of the activity
569         // link is of the form "repo,reponame,repoid:user,username,useremail,userid" so it
570         // can be attached simply
571         // viewby is a simple list of uid's that should be able to see it... "r" for all registered
572         // "a" for everyone
573         $activitysql = '
574         CREATE TABLE "activity" (
575                 "activity_id" INTEGER PRIMARY KEY AUTOINCREMENT,
576                 "activity_type" TEXT,
577                 "activity_date" TEXT,
578                 "activity_user" TEXT,
579                 "activity_repo" TEXT,
580                 "activity_commitid" TEXT,
581                 "activity_commitlog" TEXT,
582                 "activity_visibleto" TEXT
583         )';\r
584 \r
585         $configsql = '\r
586         CREATE TABLE "config" (\r
587         "config_name" TEXT,\r
588         "config_value" TEXT\r
589         )';\r
590 \r
591         try {\r
592                 $DB_CONNECTION = new PDO("sqlite:$dbloc");\r
593         } catch(PDOException $exep) {\r
594                 // error_log("execpt on db open");\r
595                 return false;\r
596         }\r
597
598         $DB_CONNECTION->query($usersql);\r
599         $DB_CONNECTION->query($initialuser_admin);
600         $DB_CONNECTION->query($initialuser_user);
601         $DB_CONNECTION->query($reposql);\r
602         $DB_CONNECTION->query($configsql);
603         $DB_CONNECTION->query($activitysql);
604         $DB_CONNECTION->query($msgsql);\r
605 }
606
607 function gwvpmini_getConfigVal($confname)\r
608 {\r
609         /*\r
610          *      $configsql = '\r
611         CREATE TABLE "config" (\r
612                         "config_name" TEXT,\r
613                         "config_value" TEXT\r
614         )';\r
615 \r
616         */\r
617 \r
618         $conn = gwvpmini_ConnectDB();\r
619 \r
620         $sql = "select config_value from config where config_name='$confname'";\r
621 \r
622         $res = $conn->query($sql);\r
623 \r
624         $return = null;\r
625         foreach($res as $val) {\r
626                 $return = $val["config_value"];\r
627         }\r
628 \r
629         return $return;\r
630 }\r
631 \r
632 function gwvpmini_eraseConfigVal($confname)\r
633 {\r
634         /*\r
635          *      $configsql = '\r
636         CREATE TABLE "config" (\r
637                         "config_name" TEXT,\r
638                         "config_value" TEXT\r
639         )';\r
640 \r
641         */\r
642 \r
643         $conn = gwvpmini_ConnectDB();\r
644 \r
645         $sql = "delete from config where config_name='$confname'";\r
646 \r
647         return $conn->query($sql);\r
648 }
649
650 function gwvpmini_GetRepoId($reponame)
651 {
652
653         /*
654          *      $reposql = '
655         CREATE TABLE "repos" (
656         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
657         "repos_name" TEXT,
658         "repos_description" TEXT,
659         "repos_owner" INTEGER
660         )';
661
662          */
663         
664         $conn = gwvpmini_ConnectDB();
665         
666         $sql = "select repos_id from repos where repos_name='$reponame'";
667         
668         $res = $conn->query($sql);
669         
670         $retval = -1;
671         if(!$res) return -1;
672         foreach($res as $row) {
673                 $retval = (int)$row[0];
674         }
675         
676         return $retval;
677 }
678
679 function gwvpmini_GetRepoDescFromName($reponame)\r
680 {\r
681 \r
682         /*\r
683          *      $reposql = '\r
684         CREATE TABLE "repos" (\r
685                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
686                         "repos_name" TEXT,\r
687                         "repos_description" TEXT,\r
688                         "repos_owner" INTEGER\r
689         )';\r
690 \r
691         */\r
692 \r
693         $conn = gwvpmini_ConnectDB();\r
694 \r
695         $sql = "select repos_description from repos where repos_name='$reponame'";
696         // error_log("desc for name sql: $sql");\r
697 \r
698         $res = $conn->query($sql);\r
699 \r
700         $retval = -1;\r
701         if(!$res) return -1;\r
702         foreach($res as $row) {\r
703                 $retval = $row[0];\r
704         }\r
705 \r
706         return $retval;\r
707 }
708
709 function gwvpmini_SendMessageByDb($type, $data, $forid)
710 {
711         $conn = gwvpmini_ConnectDB();
712         
713         $sql = "insert into messages values (null, '$type', '$data', '$forid')";
714         
715         return $conn->query($sql);
716 }
717
718 function gwvpmini_GetMessagesForId($uid)
719 {
720         /*
721          *      $msgsql = '
722         CREATE TABLE "messages" (
723         "msgs_id" INTEGER PRIMARY KEY AUTOINCREMENT,
724         "msgs_type" TEXT,
725         "msgs_data" TEXT,
726         "msgs_to_id" TEXT,
727         )';
728
729          */
730         $conn = gwvpmini_ConnectDB();\r
731         \r
732         $sql = "select * from messages where msgs_to_id='$uid'";\r
733         // error_log("desc for name sql: $sql");\r
734         \r
735         $res = $conn->query($sql);
736         
737         error_log("request message for uid, $uid with sql $sql");\r
738         
739         $i = 0;\r
740         if(!$res) return 0;\r
741         foreach($res as $row) {
742                 $retval[$i]["id"] = $row["msgs_id"];
743                 $retval[$i]["type"] = $row["msgs_type"];
744                 $retval[$i]["data"] = $row["msgs_data"];
745                 $i++;\r
746         }
747         
748         \r
749         return $retval;\r
750         
751 }
752
753 function gwvpmini_DeleteMessagesById($mid)
754 {
755         $conn = gwvpmini_ConnectDB();\r
756         \r
757         $sql = "delete from messages where msgs_id='$mid'";
758         
759         return $conn->query($sql);
760 }
761 \r
762 function gwvpmini_GetRepoOwnerDetailsFromName($reponame)\r
763 {\r
764 \r
765         /*\r
766          *      $reposql = '\r
767         CREATE TABLE "repos" (\r
768                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
769                         "repos_name" TEXT,\r
770                         "repos_description" TEXT,\r
771                         "repos_owner" INTEGER\r
772         )';
773         
774                 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
775         "user_full_name" TEXT,
776         "user_password" TEXT,
777         "user_username" TEXT,
778         "user_email" TEXT,
779         "user_desc" TEXT,
780         "user_level" TEXT,
781         "user_status" TEXT,
782         UNIQUE(user_username)\r
783 \r
784         */\r
785 \r
786         $conn = gwvpmini_ConnectDB();\r
787 \r
788         $sql = "select users.* from repos,users where repos_name='$reponame' and repos_owner=user_id";\r
789 \r
790         $res = $conn->query($sql);\r
791 \r
792         $retval = -1;\r
793         if(!$res) return -1;\r
794         foreach($res as $row) {
795                 $retval = array();
796                 // error_log("STUFF2: ".print_r($row,true));\r
797                 $retval["id"] = $row["user_id"];
798                 $retval["fullname"] = $row["user_full_name"];
799                 $retval["username"] = $row["user_username"];
800                 $retval["email"] = $row["user_email"];
801                 $retval["desc"] = $row["user_desc"];
802                 $retval["level"] = $row["user_level"];
803                 $retval["status"] = $row["user_status"];\r
804         }\r
805 \r
806         return $retval;\r
807 }\r
808 \r
809 function gwvpmini_setConfigVal($confname, $confval)\r
810 {\r
811         /*\r
812          *      $configsql = '\r
813         CREATE TABLE "config" (\r
814                         "config_name" TEXT,\r
815                         "config_value" TEXT\r
816         )';\r
817 \r
818         */\r
819         gwvpmini_eraseConfigVal($confname);\r
820 \r
821         $conn = gwvpmini_ConnectDB();
822         
823         $sql = "delete from config where config_name='$confname'";
824         $conn->query($sql);\r
825 \r
826         $sql = "insert into config values('$confname', '$confval')";\r
827 \r
828         return $conn->query($sql);\r
829 }
830
831 function gwvpmini_AddRepo($name, $desc, $ownerid, $defperms, $clonefrom)
832 {
833         
834         // error_log("addrepo in db for $name, $desc, $ownerid");
835         $conn = gwvpmini_ConnectDB();\r
836         
837         $perms["b"] = $defperms;
838         
839         $encperms = base64_encode(serialize($perms));
840         
841         if($clonefrom === false) $clonefrom = "";
842         \r
843         $sql = "insert into repos values (null, '$name', '$desc', '$ownerid', '$encperms', 0, '$clonefrom')";\r
844         \r
845         $conn->query($sql);\r
846 }
847
848 function gwvpmini_GetUserId($username)
849 {
850         $conn = gwvpmini_ConnectDB();\r
851         
852         $sql = "select user_id from users where user_username='$username'";
853
854         // error_log("userid sql $sql");\r
855         
856         $res = $conn->query($sql);
857         
858         $retval = false;
859         foreach($res as $row) {
860                 $retval = $row[0];
861         }
862         
863         return $retval;
864 }
865
866 function gwvpmini_GetUserNameFromEmail($email)\r
867 {\r
868         $conn = gwvpmini_ConnectDB();\r
869 \r
870         $sql = "select user_username from users where user_email='$email'";\r
871 \r
872         // error_log("username sql $sql");\r
873 \r
874         $res = $conn->query($sql);\r
875 \r
876         $retval = false;\r
877         foreach($res as $row) {\r
878                 $retval = $row[0];\r
879         }\r
880 \r
881         return $retval;\r
882 }
883
884 function gwvpmini_GetOwnedRepos($username)\r
885 {
886         /*
887          *      CREATE TABLE "repos" (
888         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
889         "repos_name" TEXT,
890         "repos_description" TEXT,
891         "repos_owner" INTEGER
892         )';
893
894          */
895         $conn = gwvpmini_ConnectDB();
896         
897         
898         $uid = gwvpmini_GetUserId($username);
899         $sql = "select * from repos where repos_owner='$uid'";
900         // error_log("owned repos sql $sql for username $username");
901         $res = $conn->query($sql);
902         if($username == "") return false;\r
903         
904         $retval = false;
905         foreach($res as $row) {
906                 $id = $row["repos_id"];
907                 $retval[$id]["name"] = $row["repos_name"];
908                 $retval[$id]["desc"] = $row["repos_description"];
909                 $retval[$id]["id"] = $row["repos_id"];
910                 $retval[$id]["status"] = $row["repos_status"];
911                 // error_log(print_r($row, true));
912         }
913         
914         error_log(print_r($retval, true));\r
915         return $retval;\r
916 }
917
918 function gwvpmini_GetContributedRepos($username)\r
919 {\r
920         /*\r
921          *      CREATE TABLE "repos" (\r
922                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
923                         "repos_name" TEXT,\r
924                         "repos_description" TEXT,\r
925                         "repos_owner" INTEGER\r
926          )';\r
927 \r
928         */\r
929         $conn = gwvpmini_ConnectDB();\r
930 \r
931 \r
932         $uid = gwvpmini_GetUserId($username);\r
933         $sql = "select repos_id,repos_description,repos_perms,repos_owner,repos_status,repos_name from repos";\r
934         $res = $conn->query($sql);\r
935         if($username == "") return false;\r
936 \r
937         $retval = false;
938         $rids = null;
939         $i = 0;\r
940         foreach($res as $row) {
941                 $perms = unserialize(base64_decode($row["repos_perms"]));
942                 // error_log("CONTRIB: $uid for ".$row["repos_id"]." - ".print_r($perms,true));
943                 if(isset($perms["$uid"])) if($perms["$uid"] > 1) {
944                         $rids[$i]["id"] = $row["repos_id"];
945                         $rids[$i]["desc"] = $row["repos_description"];
946                         $rids[$i]["owner"] = $row["repos_owner"];
947                         $rids[$i]["status"] = $row["repos_status"];
948                         $rids[$i]["name"] = $row["repos_name"];
949                         $i++;
950                 }
951         }
952         $retval = $rids;
953         
954         if($i == 0) {
955                 // error_log("CONTRIBREPOS: no repos found?");
956                 return false;
957         }\r
958 \r
959         // error_log("CONTRIBREPOS: ".print_r($retval, true));\r
960         return $retval;\r
961 }
962
963 function gwvpmini_userLevel($id)
964 {
965         $conn = gwvpmini_ConnectDB();
966         
967         $sql = "select user_level from users where user_id='$id'";
968         
969         $res = $conn->query($sql);
970         
971         $lev = -1;
972         if(!$res) return -1;
973         foreach($res as $row) {
974                 $lev = (int)$row[0];
975         }
976         
977         return $lev;
978 }
979
980 function gwvpmini_GetUsers($startat = 0, $num = 10)
981 {
982         $conn = gwvpmini_ConnectDB();
983         
984         /*
985          *      CREATE TABLE "users" (
986         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
987         "user_full_name" TEXT,
988         "user_password" TEXT,
989         "user_username" TEXT,
990         "user_email" TEXT,
991         "user_desc" TEXT,
992         "user_level" TEXT,
993         "user_status" TEXT
994
995          */\r
996         \r
997         $sql = "select * from users where user_id>='$startat' order by user_id asc limit $num";
998         
999         $res = $conn->query($sql);
1000         
1001         $retval = false;
1002         foreach($res as $row) {
1003                 $id = $row["user_id"];
1004                 $retval[$id]["fullname"] = $row["user_full_name"];
1005                 $retval[$id]["username"] = $row["user_username"];
1006                 $retval[$id]["email"] = $row["user_email"];
1007                 $retval[$id]["desc"] = $row["user_desc"];
1008                 $retval[$id]["level"] = $row["user_level"];
1009                 $retval[$id]["status"] = $row["user_status"];
1010                 $retval[$id]["id"] = $row["user_id"];
1011         }
1012         
1013         return $retval;
1014 }\r
1015
1016 function gwvpmini_findPeopleLike($search)\r
1017 {\r
1018         $conn = gwvpmini_ConnectDB();
1019         
1020         $sql = "select * from users where user_username like '%$search%' or user_full_name like '%$search%'";\r
1021         \r
1022         $res = $conn->query($sql);
1023         
1024         if(!$res) {
1025                 // error_log("SERACHUSER: $sql returned false");
1026                 return false;
1027         } else {
1028                 // error_log("SERACHUSER: $sql returned true");
1029         }\r
1030         \r
1031         $retval = false;\r
1032         foreach($res as $row) {\r
1033                 $id = $row["user_id"];\r
1034                 $retval[$id]["fullname"] = $row["user_full_name"];\r
1035                 $retval[$id]["username"] = $row["user_username"];\r
1036                 $retval[$id]["email"] = $row["user_email"];\r
1037                 $retval[$id]["desc"] = $row["user_desc"];\r
1038                 $retval[$id]["level"] = $row["user_level"];\r
1039                 $retval[$id]["status"] = $row["user_status"];\r
1040                 $retval[$id]["id"] = $row["user_id"];\r
1041         }\r
1042         
1043         // error_log("SEARCHUSER: array is ".print_r($retval, true));\r
1044         return $retval;
1045 }
1046
1047 function gwvpmini_GetRepos($startat=0, $num=200)\r
1048 {\r
1049         $conn = gwvpmini_ConnectDB();\r
1050         \r
1051         /*\r
1052          *      CREATE TABLE "repos" (
1053         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
1054         "repos_name" TEXT,
1055         "repos_description" TEXT,
1056         "repos_owner" INTEGER
1057         )';
1058         \r
1059                         */\r
1060         \r
1061         $sql = "select * from repos where repos_id > '$startat' order by repos_id asc limit $num";\r
1062         \r
1063         $res = $conn->query($sql);\r
1064         \r
1065         $retval = false;\r
1066         foreach($res as $row) {\r
1067                 $id = $row["repos_id"];\r
1068                 $retval[$id]["name"] = $row["repos_name"];\r
1069                 $retval[$id]["desc"] = $row["repos_description"];\r
1070                 $retval[$id]["owner"] = $row["repos_owner"];\r
1071                 $retval[$id]["id"] = $row["repos_id"];
1072                 $retval[$id]["status"] = $row["repos_status"];          
1073         }\r
1074         \r
1075         return $retval;\r
1076         \r
1077         \r
1078 }\r
1079
1080 function gwvpmini_findReposLike($search)\r
1081 {\r
1082         $conn = gwvpmini_ConnectDB();
1083         
1084         /*
1085          *      CREATE TABLE "repos" (
1086         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
1087         "repos_name" TEXT,
1088         "repos_description" TEXT,
1089         "repos_owner" INTEGER
1090         )';
1091         
1092                         */
1093         
1094         $sql = "select * from repos where repos_name like '%$search%' or repos_description like '%$search%'";
1095         
1096         $res = $conn->query($sql);
1097         
1098         if(!$res) return false;
1099         
1100         $retval = false;
1101         foreach($res as $row) {
1102                 $id = $row["repos_id"];
1103                 $retval[$id]["name"] = $row["repos_name"];
1104                 $retval[$id]["desc"] = $row["repos_description"];
1105                 $retval[$id]["owner"] = $row["repos_owner"];
1106                 $retval[$id]["id"] = $row["repos_id"];
1107                 $retval[$id]["status"] = $row["repos_status"];
1108         }
1109         
1110         return $retval;
1111         \r
1112 }\r
1113 \r
1114 function gwvpmini_GetNRepos()
1115 {
1116         $conn = gwvpmini_ConnectDB();
1117
1118         $sql = "select count(*) from repos";
1119         
1120         $res = $conn->query($sql);
1121         
1122         $retval = -1;
1123         foreach($res as $row) {
1124                 $retval = $row[0];
1125         }
1126         
1127         return $retval;
1128 }
1129
1130 \r
1131 function gwvpmini_GetNUsers()\r
1132 {\r
1133         $conn = gwvpmini_ConnectDB();\r
1134 \r
1135         $sql = "select count(*) from users";\r
1136 \r
1137         $res = $conn->query($sql);\r
1138 \r
1139         $retval = -1;\r
1140         foreach($res as $row) {\r
1141                 $retval = $row[0];\r
1142         }\r
1143 \r
1144         return $retval;\r
1145 }\r
1146
1147
1148 ?>