initial code layout
[gwvp-mini.git] / gwvpmini / gwvpmini_gitrepo.php
1 <?php
2 global $HOME_PAGE_PROVIDERS;\r
3
4
5 $CALL_ME_FUNCTIONS["repoadmin"] = "gwvpmini_RepoCallMe";
6 $HOME_PAGE_PROVIDERS["gitlog"] = "gwvpmini_GitLogProvider";\r
7 \r
8 \r
9 // the home_page_provders bit is an array\r
10 \r
11 $MENU_ITEMS["10repos"]["text"] = "Repos";\r
12 $MENU_ITEMS["10repos"]["link"] = "$BASE_URL/repos";
13
14
15 function gwvpmini_RepoCallMe()\r
16 {\r
17 \r
18         error_log("in repoadmin callme - err?");
19         error_log(print_r($_REQUEST, true));\r
20         if(isset($_REQUEST["q"])) {
21                 error_log("in repoadmin callme, for Q");\r
22                 $query = $_REQUEST["q"];\r
23                 $qspl = explode("/", $query);\r
24                 if(isset($qspl[0])) {\r
25                         if($qspl[0] == "repos") {
26                                 error_log("in repos call");
27                                 if(isset($qspl[1])) {
28                                         if($qspl[1] == "create") {
29                                                 return "gwvpmini_RepoCreate";
30                                         } else {
31                                                 return "gwvpmini_RepoMainPage";
32                                         }
33                                 } else {\r
34                                         error_log("i got here, where next?");\r
35                                         return "gwvpmini_RepoMainPage";
36                                 }\r
37                         } else return false;\r
38                 }\r
39                 else return false;\r
40         }\r
41 \r
42         return false;\r
43 }\r
44
45
46 function gwvpmini_RepoMainPage()\r
47 {\r
48         gwvpmini_goMainPage("gwvpmini_RepoMainPageBody");\r
49 }\r
50 \r
51
52 function gwvpmini_RepoMainPageBody()
53 {
54         gwvpmini_GitCreateRepoForm();
55         if(gwvpmini_isLoggedIn()) {
56                 $repos = gwvpmini_GetOwnedRepos($_SESSION["username"]);
57                 if(!$repos) {
58                         echo "You currently own no repos<br>";  
59                 } else {
60                         echo "<h2>Your Repos</h2>";
61                         echo "<table border=\"1\"><tr><th>Repo Name</th><th>Repo Description</th><th>Last Log</th></tr>";
62                         foreach($repos as $repo) {
63                                 $name = $repo["name"];
64                                 $desc = $repo["desc"];
65                                 echo "<tr><td>$name</td><td>$desc</td>";
66                                 echo "<td>";\r
67                                 $repo_base = gwvpmini_getConfigVal("repodir");\r
68                                 $cmd = "git --git-dir=\"$repo_base/$name.git\" log -1 2>&1";\r
69                                 error_log("CMD: $cmd");\r
70                                 system("$cmd");\r
71                                 echo "</td>";
72                                 echo "</tr>";
73                         }
74                         echo "</table>";
75                 }
76         }
77         return true;
78 }
79
80
81 function gwvpmini_GitLogProvider()\r
82 {\r
83         /*\r
84          * The home page provider will:\r
85         * 1) show the last 10 commits for every repository - though, excluding private repos\r
86         * 2) if loged in, show the last commit on any repo's the user owns\r
87         *\r
88         * So i need a table thats going to list "writes" by user - as in POST writes but only\r
89         * put that info into the stats (doesnt exist) db if the repo is publically readable\r
90         *\r
91         * Or... should we instead just list every repo?\r
92         */
93         echo "<h2>Repo Activity</h2>";
94         if(gwvpmini_isLoggedIn()) {\r
95                 $repos = gwvpmini_GetOwnedRepos($_SESSION["username"]);
96                 if(!$repos) {
97                         echo "You currently own no repos<br>";  
98                 } else {
99                         echo "<h2>Your Repos</h2>";
100                         echo "<table border=\"1\"><tr><th>Repo Name</th><th>Repo Description</th><th>Repo Log</th></tr>";
101                         foreach($repos as $repo) {
102                                 $name = $repo["name"];
103                                 $desc = $repo["desc"];
104                                 echo "<tr><td>$name</td><td>$desc</td>";
105                                 echo "<td>";
106                                 $repo_base = gwvpmini_getConfigVal("repodir");
107                                 $cmd = "git --git-dir=\"$repo_base/$name.git\" log -1 2>&1";
108                                 error_log("CMD: $cmd");
109                                 system("$cmd");
110                                 echo "</td>";
111                                 echo "</tr>";
112                         }
113                         echo "</table>";
114                 }\r
115         }
116 }
117
118 function gwvpmini_GitCreateRepoForm()
119 {
120         global $BASE_URL;
121         
122         echo "<form method=\"post\" action=\"$BASE_URL/repos/create\">";
123         echo "<table border=\"1\">";
124         echo "<tr><th colspan=\"2\">Create Repo</th></tr>";
125         echo "<tr><th>Repo Name</th><td><input type=\"text\" name=\"reponame\"></td></tr>";
126         echo "<tr><th>Repo Description</th><td><input type=\"text\" name=\"repodesc\"></td></tr>";
127         echo "<tr><td colspan=\"2\"><input type=\"submit\" name=\"Create\" value=\"Create\"></td></tr>";
128         echo "</table>";
129         echo "</form>";
130 }\r
131
132 function gwvpmini_RepoCreate()
133 {
134         
135         global $BASE_URL;
136         
137         if(gwvpmini_isLoggedIn()) {
138                 //gwvpmini_createGitRepo($name, $ownerid, $desc, $bundle=null, $defaultperms=0)
139                 if(gwvpmini_HaveRepo($_REQUEST["reponame"])) {
140                         gwvpmini_SendMessage("error", "Repo ".$_REQUEST["reponame"]." already exists");\r
141                         header("Location: $BASE_URL/repos");
142                 } else {
143                         gwvpmini_createGitRepo($_REQUEST["reponame"], $_SESSION["id"], $_REQUEST["repodesc"]);
144                         gwvpmini_SendMessage("info", "Repo ".$_REQUEST["reponame"]." has been created");
145                         header("Location: $BASE_URL/repos");
146                 }
147         } else {
148                 gwvpmini_SendMessage("info", "Must be logged in to create repo");
149                 header("Location: $BASE_URL/repos");
150         }
151 }
152
153 function gwvpmini_HaveRepo($reponame)
154 {
155         $repo_base = gwvpmini_getConfigVal("repodir");
156         
157         if(file_exists("$repo_base/$reponame.git")) return true;
158 }
159
160 ?>