permissions check/management code
[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($cperms_t == "") {
122                 $permsarray[$uid] = $acc;
123         } else {
124                 $permsarray = unserialize(base64_decode($cperms_t));
125                 $permsarray[$uid] = $acc; 
126         }
127         
128         // check if base is now r or a, we can drop any 1's
129         if($permsarray["b"] == "a" || $permsarray["b"] == "r") {
130                 foreach($permsarray as $key => $val) {
131                         if($val == 1) {
132                                 unset($permsarray[$key]);
133                         }
134                 }
135         }
136         
137         $encperms = base64_encode(serialize($permsarray));
138         
139         $sql = "update repos set repos_perms='$encperms' where repos_id='$rid'";\r
140         
141         $conn->query($sql);
142         
143 }
144
145 function gwvpmini_GetRepoPerms($rid)
146 {
147         $conn = gwvpmini_ConnectDB();\r
148         \r
149         $sql = "select repos_perms from repos where repos_id='$rid'";\r
150         \r
151         $res = $conn->query($sql);\r
152         \r
153         $cperms_t = false;\r
154         if($res !== false) foreach($res as $row) {\r
155                 $cperms_t = $row[0];\r
156         }\r
157         \r
158         if($cperms_t === false) return 0;\r
159         \r
160         error_log("PERMSCHECK $rid, $uid:".print_r($dets, true));\r
161         \r
162         if($dets === false) return 0;\r
163         \r
164         if($dets["ownerid"] == $uid) return 2;\r
165         \r
166         $permsarray = unserialize(base64_decode($cperms_t));
167 }
168
169 //returns 0 for none, 1 for read, 2 for writes
170 function gwvpmini_GetRepoPerm($rid, $uid)
171 {
172         $conn = gwvpmini_ConnectDB();\r
173         \r
174         $dets = gwvpmini_getRepo(null, null, $rid);
175         
176         $sql = "select repos_perms from repos where repos_id='$rid'";\r
177         \r
178         $res = $conn->query($sql);
179         
180         $cperms_t = false;\r
181         if($res !== false) foreach($res as $row) {\r
182                 $cperms_t = $row[0];\r
183         }\r
184         \r
185         if($cperms_t === false) return 0;
186         
187         error_log("PERMSCHECK $rid, $uid:".print_r($dets, true));\r
188         \r
189         if($dets === false) return 0;
190         
191         if($dets["ownerid"] == $uid) return 2;\r
192         \r
193         $permsarray = unserialize(base64_decode($cperms_t));
194         
195         error_log("PERMSARRAY: ".print_r($permsarray,true));
196         
197         
198         $perm = 0;
199         if($uid != "a") {
200                 if(isset($permsarray[$uid])) {
201                         $perm = $permsarray[$uid];
202                 } else if($permsarray["b"] == "a" ||$permsarray["b"] == "r") {
203                         $perm = 1;
204                 }
205         } else {
206                 if($permsarray["b"] == "a") $perm = 1;
207         }
208         
209         return $perm;\r
210
211 }
212
213 function gwvpmini_RemoveRepoDB($id)
214 {
215         $conn = gwvpmini_ConnectDB();\r
216         \r
217         if($id < 0) return;\r
218         \r
219         $sql = "delete from repos where repos_id='$id'";\r
220         \r
221         return $conn->query($sql);\r
222         
223 }
224
225 function gwvpmini_RemoveUser($uid)
226 {
227         $conn = gwvpmini_ConnectDB();\r
228         
229         if($uid < 0) return;
230         
231         $sql = "delete from users where user_id='$uid'";
232         
233         return $conn->query($sql);
234 }
235
236 function gwvpmini_DisableUser($uid)\r
237 {\r
238         $conn = gwvpmini_ConnectDB();\r
239 \r
240         if($uid < 0) return;\r
241 \r
242         $sql = "update users set user_status=1 where user_id='$uid'";\r
243 \r
244         return $conn->query($sql);\r
245 }\r
246 \r
247 function gwvpmini_EnableUser($uid)\r
248 {\r
249         $conn = gwvpmini_ConnectDB();\r
250 \r
251         if($uid < 0) return;\r
252 \r
253         $sql = "update users set user_status=0 where user_id='$uid'";\r
254 \r
255         return $conn->query($sql);\r
256 }\r
257 \r
258 function gwvpmini_DisableRepo($rid)
259 {
260         $conn = gwvpmini_ConnectDB();\r
261         \r
262         if($rid < 0) return;\r
263         \r
264         $sql = "update repos set repos_status=1 where repos_id='$rid'";\r
265         \r
266         return $conn->query($sql);
267 }\r
268
269 function gwvpmini_EnableRepo($rid)\r
270 {\r
271         $conn = gwvpmini_ConnectDB();\r
272 \r
273         if($rid < 0) return;
274         
275         $sql = "update repos set repos_status=0 where repos_id='$rid'";
276         \r
277         return $conn->query($sql);\r
278 }\r
279 \r
280
281 function gwvpmini_ConnectDB()\r
282 {\r
283         global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;\r
284 \r
285         // first check if $DB_CONNECTION IS live\r
286         error_log("in connection $db_type, $db_name");\r
287 \r
288         if($DB_CONNECTION != false) return $DB_CONNECTION;\r
289 \r
290         if($db_type == "sqlite") {\r
291                 $db_url = $db_name;\r
292                 if(!file_exists($db_name)) {\r
293                         error_log("$db_name does not exist - problem");
294                         // TODO: NEED A SETUP AGENT!
295                         gwvpmini_dbCreateSQLiteStructure($db_name);
296                         gwvpmini_setConfigVal("repodir", "$data_directory/repos");\r
297                 }\r
298         }\r
299 \r
300         // and here we go with pdo.\r
301         error_log("attmpting to open db, $db_type:$db_url");\r
302         try {\r
303                 $DB_CONNECTION = new PDO("$db_type:$db_url");\r
304         } catch(PDOException $exep) {\r
305                 error_log("execpt on db open");\r
306                 return false;\r
307         }\r
308 \r
309         return $DB_CONNECTION;\r
310 }
311
312 function gwvpmini_UpdateStatusFromConfirm($confirmhash)
313 {
314         $conn = gwvpmini_ConnectDB();\r
315         \r
316         $sql = "select count(*) from users where user_status='2:$confirmhash'";
317         
318         $res = $conn->query($sql);
319         
320         if(!$res) return false;
321         
322         foreach($res as $row) {
323                 $retval = $row[0];
324         }
325         
326         if($retval > 0) {
327                 $sql = "update users set user_status='0' where user_status='2:$confirmhash'";
328                 return $conn->query($sql);
329         } else return false;
330 }
331
332
333 function gwvpmini_AddUser($username, $password, $fullname, $email, $desc, $level, $status)
334 {
335         \r
336         
337         \r
338         $conn = gwvpmini_ConnectDB();\r
339         \r
340         $sql = "insert into 'users' values ( null, '$fullname', '".sha1($password)."', '$username', '$email', '$desc', '$level', '$status')";\r
341         \r
342         $res = $conn->query($sql);
343         if(!$res) return -1;
344         
345         $sql = "select user_id from users where user_username='$username'";\r
346         $res = $conn->query($sql);\r
347         if(!$res) return -1;\r
348         
349         $retval = -1;
350         foreach($res as $row) {
351                 $retval = $row[0];
352         }
353         
354         return $retval;
355 }\r
356
357
358 function gwvpmini_dbCreateSQLiteStructure($dbloc)\r
359 {\r
360         $usersql = '\r
361         CREATE TABLE "users" (\r
362         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
363         "user_full_name" TEXT,\r
364         "user_password" TEXT,\r
365         "user_username" TEXT,\r
366         "user_email" TEXT,\r
367         "user_desc" TEXT,
368         "user_level" TEXT,\r
369         "user_status" TEXT,
370         UNIQUE(user_username)\r
371         )';\r
372 \r
373         $initialuser_admin = '
374         insert into "users" values ( null, "Administrator", "'.sha1("password").'", "admin", "admin@localhost", "the admin", "1", "0");\r
375         ';\r
376
377         $initialuser_user = '\r
378         insert into "users" values ( null, "User", "'.sha1("password").'", "user", "user@localhost", "the user", "0", "0");\r
379         ';\r
380         \r
381         $reposql = '\r
382         CREATE TABLE "repos" (\r
383         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
384         "repos_name" TEXT,\r
385         "repos_description" TEXT,\r
386         "repos_owner" INTEGER,
387         "repos_perms" TEXT,
388         "repos_status" TEXT,
389         UNIQUE(repos_name)\r
390         )';\r
391 \r
392         // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
393         // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
394         // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
395         // TODO: is this sufficient? i have to think about it\r
396 \r
397         $configsql = '\r
398         CREATE TABLE "config" (\r
399         "config_name" TEXT,\r
400         "config_value" TEXT\r
401         )';\r
402 \r
403         try {\r
404                 $DB_CONNECTION = new PDO("sqlite:$dbloc");\r
405         } catch(PDOException $exep) {\r
406                 error_log("execpt on db open");\r
407                 return false;\r
408         }\r
409
410         $DB_CONNECTION->query($usersql);\r
411         $DB_CONNECTION->query($initialuser_admin);
412         $DB_CONNECTION->query($initialuser_user);
413         $DB_CONNECTION->query($reposql);\r
414         $DB_CONNECTION->query($configsql);\r
415 }
416
417 function gwvpmini_getConfigVal($confname)\r
418 {\r
419         /*\r
420          *      $configsql = '\r
421         CREATE TABLE "config" (\r
422                         "config_name" TEXT,\r
423                         "config_value" TEXT\r
424         )';\r
425 \r
426         */\r
427 \r
428         $conn = gwvpmini_ConnectDB();\r
429 \r
430         $sql = "select config_value from config where config_name='$confname'";\r
431 \r
432         $res = $conn->query($sql);\r
433 \r
434         $return = null;\r
435         foreach($res as $val) {\r
436                 $return = $val["config_value"];\r
437         }\r
438 \r
439         return $return;\r
440 }\r
441 \r
442 function gwvpmini_eraseConfigVal($confname)\r
443 {\r
444         /*\r
445          *      $configsql = '\r
446         CREATE TABLE "config" (\r
447                         "config_name" TEXT,\r
448                         "config_value" TEXT\r
449         )';\r
450 \r
451         */\r
452 \r
453         $conn = gwvpmini_ConnectDB();\r
454 \r
455         $sql = "delete from config where config_name='$confname'";\r
456 \r
457         return $conn->query($sql);\r
458 }
459
460 function gwvpmini_GetRepoId($reponame)
461 {
462
463         /*
464          *      $reposql = '
465         CREATE TABLE "repos" (
466         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
467         "repos_name" TEXT,
468         "repos_description" TEXT,
469         "repos_owner" INTEGER
470         )';
471
472          */
473         
474         $conn = gwvpmini_ConnectDB();
475         
476         $sql = "select repos_id from repos where repos_name='$reponame'";
477         
478         $res = $conn->query($sql);
479         
480         $retval = -1;
481         if(!$res) return -1;
482         foreach($res as $row) {
483                 $retval = (int)$row[0];
484         }
485         
486         return $retval;
487 }
488
489 function gwvpmini_GetRepoDescFromName($reponame)\r
490 {\r
491 \r
492         /*\r
493          *      $reposql = '\r
494         CREATE TABLE "repos" (\r
495                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
496                         "repos_name" TEXT,\r
497                         "repos_description" TEXT,\r
498                         "repos_owner" INTEGER\r
499         )';\r
500 \r
501         */\r
502 \r
503         $conn = gwvpmini_ConnectDB();\r
504 \r
505         $sql = "select repos_description from repos where repos_name='$reponame'";
506         error_log("desc for name sql: $sql");\r
507 \r
508         $res = $conn->query($sql);\r
509 \r
510         $retval = -1;\r
511         if(!$res) return -1;\r
512         foreach($res as $row) {\r
513                 $retval = $row[0];\r
514         }\r
515 \r
516         return $retval;\r
517 }
518 \r
519 function gwvpmini_GetRepoOwnerDetailsFromName($reponame)\r
520 {\r
521 \r
522         /*\r
523          *      $reposql = '\r
524         CREATE TABLE "repos" (\r
525                         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
526                         "repos_name" TEXT,\r
527                         "repos_description" TEXT,\r
528                         "repos_owner" INTEGER\r
529         )';
530         
531                 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
532         "user_full_name" TEXT,
533         "user_password" TEXT,
534         "user_username" TEXT,
535         "user_email" TEXT,
536         "user_desc" TEXT,
537         "user_level" TEXT,
538         "user_status" TEXT,
539         UNIQUE(user_username)\r
540 \r
541         */\r
542 \r
543         $conn = gwvpmini_ConnectDB();\r
544 \r
545         $sql = "select users.* from repos,users where repos_name='$reponame' and repos_owner=user_id";\r
546 \r
547         $res = $conn->query($sql);\r
548 \r
549         $retval = -1;\r
550         if(!$res) return -1;\r
551         foreach($res as $row) {
552                 $retval = array();
553                 error_log("STUFF2: ".print_r($row,true));\r
554                 $retval["id"] = $row["user_id"];
555                 $retval["fullname"] = $row["user_full_name"];
556                 $retval["username"] = $row["user_username"];
557                 $retval["email"] = $row["user_email"];
558                 $retval["desc"] = $row["user_desc"];
559                 $retval["level"] = $row["user_level"];
560                 $retval["status"] = $row["user_status"];\r
561         }\r
562 \r
563         return $retval;\r
564 }\r
565 \r
566 function gwvpmini_setConfigVal($confname, $confval)\r
567 {\r
568         /*\r
569          *      $configsql = '\r
570         CREATE TABLE "config" (\r
571                         "config_name" TEXT,\r
572                         "config_value" TEXT\r
573         )';\r
574 \r
575         */\r
576         gwvpmini_eraseConfigVal($confname);\r
577 \r
578         $conn = gwvpmini_ConnectDB();
579         
580         $sql = "delete from config where config_name='$confname'";
581         $conn->query($sql);\r
582 \r
583         $sql = "insert into config values('$confname', '$confval')";\r
584 \r
585         return $conn->query($sql);\r
586 }
587
588 function gwvpmini_AddRepo($name, $desc, $ownerid)
589 {
590         
591         error_log("addrepo in db for $name, $desc, $ownerid");
592         $conn = gwvpmini_ConnectDB();\r
593         
594         $perms["b"] = "a";
595         
596         $encperms = base64_encode(serialize($perms));
597         \r
598         $sql = "insert into repos values (null, '$name', '$desc', '$ownerid', '$encperms', 0)";\r
599         \r
600         $conn->query($sql);\r
601 }
602
603 function gwvpmini_GetUserId($username)
604 {
605         $conn = gwvpmini_ConnectDB();\r
606         
607         $sql = "select user_id from users where user_username='$username'";
608
609         error_log("userid sql $sql");\r
610         
611         $res = $conn->query($sql);
612         
613         $retval = false;
614         foreach($res as $row) {
615                 $retval = $row[0];
616         }
617         
618         return $retval;
619 }
620
621 function gwvpmini_GetUserNameFromEmail($email)\r
622 {\r
623         $conn = gwvpmini_ConnectDB();\r
624 \r
625         $sql = "select user_username from users where user_email='$email'";\r
626 \r
627         error_log("username sql $sql");\r
628 \r
629         $res = $conn->query($sql);\r
630 \r
631         $retval = false;\r
632         foreach($res as $row) {\r
633                 $retval = $row[0];\r
634         }\r
635 \r
636         return $retval;\r
637 }
638 function gwvpmini_GetOwnedRepos($username)\r
639 {
640         /*
641          *      CREATE TABLE "repos" (
642         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
643         "repos_name" TEXT,
644         "repos_description" TEXT,
645         "repos_owner" INTEGER
646         )';
647
648          */
649         $conn = gwvpmini_ConnectDB();
650         
651         
652         $uid = gwvpmini_GetUserId($username);
653         $sql = "select * from repos where repos_owner='$uid'";
654         error_log("owned repos sql $sql for username $username");
655         $res = $conn->query($sql);
656         if($username == "") return false;\r
657         
658         $retval = false;
659         foreach($res as $row) {
660                 $id = $row["repos_id"];
661                 $retval[$id]["name"] = $row["repos_name"];
662                 $retval[$id]["desc"] = $row["repos_description"];
663                 $retval[$id]["id"] = $row["repos_id"];
664                 error_log(print_r($row, true));
665         }
666         
667         error_log(print_r($retval, true));\r
668         return $retval;\r
669 }
670
671 function gwvpmini_userLevel($id)
672 {
673         $conn = gwvpmini_ConnectDB();
674         
675         $sql = "select user_level from users where user_id='$id'";
676         
677         $res = $conn->query($sql);
678         
679         $lev = -1;
680         if(!$res) return -1;
681         foreach($res as $row) {
682                 $lev = (int)$row[0];
683         }
684         
685         return $lev;
686 }
687
688 function gwvpmini_GetUsers($startat = 0, $num = 10)
689 {
690         $conn = gwvpmini_ConnectDB();
691         
692         /*
693          *      CREATE TABLE "users" (
694         "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
695         "user_full_name" TEXT,
696         "user_password" TEXT,
697         "user_username" TEXT,
698         "user_email" TEXT,
699         "user_desc" TEXT,
700         "user_level" TEXT,
701         "user_status" TEXT
702
703          */\r
704         \r
705         $sql = "select * from users where user_id>='$startat' order by user_id asc limit $num";
706         
707         $res = $conn->query($sql);
708         
709         $retval = false;
710         foreach($res as $row) {
711                 $id = $row["user_id"];
712                 $retval[$id]["fullname"] = $row["user_full_name"];
713                 $retval[$id]["username"] = $row["user_username"];
714                 $retval[$id]["email"] = $row["user_email"];
715                 $retval[$id]["desc"] = $row["user_desc"];
716                 $retval[$id]["level"] = $row["user_level"];
717                 $retval[$id]["status"] = $row["user_status"];
718                 $retval[$id]["id"] = $row["user_id"];
719         }
720         
721         return $retval;
722 }\r
723
724 function gwvpmini_findPeopleLike($search)\r
725 {\r
726         $conn = gwvpmini_ConnectDB();
727         
728         $sql = "select * from users where user_username like '%$search%' or user_full_name like '%$search%'";\r
729         \r
730         $res = $conn->query($sql);
731         
732         if(!$res) {
733                 error_log("SERACHUSER: $sql returned false");
734                 return false;
735         } else {
736                 error_log("SERACHUSER: $sql returned true");
737         }\r
738         \r
739         $retval = false;\r
740         foreach($res as $row) {\r
741                 $id = $row["user_id"];\r
742                 $retval[$id]["fullname"] = $row["user_full_name"];\r
743                 $retval[$id]["username"] = $row["user_username"];\r
744                 $retval[$id]["email"] = $row["user_email"];\r
745                 $retval[$id]["desc"] = $row["user_desc"];\r
746                 $retval[$id]["level"] = $row["user_level"];\r
747                 $retval[$id]["status"] = $row["user_status"];\r
748                 $retval[$id]["id"] = $row["user_id"];\r
749         }\r
750         
751         error_log("SEARCHUSER: array is ".print_r($retval, true));\r
752         return $retval;
753 }
754
755 function gwvpmini_GetRepos($startat=0, $num=200)\r
756 {\r
757         $conn = gwvpmini_ConnectDB();\r
758         \r
759         /*\r
760          *      CREATE TABLE "repos" (
761         "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
762         "repos_name" TEXT,
763         "repos_description" TEXT,
764         "repos_owner" INTEGER
765         )';
766         \r
767                         */\r
768         \r
769         $sql = "select * from repos where repos_id > '$startat' order by repos_id asc limit $num";\r
770         \r
771         $res = $conn->query($sql);\r
772         \r
773         $retval = false;\r
774         foreach($res as $row) {\r
775                 $id = $row["repos_id"];\r
776                 $retval[$id]["name"] = $row["repos_name"];\r
777                 $retval[$id]["desc"] = $row["repos_description"];\r
778                 $retval[$id]["owner"] = $row["repos_owner"];\r
779                 $retval[$id]["id"] = $row["repos_id"];
780                 $retval[$id]["status"] = $row["repos_status"];          
781         }\r
782         \r
783         return $retval;\r
784         \r
785         \r
786 }\r
787
788 function gwvpmini_findReposLike($search)\r
789 {\r
790         $conn = gwvpmini_ConnectDB();
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         
802         $sql = "select * from repos where repos_name like '%$search%' or repos_description like '%$search%'";
803         
804         $res = $conn->query($sql);
805         
806         if(!$res) return false;
807         
808         $retval = false;
809         foreach($res as $row) {
810                 $id = $row["repos_id"];
811                 $retval[$id]["name"] = $row["repos_name"];
812                 $retval[$id]["desc"] = $row["repos_description"];
813                 $retval[$id]["owner"] = $row["repos_owner"];
814                 $retval[$id]["id"] = $row["repos_id"];
815                 $retval[$id]["status"] = $row["repos_status"];
816         }
817         
818         return $retval;
819         \r
820 }\r
821 \r
822 function gwvpmini_GetNRepos()
823 {
824         $conn = gwvpmini_ConnectDB();
825
826         $sql = "select count(*) from repos";
827         
828         $res = $conn->query($sql);
829         
830         $retval = -1;
831         foreach($res as $row) {
832                 $retval = $row[0];
833         }
834         
835         return $retval;
836 }
837
838 \r
839 function gwvpmini_GetNUsers()\r
840 {\r
841         $conn = gwvpmini_ConnectDB();\r
842 \r
843         $sql = "select count(*) from users";\r
844 \r
845         $res = $conn->query($sql);\r
846 \r
847         $retval = -1;\r
848         foreach($res as $row) {\r
849                 $retval = $row[0];\r
850         }\r
851 \r
852         return $retval;\r
853 }\r
854
855
856 ?>