-
Notifications
You must be signed in to change notification settings - Fork 453
/
GradeReportMessageHandler.php
58 lines (48 loc) · 1.59 KB
/
GradeReportMessageHandler.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
namespace Concrete\Core\Health\Report\Message;
use Concrete\Core\Entity\Health\Report\Result;
use Concrete\Core\Health\Report\Grader\ScoringGraderInterface;
use Concrete\Core\Health\Report\ReportControllerInterface;
use Doctrine\ORM\EntityManager;
class GradeReportMessageHandler
{
/**
* @var EntityManager
*/
protected $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function __invoke(GradeReportMessage $message)
{
// We need this line in case this is being run by the tasks CLI - the result findings aren't
// included without this.
$this->entityManager->clear();
/**
* @var $result Result
*/
$result = $this->entityManager->find(Result::class, $message->getResultId());
$task = $result->getTask();
/**
* @var $controller ReportControllerInterface
*/
$controller = $task->getController();
$grader = $controller->getResultGrader();
if ($grader) {
if ($grader instanceof ScoringGraderInterface) {
$score = $grader->getScoreFromResult($result);
if ($score < 0) {
$score = 0;
}
$result->setScore($score);
$grade = $grader->getGrade($score);
} else {
$grade = $grader->getGrade();
}
$result->setGrade($grade);
}
$this->entityManager->persist($result);
$this->entityManager->flush();
}
}