- Affected App
- WoltLab Suite Core
Hi,
ein Kunde hat mir ein Problem mit dem VieCode Shop in Verbindung mit der LDAP Erweiterung gemeldet.
Code
Error
Error Type:
wcf\system\exception\SystemException
Error Message:
Unable to find class 'shop\system\event\listener\SessionHandlerListener'
File:
*/lib/system/event/EventHandler.class.php (200)
Stack Trace:
#0 */lib/system/session/SessionHandler.class.php (737):
wcf\system\event\EventHandler->fireAction(wcf\system\session\SessionHandler, 'beforeChangeUser', [ user => , hideSession => ])
#1 */lib/system/event/listener/SessionFactoryLDAPListener.class.php (50):
wcf\system\session\SessionHandler->changeUser(wcf\data\user\User)
#2 */lib/system/event/EventHandler.class.php (221):
wcf\system\event\listener\SessionFactoryLDAPListener->execute(wcf\system\session\SessionFactory, 'wcf\\system\\session\\SessionFactory', 'beforeInit', [ ])
#3 */lib/system/session/ACPSessionFactory.class.php (38):
wcf\system\event\EventHandler->fireAction(wcf\system\session\SessionFactory, 'beforeInit')
#4 */lib/system/WCF.class.php (407):
wcf\system\session\ACPSessionFactory->load()
#5 */lib/system/WCF.class.php (169):
wcf\system\WCF->initSession()
#6 */global.php (13):
wcf\system\WCF->__construct()
#7 */index.php (8):
require_once('*/global.php')
Display More
Das Problem ist, dass folgender EventListener der LDAP Erweiterung in beforeInit sich einhängt und das Event beforeChangeUser in der SessionFactory triggert.
XML
<eventlistener name="sessionFactory">
<eventclassname>wcf\system\session\SessionFactory</eventclassname>
<eventname>beforeInit</eventname>
<listenerclassname>wcf\system\event\listener\SessionFactoryLDAPListener</listenerclassname>
</eventlistener>
Das führt dazu, dass mein EventListener vom Shop ausgeführt wird.
XML
<eventlistener name="SessionHandlerBeforeChangeUser">
<eventclassname>wcf\system\session\SessionHandler</eventclassname>
<eventname>beforeChangeUser</eventname>
<listenerclassname>shop\system\event\listener\SessionHandlerListener</listenerclassname>
</eventlistener>
Zu diesem Zeitpunkt wurde aber WCF::loadApplication() noch nicht ausgeführt, d.h. WCF::$autoloadDirectories kennt den Namespace vom Shop noch nicht.