Google Friend Connect Anbindung an REDAXO
Saturday 08th May 2010
Die nachfolgenden Codes sind nicht ausgiebig getestet und nur mit Vorsicht zu genießen. User die nur copy&paste Vorlagen suchen, sollten lieber die Finger davon lassen. Ich hafte für gar nichts... ![]()
Was ist die Idee hinter der Implementierung von OpenID auf meiner Homepage?! Nun, der eine und der andere von meinen Freunden und aus der Familie möchte gerne Videos von Vanessa sehen, oder meine etwas privateren Blog-Posts lesen. Ich hingegen möchte gerne das der User auf meiner Seite nicht noch ein Account einrichten muss. Wir alle haben doch schon genug Accounts im Internet und wenn man dann noch anfangen muss auf sämtlichen kleinen Seiten auch noch eines erstellen wird es einfach zu viel. Also habe ich mir gedacht ich über GoogleFriendConnect und die OpenSocialApi dem User (Freunde und Familie) es ermögliche sich auf meiner Homepage mit einen schon vorhandenen Account bei Google, Twitter, Yahoo, OpenID usw. anzumelden. Der User wird dabei in Redaxo übernommen (genau gesagt im CommunityAddon) was es mir ermöglicht bestimmen Usern mehr Rechte, wie z.B. das lesen von einigen Artikeln, zu vergeben. Des weiteren habe ich das CommentRank Addon soweit angepasst, das dieses die Userdaten aus dem CommunityAddon übernimmt. Somit erscheint das Profil Photo und dessen Username an den Kommentaren.
Die Login Funktion auf der Rechten Seite, genauso wie die Auflistung der Members, ist derzeit noch ein Gadget von Google.
Template - Google Friend Connect
Das folgende Template dient dazu die Daten des Users abzufragen welcher sich z.B. über das GFC Login Gadget (rechte Seite dieser HP) angemeldet hat.
<?php
require_once "<PATH>/osapi/src/osapi/osapi.php";
// Diese ID kann man unteranderen auf seiner GoogleFriendConnect Gadget Seite finden.
$gfc_siteid = "<SITEID>";
if (htmlspecialchars($_COOKIE["fcauth" . $gfc_siteid]) != ''){
$gfc_provider = new osapiFriendConnectProvider();
$gfc_auth = new osapiFCAuth(htmlspecialchars($_COOKIE["fcauth" . $gfc_siteid]));
$gfc_osapi = new osapi($gfc_provider, $gfc_auth);
$batch = $gfc_osapi->newBatch();
$batch->add($gfc_osapi->people->get(array('userId' => '@me')), 'user');
$result = $batch->execute();
// Foto Array auslesen
$photos = $result['user']->photos[0];
// Dies ist der Username
$REX['gfcUser'] = $result['user']->displayName;
// Dies ist der Name
$REX['gfcName'] = $result['user']->name;
// Dies ist die unique user ID
$REX['gfcId'] = $result['user']->id;
// Dies ist die URL des Profil Photos
$REX['gfcPhoto'] = $photos['value'];
// Wenn das community Addon aktiviert ist und der GFC User mit seiner ID noch nicht vorhanden ist,
// soll dieser mit den wenigen bekannten Informationen uebernommen werden.
if(OOAddon::isActivated("community")) {
$rexSql = new rex_sql;
$rexSql->setQuery("select login from rex_com_user where login='".$REX['gfcId']."'");
$result = $rexSql->getArray();
if (count($result) == 0) {
// User existiert noch nicht, daher mit einem dummy passwort anlegen.
$rexSql->setQuery("insert into rex_com_user (`login`,`password`, `status`, `admin`, `name`) values ('".$REX['gfcId']."', '<DEFAULTPASSWORT>', '1', '0', '".$REX['gfcName']."')");
} else {
}
}
}
?>
Template - GFC Community Addon Login
Das folgende Template basiert auf das Default Login Template des Community Addons und dient dazu die User, welche Mitglied dieser Homepage wurden, automatisch auch in die User Verwaltung des Community Addons von REDAXO zu übernehmen. Wieso fragt sich nun der eine oder andere, nun das ist recht einfach. Gewisse Seiten auf meiner Homepage sollen nicht alle sehen. Dazu habe ich in REDAXO noch eine "art_com_perm_group" Spalte hinzugefügt welche mir die Möglichkeit gibt zwischen "Alle", "Freunden" und "Familie" zu unterscheiden. Wird nun ein GFC User Mitglied meiner Homepage, erhält dieser die Standardrechte. Anschließend kann ich über die Userverwaltung diesen User in eine oder mehrere Gruppen "schieben", wodurch dieser mehr Rechte erhält. Dazu später mehr!
<?php
unset($REX['COM_USER']);
$pagekey = 'comrex'; // Frontendkey, muss sich unterscheiden, damit frontend und backend sich nicht schneiden.
// GoogleFriendConnect
$gfc_siteid = "<SITEID>";
if (htmlspecialchars($_COOKIE["fcauth" . $gfc_siteid]) != ''){
$login_psw = "<DEFAULTPASSWORT>";
$login_name = $REX['gfcId'];
} else {
$login_name = "";
$login_psw = "";
}
$logout = rex_request("logout","int");
$msg = 'Bitte einloggen';
// ----- session start
session_start();
$COM_USER_SAVE = new rex_sql();
$COM_USER_SAVE->setTable('rex_com_user');
if ($login_name != "" or $login_psw != "") {
$user_id = (int) $_SESSION[$pagekey]['UID'];
$GLOBALS["I18N"] = rex_create_lang("de");
$REX['COM_USER'] = new rex_login();
$REX['COM_USER']->setSqlDb(1);
$REX['COM_USER']->setSysID($pagekey);
$REX['COM_USER']->setSessiontime(3000);
$REX['COM_USER']->setLogin($login_name,$login_psw);
$REX['COM_USER']->setUserID("rex_com_user.id");
$REX['COM_USER']->setUserquery("select * from rex_com_user where id='USR_UID' and status>0");
$REX['COM_USER']->setLoginquery("select * from rex_com_user where login='USR_LOGIN' and password='USR_PSW' and status>0");
if ($REX['COM_USER']->checkLogin()) {
// Login gelungen
if ($login_name != "") {
// Login gelungen und gerade erst eingeloggt
$COM_USER_SAVE->setValue('last_login',time());
}
}else {
unset($REX['COM_USER']);
}
}
if (isset($REX['COM_USER']) && is_object($REX['COM_USER']) && $REX['COM_USER']->getValue('rex_com_user.id')!='')
{
// ----- session speichern
$COM_USER_SAVE->setValue('online_status','1');
$COM_USER_SAVE->setValue('session_id',session_id());
$COM_USER_SAVE->setValue('last_xs',time());
$COM_USER_SAVE->setWhere('id='.$REX['COM_USER']->getValue('rex_com_user.id'));
$COM_USER_SAVE->update();
}
unset($COM_USER_SAVE);
?>
COM-Template - Permission/Rechte - GFC
Das folgende Template basiert auf das Default Permission Template des Community Addons von REDAXO und enthält lediglich Anpassungen der neuen Gruppen-Rechte Spalte.
<?php
/*
Type:
0 Standard Zugriff fuer alle
-1 Zugriff fuer nicht eingeloggte User
1 Zugriff fuer eingeloggte User
2 Zugriff fuer eingeloggte Moderatoren und Admins
3 Zugriff fuer eingeloggte Admins
Gruppe:
0 Alle
1 Freunde
2 Familie
*/
function rex_com_checkUserPerm($type,$group)
{
global $REX;
if ($type == "") return true; // Zugriff fuer alle
if ($type == "0") return true; // Zugriff fuer alle
if (isset($REX['COM_USER']) && is_object($REX['COM_USER']))
{
if ($type == "1") {
if ($group == "0" or $group == "") { return true; }
if (strpos($group, $REX['COM_USER']->getValue("group"))){ return true; }
}
if ($type == "2" && ($REX['COM_USER']->getValue("admin")==1 || $REX['COM_USER']->getValue("moderator")==1)) return true;
if ($type == "3" && $REX['COM_USER']->getValue("admin")==1) return true;
}
if(!isset($REX['COM_USER']) || !is_object($REX['COM_USER']))
{
if ($type == "-1") return true; // Zugriff fuer nicht eingeloggte User
}
return false;
}
?>
Die Kommentar Funktion
Die Änderungen am Comment_Rank Addon habe ich im Source Code vorgenommen. Da dies etwas aufwändiger war, biete ich die geänderte Datei hier zum downloaden an. Um dieses benutzen zu können ist lediglich das Template "Google Friend Connect" nötig. Des weiteren muss noch eine weitere Spalte in der Tabelle "rex_111_comment_rank" hinzugefügt werden. Die Spalte muss "photo" heißen und sollte vom Typ "varchar[500]" sein. Die URL's zu den Profil Bildern sind lang!
Ähnliche Artikel
- PHP5 Memcache Testen
- Google Friend Connect Anbindung an REDAXOIch habe mir nun ein Template erstellt, welche über die OpenSocial API GoogleFriendConnect (kurz GFC) direkt in meine Homepage integriert. Das Template ist noch sehr simple gehalten und liest derzeit lediglich den Usernamen und das Profilphoto aus.
- Tag CloudBasierend auf mein Redaxo Modul "Ähnliche Artikel", habe ich ein Template zum ausgeben einer Tag Cloud erstellt.
- PHP5 Problem unter Apache2
- Ähnliche ArtikelIch habe ein kleines REDAXO Modul erstellt welches zu einem Artikel "Ähnliche Artikel" ausgibt.


Kommentare
Andreas Peters schrieb am 31.05.2010 14:56:24:
test