permissions check/management code
[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                         return false;\r
28                 }\r
29                 else return false;\r
30         }\r
31 \r
32         return false;\r
33         
34         
35 }
36
37 function gwvpmini_RepoViewPage()\r
38 {
39         global $repo_view_call, $MENU_ITEMS, $BASE_URL;\r
40         \r
41         $MENU_ITEMS["40thisrepo"]["text"] = "$repo_view_call";\r
42         $MENU_ITEMS["40thisrepo"]["link"] = "$BASE_URL/view/$repo_view_call";\r
43         \r
44         gwvpmini_goMainPage("gwvpmini_RepoViewPageBody");\r
45 }
46
47 function gwvpmini_RepoViewPageBody()
48 {
49         global $repo_view_call, $MENU_ITEMS, $BASE_URL;
50         
51         $repo_base = gwvpmini_getConfigVal("repodir");\r
52
53         $owner_view = false;\r
54         
55         if($_SERVER["SERVER_PORT"] == 443) $proto="https://";
56         else $proto = "http://";
57         $sname = $_SERVER["SERVER_NAME"];
58         
59         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);
60         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);
61         
62         $owner_name = $owner["username"];
63         
64         
65         if(isset($_SESSION["id"])) {
66                 if($owner["id"] == $_SESSION["id"]) {
67                         $owner_view = true;
68                 }
69         }
70         
71         
72         error_log("STUFF:".print_r($owner,true));
73         $cloneurl = "git clone $proto$sname$BASE_URL/git/$repo_view_call.git";
74         echo "<textarea rows=1 cols=".strlen($cloneurl).">$cloneurl</textarea><br>";
75         
76         if($owner_view) $owner_extra = " (YOU)";
77         else $owner_extra = "";\r
78         
79         echo "<h2>".get_gravatar($owner["email"], 30, 'mm', 'g', true)."$repo_view_call - $owner_name$owner_extra</h2>";
80         echo "<b>$desc</b><br>";
81         
82         if($owner_view) {
83                 $bperms = gwvpmini_GetRepoPerm(gwvpmini_GetRepoId($repo_view_call), "b");
84                 
85                 $anyo = "";
86                 $regd = "";
87                 $expl = "";
88                 if($bperms == "a") $anyo = " selected";\r
89                 if($bperms == "r") $regd = " selected";\r
90                 if($bperms == "x") $expl = " selected";\r
91                 
92                 error_log("BPERMS: $bperms");
93                 
94                 if($bperms == "x") $cspan = 3;
95                 else $cspan = 2;
96                 
97                 echo "<table border=\"1\"><tr valign=\"top\"><tr><th colspan=\"$cspan\">Permissions</th></tr><td>";
98                 echo "<form method=\"post\" action=\"$BASE_URL/updaterepobaseperms/$repo_view_call\">";
99                 echo "<select name=\"base_perms\">";
100                 echo "<option value=\"a\"$anyo>Anyone can read</option>";
101                 echo "<option value=\"r\"$regd>Only registered users can read</option>";
102                 echo "<option value=\"x\"$expl>Explicit read permissions</option>";
103                 echo "</select>";
104                 echo "<input type=\"submit\" name=\"Set\" value=\"Set\">";
105                 echo "</form>";
106                 if($bperms == "x") {
107                         echo "</td><td>Readers<br>";
108                         echo "<form method=\"post\" action=\"$BASE_URL/repoaddreader/$repo_view_call\">";
109                         echo "<input type=\"text\" name=\"readerusername\"> <input type=\"submit\" name=\"Add\" value=\"Add\">";
110                         echo "</form><br>";
111                 }
112                 
113                 echo "</td><td>Contributors";
114                 echo "<form method=\"post\" action=\"$BASE_URL/repoaddcontrib/$repo_view_call\">";
115                 echo "<input type=\"text\" name=\"contribusername\"> <input type=\"submit\" name=\"Add\" value=\"Add\">";
116                 echo "</form><br>";
117                 echo "</td></tr></table>";
118         }
119         //echo "command: git log --git-dir=$repo_base/$repo_view_call.git --pretty=format:\"%H\" -10";
120         $rs = popen("git --git-dir=$repo_base/$repo_view_call.git log --pretty=format:\"%H\" -10", "r");
121         $commitids = array();
122         $i = 0;
123         if($rs) {
124                 while(!feof($rs)) {
125                         $flin = fgets($rs);
126                         if($flin !== false) {
127                                 $commitids[$i] = trim($flin);
128                                 $i++;
129                         }
130                 }
131                 fclose($rs);
132         } else {
133                 $commitids = false;
134         }
135         
136         if($commitids != false) {
137                 echo "<hr>Commits<br>";
138                 echo "<table border=\"1\">";
139                 echo "<tr><th>Committed By</th><th>Date</th><th>Commit Log Entry</th></tr>";
140                 foreach($commitids as $ids) {
141                         $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");
142                         if($rs) {
143                                 $flin1 = trim(fgets($rs));
144                                 $flin2 = trim(fgets($rs));
145                                 $flin3 = trim(fgets($rs));
146                                 while(!feof($rs)) {
147                                         $flin4 = fread($rs, 8192);
148                                 }
149                                 $flon =  gwvpmini_emailToUserLink($flin2);
150                                 if(!$flon) {
151                                         $flon = "$flin3 (external)";
152                                 }
153                         }
154                         echo "<tr><td>".get_gravatar($flin2, 18, 'mm', 'g', true)."$flon</td><td>$flin1</td><td>$flin4</td></tr>";
155                 }
156                 echo "</table>";
157         } else {
158                 echo "No commit information available yet<br>";
159         }
160 }
161
162 function gwvpmini_UpdateRepoBasePerms()
163 {
164         global $BASE_URL, $repo_view_call;
165         
166         if(isset($_REQUEST["q"])) {\r
167                 $query = $_REQUEST["q"];\r
168                 $qspl = explode("/", $query);
169                 error_log("PLOOP:qview".print_r($qspl, true));\r
170         }
171         
172         if(isset($qspl[1])) $repo_view_call = $qspl[1];
173         else {
174                 error_log("PLOOP: no repo name");
175                 header("Location: $BASE_URL/view/$repo_view_call");
176                 return;
177         }
178         
179         $newperms = $_REQUEST["base_perms"];
180         
181         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
182         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
183         \r
184         $owner_name = $owner["username"];
185         
186         $owner_view = false;
187         if(isset($_SESSION["id"])) {\r
188                 if($owner["id"] == $_SESSION["id"]) {\r
189                         $owner_view = true;\r
190                 }\r
191         }
192         
193         $rid = gwvpmini_GetRepoId($repo_view_call);
194         
195         if(!$owner_view) {
196                 gwvpmini_SendMessage("error", "failure updating permission for repo");
197                 error_log("PLOOP: attempt to update from non-owner");
198         } else {
199                 error_log("PLOOP: updateds: ".print_r($_REQUEST, true));
200                 gwvpmini_ChangeRepoPerm($rid, "b", $_REQUEST["base_perms"]);
201                 gwvpmini_SendMessage("info", "Base permissions for repo updated");
202         }\r
203         
204         header("Location: $BASE_URL/view/$repo_view_call");
205 }\r
206
207 ?>