Liebe Entwickler,
im Laufe der vergangenen Versionen haben sich einige Komponenten angesammelt, die wir als veraltetet/deprecated markiert haben. Teilweise werden im Plugin-Store auch noch solche Komponenten verwendet, die seit Version 2.1 veraltet sind. Um diesen alten Code entfernen zu können, möchten wir hiermit auf relevanten Code aufmerksam machen und die Migration erläutern.
In diesem Zuge möchten wir auch nochmals explizit darauf hinweisen, dass wir mittlerweile auch während der Entwicklung an neuen Versionen schon einen Migration Guide erstellen. So existiert mittlerweile auch schon eine Übersicht über Änderungen für Version 5.5, insbesondere eine Liste von Komponenten, die mit Version 5.5 veraltet sind bzw. entfernt werden.
Im Folgenden haben wir eine Übersicht über einige veraltete Komponten erstellt, die wir bald entfernen möchten, aber teilweise noch in Paketen im Plugin-Store verwendet werden.
PHP
AttachmentBBCode::setAttachmentList()/AttachmentBBCode::setObjectID()
Seit der Einführung der Embedded Objects-API mit Version 2.1, die neben Dateianhängen auch andere eingebundene Inhalte unterstützt, werden AttachmentBBCode::setAttachmentList() und AttachmentBBCode::setObjectID() nicht mehr benötigt, da die über diese Methoden gesetzten Werte nur dann verwendet werden, wenn AttachmentBBCode auf einen Dateianhang nicht über die Embedded Objects-API zugreifen kann.
Wenn also die Embedded Objects-API verwendet wird, können diese beiden Methodenaufrufe entfernt werden. Ansonsten sollte dringend auf die Embedded Objects-API umgestelt werden.
FileUtil::downloadFileFromHttp()
FileUtil::downloadFileFromHttp() ist seit Version 2.0 veraltet und sollte, je nach unterstützten WoltLab Suite-Versionen durch HTTPRequest oder direkt durch Guzzle ersetzt werden.
BlogDatabaseObject/CALENDARDatabaseObject/GalleryDatabaseObject/FilebaseDatabaseObject/WBBDatabaseObject
App-spezifische DatabaseObject-Klassen werden seit Version 2.1 nicht mehr benötigt, da dass App-Präfix für die Datenbank-Tabellen von DatabaseObject selbst bestimmt wird. Es kann also direkt von DatabaseObject anstelle der App-spezifische DatabaseObject-Klasse geerbt werden.
IEventListener
IEventListener ist seit Version 2.1 veraltet und sollte durch IParameterizedEventListener bzw. AbstractEventListener ersetzt werden. Mit Version 5.5 werden wir neue Event-Klassen einführen, was wir bereits im Migration-Guide für Version 5.5 erklärt haben.
ClassUtil::isInstanceOf()
ClassUtil::isInstanceOf() ist seit Version 3.0 veraltet und sollte durch is_subclass_of() ersetzt werden.
appendSession- und forceWCF-Parameter für LinkHandler::getLink()
Der Session-Parameter appendSession und forceWCF werden seit Version 3.0 nur noch aus dem Parameter-Array von LinkHandler::getLink() gelöscht und ansonsten ignoriert. Sie können also aus dem Parameter-Array beim Methodenaufruf gelöscht werden.
Die Mail-Klasse ist seit Version 3.0 veraltet und sollte durch wcf\system\email\Email oder wcf\system\email\SimpleEmail ersetzt werden.
UserProfile::getUserProfile() und UserProfile::getUserProfiles()
UserProfile::getUserProfile() und UserProfile::getUserProfiles() sind seit Version 3.0 veraltet und sollten jeweils durch UserProfileRuntimeCache::getObject() und UserProfileRuntimeCache::getObjects() ersetzt werden, wobei UserProfileRuntimeCache::getObjects() für nicht-vorhandene Benutzer einen null-Eintrag zurückliefert.
Event-Listeners und Cronjobs ohne Namen
Seit Version 3.0 unterstützen Event-Listeners und Cronjobs ein name-Attribut, über das sie identifiziert werden können. Event-Listeners und Cronjobs ohne expliziten Namen sollten durch Event-Listeners und Cronjobs mit Namen ersetzt werden.
IStackableUserNotificationObject
IStackableUserNotificationObject ist seit Version 3.1 veraltet und wird nicht mehr verwendet. Das Interface sollte daher nicht mehr implementiert werden.
EntryDataHandler/EventDataHandler/ImageDataHandler/PostDataHandler/CommentDataHandler
Die DataHandler-Klassen wurde durch entsprechende RuntimeCache-Klassen ersetzt und sollten deshalb nicht mehr verwendet werden.
Hinweis: filebase\system\file\FileDataHandler wird erst mit Version 5.5 veraltet sein und durch filebase\system\cache\runtime\FileRuntimeCache ersetzt.
UserNotificationHandler::deleteNotifications()
UserNotificationHandler::deleteNotifications() ist seit Version 2.1 veraltet und sollte durch Aufrufe von UserNotificationHandler::markAsConfirmed() (mit gleicher Methodensignatur) ersetzt werden.
CryptoUtil-Methoden
CryptoUtil::secureCompare() ist seit Version 5.2 veraltet und sollte durch \hash_equals() ersetzt werden. CryptoUtil::randomBytes() ist seit Version 5.2 veraltet und sollte durch \random_bytes() ersetzt werden. CryptoUtil::randomInt() ist seit Version 5.2 veraltet und sollte durch \random_int() ersetzt werden.
Für die Kodierung von sicherheitsrelevanten Daten, die beispielsweise mit \random_bytes() genereriert werden, sollte ab Version 5.4 außerdem ein Constant Time Encoder genutzt werden.
Callback
Die Callback-Klasse ist seit Version 3.0 veraltet und sollte nicht mehr verwendet werden.
Veraltete Seiten-Komponenten
Seit der Überarbeitung der Seiten und Einführung von CMS-Seiten mit Version 3.0 sind IBreadcrumbProvider, IHistorySavingObjectTypeProvider::getActivePageMenuItem(), ISearchableObjectType::getActiveMenuItem(), ITrackablePage, IUserOnlineLocation und UserOnlineLocationHandler veraltet und sollten nicht mehr verwendet werden.
AbstractHtmlInputNodeProcessorListener-Methoden
AbstractHtmlInputNodeProcessorListener::replaceLinksWithBBCode() und AbstractHtmlInputNodeProcessorListener::setObjectTitles() sind seit Version 5.2 veraltet und sollten durch AbstractHtmlInputNodeProcessorListener::replaceLinks() ersetzt werden.
SearchIndexManager::add() und SearchIndexManager::update()
SearchIndexManager::add() und SearchIndexManager::update() sind seit Version 3.0 veraltet und sollten jeweils durch SearchIndexManager::set() ersetzt werden.
SystemException
SystemException ist zwar nicht offiziell veraltet, wird in neuem Code von uns nicht mehr verwendet. Wir verwenden stattdessen Exceptions aus der SPL oder eigene Exception-Klassen. In Plugins sollten deshalb soweit wie möglich auch keine SystemException mehr geworfen werden. Da SystemException von vorhandenem Code noch geworfen wird, müssen diese ggf. auch noch gefangen werden. Unter Umständen ist es aber möglich, stattdessen alle \Exception zu fangen.
JavaScript
WCF_CLICK_EVENT
WCF_CLICK_EVENT sollte in JavaScript- und TypeScript-Code durch "click" ersetzt werden.
WCF.ACP.Worker
WCF.ACP.Worker ist seit Version 3.1 veraltet und kann einfach auf WoltLabSuite/Core/Acp/Ui/Worker umgeschrieben werden.
Templates
$__wcfVersion
Die Template-Variable $__wcfVersion zum Brechen von Browser-Caches ist seit Version 2.1 veraltet und sollte durch LAST_UPDATE_TIME ersetzt werden.
DateDiffModifierTemplatePlugin
DateDiffModifierTemplatePlugin ist seit Version 3.1 veraltet und sollte durch DateIntervalFunctionTemplatePlugin ersetzt werden werden.