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