activity logs... oh fun
[gwvp-mini.git] / gwvpmini / gwvpmini_db.php
index 4e939af..972746e 100644 (file)
@@ -6,7 +6,7 @@ $DB_CONNECTION = false;
 \r
 \r
 global $db_url, $db_type;\r
-error_log("in include for database, $db_type, $db_name");
+//error_log("in include for database, $db_type, $db_name");
 
 
 function gwvpmini_DBExists()
@@ -14,15 +14,15 @@ function gwvpmini_DBExists()
        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");
+       //error_log("checking for $db_name, $db_type");
        
        if($db_type == "sqlite") {
                if(file_exists($db_name)) {
-                       error_log("Exists");
+                       //error_log("Exists");
                        return true;
                }
                else {
-                       error_log("no exists");
+                       //error_log("no exists");
                        return false;
                }
        }
@@ -118,30 +118,73 @@ function gwvpmini_ChangeRepoPerm($rid, $uid, $acc)
        if($cperms_t === false) return false;
        
        $permsarray = array();
-       if($cperms_t == "") {
-               $permsarray[$uid] = $acc;
+       if($uid != "b") {
+               if($cperms_t == "") {
+                       $permsarray[$uid] = $acc;
+               } else {
+                       $permsarray = unserialize(base64_decode($cperms_t));
+                       $permsarray[$uid] = $acc;
+                       if($acc == 0) {
+                               error_log("PERMSUPDATE: REMOVE $uid");
+                               unset($permsarray[$uid]);
+                       }
+               }
        } else {
-               $permsarray = unserialize(base64_decode($cperms_t));
-               $permsarray[$uid] = $acc; 
+               error_log("CHANGEREPOPERMS for b of $acc");
+               $permsarray["b"] = $acc;
        }
        
        // check if base is now r or a, we can drop any 1's
        if($permsarray["b"] == "a" || $permsarray["b"] == "r") {
                foreach($permsarray as $key => $val) {
                        if($val == 1) {
+                               error_log("CHANGEREPOPERMS removed $key $val for base perm change");
                                unset($permsarray[$key]);
                        }
                }
        }
        
+       if(is_array($permsarray)) {
+               if(!isset($permsarray["b"])) {
+                       // something went wrong, repalce b bit
+                       $permsarray["b"] = "a";
+               }
+       } else {
+               // something went even wronger
+               $permsarray["b"] = "a";
+       }
+       
+
        $encperms = base64_encode(serialize($permsarray));
        
        $sql = "update repos set repos_perms='$encperms' where repos_id='$rid'";\r
+
+       error_log("PERMSARRAYNOW $sql ".print_r($permsarray,true));\r
        
        $conn->query($sql);
        
 }
 
+function gwvpmini_GetRepoPerms($rid)
+{
+       $conn = gwvpmini_ConnectDB();\r
+       \r
+       $sql = "select repos_perms from repos where repos_id='$rid'";\r
+       \r
+       $res = $conn->query($sql);\r
+       \r
+       $cperms_t = false;\r
+       if($res !== false) foreach($res as $row) {\r
+               $cperms_t = $row[0];\r
+       }\r
+       \r
+       if($cperms_t === false) return false;\r
+       \r
+       $permsarray = unserialize(base64_decode($cperms_t));
+       
+       return $permsarray;
+}
+
 //returns 0 for none, 1 for read, 2 for writes
 function gwvpmini_GetRepoPerm($rid, $uid)
 {
@@ -153,8 +196,6 @@ function gwvpmini_GetRepoPerm($rid, $uid)
        \r
        $res = $conn->query($sql);
        
-       error_log("PERMCHECK: FUCK U! $sql");\r
-       \r
        $cperms_t = false;\r
        if($res !== false) foreach($res as $row) {\r
                $cperms_t = $row[0];\r
@@ -220,6 +261,19 @@ function gwvpmini_DisableUser($uid)
        $sql = "update users set user_status=1 where user_id='$uid'";\r
 \r
        return $conn->query($sql);\r
+}
+
+function gwvpmini_UpdateRepoDescription($rid, $desc)
+{
+       $conn = gwvpmini_ConnectDB();\r
+       
+       // remove any tag elements
+       $newdesc_r = preg_replace("/[\<\>\;]+/", "", $desc);
+       $newdesc = preg_replace("/\n/", "<br>", $newdesc_r);
+       
+       $sql = "update repos set repos_description='$newdesc' where repos_id='$rid'";
+       
+       return $conn->query($sql);
 }\r
 \r
 function gwvpmini_EnableUser($uid)\r
@@ -261,14 +315,14 @@ function gwvpmini_ConnectDB()
        global $WEB_ROOT_FS, $BASE_URL, $data_directory, $db_type, $db_name, $DB_CONNECTION;\r
 \r
        // first check if $DB_CONNECTION IS live\r
-       error_log("in connection $db_type, $db_name");\r
+       //error_log("in connection $db_type, $db_name");\r
 \r
        if($DB_CONNECTION != false) return $DB_CONNECTION;\r
 \r
        if($db_type == "sqlite") {\r
                $db_url = $db_name;\r
                if(!file_exists($db_name)) {\r
-                       error_log("$db_name does not exist - problem");
+                       //error_log("$db_name does not exist - problem");
                        // TODO: NEED A SETUP AGENT!
                        gwvpmini_dbCreateSQLiteStructure($db_name);
                        gwvpmini_setConfigVal("repodir", "$data_directory/repos");\r
@@ -276,7 +330,7 @@ function gwvpmini_ConnectDB()
        }\r
 \r
        // and here we go with pdo.\r
-       error_log("attmpting to open db, $db_type:$db_url");\r
+       //error_log("attmpting to open db, $db_type:$db_url");\r
        try {\r
                $DB_CONNECTION = new PDO("$db_type:$db_url");\r
        } catch(PDOException $exep) {\r
@@ -370,7 +424,24 @@ function gwvpmini_dbCreateSQLiteStructure($dbloc)
        // this looks like null, <repoid>, <read|visible|write>, user:<uid>|group:<gid>|authed|anon\r
        // where authed = any authenticated user, anon = everyone (logged in, not logged in, etc)\r
        // read|visible|write = can clone from repo|can see repo exists and see description but not clone from it|can push to repo\r
-       // TODO: is this sufficient? i have to think about it\r
+       // TODO: is this sufficient? i have to think about it
+       
+       
+       // type for now will only be "git"
+       // date is obvious
+       // desc is a desction of the activity
+       // link is of the form "repo,reponame,repoid:user,username,useremail,userid" so it
+       // can be attached simply
+       // viewby is a simple list of uid's that should be able to see it... "r" for all registered
+       // "a" for everyone
+       $activitysql = '
+       CREATE TABLE "activity" (
+               "activity_type" TEXT,
+               "activity_date" TEXT,
+               "activity_desc" TEXT,
+               "activity_link" TEXT,
+               "activity_viewby" TEXT
+       )';\r
 \r
        $configsql = '\r
        CREATE TABLE "config" (\r
@@ -389,7 +460,8 @@ function gwvpmini_dbCreateSQLiteStructure($dbloc)
        $DB_CONNECTION->query($initialuser_admin);
        $DB_CONNECTION->query($initialuser_user);
        $DB_CONNECTION->query($reposql);\r
-       $DB_CONNECTION->query($configsql);\r
+       $DB_CONNECTION->query($configsql);
+       $DB_CONNECTION->query($activitysql);\r
 }
 
 function gwvpmini_getConfigVal($confname)\r
@@ -613,6 +685,7 @@ function gwvpmini_GetUserNameFromEmail($email)
 \r
        return $retval;\r
 }
+
 function gwvpmini_GetOwnedRepos($username)\r
 {
        /*
@@ -639,6 +712,7 @@ function gwvpmini_GetOwnedRepos($username)
                $retval[$id]["name"] = $row["repos_name"];
                $retval[$id]["desc"] = $row["repos_description"];
                $retval[$id]["id"] = $row["repos_id"];
+               $retval[$id]["status"] = $row["repos_status"];
                error_log(print_r($row, true));
        }
        
@@ -646,6 +720,51 @@ function gwvpmini_GetOwnedRepos($username)
        return $retval;\r
 }
 
+function gwvpmini_GetContributedRepos($username)\r
+{\r
+       /*\r
+        *      CREATE TABLE "repos" (\r
+                       "repos_id" INTEGER PRIMARY KEY AUTOINCREMENT,\r
+                       "repos_name" TEXT,\r
+                       "repos_description" TEXT,\r
+                       "repos_owner" INTEGER\r
+        )';\r
+\r
+       */\r
+       $conn = gwvpmini_ConnectDB();\r
+\r
+\r
+       $uid = gwvpmini_GetUserId($username);\r
+       $sql = "select repos_id,repos_description,repos_perms,repos_owner,repos_status,repos_name from repos";\r
+       $res = $conn->query($sql);\r
+       if($username == "") return false;\r
+\r
+       $retval = false;
+       $rids = null;
+       $i = 0;\r
+       foreach($res as $row) {
+               $perms = unserialize(base64_decode($row["repos_perms"]));
+               error_log("CONTRIB: $uid for ".$row["repos_id"]." - ".print_r($perms,true));
+               if(isset($perms["$uid"])) if($perms["$uid"] > 1) {
+                       $rids[$i]["id"] = $row["repos_id"];
+                       $rids[$i]["desc"] = $row["repos_description"];
+                       $rids[$i]["owner"] = $row["repos_owner"];
+                       $rids[$i]["status"] = $row["repos_status"];
+                       $rids[$i]["name"] = $row["repos_name"];
+                       $i++;
+               }
+       }
+       $retval = $rids;
+       
+       if($i == 0) {
+               error_log("CONTRIBREPOS: no repos found?");
+               return false;
+       }\r
+\r
+       error_log("CONTRIBREPOS: ".print_r($retval, true));\r
+       return $retval;\r
+}
+
 function gwvpmini_userLevel($id)
 {
        $conn = gwvpmini_ConnectDB();