Activity log is now working
[gwvp-mini.git] / gwvpmini / gwvpmini_gitrepo.php
index 1f42a7f..46c4f95 100644 (file)
@@ -3,7 +3,7 @@ global $HOME_PAGE_PROVIDERS;
 
 
 $CALL_ME_FUNCTIONS["repoadmin"] = "gwvpmini_RepoCallMe";
-$HOME_PAGE_PROVIDERS["gitlog"] = "gwvpmini_GitLogProvider";\r
+$HOME_PAGE_PROVIDERS["00gitlog"] = "gwvpmini_GitLogProvider";\r
 \r
 \r
 // the home_page_provders bit is an array\r
@@ -15,15 +15,15 @@ $MENU_ITEMS["10repos"]["link"] = "$BASE_URL/repos";
 function gwvpmini_RepoCallMe()\r
 {\r
 \r
-       error_log("in repoadmin callme - err?");
-       error_log(print_r($_REQUEST, true));\r
+       // error_log("in repoadmin callme - err?");
+       // error_log(print_r($_REQUEST, true));\r
        if(isset($_REQUEST["q"])) {
-               error_log("in repoadmin callme, for Q");\r
+               // error_log("in repoadmin callme, for Q");\r
                $query = $_REQUEST["q"];\r
                $qspl = explode("/", $query);\r
                if(isset($qspl[0])) {\r
                        if($qspl[0] == "repos") {
-                               error_log("in repos call");
+                               // error_log("in repos call");
                                if(isset($qspl[1])) {
                                        if($qspl[1] == "create") {
                                                return "gwvpmini_RepoCreate";
@@ -31,7 +31,7 @@ function gwvpmini_RepoCallMe()
                                                return "gwvpmini_RepoMainPage";
                                        }
                                } else {\r
-                                       error_log("i got here, where next?");\r
+                                       // error_log("i got here, where next?");\r
                                        return "gwvpmini_RepoMainPage";
                                }\r
                        } else return false;\r
@@ -51,7 +51,8 @@ function gwvpmini_RepoMainPage()
 
 function gwvpmini_RepoMainPageBody()
 {
-       gwvpmini_GitCreateRepoForm();
+       global $BASE_URL;
+       
        if(gwvpmini_isLoggedIn()) {
                $repos = gwvpmini_GetOwnedRepos($_SESSION["username"]);
                if(!$repos) {
@@ -62,17 +63,60 @@ function gwvpmini_RepoMainPageBody()
                        foreach($repos as $repo) {
                                $name = $repo["name"];
                                $desc = $repo["desc"];
-                               echo "<tr><td>$name</td><td>$desc</td>";
+                               $repo_base = gwvpmini_getConfigVal("repodir");
+                               $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null";
+                               echo "<tr><td><a href=\"$BASE_URL/view/$name\">$name</a></td><td>$desc</td>";
                                echo "<td>";\r
-                               $repo_base = gwvpmini_getConfigVal("repodir");\r
-                               $cmd = "git --git-dir=\"$repo_base/$name.git\" log -1 2>&1";\r
-                               error_log("CMD: $cmd");\r
-                               system("$cmd");\r
+                               // error_log("CMD: $cmd");
+                               //system("$cmd");
+                               $fls = popen($cmd, "r");
+                               $tks = "";
+                               if($fls !== false) while(!feof($fls)) {
+                                       $tks .= fread($fls,1024);
+                               }
+                               
+                               if($tks == "") {
+                                       echo "No Log Info Yet";
+                               } else echo $tks;
                                echo "</td>";
                                echo "</tr>";
                        }
                        echo "</table>";
                }
+               gwvpmini_GitCreateRepoForm();\r
+               
+               
+               $contreps = gwvpmini_GetContributedRepos($_SESSION["username"]);
+               
+               if($contreps !== false) {
+                       echo "<h2>Repos you contribute to</h2>";
+                       echo "<table border=\"1\"><tr><th>Repo Name</th><th>Owner</th><th>Repo Description</th><th>Last Log</th></tr>";
+                       foreach($contreps as $repo) {
+                               $name = $repo["name"];\r
+                               $desc = $repo["desc"];
+                               $repo_base = gwvpmini_getConfigVal("repodir");\r
+                               $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null";
+                               // error_log("CMD: $cmd");
+                               //system("$cmd");
+                               $fls = popen($cmd, "r");
+                               $tks = "";
+                               if($fls !== false) while(!feof($fls)) {
+                                       $tks .= fread($fls,1024);
+                               }
+                               
+                               if($tks == "") {
+                                       $lastlog = "No Log Info Yet";
+                               } else $lastlog = $tks;
+                               
+                               $owner = gwvpmini_getUser(null, null, $repo["owner"]);
+                               $repname = "<a href=\"$BASE_URL/view/$name\">$name</a>";
+                               $repown = gwvpmini_HtmlGravatar($owner["email"], 30, "<br>")."<a href=\"$BASE_URL/user/".$owner["username"]."\">".$owner["username"]."</a>";
+                               
+                               
+                               echo "<tr><td>$repname</td><td>$repown</td><td>$desc</td><td>$lastlog</td></tr>";
+                       }
+                       echo "</table>";
+               }
        }
        return true;
 }
@@ -90,6 +134,9 @@ function gwvpmini_GitLogProvider()
        *\r
        * Or... should we instead just list every repo?\r
        */
+       
+       global $BASE_URL;
+       
        echo "<h2>Repo Activity</h2>";
        if(gwvpmini_isLoggedIn()) {\r
                $repos = gwvpmini_GetOwnedRepos($_SESSION["username"]);
@@ -101,12 +148,21 @@ function gwvpmini_GitLogProvider()
                        foreach($repos as $repo) {
                                $name = $repo["name"];
                                $desc = $repo["desc"];
-                               echo "<tr><td>$name</td><td>$desc</td>";
+                               echo "<tr><td><a href=\"$BASE_URL/view/$name\">$name</a></td><td>$desc</td>";
                                echo "<td>";
                                $repo_base = gwvpmini_getConfigVal("repodir");
-                               $cmd = "git --git-dir=\"$repo_base/$name.git\" log -1 2>&1";
-                               error_log("CMD: $cmd");
-                               system("$cmd");
+                               $cmd = "git --git-dir=\"$repo_base/$name.git\" log --all -1 2> /dev/null";
+                               // error_log("CMD: $cmd");
+                               //system("$cmd");
+                               $fls = popen($cmd, "r");
+                               $tks = "";
+                               if($fls !== false) while(!feof($fls)) {
+                                       $tks .= fread($fls,1024);
+                               }
+                               
+                               if($tks == "") {
+                                       echo "No Log Info Yet";
+                               } else echo $tks;
                                echo "</td>";
                                echo "</tr>";
                        }
@@ -124,23 +180,47 @@ function gwvpmini_GitCreateRepoForm()
        echo "<tr><th colspan=\"2\">Create Repo</th></tr>";
        echo "<tr><th>Repo Name</th><td><input type=\"text\" name=\"reponame\"></td></tr>";
        echo "<tr><th>Repo Description</th><td><input type=\"text\" name=\"repodesc\"></td></tr>";
+       echo "<tr><th>Read Permissions</th><td>";
+       echo "<select name=\"perms\">";
+       echo "<option value=\"perms-public\">Anyone Can Read</option>";
+       echo "<option value=\"perms-registered\">Must be Registered To Read</option>";
+       echo "<option value=\"perms-onlywrite\">Only Writers can Read</option>";
+       echo "</select>";
+       echo "</td></tr>";
        echo "<tr><td colspan=\"2\"><input type=\"submit\" name=\"Create\" value=\"Create\"></td></tr>";
        echo "</table>";
        echo "</form>";
-}\r
+}
 
 function gwvpmini_RepoCreate()
 {
        
        global $BASE_URL;
        
-       if(gwvpmini_isLoggedIn()) {
+       // TODO: check the stuff out
+       // first reponame
+       $inputcheck = true;
+
+       // remove a .git at the end if it was input
+       $_REQUEST["reponame"] = preg_replace("/\.git$/", "", $_REQUEST["reponame"]);
+       
+       // check for valid chars
+       $replcheck = preg_replace("/[a-zA-Z0-9_\-\.]/", "", $_REQUEST["reponame"]);
+       if(strlen($replcheck)>0) {
+               $inputcheck = false;
+               $inputcheckerror = "Repo name contains invalid characters, repos can only contain a-z, A-Z, 0-9, _, - and .";
+       }
+       
+       if(!$inputcheck) {
+               gwvpmini_SendMessage("error", "$inputcheckerror");\r
+               header("Location: $BASE_URL/repos");
+       } else  if(gwvpmini_isLoggedIn()) {
                //gwvpmini_createGitRepo($name, $ownerid, $desc, $bundle=null, $defaultperms=0)
                if(gwvpmini_HaveRepo($_REQUEST["reponame"])) {
                        gwvpmini_SendMessage("error", "Repo ".$_REQUEST["reponame"]." already exists");\r
                        header("Location: $BASE_URL/repos");
                } else {
-                       gwvpmini_createGitRepo($_REQUEST["reponame"], $_SESSION["id"], $_REQUEST["repodesc"]);
+                       gwvpmini_createGitRepo($_REQUEST["reponame"], $_SESSION["id"], $_REQUEST["repodesc"], $_REQUEST["perms"]);
                        gwvpmini_SendMessage("info", "Repo ".$_REQUEST["reponame"]." has been created");
                        header("Location: $BASE_URL/repos");
                }
@@ -157,4 +237,47 @@ function gwvpmini_HaveRepo($reponame)
        if(file_exists("$repo_base/$reponame.git")) return true;
 }
 
+
+function gwvpmini_RemoveRepo($rid)
+{
+       $repo_base = gwvpmini_getConfigVal("repodir");
+       
+       $repdet = gwvpmini_getRepo(null, null, $rid);
+       
+       $rname = $repdet["name"];
+       
+       // error_log("FROM PANTS:".print_r($repdet,true)." ----------- ".print_r($rname, true));
+       
+       if($repdet != false && $rname != "") {
+               if(file_exists("$repo_base/$rname.git")) {
+                       // recursive remove - frightening
+                       if(gwvpmini_RecursiveDelete("$repo_base/$rname.git")) {
+                               gwvpmini_RemoveRepoDB($rid);
+                       }
+               }
+       } return false;
+}
+
+function gwvpmini_RecursiveDelete($fpath)
+{
+       // error_log("RECURSEDETELE: ".$fpath);
+       if(is_file($fpath)){\r
+               return @unlink($fpath);\r
+       }\r
+       elseif(is_dir($fpath)){\r
+               $scan = glob(rtrim($fpath,'/').'/*');\r
+               foreach($scan as $index=>$path){\r
+                       gwvpmini_RecursiveDelete($path);\r
+               }\r
+               return @rmdir($fpath);\r
+       }
+}
+
+function gwvpmini_CompressCommitId($cid)
+{
+       $compressedcid = substr($cid, 0, 5)."...".substr($cid, strlen($cid)-5, strlen($cid));
+       
+       return $compressedcid;
+}
+       
 ?>
\ No newline at end of file