Пример #1
0
 /**
  * Оставить отзыв к диалогу с консультантом
  *
  * @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;
 }
Пример #2
0
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;
}
Пример #3
0
 function setThreadHasMessagesForVisitor($threadid)
 {
     set_has_threads(self::getVisitorHasMesagesFilename($threadid));
 }