Drupal - Workflow - définir le statut de publication par défault pour certains utilisateurs

Dans le cadre d'un workflow de publication, les contenus sont dans un état par défaut, le plus souvent brouillon (draft), ce qui est très bien. 

Dans le cadre de la mise en place d'un processus de relecture de contenu pour des nouveaux contributeurs, je ne voulais pas perdre les webmaster existants, qui eux peuvent publier du contenu directement. 

J'ai donc créé une nouvelle permission : 

 use published as default moderation state:
  title: 'Nouveaux contenus en état de modération « published » par défaut'
  restrict access: true

que j'ai affecté à mon rôle webmaster.

J'ai ensuite utilisé le hook_form_alter, pour que dans le cas de la création d'un nouveau nœud par un webmaster, le contenu soit par défaut en « published » afin qu'il ne rentre pas dans le processus de relecture, sauf s'il le veut explicitement.

Mes contributeurs n'ayant pas la permission crée précédemment, ils rentrent donc dans le processus de relecture.

  #[Hook('form_alter')]
  public function formAlter(&$form, FormStateInterface $form_state, $form_id): void {
    // Set default state to published for user that have the permission to do so.
    if (isset($form['moderation_state']['widget'][0]['state']['#default_value'])) {
      if ($form_state->getFormObject() instanceof EntityFormInterface) {
        $entity = $form_state->getFormObject()->getEntity();
        if ($entity instanceof NodeInterface) {
          // If the entity is new, set it as published.
          if ($entity->isNew()) {
            if ($this->currentUser->hasPermission('use published as default moderation state')) {
              $form['moderation_state']['widget'][0]['state']['#default_value'] = 'published';
            }
          }
        }
      }
    }
  }

 

 

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...