Completed
Push — master ( 858bee...ca95b0 )
by Pavel
10s
created

QuestionRepository::getFirstQuestionForPass()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 14
ccs 0
cts 12
cp 0
rs 9.4285
cc 1
eloc 11
nc 1
nop 1
crap 2
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: device
5
 * Date: 23.02.16
6
 * Time: 10:17
7
 */
8
9
namespace AppBundle\Repository;
10
11
12
use AppBundle\Entity\PassModule;
13
use AppBundle\Entity\Question;
14
use Doctrine\ORM\EntityRepository;
15
16
class QuestionRepository extends EntityRepository
17
{
18 1
    public function findByModuleWithSorting($moduleId)
19
    {
20 1
        return $this->createQueryBuilder('question')
21 1
            ->andWhere('question.module = :module')
22 1
            ->setParameter('module', $moduleId)
23 1
            ->orderBy('question.sort')
24 1
            ->getQuery()
25 1
            ->getResult()
26 1
            ;
27
    }
28
29
    public function getFirstQuestionForPass($idPassModule)
30
    {
31
        return $this->createQueryBuilder('question')
32
            ->leftJoin('question.module', 'module')
33
            ->leftJoin('module.modulesUser', 'module_user')
34
            ->leftJoin('module_user.passModules', 'pass_module')
35
            ->andWhere('pass_module.id = :idPassModule')
36
            ->setParameter('idPassModule', $idPassModule)
37
            ->orderBy('question.sort')
38
            ->setMaxResults(1)
39
            ->getQuery()
40
            ->getOneOrNullResult()
41
            ;
42
    }
43
44
    public function getNextQuestionForPass(PassModule $passModule)
45
    {
46
        return $this->createQueryBuilder('question')
47
            ->leftJoin('question.module', 'module')
48
            ->leftJoin('module.modulesUser', 'module_user')
49
            ->leftJoin('module_user.passModules', 'pass_module')
50
            ->orderBy('question.sort')
51
            ->andWhere('pass_module.id = :idPassModule')
52
            ->andWhere("question.id NOT IN(:questionIds)")
53
            ->setParameter('idPassModule', $passModule->getId())
54
            ->setParameter('questionIds', array_values($passModule->getAnsweredQuestionIds()))
55
            ->setMaxResults(1)
56
            ->getQuery()
57
            ->getOneOrNullResult()
58
            ;
59
    }
60
61 1
    public function findMaxSortByModuleId($moduleId)
62
    {
63 1
        return $this->createQueryBuilder('question')
64 1
            ->select('MAX(question.sort) AS max_sort')
65 1
            ->andWhere('question.module = :module')
66 1
            ->setParameter('module', $moduleId)
67 1
            ->orderBy('max_sort', 'DESC')
68 1
            ->getQuery()
69 1
            ->getOneOrNullResult()
70 1
            ;
71
    }
72
73 1
    public function findCountQuestions()
74
    {
75 1
        return $this->createQueryBuilder('question')
76 1
            ->select('COUNT(question.id) as count_q')
77 1
            ->getQuery()
78 1
            ->getOneOrNullResult();
79
    }
80
}