namespace app\Controller\Github;
use app\Controller\Github;
+use app\Github\API\Hooks\ListHooks;
class RepoHook extends Github
{
"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;
-
- case "del":
- $this->delHook($args["owner"], $args["name"]);
- break;
- }
+ $this->changeHook($args)->done(function() use($args) {
+ $this->redirectBack($args["owner"]."/".$args["name"]);
+ });
+ $this->github->drain();
}
}
}
+
+ 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();
- $call = $this->github->createRepoHook("$owner/$repo", $hook_conf, function($hook) use($owner, $repo, &$call) {
- $call->dropFromCache();
- $this->redirectBack("$owner/$repo");
+ $listhooks = new ListHooks($this->github, ["repo" => $repo_name]);
+ return $this->github->createRepoHook($repo_name, $hook_conf)->then(function() use($listhooks) {
+ $listhooks->dropFromCache();
});
- $call->send();
}
- function updateHook($owner, $repo) {
- $this->github->fetchRepo("$owner/$repo", function($repo) {
- $call = $this->github->fetchHooks($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->fetchRepo("$owner/$repo", function($repo) {
- $call = $this->github->fetchHooks($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) {