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