4 global $DB_CONNECTION;
\r
5 $DB_CONNECTION = false;
\r
8 global $db_url, $db_type;
\r
9 error_log("in include for database, $db_type, $db_name");
12 function gwvpmini_DBExists()
14 global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name;
16 // oh this isnt working. poo.
17 error_log("checking for $db_name, $db_type");
19 if($db_type == "sqlite") {
20 if(file_exists($db_name)) {
25 error_log("no exists");
31 function gwvpmini_getUser($username=null, $email=null, $id=null)
\r
33 $conn = gwvpmini_ConnectDB();
\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
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
59 function gwvpmini_getRepo($ownerid=null, $name=null, $id=null)
\r
61 $conn = gwvpmini_ConnectDB();
65 CREATE TABLE "repos" (
66 "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
68 "repos_description" TEXT,
69 "repos_owner" INTEGER,
70 "repos_readperms" TEXT,
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
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
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)
105 $conn = gwvpmini_ConnectDB();
107 $sql = "select repos_perms from repos where repos_id='$rid'";
109 $res = $conn->query($sql);
111 error_log("CHANGEREPOPERMS: call with $rid, $uid, $acc");
114 foreach($res as $row) {
118 if($cperms_t === false) return false;
120 $permsarray = array();
121 if($cperms_t == "") {
122 $permsarray[$uid] = $acc;
124 $permsarray = unserialize(base64_decode($cperms_t));
125 $permsarray[$uid] = $acc;
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) {
132 unset($permsarray[$key]);
137 $encperms = base64_encode(serialize($permsarray));
139 $sql = "update repos set repos_perms='$encperms' where repos_id='$rid'";
\r
145 function gwvpmini_GetRepoPerms($rid)
147 $conn = gwvpmini_ConnectDB();
\r
149 $sql = "select repos_perms from repos where repos_id='$rid'";
\r
151 $res = $conn->query($sql);
\r
154 if($res !== false) foreach($res as $row) {
\r
155 $cperms_t = $row[0];
\r
158 if($cperms_t === false) return 0;
\r
160 error_log("PERMSCHECK $rid, $uid:".print_r($dets, true));
\r
162 if($dets === false) return 0;
\r
164 if($dets["ownerid"] == $uid) return 2;
\r
166 $permsarray = unserialize(base64_decode($cperms_t));
169 //returns 0 for none, 1 for read, 2 for writes
170 function gwvpmini_GetRepoPerm($rid, $uid)
172 $conn = gwvpmini_ConnectDB();
\r
174 $dets = gwvpmini_getRepo(null, null, $rid);
176 $sql = "select repos_perms from repos where repos_id='$rid'";
\r
178 $res = $conn->query($sql);
181 if($res !== false) foreach($res as $row) {
\r
182 $cperms_t = $row[0];
\r
185 if($cperms_t === false) return 0;
187 error_log("PERMSCHECK $rid, $uid:".print_r($dets, true));
\r
189 if($dets === false) return 0;
191 if($dets["ownerid"] == $uid) return 2;
\r
193 $permsarray = unserialize(base64_decode($cperms_t));
195 error_log("PERMSARRAY: ".print_r($permsarray,true));
200 if(isset($permsarray[$uid])) {
201 $perm = $permsarray[$uid];
202 } else if($permsarray["b"] == "a" ||$permsarray["b"] == "r") {
206 if($permsarray["b"] == "a") $perm = 1;
213 function gwvpmini_RemoveRepoDB($id)
215 $conn = gwvpmini_ConnectDB();
\r
217 if($id < 0) return;
\r
219 $sql = "delete from repos where repos_id='$id'";
\r
221 return $conn->query($sql);
\r
225 function gwvpmini_RemoveUser($uid)
227 $conn = gwvpmini_ConnectDB();
\r
231 $sql = "delete from users where user_id='$uid'";
233 return $conn->query($sql);
236 function gwvpmini_DisableUser($uid)
\r
238 $conn = gwvpmini_ConnectDB();
\r
240 if($uid < 0) return;
\r
242 $sql = "update users set user_status=1 where user_id='$uid'";
\r
244 return $conn->query($sql);
\r
247 function gwvpmini_EnableUser($uid)
\r
249 $conn = gwvpmini_ConnectDB();
\r
251 if($uid < 0) return;
\r
253 $sql = "update users set user_status=0 where user_id='$uid'";
\r
255 return $conn->query($sql);
\r
258 function gwvpmini_DisableRepo($rid)
260 $conn = gwvpmini_ConnectDB();
\r
262 if($rid < 0) return;
\r
264 $sql = "update repos set repos_status=1 where repos_id='$rid'";
\r
266 return $conn->query($sql);
269 function gwvpmini_EnableRepo($rid)
\r
271 $conn = gwvpmini_ConnectDB();
\r
275 $sql = "update repos set repos_status=0 where repos_id='$rid'";
277 return $conn->query($sql);
\r
281 function gwvpmini_ConnectDB()
\r
283 global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;
\r
285 // first check if $DB_CONNECTION IS live
\r
286 error_log("in connection $db_type, $db_name");
\r
288 if($DB_CONNECTION != false) return $DB_CONNECTION;
\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
300 // and here we go with pdo.
\r
301 error_log("attmpting to open db, $db_type:$db_url");
\r
303 $DB_CONNECTION = new PDO("$db_type:$db_url");
\r
304 } catch(PDOException $exep) {
\r
305 error_log("execpt on db open");
\r
309 return $DB_CONNECTION;
\r
312 function gwvpmini_UpdateStatusFromConfirm($confirmhash)
314 $conn = gwvpmini_ConnectDB();
\r
316 $sql = "select count(*) from users where user_status='2:$confirmhash'";
318 $res = $conn->query($sql);
320 if(!$res) return false;
322 foreach($res as $row) {
327 $sql = "update users set user_status='0' where user_status='2:$confirmhash'";
328 return $conn->query($sql);
333 function gwvpmini_AddUser($username, $password, $fullname, $email, $desc, $level, $status)
338 $conn = gwvpmini_ConnectDB();
\r
340 $sql = "insert into 'users' values ( null, '$fullname', '".sha1($password)."', '$username', '$email', '$desc', '$level', '$status')";
\r
342 $res = $conn->query($sql);
345 $sql = "select user_id from users where user_username='$username'";
\r
346 $res = $conn->query($sql);
\r
347 if(!$res) return -1;
\r
350 foreach($res as $row) {
358 function gwvpmini_dbCreateSQLiteStructure($dbloc)
\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
370 UNIQUE(user_username)
\r
373 $initialuser_admin = '
374 insert into "users" values ( null, "Administrator", "'.sha1("password").'", "admin", "admin@localhost", "the admin", "1", "0");
\r
377 $initialuser_user = '
\r
378 insert into "users" values ( null, "User", "'.sha1("password").'", "user", "user@localhost", "the user", "0", "0");
\r
382 CREATE TABLE "repos" (
\r
383 "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
\r
385 "repos_description" TEXT,
\r
386 "repos_owner" INTEGER,
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
398 CREATE TABLE "config" (
\r
399 "config_name" TEXT,
\r
400 "config_value" TEXT
\r
404 $DB_CONNECTION = new PDO("sqlite:$dbloc");
\r
405 } catch(PDOException $exep) {
\r
406 error_log("execpt on db open");
\r
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
417 function gwvpmini_getConfigVal($confname)
\r
421 CREATE TABLE "config" (
\r
422 "config_name" TEXT,
\r
423 "config_value" TEXT
\r
428 $conn = gwvpmini_ConnectDB();
\r
430 $sql = "select config_value from config where config_name='$confname'";
\r
432 $res = $conn->query($sql);
\r
435 foreach($res as $val) {
\r
436 $return = $val["config_value"];
\r
442 function gwvpmini_eraseConfigVal($confname)
\r
446 CREATE TABLE "config" (
\r
447 "config_name" TEXT,
\r
448 "config_value" TEXT
\r
453 $conn = gwvpmini_ConnectDB();
\r
455 $sql = "delete from config where config_name='$confname'";
\r
457 return $conn->query($sql);
\r
460 function gwvpmini_GetRepoId($reponame)
465 CREATE TABLE "repos" (
466 "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
468 "repos_description" TEXT,
469 "repos_owner" INTEGER
474 $conn = gwvpmini_ConnectDB();
476 $sql = "select repos_id from repos where repos_name='$reponame'";
478 $res = $conn->query($sql);
482 foreach($res as $row) {
483 $retval = (int)$row[0];
489 function gwvpmini_GetRepoDescFromName($reponame)
\r
494 CREATE TABLE "repos" (
\r
495 "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
\r
497 "repos_description" TEXT,
\r
498 "repos_owner" INTEGER
\r
503 $conn = gwvpmini_ConnectDB();
\r
505 $sql = "select repos_description from repos where repos_name='$reponame'";
506 error_log("desc for name sql: $sql");
\r
508 $res = $conn->query($sql);
\r
511 if(!$res) return -1;
\r
512 foreach($res as $row) {
\r
519 function gwvpmini_GetRepoOwnerDetailsFromName($reponame)
\r
524 CREATE TABLE "repos" (
\r
525 "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
\r
527 "repos_description" TEXT,
\r
528 "repos_owner" INTEGER
\r
531 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
532 "user_full_name" TEXT,
533 "user_password" TEXT,
534 "user_username" TEXT,
539 UNIQUE(user_username)
\r
543 $conn = gwvpmini_ConnectDB();
\r
545 $sql = "select users.* from repos,users where repos_name='$reponame' and repos_owner=user_id";
\r
547 $res = $conn->query($sql);
\r
550 if(!$res) return -1;
\r
551 foreach($res as $row) {
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
566 function gwvpmini_setConfigVal($confname, $confval)
\r
570 CREATE TABLE "config" (
\r
571 "config_name" TEXT,
\r
572 "config_value" TEXT
\r
576 gwvpmini_eraseConfigVal($confname);
\r
578 $conn = gwvpmini_ConnectDB();
580 $sql = "delete from config where config_name='$confname'";
581 $conn->query($sql);
\r
583 $sql = "insert into config values('$confname', '$confval')";
\r
585 return $conn->query($sql);
\r
588 function gwvpmini_AddRepo($name, $desc, $ownerid)
591 error_log("addrepo in db for $name, $desc, $ownerid");
592 $conn = gwvpmini_ConnectDB();
\r
596 $encperms = base64_encode(serialize($perms));
598 $sql = "insert into repos values (null, '$name', '$desc', '$ownerid', '$encperms', 0)";
\r
600 $conn->query($sql);
\r
603 function gwvpmini_GetUserId($username)
605 $conn = gwvpmini_ConnectDB();
\r
607 $sql = "select user_id from users where user_username='$username'";
609 error_log("userid sql $sql");
\r
611 $res = $conn->query($sql);
614 foreach($res as $row) {
621 function gwvpmini_GetUserNameFromEmail($email)
\r
623 $conn = gwvpmini_ConnectDB();
\r
625 $sql = "select user_username from users where user_email='$email'";
\r
627 error_log("username sql $sql");
\r
629 $res = $conn->query($sql);
\r
632 foreach($res as $row) {
\r
638 function gwvpmini_GetOwnedRepos($username)
\r
641 * CREATE TABLE "repos" (
642 "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
644 "repos_description" TEXT,
645 "repos_owner" INTEGER
649 $conn = gwvpmini_ConnectDB();
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
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));
667 error_log(print_r($retval, true));
\r
671 function gwvpmini_userLevel($id)
673 $conn = gwvpmini_ConnectDB();
675 $sql = "select user_level from users where user_id='$id'";
677 $res = $conn->query($sql);
681 foreach($res as $row) {
688 function gwvpmini_GetUsers($startat = 0, $num = 10)
690 $conn = gwvpmini_ConnectDB();
693 * CREATE TABLE "users" (
694 "user_id" INTEGER PRIMARY KEY AUTOINCREMENT,
695 "user_full_name" TEXT,
696 "user_password" TEXT,
697 "user_username" TEXT,
705 $sql = "select * from users where user_id>='$startat' order by user_id asc limit $num";
707 $res = $conn->query($sql);
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"];
724 function gwvpmini_findPeopleLike($search)
\r
726 $conn = gwvpmini_ConnectDB();
728 $sql = "select * from users where user_username like '%$search%' or user_full_name like '%$search%'";
\r
730 $res = $conn->query($sql);
733 error_log("SERACHUSER: $sql returned false");
736 error_log("SERACHUSER: $sql returned true");
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
751 error_log("SEARCHUSER: array is ".print_r($retval, true));
\r
755 function gwvpmini_GetRepos($startat=0, $num=200)
\r
757 $conn = gwvpmini_ConnectDB();
\r
760 * CREATE TABLE "repos" (
761 "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
763 "repos_description" TEXT,
764 "repos_owner" INTEGER
769 $sql = "select * from repos where repos_id > '$startat' order by repos_id asc limit $num";
\r
771 $res = $conn->query($sql);
\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"];
788 function gwvpmini_findReposLike($search)
\r
790 $conn = gwvpmini_ConnectDB();
793 * CREATE TABLE "repos" (
794 "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
796 "repos_description" TEXT,
797 "repos_owner" INTEGER
802 $sql = "select * from repos where repos_name like '%$search%' or repos_description like '%$search%'";
804 $res = $conn->query($sql);
806 if(!$res) return 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"];
822 function gwvpmini_GetNRepos()
824 $conn = gwvpmini_ConnectDB();
826 $sql = "select count(*) from repos";
828 $res = $conn->query($sql);
831 foreach($res as $row) {
839 function gwvpmini_GetNUsers()
\r
841 $conn = gwvpmini_ConnectDB();
\r
843 $sql = "select count(*) from users";
\r
845 $res = $conn->query($sql);
\r
848 foreach($res as $row) {
\r