Пример #1
0
    public function activation_hook($default)
    {
        ini_set('max_execution_time', 700);
        $current_options = get_option('yop_poll_options');
        $polls = self::yop_poll_get_polls_from_db();
        $answers = self::yop_poll_get_answers_from_db();
        $logs = self::yop_poll_get_logs_from_db();
        $bans = self::yop_poll_get_bans_from_db();
        $custom_fields = self::yop_poll_get_custom_fields_from_db();
        $custom_votes = self::yop_poll_get_custom_fields_votes_from_db();
        $metas = self::yop_poll_get_polls_meta_from_db();
        $answers_meta = self::yop_poll_get_answers_meta_from_db();
        $templates = self::yop_poll_get_templates_from_db();
        foreach ($templates as $template) {
            $template['before_vote_template'] = "[QUESTION_CONTAINER]" . $template['before_vote_template'];
            $template['before_vote_template'] = str_replace('%POLL-ANSWER-LABEL%', '%POLL-ANSWER-LABEL% [ANSWER_RESULT_CONTAINER]', $template['before_vote_template']);
            $template['before_vote_template'] = str_replace('%POLL-TOTAL-ANSWERS%', '%POLL-TOTAL-ANSWERS-LABEL%', $template['before_vote_template']);
            $template['before_vote_template'] = str_replace('%POLL-TOTAL-VOTES%', '%POLL-TOTAL-VOTES-LABEL%', $template['before_vote_template']);
            $template['after_vote_template'] = str_replace('%POLL-TOTAL-VOTES%', '%POLL-TOTAL-VOTES-LABEL%', $template['after_vote_template']);
            $template['after_vote_template'] = str_replace('%POLL-TOTAL-ANSWERS%', '%POLL-TOTAL-ANSWERS-LABEL%', $template['after_vote_template']);
            $template['after_end_date_template'] = str_replace('%POLL-TOTAL-ANSWERS%', '%POLL-TOTAL-ANSWERS-LABEL%', $template['after_end_date_template']);
            $template['after_end_date_template'] = str_replace('%POLL-TOTAL-VOTES%', '%POLL-TOTAL-VOTES-LABEL%', $template['after_end_date_template']);
            $template['before_vote_template'] = preg_replace('/%POLL-ANSWER-RESULT-BAR%/', '%POLL-ANSWER-RESULT-BAR%  [/ANSWER_RESULT_CONTAINER]', $template['before_vote_template'], 1);
            $find = '[/ANSWER_RESULT_CONTAINER]';
            $replace = '';
            //   $template['before_vote_template']= preg_replace(strrev("/$find/"),strrev($replace),strrev( $template['before_vote_template']),1);
            $template['after_vote_template'] = "[QUESTION_CONTAINER]" . $template['after_vote_template'];
            $template['after_end_date_template'] = "[QUESTION_CONTAINER]" . $template['after_end_date_template'];
            /*  if(strpos($template['before_vote_template'],"[CAPTCHA_CONTAINER]"))
                    $template['before_vote_template']=str_replace('[CAPTCHA_CONTAINER]','[/QUESTION_CONTAINER][CAPTCHA_CONTAINER]',$template['before_vote_template']);
                else{
                    $template['before_vote_template']=str_replace('<div id="yop-poll-vote-%POLL-ID%" class="yop-poll-footer">','[/QUESTION_CONTAINER]<div id="yop-poll-vote-%POLL-ID%" class="yop-poll-footer">',$template['before_vote_template']);
                } */
            $template['before_vote_template'] = $template['before_vote_template'] . '[/QUESTION_CONTAINER]';
            if (strpos($template['before_vote_template'], "%POLL-QUESTION%") && strpos($template['before_vote_template'], '%POLL-NAME%')) {
                $template['before_vote_template'] = str_replace('%POLL-QUESTION%', '', $template['before_vote_template']);
                $template['before_vote_template'] = str_replace('%POLL-NAME%', '%POLL-QUESTION%', $template['before_vote_template']);
            }
            if (strpos($template['after_vote_template'], "%POLL-QUESTION%") && strpos($template['after_vote_template'], '%POLL-NAME%')) {
                $template['after_vote_template'] = str_replace('%POLL-QUESTION%', '', $template['after_vote_template']);
                $template['after_vote_template'] = str_replace('%POLL-NAME%', '%POLL-QUESTION%', $template['after_vote_template']);
            }
            $template['after_vote_template'] = $template['after_vote_template'] . '[/QUESTION_CONTAINER]';
            $template['after_end_date_template'] = $template['after_end_date_template'] . '[/QUESTION_CONTAINER]';
            $template['js'] = <<<NOWDOC
function stripBorder_%POLL-ID%(object) {
\tobject.each(function() {
\t\tif( parseInt(jQuery(this).width() ) > 0) {
\t\t\tjQuery(this).width(
\t\t\t\tparseInt(
\t\t\t\t\tjQuery(this).width() ) -
\t\t\t\t\tparseInt(jQuery(this).css("border-left-width")) -
\t\t\t\t\tparseInt(jQuery(this).css("border-right-width"))
\t\t\t);
\t\t\t}
\t\telse {
\t\tjQuery(this).css("border-left-width", "0px");
\t\tjQuery(this).css("border-right-width", "0px");
\t\t}
\t});
}
function stripPadding_%POLL-ID%(object) {
\tobject.each(function() {
\t\tjQuery(this).width(
\t\tparseInt( jQuery(this).width() ) -
\t\tparseInt(jQuery(this).css("padding-left")) -
\t\tparseInt(jQuery(this).css("padding-left"))
\t\t);
\t});
}

function strip_results_%POLL-ID%() {
\tstripPadding_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop_poll_li_result-%POLL-ID%") );
\tstripBorder_%POLL-ID%(  jQuery("#yop-poll-container-%POLL-ID% .yop-poll-result-bar-%POLL-ID%") );
}

jQuery(document).ready(function(e) {
   jQuery('.yop-poll-forms').removeClass('yop-poll-forms-display');
\tif(typeof window.strip_results_%POLL-ID% == "function")
\t\tstrip_results_%POLL-ID%();
\tif(typeof window.tabulate_answers_%POLL-ID% == "function")
\t\ttabulate_answers_%POLL-ID%();
\tif(typeof window.tabulate_results_%POLL-ID% == "function")
\t\ttabulate_results_%POLL-ID%();



});

function equalWidth_%POLL-ID%(obj, cols, findWidest ) {

    findWidest  = typeof findWidest  !== "undefined" ? findWidest  : false;
    var quest=0;
    if ( findWidest ) {
        obj.each(function() {
            var thisWidth = jQuery(this).width();
            width = parseInt(thisWidth / cols);
            jQuery(this).width(width);
            jQuery(this).css("float", "left");
        });
    }
    else {
        var widest = 0;
        var count  = 0;
        var poz_each_question=0;

        obj.each(function() {

            count++;
            cols[quest][2]=(jQuery('#yop-poll-answers-%POLL-ID%-'+ cols[quest][3] +' li').length);
            var thisWidth = jQuery(this).width();
            if(thisWidth > widest) {
                widest = thisWidth;
            }
            if(count<cols[quest][2])
            { width = parseInt( %POLL-WIDTH% / cols[quest][0]);
             if(cols[quest][0]==1)
                        jQuery(".yop-poll-li-answer-%POLL-ID%-"+cols[quest][3]).css("width","100%");
             else
                         jQuery(".yop-poll-li-answer-%POLL-ID%-"+cols[quest][3]).width(width-20);
             jQuery(".yop-poll-li-answer-%POLL-ID%-"+cols[quest][3]).css("float", "left");
            }
            else
            {
                count=0;


                width = parseInt( %POLL-WIDTH% / cols[quest][0]);
                jQuery(".yop-poll-li-answer-%POLL-ID%-"+cols[quest][3]).width(width-20);
                jQuery(".yop-poll-li-answer-%POLL-ID%-"+cols[quest][3]).css("float", "left");
                quest++;
            }

        });
}
}

function equalWidth2_%POLL-ID%(obj, cols, findWidest ) {
    findWidest  = typeof findWidest  !== "undefined" ? findWidest  : false;
    var quest=0;

    if ( findWidest ) {
        obj.each(function() {
            var thisWidth = jQuery(this).width();
            width = parseInt(thisWidth / cols);
            jQuery(this).width(width);
            jQuery(this).css("float", "left");
        });
    }
    else {
        var widest = 0;
        var count  = 0;
        var poz_each_question=0;

        obj.each(function() {
            count++;
            cols[quest][2]=(jQuery('#yop-poll-answers-%POLL-ID%-'+ cols[quest][3] +' li').length);
            var thisWidth = jQuery(this).width();
            if(thisWidth > widest) {
                widest = thisWidth;
            }
            if(count<cols[quest][2])
            { width = parseInt( %POLL-WIDTH% / cols[quest][1]);
             jQuery(".yop-poll-li-result-%POLL-ID%-"+cols[quest][3]).width(width-20);
             jQuery(".yop-poll-li-result-%POLL-ID%-"+cols[quest][3]).css("float", "left");
            }
            else
            {
                count=0;


                width = parseInt( %POLL-WIDTH% / cols[quest][1]);
                jQuery(".yop-poll-li-result-%POLL-ID%-"+cols[quest][3]).width(width-20);
                jQuery(".yop-poll-li-result-%POLL-ID%-"+cols[quest][3]).css("float", "left");
                quest++;
            }

        });
}
}
function tabulate_answers_%POLL-ID%() {

\tequalWidth_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-li-answer-%POLL-ID%"), %ANSWERS-TABULATED-COLS% );
\t//equalWidth_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-li-answer-%POLL-ID% .yop-poll-results-bar-%POLL-ID% div "), %ANSWERS-TABULATED-COLS%, true );
}

function tabulate_results_%POLL-ID%() {
\tequalWidth2_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-li-result-%POLL-ID%"), %RESULTS-TABULATED-COLS% );
\t//equalWidth_%POLL-ID%( jQuery("#yop-poll-container-%POLL-ID% .yop-poll-li-result-%POLL-ID% .yop-poll-results-bar-%POLL-ID% div "), %RESULTS-TABULATED-COLS%, true );
\t}

jQuery(document).ready(function(){
\trunOnPollStateChange_%POLL-ID%();
});

function runOnPollStateChange_%POLL-ID%() {

};

NOWDOC;
            $template['js'] = addslashes($template['js']);
            $templates_ids[$template['id']] = self::insert_template_in_databease($template);
        }
        foreach ($polls as $poll) {
            foreach ($answers as $answer) {
                if ($answer['poll_id'] == $poll['id']) {
                    $answers_ordonate[$poll['id']][] = (array) $answer;
                }
                if ($answer['poll_id'] > $poll['id']) {
                    break;
                }
                foreach ($logs as $log) {
                    if ($log['poll_id'] == $poll['id'] && $log['answer_id'] == $answer['id']) {
                        $logs_ordonate[$poll['id']][] = (array) $log;
                        $logs_ordonate_details[$log['id']][] = $answer['answer'];
                    }
                }
                foreach ($answers_meta as $answer_meta) {
                    if ($answer_meta['yop_poll_answer_id'] == $answer['id']) {
                        $answer_meta_ordonate[$answer['id']][] = (array) $answer_meta;
                    }
                }
            }
            foreach ($bans as $ban) {
                if ($ban['poll_id'] == $poll['id']) {
                    $bans_ordonate[$poll['id']][] = (array) $ban;
                }
                if ($ban['poll_id'] > $poll['id']) {
                    break;
                }
            }
            foreach ($metas as $meta) {
                if ($meta['yop_poll_id'] == $poll['id']) {
                    $metas_ordonate[$poll['id']][] = (array) $meta;
                }
                if ($meta['yop_poll_id'] > $poll['id']) {
                    break;
                }
            }
            foreach ($custom_fields as $custom_field) {
                if ($custom_field['poll_id'] == $poll['id']) {
                    $custom_fields_ordonate[$poll['id']][] = (array) $custom_field;
                    if ($custom_field['poll_id'] > $poll['id']) {
                        break;
                    }
                    foreach ($custom_votes as $custom_vote) {
                        if ($custom_field['id'] == $custom_vote['custom_field_id']) {
                            $custom_votes_fields_ordonate[$custom_field['id']][] = (array) $custom_vote;
                        }
                    }
                }
            }
        }
        foreach ($polls as $poll) {
            $current_poll = new YOP_POLL_Poll_Model();
            $current_poll->poll_author = $poll['poll_author'];
            $current_poll->ID = $poll['id'];
            $current_poll->poll_title = $poll['name'];
            $current_poll->poll_name = $poll['name'];
            $current_poll->poll_date = $poll['date_added'];
            $current_poll->poll_modified = $poll['last_modified'];
            $current_poll->poll_status = $poll['status'];
            $current_poll->poll_type = "poll";
            $current_poll->poll_status = $poll['status'];
            $current_poll->email_notifications_body = '<p>A new vote was registered on %VOTE_DATE% for %POLL_NAME%</p>

                                                            <p>Vote Details:</p>

                [QUESTION]

                                                            <p><b>Question:</b> %QUESTION_TEXT%</p>

                                                            <p><b>Answers:</b> <br />

                                                            [ANSWERS]

                                                            %ANSWER_VALUE%

                                                            [/ANSWERS]

                                                            </p>

                                                            <p><b>Custom Fields:</b> <br />

                                                            [CUSTOM_FIELDS]

                                                            %CUSTOM_FIELD_NAME% - %CUSTOM_FIELD_VALUE%

                                                            [/CUSTOM_FIELDS]

                                                            </p>

                [/QUESTION]

                                                            <p><b>Vote ID:</b> <br />%VOTE_ID%</p>';
            if ($poll['end_date'] <= "2038-01-18 23:59:59") {
                $current_poll->poll_end_date = convert_date($poll['end_date'], 'd-m-Y H:i:s', 1);
            } else {
                $current_poll->poll_end_date = "01-01-2038 23:59:59";
            }
            if ($poll['start_date'] <= "2038-01-18 23:59:59") {
                $current_poll->poll_start_date = convert_date($poll['start_date'], 'd-m-Y H:i:s', 1);
            } else {
                $current_poll->poll_start_date = "01-01-2038 23:59:59";
            }
            $current_poll->poll_total_votes = $poll['total_votes'];
            $question = new YOP_POLL_Question_Model();
            $question->type = "text";
            $question->question = $poll['question'];
            $question->question_date = $current_poll->poll_date;
            $question->question_author = $current_poll->poll_author;
            $question->question_modified = $current_poll->poll_modified;
            $question->question_status = $current_poll->poll_status;
            $question->poll_order = 1;
            $i = 0;
            foreach ($answers_ordonate[$poll['id']] as $answer_ordonate) {
                if ($answer_ordonate['type'] == "other") {
                    $current_poll->allow_other_answers = 'yes';
                    $question->allow_other_answers = 'yes';
                }
            }
            $q[] = $question;
            // yop_poll_dump($current_poll);
            $current_poll->questions = $q;
            $current_poll->auto_generate_poll_page = "no";
            $current_poll_id = $current_poll->insert();
            $current_poll_id = $current_poll->ID;
            // yop_poll_dump($current_poll->save())
            $no_modif = 0;
            $no_modif2 = 0;
            $current_poll_meta = $current_options;
            if (isset($metas_ordonate[$poll['id']])) {
                $poll_option = maybe_unserialize($metas_ordonate[$poll['id']][0]['meta_value']);
                foreach ($current_options as $key => $value) {
                    if (isset($poll_option[$key])) {
                        if ($key == 'view_results_permissions') {
                            list($g1, $d) = explode('-', $poll_option[$key]);
                            if ($g1 == "quest") {
                                $g1 = "guest";
                            }
                            $current_poll_meta[$key] = array($g1, $d);
                            $no_modif = 1;
                        } else {
                            if ($key == 'vote_permisions') {
                                list($g1, $d) = explode('-', $poll_option['vote_permisions']);
                                if ($g1 == "quest") {
                                    $g1 = "guest";
                                }
                                $no_modif2 = 1;
                                $current_poll_meta[$key] = array($g1, $d);
                            } else {
                                $current_poll_meta[$key] = $poll_option[$key];
                            }
                        }
                    } else {
                        $current_poll_meta[$key] = $default[$key];
                    }
                }
            }
            $current_poll_meta['view_results'] = array($poll_option['view_results']);
            $current_poll_meta['sorting_results'] = $default['sorting_answers'];
            if (!isset($poll_option['view_results_link'])) {
                $current_poll_meta['view_results_link'] = "yes";
            } else {
                $current_poll_meta['view_results_link'] = $poll_option['view_results_link'];
            }
            if ($poll_option['view_results'] == 'custom-date') {
                $current_poll_meta['view_results_start_date'] = $poll_option['view_results_start_date'];
            }
            if (empty($current_poll_meta['view_results'][0])) {
                $current_poll_meta['view_results'] = array('after');
            }
            if ($no_modif == 0 || empty($current_poll_meta['view_results'])) {
                $current_poll_meta['view_results_permissions'] = array('guest', 'registered');
            }
            if ($no_modif2 == 0 || empty($current_poll_meta['vote_permisions'])) {
                $current_poll_meta['vote_permisions'] = array('guest', 'registered');
            }
            if ($poll_option['blocking_voters'] == 'cookie-ip') {
                $current_poll_meta['blocking_voters'] = array("cookie", 'ip');
            } else {
                if ($poll_option['blocking_voters'] == 'username') {
                    $current_poll_meta['blocking_voters'] = array("user_id");
                } else {
                    $current_poll_meta['blocking_voters'] = array('dont-block');
                }
            }
            $current_poll_meta['facebook_share_after_vote'] = "no";
            $current_poll_meta['show_google_share_button'] = "no";
            $current_poll_meta['facebook_show_comments_widget'] = "no";
            $current_poll_meta['facebook_share_description'] = __yop_poll('Just casted an YOP Poll vote on ') . get_bloginfo('name');
            if (isset($poll_option['show_in_archive'])) {
                $current_poll_meta['show_poll_in_archive'] = $poll_option['show_in_archive'];
            }
            if (isset($poll_option['schedule_reset_poll_date'])) {
                $current_poll_meta['schedule_reset_poll_date'] = $poll_option['schedule_reset_poll_date'];
            }
            if (isset($poll_option['template'])) {
                $current_poll_meta['template'] = $templates_ids[$poll_option['template']];
            } else {
                $current_poll_meta['template'] = 1;
            }
            if (isset($poll_option['widget_template'])) {
                $current_poll_meta['widget_template'] = $templates_ids[$poll_option['widget_template']];
            } else {
                $current_poll_meta['widget_template'] = 1;
            }
            if (isset($poll_option['widget_template']) && isset($poll_option['template']) && $poll_option['template'] != $poll_option['widget_template']) {
                $current_poll_meta['use_the_same_template_for_widget'] = "no";
            }
            if (isset($poll_option['view_total_answers_label'])) {
                $current_poll_meta['view_total_answers_label'] = $default['view_total_answers_label'];
            }
            if (isset($poll_option['answer_result_label'])) {
                $current_poll_meta['answer_result_label'] = $default['answer_result_label'];
            }
            if ($current_poll_meta['vote_permisions_anonymous'] == "no" && $current_poll_meta['vote_permisions_wordpress'] == "no") {
                $current_poll_meta['vote_permisions_anonymous'] = "yes";
            }
            update_yop_poll_question_meta($current_poll_id, 'options', $current_poll_meta);
            update_yop_poll_meta($current_poll_id, 'options', $current_poll_meta);
            if ($poll['show_in_archive'] == "yes") {
                self::save_poll_order($current_poll_id, $poll['archive_order']);
            }
            if ($default['sorting_answers'] == "votes") {
                $answers_ordonate[$poll['id']] = self::get_answers_order_by_votes($poll['id'], $default['sorting_answers_direction']);
            }
            if ($default['sorting_answers'] == "alphabetical") {
                $answers_ordonate[$poll['id']] = self::get_answers_order_by_alph($poll['id'], $default['sorting_answers_direction']);
            }
            foreach ($answers_ordonate[$poll['id']] as $answer_ordonate) {
                $ans = new YOP_POLL_Answer_Model();
                $ans->answer = $answer_ordonate['answer'];
                $ans->answer_author = $current_poll->poll_author;
                $ans->answer_date = $current_poll->poll_date;
                $ans->answer_modified = $poll['last_modified'];
                if ($answer_ordonate['type'] != "other") {
                    $ans->type = "text";
                } else {
                    $current_poll->allow_other_answers = 'yes';
                    $question->allow_other_answers = 'yes';
                    $ans->type = "other";
                }
                $ans->answer_status = $answer['status'];
                $ans->votes = $answer_ordonate['votes'];
                $ans->question_order = $i++;
                if ($answer_ordonate['type'] != "other") {
                    $answersa[] = $ans;
                    if (isset($answer_meta_ordonate[$answer_ordonate['id']])) {
                        $answer_option = maybe_unserialize($answer_meta_ordonate[$answer_ordonate['id']][0]['meta_value']);
                        $answer_options = $ans->options;
                        foreach ($ans->options as $key => &$value) {
                            if (isset($answer_option[$key])) {
                                $ans->{$key} = $answer_option[$key];
                            }
                        }
                        $ans->options = $answer_options;
                    }
                    $question->addAnswer($ans);
                    $question->save_answers();
                    $answersids[$answer_ordonate['id']] = $ans->ID;
                }
            }
            if (!empty($custom_fields_ordonate[$poll['id']])) {
                foreach ($custom_fields_ordonate[$poll['id']] as $custom_ordonate) {
                    $oldid = $custom_ordonate['id'];
                    //   $question                       = $current_poll->questions;
                    $custom_ordonate['question_id'] = $current_poll_id;
                    $custom_ordonate['poll_id'] = $current_poll_id;
                    $newid = insert_custom_field_in_db($custom_ordonate);
                    foreach ($custom_votes_fields_ordonate[$oldid] as $votes) {
                        $votes['custom_field_id'] = $newid;
                        $votes['question_id'] = $current_poll_id;
                        $votes['poll_id'] = $current_poll_id;
                        $votes['id'] = insert_votes_custom_in_db($votes);
                        $custom_field_vote[$poll['id']][] = $votes;
                    }
                }
            }
            if (!empty($logs_ordonate[$poll['id']])) {
                foreach ($logs_ordonate[$poll['id']] as $log_ordonate) {
                    $log['poll_id'] = $current_poll_id;
                    $log['vote_id'] = $log_ordonate['vote_id'];
                    $log['ip'] = $log_ordonate['ip'];
                    $log['user_id'] = $log_ordonate['user_id'];
                    $log['user_type'] = $log_ordonate['user_type'];
                    $log['vote_date'] = $log_ordonate['vote_date'];
                    $log['tr_id'] = $log_ordonate['tr_id'];
                    $vote_details[1]["q-" . $current_poll_id]['question'] = $poll['question'];
                    $vote_details[1]["q-" . $current_poll_id]['id'] = $current_poll_id;
                    $vote_details[1]["q-" . $current_poll_id]['a'][] = $answersids[$log_ordonate['answer_id']];
                    if ($log_ordonate['other_answer_value'] != "" && isset($log_ordonate['other_answer_value'])) {
                        $ans = new YOP_POLL_Answer_Model();
                        $ans->answer = $answer_ordonate['answer'];
                        $ans->answer_author = $current_poll->poll_author;
                        $ans->answer_date = $current_poll->poll_date;
                        $ans->answer_modified = $poll['last_modified'];
                        $ans->answer = $log_ordonate['other_answer_value'];
                        $ans->answer_status = 'active';
                        $ans->votes = 1;
                        $ans->type = 'other';
                        $ans->question_order = $i++;
                        $question->addAnswer($ans);
                        $question->save_answers();
                    }
                    if (!empty($custom_field_vote[$poll['id']])) {
                        foreach ($custom_field_vote[$poll['id']] as $vote) {
                            if ($vote['vote_id'] == $log_ordonate['vote_id']) {
                                $vote_details[1]["q-" . $current_poll_id]['cf'][] = $vote['id'];
                            }
                        }
                    }
                    foreach ($logs_ordonate_details[$log_ordonate['id']] as $a) {
                        $vote_details[1]["q-" . $current_poll_id]['answers'][] = $a;
                        $log['vote_details'] = json_encode($vote_details[1]);
                        $log['message'] = "Succes";
                        insert_result_in_db($log);
                        insert_log_in_db($log);
                        unset($vote_details[1]["q-" . $current_poll_id]['answers']);
                    }
                    unset($vote_details);
                }
            }
            if (!empty($bans_ordonate[$poll['id']])) {
                foreach ($bans_ordonate[$poll['id']] as $ban_ordonate) {
                    $ban = $ban_ordonate;
                    $ban['poll_id'] = $current_poll_id;
                    self::insert_ban_in_db($ban);
                }
            }
        }
    }
Пример #2
0
 public function register_vote($request)
 {
     global $current_user;
     $poll_id = $this->id;
     $unique_id = strip_tags(xss_clean($this->unique_id));
     $location = strip_tags(xss_clean($request['location']));
     $vote_id = uniqid('vote_id_');
     $vote_type = $request['vote_type'];
     $SuperCookie = strip_tags(xss_clean($request['supercookie']));
     $tr_id = strip_tags(xss_clean($request['yop_poll_tr_id']));
     $votes = 0;
     $user_id = 0;
     $user_type = 'default';
     $user_details = '';
     if (wp_verify_nonce($request['yop-poll-nonce-' . $poll_id . $unique_id], 'yop_poll-' . $this->ID . $unique_id . '-user-actions')) {
         switch ($vote_type) {
             default:
                 $user_id = $current_user->ID != null ? $current_user->ID : 0;
                 $user_type = 'default';
                 break;
             case 'wordpress':
                 $user_id = $current_user->ID;
                 $user_type = 'wordpress';
                 break;
             case 'anonymous':
                 $user_type = 'anonymous';
                 break;
         }
         $log_to_add = array('poll_id' => $this->ID, 'vote_id' => $vote_id, 'ip' => yop_poll_get_ip(), 'user_id' => $user_id, 'user_type' => $user_type, 'user_details' => json_encode($user_details), 'tr_id' => $tr_id);
     } else {
         $this->error = __yop_poll('Bad Request!');
         $log_to_add['message'] = __yop_poll('Bad request');
         insert_log_in_db($log_to_add);
         return false;
     }
     if (wp_verify_nonce($request['yop-poll-nonce-' . $this->ID . $unique_id], 'yop_poll-' . $this->ID . $unique_id . '-user-actions')) {
         $tr_id = $request['yop_poll_tr_id'];
         $super_perm = true;
         if (in_array("supercookie", $this->blocking_voters)) {
             $super_perm = $this->is_voted_supercookie($SuperCookie);
         }
         if ($super_perm == true) {
             $current_date = yop_poll_get_mysql_curent_date();
             if ($this->is_allowed_to_vote($vote_type)) {
                 if ($current_date >= convert_date($this->poll_start_date, 'Y-m-d H:i:s')) {
                     if ($current_date <= convert_date($this->poll_end_date, 'Y-m-d H:i:s')) {
                         if ('closed' == $this->status) {
                             $this->error = __yop_poll('This poll is closed!');
                             $log_to_add['message'] = __yop_poll('Poll Closed');
                             insert_log_in_db($log_to_add);
                             return false;
                         } else {
                             if (!$this->is_voted($vote_type, $facebook_user_details, $google_user_details, true, $SuperCookie)) {
                                 $voter = array();
                                 $voter['poll_id'] = $poll_id;
                                 $voter['user_id'] = $current_user->ID;
                                 $voter['user_type'] = $vote_type;
                                 if ($this->user_have_votes_to_vote($voter, $SuperCookie)) {
                                     $i = 1;
                                     $cookie = '';
                                     $log = array();
                                     foreach ($this->questions as &$question) {
                                         $answers = array();
                                         if (isset($request['yop_poll_answer'][$question->ID])) {
                                             if ('yes' == $question->allow_multiple_answers) {
                                                 if (count($request['yop_poll_answer'][$question->ID]) <= intval($question->allow_multiple_answers_number)) {
                                                     if (count($request['yop_poll_answer'][$question->ID]) >= intval($question->allow_multiple_answers_min_number)) {
                                                         $answers = array();
                                                         foreach ($request['yop_poll_answer'][$question->ID] as $answer) {
                                                             $new_answer = array();
                                                             $new_answer['answer_id'] = $answer;
                                                             $new_answer['type'] = 'default';
                                                             if ('other' == $answer) {
                                                                 $a = new YOP_POLL_Answer_Model();
                                                                 if (isset($request['yop_poll_other_answer'][$question->ID]) && '' != strip_tags(trim($request['yop_poll_other_answer'][$question->ID]))) {
                                                                     $a->type = 'other';
                                                                     $a->poll_id = $poll_id;
                                                                     $a->question_id = $question->ID;
                                                                     $a->answer = strip_tags(trim($request['yop_poll_other_answer'][$question->ID]));
                                                                     $a->answer_date = current_time('mysql');
                                                                     $a->answer_modified = current_time('mysql');
                                                                     $a->status = 'active';
                                                                     $a->question_order = $question->countanswers() + 1;
                                                                     $a->answer_author = $current_user->ID;
                                                                     $a->save();
                                                                     if (!$a->id) {
                                                                         $this->error = __yop_poll('Other answer for question ') . $i . __yop_poll(' could not be inserted!');
                                                                         $log_to_add['message'] = __yop_poll('Other answer for question ') . $i . __yop_poll(' could not be inserted');
                                                                         insert_log_in_db($log_to_add);
                                                                         return false;
                                                                     }
                                                                 } else {
                                                                     $this->error = __yop_poll('Other answer from question ') . $i . __yop_poll(' is empty');
                                                                     $log_to_add['message'] = __yop_poll('Other answer from question ') . $i . __yop_poll(' is empty');
                                                                     insert_log_in_db($log_to_add);
                                                                     return false;
                                                                 }
                                                                 $question->addAnswer($a);
                                                                 $new_answer['answer_id'] = $a->id;
                                                                 $new_answer['type'] = 'other';
                                                                 unset($a);
                                                             }
                                                             $new_answer['poll_id'] = $poll_id;
                                                             $new_answer['vote_id'] = $vote_id;
                                                             $new_answer['ip'] = yop_poll_get_ip();
                                                             $new_answer['user_id'] = $current_user->ID;
                                                             $new_answer['user_type'] = 'default';
                                                             if ($vote_type == 'anonymous' || $vote_type == 'wordpress') {
                                                                 $new_answer['user_type'] = $vote_type;
                                                             }
                                                             $new_answer['http_referer'] = $_SERVER['HTTP_REFERER'];
                                                             $new_answer['tr_id'] = $tr_id;
                                                             $new_answer['host'] = esc_attr(@gethostbyaddr(yop_poll_get_ip()));
                                                             $new_answer['other_answer_value'] = '';
                                                             $answers[] = $new_answer;
                                                         }
                                                     } else {
                                                         $this->error = __yop_poll("Too few answers selected for question ") . $i . __yop_poll("! Only more than ") . $question->allow_multiple_answers_min_number . __yop_poll(" answers allowed!");
                                                         $log_to_add['message'] = __yop_poll("Too few answers selected for question ") . $i;
                                                         insert_log_in_db($log_to_add);
                                                         return false;
                                                     }
                                                 } else {
                                                     $this->error = __yop_poll("Too many answers selected for question ") . $i . __yop_poll("! Only ") . $question->allow_multiple_answers_number . __yop_poll(" answers allowed!");
                                                     $log_to_add['message'] = __yop_poll("Too many answers selected for question ") . $i;
                                                     insert_log_in_db($log_to_add);
                                                     return false;
                                                 }
                                             } else {
                                                 $new_answer = array();
                                                 $new_answer['answer_id'] = $request['yop_poll_answer'][$question->ID];
                                                 $new_answer['type'] = 'default';
                                                 if ('other' == $request['yop_poll_answer'][$question->ID]) {
                                                     $a = new YOP_POLL_Answer_Model();
                                                     if (isset($request['yop_poll_other_answer'][$question->ID]) && '' != strip_tags(trim($request['yop_poll_other_answer'][$question->ID]))) {
                                                         $a->type = 'other';
                                                         $a->poll_id = $poll_id;
                                                         $a->question_id = $question->ID;
                                                         $a->answer = strip_tags(trim($request['yop_poll_other_answer'][$question->ID]));
                                                         $a->answer_date = current_time('mysql');
                                                         $a->question_order = $question->countanswers();
                                                         $a->answer_author = $current_user->ID;
                                                         $a->votes = 0;
                                                         $a->save();
                                                         if (!$a->id) {
                                                             $this->error = __yop_poll("Other answer for question ") . $i . __yop_poll(" could not be inserted!");
                                                             $log_to_add['message'] = __yop_poll("Other answer for question ") . $i . __yop_poll(" could not be inserted");
                                                             insert_log_in_db($log_to_add);
                                                             return false;
                                                         }
                                                     } else {
                                                         $this->error = __yop_poll("Other answer from question ") . $i . ' ' . __yop_poll('is empty');
                                                         $log_to_add['message'] = __yop_poll("Other answer from question ") . $i . ' ' . __yop_poll('empty');
                                                         insert_log_in_db($log_to_add);
                                                         return false;
                                                     }
                                                     $question->addAnswer($a);
                                                     $new_answer['answer_id'] = $a->id;
                                                     $new_answer['type'] = 'other';
                                                     unset($a);
                                                 }
                                                 $new_answer['poll_id'] = $poll_id;
                                                 $new_answer['vote_id'] = $vote_id;
                                                 $new_answer['ip'] = yop_poll_get_ip();
                                                 $new_answer['user_id'] = $current_user->ID;
                                                 $new_answer['user_type'] = 'default';
                                                 $new_answer['http_referer'] = $_SERVER['HTTP_REFERER'];
                                                 $new_answer['tr_id'] = $tr_id;
                                                 $new_answer['host'] = esc_attr(@gethostbyaddr(yop_poll_get_ip()));
                                                 $new_answer['other_answer_value'] = '';
                                                 $answers[] = $new_answer;
                                             }
                                             if (count($answers) > 0) {
                                                 $custom_fields = array();
                                                 $poll_custom_fields = $question->custom_fields;
                                                 if (count($poll_custom_fields) > 0) {
                                                     if (isset($request['yop_poll_customfield'][$question->ID])) {
                                                         foreach ($poll_custom_fields as $custom_field) {
                                                             if (isset($request['yop_poll_customfield'][$question->ID][$custom_field->ID])) {
                                                                 if ('' == trim(strip_tags($request['yop_poll_customfield'][$question->ID][$custom_field->ID])) && 'yes' == $custom_field->required) {
                                                                     $this->error = __yop_poll("Custom field ") . $custom_field->custom_field . __yop_poll(" from question ") . $i . ' ' . __yop_poll("is required") . "!";
                                                                     $log_to_add['message'] = __yop_poll("Custom field ") . $custom_field->custom_field . __yop_poll(" from question ") . $i . ' ' . __yop_poll("required");
                                                                     insert_log_in_db($log_to_add);
                                                                     return false;
                                                                 } else {
                                                                     if (trim(strip_tags($request['yop_poll_customfield'][$question->ID][$custom_field->ID])) != '') {
                                                                         $new_custom_field = array();
                                                                         $new_custom_field['poll_id'] = $poll_id;
                                                                         $new_custom_field['question_id'] = $question->ID;
                                                                         $new_custom_field['vote_id'] = $vote_id;
                                                                         $new_custom_field['custom_field_id'] = $custom_field->ID;
                                                                         $new_custom_field['user_id'] = $current_user->ID;
                                                                         $new_custom_field['user_type'] = 'default';
                                                                         if ($vote_type == 'wordpress' || $vote_type == 'anonymous') {
                                                                             $new_custom_field['user_type'] = $vote_type;
                                                                         }
                                                                         $new_custom_field['custom_field_value'] = strip_tags(trim($request['yop_poll_customfield'][$question->ID][$custom_field->ID]));
                                                                         $custom_fields[] = $new_custom_field;
                                                                     }
                                                                 }
                                                             } else {
                                                                 $this->error = __yop_poll("Custom field ") . '"' . $custom_field->custom_field . '"' . __yop_poll(" from question ") . $i . ' ' . __yop_poll("is missing ") . '!';
                                                                 $log_to_add['message'] = __yop_poll("Custom field ") . '"' . $custom_field->custom_field . '"' . __yop_poll(" from question ") . $i . ' ' . __yop_poll("missing");
                                                                 insert_log_in_db($log_to_add);
                                                                 return false;
                                                             }
                                                         }
                                                     } else {
                                                         $this->error = __yop_poll("Custom fields from question ") . $i . ' ' . __yop_poll("are missing") . '!';
                                                         $log_to_add['message'] = __yop_poll("Custom fields from question ") . $i . ' ' . __yop_poll("missing") . '!';
                                                         insert_log_in_db($log_to_add);
                                                         return false;
                                                     }
                                                 }
                                                 if ('yes' == $this->use_captcha) {
                                                     require_once YOP_POLL_INC . '/securimage.php';
                                                     $img = new Yop_Poll_Securimage();
                                                     $img->namespace = 'yop_poll_' . $poll_id . $unique_id;
                                                     if ($img->check($_REQUEST['yop_poll_captcha_input'][$poll_id])) {
                                                         $mail_notifications_answers[$question->ID] = array();
                                                         $add_to_log = $this->update_votes($question, $answers, $votes, $mail_notifications_answers[$question->ID], $facebook_user_details['id'], $google_user_details['id']);
                                                         $log["q-" . $question->ID]['question'] = $question->question;
                                                         $log["q-" . $question->ID]['a'] = $add_to_log['a'];
                                                         $log["q-" . $question->ID]['answers'] = $add_to_log['answers'];
                                                         $mail_notifications_answers[$question->ID] = trim($mail_notifications_answers[$question->ID], '<br>');
                                                         $mail_notifications_custom_fields[$question->ID] = '';
                                                         foreach ($custom_fields as $custom_field) {
                                                             if ('anonymous' == $vote_type) {
                                                                 $custom_field['user_id'] = 0;
                                                             }
                                                             $custom_field['tr_id'] = $tr_id;
                                                             self::insert_vote_custom_field_in_database($custom_field);
                                                             $cf = $question->getCustomFieldById($custom_field['custom_field_id']);
                                                             $mail_notifications_custom_fields[$question->ID][$cf->custom_field] = $custom_field['custom_field_value'];
                                                         }
                                                         if ('yes' == $this->number_of_votes_per_user) {
                                                             $this->success = str_replace('%USER-VOTES-LEFT%', intval($this->number_of_votes_per_user) - $this->get_voter_number_of_votes($voter), $poll_options['message_after_vote']);
                                                         } else {
                                                             $this->success = str_replace('%USER-VOTES-LEFT%', '', $this->message_after_vote);
                                                         }
                                                     } else {
                                                         $this->error = __yop_poll("Incorrect security code entered!");
                                                         $log_to_add['message'] = __yop_poll("Incorrect security code entered");
                                                         insert_log_in_db($log_to_add);
                                                         return false;
                                                     }
                                                 } else {
                                                     $mail_notifications_answers[$question->ID] = array();
                                                     $add_to_log = $this->update_votes($question, $answers, $votes, $mail_notifications_answers[$question->ID], $vote_type, $facebook_user_details['id'], $google_user_details['id']);
                                                     $log["q-" . $question->ID]['question'] = $question->question;
                                                     $log["q-" . $question->ID]['id'] = $question->ID;
                                                     $log["q-" . $question->ID]['a'] = $add_to_log['a'];
                                                     $log["q-" . $question->ID]['answers'] = $add_to_log['answers'];
                                                     $mail_notifications_custom_fields[$question->ID] = array();
                                                     $add_to_log = array();
                                                     foreach ($custom_fields as $custom_field) {
                                                         if ('google' == $vote_type) {
                                                             $custom_field['user_id'] = $google_user_details['id'];
                                                         }
                                                         if ('anonymous' == $vote_type) {
                                                             $custom_field['user_id'] = 0;
                                                         }
                                                         $custom_field['tr_id'] = $tr_id;
                                                         $cf_id = self::insert_vote_custom_field_in_database($custom_field);
                                                         $add_to_log[] = $cf_id;
                                                         $cf = $question->getCustomFieldById($custom_field['custom_field_id']);
                                                         $mail_notifications_custom_fields[$question->ID][$cf->custom_field] = $custom_field['custom_field_value'];
                                                     }
                                                     $log["q-" . $question->ID]['cf'] = $add_to_log;
                                                     if ('yes' == $this->number_of_votes_per_user) {
                                                         $this->success = str_replace('%USER-VOTES-LEFT%', intval($this->number_of_votes_per_user) - $this->get_voter_number_of_votes($voter), $this->message_after_vote);
                                                     } else {
                                                         $this->success = str_replace('%USER-VOTES-LEFT%', '', $this->message_after_vote);
                                                     }
                                                 }
                                             } else {
                                                 $this->error = __yop_poll("No vote registered!");
                                                 $log_to_add['message'] = __yop_poll("No vote registered");
                                                 insert_log_in_db($log_to_add);
                                                 return false;
                                             }
                                         } else {
                                             $this->error = __yop_poll("No answer selected for question ") . $i;
                                             $log_to_add['message'] = __yop_poll("No answer selected for question ") . $i;
                                             insert_log_in_db($log_to_add);
                                             return false;
                                         }
                                         $i++;
                                     }
                                 } else {
                                     $this->error = __yop_poll("You have run out of votes!");
                                     $log_to_add['message'] = __yop_poll("Run out of votes");
                                     insert_log_in_db($log_to_add);
                                     return false;
                                 }
                             } else {
                                 $this->error = __yop_poll("You Already voted!");
                                 $log_to_add['message'] = __yop_poll("Already Voted");
                                 insert_log_in_db($log_to_add);
                                 return false;
                             }
                         }
                     } else {
                         $this->error = __yop_poll("This poll is closed!");
                         $log_to_add['message'] = __yop_poll("Poll Closed");
                         insert_log_in_db($log_to_add);
                         return false;
                     }
                 } else {
                     $this->error = __yop_poll("You can vote once the poll starts!");
                     $log_to_add['message'] = __yop_poll("Poll not started");
                     insert_log_in_db($log_to_add);
                     return false;
                 }
             } else {
                 $this->error = __yop_poll("You are not allowed to vote!");
                 $log_to_add['message'] = __yop_poll("Not allowed to vote");
                 insert_log_in_db($log_to_add);
                 return false;
             }
         } else {
             $this->error = __yop_poll("You are not allowed to vote!");
             return false;
         }
     } else {
         $this->error = __yop_poll("Bad Request!");
         $log_to_add['message'] = __yop_poll("Bad request");
         insert_log_in_db($log_to_add);
         return false;
     }
     if ($this->send_email_notifications == "yes") {
         $this->sendMail($mail_notifications_answers, $mail_notifications_custom_fields, $vote_id);
     }
     $this->update_poll_total_votes(1);
     $log_to_add['message'] = __yop_poll('Success');
     $log_to_add['vote_details'] = json_encode($log);
     insert_log_in_db($log_to_add);
     $ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $log_to_add['ip']));
     $log_to_add['country'] = $ip_data->geoplugin_countryName;
     insert_result_in_db($log_to_add);
     $this->set_vote_cookie(json_encode($log), $vote_type, $facebook_user_details, $google_user_details);
     $this->vote = true;
     $this->poll_total_votes += 1;
     return do_shortcode($this->return_poll_html(array('tr_id' => $tr_id, 'location' => $location)));
 }