X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=app%2FController%2FGithub%2FRepoHook.php;h=9d9ad2cbcabea571cc81ef2e068f2d06d6765479;hb=303950054385d4c55cfef9a8828ee79420b7366e;hp=8ab1eed050a04575af2855b8e30e0bc078a9b5d7;hpb=25b99959b9e66d00681092977c23b5df32ead5f4;p=pharext%2Fpharext.org diff --git a/app/Controller/Github/RepoHook.php b/app/Controller/Github/RepoHook.php index 8ab1eed..9d9ad2c 100644 --- a/app/Controller/Github/RepoHook.php +++ b/app/Controller/Github/RepoHook.php @@ -3,66 +3,84 @@ namespace app\Controller\Github; use app\Controller\Github; +use app\Github\API\Hooks\ListHooks; class RepoHook extends Github { function __invoke(array $args = null) { - if ($this->checkToken()) { - if ($this->app->getRequest()->getRequestMethod() != "POST") { - // user had to re-authenticate, and was redirected here - $this->app->redirect($this->app->getBaseUrl()->mod([ - "path" => "./github/repo/" . $args["owner"] ."/". $args["name"], - "query" => "modal=hook&hook=" . $args["action"] - ])); - } else { - switch ($args["action"]) { - case "upd": - $this->updateHook($args["owner"], $args["name"]); - break; - - case "add": - $this->addHook($args["owner"], $args["name"]); - break; + if (!$this->checkToken()) { + return; + } + if ($this->app->getRequest()->getRequestMethod() != "POST") { + // user had to re-authenticate, and was redirected here + $this->app->redirect($this->app->getBaseUrl()->mod([ + "path" => "./github/repo/" . $args["owner"] ."/". $args["name"], + "query" => "modal=hook&hook=" . $args["action"] + ])); + } else { + $this->changeHook($args)->done(function() use($args) { + $this->redirectBack($args["owner"]."/".$args["name"]); + }); + $this->github->drain(); + } + } - case "del": - $this->delHook($args["owner"], $args["name"]); - break; - } - } + function changeHook($args) { + switch ($args["action"]) { + case "upd": + return $this->updateHook($args["owner"] ."/". $args["name"]); + case "add": + return $this->addHook($args["owner"] ."/". $args["name"]); + case "del": + return $this->delHook($args["owner"] ."/". $args["name"]); + default: + throw new \Exception("Unknown action ".$args["action"]); } } - function addHook($owner, $repo) { + function addHook($repo_name) { $hook_conf = $this->app->getRequest()->getForm(); - $this->github->createRepoHook("$owner/$repo", $hook_conf, function($hook) use($owner, $repo) { - if (($cache = $this->github->getCacheStorage())) { - $cache->del($this->github->getCacheKey("hooks:$owner/$repo")); + $listhooks = new ListHooks($this->github, ["repo" => $repo_name]); + return $this->github->createRepoHook($repo_name, $hook_conf)->then(function() use($listhooks) { + $listhooks->dropFromCache(); + }); + } + + function updateHook($repo_name) { + $listhooks = new ListHooks($this->github, ["repo" => $repo_name]); + return $this->github->queue($listhooks)->then(function($result) use($repo_name) { + list($hooks) = $result; + + if (!($hook = $this->github->checkHook($hooks))) { + throw new \Exception("Hook is not set"); } - if (($back = $this->app->getRequest()->getForm("returnback")) && isset($this->session->previous)) { - $this->app->redirect($this->app->getBaseUrl()->mod($this->session->previous)); - } else { - $this->app->redirect($this->app->getBaseUrl()->mod("./github/repo/$owner/$repo")); + + return $this->github->updateRepoHook($repo_name, $hook->id, $this->app->getRequest()->getForm()); + })->then(function() use($listhooks) { + $listhooks->dropFromCache(); + }); + } + + function delHook($repo_name) { + $listhooks = new ListHooks($this->github, ["repo" => $repo_name]); + return $this->github->queue($listhooks)->then(function($result) use($repo_name) { + list($hooks) = $result; + + if (!($hook = $this->github->checkHook($hooks))) { + throw new \Exception("Hook is not set"); } - })->send(); + + return $this->github->deleteRepoHook($repo_name, $hook->id); + })->then(function() use($listhooks) { + $listhooks->dropFromCache(); + }); } - function delHook($owner, $repo) { - $this->github->fetchRepo("$owner/$repo", function($repo) { - $this->github->fetchHooks($repo->full_name, function($hooks) use($repo) { - $repo->hooks = $hooks; - if (($hook = $this->checkRepoHook($repo))) { - $this->github->deleteRepoHook($repo->full_name, $hook->id, function() use($repo) { - if (($cache = $this->github->getCacheStorage())) { - $cache->del($this->github->getCacheKey("hooks:" . $repo->full_name)); - } - if (($back = $this->app->getRequest()->getForm("returnback")) && isset($this->session->previous)) { - $this->app->redirect($this->app->getBaseUrl()->mod($this->session->previous)); - } else { - $this->app->redirect($this->app->getBaseUrl()->mod("./github/repo/" . $repo->full_name)); - } - }); - } - }); - })->send(); + function redirectBack($repo) { + if (($back = $this->app->getRequest()->getForm("returnback")) && isset($this->session->previous)) { + $this->app->redirect($this->app->getBaseUrl()->mod($this->session->previous)); + } else { + $this->app->redirect($this->app->getBaseUrl()->mod(":./github/repo/" . $repo)); + } } }