Submitted by Eomer on
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.
Bonsoir,
Permalien Soumis par BelleEpoqueAgence le 26 Août, 2013 - 20:20
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 :
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
Permalien Soumis par Eomer le 27 Août, 2013 - 13:58
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.
Nouvel essai ^^ :
Permalien Soumis par BelleEpoqueAgence le 27 Août, 2013 - 14:59
Nouvel essai ^^ :
Merci encore une fois !
Permalien Soumis par Eomer le 27 Août, 2013 - 15:41
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.
Tu auras besoin de ceci :
Permalien Soumis par BelleEpoqueAgence le 27 Août, 2013 - 16:03
Tu auras besoin de ceci :
- entity_metadata_wrapper () https://drupal.org/node/1021556
- node_load()
Merci pour ces pistes.
Permalien Soumis par Eomer le 27 Août, 2013 - 16:29
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
Permalien Soumis par Eomer le 28 Août, 2013 - 11:29
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 !
Permalien Soumis par Eomer le 28 Août, 2013 - 16:47
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.