1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace AppBundle\Utils; |
4
|
|
|
|
5
|
|
|
use Doctrine\ORM\EntityManager; |
6
|
|
|
use AppBundle\Entity\Poll; |
7
|
|
|
|
8
|
|
|
class PollManager |
9
|
|
|
{ |
10
|
|
|
protected $entityManager; |
11
|
|
|
protected $pollRepo; |
12
|
|
|
protected $electionManager; |
13
|
|
|
|
14
|
|
|
/** |
15
|
|
|
* Constructor |
16
|
|
|
* |
17
|
|
|
* @param EntityManager $entityManager |
18
|
|
|
*/ |
19
|
|
|
public function __construct(EntityManager $entityManager, ElectionManager $electionManager) |
|
|
|
|
20
|
|
|
{ |
21
|
|
|
$this->entityManager = $entityManager; |
22
|
|
|
$this->repo = $this->entityManager->getRepository('AppBundle:Poll'); |
|
|
|
|
23
|
|
|
$this->electionManager = $electionManager; |
24
|
|
|
} |
25
|
|
|
|
26
|
|
|
/** |
27
|
|
|
* Get an array of current polls (objects) |
28
|
|
|
* |
29
|
|
|
* @return array |
30
|
|
|
*/ |
31
|
|
|
public function getCurrentPolls(): array |
32
|
|
|
{ |
33
|
|
|
$currentPolls = $this->repo->findByActive(true); |
34
|
|
|
|
35
|
|
|
return $currentPolls; |
36
|
|
|
} |
37
|
|
|
|
38
|
|
|
/** |
39
|
|
|
* Get an array of eligible votes |
40
|
|
|
* |
41
|
|
|
* @param AppBundle/Entity/PollType $type |
|
|
|
|
42
|
|
|
* @return array |
43
|
|
|
*/ |
44
|
|
|
public function getEligibleVoters(PollType $type): array |
|
|
|
|
45
|
|
|
{ |
46
|
|
|
return []; |
47
|
|
|
} |
48
|
|
|
|
49
|
|
|
/** |
50
|
|
|
* Get an array of all polls (objects) |
51
|
|
|
* |
52
|
|
|
* @return array |
53
|
|
|
*/ |
54
|
|
|
public function getAllPolls(): array |
55
|
|
|
{ |
56
|
|
|
$polls = $this->repo->findAll(); |
57
|
|
|
|
58
|
|
|
return $polls; |
59
|
|
|
} |
60
|
|
|
|
61
|
|
|
/** |
62
|
|
|
* Get poll statistics |
63
|
|
|
* |
64
|
|
|
* @param Poll $poll |
65
|
|
|
* @return array |
66
|
|
|
*/ |
67
|
|
|
public function getPollStats(Poll $poll): array |
|
|
|
|
68
|
|
|
{ |
69
|
|
|
// If Poll is election then reject |
70
|
|
|
|
71
|
|
|
// Get standard stats |
72
|
|
|
return []; |
73
|
|
|
} |
74
|
|
|
|
75
|
|
|
/** |
76
|
|
|
* Get the result of the poll (in terms of a choice) |
77
|
|
|
* |
78
|
|
|
* @param Poll $poll |
79
|
|
|
* @return AppBundle/Entity/Choice |
|
|
|
|
80
|
|
|
*/ |
81
|
|
|
public function getPollResult(Poll $poll): Choice |
|
|
|
|
82
|
|
|
{ |
83
|
|
|
// If election then call Election Manager |
84
|
|
|
|
85
|
|
|
// Calculate winning choice |
86
|
|
|
return; |
87
|
|
|
} |
88
|
|
|
|
89
|
|
|
public function getStandardPollVotes(Poll $poll): array |
|
|
|
|
90
|
|
|
{ |
91
|
|
|
return []; |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
public function markPollClosed(Poll $poll) |
|
|
|
|
95
|
|
|
{ |
96
|
|
|
return; |
97
|
|
|
} |
98
|
|
|
} |
99
|
|
|
|
The
EntityManager
might become unusable for example if a transaction is rolled back and it gets closed. Let’s assume that somewhere in your application, or in a third-party library, there is code such as the following:If that code throws an exception and the
EntityManager
is closed. Any other code which depends on the same instance of theEntityManager
during this request will fail.On the other hand, if you instead inject the
ManagerRegistry
, thegetManager()
method guarantees that you will always get a usable manager instance.