Posts by WoltLab

    Dear developers,


    over the past few years with several new versions, some components have accumulated that we have marked as deprecated. In the plugin store, there are still some packages that use components that have been deprecated since version 2.1. In order to be able to remove this old code, we would like to draw attention to relevant code and explain its migration.

    In this context, we would like to explicitly point out that we are already creating a migration guide while developing new versions. So there is already an overview of changes for version 5.5, especially a list of components that are deprecated or removed with version 5.5.


    Below, we have created an overview of some deprecated components that we would like to remove soon, but some of them are still used in packages in the plugin store.

    PHP

    AttachmentBBCode::setAttachmentList()/AttachmentBBCode::setObjectID()

    Since the introduction of the embedded objects API with version 2.1, which is not only used for attachments but also other embedded contents,

    AttachmentBBCode::setAttachmentList() and AttachmentBBCode::setObjectID() are not needed anymore because the values set via these methods are only used, if AttachmentBBCode cannot access an attachment via the embedded objects API.


    So, if the embedded objects API is used, calls of these two methods can be removed. Otherwise, the code should be migrated to the embedded objects API urgently.

    FileUtil::downloadFileFromHttp()

    FileUtil::downloadFileFromHttp() is deprecated since Version 2.0 and should, depending on the version of WoltLab Suite you support, be replaced with HTTPRequest or directly with Guzzle.

    BlogDatabaseObject/CALENDARDatabaseObject/GalleryDatabaseObject/FilebaseDatabaseObject/WBBDatabaseObject

    App-specific DatabaseObject classes are not needed anymore since version 2.1 because the app prefix for the database tables is determined by DatabaseObject itself. Instead of inheriting from the app-specific DatabaseObject classes, you can directly inherit from DatabaseObject.

    IEventListener

    IEventListener is deprecated since version 2.1 and should be replaced with IParameterizedEventListener or AbstractEventListener. With version 5.5, we will add new event classes, which we already explain in our migration guide for version 5.5.

    ClassUtil::isInstanceOf()

    ClassUtil::isInstanceOf() is deprecated since version 3.0 and should be replaced with is_subclass_of().

    appendSession and forceWCF Parameter for LinkHandler::getLink()

    The session parameter appendSession and forceWCF are only deleted from the parameter array of LinkHandler::getLink() since version 3.0 and are unused. Thus, they can be removed from the parameter array in method calls.

    Mail

    The Mail class is deprecated since version 3.0 and should be replaced with wcf\system\email\Email or wcf\system\email\SimpleEmail.

    UserProfile::getUserProfile() and UserProfile::getUserProfiles()

    UserProfile::getUserProfile() and UserProfile::getUserProfiles() are deprecated since version 3.0 and should be replaced with UserProfileRuntimeCache::getObject() and UserProfileRuntimeCache::getObjects(), respectively. Note that the return value of UserProfileRuntimeCache::getObjects() contains null entries for non-existing users.

    Event Listeners and Cronjobs without Names

    Since version 3.0, event listeners and cronjobs support the name attribute to identify the event listeners and cronjobs. Event listeners and cronjobs without explicit names should be replaced with event listeners and cronjobs with names.

    IStackableUserNotificationObject

    IStackableUserNotificationObject is deprecated since version 3.1 and is unused. Thus, the interface should not be implemented anymore.

    EntryDataHandler/EventDataHandler/ImageDataHandler/PostDataHandler/CommentDataHandler

    The DataHandler classes were replaced by matching RuntimeCache classes and should not be used anymore.

    Note: filebase\system\file\FileDataHandler will only be deprecated with version 5.5 and replaced by filebase\system\cache\runtime\FileRuntimeCache.

    UserNotificationHandler::deleteNotifications()

    UserNotificationHandler::deleteNotifications() is deprecated since version 2.1 and should be replaced with calls of UserNotificationHandler::markAsConfirmed() (with the same method signature).

    CryptoUtil methods

    CryptoUtil::secureCompare() is deprecated since version 5.2 and should be replaced with \hash_equals(). CryptoUtil::randomBytes() is deprecated since version 5.2 and should be replaced with \random_bytes(). CryptoUtil::randomInt() is deprecated since version 5.2 and should be replaced with \random_int().

    To encode security-relevant data, which were generated with \random_bytes(), for example, a constant time encoder should be used as of version 5.4.

    Callback

    The Callback class is deprecated since version 3.0 and should not be used anymore.

    Obsolete Page Components

    Since the overhaul of the pages and introduction of CMS pages with version 3.0, IBreadcrumbProvider, IHistorySavingObjectTypeProvider::getActivePageMenuItem(), ISearchableObjectType::getActiveMenuItem(), ITrackablePage, IUserOnlineLocation, and UserOnlineLocationHandler are deprecated and should not be used anymore.

    AbstractHtmlInputNodeProcessorListener Methods

    AbstractHtmlInputNodeProcessorListener::replaceLinksWithBBCode() and AbstractHtmlInputNodeProcessorListener::setObjectTitles() are deprecated since version 3.0 and should be replaced by AbstractHtmlInputNodeProcessorListener::replaceLinks().

    SearchIndexManager::add() and SearchIndexManager::update()

    SearchIndexManager::add() and SearchIndexManager::update() are deprecated since version 3.0 and should be replaced with SearchIndexManager::set().

    SystemException

    SystemException, although not officially deprecated, is no longer used by us in new code. Instead, we use exceptions from the SPL or our own exception classes. Therefore, as far as possible, SystemException should no longer be thrown in plugins. Since SystemException is still thrown by existing code, they may also need to be caught. However, it may be possible to catch all \Exception instead.

    JavaScript

    WCF_CLICK_EVENT

    WCF_CLICK_EVENT should be replaced by "click" in in JavaScript- and TypeScript code.

    WCF.ACP.Worker

    WCF.ACP.Worker is deprecated since version 3.1 and can easily be replaced with WoltLabSuite/Core/Acp/Ui/Worker.

    Templates

    $__wcfVersion

    The template variable $__wcfVersion to break browser caches is deprecated since version 2.1 and should be replaced with LAST_UPDATE_TIME.

    DateDiffModifierTemplatePlugin

    DateDiffModifierTemplatePlugin is deprecated since version 3.1 and should be replaced with DateIntervalFunctionTemplatePlugin.

    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.

    Mail

    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.