2 $CALL_ME_FUNCTIONS["repoadmin"] = "gwvp_RepoAdminCallMe";
4 $MENU_ITEMS["20repos"]["text"] = "Repo Admin";
5 $MENU_ITEMS["20repos"]["link"] = "$BASE_URL/admin/repos";
7 function gwvp_RepoAdminCallMe()
10 error_log("in repoadmin callme");
11 if(isset($_REQUEST["q"])) {
12 $query = $_REQUEST["q"];
13 $qspl = explode("/", $query);
14 if(isset($qspl[0]) && isset($qspl[1])) {
15 if($qspl[0] == "admin" && $qspl[1] == "repos") {
16 error_log("i got here, where next?");
20 return "gwvp_CreateRepoPage";
23 return "gwvp_DoCreateRepoPage";
26 return "gwvp_ManageRepoPage";
29 return "gwvp_UpdateRepoPerms";
32 return "gwvp_RepoDetailsPage";
35 return "gwvp_RepoAdminPage";
38 return "gwvp_RepoAdminPage";
48 function gwvp_ManageRepoPage()
50 gwvp_goMainPage("gwvp_ManageRepoPageBody");
53 function gwvp_RepoAdminPage()
55 gwvp_goMainPage("gwvp_RepoAdminPageBody");
58 function gwvp_CreateRepoPage()
60 gwvp_goMainPage("gwvp_CreateRepoPageBody");
63 function gwvp_RepoDetailsPage()
65 gwvp_goMainPage("gwvp_RepoDetailsPageBody");
68 function gwvp_RepoDetailsPageBody()
70 echo "I am a repo details page";
73 function gwvp_UpdateRepoPerms()
75 global $LOGIN_TYPE, $BASE_URL;
78 if(isset($_REQUEST["q"])) {
79 $query = $_REQUEST["q"];
80 $qspl = explode("/", $query);
85 if(isset($_REQUEST["visadd"])) {
86 foreach($_REQUEST["vismembersout"] as $mems) {
87 //gwvp_addRepoPermission($repoid, $permtype, $permref);
88 gwvp_addRepoPermission($rid, "visible", $mems);
93 if(isset($_REQUEST["visremove"])) {
94 foreach($_REQUEST["vismembersin"] as $rems) {
95 error_log("Remove permid, $rems");
96 gwvp_removeRepoPermission($rems);
101 if(isset($_REQUEST["readadd"])) {
102 foreach($_REQUEST["readmembersout"] as $mems) {
103 //gwvp_addRepoPermission($repoid, $permtype, $permref);
104 gwvp_addRepoPermission($rid, "read", $mems);
109 if(isset($_REQUEST["readremove"])) {
110 foreach($_REQUEST["readmembersin"] as $rems) {
111 error_log("Remove permid, $rems");
112 gwvp_removeRepoPermission($rems);
117 if(isset($_REQUEST["writeadd"])) {
118 foreach($_REQUEST["writemembersout"] as $mems) {
119 //gwvp_addRepoPermission($repoid, $permtype, $permref);
120 gwvp_addRepoPermission($rid, "write", $mems);
125 if(isset($_REQUEST["writeremove"])) {
126 foreach($_REQUEST["writemembersin"] as $rems) {
127 error_log("Remove permid, $rems");
128 gwvp_removeRepoPermission($rems);
132 gwvp_SendMessage("info", "Permissions Updated");
133 header("Location: $BASE_URL/admin/repos/manage/$rid");
137 //function gwvp_createGitRepo($name, $ownerid, $desc, $defaultperms=0, $bundle=null)
140 function gwvp_DoCreateRepoPage()
144 $reponame = $_REQUEST["reponame"];
145 $repodesc = $_REQUEST["repodesc"];
149 if(isset($_REQUEST["defperms"])) {
150 switch($_REQUEST["defperms"]) {
157 case "permsinvisible":
165 // TODO: this code is bollocks, need to redo
166 if(gwvp_repoExists($reponame)) {
167 gwvp_SendMessage("error", "a repository with the name <b>\"$reponame\"</b> already exists");
168 //header("Location: $BASE_URL/admin/repos/create?reponameobv=$reponame&repodescobv=$repodesc");
169 } else if($_FILES["bundlefile"]["size"] > 0) { // if(isset($_FILES["bundlefile"]["size"])) <--- this needs to happen here TODO
170 error_log("bundle file tmpname is ".$_FILES["bundlefile"]["tmp_name"]);
171 // function gwvp_createGitRepo($name, $ownerid, $desc, $defaultperms=0, $bundle=null)
172 // TODO: deal with default perms
173 gwvp_createGitRepo($reponame, $_SESSION["id"], $repodesc, $_FILES["bundlefile"]["tmp_name"], $defperms);
174 gwvp_SendMessage("info", "Repo, $reponame, created");
175 } else if(gwvp_createGitRepo($reponame, $_SESSION["id"], $repodesc, null, $defperms)) {
176 gwvp_SendMessage("info", "Repo, $reponame, created");
178 header("Location: $BASE_URL/admin/repos");
183 function gwvp_CreateRepoPageBody()
187 $repo_base = gwvp_getConfigVal("repodir");
192 if(isset($_REQUEST["reponameobv"])) $reponameobv = $_REQUEST["reponameobv"];
193 if(isset($_REQUEST["repodescobv"])) $repodescobv = $_REQUEST["repodescobv"];
195 echo "<h2>Create a Repo</h2>";
196 echo "<form method=\"post\" enctype=\"multipart/form-data\" action=\"$BASE_URL/admin/repos/docreate\">";
198 echo "<tr><td>Repository Name</td><td bgcolor=\"#eeeeee\"><input type=\"text\" name=\"reponame\" value=\"$reponameobv\"></td></tr>";
199 echo "<tr><td>Repository Description</td><td bgcolor=\"#eeeeee\"><input type=\"text\" name=\"repodesc\" value=\"$repodescobv\"></td></tr>";
200 echo "<tr><td>Repository Bundle</td><td bgcolor=\"#eeeeee\"><input type=\"file\" name=\"bundlefile\"></td><td><i>Create a bundle for pro-creating the git repository (export your git bundle with \"git bundle create /tmp/filename --branches\")<br>";
201 echo "Typically you wouldn't use this as its easier to \"push\" to the repo after its created by adding it as a remote and pushing your local master branch</i></td></tr>";
203 echo "<tr><td>Default Permisison Set</td><td bgcolor=\"#eeeeee\">";
206 echo "<tr><td><input type=\"radio\" name=\"defperms\" value=\"permsall\" checked></td><td>Anyone Can Read, Only you can write</td></tr>";
207 echo "<tr><td><input type=\"radio\" name=\"defperms\" value=\"permsmeonly\"></td><td>Anyone can see the repository exists, but only you can read or write to it</td></tr>";
208 echo "<tr><td><input type=\"radio\" name=\"defperms\" value=\"permsinvisible\"></td><td>Repository only visible to you</td></tr>";
212 echo "</td><td><i>Permissions can be changed in repository management later</i></td></tr>";
220 echo "<input type=\"submit\" name=\"create\" value=\"Create\"><br>";
224 function gwvp_RepoAdminPageBody()
226 // first we need a menu
229 echo "<h2>Repo Management</h2>";
230 echo "<a href=\"$BASE_URL/admin/repos/create\">Create a Repo</a><br>";
232 if(isset($_SESSION["isloggedin"])) {
233 echo "<h3>Your Repo's</h3>";
234 $ownreps = gwvp_getOwnedRepos($_SESSION["id"]);
235 if($ownreps != false) {
236 echo "<table border=\"1\">";
237 echo "<tr><th>Repo Name</th><th>Repo description</th></tr>";
238 foreach($ownreps as $repos) {
239 $mjay = print_r($repos, true);
240 error_log("snafu: $mjay");
241 $reponame = $repos["name"];
242 $repodesc = $repos["description"];
244 echo "<tr><td>$reponame</td><td>$repodesc</td><td><a href=\"$BASE_URL/admin/repos/manage/$rid\">Manage</a></td></tr>";
248 echo "You own no repositories";
254 // next we need a repo list - with perms checking - ug
255 // i must also remember that the home page will also contain a list of repos and that this page is solely for maintance
256 // and creation of repos - so i dont need to get over-worked about the info stored on this page outside of those activities
257 echo "<h3>All Repositories</h3>";
258 $rlist = gwvp_GetRepoList();
259 echo "<table border=\"1\"><tr><th>Repo Name</th><th>Repo Description</th><th>Repo Owner</th></tr>";
260 foreach($rlist as $u_res) {
262 $rname = $u_res["name"];
263 $rdesc = $u_res["description"];
264 $rown = gwvp_getUserName($u_res["owner"]);
265 $manordetslink = "details";
266 $manordets = "Details";
267 if(isset($_SESSION["id"])) {
268 if(gwvp_resolvRepoPerms($_SESSION["id"], $rid)>3) {
269 $manordetslink = "manage";
270 $manordets = "Manage";
273 echo "<tr><td>$rname</td><td>$rdesc</td><td>$rown</td><td><a href=\"$BASE_URL/admin/repos/$manordetslink/$rid\">$manordets</a></td></tr>";
280 function gwvp_DisemableRefId($who)
282 if($who == "anon") return "Everyone";
283 if($who == "authed") return "All Authenticated User";
285 $epl = explode(":", $who);
287 if($epl[0] == "user") {
288 $username = gwvp_getUserName($epl[1]);
289 return "User: $username";
290 } else if ($epl[0] == "group") {
291 $grdent = gwvp_getGroup($epl[1]);
292 $groupname = $grdent["name"];
293 return "Group: $groupname";
294 } else return "unknown";
297 function gwvp_ManageRepoPageBody()
299 global $LOGIN_TYPE, $BASE_URL;
302 if(isset($_REQUEST["q"])) {
303 $query = $_REQUEST["q"];
304 $qspl = explode("/", $query);
308 $repodets = gwvp_GetRepo($rid);
309 $reponame = $repodets["name"];
310 $repodesc = $repodets["description"];
311 $repoownid = $repodets["owner"];
312 $owndby = gwvp_getUserName($repoownid);
313 $users = gwvp_getUsers();
314 $groups = gwvp_getGroups();
315 $repoperms = gwvp_getRepoPermissions($rid);
318 echo "<h2>Repository Management</h2>";
319 echo "<b>$owndby's</b> Repository <i>$reponame</i><br>";
321 echo "<form method=\"post\" action=\"$BASE_URL/admin/repos/update/$rid\">";
324 echo "<tr><td>Description</td><td><input type=\"text\" name=\"desc\" value=\"$repodesc\"></td></tr>";
326 echo "<input type=\"submit\" name=\"update\" value=\"Update\"><br>";
330 echo "<h3>Repository Permissions</h3>";
331 echo "<form method=\"post\" action=\"$BASE_URL/admin/repos/updateperms/$rid\">";
333 echo "<tr bgcolor=\"#eeeee0\"><th>Visibility</th><th>Read/Clone</th><th>Write/Push</th></tr>";
334 echo "<tr><td bgcolor=\"#eeeeff\">";
339 // visibility section
342 echo "<tr><th>Allowed</th><td></td><th>All</th></tr>";
344 // list allowed users
345 echo "<select name=\"vismembersin[]\" size=\"20\" multiple=\"true\">";
347 foreach($repoperms as $v_perms) {
348 if($v_perms["type"] == "visible") {
349 $who = $v_perms["ref"]; // now we need to disemble ref
350 $pid = $v_perms["id"];
351 $refid = gwvp_DisemableRefId($who);
355 echo "<option value=\"$pid\">$refid</option>";
359 if($ninvis == 0) echo "<option>--------------</option>";
365 echo "<input type=\"submit\" name=\"visadd\" value=\"<<\"><br>";
366 echo "<input type=\"submit\" name=\"visremove\" value=\">>\"><br>";
369 // list all users/groups/specials
371 echo "<select name=\"vismembersout[]\" size=\"20\" multiple=\"true\">";
372 if(!isset($visin["anon"])) echo "<option value=\"anon\">Everyone</option>";
373 if(!isset($visin["authed"])) echo "<option value=\"authed\">All Authenticated User</option>";
374 foreach($groups as $u_groups) {
375 $gname = $u_groups["name"];
376 $gid = $u_groups["id"];
377 if(!gwvp_IsGroupAdmin(null, $gid)) if(!isset($visin["group:$gid"])) {
378 echo "<option value=\"group:$gid\">Group: $gname</option>";
382 foreach($users as $u_users) {
383 $uid = $u_users["id"];
384 $email = $u_users["email"];
385 $username = $u_users["username"];
386 $fullname = $u_users["fullname"];
387 if(!gwvp_IsUserAdmin(null, null, $uid)) if(!isset($visin["user:$uid"])) {
388 echo "<option value=\"user:$uid\">User: $username</option>";
392 if($noutvis == 0) echo "<option>-------------------</option>";
397 // end visibility section
400 echo "</td><td bgcolor=\"#eeffee\">";
401 // Read/clone/pull section
404 echo "<tr><th>Allowed</th><td></td><th>All</th></tr>";
406 // list allowed users
407 echo "<select name=\"readmembersin[]\" size=\"20\" multiple=\"true\">";
409 foreach($repoperms as $v_perms) {
410 if($v_perms["type"] == "read") {
411 $who = $v_perms["ref"]; // now we need to disemble ref
412 $pid = $v_perms["id"];
413 $refid = gwvp_DisemableRefId($who);
415 $readin[$who] = true;
417 echo "<option value=\"$pid\">$refid</option>";
421 if($ninread == 0) echo "<option>-------------------</option>";
427 echo "<input type=\"submit\" name=\"readadd\" value=\"<<\"><br>";
428 echo "<input type=\"submit\" name=\"readremove\" value=\">>\"><br>";
431 // list all users/groups/specials
432 echo "<select name=\"readmembersout[]\" size=\"20\" multiple=\"true\">";
434 if(!isset($readin["anon"])) echo "<option value=\"anon\">Everyone</option>";
435 if(!isset($readin["authed"])) echo "<option value=\"authed\">All Authenticated User</option>";
436 foreach($groups as $u_groups) {
437 $gname = $u_groups["name"];
438 $gid = $u_groups["id"];
439 if(!gwvp_IsGroupAdmin(null, $gid)) if(!isset($readin["group:$gid"])) {
440 echo "<option value=\"group:$gid\">Group: $gname</option>";
444 foreach($users as $u_users) {
445 $uid = $u_users["id"];
446 $email = $u_users["email"];
447 $username = $u_users["username"];
448 $fullname = $u_users["fullname"];
449 if(!gwvp_IsUserAdmin(null, null, $uid)) if(!isset($readin["user:$uid"])) {
450 echo "<option value=\"user:$uid\">User: $username</option>";
454 if($noutread == 0) echo "<option>-------------------</option>";
459 // end read/clone/pull section
462 echo "</td><td bgcolor=\"#ffeeee\">";
463 // write/push section
466 echo "<tr><th>Allowed</th><td></td><th>All</th></tr>";
468 // list allowed users
469 echo "<select name=\"writemembersin[]\" size=\"20\" multiple=\"true\">";
471 foreach($repoperms as $v_perms) {
472 if($v_perms["type"] == "write") {
473 $who = $v_perms["ref"]; // now we need to disemble ref
474 $pid = $v_perms["id"];
475 $refid = gwvp_DisemableRefId($who);
477 $writein[$who] = true;
479 echo "<option value=\"$pid\">$refid</option>";
483 if($ninwrite == 0) echo "<option>-------------------</option>";
488 echo "<input type=\"submit\" name=\"writeadd\" value=\"<<\"><br>";
489 echo "<input type=\"submit\" name=\"writeremove\" value=\">>\"><br>";
492 // list all users/groups/specials
493 echo "<select name=\"writemembersout[]\" size=\"20\" multiple=\"true\">";
495 // cant have anon for writes if(!isset($writein["anon"])) echo "<option value=\"anon\">Everyone</option>";
496 if(!isset($writein["authed"])) echo "<option value=\"authed\">All Authenticated User</option>";
497 foreach($groups as $u_groups) {
498 $gname = $u_groups["name"];
499 $gid = $u_groups["id"];
500 if(!gwvp_IsGroupAdmin(null, $gid)) if(!isset($writein["group:$gid"])) {
502 echo "<option value=\"group:$gid\">Group: $gname</option>";
505 foreach($users as $u_users) {
506 $uid = $u_users["id"];
507 $email = $u_users["email"];
508 $username = $u_users["username"];
509 $fullname = $u_users["fullname"];
510 if(!gwvp_IsUserAdmin(null, null, $uid)) if(!isset($writein["user:$uid"])) {
512 echo "<option value=\"user:$uid\">User: $username</option>";
515 if($noutwrite == 0) echo "<option>-------------------</option>";
520 // end write/push section