/** * Pick winners. * @param int $num Number of winners to pick. */ function pick_winners($num = 1) { if (!is_numeric($num) || $num < 1) { return false; } if (!$this->data['_valid']) { return false; } $participants = cf_Participant::get_all($this->data['ID'], '', '', '', '', 'not_winner'); if (count($participants) < 1) { return; } $this->set_status('winners_picked'); // generate a big entry_list $entry_list = array(); $i = 0; foreach ($participants as $participant) { $entry_list[$i] = $participant->id; $i++; if (isset($participant->referral_to)) { $num_referrals = $participant->referral_to; $num_referrals = count($num_referrals); $entries_for_referral = 1; if (isset($this->data['cf_referral_entries']) && is_numeric($this->data['cf_referral_entries']) && $this->data['cf_referral_entries'] > 0) { $entries_for_referral = $this->data['cf_referral_entries']; } for ($x = 0; $x < $num_referrals * $entries_for_referral; $x++) { $entry_list[$i] = $participant->id; $i++; } } } $admin_email = get_option('admin_email'); // echo '<pre>';var_dump($entry_list);echo '</pre>'; // check for random.org quota $url = 'http://www.random.org/quota/?format=plain'; $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $url, CURLOPT_USERAGENT => $admin_email)); $resp = curl_exec($curl); curl_close($curl); // echo '<pre>';var_dump(intval($resp));echo '</pre>'; $min = 0; $max = count($entry_list) - 1; if (empty($resp) || intval($resp) <= 0) { $resp = range($min, $max); $result = shuffle($resp); if ($result) { $result = $resp; } else { die('Error generating random array.'); } } else { $url = 'http://www.random.org/sequences/?min=' . $min . '&max=' . $max . '&col=1&format=plain&rnd=new'; $curl = curl_init(); curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $url, CURLOPT_USERAGENT => $admin_email)); $resp = curl_exec($curl); curl_close($curl); if (empty($resp) || strpos($resp, 'Error:') !== false) { $resp = range($min, $max); $result = shuffle($resp); if ($result) { $result = $resp; } else { die('Error generating random array.'); } } else { $result = explode("\n", $resp); if (empty($result[count($result) - 1])) { unset($result[count($result) - 1]); } } } // echo '<pre>';var_dump($result);echo '</pre>'; $winners_num = $num; if ($winners_num > count($participants)) { $winners_num = count($participants); } // echo '<pre>';var_dump($winners_num);echo '</pre>'; $result_helper = 0; $winner_helper = 1; $winners = array(); while ($winner_helper <= $winners_num) { $tmp = $result[$result_helper]; $result_helper += 1; if (!in_array($entry_list[$tmp], $winners)) { $winners[$winner_helper] = $entry_list[$tmp]; $winner_helper += 1; } if ($result_helper > count($result) - 1) { break; } } // echo '<pre>';var_dump($winners);echo '</pre>'; foreach ($winners as $winner) { $participant = new cf_Participant($winner); $participant->set_status('winner'); } return true; }
/** * Processes email confirmation when double opt-in is set. * @param string $confirm_code */ static function process_optin($confirm_code) { if (empty($confirm_code)) { return false; } $participant = new cf_Participant($confirm_code, true); // get participant based on the confirmation code if (!$participant->_valid) { return false; } if ($participant->status != 'not_confirmed') { // check participant status, has not be not_confirmed or there is nothing to confirm return false; } $contest = new cf_Contest($participant->contest_id); // check if the contest participant is in, is valid if (!$contest->_valid) { return false; } if (isset($participant->tmp_referral)) { // get referring participant and credit him the referral $referral = new cf_Participant($participant->tmp_referral, true); if ($referral->_valid) { $referral->add_meta('referral_to', $participant->id); } $participant->del_meta('tmp_referral'); } $participant->set_status(''); // change the participant status // process stuff self::process_email($contest, $participant); self::process_integration($contest, $participant); self::process_cookie($contest, $participant); }
/** * Init method, called when accessing the page. Handles processing of participant and contest $_POST and $_GET requests. */ function init() { $contest = ''; if (isset($_GET['contest'])) { $contest = $_GET['contest']; } if (isset($_GET['export'])) { cf_Table_Participants::export_csv($contest); } if (isset($_GET['togglevalid'])) { $participant = new cf_Participant($_GET['togglevalid']); if ($participant->_valid) { if ($participant->status == 'not_valid') { $participant->set_status(''); } else { if ($participant->status != 'not_confirmed') { $participant->set_status('not_valid'); } } } $url = 'admin.php?page=' . self::page_id; if (isset($_GET['contest'])) { $url .= '&contest=' . $_GET['contest']; } wp_safe_redirect(admin_url($url)); die; } if (isset($_GET['del'])) { $participant = new cf_Participant($_GET['del']); if ($participant->_valid) { $participant->delete(); } $url = 'admin.php?page=' . self::page_id; if (isset($_GET['contest'])) { $url .= '&contest=' . $_GET['contest']; } wp_safe_redirect(admin_url($url)); die; } if (isset($_GET['contest'])) { $contest = new cf_Contest($_GET['contest']); if ($contest->_valid != true) { wp_safe_redirect(admin_url('admin.php?page=' . cf_Page_Participants::page_id)); die; } if (isset($_POST['resetcontest'])) { if ($contest->cf_status == 'winners_picked') { $contest->set_status('active'); $contest->clear_winners(); } if (isset($_GET['redirect']) && $_GET['redirect'] == 'contest') { wp_safe_redirect(admin_url('admin.php?page=' . cf_Page_Contest::page_id . '&contest=' . $contest->ID . '&cf_page=dashboard')); } else { wp_safe_redirect(admin_url('admin.php?page=' . self::page_id . '&contest=' . $contest->ID)); } die; } if (isset($_POST['setexpired'])) { if ($contest->cf_status == 'expired') { $contest->set_status('active'); } else { if ($contest->cf_status == 'active' || $contest->cf_status == '') { $contest->set_status('expired'); } } if (isset($_GET['redirect']) && $_GET['redirect'] == 'contest') { wp_safe_redirect(admin_url('admin.php?page=' . cf_Page_Contest::page_id . '&contest=' . $contest->ID . '&cf_page=dashboard')); } else { wp_safe_redirect(admin_url('admin.php?page=' . self::page_id . '&contest=' . $contest->ID)); } die; } if (isset($_POST['pickwinners'])) { $winners_num = 1; if (isset($contest->cf_winners_num) && is_numeric($contest->cf_winners_num) && $contest->cf_winners_num > 0) { $winners_num = $contest->cf_winners_num; } $current_winners = $contest->get_current_winner_num(); $pick_num = intval($winners_num) - intval($current_winners); if ($pick_num > 0) { $contest->pick_winners($pick_num); } if (isset($_GET['redirect']) && $_GET['redirect'] == 'contest') { wp_safe_redirect(admin_url('admin.php?page=' . cf_Page_Contest::page_id . '&contest=' . $contest->ID . '&cf_page=dashboard')); } else { wp_safe_redirect(admin_url('admin.php?page=' . self::page_id . '&contest=' . $contest->ID)); } die; } if (isset($_POST['clearwinners'])) { $contest->clear_winners(); if (isset($_GET['redirect']) && $_GET['redirect'] == 'contest') { wp_safe_redirect(admin_url('admin.php?page=' . cf_Page_Contest::page_id . '&contest=' . $contest->ID . '&cf_page=dashboard')); } else { wp_safe_redirect(admin_url('admin.php?page=' . self::page_id . '&contest=' . $contest->ID)); } die; } if (isset($_POST['pickwinner'])) { $winners_num = 1; if (isset($contest->cf_winners_num) && is_numeric($contest->cf_winners_num) && $contest->cf_winners_num > 0) { $winners_num = $contest->cf_winners_num; } if ($contest->get_current_winner_num() < $winners_num) { $participant = new cf_Participant($_POST['pickwinner']); if ($participant->_valid) { $participant->set_status('winner'); $contest->set_status('winners_picked'); } } if (isset($_GET['redirect']) && $_GET['redirect'] == 'contest') { wp_safe_redirect(admin_url('admin.php?page=' . cf_Page_Contest::page_id . '&contest=' . $contest->ID . '&cf_page=dashboard')); } else { wp_safe_redirect(admin_url('admin.php?page=' . self::page_id . '&contest=' . $contest->ID)); } die; } if (isset($_POST['removewinner'])) { $participant = new cf_Participant($_POST['removewinner']); if ($participant->_valid) { if (substr($participant->status, 0, 6) == 'winner') { $participant->set_status(''); } } if (isset($_GET['redirect']) && $_GET['redirect'] == 'contest') { wp_safe_redirect(admin_url('admin.php?page=' . cf_Page_Contest::page_id . '&contest=' . $contest->ID . '&cf_page=dashboard')); } else { wp_safe_redirect(admin_url('admin.php?page=' . self::page_id . '&contest=' . $contest->ID)); } die; } } add_action('admin_footer', array(&$this, 'list_scripts')); }