[Résolu] Intéraction entre Block Upload et Workflow

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai créé un site sous Drupal 7 avec un circuit de validation de contenu via un workflow.

Dans ce contenu, je fais intervenir le module Block Upload qui est affiché dans le contenu de la page.

Mon workflow est paramétré de sorte qu'une étape "verrouillage" viens bloquer toute modification du contenu. Mon soucis est que le Block Upload ne prend pas en compte le workflow et malgré le fait que l'on ne peux modifier le contenu, l'upload de nouveaux fichier dans le contenu est toujours possible.

Je cherche donc un moyen de dire à mon Block de ne plus s'afficher dans le contenu de la page lorsque l'étape du workflow est en "vérouillage".

J'ai essayé de gérer cette contrainte avec le module Rules et Rules bonus block mais cela ne fonctionne pas.

Une autre solution serait d'écrire dans la configuration du bloc pour certaines pages seulement sur lesquelles le code PHP renvoie TRUE (désolé je recopie bêtement la config du bloc). Mais je ne suis pas un expert en code PHP et je ne trouve aucune doc sur le sujet.

J'espère que j'ai bien expliqué la situation.

Merci d'avance pour vos réponses qui pourraient m'aider sur le sujet.
Eomer.

Version de Drupal : 

Bonsoir,

Si tu utilises le module workflow.

Tu peux utiliser la fonction workflow_get_workflow_node_by_nid($nid).
Si ta page de noeud est node/33. On vérifie que arg(1) c'est à dire 33 existe, est numeric et que le workflow du noeud 33 est verrouillage :

<?php
 
if ((!empty(arg(1)))
&& (
is_numeric(arg(1)))
&& (
workflow_get_workflow_node_by_nid(arg(1)) == "verrouillage")
) {
    return
TRUE;
}
else {
    return
FALSE;
}
?>

J'ai pas testé ce code mais ça doit être proche de ce que tu veux faire.

Bonne soirée,

Merci pour cette réponse rapide.
J'ai testé d'incorporer ce code dans la config du bloc et il me retourne cette erreur :

Fatal error: Can't use function return value in write context in /var/www/plateforme-test/modules/php/php.module(80) : eval()'d code on line 3

Je ne sais pas vraiment à quoi est dû le soucis, j'utilise le thème Garland de base et je n'ai modifié aucun fichier php sur mon site.

Merci encore une fois !
Je pense que cette solution marche mais je sais pourquoi dans mon cas elle ne marche pas.

Je vais tâcher de bien expliquer la situation.
J'ai un type de contenu "Réunion" et un autre type de contenu "Point du jour" qui permet d'établir un ordre du jour de la réunion(le lien se fait lors de la création du "Point du jour" par le biais d'un node reference sur la réunion).

Le workflow de validation s'effectue sur la Réunion. Le block upload s'affiche dans le Point du jour.

C'est pourquoi le bloc ne s'affiche pas avec le code actuel car il va faire le test sur le node du point du jour auquel aucun workflow n'est assigné. Pour que cela marche, il faudrait faire le test sur le node reference attaché à ce nœud (la réunion donc).

Désolé je ne pensais pas en postant ma question de départ que j'aurais besoin d'aller dans autant de détail. Si vous connaissez un moyen de faire le test sur l'état du workflow du node reference du $agr(1) je suis preneur :)

Sinon je vais revoir ma solution pour mettre le workflow sur le point du jour.

Merci pour ces pistes.

Malheureusement, n'aillant que peu de connaissances en php je comprend le principe de ces fonctions mais n'est pas en mesure des les appliquer pour mon cas. Je vais réfléchir à une autre solution.

J'ai adapté mon workflow pour que la validation se fasse sur le bon contenu.

En revanche, je n'arrive toujours pas au résultat...
J'ai fait plusieurs test et il semblerais qu'il n'arrive pas à prendre en compte la fonction workflow_get_workflow_node_by_nid

J'ai essayé avec d'autres fonctions du type workflow_node_current_state en faisant le test avec le $sid de l'état "verrouillage" mais même résultat.

Est-ce que le fait d'intégrer des fonctions de ce type (workflow) dans la config du module est tout simplement possible ? Je parle bien dans la config du blockupload et non dans le fichier blockupload.module

Mission accomplie !

Avec l'aide d'un collègue (merci beaucoup à lui !) nous avons pu sortir un code qui utilise la fonction workflow_node_current_state, le reste de la fonction se fait avec le $sid de l'état du workflow situé dans la base de données (table wokflow_states).

Je le poste si cela peut-être utile à quelqu'un.

<?php
if(is_numeric(arg(1))) {
 
$node = node_load((int)arg(1));
  return
workflow_node_current_state($node) != 6;
}
return
FALSE;
?>

Merci pour vos réponses et bonne continuation.