Résumé
Dans les versions précédentes chaque entité utilisait des méthodes et valeurs dédiées et bloquées de status, tout ça éparpillé un peu partout. Depuis la version 2.33, tous ces status utilisent une structure commune et sont ouvert à l'ajout de nouveaux status. Cela a entrainé pas mal de modifications de requêtes et de scripts de vérification pour prendre en compte cette ouverture.
Nouvelles classes
De nouvelles classes regroupant les status d'un groupe sont donc accessibles depuis l'application :
- Utilisateurs :
App::status()->user()
- Blogs :
App::status()->blog()
- Billets :
App::status()->post()
- Commentaires :
App::status()->comment()
Ces classes contiennent une pile de status, qui sont maintenant des objets.
La classe d'un status contient les propriétés suivantes :
- Un niveau
level
- Un identifiant
id
- Un nom
name
(et son plurielplural_name
) - Une icone
icon
(et sa version foncéeicon_dark
) - Une option
hidden
pour le cacher des sélections de formulaire
Pour connaitre toutes les méthodes disponibles pour les groupes de status, les classes sont dans :
src\Helper\Stack\Status
(générique)src\Helper\Stack\Statuses
(générique)src\Schema\Status\Blog.php
src\Schema\Status\Comment.php
src\Schema\Status\Post.php
src\Schema\Status\User.php
Les classes regroupant ces status vont faciliter leur gestion en intégrant tous les outils nécessaires comme les combo, les filtres, les colonnes de tableau, les actions... Le code de Dotclear s'en retrouve simplifié et plus harmonieux à sa lecture.
Utilisation
Récupérer le nom et l'image d'un status de blog :
$name = App::status()->blog()->name((int) $rs->blog_status);
$image = App::status()->blog()->image((int) $rs->blog_status);
Tester si un billet a un status restreint :
if (App::status()->post()->isRestricted((int) $rs->post_status)) { }
Récupérer le combo d'action sur des commentaires :
echo (new Select('comment_status'))
->items(App::status()->comment()->combo())
->default((string) $rs->comment_status)
->label(new Label(__('Comment status:'), Label::IL_TF))
->render();
Exemple d'ajout d'un status aux utilisateurs depuis le plugin FrontendSession :
App::status()->user()->set((new Status(
My::USER_PENDING ,
My::id(),
'Pending registration',
'pending registration (>1)',
My::fileURL('icon.svg'))
));
La recherche de status se fait par identifiant ou par niveau sur la plupart des méthodes, ces 3 exemples retourneront le même objet :
$status_online = App::status()->blog()->get(1);
$status_online = App::status()->blog()->get(App::status()->blog()::ONLINE);
$status_online = App::status()->blog()->get('online');
Ces quelques exemples montrent l'harmonisation entre les différents status rencontrés dans Dotclear.
Parmis les changements qui risquent de poser problème à certains plugins, il y a la gestion des status dans les requêtes avec un nouveau behavior coreBlogBeforeGetPostsAddingParameters
qui est détaillé dans un article de ce blog.
Dépréciés
Comme souvent, ces changements apportent leur lot de dépréciés.
- Core\Backend\Combos::getPostStatusesCombo() :
App::status()->post()->combo()
- Core\Backend\Combos::getBlogStatusesCombo() :
App::status()->blog()->combo()
- Core\Backend\Combos::getCommentStatusesCombo() :
App::status()->comment()->combo()
- Core\Backend\Filter\FilterBlogs::getBlogStatusFilter() :
App::status()->blog()->filter()
- Core\Backend\Filter\FilterComments::getCommentStatusFilter() :
App::status()->comment()->filter()
- Core\Backend\Filter\FilterPosts::getPostStatusFilter() :
App::status()->post()->filter()
- App::blog()::BLOG_ONLINE :
App::status()->blog()::ONLINE
- App::blog()::BLOG_OFFLINE :
App::status()->blog()::OFFLINE
- App::blog()::BLOG_REMOVED :
App::status()->blog()::REMOVED
- App::blog()::BLOG_UNDEFINED :
App::status()->blog()::UNDEFINED
- App::blog()::POST_PENDING :
App::status()->post()::PENDING
- App::blog()::POST_SCHEDULED :
App::status()->post()::SCHEDULED
- App::blog()::POST_UNPUBLISHED :
App::status()->post()::UNPUBLISHED
- App::blog()::POST_PUBLISHED :
App::status()->post()::PUBLISHED
- App::blog()::COMMENT_JUNK :
App::status()->comment()::JUNK
- App::blog()::COMMENT_PENDING :
App::status()->comment()::PENDING
- App::blog()::COMMENT_UNPUBLISHED :
App::status()->comment()::UNPUBLISHED
- App::blog()::COMMENT_PUBLISHED :
App::status()->comment()::PUBLISHED
- App::blog()::getPostStatus($s) :
App::status()->post()->name($s)
- App::blog()::getAllPostStatus() :
App::status()->post()->statuses()
- App::blog()::getAllCommentStatus() :
App::status()->comment()->statuses()
- App::blogs()::getAllBlogStatus() :
App::status()->blog()->statuses()
- App::blogs()::getBlogStatus($s) :
App::status()->blog()->name($s)
La discussion continue ailleurs
URL de rétrolien : https://dotclear.watch/trackback/64