basic permissions work
[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                 echo "<form method=\"post\" action=\"$BASE_URL/updaterepobaseperms/$repo_view_call\">";
95                 echo "Base Permissions ";
96                 echo "<select name=\"base_perms\">";
97                 echo "<option value=\"a\"$anyo>Anyone can read</option>";
98                 echo "<option value=\"r\"$regd>Only registered users can read</option>";
99                 echo "<option value=\"x\"$expl>Explicit read permissions</option>";
100                 echo "</select>";
101                 echo "<input type=\"submit\" name=\"Set\" value=\"Set\">";
102                 echo "</form>";
103         }
104         //echo "command: git log --git-dir=$repo_base/$repo_view_call.git --pretty=format:\"%H\" -10";
105         $rs = popen("git --git-dir=$repo_base/$repo_view_call.git log --pretty=format:\"%H\" -10", "r");
106         $commitids = array();
107         $i = 0;
108         if($rs) {
109                 while(!feof($rs)) {
110                         $flin = fgets($rs);
111                         if($flin !== false) {
112                                 $commitids[$i] = trim($flin);
113                                 $i++;
114                         }
115                 }
116                 fclose($rs);
117         } else {
118                 $commitids = false;
119         }
120         
121         if($commitids != false) {
122                 echo "<hr>Commits<br>";
123                 echo "<table border=\"1\">";
124                 echo "<tr><th>Committed By</th><th>Date</th><th>Commit Log Entry</th></tr>";
125                 foreach($commitids as $ids) {
126                         $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");
127                         if($rs) {
128                                 $flin1 = trim(fgets($rs));
129                                 $flin2 = trim(fgets($rs));
130                                 $flin3 = trim(fgets($rs));
131                                 while(!feof($rs)) {
132                                         $flin4 = fread($rs, 8192);
133                                 }
134                                 $flon =  gwvpmini_emailToUserLink($flin2);
135                                 if(!$flon) {
136                                         $flon = "$flin3 (external)";
137                                 }
138                         }
139                         echo "<tr><td>".get_gravatar($flin2, 18, 'mm', 'g', true)."$flon</td><td>$flin1</td><td>$flin4</td></tr>";
140                 }
141                 echo "</table>";
142         } else {
143                 echo "No commit information available yet<br>";
144         }
145 }
146
147 function gwvpmini_UpdateRepoBasePerms()
148 {
149         global $BASE_URL, $repo_view_call;
150         
151         if(isset($_REQUEST["q"])) {\r
152                 $query = $_REQUEST["q"];\r
153                 $qspl = explode("/", $query);
154                 error_log("PLOOP:qview".print_r($qspl, true));\r
155         }
156         
157         if(isset($qspl[1])) $repo_view_call = $qspl[1];
158         else {
159                 error_log("PLOOP: no repo name");
160                 header("Location: $BASE_URL/view/$repo_view_call");
161                 return;
162         }
163         
164         $newperms = $_REQUEST["base_perms"];
165         
166         $owner = gwvpmini_GetRepoOwnerDetailsFromName($repo_view_call);\r
167         $desc = gwvpmini_GetRepoDescFromName($repo_view_call);\r
168         \r
169         $owner_name = $owner["username"];
170         
171         $owner_view = false;
172         if(isset($_SESSION["id"])) {\r
173                 if($owner["id"] == $_SESSION["id"]) {\r
174                         $owner_view = true;\r
175                 }\r
176         }
177         
178         $rid = gwvpmini_GetRepoId($repo_view_call);
179         
180         if(!$owner_view) {
181                 gwvpmini_SendMessage("error", "failure updating permission for repo");
182                 error_log("PLOOP: attempt to update from non-owner");
183         } else {
184                 error_log("PLOOP: updateds: ".print_r($_REQUEST, true));
185                 gwvpmini_ChangeRepoPerm($rid, "b", $_REQUEST["base_perms"]);
186                 gwvpmini_SendMessage("info", "Base permissions for repo updated");
187         }\r
188         
189         header("Location: $BASE_URL/view/$repo_view_call");
190 }\r
191
192 ?>