/** * Get the singleton object * @return BP_Members_With_Avatar_Helper object */ public static function get_instance() { if (!isset(self::$instance)) { self::$instance = new self(); } return self::$instance; }
function get_game($seconds, $num_choices, $check_gravatars) { if (!is_user_logged_in()) { return new WP_Error('user-not-logged-in', 'You must be logged in to play the Do You Know game!'); } $game_start = get_user_meta(get_current_user_id(), '_dyk_game_start', true); $current_user = get_user_meta(get_current_user_id(), '_dyk_current_user', true); $answers = get_user_meta(get_current_user_id(), '_dyk_current_answers', true); $result = get_user_meta(get_current_user_id(), '_dyk_current_result', true); if ($result === '') { $result = null; } else { $result = (bool) $result; } $action = 'dyk_game_' . $game_start; // answer was submitted if ('POST' === $_SERVER['REQUEST_METHOD'] && isset($_POST['_dyk_answer']) && is_null($result) && wp_verify_nonce($_REQUEST['_wpnonce'], $action)) { $result = $answers[$_POST['_dyk_answer']] == $current_user ? '1' : '0'; add_user_meta(get_current_user_id(), '_dyk_current_result', $result, true); $result = (bool) $result; if ($result) { do_action('dyk_correct_answer'); } else { do_action('dyk_wrong_answer'); } } else { if (!$game_start || time() - $game_start > $seconds) { $game_start = time(); $current_user = null; $result = null; // set current user $current_user = BP_Members_With_Avatar_Helper::get_instance()->get_random_user_with_avatar(get_current_user_id(), $check_gravatars); if (!$current_user) { return new WP_Error('no-avatar', 'No other user with an avatar could be found! You need at least one user with an avatar apart from the currently logged in user.'); } $current_user = $current_user->ID; // set answers $answers = BP_Members_With_Avatar_Helper::get_instance()->get_random_users($num_choices - 1, array(get_current_user_id(), $current_user)); // set random correct position if (count($answers) < $num_choices - 1) { return new WP_Error('not-enough-users', sprintf("Not enough users to play the game! You need at least %s users.", $num_choices + 1)); } $correct = rand(0, $num_choices - 1); array_splice($answers, $correct, 0, $current_user); update_user_meta(get_current_user_id(), '_dyk_game_start', $game_start); delete_user_meta(get_current_user_id(), '_dyk_current_result'); update_user_meta(get_current_user_id(), '_dyk_current_user', $current_user); update_user_meta(get_current_user_id(), '_dyk_current_answers', $answers); } } return array('start' => $game_start, 'user' => $current_user, 'answers' => $answers, 'result' => $result, 'next' => $seconds - (time() - $game_start)); }