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