php-censor/src/Service/WebNotificationService.php
2018-04-09 20:09:02 +07:00

74 lines
2.2 KiB
PHP

<?php
namespace PHPCensor\Service;
use PHPCensor\Model\Build;
/**
* A service that listens for creation, duplication and deletion of builds for web notification UI.
*/
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)
{
$rtn = ['count' => $builds['count'], 'items' => []];
foreach ($builds['items'] as $buildItem) {
$build = self::formatBuild($buildItem);
$rtn['items'][$buildItem->getId()]['build'] = $build;
}
ksort($rtn['items']);
return $rtn;
}
/**
* Provides structured keys for web notification.
*
* @param Build $build
*
* @return array
*/
public static function formatBuild($build)
{
if (empty($build) || is_null($build)) {
return [];
}
$status = $build->getStatus();
$datePerformed = '';
$dateFinished = '';
if ($status === Build::STATUS_PENDING) {
$datePerformed = 'Created: ' . $build->getCreateDate()->format('H:i');
} elseif ($status === Build::STATUS_RUNNING) {
$datePerformed = 'Started: ' . $build->getStartDate()->format('H:i');
}
if (!is_null($build->getFinishDate())) {
$dateFinished = 'Finished: ' . $build->getFinishDate()->format('H:i');
}
return [
'branch' => $build->getBranch(),
'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',
'project_title' => $build->getProject()->getTitle(),
'status' => $status,
'date_performed' => $datePerformed,
'date_finished' => $dateFinished
];
}
}