<?php /* * Copyright 2005-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ require_once('libs/init.php'); require_once('libs/invitation.php'); require_once('libs/operator.php'); require_once('libs/track.php'); $operator = array(); $response = array(); if (Settings::get('enabletracking') == '1') { $entry = isset($_GET['entry']) ? $_GET['entry'] : ""; $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ""; $user_id = isset($_GET['user_id']) ? $_GET['user_id'] : false; // Check if session start if (isset($_SESSION['visitorid']) && preg_match('/^[0-9]+$/', $_SESSION['visitorid'])) { // Session started. Track visitor $visitorid = track_visitor($_SESSION['visitorid'], $entry, $referer); $visitor = track_get_visitor_by_id($visitorid); } else { $visitor = track_get_visitor_by_user_id($user_id); if ($visitor !== false) { // Session not started but visitor exist in database. // Probably third-party cookies disabled by the browser. // Use tracking by local cookie at target site $visitorid = track_visitor($visitor['visitorid'], $entry, $referer); } else { // Start tracking session $visitorid = track_visitor_start($entry, $referer); $visitor = track_get_visitor_by_id($visitorid); } } if ($visitorid) { $_SESSION['visitorid'] = $visitorid; } if ($user_id === false) { // Update local cookie value at target site $response['handlers'][] = 'updateUserId'; $response['dependences']['updateUserId'] = array(); $response['data']['user']['id'] = $visitor['userid']; } // Get invitation state $invitation_state = invitation_state($visitorid); // Check if invitation closed if (! $invitation_state['invited'] && ! empty($_SESSION['invitation_threadid']) ) { $response['handlers'][] = 'invitationClose'; $response['dependences']['invitationClose'] = array(); unset($_SESSION['invitation_threadid']); } // Check if visitor just invited to chat $is_invited = $invitation_state['invited'] && (empty($_SESSION['invitation_threadid']) ? true : ($_SESSION['invitation_threadid'] != $invitation_state['threadid'])); if ($is_invited) { // Load invitation thread $thread = Thread::load($invitation_state['threadid']); // Get operator info $operator = operator_by_id($thread->agentId); $locale = isset($_GET['locale']) ? $_GET['locale'] : ''; $operator_name = ($locale == $home_locale) ? $operator['vclocalename'] : $operator['vccommonname']; // Show invitation dialog at widget side $response['handlers'][] = 'invitationCreate'; $response['dependences']['invitationCreate'] = array(); $response['data']['invitation'] = array( 'operatorName' => htmlspecialchars($operator_name), 'avatarUrl' => htmlspecialchars($operator['vcavatar']), 'threadUrl' => get_app_location(true, is_secure_request()) . '/client.php?act=invitation' ); $_SESSION['invitation_threadid'] = $thread->id; } // Check if visitor reject invitation if ($invitation_state['invited'] && ! empty($_GET['invitation_rejected'])) { invitation_reject($visitorid); } } start_js_output(); echo build_widget_response($response); exit; ?>