Статус присваивается в функции получения друзей, которая затем формирует из значений массив и кладет его в сессию, соответственно при авторизации Вы получаете своих друзей и их статусы, при входе и выходе друга статус обновляется, но у вас он остается такой же, так как данные берутся из массива сохраненного в сессии.
Чтобы это исправить нужно дописать несколько строчек в user.class.php
Найти функцию получения друзей: getFriends($user_id=0)
И изменить строчку:
if ($is_me && self::sessionGet('friends') !== false) { return self::sessionGet('friends'); }
if ($is_me && self::sessionGet('friends') !== false) { $friends = self::sessionGet('friends'); foreach ($friends as $value) { $value['is_online'] = self::isOnline($value['id']); $friends[$value['id']] = $value; } return $friends; }
Кое что следовало бы еще в cms.php изменить, при записи в cms_online обновление строки происходит не всегда корректно (бывает что в поле user_id стоит 0), при желании переместите user_id из ON DUPLICATE UPDATE в INSERT IGNORE — это не обязательно, при повторном обновлении странички все исправляется.