Zaawansowany
Postów: 1656 Pomógł: 42
Data rejestracji: 28.04.2005 20:28
|
Cześć
Powstało już parę lepszych, gorszych prób integracji fusiona z innymi cmsami. Postanowiłem w inny sposób to wszystko uporządkować (lepszy może gorszy - zobaczymy). Jako, że najlepiej znam fusiona zabrałem się za niego. Stworzyłem klasę do obsługi użytkowników. Za pomoca metod login, logout, user_register, user_del i user_update można z użytkownikiem właściwie zrobić wszystko co jest potrzebne do zintegrowania strony z innym cmsem. Później pokaże na przykładzie jak zrobić aby logując się w phpbb2 automatycznie user był logowany/wylogowywany w fusionku a także automatyczną rejestrację. Aktualizacji profilu nie zrobiłem dzisiaj - brakło czasu.
Opis metod (przeznaczenie, parametry i wartości zwracane) opisałem w komentarzach w pliku z klasą. Mała uwaga, klasa wymaga php5.
http://dev.grzes....ms.tar.bz2
Jak najprościej to wykorzystać?
<?
ob_start();
require_once "multicms/phpfusion_mcms.php";
echo '<html><head><title> PHP-Fusion :) </title></head>
<body style="font-size:10px; fotn-family:verdana;">
<form name="loginfrm" method="post" action="phpfusion.php">
<input type="submit" name="login" value="loguj"> <input type="submit" name="logout" value="wyloguj">
<input type="submit" name="register" value="rejestruj usera: test2">
<input type="submit" name="userdel" value="usun usera: test2">
<input type="submit" name="updateuser" value="zmien usera: test2">
</form>
';
if (isset($_POST['login'])) {
$pf = new PHPFusion('phpfusion/');
$error = $pf -> login("test2", "haselko", 0);
if ($error==0) echo "Logowanie zakończone sukcesem :)"; else echo "Wystąpił błąd: $error";
}elseif (isset($_POST['logout'])) {
$pf = new PHPFusion('phpfusion/');
$error = $pf -> logout();
if ($error==0) echo "Uzytkownik wylogowany :)"; else echo "Wystąpił błąd: $error";
}elseif (isset($_POST['register'])) {
$pf = new PHPFusion('phpfusion/');
$error = $pf->user_register('test2', 'haselko', '', array(
'user_hide_email' => 1,
'user_location' => 'bytom',
'user_month' => '5',
'user_day' => '23',
'user_year' => '1984',
'user_aim' => '',
'user_icq' => '',
'user_msn' => '',
'user_yahoo' => '',
'user_web' => 'http://mcms.grzes.info',
'user_theme' => 'default',
'user_offset' => '0',
'user_sig' => 'jakiś tam podpis usera :P'
));
if ($error==0) echo "Uzytkownik zarejestrowany :)"; else echo "Wystąpił błąd: $error";
}elseif (isset($_POST['userdel'])) {
$pf = new PHPFusion('phpfusion/');
$error = $pf -> user_del('test2');
if ($error==0) echo "Uzytkownik usunięty :)"; else echo "Wystąpił błąd: $error";
}elseif (isset($_POST['updateuser'])) {
$pf = new PHPFusion('phpfusion/');
$error = $pf -> user_update('test2', array(
'user_name' => 'test_new2',
'user_email' => '',
'user_newpassword' => 'nowehaselko',
'user_hide_email' => 0,
'user_location' => 'miasteczko',
'user_month' => 4,
'user_day' => 22,
'user_year' => 1800,
'user_aim' => 'aim',
'user_icq' => 'icq',
'user_msn' => 'msn',
'user_yahoo' => 'yahoo',
'user_web' => 'http://buu :P',
'user_theme' => 'default',
'user_offset' => 3,
'user_sig' => 'nowa sygnaturka',
'user_status' => 0
));
if ($error==0) echo "Uzytkownik usunięty :)"; else echo "Wystąpił błąd: $error";
}
echo '</body></html>';
ob_end_flush();
?>
Powyższy plik phpfusion.php znajduje się w katalogu głównym a fusion w podkatalogu phpfusion. Nie jest to ambitny przykład ( ;) ) ale powinien w przystępny sposób pokazać sposób wykorzystania klasy.
Pora na phpBB.
plik login.php
Między linijkami 86 a 87 wstawiamy:
include "../multicms/phpfusion_mcms.php";
$pf = new PHPFusion('../phpfusion/');
$pf->login($username, $password, $autologin);
Po linii 141 wstawiamy to:
include "../multicms/phpfusion_mcms.php";
$pf = new PHPFusion('../phpfusion/');
$pf->logout();
Dostosujcie tylko ścieżki do pliku z klasą i katalogu z plikiem config.php fusiona. Logowanie i wylogowywanie mamy z głowy.
Teraz rejestracja. Plik includes/usercp_register.php
znajdźcie fragment:
//
// Get current date
//
$sql = "INSERT INTO " . USERS_TABLE . " (user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_level, user_allow_pm, user_active, user_actkey)
VALUES ($user_id, '" . str_replace("\'", "''", $username) . "', " . time() . ", '" . str_replace("\'", "''", $new_password) . "', '" . str_replace("\'", "''", $email) . "', '" . str_replace("\'", "''", $icq) . "', '" . str_replace("\'", "''", $website) . "', '" . str_replace("\'", "''", $occupation) . "', '" . str_replace("\'", "''", $location) . "', '" . str_replace("\'", "''", $interests) . "', '" . str_replace("\'", "''", $signature) . "', '$signature_bbcode_uid', $avatar_sql, $viewemail, '" . str_replace("\'", "''", str_replace(' ', '+', $aim)) . "', '" . str_replace("\'", "''", $yim) . "', '" . str_replace("\'", "''", $msn) . "', $attachsig, $allowsmilies, $allowhtml, $allowbbcode, $allowviewonline, $notifyreply, $notifypm, $popup_pm, $user_timezone, '" . str_replace("\'", "''", $user_dateformat) . "', '" . str_replace("\'", "''", $user_lang) . "', $user_style, 0, 1, ";
if ( $board_config['require_activation'] == USER_ACTIVATION_SELF || $board_config['require_activation'] == USER_ACTIVATION_ADMIN || $coppa )
{
$user_actkey = gen_rand_string(true);
$key_len = 54 - (strlen($server_url));
$key_len = ( $key_len > 6 ) ? $key_len : 6;
$user_actkey = substr($user_actkey, 0, $key_len);
$sql .= "0, '" . str_replace("\'", "''", $user_actkey) . "')";
}
else
{
$sql .= "1, '')";
}
if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) )
{
message_die(GENERAL_ERROR, 'Could not insert data into users table', '', __LINE__, __FILE__, $sql);
}
po nim trzeba dodać:
include '../multicms/phpfusion_mcms.php';
$pf = new PHPFusion('../phpfusion/');
$error = $pf->user_register($username, $new_password, $email, array(
'user_hide_email' => ($viewemail ? 0 : 1),
'user_location' => $location,
'user_aim' => $aim,
'user_icq' => $icq,
'user_msn' => $msn,
'user_yahoo' => $yim,
'user_web' => $website,
'user_theme' => 'default',
'user_offset' => $user_timezone,
'user_sig' => $signature
), TRUE);
Teraz podczas rejestracji na forum user zostanie zarejestrowany automatycznie w fusionku.
Drobna uwaga, to tylko najprostsze przykłady jakie istnieją. Metoda user_register zwraca odpowiednie błędy jeśli rejestrowany user już istnieje w fusionku ale skrypt phpBB nie bierze tego pod uwagę i na forum zarejestruje typa.
Po dopracowaniu klasy PHPFusion przyjdzie pora na inne cmsy. Dlaczego już teraz piszę o tym? Co myślicie o takim podejściu do tego? Wszystkie klasy korzystałyby z metod o takich samych nazwach a w miarę możliwości o takich samych parametrach i zwracanych wartościach. Znacząco powinno to ułatwić tworzenie integracji między różnymi cmsami.
uwagi krytyczne wręcz zalecane ;)
Edytowane przez Grzes dnia 23.04.2007 16:28:36
Często najmądrzejszą odpowiedzią jest milczenie
|