Skip to content

Интеграция с AJAX Chat

Доброго времени суток дорогие форумчане ^_^ !

 

Имеется проблема интеграции форума с AJAX Chat

(Выбрал по причине скорости удобства и бесплатности, а главное он нормально работает по https в отличии от многострадального IP.Chat)

 

Сама интеграция происходит через IPBWI, который сконфигурирован верно и работает исправно.

 

Чат установлен в отдельную папку в корне форума(Standalone версия)

Интеграцию делал по этому гайду

 

По пунктам:


  •  
  • Создал БД для чата
  • Прописал её в конфиг в lib/config.php
  • Запустил install.php, все таблички создались успешно
     
  • Законтачил чат с IPBWI
    /lib/custom.php
    // Include custom libraries and initialization code here
    require_once('../ipbwi/ipbwi.inc.php');
    
    // Error Output
    echo $ipbwi->printSystemMessages();


     

  • И непосредственно интеграция логинов:
    /lib/class/CustomAJAXChat.php
    class CustomAJAXChat extends AJAXChat {
    
       // Initialize custom request variables:
       function initCustomRequestVars() {
           global $ipbwi;
    
           // Auto-login IPB users:
           if(!$this->getRequestVar('logout') && $ipbwi->member->isLoggedIn()) {
               $this->setRequestVar('login', true);
           }
       }
    
       // Returns true if the userID of the logged in user is identical to the userID of the authentication system
       // or the user is authenticated as guest in the chat and the authentication system
       /*function revalidateUserID() {
           global $ipbwi;
    
           $m_info = $ipbwi->member->info();
           if($this->getUserRole() === AJAX_CHAT_GUEST && !$ipbwi->member->isLoggedIn() || ($this->getUserID() === $m_info["id"])) {
               return true;
           }
           return false;
       }*/
    
       // Returns an associative array containing userName, userID and userRole
       // Returns null if login is invalid
       function getValidLoginUserData() {
           global $ipbwi;
    
           if ($ipbwi->member->isLoggedIn()) {
               $m_info = $ipbwi->member->info();
               $userData = array();
               $userData["userID"] = $m_info["id"];
               $userData["userName"] = $this->trimUserName($m_info["members_display_name"]);
               if ($ipbwi->member->isAdmin()) {
                   $userData["userRole"] = AJAX_CHAT_ADMIN;
               } elseif ($ipbwi->member->isSuperMod()) {
                   $userData["userRole"] = AJAX_CHAT_USER;
               } else {
                   $userData["userRole"] = AJAX_CHAT_USER;
               }
               return $userData;
           } else {
               // Guest users
               return $this->getGuestUser();
           }
       }
    }
    
       // Store the channels the current user has access to
       // Make sure channel names don't contain any whitespace
       function &getChannels() {
           if($this->_channels === null) {
               $this->_channels = array();
    
               $allChannels = $this->getAllChannels();
    
               // Get the channels, the user has access to:
               if($this->getUserRole() != AJAX_CHAT_GUEST) {
                   $validChannels = $allChannels;
               }
    
               // Add the valid channels to the channel list (the defaultChannelID is always valid):
               foreach($this->getAllChannels() as $key=>$value) {
                   // Check if we have to limit the available channels:
                   if($this->getConfig('limitChannelList') && !in_array($value, $this->getConfig('limitChannelList'))) {
                       continue;
                   }
    
                   if(in_array($value, $validChannels) || $value == $this->getConfig('defaultChannelID')) {
                       $this->_channels[$key] = $value;
                   }
               }
           }
           return $this->_channels;
       }
    
       // Store all existing channels
       // Make sure channel names don't contain any whitespace
       function &getAllChannels() {
           if($this->_allChannels === null) {
               // Get all existing channels:
               $customChannels = $this->getCustomChannels();
    
               $defaultChannelFound = false;
    
               foreach($customChannels as $key=>$value) {
                   $forumName = $this->trimChannelName($value);
    
                   $this->_allChannels[$forumName] = $key;
    
                   if($key == $this->getConfig('defaultChannelID')) {
                       $defaultChannelFound = true;
                   }
               }
    
               if(!$defaultChannelFound) {
                   // Add the default channel as first array element to the channel list:
                   $this->_allChannels = array_merge(
                       array(
                           $this->trimChannelName($this->getConfig('defaultChannelName'))=>$this->getConfig('defaultChannelID')
                       ),
                       $this->_allChannels
                   );
               }
           }
           return $this->_allChannels;
       }
       function &getCustomUsers() {
           // List containing the registered chat users:
           $users = null;
           require(AJAX_CHAT_PATH.'lib/data/users.php');
           return $users;
       }
    
       function &getCustomChannels() {
           // List containing the custom channels:
           $channels = null;
           require(AJAX_CHAT_PATH.'lib/data/channels.php');
           return $channels;
       }
    ?>


 

В итоге сам чат работает нормально(логины проходят, пользователи определяются и могут слать сообщения).

 

НО: Список пользователей онлайн работает неверно, залогинившиеся пользователи в него не добавляются.

 

Прошу помочь кто чем может :(

Featured Replies

Если ipbwi использует апи форума то должны отображаться, зависит от того создается новая сессия или нет.

  • Author

Если ipbwi использует апи форума то должны отображаться, зависит от того создается новая сессия или нет.

Немного конкретизирую:

В списке каждый новый зашедший пользователь заменяет другого, в итоге зашедших пользователей к примеру три, а строчка в списке всегда одна и она меняется.

Не совсем понял, что значит заменяется? Большое вступление про чат, но ни слово о том, какое отношение чат имеет к списку онлайн? Либо вы о другом списке онлайн говорите? Указывайте пожалуйста правильный адрес форума в board url, или на ipbskins'е появился чат о котором мы не знаем?..

Интуиция подсказывает, что возможно вам нужен x-forwarded-for

  • Author

Вот этот список, в самом чате(извиняюсь что ввел в заблуждение)

kFuA5I8.jpg

Увы, но тут нужно копать каким образом этот чат выводит список пользователей и имеет ли вообще эта проблема отношения к ипб. Попробуйте в бд отыскать где содержится информация о онлайн пользователях.

  • Author

Увы, но тут нужно копать каким образом этот чат выводит список пользователей и имеет ли вообще эта проблема отношения к ипб. Попробуйте в бд отыскать где содержится информация о онлайн пользователях.

Спасибо.

Вот бы ещё знаний хватило это сделать :(

Во всем этом г нужно копаться, телепатия здесь не поможет. А устанавливать ради этого чат у меня нет ни времени ни желания, если дадите доступ к форуму могу посмотреть.

Неужели еще кто-то чатами пользуется?!

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.