X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=app%2FController%2FGithub%2FRepoHook.php;h=9d9ad2cbcabea571cc81ef2e068f2d06d6765479;hb=303950054385d4c55cfef9a8828ee79420b7366e;hp=023763a5ffef707622b04ad80debf643e7cb74ad;hpb=eb76e9bb9a39fe2725301f6cf6fc3cf29bbc4e00;p=pharext%2Fpharext.org diff --git a/app/Controller/Github/RepoHook.php b/app/Controller/Github/RepoHook.php index 023763a..9d9ad2c 100644 --- a/app/Controller/Github/RepoHook.php +++ b/app/Controller/Github/RepoHook.php @@ -8,79 +8,79 @@ 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) { - $call = new ListHooks($this->github, ["repo" => "$owner/$repo", "fresh" => true]); - $call(function($hooks, $links) use($owner, $repo, $call) { - $call->saveToCache([$hooks, $links]); - $this->redirectBack("$owner/$repo"); - }); - })->send(); + $listhooks = new ListHooks($this->github, ["repo" => $repo_name]); + return $this->github->createRepoHook($repo_name, $hook_conf)->then(function() use($listhooks) { + $listhooks->dropFromCache(); + }); } - function updateHook($owner, $repo) { - $this->github->readRepo("$owner/$repo", function($repo) { - $call = $this->github->listHooks($repo->full_name, function($hooks, $links) use($repo, &$call) { - $repo->hooks = $hooks; - if (($hook = $this->checkRepoHook($repo))) { - $hook_conf = $this->app->getRequest()->getForm(); - $this->github->updateRepoHook($repo->full_name, $hook->id, $hook_conf, function($changed_hook) use($repo, $hook, $hooks, $links, &$call) { - foreach ($changed_hook as $key => $val) { - $hook->$key = $val; - } - $call->saveToCache([$hooks, $links]); - $this->redirectBack($repo->full_name); - }); - } - }); - })->send(); + 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"); + } + + return $this->github->updateRepoHook($repo_name, $hook->id, $this->app->getRequest()->getForm()); + })->then(function() use($listhooks) { + $listhooks->dropFromCache(); + }); } - function delHook($owner, $repo) { - $this->github->readRepo("$owner/$repo", function($repo) { - $call = $this->github->listHooks($repo->full_name, function($hooks) use($repo, &$call) { - $repo->hooks = $hooks; - if (($hook = $this->checkRepoHook($repo))) { - $this->github->deleteRepoHook($repo->full_name, $hook->id, function() use($repo, &$call) { - $call->dropFromCache(); - $this->redirectBack($repo->full_name); - }); - } - }); - })->send(); + 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"); + } + + return $this->github->deleteRepoHook($repo_name, $hook->id); + })->then(function() use($listhooks) { + $listhooks->dropFromCache(); + }); } 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)); + $this->app->redirect($this->app->getBaseUrl()->mod(":./github/repo/" . $repo)); } } }