flush
[pharext/pharext.org] / app / Controller / Github / Repo.php
index 0c33a016c4cbc643bfeeaf7a049c47df5ee0627d..ac2ce37d5916cebdb2a3fc68e8cb39f4c2fa1202 100644 (file)
@@ -8,24 +8,35 @@ class Repo extends Github
 {
        function __invoke(array $args = null) {
                extract($args);
+               $this->app->getView()->addData(compact("owner", "name"));
                if ($this->checkToken()) {
-                       try {
-                               $this->github->fetchRepo(
-                                       "$owner/$name",
-                                       [$this, "repoCallback"]
-                               )->send();
-                       } catch (\app\Github\Exception $exception) {
-                               $this->app->getView()->addData(compact("exception", "owner", "name"));
+                       $this->github->readRepo(
+                               "$owner/$name",
+                               [$this, "repoCallback"]
+                       )->send();
+                       
+                       if (($modal = $this->app->getRequest()->getQuery("modal"))) {
+                               $this->app->getView()->addData(compact("modal") + [
+                                       "action" => $this->app->getRequest()->getQuery($modal)
+                               ]);
                        }
+                       
                        $this->app->display("github/repo");
                }
        }
 
-       function repoCallback($repo, $links) {
-               $this->app->getView()->addData(compact("repo"));
+       function repoCallback($repo) {
+               $this->app->getView()->addData(compact("repo") + [
+                       "title" => "Github: {$repo->name}"
+               ]);
                settype($repo->tags, "object");
-               $this->github->fetchTags($repo->full_name, 1, $this->createTagsCallback($repo));
-               $this->github->fetchReleases($repo->full_name, 1, $this->createReleasesCallback($repo));
+               $this->github->listHooks($repo->full_name, function($hooks) use($repo) {
+                       $repo->hooks = $hooks;
+                       $this->app->getView()->addData(["hook" => $this->checkRepoHook($repo)]);
+               });
+               $this->github->listTags($repo->full_name, 1, $this->createTagsCallback($repo));
+               $this->github->listReleases($repo->full_name, 1, $this->createReleasesCallback($repo));
+               $this->github->readContents($repo->full_name, null, $this->createContentsCallback($repo));
        }
 
        function createReleasesCallback($repo) {
@@ -34,6 +45,9 @@ class Repo extends Github
                                $tag = $release->tag_name;
                                settype($repo->tags->$tag, "object");
                                $repo->tags->$tag->release = $release;
+                               $this->github->listReleaseAssets($repo->full_name, $release->id, function($assets) use($release) {
+                                       $release->assets = $assets;
+                               });
                        }
                };
        }
@@ -47,4 +61,21 @@ class Repo extends Github
                        }
                };
        }
+       
+       function createContentsCallback($repo) {
+               return function($tree) use($repo) {
+                       foreach ($tree as $entry) {
+                               if ($entry->type !== "file" || $entry->size <= 0) {
+                                       continue;
+                               }
+                               if ($entry->name === "config.m4" || fnmatch("config?.m4", $entry->name)) {
+                                       $repo->config_m4 = $entry->name;
+                               } elseif ($entry->name === "package.xml" || $entry->name === "package2.xml") {
+                                       $repo->package_xml = $entry->name;
+                               } elseif ($entry->name === "pharext_package.php") {
+                                       $repo->pharext_package_php = $entry->name;
+                               }
+                       }
+               };
+       }
 }