dcCore déprécié

Billet

Dans la version 2.28 de Dotclear, la classe historique du moteur de blog, alias dcCore, passe en dépréciée.

La classe dcCore, le cœur de Dotclear n'est plus. Cette classe, avec toutes ses propriétés et méthodes, passe en déprécié au profit d'un nouveau système utilisant un simple conteneur de classe.

Resources
  • dcCore::app()->resources => App::backend()->resources()

Le tableau des ressources d'aide de l'interface d'administration est remplacé par une nouvelle classe \Dotclear\Core\Backend\Resources et se déplace vers le Backend. Pour ajouter une ressource depuis un thème ou plugin, cela se fait toujours depuis le fichiers locales/xx/resources.php mais on doit désormais utiliser une méthode de la nouvelle classe qui est instanciée dans App::backend()->resources().
Exemple du plugin aboutConfig de la distribution :

// Avant :
// if (!isset(dcCore::app()->resources['help']['aboutConfig'])) {
//    dcCore::app()->resources['help']['aboutConfig'] = __DIR__ . '/help/help.html';
//}
// à remplacer par :
\Dotclear\App::backend()->resources()->set('help', 'aboutConfig', __DIR__ . '/help/help.html');
Lang
  • dcCore::app()->lang => App::lang()->getLang()
  • dcCore::app()->lang = 'en' => App::lang()->setlang('en')
Behavior

Toutes les méthodes en rapport à la gestion des behaviors sont désormais dans une instance de classe Behavior.

  • dcCore::app()->addBehavior() => App::behavior()->addBehavior()
  • dcCore::app()->addBehaviors() => App::behavior()->addBehaviors()
  • dcCore::app()->hasBehavior() => App::behavior()->hasBehavior()
  • dcCore::app()->getBehaviors() => App::behavior()->getBehaviors()
  • dcCore::app()->getBehaviors(xxx) => App::behavior()->getBehavior(xxx)
  • dcCore::app()->callBehavior() => App::behavior()->callBehavior()

La méthode getBehaviors est scindée en deux pour obtenir un typage de retour de méthode plus propre. Les anciens alias en ou disparaissent.

Nonce

Toutes les méthodes en rapport à la gestion en base de Nonce sont désormais dans une instance de classe Nonce.

  • dcCore::app()->getNonce() => App::nonce()->getNonce()
  • dcCore::app()->checkNonce() => App::nonce()->checkNonce()
  • dcCore::app()->formNonce(true) => App::nonce()->getFormNonce()
  • dcCore::app()->formNonce(false) => App::nonce()->formNonce()

Cette dernière méthode est scindée en deux avec d'un coté le renvoi de l'élément Form\Hidden et de l'autre le renvoi du code HTML.

Version

Toutes les méthodes en rapport à la gestion des versions en base sont désormais dans une instance de classe Nonce.

  • dcCore::app()->getVersion() => App::version()->getVersion()
  • dcCore::app()->getVersions() => App::version()->getVersions()
  • dcCore::app()->setVersion() => App::version()->setVersion()
  • dcCore::app()->testVersion() => App::version()->compareVersion()
  • dcCore::app()->newVersion() => App::version()->newerVersion()
  • dcCore::app()->delVersion() => App::version()->unsetVersion()
Formater

Toutes les méthodes en rapport à la gestion des formateurs sont désormais dans une instance de classe Formater.

  • dcCore::app()->addEditorFormater() => App::formater()->addEditorFormater()
  • dcCore::app()->addFormater() => App::formater()->addEditorFormater('dcLegacyEditor', ...)
  • dcCore::app()->addFormaterName() => App::formater()->addFormaterName()
  • dcCore::app()->getFormaterName() => App::formater()->getFormaterName()
  • dcCore::app()->getEditors() => App::formater()->getEditors()
  • dcCore::app()->getFormaters() => App::formater()->getFormaters()
  • dcCore::app()->getFormaters(xxx) => App::formater()->getFormater(xxx)
  • dcCore::app()->callEditorFormater() => App::formater()->callEditorFormater()
  • dcCore::app()->callFormater() => App::formater()->callEditorFormater('dcLegacyEditor', ...)

La méthode getFormaters est scindée en deux pour retourner soit un formateur soit tous.
Les méthodes spécifiques à dcLegacyEditor, qui sont addFormater et callFormater, sont supprimées au profit des génériques addEditorFormater et callEditorFormater auxquelles il faudra indiquer le formateur dcLegacyEditor.

Wiki et HTML filter

Toutes les méthodes en rapport aux filtres wiki et HTML sont désormais dans un instance de classe Filter. De même pour la propriété wiki.

  • dcCore::app()->wiki => App::filter()->wiki()
  • dcCore::app()->wiki2xhtml => App::filter()->wiki()
  • dcCore::app()->wikiTransform() => App::filter()->wikiTransform()
  • dcCore::app()->initWikiPost() => App::filter()->initWikiPost()
  • dcCore::app()->initWikiSimpleComment() => App::filter()->initWikiSimpleComment()
  • dcCore::app()->initWikiComment() => App::filter()->initWikiComment()
  • dcCore::app()->wikiPostLink() => App::filter()->wikiPostLink()
  • dcCore::app()->HTMLfilter() => App::filter()->HTMLfilter()

Une modification bloquante a été introduite en utilisant l'état non initialisé des propriétés de classe, il ne faut plus tester si wiki est une instance de WikiToHtml mais si il existe, cela donne :

//avant :
//if (dcCore::app()->wiki instanceof WikiToHtml) { }

// Après :
if (isset(App::filter()->wiki)) { }

Ce cas se retrouve sur plusieurs autres appels, PHP vous indiquera que vous faites appel à une propriété non initialisée, il faudra alors utiliser isset().

Post types

Toutes les méthodes en rapport à la gestion des types de posts sont désormais dans une instance de classe PostTypes. Et un type de post n'est plus un tableau mais une classe de description PostType.

  • dcCore::app()->getPostAdminURL() => App::postTypes()->get(type)->adminUrl()
  • dcCore::app()->getPostPublicURL() => App::postTypes()->get(type)->publicUrl()
  • dcCore::app()->setPostType() => App::postTypes()->set(new PostType())
  • dcCore::app()->getPostTypes() => App::postTypes()->dump()

De plus, une nouvelle méthode est ajoutée pour tester si un type de post existe: App::postTypes()->exists(type).

Exemple du plugin pages de la distribution :

// Dans la méthode process() du fichier src/Prepend.php
App::postTypes()->set(new PostType(
    'page',
    '',
    App::url()->getURLFor('pages', '%s'),
    'Pages'
));
// Dans la méthode process() du fichier src/Backend.php
App::postTypes()->set(new PostType(
    'page',
    urldecode(My::manageUrl(['p' => 'pages', 'act' => 'page', 'id' => '%d'], '&')),
    App::url()->getURLFor('pages', '%s'),
    'Pages'
));

On remarque ici qu'on déclare deux fois le type de post, une fois dans le Prepend SANS la définition d'url admin car elle n'est pas encore accessible. Et une fois dans le fichier Backend AVEC la définition de l'url admin.

Blogs

Toutes les méthodes en rapport aux blogs sont désormais dans une instance de classe Blogs.

  • dcCore::app()->getAllBlogStatus() => App::blogs()->getAllBlogStatus()
  • dcCore::app()->getBlogStatus() => App::postTypes()s->getBlogStatus()
  • dcCore::app()->getBlogPermissions() => App::postTypes()->getBlogPermissions()
  • dcCore::app()->getBlog() => App::postTypes()->getBlog()
  • dcCore::app()->getBlogs() => App::postTypes()->getBlogs()
  • dcCore::app()->addBlog() => App::postTypes()->addBlog()
  • dcCore::app()->updBlog() => App::postTypes()->updBlog()
  • dcCore::app()->delBlog() => App::postTypes()->delBlog()
  • dcCore::app()->blogExists() => App::postTypes()->blogExists()
  • dcCore::app()->countBlogPosts() => App::postTypes()->countBlogPosts()
Users

Toutes les méthodes en rapport aux utilisateurs sont désormais dans une instance de classe Users.

  • dcCore::app()->getUser() => App::users()->getUser()
  • dcCore::app()->getUsers() => App::users()->getUsers()
  • dcCore::app()->addUser() => App::users()->addUser()
  • dcCore::app()->updUser() => App::users()->updUser()
  • dcCore::app()->delUser() => App::users()->delUser()
  • dcCore::app()->userExists() => App::users()->userExists()
  • dcCore::app()->getUserPermissions() => App::users()->getUserPermissions()
  • dcCore::app()->setUserPermissions() => App::users()->setUserPermissions()
  • dcCore::app()->setUserBlogPermissions() => App::users()->setUserBlogPermissions()
  • dcCore::app()->setUserDefaultBlog() => App::users()s->setUserDefaultBlog()
  • dcCore::app()->removeUsersDefaultBlogs() => App::users()->removeUsersDefaultBlogs()
  • dcCore::app()->userDefaults() => App::users()->userDefaults()
Cache
  • dcCore::app()->emptyTemplatesCache() => App::cache()->emptyTemplatesCache()
  • dcCore::app()->cache => App::cache()->xxx()
Autres
  • dcCore::app()::SESSION_TABLE_NAME => App::session()::SESSION_TABLE_NAME
  • dcCore::app()::VERSION_TABLE_NAME => App::version()::VERSION_TABLE_NAME
  • dcCore::app()->con() => App::con()
  • dcCore::app()->prefix => App::con()->prefix()
  • dcCore::app()->blog => App::blog()
  • dcCore::app()->auth => App::auth()
  • dcCore::app()->session => App::session()
  • dcCore::app()->url => App::url()
  • dcCore::app()->rest => App::rest()
  • dcCore::app()->wiki => App::filter()->wiki
  • dcCore::app()->plugins => App:plugins()
  • dcCore::app()->themes => App::themes()
  • dcCore::app()->media => App::media()
  • dcCore::app()->postmedia App::postMedia() App::media()->postMedia()
  • dcCore::app()->meta => App::meta()
  • dcCore::app()->error => App::error()
  • dcCore::app()->notices => App::notice()
  • dcCore::app()->log => App:log()
  • dcCore::app()->admin => App::backend()
  • dcCore::app()->adminurl => App::backend()->url()
  • dcCore::app()->favs => App::backend()->favorites()
  • dcCore::app()->menu => App::backend()->menus()
  • dcCore::app()->public => App::frontend()
  • dcCore::app()->tpl => App:frontend()->template()
  • dcCore::app()->ctx => App::frontend()->context()
  • dcCore::app()->spamfilters => Use AntispamInitFilters behavior
  • dcCore::app()->killAdminSession() => App::backend()->killAdminSession()
  • dcCore::app()->getAllBlogStatus() => App::blogs()->getAllBlogStatus()
  • dcCore::app()->getBlogStatus() => App::blogs()->getBlogStatus()
  • dcCore::app()->blogDefaults() => \Dotclear\Core\Install\Utils::blogDefault()
  • dcCore::app()->enableRestServer() => App::rest()->enableRestServer()
  • dcCore::app()->serveRestRequests() => App::rest()->serveRestRequests()


L'ancienne écriture des appels décrits dans cette page reste valable encore pour quelques versions en tant que dépréciée.

Le contenu de ce document a été écrit suivant le code de la version 2.28 de Dotclear.

La discussion continue ailleurs

URL de rétrolien : https://dotclear.watch/trackback/405