// 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()
{
-
+
}
function gwvp_dbCreateSQLiteStructure($dbloc)
"users_id" INTEGER PRIMARY KEY AUTOINCREMENT,
"user_full_name" TEXT,
"user_password" TEXT,
- "user_nickname" TEXT,
+ "user_username" TEXT,
"user_email" TEXT,
"user_desc" TEXT,
- "user_status" INTEGER
+ "user_status" TEXT
)';
-
+
$groupsql = '
CREATE TABLE groups (
"groups_id" INTEGER PRIMARY KEY AUTOINCREMENT,
"groups_name" TEXT,
+ "groups_description" TEXT,
"groups_is_admin" INTEGER,
"groups_owner_id" INTEGER
)';
-
+
$reposql = '
CREATE TABLE "repos" (
"repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
"repos_description" TEXT,
"repos_owner" INTEGER
)';
-
+
+ // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|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
+ )';
+
$configsql = '
CREATE TABLE "config" (
"config_name" TEXT,
"config_value" TEXT
)';
-
+
$groupmemsql = '
CREATE TABLE "group_membership" (
"groupmember_id" INTEGER PRIMARY KEY AUTOINCREMENT,
"groupmember_groupid" INTEGER,
"groupmember_userid" INTEGER
)';
-
+
try {
$DB_CONNECTION = new PDO("sqlite:$dbloc");
} catch(PDOException $exep) {
error_log("execpt on db open");
return false;
}
-
-
+
+
$DB_CONNECTION->query($usersql);
$DB_CONNECTION->query($groupsql);
$DB_CONNECTION->query($reposql);
+ $DB_CONNECTION->query($repoperms);
$DB_CONNECTION->query($configsql);
$DB_CONNECTION->query($groupmemsql);
}
+function gwvp_GetUserStatus($userid)
+{
+ $conn = gwvp_ConnectDB();
+
+ $sql = "select user_status from users where users_id='$userid'";
+
+ $res = $conn->query($sql);
+
+ $return = null;
+ foreach($res as $val) {
+ $spl = explode(";", $val);
+
+ $return["statusid"] = $spl[0];
+ $return["extstatus"] = $spl[1];
+ }
+
+}
+
+function gwvp_SetUserStatus($userid, $status, $extendedstatus=null)
+{
+ /*
+ * user statues
+ * 0 - all good
+ * 1 - locked
+ * 2 - password locked
+ * 3 - awaiting registration completion
+ * 4 - awaiting password reset
+ * where use status = 3,4 the key for unlock is set as the extended status
+ * i.e. if a user goes thru registration, when the validation email gets to
+ * them they'll have a key in their email (128 or 256 bit), thats what
+ * the extended status field is used for
+ */
+
+ $conn = gwvp_ConnectDB();
+
+ if($extendedstatus != null) {
+ $sql = "update users set user_status='$status;$extendedstatus' where users_id='$userid'";
+ } else {
+ $sql = "update users set user_status='$status;0' where users_id='$userid'";
+ }
+
+ return $conn->query($sql);
+
+}
+
+function gwvp_forceDisconnect()
+{
+
+ global $DB_CONNECTION;
+
+ $DB_CONNECTION = false;
+}
+
+
+function gwvp_getConfigVal($confname)
+{
+ /*
+ * $configsql = '
+ CREATE TABLE "config" (
+ "config_name" TEXT,
+ "config_value" TEXT
+ )';
+
+ */
+
+ $conn = gwvp_ConnectDB();
+
+ $sql = "select config_value from config where config_name='$confname'";
+
+ $res = $conn->query($sql);
+
+ $return = null;
+ foreach($res as $val) {
+ $return = $val["config_value"];
+ }
+
+ return $return;
+}
+
+function gwvp_eraseConfigVal($confname)
+{
+ /*
+ * $configsql = '
+ CREATE TABLE "config" (
+ "config_name" TEXT,
+ "config_value" TEXT
+ )';
+
+ */
+
+ $conn = gwvp_ConnectDB();
+
+ $sql = "delete from config where config_name='$confname'";
+
+ return $conn->query($sql);
+}
+
+function gwvp_setConfigVal($confname, $confval)
+{
+ /*
+ * $configsql = '
+ CREATE TABLE "config" (
+ "config_name" TEXT,
+ "config_value" TEXT
+ )';
+
+ */
+ gwvp_eraseConfigVal($confname);
+
+ $conn = gwvp_ConnectDB();
+
+ $sql = "insert into config values('$confname', '$confval')";
+
+ return $conn->query($sql);
+}
+
+
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_url;
+
if($db_type == "sqlite") {
if(file_exists($db_url)) return true;
else return false;
}
-
+
// TODO now for the connectables
// gwvp_ConnectDB();
}
function gwvp_ConnectDB()
{
- global $WEB_ROOT_FS, $BASE_URL, $repo_base, $data_directory, $db_type, $db_url, $DB_CONNECTION;
-
+ global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;
+
// first check if $DB_CONNECTION IS live
if($DB_CONNECTION != false) return $DB_CONNECTION;
-
+
+ if($db_type == "sqlite") {
+ $db_url = $db_name;
+ if(!file_exists($db_name)) {
+ error_log("$db_name does not exist - problem");
+ }
+ }
+
// and here we go with pdo.
+ error_log("attmpting to open db, $db_type:$db_url");
try {
$DB_CONNECTION = new PDO("$db_type:$db_url");
} catch(PDOException $exep) {
error_log("execpt on db open");
return false;
}
+
+ return $DB_CONNECTION;
}
-function gwvp_createUser($email, $fullname, $password, $nick, $desc, $status)
+// TODO: we have to define what "Status" is
+function gwvp_createUser($email, $fullname, $password, $username, $desc, $status)
{
$conn = gwvp_ConnectDB();
-
+
// TODO: change from sha1
$shapass = sha1($password);
- $conn->query("insert into users values (null, '$fullname', '$shapass', '$nick', '$email', '$desc', '$status')");
+ //error_log("Create user called with $email");
+ $sql = "insert into users values (null, '$fullname', '$shapass', '$username', '$email', '$desc', '$status')";
+ error_log("Creating user, $sql");
+ return $conn->query($sql);
/*
* "users_id" INTEGER PRIMARY KEY AUTOINCREMENT,
- "user_full_name" TEXT,
- "user_password" TEXT,
- "user_nickname" TEXT,
- "user_email" TEXT,
- "user_desc" TEXT,
- "user_status" INTEGER
+ "user_full_name" TEXT,
+ "user_password" TEXT,
+ "user_username" TEXT,
+ "user_email" TEXT,
+ "user_desc" TEXT,
+ "user_status" INTEGER
*/
}
-function gwvp_getUsers()
+function gwvp_getUser($username=null, $email=null, $id=null)
+{
+ $conn = gwvp_ConnectDB();
+
+ if($username != null) {
+ $res = $conn->query("select * from users where user_username='$username'");
+ } else if($email != null) {
+ $res = $conn->query("select * from users where user_email='$email'");
+ } else if($id != null) {
+ $res = $conn->query("select * from users where users_id='$id'");
+ } else return false;
+
+ $returns = false;
+ foreach($res as $u_res) {
+ $returns["id"] = $u_res["users_id"];
+ $returns["fullname"] = $u_res["user_full_name"];
+ $returns["password"] = $u_res["user_password"];
+ $returns["username"] = $u_res["user_username"];
+ $returns["email"] = $u_res["user_email"];
+ $returns["desc"] = $u_res["user_desc"];
+ $returns["status"] = $u_res["user_status"];
+ }
+
+ return $returns;
+
+}
+
+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();
- $res = $conn->query("select * from users");
+ if($username != null) {
+ $details = gwvp_getUser($username);
+ $uid = $details["id"];
+ $sql = "select * from repos where repos_owner='$uid'";
+ $res = $conn->query($sql);
+ error_log("sql: $sql");
+ } else if($userid != null) {
+ $sql = "select * from repos where repos_owner='$userid'";
+ $res = $conn->query($sql);
+ error_log("sql: $sql");
+ } else return false;
+ /*
+ * CREATE TABLE "repos" (
+ "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "repos_name" TEXT,
+ "repos_description" TEXT,
+ "repos_owner" INTEGER
+ )';
+
+ */
+
+ $returns = false;
+ $rn = 0;
+ foreach($res as $u_res) {
+ $returns[$rn]["id"] = $u_res["repos_id"];
+ $returns[$rn]["name"] = $u_res["repos_name"];
+ $returns[$rn]["description"] = $u_res["repos_description"];
+ $rn++;
+ }
+
+ return $returns;
+}
+
+function gwvp_getUsers()
+{
+ $conn = gwvp_ConnectDB();
+
+ $res = $conn->query("select * from users");
+
$returns = false;
$rn = 0;
foreach($res as $u_res) {
$returns[$rn]["id"] = $u_res["users_id"];
$returns[$rn]["fullname"] = $u_res["user_full_name"];
$returns[$rn]["password"] = $u_res["user_password"];
- $returns[$rn]["nickname"] = $u_res["user_nickname"];
+ $returns[$rn]["username"] = $u_res["user_username"];
$returns[$rn]["email"] = $u_res["user_email"];
$returns[$rn]["desc"] = $u_res["user_desc"];
$returns[$rn]["status"] = $u_res["user_status"];
$rn++;
}
-
+
return $returns;
}
function gwvp_deleteUser($email)
{
$conn = gwvp_ConnectDB();
-
+
$sql = "delete from users where user_email='$email'";
-
+
$conn->query($sql);
}
-function gwvp_createGroup($group_name, $is_admin, $owner_id)
+function gwvp_createGroup($group_name, $group_desc, $is_admin, $owner_id)
{
$conn = gwvp_ConnectDB();
-
+
/*
* CREATE TABLE groups (
- "groups_id" INTEGER,
- "groups_name" TEXT,
- "groups_is_admin" INTEGER,
+ "groups_id" INTEGER,
+ "groups_name" TEXT,
+ "groups_is_admin" INTEGER,
"groups_owner_id" INTEGER
)';
} else {
$is_admin_t = 0;
}
- $sql = "insert into groups values( null, '$group_name', '$is_admin_t', '$owner_id')";
+ $sql = "insert into groups values( null, '$group_name', '$group_desc', '$is_admin_t', '$owner_id')";
+
$conn->query($sql);
-
+
}
function gwvp_deleteGroup($groupname)
{
$conn = gwvp_ConnectDB();
-
+
$sql = "delete from groups where groups_name='$groupname'";
-
+
$conn->query($sql);
}
+function gwvp_getGroupsForUser($email = null, $userid = null)
+{
+ $conn = gwvp_ConnectDB();
+
+ /*
+ 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 and
+ g.groups_name='$groupname'
+ */
+ 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);
+
+ $return = false;
+ $rn = 0;
+ foreach($res as $u_res) {
+ $return[$rn] = $u_res[0];
+ $rn++;
+ }
+
+ return $return;
+}
+
+function gwvp_getGroupsOwnedByUser($email)
+{
+ $conn = gwvp_ConnectDB();
+
+ /*
+ 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 and
+ g.groups_name='$groupname'
+ */
+
+ $sql = "
+ select g.groups_name from
+ groups g, users u
+ where
+ u.user_email='$email' and
+ u.users_id=g.groups_owner_id
+ ";
+
+ $res = $conn->query($sql);
+
+ $return = false;
+ $rn = 0;
+ foreach($res as $u_res) {
+ $return[$rn] = $u_res[0];
+ $rn++;
+ }
+
+ return $return;
+
+}
+
+function gwvp_groupOwner($groupname)
+{
+ $conn = gwvp_ConnectDB();
+
+ $sql = "select u.user_email from users u, groups g where g.groups_name='$groupname' and g.groups_owner_id=u.users_id";
+
+ $res = $conn->query($sql);
+ $return = false;
+ foreach($res as $u_res) {
+ $return = $u_res[0];
+ }
+
+ return $return;
+}
function gwvp_getGroups()
{
$conn = gwvp_ConnectDB();
-
+
$res = $conn->query("select * from groups");
-
+
$returns = false;
$rn = 0;
foreach($res as $u_res) {
$returns[$rn]["ownerid"] = $u_res["groups_owner_id"];
$rn++;
}
-
+
return $returns;
}
function gwvp_getGroupId($groupname)
{
$conn = gwvp_ConnectDB();
-
+
$sql = "select groups_id from groups where groups_name='$groupname'";
-
+
$res = $conn->query($sql);
$return = false;
foreach($res as $u_res) {
$return = $u_res["groups_id"];
}
-
+
return $return;
}
-function gwvp_getUserId($useremail)
+function gwvp_getGroup($gid = null, $gname = null)
{
+ /*
+ * $groupsql = '
+ CREATE TABLE groups (
+ "groups_id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "groups_name" TEXT,
+ "groups_is_admin" INTEGER,
+ "groups_owner_id" INTEGER
+ )';
+
+ */
$conn = gwvp_ConnectDB();
- $sql = "select users_id from users where user_email='$useremail'";
+ if($gid != null) {
+ $sql = "select * from groups where groups_id='$gid'";
+ } else if ($gname != null) {
+ $sql = "select * from groups where groups_name='$gname'";
+ } else return false;
$res = $conn->query($sql);
$return = false;
foreach($res as $u_res) {
- $return = $u_res["users_id"];
+ $return["id"] = $u_res["groups_id"];
+ $return["name"] = $u_res["groups_name"];
+ if($u_res["groups_is_admin"] == 1) {
+ $return["isadmin"] = true;
+ } else {
+ $return["isadmin"] = false;
+ }
+ $return["ownerid"] = $u_res["groups_owner_id"];
+ $return["description"] = $u_res["groups_description"];
}
return $return;
}
+function gwvp_getUserId($useremail=null, $username = null)
+{
+ $conn = gwvp_ConnectDB();
+
+ if($useremail != null) {
+ $sql = "select users_id from users where user_email='$useremail'";
+ } else if($username != null) {
+ $sql = "select users_id from users where user_username='$username'";
+ } else return false;
+
+ $res = $conn->query($sql);
+ $return = false;
+ foreach($res as $u_res) {
+ $return = $u_res["users_id"];
+ }
+
+ return $return;
+}
+
+function gwvp_getUserName($id = null, $email=null)
+{
+ $conn = gwvp_ConnectDB();
+
+ if($email != null) {
+ $sql = "select user_username from users where user_email='$email'";
+ } else if($id != null) {
+ $sql = "select user_username from users where users_id='$id'";
+ } else return false;
+
+ $res = $conn->query($sql);
+ $return = false;
+ foreach($res as $u_res) {
+ $return = $u_res["user_username"];
+ }
+
+ return $return;
+}
+
+
+function gwvp_getUserEmail($id)
+{
+ $conn = gwvp_ConnectDB();
+
+ $sql = "select user_email from users where users_id='$id'";
+
+ $res = $conn->query($sql);
+ $return = false;
+ foreach($res as $u_res) {
+ $return = $u_res["user_email"];
+ }
+
+ return $return;
+}
+
+function gwvp_deleteGroupMemberByID($uid, $gid)
+{
+ $conn = gwvp_ConnectDB();
+
+ /*
+ * CREATE TABLE "group_membership" (
+ "groupmember_id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "groupmember_groupid" INTEGER,
+ "groupmember_userid" INTEGER
+
+ */
+ $sql = "delete from group_membership where groupmember_groupid='$gid' and groupmember_userid='$uid'";
+
+ $conn->query($sql);
+
+ return true;
+}
+
+
+function gwvp_addGroupMemberByID($uid, $gid)
+{
+ $conn = gwvp_ConnectDB();
+
+ /*
+ * CREATE TABLE "group_membership" (
+ "groupmember_id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "groupmember_groupid" INTEGER,
+ "groupmember_userid" INTEGER
+
+ */
+ $sql = "insert into group_membership values (null, '$gid', '$uid')";
+
+ $conn->query($sql);
+
+ return true;
+}
+
+
function gwvp_addGroupMember($email, $groupname)
{
+ $conn = gwvp_ConnectDB();
+
+ $uid = gwvp_getUserId($email);
+ $gid = gwvp_getGroupId($groupname);
+
+ /*
+ * CREATE TABLE "group_membership" (
+ "groupmember_id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "groupmember_groupid" INTEGER,
+ "groupmember_userid" INTEGER
+
+ */
+ if($uid!=false&&$gid!=false) gwvp_addGroupMemberByID($uid, $gid);
+ else return false;
+
+ return true;
+}
+
+function gwvp_IsGroupMember($email, $groupname)
+{
+ $conn = gwvp_ConnectDB();
+
+ // i think this is right
+ $sql = "
+ select count(*) 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 and
+ g.groups_name='$groupname'
+ ";
+
+ $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_IsUserAdmin($email=null, $username = null, $userid = null)
+{
+ $conn = gwvp_ConnectDB();
+
+
+ // TODO: clean this up, this should be a single query - idiot
+ 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'";
+ } else return false;
+
+ $res = $conn->query($sql);
+ $rn = 0;
+ $gid = false;
+ foreach($res as $u_res) {
+ $gid[$rn] = $u_res["groupmember_groupid"];
+ $rn++;
+ }
+
+ if($gid !== false) foreach($gid as $gid_t) {
+ /*
+ * CREATE TABLE groups (
+ "groups_id" INTEGER,
+ "groups_name" TEXT,
+ "groups_is_admin" INTEGER,
+ "groups_owner_id" INTEGER
+ )';
+
+ */
+
+ $sql = "select groups_is_admin from groups where groups_id='$gid_t'";
+ $res = $conn->query($sql);
+ foreach($res as $u_res) {
+ if($u_res["groups_is_admin"] == "1") return true;
+ }
+ }
+
+ return false;
+}
+
+function gwvp_ModifyUser($userid, $email=null, $fullname=null, $password=null, $username=null, $desc=null, $status=null)
+{
+ /*
+ * "users_id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "user_full_name" TEXT,
+ "user_password" TEXT,
+ "user_username" TEXT,
+ "user_email" TEXT,
+ "user_desc" TEXT,
+ "user_status" INTEGER
+
+ */
+
+ $conn = gwvp_ConnectDB();
+
+ if($email != null) {
+ $sql = "update users set user_email='$email' where users_id='$userid'";
+ $conn->query($sql);
+ }
+
+ if($fullname != null) {
+ $sql = "update users set user_full_name='$fullname' where users_id='$userid'";
+ $conn->query($sql);
+ }
+
+ if($password != null) {
+ $shapass = sha1($password);
+ $sql = "update users set user_password='$shapass' where users_id='$userid'";
+ $conn->query($sql);
+ }
+
+ if($username != null) {
+ $sql = "update users set user_username='$username' where users_id='$userid'";
+ $conn->query($sql);
+ }
+
+ if($desc != null) {
+ $sql = "update users set user_desc='$desc' where users_id='$userid'";
+ $conn->query($sql);
+ }
+
+ if($status != null) {
+ $sql = "update users set user_status='$status' where users_id='$userid'";
+ $conn->query($sql);
+ }
+
+ return true;
+}
+
+
+function gwvp_ModifyGroup($groupid, $groupname = null, $group_is_admin = null, $groups_owner_id = null)
+{
+ /*
+ * CREATE TABLE groups (
+ "groups_id" INTEGER,
+ "groups_name" TEXT,
+ "groups_is_admin" INTEGER,
+ "groups_owner_id" INTEGER
+ )';
+
+ */
+ $conn = gwvp_ConnectDB();
+
+ if($groupname != null) {
+ $sql = "update groups set groups_name='$groupname' where groups_id='$groupid'";
+ $conn->query($sql);
+ }
+
+ if($group_is_admin != null) {
+ $sql = "update groups set groups_is_admin='$group_is_admin' where groups_id='$groupid'";
+ $conn->query($sql);
+ }
+
+ if($groups_owner_id != null) {
+ $sql = "update groups set groups_owner_id='$groups_owner_id' where groups_id='$groupid'";
+ $conn->query($sql);
+ }
+
+ return true;
+}
+
+function gwvp_GetRepoList()
+{
+ $conn = gwvp_ConnectDB();
+
+ /*
+ * $reposql = '
+ CREATE TABLE "repos" (
+ "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,
+ "repos_name" TEXT,
+ "repos_description" TEXT,
+ "repos_owner" INTEGER
+ )';
+
+ */
+
+ $sql = "select * from repos";
+
+ $res = $conn->query($sql);
+
+ $return = false;
+ $rn = 0;
+ foreach($res as $u_res) {
+ $return[$rn]["id"] = $u_res["repos_id"];
+ $return[$rn]["name"] = $u_res["repos_name"];
+ $return[$rn]["description"] = $u_res["repos_description"];
+ $return[$rn]["owner"] = $u_res["repos_owner"];
+ $rn++;
+ }
+
+ 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, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|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]["permid"] = $perm["repoperms_id"];
+ $returns[$rn]["type"] = $perm["repoperms_type"];
+ $returns[$rn]["ref"] = $perm["repoperms_ref"];
+ $rn++;
+ }
+
+ return $returns;
+}
+
+function gwvp_addRepoPermission($repoid, $permtype, $permref)
+{
+ $conn = gwvp_ConnectDB();
+
+ $sql = "insert into repoperms values(null, '$repoid', '$permtype', '$permref')";
+ return $conn->query($sql);
}
/* functions we'll need to access data:
- *
+ *
* getUsers(pattern)
* getUserData(username)
* getGroups(pattern)
* modifyGroup(...)
* addGroupMember(...)
* deleteGroupMember(...)
- *
+ *
* createUser(...)
* deleteUser(...)
* modifyUser(...)