diff --git a/src/PHPCensor/Application.php b/src/PHPCensor/Application.php index 9965e878..57845c95 100644 --- a/src/PHPCensor/Application.php +++ b/src/PHPCensor/Application.php @@ -140,13 +140,14 @@ class Application extends b8\Application $groupList = $groupStore->getWhere([], 100, 0, [], ['title' => 'ASC']); foreach ($groupList['items'] as $group) { - $thisGroup = ['title' => $group->getTitle()]; - $projects = b8\Store\Factory::getStore('Project')->getByGroupId($group->getId()); + $thisGroup = ['title' => $group->getTitle()]; + $projects = b8\Store\Factory::getStore('Project')->getByGroupId($group->getId(), false); $thisGroup['projects'] = $projects['items']; - $groups[] = $thisGroup; + $groups[] = $thisGroup; } - $layout->groups = $groups; + $layout->archived_projects = (b8\Store\Factory::getStore('Project')->getAll(true))['items']; + $layout->groups = $groups; } /** diff --git a/src/PHPCensor/Command/CreateBuildCommand.php b/src/PHPCensor/Command/CreateBuildCommand.php index 134cf186..6290a4e7 100644 --- a/src/PHPCensor/Command/CreateBuildCommand.php +++ b/src/PHPCensor/Command/CreateBuildCommand.php @@ -70,7 +70,7 @@ class CreateBuildCommand extends Command $branch = $input->getOption('branch'); $project = $this->projectStore->getById($projectId); - if (empty($project)) { + if (empty($project) || $project->getArchived()) { throw new \InvalidArgumentException('Project does not exist: ' . $projectId); } diff --git a/src/PHPCensor/Command/PollCommand.php b/src/PHPCensor/Command/PollCommand.php index cd79d7b3..73955acd 100644 --- a/src/PHPCensor/Command/PollCommand.php +++ b/src/PHPCensor/Command/PollCommand.php @@ -72,13 +72,13 @@ class PollCommand extends Command $http = new HttpClient('https://api.github.com'); $commits = $http->get('/repos/' . $project->getReference() . '/commits', ['access_token' => $token]); - $last_commit = $commits['body'][0]['sha']; + $last_commit = $commits['body'][0]['sha']; $last_committer = $commits['body'][0]['commit']['committer']['email']; - $message = $commits['body'][0]['commit']['message']; + $message = $commits['body'][0]['commit']['message']; $this->logger->info(Lang::get('last_commit_is', $project->getTitle(), $last_commit)); - if ($project->getLastCommit() != $last_commit && $last_commit != "") { + if (!$project->getArchived() && ($project->getLastCommit() != $last_commit && $last_commit != "")) { $this->logger->info( Lang::get('adding_new_build') ); @@ -89,7 +89,8 @@ class PollCommand extends Command $build->setStatus(Build::STATUS_NEW); $build->setBranch($project->getBranch()); $build->setCreated(new \DateTime()); - $build->setCommitMessage($message); + $build->setCommitMessage($message); + if (!empty($last_committer)) { $build->setCommitterEmail($last_committer); } diff --git a/src/PHPCensor/Controller/BuildController.php b/src/PHPCensor/Controller/BuildController.php index 4ab541b9..5f71f718 100644 --- a/src/PHPCensor/Controller/BuildController.php +++ b/src/PHPCensor/Controller/BuildController.php @@ -93,8 +93,13 @@ class BuildController extends Controller $delete = Lang::get('delete_build'); $deleteLink = APP_URL . 'build/delete/' . $build->getId(); + + $project = b8\Store\Factory::getStore('Project')->getByPrimaryKey($build->getProjectId()); - $actions = "{$rebuild} "; + $actions = ''; + if (!$project->getArchived()) { + $actions .= "{$rebuild} "; + } if ($this->currentUserIsAdmin()) { $actions .= " {$delete}"; @@ -157,9 +162,10 @@ class BuildController extends Controller */ public function rebuild($buildId) { - $copy = BuildFactory::getBuildById($buildId); + $copy = BuildFactory::getBuildById($buildId); + $project = b8\Store\Factory::getStore('Project')->getByPrimaryKey($copy->getProjectId()); - if (empty($copy)) { + if (empty($copy) || $project->getArchived()) { throw new NotFoundException(Lang::get('build_x_not_found', $buildId)); } diff --git a/src/PHPCensor/Controller/GroupController.php b/src/PHPCensor/Controller/GroupController.php index 75e41c87..a687f112 100644 --- a/src/PHPCensor/Controller/GroupController.php +++ b/src/PHPCensor/Controller/GroupController.php @@ -53,9 +53,11 @@ class GroupController extends Controller 'title' => $group->getTitle(), 'id' => $group->getId(), ]; - $projects = b8\Store\Factory::getStore('Project')->getByGroupId($group->getId()); - $thisGroup['projects'] = $projects['items']; - $groups[] = $thisGroup; + $projects_active = b8\Store\Factory::getStore('Project')->getByGroupId($group->getId(), false); + $projects_archived = b8\Store\Factory::getStore('Project')->getByGroupId($group->getId(), true); + + $thisGroup['projects'] = array_merge($projects_active['items'], $projects_archived['items']); + $groups[] = $thisGroup; } $this->layout->title = Lang::get('group_projects'); diff --git a/src/PHPCensor/Controller/HomeController.php b/src/PHPCensor/Controller/HomeController.php index 19f6cfc8..389294b0 100644 --- a/src/PHPCensor/Controller/HomeController.php +++ b/src/PHPCensor/Controller/HomeController.php @@ -110,6 +110,7 @@ class HomeController extends Controller /** * Get a summary of the project groups we have, and what projects they have in them. + * * @return array */ protected function getGroupInfo() @@ -119,7 +120,7 @@ class HomeController extends Controller foreach ($groups['items'] as $group) { $thisGroup = ['title' => $group->getTitle()]; - $projects = $this->projectStore->getByGroupId($group->getId()); + $projects = $this->projectStore->getByGroupId($group->getId(), false); $thisGroup['projects'] = $projects['items']; $thisGroup['summary'] = $this->getSummaryHtml($thisGroup['projects']); $rtn[] = $thisGroup; diff --git a/src/PHPCensor/Controller/ProjectController.php b/src/PHPCensor/Controller/ProjectController.php index c9abbf0c..4d38b86d 100644 --- a/src/PHPCensor/Controller/ProjectController.php +++ b/src/PHPCensor/Controller/ProjectController.php @@ -111,7 +111,7 @@ class ProjectController extends PHPCensor\Controller $branch = $project->getBranch(); } - if (empty($project)) { + if (empty($project) || $project->getArchived()) { throw new NotFoundException(Lang::get('project_x_not_found', $projectId)); } diff --git a/src/PHPCensor/Controller/WebhookController.php b/src/PHPCensor/Controller/WebhookController.php index ca1a6f57..8621d93e 100644 --- a/src/PHPCensor/Controller/WebhookController.php +++ b/src/PHPCensor/Controller/WebhookController.php @@ -13,6 +13,7 @@ namespace PHPCensor\Controller; use b8; use b8\Store; use Exception; +use PHPCensor\Helper\Lang; use PHPCensor\Model\Project; use PHPCensor\Service\BuildService; use PHPCensor\Store\BuildStore; @@ -20,6 +21,7 @@ use PHPCensor\Store\ProjectStore; use b8\Controller; use b8\Config; use b8\HttpClient; +use b8\Exception\HttpException\NotFoundException; /** * Webhook Controller - Processes webhook pings from BitBucket, Github, Gitlab, etc. @@ -444,6 +446,10 @@ class WebhookController extends Controller $commitMessage, array $extra = null ) { + if ($project->getArchived()) { + throw new NotFoundException(Lang::get('project_x_not_found', $project->getId())); + } + // Check if a build already exists for this commit ID: $builds = $this->buildStore->getByProjectAndCommit($project->getId(), $commitId); diff --git a/src/PHPCensor/Model/Base/ProjectGroupBase.php b/src/PHPCensor/Model/Base/ProjectGroupBase.php index 93a9726c..1ed0d39c 100644 --- a/src/PHPCensor/Model/Base/ProjectGroupBase.php +++ b/src/PHPCensor/Model/Base/ProjectGroupBase.php @@ -160,6 +160,6 @@ class ProjectGroupBase extends Model */ public function getGroupProjects() { - return Factory::getStore('Project', 'PHPCensor')->getByGroupId($this->getId()); + return Factory::getStore('Project', 'PHPCensor')->getByGroupId($this->getId(), false); } } diff --git a/src/PHPCensor/Store/ProjectStore.php b/src/PHPCensor/Store/ProjectStore.php index f5d7ad17..03c39f79 100644 --- a/src/PHPCensor/Store/ProjectStore.php +++ b/src/PHPCensor/Store/ProjectStore.php @@ -48,12 +48,19 @@ class ProjectStore extends ProjectStoreBase /** * Get a list of all projects, ordered by their title. + * + * @param boolean $archived + * * @return array */ - public function getAll() + public function getAll($archived = false) { - $query = 'SELECT * FROM `project` ORDER BY `title` ASC'; - $stmt = Database::getConnection('read')->prepare($query); + $archived = (integer)$archived; + + $query = 'SELECT * FROM `project` WHERE `archived` = :archived ORDER BY `title` ASC'; + $stmt = Database::getConnection('read')->prepare($query); + + $stmt->bindValue(':archived', $archived); if ($stmt->execute()) { $res = $stmt->fetchAll(\PDO::FETCH_ASSOC); @@ -74,21 +81,28 @@ class ProjectStore extends ProjectStoreBase /** * Get multiple Project by GroupId. - * @param int $value - * @param int $limit - * @param string $useConnection + * + * @param integer $value + * @param boolean $archived + * @param integer $limit + * @param string $useConnection + * * @return array + * * @throws \Exception */ - public function getByGroupId($value, $limit = 1000, $useConnection = 'read') + public function getByGroupId($value, $archived = false, $limit = 1000, $useConnection = 'read') { if (is_null($value)) { throw new \Exception('Value passed to ' . __FUNCTION__ . ' cannot be null.'); } + $archived = (integer)$archived; + + $query = 'SELECT * FROM `project` WHERE `group_id` = :group_id AND `archived` = :archived ORDER BY title LIMIT :limit'; + $stmt = Database::getConnection($useConnection)->prepare($query); - $query = 'SELECT * FROM `project` WHERE `group_id` = :group_id ORDER BY title LIMIT :limit'; - $stmt = Database::getConnection($useConnection)->prepare($query); $stmt->bindValue(':group_id', $value); + $stmt->bindValue(':archived', $archived); $stmt->bindValue(':limit', (int)$limit, \PDO::PARAM_INT); if ($stmt->execute()) { diff --git a/src/PHPCensor/View/Project/view.phtml b/src/PHPCensor/View/Project/view.phtml index 2c2f3332..974f8b2a 100644 --- a/src/PHPCensor/View/Project/view.phtml +++ b/src/PHPCensor/View/Project/view.phtml @@ -15,9 +15,11 @@