function GetVisitorFromRequestAndSetCookie($setcookie = true) { // TODO consider the name $res = array(); $forceSet = false; if (isset($_REQUEST['visitorname'])) { $res['name'] = getSecureText($_REQUEST['visitorname']); $forceSet = true; } elseif (isset($_COOKIE[WEBIM_COOKIE_VISITOR_NAME])) { $res['name'] = getSecureText($_COOKIE[WEBIM_COOKIE_VISITOR_NAME]); } else { $res['name'] = Resources::Get("chat.default.visitorname"); } $canChangeName = Visitor::getInstance()->canVisitorChangeName(); if ($canChangeName) { if (!isset($_COOKIE[WEBIM_COOKIE_VISITOR_NAME]) || $forceSet) { if ($setcookie) { Visitor::getInstance()->setVisitorNameCookie($res['name']); } } } if (isset($_SESSION['WEBIM_VISITOR_ID'])) { $res['id'] = $_SESSION['WEBIM_VISITOR_ID']; } elseif (isset($_COOKIE[WEBIM_COOKIE_VISITOR_ID])) { $res['id'] = $_COOKIE[WEBIM_COOKIE_VISITOR_ID]; } else { $res['id'] = generateVisitorId(); } if (isset($_POST['captcha'])) { $res['captcha'] = $_POST['captcha']; } if (!isset($_SESSION['WEBIM_VISITOR_ID'])) { $_SESSION['WEBIM_VISITOR_ID'] = $res['id']; } if (!isset($_COOKIE[WEBIM_COOKIE_VISITOR_ID])) { if ($setcookie) { setcookie(WEBIM_COOKIE_VISITOR_ID, $res['id'], time() + 60 * 60 * 24 * 365, '/'); } } $res['partnerref'] = isset($_COOKIE[WEBIM_COOKIE_PARTNER_REF]) ? $_COOKIE[WEBIM_COOKIE_PARTNER_REF] : null; return $res; }
function shouldEnterFirstMessage() { global $captcha; $chatimmediatly = verify_param('chatimmediately', "/^\\d{1}\$/", '') == 1; if ($chatimmediatly) { return false; } if (!isset($_REQUEST['submitted'])) { displayStartChat(); return true; } else { $TML = new SmartyClass(); setupStartChat($TML); $_SESSION['webim_uname'] = $visitor_name = getSecureText($_REQUEST['visitorname']); $_SESSION['webim_email'] = $email = getSecureText($_REQUEST['email']); $_SESSION['webim_phone'] = $phone = getSecureText($_REQUEST['phone']); $message = getSecureText($_REQUEST['message']); $captcha_num = getSecureText($_REQUEST['captcha']); $has_errors = false; if (!$captcha->checkNumber($captcha_num)) { $TML->assign('errorcaptcha', true); $has_errors = true; } elseif (empty($visitor_name) && Visitor::getInstance()->canVisitorChangeName()) { $TML->assign('errorname', true); $has_errors = true; } elseif (!is_valid_name($visitor_name) && Visitor::getInstance()->canVisitorChangeName()) { $TML->assign('errornameformat', true); $has_errors = true; } elseif (empty($message)) { $TML->assign('errormessage', true); $has_errors = true; } else { if (!is_valid_email($email) && !intval($_SESSION['uid'])) { $TML->assign('erroremailformat', true); $has_errors = true; } } $captcha->setNumber(); if ($has_errors) { $TML->assign('visitorname', $visitor_name); $TML->assign('email', $email); $TML->assign('phone', $phone); $TML->assign('captcha_num', ''); $TML->display('start-chat.tpl'); return true; } return false; } }
} elseif (empty($message)) { $TML->assign('errormessage', true); $has_errors = true; } else { if (!is_valid_email($email)) { $TML->assign('erroremailformat', true); $has_errors = true; } } $captcha->setNumber(); if ($has_errors) { $TML->assign('name', getSecureText($visitor_name)); $TML->assign('email', getSecureText($email)); $TML->assign('phone', getSecureText($phone)); $TML->assign('message', getSecureText($message)); $TML->assign('canChangeName', getSecureText($canChangeName)); $TML->assign('captcha_num', ''); $TML->display('leave-message.tpl'); exit; } $visitSessionId = VisitSession::GetInstance()->updateCurrentOrCreateSession(); $params = array(); $params['visitsessionid'] = $visitSessionId; $params['lastpingvisitor'] = null; $params['offline'] = 1; $threads_count = MapperFactory::getMapper('Thread')->getNonEmptyThreadsCountByVisitorId($visitorid); $thread = Thread::getInstance()->CreateThread(WEBIM_CURRENT_LOCALE, STATE_CLOSED, $params); VisitSession::GetInstance()->UpdateVisitSession($visitSessionId, array('hasthread' => 1)); Thread::getInstance()->sendFirstMessageWithVisitorInfo($thread); Thread::getInstance()->PostMessage($thread['threadid'], KIND_USER, Resources::Get('chat.window.offline_message', array($message))); MapperFactory::getMapper('Thread')->incrementVisitorMessageCount($thread['threadid']);