function survey_test($atts, $content = null)
{
    global $wpdb;
    global $survey_salt;
    //Empty the database and restart it.
    if (isset($_GET['restart'])) {
        //Truncate the created tables for this plugin
        $wpdb->query("TRUNCATE TABLE " . $wpdb->prefix . "survey");
        $wpdb->query("TRUNCATE TABLE " . $wpdb->prefix . "survey_questions");
        $wpdb->query("TRUNCATE TABLE " . $wpdb->prefix . "survey_answers");
        $wpdb->query("TRUNCATE TABLE " . $wpdb->prefix . "survey_users");
        $wpdb->query("TRUNCATE TABLE " . $wpdb->prefix . "survey_user_answers");
    }
    $survey1 = new survey(FALSE, "Survey 1");
    $question1 = $survey1->add_question(question::truefalse, "True/False: Order 1", -1, -1, 1);
    $question1->add_answer("TF Answer 1 DONT SHOW THIS!", 1);
    $question2 = $survey1->add_question(question::multichoice, "Multiple Choice: Order 2", -1, -1, 2);
    $question2->add_answer("MC Answer 1", 1);
    $question2->add_answer("MC Answer 2");
    $question2->add_answer("MC Answer 3", 3);
    $question3 = $survey1->add_question(question::dropdown, "Dropdown: Order 3", -1, -1, 3);
    $question3->add_answer("DD Answer 1");
    $question3->add_answer("DD Answer 2", 2);
    $question4 = $survey1->add_question(question::multiselect, "Multiple Select: Order 4", -1, -1, 1);
    $question4->add_answer("MS Answer 2", 2);
    $question4->add_answer("MS Answer 1", 1);
    $question4->add_answer("MS Answer 3", 3);
    $question5 = $survey1->add_question(question::shortanswer, "Short Answer: Order 6", -1, -1, 6);
    $question5->add_answer("SA Answer 1 DONT SHOW THIS!", 1);
    $question6 = $survey1->add_question(question::longanswer, "Long Answer: Order 5", -1, -1, 5);
    $question6->add_answer("LA Answer 1 DONT SHOW THIS!", 1);
    $question7 = $survey1->add_question(question::multichoiceother, "Multiple Choice Other: Order 7", -1, -1, 7);
    $question7->add_answer("MCO Answer 1");
    $question7->add_answer("MCO Answer 2");
    $question8 = new question(FALSE, question::multiselectother, "Multiple Select Other: Order 8", -1, -1, 8);
    $question8->add_answer("MSO Answer 1");
    $question8->add_answer("MSO Answer 2");
    $survey1->add_qobject($question8);
    //$survey1->output_survey();
    debug($survey1);
    //Empty the database and restart it.
    if (isset($_GET['restart'])) {
        $insert = $wpdb->insert($wpdb->prefix . 'survey_users', array('username' => 'tester', 'password' => sha1('tester' . $survey_salt, true), 'fullname' => 'Test User'), array('%s', '%s', '%s'));
        $id = $insert ? $wpdb->insert_id : FALSE;
        if ($id !== FALSE) {
            var_dump(bin2hex(sha1('tester' . $survey_salt, true)));
            var_dump(bin2hex($wpdb->get_var("SELECT password FROM {$wpdb->prefix}survey_users WHERE id={$id}")));
        } else {
            echo "Failed to insert!";
            var_dump(bin2hex(sha1('test' . $survey_salt, true)));
        }
        $post = array('menu_order' => 0, 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => get_current_user_id(), 'post_content' => "[survey-page id={$survey1->id}]", 'post_name' => 'test-survey-page', 'post_status' => 'publish', 'post_title' => 'Test Survey Page', 'post_type' => 'page');
        wp_insert_post($post, true);
    }
}
function survey_submit_question_ajax_callback()
{
    check_ajax_referer('survey_submit_question_nonce', 'security');
    //Make sure they're logged in with the appropriate permissions.
    if (!current_user_can('manage_options')) {
        wp_die(__('You do not have sufficient permissions to access this page.'));
    }
    //Set up the basic structure for the question array.
    $question = array('qtype' => '', 'qtext' => '', 'answers' => array());
    //This array will keep track of all of the answer ids being edited.
    $edit = array();
    //Fill in the array properly using the posted data.
    foreach ($_POST['question'] as $posted) {
        //If the name is answer then it's a brand new answer and not being edited.
        if ($posted['name'] == 'answer') {
            $question['answers'][] = $posted['value'];
        } elseif (strstr($posted['name'], '-answer') !== FALSE) {
            $answer_id = strstr($posted['name'], '-answer', TRUE);
            $question['answers'][$answer_id] = $posted['value'];
            $edit[] = $answer_id;
        } else {
            $question[$posted['name']] = $posted['value'];
        }
    }
    //If the question is being edited, then this will use the id of that question to create the qobject.
    if (isset($question['survey_edit'])) {
        $qobject = new question(intval($question['survey_edit']));
        $qobject->edit_question($question['qtext']);
        $qobject->edit_type($question['qtype']);
        $qobject->edit_dependency($question['depquestion'], $question['depanswer']);
    } else {
        $qobject = new question(FALSE, $question['qtype'], $question['qtext'], $question['depquestion'], $question['depanswer']);
    }
    switch ($question['qtype']) {
        case question::truefalse:
        case question::shortanswer:
        case question::longanswer:
            //These question types don't have answers.
            break;
        default:
            foreach ($question['answers'] as $answer_id => $answer) {
                //If the answer id is in the array, then it must be edited, otherwise it's a new answer.
                if (in_array($answer_id, $edit)) {
                    $qobject->edit_answer($answer_id, $answer);
                } else {
                    $qobject->add_answer($answer);
                }
            }
    }
    //Don't add a new question to the survey list if it's being edited.
    if (!isset($question['survey_edit'])) {
        $survey = new survey(intval($_POST['survey']));
        $survey->add_qobject($qobject);
    }
    echo "Success!";
    die;
    // this is required to return a proper result
}