repo view now follows permissions
[gwvp-mini.git] / gwvpmini / gwvpmini_view.php
index 3703a72..b47c152 100644 (file)
@@ -20,7 +20,23 @@ function gwvpmini_RepoViewCallMe()
                                        $repo_view_call = $qspl[1];
                                        return "gwvpmini_RepoViewPage";\r
                                } else return false;\r
-                       } else return false;\r
+                       }
+                       if($qspl[0] == "updaterepobaseperms") {
+                               return "gwvpmini_UpdateRepoBasePerms";
+                       } 
+                       if($qspl[0] == "repoaddreader") {
+                               return "gwvpmini_AddRepoReader";
+                       }
+                       if($qspl[0] == "repoaddcontrib") {
+                               return "gwvpmini_AddRepoContributor";
+                       }
+                       if($qspl[0] == "reporemovereaders") {
+                               return "gwvpmini_RemoveRepoReader";
+                       }
+                       if($qspl[0] == "reporemovecontribs") {
+                               return "gwvpmini_RemoveRepoContributor";
+                       }
+                       return false;\r
                }\r
                else return false;\r
        }\r
@@ -46,13 +62,114 @@ function gwvpmini_RepoViewPageBody()
        
        $repo_base = gwvpmini_getConfigVal("repodir");\r
 
+       $bperms_f = gwvpmini_GetRepoPerms(gwvpmini_GetRepoId($repo_view_call));
+       $bperms = $bperms_f["b"];
+       
+       $owner_view = false;\r
+       
        if($_SERVER["SERVER_PORT"] == 443) $proto="https://";
        else $proto = "http://";
        $sname = $_SERVER["SERVER_NAME"];
        
-       echo "<br><h2>$repo_view_call by owner</h2>";
-       echo "<b>Desc</b><br>";
-       echo "<textarea rows=1 cols=100>git clone $proto$sname$BASE_URL/git/$repo_view_call.git</textarea><br>";
+       $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);
+       $desc = gwvpmini_GetRepoDescFromName($repo_view_call);
+       
+       $owner_name = $owner["username"];
+       
+       // TODO: fix this so that if user has no read access to repo, they cant see it
+       if(isset($_SESSION["id"])) {
+               if($owner["id"] == $_SESSION["id"]) {
+                       $owner_view = true;
+               } else if ($bperms != "r") {
+                       // check user level perms
+                       $perm = gwvpmini_GetRepoPerm($rid, $_SESSION["id"]);
+                       if($perm < 1) {
+                               header("Location: $BASE_URL");\r
+                               return;
+                       }
+               }
+       } else {
+               if($bperms != "a") {
+                       header("Location: $BASE_URL");
+                       return;
+               }
+       }
+       
+       
+       error_log("STUFF:".print_r($owner,true));
+       if($bperms != "a") $login = $_SESSION["username"]."@password:";
+       else $login = "";
+       $cloneurl = "git clone $proto$login$sname$BASE_URL/git/$repo_view_call.git";
+       echo "<textarea rows=1 cols=".strlen($cloneurl).">$cloneurl</textarea><br>";
+       
+       if($owner_view) $owner_extra = " (YOU)";
+       else $owner_extra = "";\r
+       
+       echo "<h2>".get_gravatar($owner["email"], 30, 'mm', 'g', true)."$repo_view_call - $owner_name$owner_extra</h2>";
+       echo "<b>$desc</b><br>";
+       
+       if($owner_view) {
+               
+               
+
+               
+               $anyo = "";
+               $regd = "";
+               $expl = "";
+               if($bperms == "a") $anyo = " selected";\r
+               if($bperms == "r") $regd = " selected";\r
+               if($bperms == "x") $expl = " selected";\r
+               
+               error_log("BPERMS: $bperms");
+               
+               if($bperms == "x") $cspan = 3;
+               else $cspan = 2;
+               
+               echo "<table border=\"1\"><tr valign=\"top\"><tr><th colspan=\"$cspan\">Permissions</th></tr><td>";
+               echo "<form method=\"post\" action=\"$BASE_URL/updaterepobaseperms/$repo_view_call\">";
+               echo "<select name=\"base_perms\">";
+               echo "<option value=\"a\"$anyo>Anyone can read</option>";
+               echo "<option value=\"r\"$regd>Only registered users can read</option>";
+               echo "<option value=\"x\"$expl>Explicit read permissions</option>";
+               echo "</select>";
+               echo "<input type=\"submit\" name=\"Set\" value=\"Set\">";
+               echo "</form>";
+               if($bperms == "x") {
+                       echo "</td><td><b>Readers</b><br>";
+                       echo "<form method=\"post\" action=\"$BASE_URL/reporemovereaders/$repo_view_call\">";
+                       $nl = 0;
+                       foreach($bperms_f as $key=>$val) {
+                               if($val == 1) {
+                                       $dets = gwvpmini_getUser(null, null, $key);
+                                       echo get_gravatar($dets["email"], 18, 'mm', 'g', true)." <input type=\"checkbox\" name=\"$key\"> ".$dets["username"]."<br>";
+                                       $nl = 1;
+                               }
+                       }
+                       if($nl==1) echo "<input type=\"submit\" name=\"remove\" value=\"Remove Selected\">";
+                       echo "</form>";
+                       echo "<form method=\"post\" action=\"$BASE_URL/repoaddreader/$repo_view_call\">";
+                       echo "<input type=\"text\" name=\"readerusername\"> <input type=\"submit\" name=\"Add\" value=\"Add\">";
+                       echo "</form><br>";
+               }
+               
+               echo "</td><td><b>Contributors</b><br>";
+               echo "<form method=\"post\" action=\"$BASE_URL/reporemovecontribs/$repo_view_call\">";
+               $nl = 0;
+               foreach($bperms_f as $key=>$val) {\r
+                       if($val == 2) {\r
+                               $dets = gwvpmini_getUser(null, null, $key);\r
+                               echo get_gravatar($dets["email"], 18, 'mm', 'g', true)." <input type=\"checkbox\" name=\"$key\"> ".$dets["username"]."<br>";
+                               $nl = 1;\r
+                       }\r
+               }\r
+               if($nl==1) echo "<input type=\"submit\" name=\"remove\" value=\"Remove Selected\">";\r
+               echo "</form>";
+               
+               echo "<form method=\"post\" action=\"$BASE_URL/repoaddcontrib/$repo_view_call\">";
+               echo "<input type=\"text\" name=\"contribusername\"> <input type=\"submit\" name=\"Add\" value=\"Add\">";
+               echo "</form><br>";
+               echo "</td></tr></table>";
+       }
        //echo "command: git log --git-dir=$repo_base/$repo_view_call.git --pretty=format:\"%H\" -10";
        $rs = popen("git --git-dir=$repo_base/$repo_view_call.git log --pretty=format:\"%H\" -10", "r");
        $commitids = array();
@@ -67,7 +184,6 @@ function gwvpmini_RepoViewPageBody()
                }
                fclose($rs);
        } else {
-               echo "No commit logs yet<br>";
                $commitids = false;
        }
        
@@ -76,7 +192,7 @@ function gwvpmini_RepoViewPageBody()
                echo "<table border=\"1\">";
                echo "<tr><th>Committed By</th><th>Date</th><th>Commit Log Entry</th></tr>";
                foreach($commitids as $ids) {
-                       $rs = popen("git --git-dir=$repo_base/$repo_view_call.git log --pretty=format:\"%at%n%ce%n%an%n%s\" $ids -1", "r");
+                       $rs = popen("git --git-dir=$repo_base/$repo_view_call.git log --pretty=format:\"%at%n%ce%n%an%n%s\" $ids -1 2> /dev/null", "r");
                        if($rs) {
                                $flin1 = trim(fgets($rs));
                                $flin2 = trim(fgets($rs));
@@ -92,8 +208,289 @@ function gwvpmini_RepoViewPageBody()
                        echo "<tr><td>".get_gravatar($flin2, 18, 'mm', 'g', true)."$flon</td><td>$flin1</td><td>$flin4</td></tr>";
                }
                echo "</table>";
+       } else {
+               echo "No commit information available yet<br>";
+       }
+}
+
+function gwvpmini_UpdateRepoBasePerms()
+{
+       global $BASE_URL, $repo_view_call;
+       
+       if(isset($_REQUEST["q"])) {\r
+               $query = $_REQUEST["q"];\r
+               $qspl = explode("/", $query);
+               error_log("PLOOP:qview".print_r($qspl, true));\r
+       }
+       
+       if(isset($qspl[1])) $repo_view_call = $qspl[1];
+       else {
+               error_log("PLOOP: no repo name");
+               header("Location: $BASE_URL/view/$repo_view_call");
+               return;
+       }
+       
+       $newperms = $_REQUEST["base_perms"];
+       
+       $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
+       $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
+       \r
+       $owner_name = $owner["username"];
+       
+       $owner_view = false;
+       if(isset($_SESSION["id"])) {\r
+               if($owner["id"] == $_SESSION["id"]) {\r
+                       $owner_view = true;\r
+               }\r
+       }
+       
+       $rid = gwvpmini_GetRepoId($repo_view_call);
+       
+       if(!$owner_view) {
+               gwvpmini_SendMessage("error", "failure updating permission for repo");
+               error_log("PLOOP: attempt to update from non-owner");
+       } else {
+               error_log("PLOOP: updateds: ".print_r($_REQUEST, true));
+               gwvpmini_ChangeRepoPerm($rid, "b", $_REQUEST["base_perms"]);
+               gwvpmini_SendMessage("info", "Base permissions for repo updated");
+       }\r
+       
+       header("Location: $BASE_URL/view/$repo_view_call");
+}
+
+function gwvpmini_AddRepoReader()
+{
+       global $BASE_URL, $repo_view_call;\r
+       \r
+       if(isset($_REQUEST["q"])) {\r
+               $query = $_REQUEST["q"];\r
+               $qspl = explode("/", $query);\r
+               error_log("PLOOP:qview".print_r($qspl, true));\r
+       }\r
+       \r
+       if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
+       else {\r
+               error_log("PLOOP: no repo name");
+               // TODO: btw, this makes no sense\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       }\r
+       \r
+       $newperms = $_REQUEST["base_perms"];\r
+       \r
+       $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
+       $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
+       \r
+       $owner_name = $owner["username"];\r
+       \r
+       $owner_view = false;\r
+       if(isset($_SESSION["id"])) {\r
+               if($owner["id"] == $_SESSION["id"]) {\r
+                       $owner_view = true;\r
+               }\r
+       }
+       if(!$owner_view) {
+               gwvpmini_SendMessage("error", "failure updating permission for repo");\r
+               error_log("PLOOP: attempt to update from non-owner");
+               header("Location: $BASE_URL/view/$repo_view_call");
+               return;
+       }\r
+       
+       $auid = gwvpmini_GetUserId($_REQUEST["readerusername"]);
+       
+       if($auid == $_SESSION["id"]) {
+               gwvpmini_SendMessage("error", "You cannot add yourself as a reader as you already own the repo");
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;
+       }
+       
+       if($auid > 0)  {\r
+               $rid = gwvpmini_GetRepoId($repo_view_call);
+               
+               gwvpmini_ChangeRepoPerm($rid, $auid, 1);
+               gwvpmini_SendMessage("info", "Added user ".$_REQUEST["readerusername"]." as a reader");
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;
+       } else {
+               gwvpmini_SendMessage("error", "Couldnt find user with username of ".$_REQUEST["readerusername"]);
+               header("Location: $BASE_URL/view/$repo_view_call");
+               return;
+       }
+       
+       
+}
+
+function gwvpmini_AddRepoContributor()
+{
+       global $BASE_URL, $repo_view_call;\r
+       \r
+       if(isset($_REQUEST["q"])) {\r
+               $query = $_REQUEST["q"];\r
+               $qspl = explode("/", $query);\r
+               error_log("PLOOP:qview".print_r($qspl, true));\r
+       }\r
+       \r
+       if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
+       else {\r
+               error_log("PLOOP: no repo name");\r
+               // TODO: btw, this makes no sense\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       }\r
+       \r
+       $newperms = $_REQUEST["base_perms"];\r
+       \r
+       $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
+       $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
+       \r
+       $owner_name = $owner["username"];\r
+       \r
+       $owner_view = false;\r
+       if(isset($_SESSION["id"])) {\r
+               if($owner["id"] == $_SESSION["id"]) {\r
+                       $owner_view = true;\r
+               }\r
+       }\r
+       if(!$owner_view) {\r
+               gwvpmini_SendMessage("error", "failure updating permission for repo");\r
+               error_log("PLOOP: attempt to update from non-owner");\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       }\r
+       \r
+       $auid = gwvpmini_GetUserId($_REQUEST["contribusername"]);\r
+       \r
+       if($auid == $_SESSION["id"]) {\r
+               gwvpmini_SendMessage("error", "You cannot add yourself as a contributor as you already own the repo");\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       }\r
+       \r
+       if($auid > 0)  {\r
+               $rid = gwvpmini_GetRepoId($repo_view_call);\r
+       \r
+               gwvpmini_ChangeRepoPerm($rid, $auid, 2);\r
+               gwvpmini_SendMessage("info", "Added user ".$_REQUEST["contribusername"]." as a contributor");\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       } else {\r
+               gwvpmini_SendMessage("error", "Couldnt find user with username of ".$_REQUEST["contribusername"]);\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
        }
 }
+
+function gwvpmini_RemoveRepoContributor()
+{
+       
+       global $BASE_URL, $repo_view_call;\r
+       \r
+       if(isset($_REQUEST["q"])) {\r
+               $query = $_REQUEST["q"];\r
+               $qspl = explode("/", $query);\r
+               error_log("PLOOP:qview".print_r($qspl, true));\r
+       }\r
+       \r
+       if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
+       else {\r
+               error_log("PLOOP: no repo name");\r
+               // TODO: btw, this makes no sense\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       }\r
+       \r
+       \r
+       $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
+       $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
+       \r
+       $owner_name = $owner["username"];\r
+       \r
+       $owner_view = false;\r
+       if(isset($_SESSION["id"])) {\r
+               if($owner["id"] == $_SESSION["id"]) {\r
+                       $owner_view = true;\r
+               }\r
+       }\r
+       if(!$owner_view) {\r
+               gwvpmini_SendMessage("error", "failure updating permission for repo");\r
+               error_log("PLOOP: attempt to update from non-owner");\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       }
+       
+       $rid = gwvpmini_GetRepoId($repo_view_call);
+       
+       $bperms_f = gwvpmini_GetRepoPerms($rid);
+       
+       foreach($bperms_f as $key=>$val) {
+               if($val == 2) {
+                       if(isset($_REQUEST["$key"])) {
+                               gwvpmini_ChangeRepoPerm($rid, $key, 0);
+                       }
+               }
+       }
+       
+       gwvpmini_SendMessage("info", "Repo permissions updated");
+       header("Location: $BASE_URL/view/$repo_view_call");\r
+       return;\r
+       
+}\r
+
+\r
+function gwvpmini_RemoveRepoReader()\r
+{\r
+\r
+       global $BASE_URL, $repo_view_call;\r
+\r
+       if(isset($_REQUEST["q"])) {\r
+               $query = $_REQUEST["q"];\r
+               $qspl = explode("/", $query);\r
+               error_log("PLOOP:qview".print_r($qspl, true));\r
+       }\r
+\r
+       if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
+       else {\r
+               error_log("PLOOP: no repo name");\r
+               // TODO: btw, this makes no sense\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       }\r
+\r
+\r
+       $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
+       $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
+\r
+       $owner_name = $owner["username"];\r
+\r
+       $owner_view = false;\r
+       if(isset($_SESSION["id"])) {\r
+               if($owner["id"] == $_SESSION["id"]) {\r
+                       $owner_view = true;\r
+               }\r
+       }\r
+       if(!$owner_view) {\r
+               gwvpmini_SendMessage("error", "failure updating permission for repo");\r
+               error_log("PLOOP: attempt to update from non-owner");\r
+               header("Location: $BASE_URL/view/$repo_view_call");\r
+               return;\r
+       }\r
+\r
+       $rid = gwvpmini_GetRepoId($repo_view_call);\r
+\r
+       $bperms_f = gwvpmini_GetRepoPerms($rid);\r
+\r
+       foreach($bperms_f as $key=>$val) {\r
+               if($val == 1) {\r
+                       if(isset($_REQUEST["$key"])) {\r
+                               gwvpmini_ChangeRepoPerm($rid, $key, 0);\r
+                       }\r
+               }\r
+       }\r
+\r
+       gwvpmini_SendMessage("info", "Repo permissions updated");\r
+       header("Location: $BASE_URL/view/$repo_view_call");\r
+       return;\r
 \r
+}\r
 
 ?>
\ No newline at end of file