flush
[pharext/pharext.org] / app / Controller / Github.php
1 <?php
2
3 namespace app\Controller;
4
5 use app\Controller;
6 use app\Github\API;
7 use app\Session;
8 use app\Web;
9
10 use http\QueryString;
11 use http\Url;
12
13 abstract class Github implements Controller
14 {
15 /**
16 * @var \app\web
17 */
18 protected $app;
19
20 /**
21 * @var \app\Github\API
22 */
23 protected $github;
24
25 /**
26 * @var \app\Session
27 */
28 protected $session;
29
30 function __construct(Web $app, API $github, Session $session) {
31 $this->app = $app;
32 $this->github = $github;
33 $this->session = $session;
34 $this->app->getView()->addData(compact("session") + [
35 "location" => "github",
36 "title" => "Github"
37 ]);
38 $this->app->getView()->registerFunction("check", [$this, "checkRepoHook"]);
39 }
40
41 protected function checkToken() {
42 if ($this->github->hasToken()) {
43 return true;
44 }
45 $this->app->redirect($this->app->getBaseUrl()->mod([
46 "path" => "github/signin",
47 "query" => new QueryString(["returnto" => $this->session->current])
48 ]));
49 return false;
50 }
51
52 /**
53 * Check if the pharext webhook is set for the repo and return its id
54 * @param object $repo
55 * @return int hook id
56 */
57 function checkRepoHook($repo) {
58 if ($repo->hooks) {
59 foreach ($repo->hooks as $hook) {
60 if ($hook->name === "web" && $hook->config->url === $this->github->getConfig()->hook->url) {
61 return $hook->id;
62 }
63 }
64 }
65 return null;
66 }
67
68 function createLinkGenerator($links) {
69 return function($which) use($links) {
70 if (!isset($links[$which])) {
71 if ($which !== "next" || !isset($links["last"])) {
72 return null;
73 } else {
74 $which = "last";
75 }
76 }
77 $url = new Url($links[$which], null, 0);
78 $qry = new QueryString($url->query);
79 return $qry->getInt("page", 1);
80 };
81 }
82
83 }