942ce73235c43bcb2020a3273dde4cdfceac1572
[gwvp-mini.git] / gwvpmini / gwvpmini_view.php
1 <?php
2 global $HOME_PAGE_PROVIDERS;
3
4
5 $CALL_ME_FUNCTIONS["repoview"] = "gwvpmini_RepoViewCallMe";
6
7
8
9 function gwvpmini_RepoViewCallMe()
10 {
11         global $repo_view_call;
12         
13         error_log("in admin callme");\r
14         if(isset($_REQUEST["q"])) {\r
15                 $query = $_REQUEST["q"];\r
16                 $qspl = explode("/", $query);\r
17                 if(isset($qspl[0])) {\r
18                         if($qspl[0] == "view") {\r
19                                 if(isset($qspl[1])) {
20                                         $repo_view_call = $qspl[1];
21                                         return "gwvpmini_RepoViewPage";\r
22                                 } else return false;\r
23                         }
24                         if($qspl[0] == "updaterepobaseperms") {
25                                 return "gwvpmini_UpdateRepoBasePerms";
26                         } 
27                         if($qspl[0] == "repoaddreader") {
28                                 return "gwvpmini_AddRepoReader";
29                         }
30                         if($qspl[0] == "repoaddcontrib") {
31                                 return "gwvpmini_AddRepoContributor";
32                         }
33                         if($qspl[0] == "reporemovereaders") {
34                                 return "gwvpmini_RemoveRepoReader";
35                         }
36                         if($qspl[0] == "reporemovecontribs") {
37                                 return "gwvpmini_RemoveRepoContributor";
38                         }
39                         if($qspl[0] == "repoupdatedesc") {
40                                 return "gwvpmini_RepoUpdateDescription";
41                         }
42                         return false;\r
43                 }\r
44                 else return false;\r
45         }\r
46 \r
47         return false;\r
48         
49         
50 }
51
52 function gwvpmini_RepoViewPage()\r
53 {
54         global $repo_view_call, $MENU_ITEMS, $BASE_URL;\r
55         \r
56         $MENU_ITEMS["40thisrepo"]["text"] = "$repo_view_call";\r
57         $MENU_ITEMS["40thisrepo"]["link"] = "$BASE_URL/view/$repo_view_call";\r
58         \r
59         gwvpmini_goMainPage("gwvpmini_RepoViewPageBody");\r
60 }
61
62 function gwvpmini_RepoViewPageBody()
63 {
64         global $repo_view_call, $MENU_ITEMS, $BASE_URL;
65         
66         $repo_base = gwvpmini_getConfigVal("repodir");\r
67
68         $bperms_f = gwvpmini_GetRepoPerms(gwvpmini_GetRepoId($repo_view_call));
69         $bperms = $bperms_f["b"];
70         
71         $owner_view = false;\r
72         
73         if($_SERVER["SERVER_PORT"] == 443) $proto="https://";
74         else $proto = "http://";
75         $sname = $_SERVER["SERVER_NAME"];
76         
77         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);
78         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);
79         $editdesc = preg_replace("/\<br\>/", "\n", $desc);
80         
81         
82         $owner_name = $owner["username"];
83         
84         // TODO: fix this so that if user has no read access to repo, they cant see it
85         if(isset($_SESSION["id"])) {
86                 if($owner["id"] == $_SESSION["id"]) {
87                         $owner_view = true;
88                 } else if ($bperms != "r") {
89                         // check user level perms
90                         $perm = gwvpmini_GetRepoPerm($rid, $_SESSION["id"]);
91                         if($perm < 1) {
92                                 header("Location: $BASE_URL");\r
93                                 return;
94                         }
95                 }
96         } else {
97                 if($bperms != "a") {
98                         header("Location: $BASE_URL");
99                         return;
100                 }
101         }
102         
103         
104         error_log("STUFF:".print_r($owner,true));
105         if($bperms != "a") $login = $_SESSION["username"].":password@";
106         else $login = "";
107         $cloneurl = "git clone $proto$login$sname$BASE_URL/git/$repo_view_call.git";
108         echo "<textarea rows=1 cols=".strlen($cloneurl).">$cloneurl</textarea><br>";
109         
110         if($owner_view) $owner_extra = " (YOU)";
111         else $owner_extra = "";\r
112         
113         echo "<h2>".get_gravatar($owner["email"], 30, 'mm', 'g', true)."$repo_view_call - $owner_name$owner_extra</h2>";
114         if(!$owner_view) echo "<b>$desc</b><br>";
115         
116         if($owner_view) {
117                 echo "<form method=\"post\" action=\"$BASE_URL/repoupdatedesc/$repo_view_call\">";\r
118                 echo "<h3>Description<h3><textarea name=\"desc\" cols=\"120\" rows=\"5\">$editdesc</textarea><br><input type=\"submit\" name=\"Update\" value=\"Update\">";\r
119                 echo "</form><br>";\r
120                 
121                 
122
123                 
124                 $anyo = "";
125                 $regd = "";
126                 $expl = "";
127                 if($bperms == "a") $anyo = " selected";\r
128                 if($bperms == "r") $regd = " selected";\r
129                 if($bperms == "x") $expl = " selected";\r
130                 
131                 error_log("BPERMS: $bperms");
132                 
133                 if($bperms == "x") $cspan = 3;
134                 else $cspan = 2;
135                 
136                 echo "<table border=\"1\"><tr valign=\"top\"><tr><th colspan=\"$cspan\">Permissions</th></tr><td>";
137                 echo "<form method=\"post\" action=\"$BASE_URL/updaterepobaseperms/$repo_view_call\">";
138                 echo "<select name=\"base_perms\">";
139                 echo "<option value=\"a\"$anyo>Anyone can read</option>";
140                 echo "<option value=\"r\"$regd>Only registered users can read</option>";
141                 echo "<option value=\"x\"$expl>Explicit read permissions</option>";
142                 echo "</select>";
143                 echo "<input type=\"submit\" name=\"Set\" value=\"Set\">";
144                 echo "</form>";
145                 if($bperms == "x") {
146                         echo "</td><td><b>Readers</b><br>";
147                         echo "<form method=\"post\" action=\"$BASE_URL/reporemovereaders/$repo_view_call\">";
148                         $nl = 0;
149                         foreach($bperms_f as $key=>$val) {
150                                 if($val == 1) {
151                                         $dets = gwvpmini_getUser(null, null, $key);
152                                         echo get_gravatar($dets["email"], 18, 'mm', 'g', true)." <input type=\"checkbox\" name=\"$key\"> ".$dets["username"]."<br>";
153                                         $nl = 1;
154                                 }
155                         }
156                         if($nl==1) echo "<input type=\"submit\" name=\"remove\" value=\"Remove Selected\">";
157                         echo "</form>";
158                         echo "<form method=\"post\" action=\"$BASE_URL/repoaddreader/$repo_view_call\">";
159                         echo "<input type=\"text\" name=\"readerusername\"> <input type=\"submit\" name=\"Add\" value=\"Add\">";
160                         echo "</form><br>";
161                 }
162                 
163                 echo "</td><td><b>Contributors</b><br>";
164                 echo "<form method=\"post\" action=\"$BASE_URL/reporemovecontribs/$repo_view_call\">";
165                 $nl = 0;
166                 foreach($bperms_f as $key=>$val) {\r
167                         if($val == 2) {\r
168                                 $dets = gwvpmini_getUser(null, null, $key);\r
169                                 echo get_gravatar($dets["email"], 18, 'mm', 'g', true)." <input type=\"checkbox\" name=\"$key\"> ".$dets["username"]."<br>";
170                                 $nl = 1;\r
171                         }\r
172                 }\r
173                 if($nl==1) echo "<input type=\"submit\" name=\"remove\" value=\"Remove Selected\">";\r
174                 echo "</form>";
175                 
176                 echo "<form method=\"post\" action=\"$BASE_URL/repoaddcontrib/$repo_view_call\">";
177                 echo "<input type=\"text\" name=\"contribusername\"> <input type=\"submit\" name=\"Add\" value=\"Add\">";
178                 echo "</form><br>";
179                 echo "</td></tr></table>";
180                 
181         }
182         //echo "command: git log --git-dir=$repo_base/$repo_view_call.git --pretty=format:\"%H\" -10";
183         $rs = popen("git --git-dir=$repo_base/$repo_view_call.git log --pretty=format:\"%H\" -10", "r");
184         $commitids = array();
185         $i = 0;
186         if($rs) {
187                 while(!feof($rs)) {
188                         $flin = fgets($rs);
189                         if($flin !== false) {
190                                 $commitids[$i] = trim($flin);
191                                 $i++;
192                         }
193                 }
194                 fclose($rs);
195         } else {
196                 $commitids = false;
197         }
198         
199         if($commitids != false) {
200                 echo "<hr>Commits<br>";
201                 echo "<table border=\"1\">";
202                 echo "<tr><th>Committed By</th><th>Date</th><th>Commit Log Entry</th></tr>";
203                 foreach($commitids as $ids) {
204                         $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");
205                         if($rs) {
206                                 $flin1 = trim(fgets($rs));
207                                 $flin2 = trim(fgets($rs));
208                                 $flin3 = trim(fgets($rs));
209                                 while(!feof($rs)) {
210                                         $flin4 = fread($rs, 8192);
211                                 }
212                                 $flon =  gwvpmini_emailToUserLink($flin2);
213                                 if(!$flon) {
214                                         $flon = "$flin3 (external)";
215                                 }
216                         }
217                         echo "<tr><td>".get_gravatar($flin2, 18, 'mm', 'g', true)."$flon</td><td>$flin1</td><td>$flin4</td></tr>";
218                 }
219                 echo "</table>";
220         } else {
221                 echo "No commit information available yet<br>";
222         }
223 }
224
225 function gwvpmini_UpdateRepoBasePerms()
226 {
227         global $BASE_URL, $repo_view_call;
228         
229         if(isset($_REQUEST["q"])) {\r
230                 $query = $_REQUEST["q"];\r
231                 $qspl = explode("/", $query);
232                 error_log("PLOOP:qview".print_r($qspl, true));\r
233         }
234         
235         if(isset($qspl[1])) $repo_view_call = $qspl[1];
236         else {
237                 error_log("PLOOP: no repo name");
238                 header("Location: $BASE_URL/view/$repo_view_call");
239                 return;
240         }
241         
242         $newperms = $_REQUEST["base_perms"];
243         
244         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
245         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
246         \r
247         $owner_name = $owner["username"];
248         
249         $owner_view = false;
250         if(isset($_SESSION["id"])) {\r
251                 if($owner["id"] == $_SESSION["id"]) {\r
252                         $owner_view = true;\r
253                 }\r
254         }
255         
256         $rid = gwvpmini_GetRepoId($repo_view_call);
257         
258         if(!$owner_view) {
259                 gwvpmini_SendMessage("error", "failure updating permission for repo");
260                 error_log("PLOOP: attempt to update from non-owner");
261         } else {
262                 error_log("PLOOP: updateds: ".print_r($_REQUEST, true));
263                 gwvpmini_ChangeRepoPerm($rid, "b", $_REQUEST["base_perms"]);
264                 gwvpmini_SendMessage("info", "Base permissions for repo updated");
265         }\r
266         
267         header("Location: $BASE_URL/view/$repo_view_call");
268 }
269
270 function gwvpmini_AddRepoReader()
271 {
272         global $BASE_URL, $repo_view_call;\r
273         \r
274         if(isset($_REQUEST["q"])) {\r
275                 $query = $_REQUEST["q"];\r
276                 $qspl = explode("/", $query);\r
277                 error_log("PLOOP:qview".print_r($qspl, true));\r
278         }\r
279         \r
280         if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
281         else {\r
282                 error_log("PLOOP: no repo name");
283                 // TODO: btw, this makes no sense\r
284                 header("Location: $BASE_URL/view/$repo_view_call");\r
285                 return;\r
286         }\r
287         \r
288         $newperms = $_REQUEST["base_perms"];\r
289         \r
290         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
291         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
292         \r
293         $owner_name = $owner["username"];\r
294         \r
295         $owner_view = false;\r
296         if(isset($_SESSION["id"])) {\r
297                 if($owner["id"] == $_SESSION["id"]) {\r
298                         $owner_view = true;\r
299                 }\r
300         }
301         if(!$owner_view) {
302                 gwvpmini_SendMessage("error", "failure updating permission for repo");\r
303                 error_log("PLOOP: attempt to update from non-owner");
304                 header("Location: $BASE_URL/view/$repo_view_call");
305                 return;
306         }\r
307         
308         $auid = gwvpmini_GetUserId($_REQUEST["readerusername"]);
309         
310         if($auid == $_SESSION["id"]) {
311                 gwvpmini_SendMessage("error", "You cannot add yourself as a reader as you already own the repo");
312                 header("Location: $BASE_URL/view/$repo_view_call");\r
313                 return;
314         }
315         
316         if($auid > 0)  {\r
317                 $rid = gwvpmini_GetRepoId($repo_view_call);
318                 
319                 gwvpmini_ChangeRepoPerm($rid, $auid, 1);
320                 gwvpmini_SendMessage("info", "Added user ".$_REQUEST["readerusername"]." as a reader");
321                 header("Location: $BASE_URL/view/$repo_view_call");\r
322                 return;
323         } else {
324                 gwvpmini_SendMessage("error", "Couldnt find user with username of ".$_REQUEST["readerusername"]);
325                 header("Location: $BASE_URL/view/$repo_view_call");
326                 return;
327         }
328         
329         
330 }
331
332 function gwvpmini_AddRepoContributor()
333 {
334         global $BASE_URL, $repo_view_call;\r
335         \r
336         if(isset($_REQUEST["q"])) {\r
337                 $query = $_REQUEST["q"];\r
338                 $qspl = explode("/", $query);\r
339                 error_log("PLOOP:qview".print_r($qspl, true));\r
340         }\r
341         \r
342         if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
343         else {\r
344                 error_log("PLOOP: no repo name");\r
345                 // TODO: btw, this makes no sense\r
346                 header("Location: $BASE_URL/view/$repo_view_call");\r
347                 return;\r
348         }\r
349         \r
350         $newperms = $_REQUEST["base_perms"];\r
351         \r
352         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
353         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
354         \r
355         $owner_name = $owner["username"];\r
356         \r
357         $owner_view = false;\r
358         if(isset($_SESSION["id"])) {\r
359                 if($owner["id"] == $_SESSION["id"]) {\r
360                         $owner_view = true;\r
361                 }\r
362         }\r
363         if(!$owner_view) {\r
364                 gwvpmini_SendMessage("error", "failure updating permission for repo");\r
365                 error_log("PLOOP: attempt to update from non-owner");\r
366                 header("Location: $BASE_URL/view/$repo_view_call");\r
367                 return;\r
368         }\r
369         \r
370         $auid = gwvpmini_GetUserId($_REQUEST["contribusername"]);\r
371         \r
372         if($auid == $_SESSION["id"]) {\r
373                 gwvpmini_SendMessage("error", "You cannot add yourself as a contributor as you already own the repo");\r
374                 header("Location: $BASE_URL/view/$repo_view_call");\r
375                 return;\r
376         }\r
377         \r
378         if($auid > 0)  {\r
379                 $rid = gwvpmini_GetRepoId($repo_view_call);\r
380         \r
381                 gwvpmini_ChangeRepoPerm($rid, $auid, 2);\r
382                 gwvpmini_SendMessage("info", "Added user ".$_REQUEST["contribusername"]." as a contributor");\r
383                 header("Location: $BASE_URL/view/$repo_view_call");\r
384                 return;\r
385         } else {\r
386                 gwvpmini_SendMessage("error", "Couldnt find user with username of ".$_REQUEST["contribusername"]);\r
387                 header("Location: $BASE_URL/view/$repo_view_call");\r
388                 return;\r
389         }
390 }
391
392 function gwvpmini_RemoveRepoContributor()
393 {
394         
395         global $BASE_URL, $repo_view_call;\r
396         \r
397         if(isset($_REQUEST["q"])) {\r
398                 $query = $_REQUEST["q"];\r
399                 $qspl = explode("/", $query);\r
400                 error_log("PLOOP:qview".print_r($qspl, true));\r
401         }\r
402         \r
403         if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
404         else {\r
405                 error_log("PLOOP: no repo name");\r
406                 // TODO: btw, this makes no sense\r
407                 header("Location: $BASE_URL/view/$repo_view_call");\r
408                 return;\r
409         }\r
410         \r
411         \r
412         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
413         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
414         \r
415         $owner_name = $owner["username"];\r
416         \r
417         $owner_view = false;\r
418         if(isset($_SESSION["id"])) {\r
419                 if($owner["id"] == $_SESSION["id"]) {\r
420                         $owner_view = true;\r
421                 }\r
422         }\r
423         if(!$owner_view) {\r
424                 gwvpmini_SendMessage("error", "failure updating permission for repo");\r
425                 error_log("PLOOP: attempt to update from non-owner");\r
426                 header("Location: $BASE_URL/view/$repo_view_call");\r
427                 return;\r
428         }
429         
430         $rid = gwvpmini_GetRepoId($repo_view_call);
431         
432         $bperms_f = gwvpmini_GetRepoPerms($rid);
433         
434         foreach($bperms_f as $key=>$val) {
435                 if($val == 2) {
436                         if(isset($_REQUEST["$key"])) {
437                                 gwvpmini_ChangeRepoPerm($rid, $key, 0);
438                         }
439                 }
440         }
441         
442         gwvpmini_SendMessage("info", "Repo permissions updated");
443         header("Location: $BASE_URL/view/$repo_view_call");\r
444         return;\r
445         
446 }\r
447
448 \r
449 function gwvpmini_RemoveRepoReader()\r
450 {\r
451 \r
452         global $BASE_URL, $repo_view_call;\r
453 \r
454         if(isset($_REQUEST["q"])) {\r
455                 $query = $_REQUEST["q"];\r
456                 $qspl = explode("/", $query);\r
457                 error_log("PLOOP:qview".print_r($qspl, true));\r
458         }\r
459 \r
460         if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
461         else {\r
462                 error_log("PLOOP: no repo name");\r
463                 // TODO: btw, this makes no sense\r
464                 header("Location: $BASE_URL/view/$repo_view_call");\r
465                 return;\r
466         }\r
467 \r
468 \r
469         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
470         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
471 \r
472         $owner_name = $owner["username"];\r
473 \r
474         $owner_view = false;\r
475         if(isset($_SESSION["id"])) {\r
476                 if($owner["id"] == $_SESSION["id"]) {\r
477                         $owner_view = true;\r
478                 }\r
479         }\r
480         if(!$owner_view) {\r
481                 gwvpmini_SendMessage("error", "failure updating permission for repo");\r
482                 error_log("PLOOP: attempt to update from non-owner");\r
483                 header("Location: $BASE_URL/view/$repo_view_call");\r
484                 return;\r
485         }\r
486 \r
487         $rid = gwvpmini_GetRepoId($repo_view_call);\r
488 \r
489         $bperms_f = gwvpmini_GetRepoPerms($rid);\r
490 \r
491         foreach($bperms_f as $key=>$val) {\r
492                 if($val == 1) {\r
493                         if(isset($_REQUEST["$key"])) {\r
494                                 gwvpmini_ChangeRepoPerm($rid, $key, 0);\r
495                         }\r
496                 }\r
497         }\r
498 \r
499         gwvpmini_SendMessage("info", "Repo permissions updated");\r
500         header("Location: $BASE_URL/view/$repo_view_call");\r
501         return;\r
502 \r
503 }
504
505 function gwvpmini_RepoUpdateDescription()
506 {
507         global $BASE_URL, $repo_view_call;\r
508         \r
509         if(isset($_REQUEST["q"])) {\r
510                 $query = $_REQUEST["q"];\r
511                 $qspl = explode("/", $query);\r
512                 error_log("PLOOP:qview".print_r($qspl, true));\r
513         }\r
514         \r
515         if(isset($qspl[1])) $repo_view_call = $qspl[1];\r
516         else {\r
517                 error_log("PLOOP: no repo name");\r
518                 // TODO: btw, this makes no sense\r
519                 header("Location: $BASE_URL/view/$repo_view_call");\r
520                 return;\r
521         }\r
522         \r
523         \r
524         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
525         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
526         \r
527         $owner_name = $owner["username"];\r
528         \r
529         $owner_view = false;\r
530         if(isset($_SESSION["id"])) {\r
531                 if($owner["id"] == $_SESSION["id"]) {\r
532                         $owner_view = true;\r
533                 }\r
534         }\r
535         if(!$owner_view) {\r
536                 gwvpmini_SendMessage("error", "failure updating description for repo");\r
537                 error_log("PLOOP: attempt to update from non-owner");\r
538                 header("Location: $BASE_URL/view/$repo_view_call");\r
539                 return;\r
540         }\r
541         \r
542         $rid = gwvpmini_GetRepoId($repo_view_call);\r
543         \r
544         gwvpmini_UpdateRepoDescription($rid, $_REQUEST["desc"]);
545                 \r
546         gwvpmini_SendMessage("info", "Repo description updated");\r
547         header("Location: $BASE_URL/view/$repo_view_call");\r
548         return;
549 }\r
550
551 ?>