Przeglądarka (user agent) w spisie online dla MyBB

Skrypt MyBB jest naprawdę ciekawy. Darmowy, prężnie rozwijany, posiada multum rozszerzeń, a na dodatek jest naprawdę intuicyjny. W niektórych miejscach zastanawiam się jednak, dlaczego autorzy skryptu zrobili coś tak a nie inaczej. Dzisiaj przykład tego typu. Skrypt posiada oddzielną stronę ze spisem osób będących online (włącznie z gośćmi). Wyświetla on datę ostatniej aktywności, miejsce w którym był użytkownik – np. “przegląda dział testowy” – a dla administratorów także adres IP. Tutaj jest moim zdaniem coś niewykorzystanego. MyBB w bazie danych, w tabeli od sesji trzyma informacje o przeglądarce jaką posługuje się użytkownik, zapis user agenta. Oczywiście nie jest to wartość zaufana, użytkownik może ją swobodnie modyfikować, ale jej znanie w przypadku nagłego natłoku gości może pozwolić na wyjaśnienie problemów np. wykrycie zbyt upartego robota indeksującego, który zawala nas wieloma instancjami z wielu serwerów.

Skoro jest w bazie, to można to szybko dodać do spisu online, co też chciałbym pokazać w tym wpisie.
Nie stworzyłem i nie stworzę do tego żadnego pluginu, bo skrypt nie ma uchwytów w potrzebnych miejscach, a wrzucanie długiego kodu, który powtarzałby to co robi oryginał nie ma najmniejszego sensu. Modyfikacja jest bardzo prosta do wdrożenia.

1. Edytujemy plik /online.php, odnajdujemy:

SELECT DISTINCT s.sid, s.ip, s.uid, s.time, s.location, u.username, s.nopermission, u.invisible, u.usergroup, u.displaygroup

i zmieniamy na:

SELECT DISTINCT s.sid, s.ip, s.uid, s.time, s.useragent, s.location, u.username, s.nopermission, u.invisible, u.usergroup, u.displaygroup

2. Edytujemy plik /inc/functions_online.php, odnajdujemy:

// And finally if we have permission to view this user, return the completed online row

przed znalezionym fragmentem dodajemy:

$online_ua = '';
if ($mybb->usergroup['cancp'] == 1 && isset($user['useragent']))
{
    $online_ua = '<br /><span style="font-size:9px;">' . $online_ua . '</span>';
}

3. W ACP -> Style i szablony -> Szablony edytujemy szablon “online_row” (grupa Kto jest online), odnajdujemy:

{$user_ip}

zamieniamy na:

{$user_ip}{$online_ua}

No i to by było na tyle. Od teraz osoby z uprawnieniami administratora będą mogły widzieć informacje o przeglądarkach w spisie osób z aktywnymi sesjami. Oczywiście każdy może inaczej to sobie sformatować, podany tu rozmiar czcionki to według mnie wartość optymalna względem innych elementów w spisie. Jeżeli ktoś chciałby dać uprawnienie również moderatorom, powinien w drugim punkcie zmienić zapis ‘cancp’ na ‘canmodcp’.
Aha, pamiętajmy o tym, że długość UA jest ograniczana do maksymalnie 100 znaków. Taki limit nie wiedzieć czemu przyznali autorzy MyBB i obcinanie następuje już na etapie tworzenia / aktualizacji sesji w bazie danych.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.