Gallery unter PHP-Nuke
Einbindung Gallery2 in PHP-Nuke
Unter http://galleryupdates.jpmullan.com/ habe ich
das ZIP Paket für die PHP-Nuke Integration von Gallery2 gefunden. Nach Download, entpacken, und Aufruf
der Konfiguration unter PHP-Nuke Adminconsole komme ich mit der Konfiguration des "Embed" Files bzw.
der Speicherung der Konfiguration (modules/gallery2/gallery2.cfg not writable) nicht weiter. Trotz aller Rechte
(rwx^3) auf diese Datei komme ich aus der Konfigurationsschleife nicht heraus ... ;(
Zwar ist in der Anleitung beschrieben, dass man wohl eine Weile braucht, bis man sämtliche Parameter
richtig eingegeben hat, aber das hat mit der Speicherung nix zu tun .... selbst sämtliche Parameter
vorweg in die CFG eingetragen, geht es über das Speichern der Werte nicht drüber hinaus.
Einbindung Gallery 1.5 in PHP-Nuke
Ok, also einen Schritt zurück. Vielleicht lässt sich ja vielleicht Gallery 1.5 in PHP-Nuke einbinden?
Von den Überresten der Mambo-Gallery 1.5 Installation war eine direkte Einbindung nicht möglich. Also
komplette Neuinstallation, mit Angabe sämtlicher Konfig-Parameters. Von der Gallery2 Installation hatte
ich ja noch den Datenpfad G2Date. Den wollte ich jetzt auch für Gallery 1.5 nutzen. Nach Grundinstallation
und dem ersten Hochladen eines Bildes wurden aber keine Bilder angezeigt, weil der Datenpfad in einem virtuellen
Verzeichnis "versteckt" war. Also Datenpfad ins Webverzeichnis verschoben. Jetzt konnte Gallery 1.5
nicht mehr auf die Userdatabase zugreifen. Also config.php manuell geändert.
Beim erneuten Bilder Upload lief nun alles wie gewünscht. Bilder werden angezeigt. PHP-Nuke Users können
die Bilder und Alben in der Gallery betrachten. Weitere Forschungen und Experimente folgen....
| Webportal | Gallery 1.5 | Gallery 2.0 |
| PHP-Nuke |  |  |
| Mambo |  |  |
Stand: 21.5.05
Bei der weiteren Prüfung, inwieweit Alben für unterschiedliche Gruppen zur Verfügung gestellt werden
können, zeigte sich, dass bei der PHP-NUKE Einbindung nur eine einzige (!) Gruppe von Users möglich scheint.
Die einzigste Erweiterung ist die im Gallery Code hardcoded "Admin" Erweiterung. User.php ... if myuserename admin=1
Ansonsten können sonst welche Alben und Users Zuordnungen erstellt werden - haben allesamt allerdings keinerlei
Einfluss darauf, was durch PHP-NUKE hindurch sichtbar ist. Hier gibt es wohl nur die Everybody or Admin Unterscheidung.
Den Code konnte ich bis zu folgender Zeile folgen, an dem der entscheidende Zugriff auf die Albenliste passiert:
..\gallery\albums.php line 62
list ($numPhotos, $numAccess, $numAlbums) = $albumDB->numAccessibleItems($gallery->user);
In den nachfolgenden Zeilen wird aufgrunddessen nur noch aufgebaut. Der eigentliche Knackpunkt versteckt sich dann
hinter der Funktion $albumDB->numAccessibleItems(). Beim Debuggen bin ich dann auf 2 unterschiedliche User IDs
gestossen. Mit einem regulären Useraccount direkt in Gallery eingeloggt liefert die UserID
"1116753920_1781994325", während der User mit dem gleichen Namen unter PHP-Nuke "5" ausgibt!
Was für ein Unterschied!
Da in der Funktion $albumDB->numAccessibleItems() eine Unterfunktion $user->canReadAlbum($album) aufgerufen
wird, die aufgrund der UID ermittelt wird, ist nun klar, warum trotz des gleichen Usernamens, ein freigegebenes
Album nicht zur Anzeige gelangt. In der Funktion $albumDB->numAccessibleItems() fehlt die mögliche
Unterscheidung zwischen "Gallery-internem" und "Embeded User".
Nächster Schritt, die nuke5 class weiter durchforstet. Da taucht in USER.PHP die Funktion
loadByUserName($uname) auf. Wenn dem so wäre, dass die falsche UID herangezogen wird, so müsste
bei Angabe der Gallery UID bei einem "normalen" User bei der Anzeige der Alben dir richtigen Alben
erscheinen, auf die dieser User Zugriff hätte. Debug =>
- if($this->username == "test") {
$this->uid = "1236783450_6781234321"; <- Gallery-UID
... und siehe da, der Testuser kann die geschützte Alben sehen, auf die er Zugriff hat.
Einbindung Gallery 1.5 in PHP-Nuke -> Fixing Permissions
Erweiterung Gallery->INIT.PHP um
- case 'phpnuke':
include_once(dirname(__FILE__) . "/classes/gallery/UserDB.php");
include_once(dirname(__FILE__) . "/classes/gallery/User.php");
Erweiterung Gallery-Classes-Nuke5->UserDB.PHP um
- class Nuke5_UserDB extends Abstract_UserDB {
var $db;
var $fields;
var $userMap; <- ab hier
var $nobody; <- Gallery-DB
var $everybody; <- Erweiterung
var $loggedIn;
var $version;
function Nuke5_UserDB() {
global $gallery;
[...]
$this->db = $gallery->database{"nuke"}; <- Orginal Nuke5 Code
$this->prefix = $gallery->database{"user_prefix"}; <- Orginal Nuke5 Code
$userDir = $gallery->app->userDir; <- ab hier Copy
<- Gallery-DB Code
// assuming revision 4 ensures that if the user_version is
// not properly read from file due to the file format changes
// that we perform the necessary upgrade.
$this->version = 4;
$this->userMap = array(); <- wichtig ist die
<- UserMap !
[...]
if (!$this->nobody) {
$this->nobody = new NobodyUser();
}
if (!$this->everybody) {
$this->everybody = new EverybodyUser();
}
if (!$this->loggedIn) {
$this->loggedIn = new LoggedInUser();
}
$this->fields = $gallery->database{'fields'}; <- wieder Orginal
<- nuke5 Code
[...]
function getUserByUsername($username, $level=0) {
global $gallery;
if ($level > 1) {
// We've recursed too many times. Abort;
return;
}
[...]
if (!isset($this->userMap[$username])) { <- Uebernahme von
$this->rebuildUserMap(); <- Gallery_DB code
if (!isset($this->userMap[$username])) {
return;
} else {
$uid = $this->userMap[$username];
}
} else {
$uid = $this->userMap[$username];
}
$uid = $this->convertUidToNewFormat($uid); <- Orginal nuke5 code
$tmpuid = $uid; <- ADDED
/* echo $tmpuid; RICHTIGE UID !!!! */
/* $user = $this->getUserByUid($uid); */
$user = new Nuke5_User();
$user->loadByUsername($username,$tmpuid); <- zusaetzlich
<- TMPUID !!!
Erweiterung Gallery-Classes-Nuke5->User.PHP um
- function loadByUserName($uname,$tmpuid) { <- zusaetzlich
global $gallery; <- TMPUID !!!
echo $uname;
$results = $this->db->query('select ' . $this->fields{'uid'} .
', ' . $this->fields{'name'} . ', ' . $this->fields{'email'} .
' from ' . $this->prefix . 'users ' . 'where ' .
$this->fields{'uname'} . "='$uname'");
$row = $this->db->fetch_row($results);
/* $this->uid = $row[0]; */
$this->uid = $tmpuid; <- hier die PHP-NUKE UID
<- mit der Gallery
<- internen UID
<- ueberschreiben !!!
Das funktioniert nun für alle PHP-NUKE User, die auch in Gallery registriert sind. Für PHP-NUKE User,
die nicht in Gallery registriert sind, gibt es jetzt keine Rückmeldung weil mit einem nicht registriertem
User die Funktion $this->rebuildUserMap(); in Class nuke5 Funktion getUserByUsername() ins
Nirwana läuft. Daher muss dies in der Funktion getUserByUsername() noch abgefangen werden:
Erweiterung Gallery-Classes-Nuke5->UserDB.PHP um
- if (!isset($this->userMap[$username])) {
/* $this->rebuildUserMap(); */ <- rennt ins Nirwana bei
/* User does not exist? */ <- nicht existierendem
$tmpuid = ""; <- User. Daher tmpuid
$user = new Nuke5_User(); <- = Leer
$user->loadByUsername($username,$tmpuid);
} else {
$uid = $this->userMap[$username];
$uid = $this->convertUidToNewFormat($uid);
$tmpuid = $uid;
/* echo $tmpuid; RICHTIGE UID !!!! */
/* $user = $this->getUserByUid($uid); */
$user = new Nuke5_User();
$user->loadByUsername($username,$tmpuid);
}
return $user;
User in Gallery mit speziellen Berechtigungen erhalten nun die Alben zu Gesicht, auf die sie auch
Zugriff haben. Hierfür muss der User aber doppelt, sowohl in PHP-Nuke alsauch in Gallery registriert sein.
Alle anderen PHP-Nuke User erhalten das "Everybody" Profil.
Hiermit ist das Thema Einbindung Gallery 1.5 in PHP-NUKE 7.x nun erfolgreich abgeschlossen.
Project: Gallery to PHP-Nuke integration Activities Timeline
| Date |
Activities |
| 29.5.05 |
Durchbruch in der Gallery 1.5 zu PHP-Nuke Einbindung!
User in Gallery mit speziellen Berechtigungen erhalten nun die Alben zu Gesicht, auf die sie auch
Zugriff haben.
|
| 22.5.05 |
Einbindung Gallery 1.5 in PHP-Nuke 7.6 liefert für den gleichen Username in PHP-Nuke eine unterschiedliche UserID!
|
| 21.5.05 |
Einbindung Gallery 1.5 in PHP-Nuke 7.6 hat im Prinzip funktioniert
|
| 16.5.05 |
Versuch Einbindung Gallery2 in PHP-Nuke (siehe ausführliche Beschreibung)
|
| 15.5.05 |
Mambo unterliegt im direkten Vergleich zu PHP-Nuke aufgrund Performance Problemen und fehlender
Multilanguage Fähigkeit.
|
| 9.5.05 |
Einbindung Menalto Gallery2 in Mambo Plus 2.0. Problem: Admin kann sich nicht mehr anmelden.
unter v2.0
|
| 8.5.05 |
Einbindung Menalto Gallery 1.5 in Mambo Plus 2.0 fehlgeschlagen. Erneuter Versuch mit Gallery2.
|
| 4.7.04 |
Erster Kontakt mit Webportal Systemen: see Torsten Bamberg's PHPBB2 Deployment PHPBB2/PHP-NUKE Portal
unter Webinterface II Project
|