/** * Оставить отзыв к диалогу с консультантом * * @param integer $e1 Баллы (от 1 до 5)за "Ожидание ответа" * @param integer $e2 Баллы (от 1 до 5)за "Доступное содержание" * @param integer $e3 Баллы (от 1 до 5)за "Общее впечатление" * @param string $wish Пожелание * * @return string Возможная ошибка */ public function Evaluate($e1, $e2, $e3, $wish) { if (empty($this->dialog)) { return 'Указанного обращения не существует или вы уже оставили отзыв.'; } global $DB; $count = $DB->val("SELECT COUNT(*) FROM webim WHERE thread = ?", $this->thread); if ($count) { return 'Указанного обращения не существует или вы уже оставили отзыв.'; } $e1 = intval($e1); $e2 = intval($e2); $e3 = intval($e3); $wish = trim($wish); $dialog = ''; foreach ($this->dialog as $row) { $name = $row['client'] ? $row['client'] . ': ' : ($row['operator'] ? $row['operator'] . ': ' : ''); $dialog .= "[" . $row['time'] . "] " . $name . $row['message'] . "\n\n"; } $aData = array('thread' => $this->thread, 'user_id' => !empty($this->clientid) ? $this->clientid : NULL, 'user_name' => $this->client, 'operator_id' => !empty($this->operatorid) ? $this->operatorid : NULL, 'operator_name' => $this->operator, 'dialog' => $dialog, 'evaluation1' => $e1, 'evaluation2' => $e2, 'evaluation3' => $e3, 'wish' => !empty($wish) ? $wish : NULL); $DB->insert('webim', $aData); // уведомляем консультанта о факте оценки в его диалоге if (!$DB->error) { $this->_webimConnect(); $mRes = mysql_query("INSERT INTO chatmessage (threadid, kind, message, created) \n VALUES ('{$this->thread}', '3', 'Пользователь поставил вам оценку', '" . date('Y-m-d H:i:s') . "')", $this->_webimConn); require_once $_SERVER['DOCUMENT_ROOT'] . '/webim/classes/config.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/webim/classes/functions.php'; $filename = $this->thread . HAS_MESSAGES_OPERATOR_FILE_POSTFIX; $filename = ONLINE_FILES_DIR . DIRECTORY_SEPARATOR . substr(md5($filename), 0, 1) . DIRECTORY_SEPARATOR . $filename; set_has_threads($filename); } return $DB->error; }
function createNewThread() { $extAddr = Browser::GetExtAddr(); $remoteHost = !empty($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : $extAddr; $visitSessionId = VisitSession::GetInstance()->updateCurrentOrCreateSession(); $params = array(); $params['visitsessionid'] = $visitSessionId; $params['lastpingvisitor'] = null; // $canChangeName = Visitor::getInstance()->canVisitorChangeName(); // if (!empty($_REQUEST['visitorname']) && $canChangeName) { // Visitor::getInstance()->setVisitorNameCookie($_REQUEST['visitorname']); // $params['visitorname'] = $_REQUEST['visitorname']; // } $operatorid = verify_param('operatorid', "/^(\\d)\$/"); $departmentkey = verify_param('departmentkey', "/^\\w+\$/"); $autoinviteid = verify_param('autoinviteid', "/^\\d+\$/"); if (!empty($departmentkey)) { $department = MapperFactory::getMapper('Department')->getByDepartmentKey($departmentkey); $params['departmentid'] = $department['departmentid']; } // else { // $departments = MapperFactory::getMapper("Department")->enumDepartments(Resources::getCurrentLocale()); // // if (count($departments) == 1) { // $params['departmentid'] = $departments[0]['departmentid']; // } // } // $startThreadState = null; if (!empty($operatorid) && ($operator = Operator::GetOperatorById($operatorid))) { $params['nextoperatorid'] = $operator['operatorid']; $startThreadState = STATE_LOADING_FOR_EXACT_OPERATOR; } else { $startThreadState = STATE_LOADING; } $thread = Thread::getInstance()->CreateThread(Resources::getCurrentLocale(), $startThreadState, $params); VisitSession::GetInstance()->UpdateVisitSession($visitSessionId, array('hasthread' => 1)); set_has_threads(HAS_THREADS_FILE); // если пользователь не ввел email, то по умолчанию сообщаем email с основной базы if (empty($_REQUEST['email']) && !empty($_SESSION['uid'])) { $_REQUEST['email'] = $GLOBALS['DB']->val('SELECT email FROM users WHERE uid = ?', $_SESSION['uid']); } Thread::getInstance()->sendFirstMessageWithVisitorInfo($thread, $_REQUEST); if (!empty($autoinviteid)) { Thread::getInstance()->sendAutoIniviteTextToOperator($thread, $autoinviteid); } $visitor = GetVisitorFromRequestAndSetCookie(); $opener = Thread::getInstance()->getOpenerWithTitle(); VisitSession::GetInstance()->setVisitSessionCurrentPage($visitor['id'], $opener[0], $opener[1]); if (!empty($_REQUEST['message'])) { $v = GetVisitorFromRequestAndSetCookie(); $hash = array(); $hash['sendername'] = $v['name']; $hash['message'] = $_REQUEST['message']; ThreadProcessor::getInstance()->ProcessThread($thread['threadid'], 'visitor_message', $hash); } if (!empty($email) || !empty($phone)) { Thread::getInstance()->PostMessage($thread['threadid'], KIND_FOR_AGENT, Resources::get('start.chat.info', array($email, $phone))); } // MapperFactory::getMapper("Thread")->incrementVisitorMessageCount($threadid); return $thread; }
function setThreadHasMessagesForVisitor($threadid) { set_has_threads(self::getVisitorHasMesagesFilename($threadid)); }