2019-10-25 14:59:20 +02:00
< ? php
2021-04-30 15:34:04 +02:00
namespace App\Entity ;
use App\Traits\RandomTrait ;
use App\Traits\TimeStampableTrait ;
use DateTime ;
use DateTimeInterface ;
use Doctrine\Common\Collections\ArrayCollection ;
use Doctrine\Common\Collections\Collection ;
use Doctrine\ORM\Mapping as ORM ;
use ErrorException ;
use JMS\Serializer\Annotation as Serializer ;
/**
* @ ORM\Entity ( repositoryClass = " App \R epository \ PollRepository " )
* @ Serializer\ExclusionPolicy ( " all " )
*/
class Poll {
use RandomTrait ;
use TimeStampableTrait ;
2021-04-20 16:14:34 +02:00
/**
2021-04-30 15:34:04 +02:00
* @ ORM\Id ()
* @ ORM\GeneratedValue ()
* @ ORM\Column ( type = " integer " )
* @ Serializer\Expose ()
* @ Serializer\Type ( " integer " )
2021-04-20 16:14:34 +02:00
*/
2021-04-30 15:34:04 +02:00
public $id ;
2021-04-20 16:14:34 +02:00
2021-04-30 15:34:04 +02:00
/**
* @ ORM\Column ( type = " string " , length = 255 )
* @ Serializer\Expose ()
* @ Serializer\Type ( " string " )
*/
public $title ;
/**
* @ ORM\Column ( type = " string " , length = 255 , nullable = false , unique = true )
* @ Serializer\Expose ()
* @ Serializer\Type ( " string " )
*/
public $customUrl ;
/**
* @ ORM\Column ( type = " string " , length = 1000 )
* @ Serializer\Expose ()
* @ Serializer\Type ( " string " )
*/
public $description ;
2021-04-20 16:14:34 +02:00
2021-04-30 15:34:04 +02:00
/**
* @ ORM\Column ( type = " datetime " )
* @ Serializer\Expose ()
*/
public $expiracyDate ;
/**
* @ ORM\ManyToOne ( targetEntity = " App \ Entity \ Owner " , inversedBy = " polls " , cascade = { " persist " })
* @ ORM\JoinColumn ( nullable = false )
* @ Serializer\Type ( " App \ Entity \ Owner " )
* @ Serializer\Expose ()
*/
public $owner ;
/**
* kind of poll , 'text' or 'date'
* @ ORM\Column ( type = " string " , length = 255 )
* @ Serializer\Type ( " string " )
* @ Serializer\Expose ()
*/
public $kind = 'text' ;
/**
* array of possible answer to each choice , by default : " yes " or nothing only .
* could be also " yes " , " maybe " , " no " . extensible to anything
* @ ORM\Column ( type = " array " )
* @ Serializer\Type ( " array " )
* @ Serializer\Expose ()
*/
public $allowedAnswers ;
2019-11-27 16:14:49 +01:00
2021-04-30 15:34:04 +02:00
/**
* people can add votes
* @ ORM\Column ( type = " boolean " , nullable = true )
* @ Serializer\Type ( " boolean " )
* @ Serializer\Expose ()
*/
public $votesAllowed = true ;
/**
* max number of stack of votes possible .
* limits the number of people who can answer . as long as you trust the people to give only one answer with a reliable system .
* @ ORM\Column ( type = " smallint " , nullable = true )
* @ Serializer\Type ( " smallint " )
* @ Serializer\Expose ()
*/
public $votesMax = 1024 ;
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
/**
* max number of choices people can answer in a stack of vote . for text polls only , not date kind .
* by default , people can check as many answers as they want .
* If the question is " check your 3 favourite flavours " and displays 10 flavours , only the first 3 clicked will be taken into account . GUI should be able to make this clear and togglable so that people can change their 3 favourite flavours in their answer .
* @ ORM\Column ( type = " smallint " , nullable = true )
* @ Serializer\Type ( " smallint " )
* @ Serializer\Expose ()
*/
public $choicesMax = - 1 ;
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
/**
* people can add comments
* @ ORM\Column ( type = " boolean " , nullable = true )
* @ Serializer\Type ( " boolean " )
* @ Serializer\Expose ()
*/
public $commentsAllowed = true ;
/**
* kind of way the people can modify the poll
* everybody - can modify votes
* self - one can only modify its own vote
* nobody - no one can modify the votes ( excepted admin ), pray to have it right at first
* @ ORM\Column ( type = " string " , length = 255 )
* @ Serializer\Type ( " string " )
* @ Serializer\Expose ()
*/
public $modificationPolicy = 'everybody' ;
/**
* send a mail on a new comment
* @ ORM\Column ( type = " boolean " , nullable = true )
* @ Serializer\Type ( " boolean " )
* @ Serializer\Expose ()
*/
public $mailOnComment = true ;
/**
* send a mail on a new vote
* @ ORM\Column ( type = " boolean " , nullable = true )
* @ Serializer\Type ( " boolean " )
* @ Serializer\Expose ()
*/
public $mailOnVote = false ;
/**
* hide publicly results
* @ ORM\Column ( type = " boolean " , nullable = true )
* @ Serializer\Type ( " boolean " )
* @ Serializer\Expose ()
*/
public $hideResults = false ;
/**
* show publicly results even if there is a password to access the vote
* @ ORM\Column ( type = " boolean " , nullable = true )
* @ Serializer\Type ( " boolean " )
* @ Serializer\Expose ()
*/
public $showResultEvenIfPasswords = false ;
/**
* @ ORM\OneToMany ( targetEntity = " App \ Entity \ Vote " , mappedBy = " poll " , orphanRemoval = true , cascade = { " persist " , " remove " })
* @ Serializer\Type ( " ArrayCollection<App \ Entity \ Vote> " )
* @ Serializer\Expose ()
*/
public $votes ;
/**
* @ ORM\OneToMany ( targetEntity = " App \ Entity \ StackOfVotes " , mappedBy = " poll " , orphanRemoval = true , cascade = { " persist " , " remove " })
* @ Serializer\Expose ()
*/
public $stacksOfVotes ;
/**
* @ ORM\OneToMany ( targetEntity = " App \ Entity \ Choice " , mappedBy = " poll " , orphanRemoval = true , cascade = { " persist " , " remove " })
* @ Serializer\Expose ()
* @ Serializer\Type ( " ArrayCollection<App \ Entity \ Choice> " )
*/
public $choices ;
/**
* @ ORM\OneToMany ( targetEntity = " App \ Entity \ Comment " , mappedBy = " poll " , orphanRemoval = true , cascade = { " persist " , " remove " })
* @ Serializer\Expose ()
* @ Serializer\Type ( " ArrayCollection<App \ Entity \ Comment> " )
*/
public $comments ;
/**
* number of days from now for default expiracy date
* @ var int
* @ Serializer\Expose ()
*/
public $defaultExpiracyDaysFromNow = 60 ;
/**
* vote restricted by a password in md5 format
* @ ORM\Column ( type = " string " , length = 255 , nullable = true )
*/
private $password ;
/**
* used to allow administration
* @ ORM\Column ( type = " string " , length = 255 )
* @ Serializer\Type ( " string " )
*/
private $adminKey ;
private $maxChoicesLimit = 25 ;
public function __construct () {
$this -> initiate ();
$this -> setCreatedAt ( new DateTime () );
$this -> setAdminKey ( $this -> generateRandomKey () );
$this -> votes = new ArrayCollection ();
$this -> stacksOfVotes = new ArrayCollection ();
$this -> choices = new ArrayCollection ();
$this -> comments = new ArrayCollection ();
}
2021-04-27 12:51:21 +02:00
2021-04-30 15:34:04 +02:00
private function initiate () {
$this -> votes = new ArrayCollection ();
$this -> stacksOfVotes = new ArrayCollection ();
$this -> choices = new ArrayCollection ();
$this -> comments = new ArrayCollection ();
$this -> setAdminKey ( $this -> generateRandomKey () );
$this -> setCreatedAt ( new DateTime () );
$this -> setExpiracyDate ( $this -> addDaysToDate (
new DateTime (),
$this -> defaultExpiracyDaysFromNow
) );
$this -> setAllowedAnswers ( [ 'yes' , 'maybe' , 'no' ] );
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function setCreatedAt ( DateTimeInterface $createdAt ) : self {
$this -> createdAt = $createdAt ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
public function displayForAdmin () {
$content = $this -> display ();
$content [ 'owner' ] = $this -> getOwner () -> displayForAdmin ();
$content [ 'admin_key' ] = $this -> getAdminKey ();
$content [ 'password_hash' ] = $this -> getPassword ();
$content [ 'id' ] = $this -> getId ();
return $content ;
}
// counts each number of answer for this choice
public function display () {
$computedAnswers = $this -> computeAnswers ();
$displayedStackOfVotes = [];
foreach ( $this -> getStacksOfVotes () as $stack ) {
$displayedStackOfVotes [] = $stack -> display ();
}
$displayedChoices = [];
foreach ( $this -> getChoices () as $choice ) {
$displayedChoices [] = $choice -> display ( $this -> getKind () );
}
$displayedComments = [];
foreach ( $this -> getComments () as $comment ) {
$displayedComments [] = $comment -> display ();
}
$resp = [
'title' => $this -> getTitle (),
'description' => $this -> getDescription (),
'created_at' => $this -> getCreatedAt () -> format ( 'c' ),
'expiracy_date' => $this -> getExpiracyDate () -> format ( 'c' ),
'votes_max' => $this -> getVotesMax (),
'custom_url' => $this -> getCustomUrl (),
'choices_max' => $this -> getChoicesMax (),
'kind' => $this -> getKind (),
'allowed_answers' => $this -> getAllowedAnswers (),
'votes_allowed' => $this -> getVotesAllowed (),
'modification_policy' => $this -> getModificationPolicy (),
'hide_results' => $this -> getHideResults (),
'show_results_even_if_password' => $this -> getShowResultEvenIfPasswords (),
'owner' => [
'pseudo' => $this -> getOwner () -> getPseudo (),
]
,
'password_protected' => $this -> getPassword () ? 'yes' : 'no' ,
'max_score' => $computedAnswers [ 'max_score' ],
'choices' => $computedAnswers [ 'answers' ],
'stacks' => $displayedStackOfVotes ,
'comments' => $displayedComments ,
];
if ( $this -> getKind () == 'text' ) {
$resp [ 'choices' ] = $computedAnswers [ 'answers' ];
} elseif ( $this -> getKind () == 'date' ) {
$resp [ 'choices_grouped' ] = $computedAnswers [ 'grouped_dates' ];
}
return $resp ;
}
public function computeAnswers () {
$computedArray = [];
$grouped_dates = [];
$maxScore = 0 ;
if ( $this -> getKind () == 'date' ) {
2021-04-28 15:05:20 +02:00
foreach ( $this -> getChoices () as $choice ) {
2021-04-30 15:34:04 +02:00
$boom = explode ( ' >>> ' , $choice -> getName () );
2021-04-27 10:41:21 +02:00
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
if ( ! isset ( $grouped_dates [ $boom [ 0 ] ] ) ) {
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
$grouped_dates [ $boom [ 0 ] ] = [
2021-04-28 15:05:20 +02:00
2021-04-30 15:34:04 +02:00
" date_string " => $boom [ 0 ],
2021-04-30 15:49:00 +02:00
" choices " => [],
2021-04-30 15:34:04 +02:00
];
}
2021-04-30 15:49:00 +02:00
$grouped_dates [ $boom [ 0 ] ][ " choices " ][] = [
2021-04-30 15:34:04 +02:00
" choice_id " => $choice -> getId (),
" name " => $boom [ 1 ] ];
}
}
$scoreInfos = [
'score' => 0 ,
'yes' => [
'count' => 0 ,
'people' => [],
],
'maybe' => [
'count' => 0 ,
'people' => [],
],
'no' => [
'count' => 0 ,
'people' => [],
],
];
// first, prefill all choices
foreach ( $this -> getChoices () as $choice ) {
$computedArray [ $choice -> getId () ] = array_merge ( $scoreInfos , $choice -> display ( $this -> getKind () ) );
}
// then, compute stack of votes scores on each choice
foreach ( $this -> getStacksOfVotes () as $stack_of_vote ) {
foreach ( $stack_of_vote -> getVotes () as $vote ) {
$answer = $vote -> getValue ();
$choice_id = $vote -> getChoice () -> getId ();
$choice_url = $vote -> getChoice () -> getUrl ();
if ( ! isset ( $computedArray [ $choice_id ] ) ) {
$computedArray [ $choice_id ] = [
'id' => $choice_id ,
'url' => $choice_url ,
'name' => $vote -> getChoice () -> getName (),
'score' => 0 ,
'yes' => [
2021-04-28 15:05:20 +02:00
'count' => 0 ,
'people' => [],
2021-04-30 15:34:04 +02:00
],
'maybe' => [
2021-04-28 15:05:20 +02:00
'count' => 0 ,
'people' => [],
2021-04-30 15:34:04 +02:00
],
'no' => [
2021-04-28 15:05:20 +02:00
'count' => 0 ,
'people' => [],
2021-04-30 15:34:04 +02:00
],
2021-04-28 15:05:20 +02:00
2021-04-30 15:34:04 +02:00
];
}
$computedArray [ $choice_id ][ $answer ][ 'count' ] ++ ;
$computedArray [ $choice_id ][ $answer ][ 'people' ][] = $stack_of_vote -> getOwner () -> getPseudo ();
if ( $answer == 'yes' ) {
$computedArray [ $choice_id ][ 'score' ] += 1 ;
} elseif ( $answer == 'maybe' ) {
$computedArray [ $choice_id ][ 'score' ] += 0.5 ;
}
// compare with max value
if ( $computedArray [ $choice_id ][ 'score' ] > $maxScore ) {
$maxScore = $computedArray [ $choice_id ][ 'score' ];
2021-04-27 11:11:34 +02:00
}
}
2021-04-30 15:34:04 +02:00
}
$answersWithStats = [];
foreach ( $computedArray as $choice_stat ) {
$answersWithStats [] = $choice_stat ;
}
$groupsOfDates = [];
foreach ( $grouped_dates as $group ) {
$ii = 0 ;
2021-04-30 15:49:00 +02:00
foreach ( $group [ " choices " ] as $slice ) {
2021-04-30 15:34:04 +02:00
$slice [ 'score' ] = $computedArray [ $slice [ 'choice_id' ] ][ 'score' ];
$slice [ 'yes' ] = $computedArray [ $slice [ 'choice_id' ] ][ 'yes' ];
$slice [ 'maybe' ] = $computedArray [ $slice [ 'choice_id' ] ][ 'maybe' ];
$slice [ 'no' ] = $computedArray [ $slice [ 'choice_id' ] ][ 'no' ];
2021-04-30 15:49:00 +02:00
$slice [ 'id' ] = $slice [ 'choice_id' ];
$group [ " choices " ][ $ii ] = $slice ;
2021-04-30 15:34:04 +02:00
$ii ++ ;
2021-04-28 15:05:20 +02:00
}
2021-04-30 15:34:04 +02:00
$groupsOfDates [] = $group ;
2021-04-27 11:17:41 +02:00
}
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return [
'answers' => $answersWithStats ,
'grouped_dates' => $groupsOfDates ,
'max_score' => $maxScore ,
];
}
2019-11-12 11:26:19 +01:00
2021-04-30 15:34:04 +02:00
/**
* @ return Collection | Choice []
*/
public function getChoices () : Collection {
return $this -> choices ;
}
2021-04-27 12:51:21 +02:00
2021-04-30 15:34:04 +02:00
public function getKind () : ? string {
return $this -> kind ;
}
2021-04-27 12:51:21 +02:00
2021-04-30 15:34:04 +02:00
public function setKind ( string $kind ) : self {
$this -> kind = $kind ;
2021-04-27 12:51:21 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-27 12:51:21 +02:00
2021-04-30 15:34:04 +02:00
public function getStacksOfVotes () {
return $this -> stacksOfVotes ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function setStacksOfVotes ( ? StackOfVotes $stacksOfVotes ) : self {
$this -> stacksOfVotes = $stacksOfVotes ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
/**
* @ return Collection | Comment []
*/
public function getComments () : Collection {
return $this -> comments ;
}
2019-11-12 11:26:19 +01:00
2021-04-30 15:34:04 +02:00
public function getTitle () : ? string {
return $this -> title ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function setTitle ( string $title ) : self {
$this -> title = $title ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function getDescription () : ? string {
return $this -> description ;
}
2021-04-27 10:30:45 +02:00
2021-04-30 15:34:04 +02:00
public function setDescription ( string $description ) : self {
$this -> description = $description ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-27 10:30:45 +02:00
2021-04-30 15:34:04 +02:00
public function getCreatedAt () : ? DateTimeInterface {
return $this -> createdAt ;
}
2019-10-25 14:59:20 +02:00
2021-04-30 15:34:04 +02:00
public function getExpiracyDate () : ? DateTimeInterface {
return $this -> expiracyDate ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function setExpiracyDate ( DateTimeInterface $expiracyDate ) : self {
$this -> expiracyDate = $expiracyDate ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
public function getVotesMax () {
return $this -> votesMax ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
public function setVotesMax ( $votesMax ) : self {
$this -> votesMax = $votesMax ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function getChoicesMax () {
return $this -> choicesMax ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
public function setChoicesMax ( $choicesMax ) : self {
$this -> choicesMax = $choicesMax ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function getAllowedAnswers () : ? array {
return $this -> allowedAnswers ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function setAllowedAnswers ( array $allowedAnswers ) : self {
$this -> allowedAnswers = $allowedAnswers ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
public function getVotesAllowed () : ? bool {
return $this -> votesAllowed ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function setVotesAllowed ( ? bool $votesAllowed ) : self {
$this -> votesAllowed = $votesAllowed ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
public function getModificationPolicy () : ? string {
return $this -> modificationPolicy ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function setModificationPolicy ( string $modificationPolicy ) : self {
$this -> modificationPolicy = $modificationPolicy ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function getHideResults () : ? bool {
return $this -> hideResults ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function setHideResults ( bool $hideResults ) : self {
$this -> hideResults = $hideResults ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function getShowResultEvenIfPasswords () : ? bool {
return $this -> showResultEvenIfPasswords ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function setShowResultEvenIfPasswords ( bool $showResultEvenIfPasswords ) : self {
$this -> showResultEvenIfPasswords = $showResultEvenIfPasswords ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function getOwner () : ? Owner {
return $this -> owner ;
}
2021-04-27 10:22:16 +02:00
2021-04-30 15:34:04 +02:00
public function setOwner ( ? Owner $owner ) : self {
$this -> owner = $owner ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
public function getPassword () : ? string {
return $this -> password ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function setPassword ( string $password ) : self {
$this -> password = md5 ( $password );
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
public function getAdminKey () : ? string {
return $this -> adminKey ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function setAdminKey ( string $adminKey ) : self {
$this -> adminKey = $adminKey ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
public function getId () : ? int {
return $this -> id ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function findChoiceById ( int $id ) {
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
$choices = $this -> getChoices ();
$counter = 0 ;
// there must be something cleaner than this in Doctrine ArrayCollection
foreach ( $choices as $choice ) {
$counter ++ ;
if ( $counter > $this -> maxChoicesLimit ) {
throw new ErrorException ( " max number of choices reached for this poll " );
}
if ( $choice && $choice -> getId () == $id ) {
return $choice ;
2021-04-27 11:11:34 +02:00
}
}
2021-04-30 15:34:04 +02:00
return null ;
}
2019-11-05 17:22:30 +01:00
2021-04-30 15:34:04 +02:00
/**
* @ return Collection | Vote []
*/
public function getVotes () : Collection {
return $this -> votes ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function getCustomUrl () : ? string {
return $this -> customUrl ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function setCustomUrl ( string $customUrl ) : self {
$this -> customUrl = $customUrl ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-06 14:54:04 +01:00
2021-04-30 15:34:04 +02:00
public function getMailOnComment () : ? bool {
return $this -> mailOnComment ;
}
2019-11-06 14:54:04 +01:00
2021-04-30 15:34:04 +02:00
public function setMailOnComment ( bool $mailOnComment ) : self {
$this -> mailOnComment = $mailOnComment ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-06 14:54:04 +01:00
2021-04-30 15:34:04 +02:00
public function getMailOnVote () : ? bool {
return $this -> mailOnVote ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function setMailOnVote ( bool $mailOnVote ) : self {
$this -> mailOnVote = $mailOnVote ;
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-28 11:51:25 +01:00
2021-04-30 15:34:04 +02:00
public function addComment ( Comment $comment ) : self {
if ( ! $this -> comments -> contains ( $comment ) ) {
$this -> comments [] = $comment ;
$comment -> setPoll ( $this );
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-28 15:05:20 +02:00
2021-04-30 15:34:04 +02:00
public function removeComment ( Comment $comment ) : self {
if ( $this -> comments -> contains ( $comment ) ) {
$this -> comments -> removeElement ( $comment );
// set the owning side to null (unless already changed)
if ( $comment -> getPoll () === $this ) {
$comment -> setPoll ( null );
}
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
2020-01-28 20:43:16 +01:00
2021-04-30 15:34:04 +02:00
public function addStackOfVote ( StackOfVotes $stackOfVote ) : self {
if ( ! $this -> stacksOfVotes -> contains ( $stackOfVote ) ) {
$this -> stacksOfVotes [] = $stackOfVote ;
$stackOfVote -> setPoll ( $this );
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-28 15:05:20 +02:00
2021-04-30 15:34:04 +02:00
public function removeStackOfVote ( StackOfVotes $stackOfVote ) : self {
if ( $this -> stacksOfVotes -> contains ( $stackOfVote ) ) {
$this -> stacksOfVotes -> removeElement ( $stackOfVote );
// set the owning side to null (unless already changed)
if ( $stackOfVote -> getPoll () === $this ) {
$stackOfVote -> setPoll ( null );
}
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-12 17:26:56 +01:00
2021-04-30 15:34:04 +02:00
public function addVote ( Vote $vote ) : self {
if ( ! $this -> votes -> contains ( $vote ) ) {
$this -> votes [] = $vote ;
$vote -> setPoll ( $this );
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-28 15:05:20 +02:00
2021-04-30 15:34:04 +02:00
public function removeVote ( Vote $vote ) : self {
if ( $this -> votes -> contains ( $vote ) ) {
$this -> votes -> removeElement ( $vote );
// set the owning side to null (unless already changed)
if ( $vote -> getPoll () === $this ) {
$vote -> setPoll ( null );
}
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
2019-11-28 14:16:56 +01:00
2021-04-30 15:34:04 +02:00
public function addTextChoiceArray ( array $choiceTextArray ) : self {
foreach ( $choiceTextArray as $text ) {
$newChoice = new Choice ();
$newChoice -> setName ( $text );
$this -> addChoice ( $newChoice );
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
public function addChoice ( Choice $choice ) : self {
if ( ! is_null ( $this -> choices ) ) {
if ( ! $this -> choices -> contains ( $choice ) ) {
2021-04-27 11:11:34 +02:00
$this -> choices [] = $choice ;
$choice -> setPoll ( $this );
}
2021-04-30 15:34:04 +02:00
} else {
$this -> choices [] = $choice ;
$choice -> setPoll ( $this );
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
public function addStacksOfVote ( StackOfVotes $stacksOfVote ) : self {
if ( ! $this -> stacksOfVotes -> contains ( $stacksOfVote ) ) {
$this -> stacksOfVotes [] = $stacksOfVote ;
$stacksOfVote -> setPoll ( $this );
2021-04-28 15:05:20 +02:00
}
2021-04-20 16:14:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-28 15:05:20 +02:00
2021-04-30 15:34:04 +02:00
public function removeStacksOfVote ( StackOfVotes $stacksOfVote ) : self {
if ( $this -> stacksOfVotes -> contains ( $stacksOfVote ) ) {
$this -> stacksOfVotes -> removeElement ( $stacksOfVote );
// set the owning side to null (unless already changed)
if ( $stacksOfVote -> getPoll () === $this ) {
$stacksOfVote -> setPoll ( null );
}
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-20 16:14:34 +02:00
2021-04-30 15:34:04 +02:00
public function removeChoice ( Choice $choice ) : self {
if ( $this -> choices -> contains ( $choice ) ) {
$this -> choices -> removeElement ( $choice );
// set the owning side to null (unless already changed)
if ( $choice -> getPoll () === $this ) {
$choice -> setPoll ( null );
}
2021-04-28 15:05:20 +02:00
}
2021-04-20 16:14:34 +02:00
2021-04-30 15:34:04 +02:00
return $this ;
}
2021-04-28 15:05:20 +02:00
2021-04-30 15:34:04 +02:00
public function getCommentsAllowed () : ? bool {
return $this -> commentsAllowed ;
}
2021-04-27 11:11:34 +02:00
2021-04-30 15:34:04 +02:00
public function setCommentsAllowed ( ? bool $commentsAllowed ) : self {
$this -> commentsAllowed = $commentsAllowed ;
return $this ;
2021-04-27 11:11:34 +02:00
}
2021-04-30 15:34:04 +02:00
}