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