234UPDATE b_vote V SET V.COUNTER=(
237 WHERE VE.VOTE_ID=V.ID)
239UPDATE b_vote_question VQ SET VQ.COUNTER=(
241 FROM b_vote_event_question VEQ
242 WHERE VEQ.QUESTION_ID=VQ.ID)
243WHERE VQ.VOTE_ID={$voteId};
244UPDATE b_vote_answer VA, b_vote_question VQ SET VA.COUNTER=(
246 FROM b_vote_event_answer VEA
247 WHERE VEA.ANSWER_ID=VA.ID)
248WHERE VQ.ID = VA.QUESTION_ID AND VQ.VOTE_ID={$voteId};
249UPDATE b_vote_user VU, b_vote_event VE SET VU.COUNTER=(
252 WHERE VU.ID=VE.VOTE_USER_ID AND VE.VALID=
'Y')
253WHERE VU.ID IN (SELECT VOTE_USER_ID FROM b_vote_event WHERE VOTE_ID={$voteId});
260UPDATE b_vote SET b_vote.COUNTER=E.COUNTER
262 SELECT COUNT(ID) COUNTER, VOTE_ID
264 WHERE VOTE_ID={$voteId}
266WHERE b_vote.ID=E.VOTE_ID AND b_vote.ID={$voteId}
268UPDATE b_vote_question SET COUNTER=E.COUNTER
270 SELECT COUNT(EQ.ID) COUNTER, EQ.QUESTION_ID
271 FROM b_vote_event_question EQ
272 JOIN b_vote_question Q ON (Q.ID = EQ.QUESTION_ID)
273 WHERE Q.VOTE_ID={$voteId}
274 GROUP BY EQ.QUESTION_ID) E
275WHERE b_vote_question.ID=E.QUESTION_ID AND b_vote_question.VOTE_ID={$voteId}
277UPDATE b_vote_answer SET b_vote_answer.COUNTER=E.COUNTER
279 SELECT COUNT(VEA.ID) COUNTER, VEA.ANSWER_ID
280 FROM b_vote_event_answer VEA
281 INNER JOIN b_vote_answer VA ON (VA.ID=VEA.ANSWER_ID)
282 INNER JOIN b_vote_question VQ ON (VQ.ID=VA.QUESTION_ID)
283 WHERE VQ.VOTE_ID={$voteId}
284 GROUP BY VEA.ANSWER_ID
286WHERE b_vote_answer.ID=E.ANSWER_ID
288UPDATE b_vote_user SET b_vote_user.COUNTER=E.COUNTER
290 SELECT COUNT(ID) COUNTER, VOTE_USER_ID
293 GROUP BY VOTE_USER_ID
295WHERE b_vote_user.ID=E.VOTE_USER_ID AND b_vote_user.ID IN (SELECT VOTE_USER_ID FROM b_vote_event WHERE VOTE_ID={$voteId})
303UPDATE b_vote V SET V.COUNTER=(
306 WHERE VE.VOTE_ID=V.ID)
309UPDATE b_vote_question VQ SET VQ.COUNTER=(
311 FROM b_vote_event_question VEQ
312 WHERE VEQ.QUESTION_ID=VQ.ID)
313WHERE VQ.VOTE_ID={$voteId}
315UPDATE b_vote_answer VA SET VA.COUNTER=(
317 FROM b_vote_event_answer
318 WHERE ANSWER_ID=VA.ID)
319WHERE VA.QUESTION_ID IN (
322 WHERE VOTE_ID={$voteId}
325UPDATE b_vote_user VU SET VU.COUNTER=(
328 WHERE VU.ID=VOTE_USER_ID AND VALID=
'Y')
329WHERE VU.ID IN (SELECT VOTE_USER_ID FROM b_vote_event WHERE VOTE_ID={$voteId})
469 array_key_exists(self::EVENT_FIELD_NAME,
$request) &&
470 is_array(
$request[self::EVENT_FIELD_NAME]) &&
471 array_key_exists(
$id,
$request[self::EVENT_FIELD_NAME]) &&
476 if (array_key_exists(
"BALLOT",
$request[self::EVENT_FIELD_NAME][
$id]))
478 foreach (
$request[self::EVENT_FIELD_NAME][
$id][
"BALLOT"] as $qId => $answerIds)
480 $answerIds = is_array($answerIds) ? $answerIds :
array($answerIds);
481 foreach ($answerIds as $answerId)
484 $data[
"BALLOT"][$qId] = isset(
$data[
"BALLOT"][$qId]) && is_array(
$data[
"BALLOT"][$qId]) ?
$data[
"BALLOT"][$qId] : [];
485 $data[
"BALLOT"][$qId][$answerId] =
true;
489 if (array_key_exists(
"MESSAGE",
$request[self::EVENT_FIELD_NAME][
$id]))
491 foreach (
$request[self::EVENT_FIELD_NAME][
$id][
"MESSAGE"] as $qId => $answerIds)
494 foreach ($answerIds as $answerId =>
$message)
499 $data[
"MESSAGE"][$qId] = is_array(
$data[
"MESSAGE"][$qId]) ?
$data[
"MESSAGE"][$qId] : [];
505 if (array_key_exists(
"EXTRAS",
$request[self::EVENT_FIELD_NAME][
$id]))
520 $questions = $this->vote->getQuestions();
522 $data = (array_key_exists(
"BALLOT", $ballot) ? $ballot[
"BALLOT"] : []);
523 $message = (array_key_exists(
"MESSAGE", $ballot) ? $ballot[
"MESSAGE"] : []);
524 foreach ($questions as $questionId => $question)
526 if (array_key_exists($question[
"ID"],
$data) && is_array(
$data[$question[
"ID"]]))
528 $answers = array_intersect_key(
$data[$question[
"ID"]], $question[
"ANSWERS"]);
531 foreach(
$message[$question[
"ID"]] as
$id => $value)
533 $value = trim($value);
536 $answers[
$id] =
true;
540 if (!empty($answers))
547 foreach ($answers as
$id => $value)
549 $answer = $question[
"ANSWERS"][
$id];
550 switch ($answer[
"FIELD_TYPE"])
554 if (!$singleVal[$answer[
"FIELD_TYPE"]])
556 $singleVal[$answer[
"FIELD_TYPE"]] =
true;
574 $val = reset($answers);
576 key($answers) =>
$val
581 $fields[$question[
"ID"]] = $answers;
585 if (array_key_exists($question[
"ID"],
$message))
588 foreach (
$fields[$question[
"ID"]] as
$id => $value)
590 if (array_key_exists(
$id,
$message[$question[
"ID"]]))
594 if (empty(
$fields[$question[
"ID"]]))
596 unset(
$fields[$question[
"ID"]]);
601 if ($question[
'REQUIRED'] ===
'Y' && $question[
'ACTIVE'] ===
'Y' && !array_key_exists($question[
"ID"],
$fields))
603 $this->errorCollection->add(
array(
new Error(Loc::getMessage(
"VOTE_REQUIRED_MISSING"),
"QUESTION_".$questionId)));
607 $this->errorCollection->add(
array(
new Error(Loc::getMessage(
"USER_VOTE_EMPTY"),
"VOTE_".$this->vote->getId())));
614 $this->errorCollection->clear();
616 if (!$this->errorCollection->isEmpty())
620 $eventFields =
array(
621 "VOTE_ID" => $this->vote->getId(),
622 "VOTE_USER_ID" => $eventFields[
"VOTE_USER_ID"],
623 "DATE_VOTE" => (array_key_exists(
"DATE_VOTE", $eventFields) ? $eventFields[
"DATE_VOTE"] :
new \
Bitrix\
Main\
Type\
DateTime()),
624 "STAT_SESSION_ID" => $eventFields[
"STAT_SESSION_ID"],
625 "IP" => $eventFields[
"IP"],
626 "VALID" => $eventFields[
"VALID"] ?:
"Y",
627 "VISIBLE" => ($eventFields[
"VISIBLE"] ?:
"Y")
629 if (array_key_exists(
"EXTRAS", $ballot) && is_array($ballot[
"EXTRAS"]) && array_key_exists(
"VISIBLE", $ballot[
"EXTRAS"]))
630 $eventFields[
"VISIBLE"] = ($ballot[
"EXTRAS"][
"VISIBLE"] ===
"N" ?
"N" :
"Y");
633 $sqlAnswers =
array();
634 foreach (
$fields as $questionId => $fieldsAnswer)
636 foreach ($fieldsAnswer as $answerId => $value)
638 $sqlAnswers[$questionId][$answerId] =
array(
639 "ANSWER_ID" => $answerId,
640 "MESSAGE" => is_string($value)? mb_substr($value, 0, 2000) :
"");
649 $this->errorCollection->add(
array(
new Error(
"onBeforeVoting error",
"VOTE_".$eventFields[
"VOTE_ID"])));
654 if (!empty($sqlAnswers) && ($eventId = EventTable::add($eventFields)->
getId()) && $eventId > 0)
657 $answerIdsForCounter =
array();
658 foreach ($sqlAnswers as $questionId => $fieldsAnswer)
660 if (($eventQId = EventQuestionTable::add(
array(
"EVENT_ID" => $eventId,
"QUESTION_ID" => $questionId))->
getId()) && $eventQId > 0)
662 $ids[$questionId] = [
663 "EVENT_ID" => $eventQId,
666 foreach ($fieldsAnswer as $answerId =>
$res)
668 if (($eventAId = EventAnswerTable::add(
array(
669 "EVENT_QUESTION_ID" => $eventQId,
670 "ANSWER_ID" =>
$res[
"ANSWER_ID"],
674 $ids[$questionId][
"ANSWERS"][$answerId] = [
675 "EVENT_ID" => $eventAId,
676 "EVENT_QUESTION_ID" => $eventQId,
677 "ANSWER_ID" =>
$res[
"ANSWER_ID"],
678 "MESSAGE" =>
$res[
"MESSAGE"]
680 $answerIdsForCounter[] = $answerId;
683 if (empty($ids[$questionId]))
685 EventQuestionTable::delete($eventQId);
686 unset($ids[$questionId]);
701 "EVENT_ID" => $eventId,
702 "VOTE_ID" => $eventFields[
"VOTE_ID"],
703 "VOTE_USER_ID" => $eventFields[
"VOTE_USER_ID"],
704 "DATE_VOTE" => $eventFields[
"DATE_VOTE"],
705 "STAT_SESSION_ID" => $eventFields[
"SESS_SESSION_ID"] ??
null,
706 "IP" => $eventFields[
"IP"],
707 "VISIBLE" => $eventFields[
"VISIBLE"],
708 "VALID" => $eventFields[
"VALID"],
712 EventTable::delete($eventId);