function wplc_draw_chat_area($cid)
{
    global $wpdb;
    global $wplc_tblname_chats;
    $results = $wpdb->get_results("\n        SELECT *\n        FROM {$wplc_tblname_chats}\n        WHERE `id` = '{$cid}'\n        LIMIT 1\n        ");
    ?>
    <style>

        .wplc-clear-float-message{
            clear: both;
        }


    </style>
    <?php 
    foreach ($results as $result) {
        $user_data = maybe_unserialize($result->ip);
        $user_ip = $user_data['ip'];
        $browser = wplc_return_browser_string($user_data['user_agent']);
        $browser_image = wplc_return_browser_image($browser, "16");
        global $wplc_basic_plugin_url;
        if ($result->status == 1) {
            $status = __("Previous", "wplivechat");
        } else {
            $status = __("Active", "wplivechat");
        }
        if ($user_ip == "") {
            $user_ip = __('IP Address not recorded', 'wplivechat');
        } else {
            $user_ip = "<a href='http://www.ip-adress.com/ip_tracer/" . $user_ip . "' title='" . __('Whois for', 'wplivechat') . " " . $user_ip . "'>" . $user_ip . "</a>";
        }
        echo "<h2>{$status} " . __('Chat with', 'wplivechat') . " " . $result->name . "</h2>";
        echo "<style>#adminmenuwrap { display:none; } #adminmenuback { display:none; } #wpadminbar { display:none; } #wpfooter { display:none; } .update-nag { display:none; }</style>";
        echo "<div class=\"end_chat_div\"><a href=\"javascript:void(0);\" class=\"wplc_admin_close_chat button\" id=\"wplc_admin_close_chat\">" . __("End chat", "wplivechat") . "</a></div>";
        echo "<div id='admin_chat_box'>";
        echo "<div class='admin_chat_box'><div class='admin_chat_box_inner' id='admin_chat_box_area_" . $result->id . "'>" . wplc_return_chat_messages($cid) . "</div><div class='admin_chat_box_inner_bottom'>" . wplc_return_chat_response_box($cid) . "</div></div>";
        echo "<div class='admin_visitor_info'>";
        do_action("wplc_hook_admin_visitor_info_display_before", $cid);
        echo "  <div style='float:left; width:100px;'><img src=\"//www.gravatar.com/avatar/" . md5($result->email) . "\" class=\"admin_chat_img\" /></div>";
        echo "  <div style='float:left;'>";
        echo "      <div class='admin_visitor_info_box1'>";
        echo "          <span class='admin_chat_name'>" . $result->name . "</span>";
        echo "          <span class='admin_chat_email'>" . $result->email . "</span>";
        echo "      </div>";
        echo "  </div>";
        echo "  <div class='admin_visitor_advanced_info'>";
        echo "      <strong>" . __("Site Info", "wplivechat") . "</strong>";
        echo "      <hr />";
        echo "      <span class='part1'>" . __("Chat initiated on:", "wplivechat") . "</span> <span class='part2'>" . $result->url . "</span>";
        echo "  </div>";
        echo "  <div class='admin_visitor_advanced_info'>";
        echo "      <strong>" . __("Advanced Info", "wplivechat") . "</strong>";
        echo "      <hr />";
        echo "      <span class='part1'>" . __("Browser:", "wplivechat") . "</span><span class='part2'> {$browser} <img src='" . $wplc_basic_plugin_url . "/images/{$browser_image}' alt='{$browser}' title='{$browser}' /><br />";
        echo "      <span class='part1'>" . __("IP Address:", "wplivechat") . "</span><span class='part2'> " . $user_ip;
        echo "  </div>";
        echo "  <div id=\"wplc_sound_update\"></div>";
        do_action("wplc_hook_admin_visitor_info_display_after", $cid);
        echo "</div>";
        if ($result->status != 1) {
            echo "<div class='admin_chat_quick_controls'>";
            echo "  <p style=\"text-align:left; font-size:11px;\">" . __('Press ENTER to send your message', 'wplivechat') . "</p>";
            echo "  " . __("Assign Quick Response", "wplivechat") . " <select name='wplc_macros_select' class='wplc_macros_select' disabled><option>" . __('Select', 'wplivechat') . "</option></select> <a href='http://wp-livechat.com/purchase-pro/?utm_source=plugin&utm_medium=link&utm_campaign=quick_resposnes' title='" . __('Add Quick Responses to your Live Chat', 'wplivechat') . "' target='_BLANK'>" . __("Pro version only", "wplivechat") . "</a>";
            echo "  </div>";
            echo "</div>";
            //echo wplc_return_admin_chat_javascript($_GET['cid']);
        }
    }
}
예제 #2
0
                             wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 5, $_POST['wplcsession']);
                         } else {
                             if ($new_status == 9) {
                                 // user closed chat without inputting or starting a chat
                                 $array['check'] = true;
                             } else {
                                 if ($new_status == 0) {
                                     // no answer from admin
                                     $array['data'] = __('There is No Answer. Please Try Again Later', 'wplivechat');
                                     $array['check'] = true;
                                 } else {
                                     if ($new_status == 10) {
                                         // minimized active chat
                                         $array['check'] = true;
                                         if ($_POST['status'] == 5) {
                                             $messages = wplc_return_chat_messages(sanitize_text_field($_POST['cid']));
                                             if ($messages) {
                                                 $array['data'] = $messages;
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
 if ($array['check'] == true) {
function wplc_pro_draw_chat_area($cid)
{
    global $wpdb;
    global $wplc_tblname_chats;
    $results = $wpdb->get_results("\n        SELECT *\n        FROM {$wplc_tblname_chats}\n        WHERE `id` = '{$cid}'\n        LIMIT 1\n        ");
    foreach ($results as $result) {
        $status = "";
        if ($result->status == 1 || $result->status == 8) {
            $status = "Previous";
        } else {
            if ($result->status == 3) {
                $status = "Active";
            } else {
                if ($result->status == 6) {
                    $status = "Awaiting";
                }
            }
        }
        ?>
        <style>

            .wplc-clear-float-message{
                clear: both;
            }

        </style>
        <?php 
        $user_data = maybe_unserialize($result->ip);
        if (is_array($user_data)) {
            $user_ip = $user_data['ip'];
            $browser = wplc_return_browser_string($user_data['user_agent']);
            $browser_image = wplc_return_browser_image($browser, "16");
        } else {
            $user_ip = $user_data;
            $browser = __("Unknown", "wplivechat");
            $browser_image = wplc_return_browser_image($browser, "16");
        }
        if ($user_ip == "") {
            $user_ip = __('IP Address not recorded', 'wplivechat');
        } else {
            $user_ip = "<a href='http://www.ip-adress.com/ip_tracer/" . $user_ip . "' title='" . __('Whois for', 'wplivechat') . " " . $user_ip . "'>" . $user_ip . "</a>";
        }
        global $wplc_basic_plugin_url;
        echo "<h2>{$status} Chat with " . $result->name . "</h2>";
        echo "<style>#adminmenuwrap { display:none; } #adminmenuback { display:none; } #wpadminbar { display:none; } #wpfooter { display:none; } .update-nag { display:none; }</style>";
        echo "<div class=\"end_chat_div\"><a href=\"javascript:void(0);\" class=\"wplc_admin_close_chat button\" id=\"wplc_admin_close_chat\">" . __("End chat", "wplivechat") . "</a></div>";
        echo "<div id='admin_chat_box'>";
        if ($result->status == 6) {
            echo "<strong>" . __("Attempting to open the chat window... Please be patient.", "wplivechat") . "</strong>";
            return;
        }
        if ($result->status != 6) {
            echo "<div class='admin_chat_box'>";
            echo "  <div class='admin_chat_box_inner' id='admin_chat_box_area_" . $result->id . "'>" . wplc_return_chat_messages($cid) . "</div>";
            if ($result->status == 3) {
                echo "  <div class='admin_chat_box_inner_bottom'>" . wplc_return_chat_response_box($cid) . "</div>";
            }
            echo "</div>";
            echo "<div class='admin_visitor_info'>";
            echo "  <div style='float:left; width:100px;'><img src=\"http://www.gravatar.com/avatar/" . md5($result->email) . "\" class=\"admin_chat_img\" /></div>";
            echo "  <div style='float:left;'>";
            echo "      <div class='admin_visitor_info_box1'>";
            echo "          <span class='admin_chat_name'>" . $result->name . "</span>";
            echo "          <span class='admin_chat_email'>" . $result->email . "</span>";
            echo "      </div>";
            echo "  </div>";
            echo "<div class='admin_visitor_advanced_info'>";
            echo "      <strong>" . __("Site Info", "wplivechat") . "</strong>";
            echo "      <hr />";
            echo "      <span class='part1'>" . __("Chat initiated on:", "wplivechat") . "</span> <span class='part2'>" . $result->url . "</span>";
            echo "</div>";
            echo "<div class='admin_visitor_advanced_info'>";
            echo "      <strong>" . __("Advanced Info", "wplivechat") . "</strong>";
            echo "      <hr />";
            echo "      <span class='part1'>" . __("Browser:", "wplivechat") . "</span><span class='part2'> {$browser} <img src='" . $wplc_basic_plugin_url . "/images/{$browser_image}' alt='{$browser}' title='{$browser}' /><br />";
            echo "      <span class='part1'>" . __("IP Address:", "wplivechat") . "</span><span class='part2'> " . $user_ip;
            echo "</div>";
            echo "  <div id=\"wplc_sound_update\"></div>";
            echo "</div>";
        }
        if ($result->status == 3) {
            echo "<div class='admin_chat_quick_controls'>";
            echo "  <p style=\"text-align:left; font-size:11px;\">Press ENTER to send your message</p>";
            echo wplc_return_macros();
            echo "  </div>";
            echo "</div>";
        }
        echo "</div>";
    }
}
예제 #4
0
function wplc_init_ajax_callback()
{
    @ob_start();
    $check = check_ajax_referer('wplc', 'security');
    if ($check == 1) {
        $wplc_advanced_settings = get_option("wplc_advanced_settings");
        if (!$wplc_advanced_settings) {
            $wplc_delay_between_updates = 500000;
            $wplc_delay_between_loops = 500000;
            $wplc_iterations = 55;
        } else {
            if (isset($wplc_advanced_settings['wplc_delay_between_updates'])) {
                $wplc_delay_between_updates = intval($wplc_advanced_settings['wplc_delay_between_updates']);
            } else {
                $wplc_delay_between_updates = 500000;
            }
            if (isset($wplc_advanced_settings['wplc_delay_between_loops'])) {
                $wplc_delay_between_loops = intval($wplc_advanced_settings['wplc_delay_between_loops']);
            } else {
                $wplc_delay_between_loops = 500000;
            }
            if (isset($wplc_advanced_settings['wplc_iterations'])) {
                $wplc_iterations = intval($wplc_advanced_settings['wplc_iterations']);
            } else {
                $wplc_iterations = 55;
            }
            if ($wplc_iterations < 10) {
                $wplc_iterations = 10;
            }
            if ($wplc_iterations > 200) {
                $wplc_iterations = 200;
            }
            if ($wplc_delay_between_updates < 250000) {
                $wplc_delay_between_updates = 250000;
            }
            if ($wplc_delay_between_updates > 1000000) {
                $wplc_delay_between_updates = 1000000;
            }
            if ($wplc_delay_between_loops < 250000) {
                $wplc_delay_between_loops = 250000;
            }
            if ($wplc_delay_between_loops > 1000000) {
                $wplc_delay_between_loops = 1000000;
            }
        }
        $iterations = $wplc_iterations;
        /* time in microseconds between updating the user on the page within the DB  (lower number = higher resource usage) */
        define('WPLC_DELAY_BETWEEN_UPDATES', $wplc_delay_between_updates);
        /* time in microseconds between long poll loop (lower number = higher resource usage) */
        define('WPLC_DELAY_BETWEEN_LOOPS', $wplc_delay_between_loops);
        /* this needs to take into account the previous constants so that we dont run out of time, which in turn returns a 503 error */
        define('WPLC_TIMEOUT', (WPLC_DELAY_BETWEEN_UPDATES + WPLC_DELAY_BETWEEN_LOOPS) * $iterations / 1000000);
        global $wpdb;
        global $wplc_tblname_chats;
        global $wplc_tblname_msgs;
        /* we're using PHP 'sleep' which may lock other requests until our script wakes up. Call this function to ensure that other requests can run without waiting for us to finish */
        session_write_close();
        if ($_POST['action'] == "wplc_get_chat_box") {
            echo wplc_output_box_5100();
        }
        if ($_POST['action'] == 'wplc_admin_long_poll') {
            // header("HTTP/1.0 500"); //Simulate 500 error
            // header("HTTP/1.0 404"); //Simulate 404 error
            // die();
            if (defined('WPLC_TIMEOUT')) {
                @set_time_limit(WPLC_TIMEOUT);
            } else {
                @set_time_limit(120);
            }
            //sleep(6);
            $i = 1;
            $wplc_current_user = get_current_user_id();
            /* If user is either an agent or an admin, access the page. */
            if (!get_user_meta($wplc_current_user, 'wplc_ma_agent', true)) {
                $array['error'] = 1;
                echo json_encode($array);
                exit;
            }
            while ($i <= $iterations) {
                // update chats if they have timed out every 15 iterations
                if ($i % 15 == 0) {
                    wplc_update_chat_statuses();
                }
                if ($_POST['wplc_update_admin_chat_table'] == 'false') {
                    /* this is a new load of the page, return false so we can force a send of the new visitor data */
                    $old_chat_data = false;
                } else {
                    $old_chat_data = stripslashes($_POST['wplc_update_admin_chat_table']);
                }
                $pending = wplc_check_pending_chats();
                $new_chat_data = wplc_list_chats_new($_POST);
                if ($new_chat_data == "false") {
                    $new_chat_data = false;
                }
                if ($new_chat_data !== $old_chat_data) {
                    $array['old_chat_data'] = $old_chat_data;
                    $array['wplc_update_admin_chat_table'] = $new_chat_data;
                    $array['pending'] = $pending;
                    $array['action'] = "wplc_update_chat_list";
                }
                if (isset($array)) {
                    echo json_encode($array);
                    break;
                }
                @ob_end_flush();
                if (defined('WPLC_DELAY_BETWEEN_LOOPS')) {
                    usleep(WPLC_DELAY_BETWEEN_LOOPS);
                } else {
                    usleep(500000);
                }
                $i++;
            }
        }
        if ($_POST['action'] == "wplc_admin_long_poll_chat") {
            if (defined('WPLC_TIMEOUT')) {
                @set_time_limit(WPLC_TIMEOUT);
            } else {
                @set_time_limit(120);
            }
            $i = 1;
            $array = array();
            while ($i <= $iterations) {
                $array = apply_filters("wplc_filter_admin_long_poll_chat_loop_iteration", $array, $_POST, $i);
                if ($array) {
                    echo json_encode($array);
                    break;
                }
                @ob_end_flush();
                if (defined('WPLC_DELAY_BETWEEN_LOOPS')) {
                    usleep(WPLC_DELAY_BETWEEN_LOOPS);
                } else {
                    usleep(500000);
                }
                $i++;
            }
        }
        if ($_POST['action'] == "wplc_admin_accept_chat") {
            wplc_admin_accept_chat(sanitize_text_field($_POST['cid']));
        }
        if ($_POST['action'] == "wplc_admin_close_chat") {
            $chat_id = sanitize_text_field($_POST['cid']);
            wplc_change_chat_status($chat_id, 1);
            echo 'done';
        }
        if ($_POST['action'] == "wplc_admin_send_msg") {
            $chat_id = sanitize_text_field($_POST['cid']);
            $chat_msg = sanitize_text_field($_POST['msg']);
            $wplc_rec_msg = wplc_record_chat_msg("2", $chat_id, $chat_msg);
            if ($wplc_rec_msg) {
                echo 'sent';
            } else {
                echo "There was an error sending your chat message. Please contact support";
            }
        }
        //User Ajax
        if ($_POST['action'] == 'wplc_call_to_server_visitor') {
            if (defined('WPLC_TIMEOUT')) {
                @set_time_limit(WPLC_TIMEOUT);
            } else {
                @set_time_limit(120);
            }
            $i = 1;
            $array = array("check" => false);
            $array['debug'] = "";
            while ($i <= $iterations) {
                if ($_POST['cid'] == null || $_POST['cid'] == "" || $_POST['cid'] == "null" || $_POST['cid'] == 0) {
                    //                echo 1;
                    if (isset($_POST['wplc_name']) && $_POST['wplc_name'] !== '') {
                        $user = sanitize_text_field($_POST['wplc_name']);
                    } else {
                        $user = "******";
                    }
                    if (isset($_POST['wplc_email']) && $_POST['wplc_email'] !== '') {
                        $email = sanitize_text_field($_POST['wplc_email']);
                    } else {
                        $email = "no email set";
                    }
                    if (isset($_POST['wplc_is_mobile']) && ($_POST['wplc_is_mobile'] === 'true' || $_POST['wplc_is_mobile'] === true)) {
                        $is_mobile = true;
                    } else {
                        $is_mobile = false;
                    }
                    $cid = wplc_log_user_on_page($user, $email, sanitize_text_field($_POST['wplcsession']), $is_mobile);
                    $array['cid'] = $cid;
                    $array['status'] = wplc_return_chat_status($cid);
                    $array['wplc_name'] = $user;
                    $array['wplc_email'] = $email;
                    $array['check'] = true;
                } else {
                    //                echo 2;
                    $new_status = wplc_return_chat_status(sanitize_text_field($_POST['cid']));
                    $array['wplc_name'] = sanitize_text_field($_POST['wplc_name']);
                    $array['wplc_email'] = sanitize_text_field($_POST['wplc_email']);
                    $array['cid'] = sanitize_text_field($_POST['cid']);
                    $array = apply_filters("wplc_filter_user_long_poll_chat_loop_iteration", $array, $_POST, $i);
                    if ($new_status == $_POST['status']) {
                        // if status matches do the following
                        if ($_POST['status'] != 2) {
                            /* check if session_variable is different? if yes then stop this script completely. */
                            if (isset($_POST['wplcsession']) && $_POST['wplcsession'] != '' && $i > 1) {
                                $wplc_session_variable = sanitize_text_field($_POST['wplcsession']);
                                $current_session_variable = wplc_return_chat_session_variable(sanitize_text_field($_POST['cid']));
                                if ($current_session_variable != "" && $current_session_variable != $wplc_session_variable) {
                                    /* stop this script */
                                    $array['status'] = 11;
                                    echo json_encode($array);
                                    die;
                                }
                            }
                            if ($i == 1) {
                                wplc_update_user_on_page(sanitize_text_field($_POST['cid']), sanitize_text_field($_POST['status']), sanitize_text_field($_POST['wplcsession']));
                            }
                        }
                        if ($_POST['status'] == 0) {
                            // browsing - user tried to chat but admin didn't answer so turn back to browsing
                            wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 5, sanitize_text_field($_POST['wplcsession']));
                            $array['status'] = 5;
                            $array['check'] = true;
                        } else {
                            if ($_POST['status'] == 3) {
                                //wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 3);
                                $messages = wplc_return_user_chat_messages(sanitize_text_field($_POST['cid']));
                                if ($messages) {
                                    wplc_mark_as_read_user_chat_messages(sanitize_text_field($_POST['cid']));
                                    $array['status'] = 3;
                                    $array['data'] = $messages;
                                    $array['check'] = true;
                                }
                            }
                        }
                        /* check if this is part of the first run */
                        if (isset($_POST['first_run']) && sanitize_text_field($_POST['first_run']) == 1) {
                            /* if yes, then send data now and dont wait for all iterations to complete */
                            if (!isset($array['status'])) {
                                $array['status'] = $new_status;
                            }
                            $array['check'] = true;
                        } else {
                            if (isset($_POST['short_poll']) && sanitize_text_field($_POST['short_poll']) == "true") {
                                /* if yes, then send data now and dont wait for all iterations to complete */
                                if (!isset($array['status'])) {
                                    $array['status'] = $new_status;
                                }
                                $array['check'] = true;
                            }
                        }
                    } else {
                        // statuses do not match
                        $array['debug'] = $array['debug'] . " " . "Doesnt match {$new_status} " . $_POST['status'];
                        $array['status'] = $new_status;
                        if ($new_status == 1) {
                            // completed
                            wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 8, sanitize_text_field($_POST['wplcsession']));
                            $array['check'] = true;
                            $array['status'] = 8;
                            $array['data'] = __("Admin has closed and ended the chat", "wplivechat");
                        } else {
                            if ($new_status == 2) {
                                // pending
                                $array['check'] = true;
                                $array['wplc_name'] = wplc_return_chat_name(sanitize_text_field($_POST['cid']));
                                $array['wplc_email'] = wplc_return_chat_email(sanitize_text_field($_POST['cid']));
                            } else {
                                if ($new_status == 3) {
                                    // active
                                    $array['data'] = null;
                                    $array['check'] = true;
                                    if ($_POST['status'] == 5) {
                                        $messages = wplc_return_chat_messages(sanitize_text_field($_POST['cid']));
                                        if ($messages) {
                                            $array['data'] = $messages;
                                        }
                                    }
                                } else {
                                    if ($new_status == 7) {
                                        // timed out
                                        wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 5, sanitize_text_field($_POST['wplcsession']));
                                    } else {
                                        if ($new_status == 9) {
                                            // user closed chat without inputting or starting a chat
                                            $array['check'] = true;
                                        } else {
                                            if ($new_status == 0) {
                                                // no answer from admin
                                                $array['data'] = __('There is No Answer. Please Try Again Later', 'wplivechat');
                                                $array['check'] = true;
                                                @do_action("wplc_hook_missed_chat", array("cid" => $_POST['cid'], "name" => $_POST['wplc_name'], "email" => $_POST['wplc_email']));
                                            } else {
                                                if ($new_status == 10) {
                                                    // minimized active chat
                                                    $array['check'] = true;
                                                    if ($_POST['status'] == 5) {
                                                        $messages = wplc_return_chat_messages(sanitize_text_field($_POST['cid']));
                                                        if ($messages) {
                                                            $array['data'] = $messages;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        /* check if this is part of the first run */
                        if (isset($_POST['first_run']) && sanitize_text_field($_POST['first_run']) == "1") {
                            /* if yes, then send data now and dont wait for all iterations to complete */
                            if (!isset($array['status'])) {
                                $array['status'] = $new_status;
                            }
                            $array['check'] = true;
                        } else {
                            if (isset($_POST['short_poll']) && sanitize_text_field($_POST['short_poll']) == "true") {
                                /* if yes, then send data now and dont wait for all iterations to complete */
                                if (!isset($array['status'])) {
                                    $array['status'] = $new_status;
                                }
                                $array['check'] = true;
                            }
                        }
                        $array = apply_filters("wplc_filter_wplc_call_to_server_visitor_new_status_check", $array);
                    }
                }
                if ($array['check'] == true) {
                    echo json_encode($array);
                    break;
                }
                $i++;
                if (defined('WPLC_DELAY_BETWEEN_LOOPS')) {
                    usleep(WPLC_DELAY_BETWEEN_LOOPS);
                } else {
                    usleep(500000);
                }
                @ob_end_flush();
            }
        }
        /*  */
        if ($_POST['action'] == "wplc_user_close_chat") {
            if ($_POST['status'] == 5) {
                wplc_change_chat_status(sanitize_text_field($_POST['cid']), 9);
            } else {
                if ($_POST['status'] == 3) {
                    wplc_change_chat_status(sanitize_text_field($_POST['cid']), 8);
                }
            }
        }
        if ($_POST['action'] == "wplc_user_minimize_chat") {
            $chat_id = sanitize_text_field($_POST['cid']);
            wplc_change_chat_status(sanitize_text_field($_POST['cid']), 10);
        }
        if ($_POST['action'] == "wplc_user_maximize_chat") {
            $chat_id = sanitize_text_field($_POST['cid']);
            wplc_change_chat_status(sanitize_text_field($_POST['cid']), 3);
        }
        if ($_POST['action'] == "wplc_user_send_msg") {
            $chat_id = sanitize_text_field($_POST['cid']);
            $chat_msg = sanitize_text_field($_POST['msg']);
            $wplc_rec_msg = wplc_record_chat_msg("1", $chat_id, $chat_msg);
            if ($wplc_rec_msg) {
                echo 'sent';
            } else {
                echo "There was an error sending your chat message. Please contact support";
            }
        }
        if ($_POST['action'] == "wplc_start_chat") {
            if (isset($_POST['cid'])) {
                if ($_POST['name'] && $_POST['email']) {
                    echo wplc_user_initiate_chat(sanitize_text_field($_POST['name']), sanitize_email($_POST['email']), sanitize_text_field($_POST['cid']), sanitize_text_field($_POST['wplcsession']));
                    // echo the chat session id
                } else {
                    echo "error2";
                }
            } else {
                if ($_POST['name'] && $_POST['email']) {
                    echo wplc_user_initiate_chat(sanitize_text_field($_POST['name']), sanitize_email($_POST['email']), null, sanitize_text_field($_POST['wplcsession']));
                    // echo the chat session id
                } else {
                    echo "error2";
                }
            }
        }
    }
    die;
}
function wplc_draw_chat_area($cid)
{
    global $wpdb;
    global $wplc_tblname_chats;
    $results = $wpdb->get_results("\r\n        SELECT *\r\n        FROM {$wplc_tblname_chats}\r\n        WHERE `id` = '{$cid}'\r\n        LIMIT 1\r\n        ");
    if ($results) {
    } else {
        $results[0] = null;
    }
    /* if chat ID doesnt exist, create the variable anyway to avoid an error. Hopefully the Chat ID exists on the server..! */
    $result = apply_filters("wplc_filter_chat_area_data", $results[0], $cid);
    ?>
    <style>

        .wplc-clear-float-message{
            clear: both;
        }


    </style>
    <?php 
    $user_data = maybe_unserialize($result->ip);
    $user_ip = $user_data['ip'];
    $browser = wplc_return_browser_string($user_data['user_agent']);
    $browser_image = wplc_return_browser_image($browser, "16");
    global $wplc_basic_plugin_url;
    if ($result->status == 1) {
        $status = __("Previous", "wplivechat");
    } else {
        $status = __("Active", "wplivechat");
    }
    if ($user_ip == "") {
        $user_ip = __('IP Address not recorded', 'wplivechat');
    } else {
        $user_ip = "<a href='http://www.ip-adress.com/ip_tracer/" . $user_ip . "' title='" . __('Whois for', 'wplivechat') . " " . $user_ip . "' target='_BLANK'>" . $user_ip . "</a>";
    }
    echo "<h2>{$status} " . __('Chat with', 'wplivechat') . " " . $result->name . "</h2>";
    echo "<style>#adminmenuwrap { display:none; } #adminmenuback { display:none; } #wpadminbar { display:none; } #wpfooter { display:none; } .update-nag { display:none; }</style>";
    echo "<div class=\"end_chat_div\"><a href=\"javascript:void(0);\" class=\"wplc_admin_close_chat button\" id=\"wplc_admin_close_chat\">" . __("End chat", "wplivechat") . "</a></div>";
    echo "<div id='admin_chat_box'>";
    $result->continue = true;
    do_action("wplc_hook_wplc_draw_chat_area", $result);
    if (!$result->continue) {
        return;
    }
    echo "<div class='admin_chat_box'><div class='admin_chat_box_inner' id='admin_chat_box_area_" . $result->id . "'>" . wplc_return_chat_messages($cid) . "</div><div class='admin_chat_box_inner_bottom'>" . wplc_return_chat_response_box($cid) . "</div></div>";
    echo "<div class='admin_visitor_info'>";
    do_action("wplc_hook_admin_visitor_info_display_before", $cid);
    echo "  <div style='float:left; width:100px;'><img src=\"//www.gravatar.com/avatar/" . md5($result->email) . "\" class=\"admin_chat_img\" /></div>";
    echo "  <div style='float:left;'>";
    echo "      <div class='admin_visitor_info_box1'>";
    echo "          <span class='admin_chat_name'>" . $result->name . "</span>";
    echo "          <span class='admin_chat_email'>" . $result->email . "</span>";
    echo "      </div>";
    echo "  </div>";
    echo "  <div class='admin_visitor_advanced_info'>";
    echo "      <strong>" . __("Site Info", "wplivechat") . "</strong>";
    echo "      <hr />";
    echo "      <span class='part1'>" . __("Chat initiated on:", "wplivechat") . "</span> <span class='part2'>" . $result->url . "</span>";
    echo "  </div>";
    echo "  <div class='admin_visitor_advanced_info'>";
    echo "      <strong>" . __("Advanced Info", "wplivechat") . "</strong>";
    echo "      <hr />";
    echo "      <span class='part1'>" . __("Browser:", "wplivechat") . "</span><span class='part2'> {$browser} <img src='" . $wplc_basic_plugin_url . "/images/{$browser_image}' alt='{$browser}' title='{$browser}' /><br />";
    echo "      <span class='part1'>" . __("IP Address:", "wplivechat") . "</span><span class='part2'> " . $user_ip;
    echo "  </div>";
    echo "  <div id=\"wplc_sound_update\"></div>";
    echo "<hr />";
    echo "<h3>" . __("Add-ons", "wplivechat") . "</h3>";
    do_action("wplc_hook_admin_visitor_info_display_after", $cid);
    echo "<a href='" . admin_url('admin.php?page=wplivechat-menu-extensions-page') . "' class='button button-primary' target='_BLANK'>" . __("Get more add-ons", "wplivechat") . "</a>";
    echo "</div>";
    if ($result->status != 1) {
        do_action("wplc_hook_admin_below_chat_box", $result);
        //echo wplc_return_admin_chat_javascript($_GET['cid']);
    }
}
예제 #6
0
파일: ajax.php 프로젝트: venturepact/blog
                         wplc_update_user_on_page($_POST['cid'], 5, $_POST['wplcsession']);
                     } else {
                         if ($new_status == 9) {
                             // user closed chat without inputting or starting a chat
                             $array['check'] = true;
                         } else {
                             if ($new_status == 0) {
                                 // no answer from admin
                                 $array['data'] = __('There is No Answer. Please Try Again Later', 'wplivechat');
                                 $array['check'] = true;
                             } else {
                                 if ($new_status == 10) {
                                     // minimized active chat
                                     $array['check'] = true;
                                     if ($_POST['status'] == 5) {
                                         $messages = wplc_return_chat_messages($_POST['cid']);
                                         if ($messages) {
                                             $array['data'] = $messages;
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
 if ($array['check'] == true) {
     echo json_encode($array);
예제 #7
0
function wplc_init_ajax_callback_pro()
{
    $check = check_ajax_referer('wplc', 'security');
    $iterations = 55;
    /* time in microseconds between updating the user on the page within the DB  (lower number = higher resource usage) */
    define('WPLC_DELAY_BETWEEN_UPDATES', 500000);
    /* time in microseconds between long poll loop (lower number = higher resource usage) */
    define('WPLC_DELAY_BETWEEN_LOOPS', 500000);
    /* this needs to take into account the previous constants so that we dont run out of time, which in turn returns a 503 error */
    define('WPLC_TIMEOUT', (WPLC_DELAY_BETWEEN_UPDATES + WPLC_DELAY_BETWEEN_LOOPS) * $iterations / 1000000);
    global $wpdb;
    global $wplc_tblname_chats;
    global $wplc_tblname_msgs;
    $wplc_tblname_chats = $wpdb->prefix . "wplc_chat_sessions";
    $wplc_tblname_msgs = $wpdb->prefix . "wplc_chat_msgs";
    /* we're using PHP 'sleep' which may lock other requests until our script wakes up. Call this function to ensure that other requests can run without waiting for us to finish */
    session_write_close();
    if ($check == 1) {
        if ($_POST['action'] == "wplc_get_chat_box") {
            if (function_exists("wplc_output_box_ajax")) {
                echo wplc_output_box_ajax();
                die;
            } else {
                echo "x";
            }
        }
        if ($_POST['action'] == 'wplc_submit_chat_experience_rating') {
            if (function_exists('wplc_submit_chat_experience_rating')) {
                wplc_submit_chat_experience_rating($_POST['rating'], $_POST['cid']);
                die;
            }
        }
        if ($_POST['action'] == 'wplc_record_chat_experience_message') {
            if (function_exists('wplc_record_chat_experience_message')) {
                wplc_record_chat_experience_message($_POST['message'], $_POST['cid']);
                die;
            }
        }
        if ($_POST['action'] == 'wplc_admin_long_poll') {
            //wplc_error_log("[".__LINE__."] NEW ADMIN LONG POLL LOOP");
            if (defined('WPLC_TIMEOUT')) {
                set_time_limit(WPLC_TIMEOUT);
            } else {
                set_time_limit(120);
            }
            $i = 1;
            while ($i <= $iterations) {
                //wplc_error_log("[".__LINE__."] ADMIN LOOP $i");
                session_write_close();
                // update chats if they have timed out every x iterations
                if ($i % 15 == 0) {
                    wplc_update_chat_statuses();
                }
                //$new_visitor_data = wplc_list_visitors($_POST['wplc_agent_id']);
                $new_chat_data = wplc_list_chats_pro_new($_POST['wplc_agent_id']);
                if ($new_chat_data == "false") {
                    $new_chat_data = false;
                }
                if ($_POST['wplc_update_admin_chat_table'] == 'false') {
                    $old_chat_data = false;
                } else {
                    $old_chat_data = stripslashes($_POST['wplc_update_admin_chat_table']);
                }
                $pending = wplc_check_pending_chats();
                //                $new_chat_data = wplc_list_chats_pro($_POST['wplc_agent_id']);
                if ($new_chat_data !== $old_chat_data) {
                    $array['wplc_update_admin_chat_table'] = $new_chat_data;
                    $array['pending'] = $pending;
                    $array['action'] = "wplc_update_chat_list";
                }
                if (isset($array)) {
                    echo json_encode($array);
                    die;
                }
                @ob_end_flush();
                if (defined('WPLC_DELAY_BETWEEN_LOOPS')) {
                    usleep(WPLC_DELAY_BETWEEN_LOOPS);
                } else {
                    usleep(500000);
                }
                $i++;
            }
            die;
        }
        if ($_POST['action'] == "wplc_admin_long_poll_chat") {
            if (defined('WPLC_TIMEOUT')) {
                set_time_limit(WPLC_TIMEOUT);
            } else {
                set_time_limit(120);
            }
            //wplc_error_log("[".__LINE__."] NEW ADMIN CHAT LOOP");
            $i = 1;
            $array = array();
            while ($i <= $iterations) {
                //wplc_error_log("[".__LINE__."] ADMIN LP CHAT LOOP $i");
                session_write_close();
                if (isset($_POST['action_2']) && $_POST['action_2'] == "wplc_long_poll_check_user_opened_chat") {
                    //wplc_error_log("[".__LINE__."] ".$_POST['action_2']." ADMIN LP CHAT LOOP $i");
                    $chat_status = wplc_return_chat_status(sanitize_text_field($_POST['cid']));
                    if ($chat_status == 3) {
                        //wplc_error_log("[".__LINE__."] wplc_user_open_chat");
                        $array['action'] = "wplc_user_open_chat";
                    }
                } else {
                    $new_chat_status = wplc_return_chat_status(sanitize_text_field($_POST['cid']));
                    if ($new_chat_status != $_POST['chat_status']) {
                        //wplc_error_log("[".__LINE__."] wplc_update_chat_status");
                        $array['chat_status'] = $new_chat_status;
                        $array['action'] = "wplc_update_chat_status";
                    }
                    $new_chat_message = wplc_return_admin_chat_messages($_POST['cid']);
                    if ($new_chat_message) {
                        //wplc_error_log("[".__LINE__."] wplc_new_chat_message");
                        $array['chat_message'] = $new_chat_message;
                        $array['action'] = "wplc_new_chat_message";
                    }
                }
                if (wplc_ma_check_if_chat_answered_by_other_agent($_POST['cid'], $_POST['aid']) === true) {
                    //wplc_error_log("[".__LINE__."] wplc_ma_agant_already_answered");
                    $array['action'] = "wplc_ma_agant_already_answered";
                }
                if ($array) {
                    echo json_encode($array);
                    die;
                }
                @ob_end_flush();
                if (defined('WPLC_DELAY_BETWEEN_LOOPS')) {
                    usleep(WPLC_DELAY_BETWEEN_LOOPS);
                } else {
                    usleep(500000);
                }
                $i++;
            }
            die;
        }
        if ($_POST['action'] == "wplc_admin_accept_chat") {
            //wplc_error_log("[".__LINE__."] wplc_admin_accept_chat");
            wplc_admin_accept_chat(sanitize_text_field($_POST['cid']));
            die;
        }
        if ($_POST['action'] == "wplc_admin_close_chat") {
            //wplc_error_log("[".__LINE__."] wplc_admin_close_chat");
            $chat_id = sanitize_text_field($_POST['cid']);
            wplc_change_chat_status($chat_id, 1);
            if (function_exists('wplc_ce_record_chat_end')) {
                wplc_ce_record_chat_end($chat_id);
            }
            echo 'done';
            die;
        }
        if ($_POST['action'] == "wplc_admin_send_msg") {
            //wplc_error_log("[".__LINE__."] wplc_admin_send_msg");
            $chat_id = sanitize_text_field($_POST['cid']);
            $chat_msg = sanitize_text_field($_POST['msg']);
            $wplc_rec_msg = wplc_record_chat_msg_pro("2", $chat_id, $chat_msg);
            if ($wplc_rec_msg) {
                echo 'sent';
            } else {
                echo "There was an error sending your chat message. Please contact support";
            }
            die;
        }
        //User Ajax
        if ($_POST['action'] == 'wplc_call_to_server_visitor') {
            //wplc_error_log("[".__LINE__."] NEW USER REQUEST");
            if (defined('WPLC_TIMEOUT')) {
                set_time_limit(WPLC_TIMEOUT);
            } else {
                set_time_limit(120);
            }
            $i = 1;
            $array = array("check" => false);
            /* must record the session ID */
            while ($i <= $iterations) {
                session_write_close();
                //wplc_error_log("[".__LINE__."] USER LOOP $i");
                if ($_POST['cid'] == null || $_POST['cid'] == "null" || $_POST['cid'] == "") {
                    //wplc_error_log("[".__LINE__."] CID = null - log user on page");
                    $user = __("Guest", "wplivechat");
                    $email = "no email set";
                    $cid = wplc_log_user_on_page($user, $email, $_POST['wplcsession']);
                    $array['cid'] = $cid;
                    $array['status'] = wplc_return_chat_status($cid);
                    $array['wplc_name'] = $user;
                    $array['wplc_email'] = $email;
                    $array['check'] = true;
                } else {
                    //wplc_error_log("[".__LINE__."] CID != null - update user on page BEGIN");
                    $new_status = wplc_return_chat_status($_POST['cid']);
                    $array['wplc_name'] = sanitize_text_field($_POST['wplc_name']);
                    $array['wplc_email'] = sanitize_email($_POST['wplc_email']);
                    $array['cid'] = sanitize_text_field($_POST['cid']);
                    if ($new_status == $_POST['status']) {
                        // if status matches do the following
                        if ($_POST['status'] != 2) {
                            /* check if session_variable is different? if yes then stop this script completely. */
                            if (isset($_POST['wplcsession']) && $_POST['wplcsession'] != '' && $i > 1) {
                                $wplc_session_variable = $_POST['wplcsession'];
                                $current_session_variable = wplc_return_chat_session_variable($_POST['cid']);
                                //wplc_error_log("[".$_POST['wplcsession']."] [".__LINE__."] [*$i] Checking against session variable ".$current_session_variable);
                                if ($current_session_variable != "" && $current_session_variable != $wplc_session_variable) {
                                    /* stop this script */
                                    //wplc_error_log("[".$_POST['wplcsession']."] [".__LINE__."] [*$i] TERMINATING   STATUS 11");
                                    $array['status'] = 11;
                                    echo json_encode($array);
                                    die;
                                }
                            }
                            if ($i == 1) {
                                //wplc_error_log("[".$_POST['wplcsession']."] [".__LINE__."] [*$i] Updating user on page ".$_SERVER['HTTP_REFERER']);
                                wplc_update_user_on_page(sanitize_text_field($_POST['cid']), sanitize_text_field($_POST['status']), $_POST['wplcsession']);
                            }
                            //if (defined('WPLC_DELAY_BETWEEN_UPDATES')) { sleep(WPLC_DELAY_BETWEEN_UPDATES); } else { sleep(3); }
                        }
                        if ($_POST['status'] == 0) {
                            // browsing - user tried to chat but admin didn't answer so turn back to browsing
                            //wplc_error_log("[".__LINE__."] Status 0 - Updating user on page Status 0");
                            wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 5, $_POST['wplcsession']);
                            $array['status'] = 5;
                            $array['check'] = true;
                        } else {
                            if ($_POST['status'] == 3) {
                                //wplc_update_user_on_page($_POST['cid'], 3);
                                //wplc_error_log("[".__LINE__."] Status 3");
                                $messages = wplc_return_user_chat_messages(sanitize_text_field($_POST['cid']));
                                if ($messages) {
                                    wplc_mark_as_read_user_chat_messages(sanitize_text_field($_POST['cid']));
                                    $array['status'] = 3;
                                    $array['data'] = $messages;
                                    $array['check'] = true;
                                }
                            }
                        }
                        /* check if this is part of the first run */
                        if (isset($_POST['first_run']) && sanitize_text_field($_POST['first_run']) == 1) {
                            /* if yes, then send data now and dont wait for all iterations to complete */
                            if (!isset($array['status'])) {
                                $array['status'] = $new_status;
                            }
                            $array['check'] = true;
                        } else {
                            if (isset($_POST['short_poll']) && sanitize_text_field($_POST['short_poll']) == "true") {
                                /* if yes, then send data now and dont wait for all iterations to complete */
                                if (!isset($array['status'])) {
                                    $array['status'] = $new_status;
                                }
                                $array['check'] = true;
                            }
                        }
                    } else {
                        // statuses do not match
                        //wplc_error_log("[".__LINE__."] STATUS CHANGE   [OLD: ".$new_status."]  [NEW: ".$_POST['status']."]");
                        $array['status'] = $new_status;
                        if ($new_status == 1) {
                            // completed
                            //wplc_error_log("[".__LINE__."] Status 1 - Updating user on page");
                            wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 8, $_POST['wplcsession']);
                            $array['check'] = true;
                            $array['status'] = 8;
                            $array['data'] = __("Admin has closed and ended the chat", "wplivechat");
                        } else {
                            if ($new_status == 2) {
                                // pending
                                //wplc_error_log("[".__LINE__."] Status 2 - returning name and email");
                                $array['check'] = true;
                                $array['wplc_name'] = wplc_return_chat_name(sanitize_text_field($_POST['cid']));
                                $array['wplc_email'] = wplc_return_chat_email(sanitize_text_field($_POST['cid']));
                            } else {
                                if ($new_status == 3) {
                                    // active
                                    //wplc_error_log("[".__LINE__."] Status 3 - returning name and email");
                                    $array['data'] = null;
                                    $array['check'] = true;
                                    if ($_POST['status'] == 5) {
                                        //wplc_error_log("[".__LINE__."] Old status 3 now 5 - returing messages");
                                        $messages = wplc_return_chat_messages(sanitize_text_field($_POST['cid']));
                                        if ($messages) {
                                            $array['data'] = $messages;
                                        }
                                    }
                                } else {
                                    if ($new_status == 6) {
                                        // admin requests chat
                                        //wplc_error_log("[".__LINE__."] Status6 - Updating user on page");
                                        wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 3, $_POST['wplcsession']);
                                        $array['check'] = true;
                                        $array['status'] = 3;
                                        $array['wplc_name'] = "You";
                                    } else {
                                        if ($new_status == 7) {
                                            // timed out
                                            //wplc_error_log("[".__LINE__."] Status 7 TIMED OUT - Updating user on page");
                                            if ($i == 1) {
                                                wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 5, $_POST['wplcsession']);
                                            }
                                        } else {
                                            if ($new_status == 8) {
                                                // completed but still browsing
                                                if ($i == 1) {
                                                    wplc_update_user_on_page(sanitize_text_field($_POST['cid']), 8, $_POST['wplcsession']);
                                                }
                                            } else {
                                                if ($new_status == 9) {
                                                    // user closed chat without inputting or starting a chat
                                                    //wplc_error_log("[".__LINE__."] Status 9");
                                                    $array['check'] = true;
                                                } else {
                                                    if ($new_status == 0) {
                                                        // no answer from admin
                                                        //wplc_error_log("[".__LINE__."] Status 0?");
                                                        $array['data'] = __('There is No Answer. Please Try Again Later', 'wplivechat');
                                                        $array['check'] = true;
                                                    } else {
                                                        if ($new_status == 10) {
                                                            // minimized active chat
                                                            //wplc_error_log("[".__LINE__."] Status 10");
                                                            $array['check'] = true;
                                                            if ($_POST['status'] == 5) {
                                                                //wplc_error_log("[".__LINE__."] Status 10 NOW 5");
                                                                $messages = wplc_return_chat_messages(sanitize_text_field($_POST['cid']));
                                                                if ($messages) {
                                                                    $array['data'] = $messages;
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        /* check if this is part of the first run */
                        if (isset($_POST['first_run']) && sanitize_text_field($_POST['first_run']) == "1") {
                            /* if yes, then send data now and dont wait for all iterations to complete */
                            if (!isset($array['status'])) {
                                $array['status'] = $new_status;
                            }
                            $array['check'] = true;
                        } else {
                            if (isset($_POST['short_poll']) && sanitize_text_field($_POST['short_poll']) == "true") {
                                /* if yes, then send data now and dont wait for all iterations to complete */
                                if (!isset($array['status'])) {
                                    $array['status'] = $new_status;
                                }
                                $array['check'] = true;
                            }
                        }
                    }
                }
                if ($array['check'] == true) {
                    echo json_encode($array);
                    break;
                }
                @ob_end_flush();
                if (defined('WPLC_DELAY_BETWEEN_LOOPS')) {
                    usleep(WPLC_DELAY_BETWEEN_LOOPS);
                } else {
                    usleep(500000);
                }
                $i++;
            }
            die;
        }
        if ($_POST['action'] == "wplc_user_close_chat") {
            //wplc_error_log("[".__LINE__."] ".$_POST['action']);
            if ($_POST['status'] == 5) {
                //wplc_error_log("[".__LINE__."] ".$_POST['action']);
                wplc_change_chat_status(sanitize_text_field($_POST['cid']), 9);
            } else {
                if ($_POST['status'] == 3) {
                    //wplc_error_log("[".__LINE__."] ".$_POST['action']);
                    wplc_change_chat_status(sanitize_text_field($_POST['cid']), 8);
                    if (function_exists('wplc_ce_record_chat_end')) {
                        wplc_ce_record_chat_end($_POST['cid']);
                    }
                }
            }
            die;
        }
        if ($_POST['action'] == "wplc_user_minimize_chat") {
            //wplc_error_log("[".__LINE__."] ".$_POST['action']);
            $chat_id = $_POST['cid'];
            wplc_change_chat_status(sanitize_text_field($_POST['cid']), 10);
            die;
        }
        if ($_POST['action'] == "wplc_user_maximize_chat") {
            //wplc_error_log("[".__LINE__."] ".$_POST['action']);
            wplc_change_chat_status(sanitize_text_field($_POST['cid']), 3);
            die;
        }
        if ($_POST['action'] == "wplc_user_send_msg") {
            $chat_id = sanitize_text_field($_POST['cid']);
            $chat_msg = sanitize_text_field($_POST['msg']);
            //wplc_error_log("[".__LINE__."] SENDING CHAT MSG FROM USER : $chat_id : $chat_msg");
            $wplc_rec_msg = wplc_record_chat_msg_pro("1", $chat_id, $chat_msg);
            if ($wplc_rec_msg) {
                echo 'sent';
                die;
            } else {
                echo "There was an error sending your chat message. Please contact support";
                die;
            }
        }
    }
    die;
}