Passed
Push — master ( 65060b...2b54a2 )
by Julito
10:15
created

ImsLtiServiceReadRequest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 31
c 1
b 0
f 0
dl 0
loc 62
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A processBody() 0 47 5
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
use Chamilo\CoreBundle\Entity\GradebookEvaluation;
5
use Chamilo\UserBundle\Entity\User;
6
7
/**
8
 * Class ImsLtiServiceReadRequest.
9
 */
10
class ImsLtiServiceReadRequest extends ImsLtiServiceRequest
11
{
12
    /**
13
     * ImsLtiServiceReadRequest constructor.
14
     *
15
     * @param SimpleXMLElement $xml
16
     */
17
    public function __construct(SimpleXMLElement $xml)
18
    {
19
        parent::__construct($xml);
20
21
        $this->responseType = ImsLtiServiceResponse::TYPE_READ;
22
        $this->xmlRequest = $this->xmlRequest->readResultRequest;
23
    }
24
25
    protected function processBody()
26
    {
27
        $resultRecord = $this->xmlRequest->resultRecord;
28
        $sourcedId = (string) $resultRecord->sourcedGUID->sourcedId;
29
30
        $sourcedParts = explode(':', $sourcedId);
31
32
        $em = Database::getManager();
33
        /** @var GradebookEvaluation $evaluation */
34
        $evaluation = $em->find('ChamiloCoreBundle:GradebookEvaluation', $sourcedParts[0]);
35
        /** @var User $user */
36
        $user = $em->find('ChamiloUserBundle:User', $sourcedParts[1]);
37
38
        if (empty($evaluation) || empty($user)) {
39
            $this->statusInfo
40
                ->setSeverity(ImsLtiServiceResponseStatus::SEVERITY_STATUS)
41
                ->setCodeMajor(ImsLtiServiceResponseStatus::CODEMAJOR_FAILURE);
42
43
            return;
44
        }
45
46
        $results = Result::load(null, $user->getId(), $evaluation->getId());
47
48
        $ltiScore = '';
49
        $responseDescription = get_plugin_lang('ScoreNotSet', 'ImsLtiPlugin');
50
51
        if (!empty($results)) {
52
            /** @var Result $result */
53
            $result = $results[0];
54
55
            if (!empty($result->get_score())) {
56
                $ltiScore = $result->get_score() / $evaluation->getMax();
57
58
                $responseDescription = sprintf(
59
                    get_plugin_lang('ScoreForXUserIsYScore', 'ImsLtiPlugin'),
60
                    $user->getId(),
61
                    $ltiScore
62
                );
63
            }
64
        }
65
66
        $this->statusInfo
67
            ->setSeverity(ImsLtiServiceResponseStatus::SEVERITY_STATUS)
68
            ->setCodeMajor(ImsLtiServiceResponseStatus::CODEMAJOR_SUCCESS)
69
            ->setDescription($responseDescription);
70
71
        $this->responseBodyParam = (string) $ltiScore;
72
    }
73
}
74