Joomla! oraz IP.Board – Finalne połączenie
W ostatnich dwóch wpisach ( Joomla! 2.5 i IP.Board – kolejna odsłona prac oraz Joomla! 2.5 oraz IP.Board 3.1.4 ) opisywałem swoje prace nad zagadnieniem połączenia CMS’a jakim jest Joomla oraz forum dyskusyjnego IP.Board . Połączenie to udało się wykonać w oparciu o IP.Converge jedyne co pozostawało do zrobienia to możliwość autologowania na portalu. I tego właśnie będzie dotyczyć ten wpis.
Sama sprawa autologowania nie jest jakoś bardzo skomplikowana, największym problemem tutaj było odczytanie czy użytkownik jest zalogowany na forum a jeśli tak to trzeba pobrać kilka jego danych takich jak nazwa wyświetlana czy adres e-mail. Dane te są potrzebne do zalogowania użytkownika, lub jeśli nie posiada on konta na portalu – do założenia konta i zalogowania.
Jest kilka sposobów na sprawdzenie, czy użytkownik jest zalogowany:
- Pobieramy sesje z bazy danych pasujące do ip danego użytkownika i jego przeglądarki
- Pobieramy ręcznie ciasteczko i na jego podstawie sprawdzamy czy użytkownik jest zalogowany
- Tworzymy instancję ipsRegistry i sprawdzamy dane
Pierwsze 2 rozwiązania nie są jakby się zdawało idealne, ponieważ ręczne pobieranie sesji z bazy wymaga przetrzymywania w kolejnym miejscu danych do połączenia z bazą. Drugie rozwiązanie za to wymaga od nas trzymania konfiguracji cookie z IP.Board w dodatkowym pliku.
Biorąc wszystkie za i przeciw postanowiłem wybrać rozwiązanie trzecie i utworzyć instancję klasy ipsRegistry i dzięki temu to ona będzie decydować o zalogowaniu bądź nie użytkownika.
Sam kod tworzenia takiego obiektu nie jest skomplikowany, ponieważ wymaga od nas kilku linijek napisanych w php:
define( 'DOC_FORUM_ROOT_PATH', str_replace( "\\", "/", dirname( __FILE__ ) ) . '/forum' ); define('IPS_ENFORCE_ACCESS', true ); require_once( DOC_FORUM_ROOT_PATH.'initdata.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' ); try { $registry = ipsRegistry::instance(); $registry->init(); $memberData = $registry->member()->fetchMemberData(); } catch( Excepton $e) {}
I teraz w zmiennej $memberData mamy wszystkie informacje o użytkowniku, czy jest zalogowany, do jakiej grupy należy, jego avatar i wiele więcej, w związku z czym możemy dowolnie te dane przetwarzać. Ja osobiście jak wspominałem potrzebowałem kilku informacji i z nich korzystam.
W związku z tym, że prace nad integracją zostały ukończone firma SolutionDEVs rozpoczyna sprzedaż integracji joomli z IP.Board zarówno w wersji z autologowaniem jak i w wersji bez autologowania. Wszystkich zainteresowanych zapraszam do kontaktu w celu uzyskania informacji na temat tego połączenia.