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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
<?php
namespace TotalPoll\Poll\Commands; ! defined( 'ABSPATH' ) && exit();
use TotalPoll\Contracts\Log\Repository; use TotalPoll\Contracts\Poll\Model;
/** * Class LogVote * @package TotalPoll\Poll\Commands */ class LogVote extends \TotalPollVendors\TotalCore\Helpers\Command { protected $poll; protected $repository;
/** * LogVote constructor. * * @param Model $poll * @param Repository $repository */ public function __construct( Model $poll, Repository $repository ) { $this->poll = $poll; $this->repository = $repository; }
/** * Log vote. * * @return mixed */ protected function handle() {
/** * Fires before saving the log entry. * * @param \TotalPoll\Contracts\Poll\Model $poll Poll model object. * * @since 4.0.0 */ do_action( 'totalpoll/actions/before/poll/command/log', $this->poll ); $details = []; $choices = [];
$error = $this->poll->getErrorMessage(); $receivedChoices = $this->poll->getReceivedChoices();
if ( $error ): $details['error'] = $this->poll->getErrorMessage(); endif;
if ( $receivedChoices ): $details['choices'] = []; foreach ( $receivedChoices as $choice ): $choices[] = $choice['uid']; $details['choices'][] = $choice['label']; endforeach; endif;
$questions = $this->poll->getQuestions(); $receivedQuestions = $this->poll->getReceivedQuestions(); $details['skipped'] = [];
foreach ($questions as $question) { if(! in_array($question['uid'], $receivedQuestions)) { $details['skipped'][] = $question['uid']; } }
if(empty($details['skipped'])) { unset($details['skipped']); }
$log = $this->repository->create( apply_filters( 'totalpoll/filters/poll/command/log/attributes', [ 'poll_id' => $this->poll->getId(), 'action' => 'vote', 'status' => $this->poll->getError() ? 'rejected' : 'accepted', 'choices' => $choices, 'details' => $details, ] ) );
/** * Fires after saving the log entry. * * @param \TotalPoll\Contracts\Log\Model $log Log entry model object. * @param \TotalPoll\Contracts\Poll\Model $poll Poll model object. * * @since 4.0.0 */ do_action( 'totalpoll/actions/after/poll/command/log', $log, $this->poll );
if ( $log ): self::share( 'log', $log ); endif;
return $log; } }
|