diff --git a/module/Application/src/Application/Service/Repository.php b/module/Application/src/Application/Service/Repository.php new file mode 100644 index 00000000..c4c58cc6 --- /dev/null +++ b/module/Application/src/Application/Service/Repository.php @@ -0,0 +1,72 @@ +repository[$type])) { + $sm = $this->getServiceManager(); + $api = $sm->get('edpgithub_api_factory'); + $service = $api->getService('Repo'); + + $params['per_page'] = 100; + $params['page'] = 1; + $this->repositories[$type] = $service->listRepositories(null, $type, $params); + if($api->getNext() && $api->getNext() != $api->getCurrent()) { + $params['page'] = $api->getNext(); + $this->getRepositoriesRecursive($this->repositories[$type], $params); + } + } + return $this->repositories[$type]; + } + + /** + * Recursively fetch all pages for Repositories + * @param array $repos + * @param string $params + */ + protected function getRepositoriesRecursive(&$repos, $params) { + $sm = $this->getServiceManager(); + $api = $sm->get('edpgithub_api_factory'); + $service = $api->getService('Repo'); + + $repos = array_merge($repos, $service->listRepositories(null, 'owner', $params)); + if($api->getNext() && $api->getNext() != $params['page']) { + $params['page'] = $api->getNext(); + $this->getAllRepos($repos, $params); + } + } + + /** + * Get Service Manager + * @return ServiceManager + */ + public function getServiceManager() + { + return $this->serviceManager; + } + + /** + * Set ServiceManager + * @param ServiceManager $serviceManager + */ + public function setServiceManager(ServiceManager $serviceManager) + { + $this->serviceManager = $serviceManager; + return $this; + } +} \ No newline at end of file diff --git a/module/Application/src/Application/View/Helper/ListModules.php b/module/Application/src/Application/View/Helper/ListModules.php index 3bada4be..c90274e0 100644 --- a/module/Application/src/Application/View/Helper/ListModules.php +++ b/module/Application/src/Application/View/Helper/ListModules.php @@ -38,11 +38,10 @@ public function __invoke($options = null) //limit modules to only user modules if($user) { - $api = $sm->get('edpgithub_api_factory'); - $service = $api->getService('Repo'); - $modules = array(); - $memberRepos = $service->listRepositories(null, 'member'); - $ownerRepos = $service->listRepositories(null, 'owner'); + $service = $service = $sm->get('application_service_repository'); + + $ownerRepos = $service->getAllRepository('owner'); + $memberRepos = $service->getAllRepository('member'); foreach($ownerRepos as $key => $repo) { if($repo->getFork()) { diff --git a/module/User/Module.php b/module/User/Module.php index 58fac2b6..f7286980 100644 --- a/module/User/Module.php +++ b/module/User/Module.php @@ -38,6 +38,9 @@ public function getServiceConfig() return $mapper; }, ), + 'invokables' => array( + 'application_service_repository' => 'Application\Service\Repository', + ), ); } diff --git a/module/User/src/User/View/Helper/UserRepositories.php b/module/User/src/User/View/Helper/UserRepositories.php index d06efe73..48a33bca 100644 --- a/module/User/src/User/View/Helper/UserRepositories.php +++ b/module/User/src/User/View/Helper/UserRepositories.php @@ -30,29 +30,17 @@ public function __invoke($options = array()) { $sm = $this->getServiceManager(); - //need to fetch top lvl ServiceManager $sm = $sm->getServiceLocator(); - $api = $sm->get('edpgithub_api_factory'); + $service = $sm->get('application_service_repository'); - $service = $api->getService('Repo'); - $mapper = $sm->get('application_module_mapper'); - - $params['per_page'] = 100; - $params['page'] = 1; - $ownerRepos = $service->listRepositories(null, 'owner', $params); - if($api->getNext() && $api->getNext() != $api->getCurrent()) { - $params['page'] = $api->getNext(); - $this->getAllRepos($ownerRepos, $params); - } + $ownerRepos = $service->getAllRepository('owner'); + $memberRepos = $service->getAllRepository('member'); - $memberRepos = $service->listRepositories(null, 'member', $params); - if($api->getNext() && $api->getNext() != $api->getCurrent()) { - $params['page'] = $api->getNext(); - $this->getAllRepos($ownerRepos, $params); - } $repositories = array_merge($ownerRepos, $memberRepos); + $mapper = $sm->get('application_module_mapper'); + foreach($repositories as $key => $repo) { if($repo->getFork()) { unset($repositories[$key]); @@ -67,22 +55,6 @@ public function __invoke($options = array()) return $repositories; } - public function getAllRepos(&$repos, $params) { - $sm = $this->getServiceManager(); - - //need to fetch top lvl ServiceManager - $sm = $sm->getServiceLocator(); - $api = $sm->get('edpgithub_api_factory'); - $service = $api->getService('Repo'); - - $repos = array_merge($repos, $service->listRepositories(null, 'owner', $params)); - if($api->getNext() && $api->getNext() != $params['page']) { - $params['page'] = $api->getNext(); - $this->getAllRepos($repos, $params); - } - - } - /** * Retrieve service manager instance *