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