X-Git-Url: http://git.pjr.cc/?p=gwvp.git;a=blobdiff_plain;f=gwvplib%2Fgwvpdatabase.php;h=5823c0c315b81451032333361f4f26ba14d384b4;hp=8746f0fb40cf288e0951c24589d8a0ccaec99c56;hb=4f4bf1da18181d412cd755143e016ede587cc1d6;hpb=1a1ed3388655bbc4001022fd91f3f5ea3ad4d03a diff --git a/gwvplib/gwvpdatabase.php b/gwvplib/gwvpdatabase.php index 8746f0f..5823c0c 100644 --- a/gwvplib/gwvpdatabase.php +++ b/gwvplib/gwvpdatabase.php @@ -3,6 +3,11 @@ global $DB_CONNECTION; $DB_CONNECTION = false; + +global $db_url, $db_type; +error_log("in include for database, $db_type, $db_name"); + + // i need to figure out how i do data encapsulation here. We'll support mysql and sqlite3 off the bat if we can - sqlite3 comes first tho function gwvp_dbCreateMysqlStructure() { @@ -75,6 +80,7 @@ function gwvp_dbCreateSQLiteStructure($dbloc) $DB_CONNECTION->query($usersql); $DB_CONNECTION->query($groupsql); $DB_CONNECTION->query($reposql); + $DB_CONNECTION->query($repoperms); $DB_CONNECTION->query($configsql); $DB_CONNECTION->query($groupmemsql); } @@ -146,15 +152,16 @@ function gwvp_getConfigVal($confname) $conn = gwvp_ConnectDB(); - $sql = "select * from config where config_name='$confname'"; + $sql = "select config_value from config where config_name='$confname'"; $res = $conn->query($sql); $return = null; foreach($res as $val) { - $return = $val; + $return = $val["config_value"]; } + return $return; } function gwvp_eraseConfigVal($confname) @@ -198,10 +205,15 @@ function gwvp_setConfigVal($confname, $confval) function gwvp_isDBSetup() { // for sqlite, we just check if the db exists, for everyone else, we check for a conneciton and go yay or nay - global $WEB_ROOT_FS, $BASE_URL, $repo_base, $data_directory, $db_type, $db_url; - + global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name; + + // oh this isnt working. poo. + error_log("checking for $db_name, $db_type"); + if($db_type == "sqlite") { - if(file_exists($db_url)) return true; + if(file_exists($db_name)) { + return true; + } else return false; } @@ -211,9 +223,11 @@ function gwvp_isDBSetup() function gwvp_ConnectDB() { - global $WEB_ROOT_FS, $BASE_URL, $repo_base, $data_directory, $db_type, $db_name, $DB_CONNECTION; + global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION; // first check if $DB_CONNECTION IS live + error_log("in connection $db_type, $db_name"); + if($DB_CONNECTION != false) return $DB_CONNECTION; if($db_type == "sqlite") { @@ -285,6 +299,21 @@ function gwvp_getUser($username=null, $email=null, $id=null) } +function gwvp_getRepoOwner($repoid) +{ + $conn = gwvp_ConnectDB(); + + $sql = "select repos_owner from repos where repos_id='$repoid'"; + + $res = $conn->query($sql); + + $return = false; + foreach($res as $rown) { + $return = $rown["repos_owner"]; + } + return $return; +} + function gwvp_getOwnedRepos($userid = null, $username = null) { $conn = gwvp_ConnectDB(); @@ -376,7 +405,15 @@ function gwvp_createGroup($group_name, $group_desc, $is_admin, $owner_id) $conn->query($sql); - + + // add the owner to the group + $gid = gwvp_getGroupId($group_name); + + + error_log("calling addgroupmember with $owner_id, $gid"); + gwvp_addGroupMemberById($owner_id, $gid); + + return true; } function gwvp_deleteGroup($groupname) @@ -388,7 +425,7 @@ function gwvp_deleteGroup($groupname) $conn->query($sql); } -function gwvp_getGroupsForUser($email) +function gwvp_getGroupsForUser($email = null, $userid = null) { $conn = gwvp_ConnectDB(); @@ -401,15 +438,25 @@ function gwvp_getGroupsForUser($email) gm.groupmember_groupid=g.groups_id and g.groups_name='$groupname' */ - - $sql = " - select g.groups_name from - group_membership gm, groups g, users u - where - gm.groupmember_userid=u.users_id and - u.user_email='$email' and - gm.groupmember_groupid=g.groups_id - "; + if($email != null) { + $sql = " + select g.groups_name from + group_membership gm, groups g, users u + where + gm.groupmember_userid=u.users_id and + u.user_email='$email' and + gm.groupmember_groupid=g.groups_id + "; + } else if($userid != null) { + $sql = " + select g.groups_name from + group_membership gm, groups g, users u + where + gm.groupmember_userid=u.users_id and + u.users_id='$userid' and + gm.groupmember_groupid=g.groups_id + "; + } else return false; $res = $conn->query($sql); @@ -655,11 +702,25 @@ function gwvp_addGroupMember($email, $groupname) if($uid!=false&&$gid!=false) gwvp_addGroupMemberByID($uid, $gid); else return false; - $conn->query($sql); - return true; } +function gwvp_IsGroupMemberById($uid, $gid) +{ + $conn = gwvp_ConnectDB(); + + $sql = "select count(*) from group_membership where groupmember_userid='$uid' and groupmember_groupid='$gid'"; + + $res = $conn->query($sql); + $result = 0; + foreach($res as $u_res) { + $result = $u_res[0]; + } + + if($result == 0) return false; + if($result == 1) return true; +} + function gwvp_IsGroupMember($email, $groupname) { $conn = gwvp_ConnectDB(); @@ -685,7 +746,47 @@ function gwvp_IsGroupMember($email, $groupname) if($result == 1) return true; } -function gwvp_IsUserAdmin($email=null, $username = null) +function gwvp_IsGroupAdmin($groupname = null, $gid = null) +{ + $conn = gwvp_ConnectDB(); + + if($groupname != null) { + $sql = "select groups_is_admin from groups where groups_name='$groupname'"; + } else if($gid != null) { + $sql = "select groups_is_admin from groups where groups_id='$gid'"; + } else return false; + + $res = $conn->query($sql); + + $return = false; + foreach($res as $u_res) { + if($u_res["groups_is_admin"] == "1") $return = true; + } + + return $return; +} + +function gwvp_IsRepoOwner($userid, $repoid) +{ + $conn = gwvp_ConnectDB(); + + $sql = "select repos_owner from repos where repos_id='$repoid'"; + + $res = $conn->query($sql); + + $return = false; + foreach($res as $u_res) { + $return["owner"] = $u_res["repos_owner"]; + } + + if($return == false) return false; + if($return["owner"] == $userid) return true; + else return false; + + +} + +function gwvp_IsUserAdmin($email=null, $username = null, $userid = null) { $conn = gwvp_ConnectDB(); @@ -694,6 +795,8 @@ function gwvp_IsUserAdmin($email=null, $username = null) if($email != null) { $id = gwvp_getUserId($email); $sql = "select groupmember_groupid from group_membership where groupmember_userid='$id'"; + } else if($userid != null) { + $sql = "select groupmember_groupid from group_membership where groupmember_userid='$userid'"; } else if($username != null) { $id = gwvp_getUserId(null, $username); $sql = "select groupmember_groupid from group_membership where groupmember_userid='$id'"; @@ -809,13 +912,40 @@ function gwvp_ModifyGroup($groupid, $groupname = null, $group_is_admin = null, $ return true; } -function gwvp_AddRepo($reponame, $repodesc, $repoowner) +function gwvp_GetRepoId($reponame) { $conn = gwvp_ConnectDB(); - $sql = "insert into repos values (null, '$reponame', '$repodesc', '$repoowner')"; + $sql = "select repos_id from repos where repos_name='$reponame'"; - $conn->query($sql); + $res = $conn->query($sql); + + $return = false; + foreach($res as $u_res) { + $return = $u_res["repos_id"]; + } + + return $return; + +} + +function gwvp_GetRepo($rid) +{ + $conn = gwvp_ConnectDB(); + + $sql = "select * from repos where repos_id='$rid'"; + + $res = $conn->query($sql); + + $return = false; + foreach($res as $u_res) { + $return["id"] = $u_res["repos_id"]; + $return["name"] = $u_res["repos_name"]; + $return["description"] = $u_res["repos_description"]; + $return["owner"] = $u_res["repos_owner"]; + } + + return $return; } function gwvp_GetRepoList() @@ -849,6 +979,104 @@ function gwvp_GetRepoList() return $return; } + +function gwvp_AddRepo($reponame, $repodesc, $repoowner, $defaultperms = 0) +{ + $conn = gwvp_ConnectDB(); + + $sql = "insert into repos values (null, '$reponame', '$repodesc', '$repoowner')"; + + $conn->query($sql); + + $sql = "select repos_id from repos where repos_name='$reponame'"; + $res = $conn->query($sql); + $rid = -1; + foreach($res as $repos) { + $rid = $repos["repos_id"]; + } + /* + * CREATE TABLE "repoperms" ( + "repoperms_id" INTEGER PRIMARY KEY AUTOINCREMENT, + "repo_id" INTEGER, + "repoperms_type" TEXT, + "repoperms_ref" TEXT + + */ + + /* + * // default perms: +// 0 - anyone can clone/read, only owner can write +// 1 - noone can clone/read, repo is visible (i.e. name), only owner can read/write repo +// 2 - only owner can see anything + + */ + + switch($defaultperms) { + case "1": + gwvp_addRepoPermission($rid, "visible", "anon"); + break; + case "2": + // by 2, we do nothing, owner already has full perms + break; + default: // 0 + gwvp_addRepoPermission($rid, "read", "anon"); + + } +} + +function gwvp_getRepoPermissions($repoid) +{ + /* + * // this looks like null, , , user:|group:|authed|anon + // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc) + // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo + // TODO: is this sufficient? i have to think about it + $repoperms = ' + CREATE TABLE "repoperms" ( + "repoperms_id" INTEGER PRIMARY KEY AUTOINCREMENT, + "repo_id" INTEGER, + "repoperms_type" TEXT, + "repoperms_ref" TEXT + )'; + + */ + $conn = gwvp_ConnectDB(); + + $sql = "select * from repoperms where repo_id='$repoid'"; + + $res = $conn->query($sql); + + $returns = false; + $rn = 0; + foreach($res as $perm) { + $returns[$rn]["id"] = $perm["repoperms_id"]; + $returns[$rn]["type"] = $perm["repoperms_type"]; + $returns[$rn]["ref"] = $perm["repoperms_ref"]; + $rn++; + } + + return $returns; +} + +function gwvp_removeRepoPermission($permid) +{ + $conn = gwvp_ConnectDB(); + + $sql = "delete from repoperms where repoperms_id='$permid'"; + error_log("attempting: \"$sql\""); + + return $conn->query($sql); +} + +function gwvp_addRepoPermission($repoid, $permtype, $permref) +{ + $conn = gwvp_ConnectDB(); + + error_log("PERMS: $repoid, $permtype, $permref"); + $sql = "insert into repoperms values(null, '$repoid', '$permtype', '$permref')"; + + return $conn->query($sql); +} /* functions we'll need to access data: * * getUsers(pattern)