function advpoll_writein_merge_form_submit in Advanced Poll 5
Same name and namespace in other branches
- 6.3 advpoll.module \advpoll_writein_merge_form_submit()
- 6 advpoll.module \advpoll_writein_merge_form_submit()
- 6.2 advpoll.module \advpoll_writein_merge_form_submit()
File
- ./advpoll.module, line 1612
- Advanced Poll - a sophisticated polling module for voting, elections, and group decision-making.
Code
function advpoll_writein_merge_form_submit($form_id, $form_values) {
$raw_votes = db_query('SELECT * FROM {votingapi_vote} WHERE content_id = %d', $form_values['nid']);
$voters = array();
$affected_voters = array();
while ($vote = db_fetch_object($raw_votes)) {
$key = $vote->uid . '-' . $vote->hostname;
if (!isset($voters[$key])) {
$voters[$key] = array();
}
array_push($voters[$key], $vote);
if ($vote->tag == $form_values['source']) {
$affected_voters[$key] = count($voters[$key]) - 1;
}
}
foreach ($affected_voters as $key => $source_index) {
$voted_for_destination = FALSE;
foreach ($voters[$key] as $index => $vote) {
if ($vote->tag == $form_values['destination']) {
$voted_for_destination = TRUE;
break;
}
}
if ($voted_for_destination) {
db_query('DELETE FROM {votingapi_vote} WHERE vote_id = %d AND tag = %d', $voters[$key][$index]->vote_id, $form_values['source']);
}
else {
db_query('UPDATE {votingapi_vote} SET tag = %d WHERE vote_id = %d AND tag = %d', $form_values['destination'], $voters[$key][$index]->vote_id, $form_values['source']);
}
}
db_query('DELETE FROM {advpoll_choices} WHERE cid = %d', $form_values['source']);
votingapi_recalculate_results('advpoll', $form_values['nid']);
drupal_set_message(t('Write-in merged.'));
unset($_REQUEST['destination']);
drupal_goto('node/' . $form_values['nid'] . '/writeins');
}