Project: Webportal - 02. Gallery 1.5 to PHP-NUKE 7.6 integration

AMBROSIA60-Portal  Webportal Project



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....

    WebportalGallery 1.5Gallery 2.0
    PHP-NukeYesNo
    MamboNoYes
    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

    © 2003-2024 by Ulrich Schroeter   01529