From 56fc76d4e522ba70491e08199af41617773d172f Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Mon, 9 Apr 2018 20:07:04 +0700 Subject: [PATCH] Web notifications small fixes. Issue #156. --- .gitignore | 2 +- .../js/dashboard-widgets/all_projects.js | 2 - src/Controller/BuildController.php | 12 +---- src/Controller/WebNotificationsController.php | 50 ++++++------------- .../WidgetAllProjectsController.php | 6 ++- .../WidgetBuildErrorsController.php | 4 ++ src/Service/WebNotificationService.php | 31 ++++-------- 7 files changed, 37 insertions(+), 70 deletions(-) diff --git a/.gitignore b/.gitignore index 0d1093dc..dbbf27f2 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,4 @@ /public/assets/vendor /public/artifacts -!/public/artifacts/.gitkeep \ No newline at end of file +!/public/artifacts/.gitkeep diff --git a/public/assets/js/dashboard-widgets/all_projects.js b/public/assets/js/dashboard-widgets/all_projects.js index b7e166f7..1f767a57 100644 --- a/public/assets/js/dashboard-widgets/all_projects.js +++ b/public/assets/js/dashboard-widgets/all_projects.js @@ -34,8 +34,6 @@ PHPCensor.widgets.allProjects = { error: PHPCensor.handleFailedAjax }); - //Let's build another mechanism for web notification - //since the above feature is tightly coupled to the view. $.ajax({ url: APP_URL + 'web-notifications/widgets-all-projects-update/' + diff --git a/src/Controller/BuildController.php b/src/Controller/BuildController.php index b790d6fd..3db8143b 100644 --- a/src/Controller/BuildController.php +++ b/src/Controller/BuildController.php @@ -365,17 +365,9 @@ class BuildController extends WebController public function ajaxQueue() { - $sPending = 'pending'; - $sRunning = 'running'; - - $pending = $this->buildStore->getByStatus(Build::STATUS_PENDING); - $running = $this->buildStore->getByStatus(Build::STATUS_RUNNING); - $rtn = [ - - $sPending => $this->formatBuilds($pending), - $sRunning => $this->formatBuilds($running), - + 'pending' => $this->formatBuilds($this->buildStore->getByStatus(Build::STATUS_PENDING)), + 'running' => $this->formatBuilds($this->buildStore->getByStatus(Build::STATUS_RUNNING)), ]; $response = new JsonResponse(); diff --git a/src/Controller/WebNotificationsController.php b/src/Controller/WebNotificationsController.php index cc8c8270..ec0787b0 100644 --- a/src/Controller/WebNotificationsController.php +++ b/src/Controller/WebNotificationsController.php @@ -3,16 +3,9 @@ namespace PHPCensor\Controller; use PHPCensor\Model\Build; +use PHPCensor\Store\BuildStore; use PHPCensor\WebController; use PHPCensor\Store\Factory; -//use PHPCensor\View; -//use PHPCensor\Model\Project; -//use PHPCensor\Http\Response; -//use PHPCensor\Store\BuildStore; -//use PHPCensor\Store\ProjectStore; -//use PHPCensor\Store\ProjectGroupStore; -//use PHPCensor\Service\BuildService; -//use b8\Http\Response\JsonResponse; use PHPCensor\Http\Response\JsonResponse; use PHPCensor\Service\WebNotificationService; @@ -26,16 +19,6 @@ class WebNotificationsController extends WebController */ protected $buildStore; - /** - * @var ProjectStore - */ - protected $projectStore; - - /** - * @var ProjectGroupStore - */ - protected $groupStore; - /** * Initialise the controller, set up stores and services. */ @@ -43,18 +26,17 @@ class WebNotificationsController extends WebController { parent::init(); - $this->buildStore = Factory::getStore('Build'); - $this->projectStore = Factory::getStore('Project'); - $this->groupStore = Factory::getStore('ProjectGroup'); + $this->buildStore = Factory::getStore('Build'); } /** - * Provides JSON format for web notification UI of all last - * builds that have success and failed status. - * This is similar to WidgetAllProjectsController::update() - * but instead, this only returns JSON. + * Provides JSON format for web notification UI of all last builds that have success and failed status. + * This is similar to WidgetAllProjectsController::update() but instead, this only returns JSON. + * * @param int $projectId + * * @return \PHPCensor\Http\Response\JsonResponse + * * @see \PHPCensor\Controller\WidgetAllProjectsController */ public function widgetsAllProjectsUpdate($projectId) @@ -65,9 +47,6 @@ class WebNotificationsController extends WebController $oSuccess = WebNotificationService::formatBuild($success); $oFailed = WebNotificationService::formatBuild($failed); - //@keys count and items Follow the for-loop structure - //found in - //\PHPCensor\Service\WebNotificationService::formatBuilds() $aSuccess = [ 'count' => count($oSuccess), 'items' => [$projectId => ['build' => $oSuccess]] @@ -90,24 +69,25 @@ class WebNotificationsController extends WebController /** - * Provides JSON format for web notification UI of all last - * builds that have pending and running status. - * This is similar to WidgetAllProjectsController::update() - * but instead, this only returns JSON. - * @return \PHPCensor\Http\Response\JsonResponse + * Provides JSON format for web notification UI of all last builds that have pending and running status. + * This is similar to WidgetAllProjectsController::update() but instead, this only returns JSON. + * + * @return JsonResponse + * + * @throws \PHPCensor\Exception\HttpException */ public function buildsUpdated() { $pending = $this->buildStore->getByStatus(Build::STATUS_PENDING); $running = $this->buildStore->getByStatus(Build::STATUS_RUNNING); - $rtn = [ + $result = [ 'pending' => WebNotificationService::formatBuilds($pending), 'running' => WebNotificationService::formatBuilds($running) ]; $response = new JsonResponse(); - $response->setContent($rtn); + $response->setContent($result); return $response; } diff --git a/src/Controller/WidgetAllProjectsController.php b/src/Controller/WidgetAllProjectsController.php index 2db28de2..8846dcfa 100644 --- a/src/Controller/WidgetAllProjectsController.php +++ b/src/Controller/WidgetAllProjectsController.php @@ -11,8 +11,6 @@ use PHPCensor\Http\Response; use PHPCensor\Store\BuildStore; use PHPCensor\Store\ProjectStore; use PHPCensor\Store\ProjectGroupStore; -use PHPCensor\Service\BuildService; -use b8\Http\Response\JsonResponse; /** * Widget All Projects Controller @@ -106,6 +104,8 @@ class WidgetAllProjectsController extends WebController * Get a summary of the project groups we have, and what projects they have in them. * * @return array + * + * @throws \Exception */ protected function getGroupInfo() { @@ -129,6 +129,8 @@ class WidgetAllProjectsController extends WebController * @param integer $projectId * * @return Response + * + * @throws \PHPCensor\Exception\HttpException */ public function update($projectId) { diff --git a/src/Controller/WidgetBuildErrorsController.php b/src/Controller/WidgetBuildErrorsController.php index 706bf601..589262b6 100644 --- a/src/Controller/WidgetBuildErrorsController.php +++ b/src/Controller/WidgetBuildErrorsController.php @@ -52,6 +52,8 @@ class WidgetBuildErrorsController extends WebController /** * @return Response + * + * @throws \PHPCensor\Exception\HttpException */ public function update() { @@ -65,6 +67,8 @@ class WidgetBuildErrorsController extends WebController * @param View $view * * @return string + * + * @throws \PHPCensor\Exception\HttpException */ protected function renderAllProjectsLatestBuilds($view) { diff --git a/src/Service/WebNotificationService.php b/src/Service/WebNotificationService.php index b982ea69..8acea99c 100644 --- a/src/Service/WebNotificationService.php +++ b/src/Service/WebNotificationService.php @@ -2,13 +2,7 @@ namespace PHPCensor\Service; -use PHPCensor\Config; -use Pheanstalk\Pheanstalk; -use Pheanstalk\PheanstalkInterface; -use PHPCensor\BuildFactory; use PHPCensor\Model\Build; -use PHPCensor\Model\Project; -use PHPCensor\Store\BuildStore; /** * A service that listens for creation, duplication and deletion of builds for web notification UI. @@ -18,8 +12,11 @@ class WebNotificationService /** * Similar to BuildController::formatBuilds() but uses * pure object to be used for rendering web notifications. + * * @param array $builds + * * @return array Formatted builds + * * @see \PHPCensor\Controller\WidgetLastBuildsController::webNotificationUpdate(). */ public static function formatBuilds($builds) @@ -37,7 +34,9 @@ class WebNotificationService /** * Provides structured keys for web notification. + * * @param Build $build + * * @return array */ public static function formatBuild($build) @@ -45,15 +44,11 @@ class WebNotificationService if (empty($build) || is_null($build)) { return []; } - $status = $build->getStatus(); - $datePerformed = ''; - $dateFinished = ''; - /* - BUG: Lang::out() automatically renders the values for - either 'created_x' or 'started_x' instead of just - returning them. - */ + $status = $build->getStatus(); + $datePerformed = ''; + $dateFinished = ''; + if ($status === Build::STATUS_PENDING) { $datePerformed = 'Created: ' . $build->getCreateDate()->format('H:i'); } elseif ($status === Build::STATUS_RUNNING) { @@ -66,13 +61,9 @@ class WebNotificationService return [ 'branch' => $build->getBranch(), - 'url' => APP_URL . - 'build/view/' . - $build->getId(), + 'url' => APP_URL . 'build/view/' . $build->getId(), 'committer_email' => $build->getCommitterEmail(), - 'img_src' => 'https://www.gravatar.com/avatar/' . - md5($build->getCommitterEmail()) . - '?d=mm&s=40', + 'img_src' => 'https://www.gravatar.com/avatar/' . md5($build->getCommitterEmail()) . '?d=mm&s=40', 'project_title' => $build->getProject()->getTitle(), 'status' => $status, 'date_performed' => $datePerformed,