Pour cet exercice,
j'ai adapté un test que j'ai écrit en javascript
pour le Centre de psychologie humanitaire.
Brève
description du test
Il existe
différentes formes de stress post-traumatique. Ce test
s'intéresse à toutes ces formes, mais surtout à
une forme encore peu connue, la vicitmisation secondaire, dont
souffrent tout particulièrement les humanitaires. En deux
mots, il s'agit de la réaction du "sauveur" par
rapport au sort de la "victime", qu'il y assiste directement
ou par le biai d'un récit. Ce test est un élément
d'une recherche universitaire, il est utilisé par les humanitaires
intéressés (il y en a déjà beaucoup)
qui y trouvent des réponses appropriées à
leur état, et les réponses ainsi que la valeur des
variables sont transmises par mail au psychologue, qui trouve
là la matière de sa recherche.
L'interface
est volontairement simple, sobre, faite d'espaces bleus et d'espaces
blancs. Elle tient compte de l'état d'esprit des humanitaires
qui, souffrant du PTSD, viennent chercher dans ce test le début
d'un réconfort. L'importance va aux questions et aux réponses,
non à la page, à l'objet informatique.
Le test est
constitué d'une série de 120 questions et trois
parcours: stress traumatique, stress et burn-out. Chaque parcours
se réfère à des séries de questions
qui vont varier au gré des réponses, le but étant
bien évidemment d'obtenir les résultats les plus
précis possible. Il ne s'agit pas ici de décrire
la programmation javascript qui permet ces cheminements variables.
Un formulaire
permet d'envoyer les réponses et les valeurs des variables
à un programme écrit en php (feedbackxml.php) qui
va analyser tout cela, retourner un "diagnostic" et
envoyer le tout au psychologue. Exemple de mail au psychologue::
Subject: Résultats du test PTSD du CPH
To: francois.filliettaz@bluewin.ch
Questionnaire traité le 25 March 2001,
à 6.57 pm
Parcours 1
REPONSES AUX QUESTIONS:
0 : ou vous avez déjà vécu une
situation extrême qui a impliqué un
proche, ami ou collègue, travaillant avec vous,.
1 : assisté à un spectacle de mort.
7 : Tout à fait.
8 : Oui.
9 : Oui.
10 : Oui.
11 : Plutôt oui.
12 : Plutôt oui.
13 : peur.
14 : Non.
15 : 2.
16 : Plutôt oui.
17 : Plutôt oui.
18 : Oui, souvent.
19 : Plutôt oui.
20 : Plutôt oui.
50 : Plutôt oui.
51 : Plutôt non.
52 : Oui, parfois.
53 : Rarement.
54 : Oui, souvent.
55 : Non.
57 : Oui.
58 : Oui, toujours.
59 : Oui, toujours.
60 : Souvent.
61 : il y a moins d\'un mois.
62 : Souvent.
63 : Oui, toujours.
64 : Parfois.
65 : Oui, toujours.
66 : Oui, toujours.
67 : Plutôt non.
68 : Non, rarement.
69 : Oui, parfois.
82 : Rarement.
83 : Oui, parfois.
84 : Rarement.
REPONSES AUX QUESTIONS COMPLEMENTAIRES ID1:
85 : Tout à fait.
86 : pas à la hauteur.
87 : Toujours.
88 : Oui.
89 : Non.
90 : Oui.
REPONSES AUX QUESTIONS COMPLEMENTAIRES ID2:
91 : Non, rien n\'a changé.
92 : Oui.
93 : Plutôt oui.
94 : Souvent.
95 : Non.
96 : Parfois.
97 : Non.
98 : Parfois.
99 : - la vie est pâle et opaque, sans goût.
REPONSES AUX QUESTIONS COMPLEMENTAIRES CT1:
100 : Oui.
101 : Non.
102 : Parfois.
103 : Oui.
104 : Non.
105 : Oui.
106 : Oui.
REPONSES AUX QUESTIONS COMPLEMENTAIRES CT2:
107 : Oui.
108 : Souvent.
109 : Toujours.
110 : Plutôt oui.
111 : Non.
112 : Oui.
113 : Non.
114 : Oui.
115 : Non.
116 : Oui.
117 : Oui.
118 : Souvent.
119 : Non.
120 : Oui.
VALEURS DES VARIABLES:
pays d'origine :suisse
pays de la mission :bouthan
durée :15
âge :39
mariage :oui
travail en couple :non
enfant(s) :oui
événement :19
évitement: 3
burnout: 2
répétition: 7.5
dissociation: 8.5
symptôme: 21
stress soc: null
stress psy: 0.5
stress physique: 2
stress: 4
activation: 2
Le parsing
(dans le fichier: feedbackxml.php)
Les "diagnostics"
sont rassemblés, pour simplifier la traduction, dans un
fichier xml: cphxml.xml. J'ai utilisé trois fonctions
adaptées de l'article "Dom Xml: An Alternative
to Expat", de Matt Dunford, pour aller rechercher les
bons diagnostics, et les afficher en retour. Ces fonctions se
trouvent dans feedbackxml.php.
#DOM XML fonctions tirées de l'article
"Dom Xml: An Alternative to Expat", de Matt Dunford.
function get_content($parent)
{
$nodes = $parent->children();
while($node=array_shift($nodes))
if($node->type==XML_TEXT_NODE)
return $node->content;
return"";
}
function find_content($parent,$name)
{
$nodes = $parent->children();
while($node = array_shift($nodes))
if ($node->name == $name)
return get_content($node);
return "";
}
$doc = xmldocfile("cphxml.xml") or
die("cphxml.xml: qqch ne joue pas.");
$root = $doc->root();
$reponses_children = $root->children();
while($reponse = array_shift($reponses_children))
{
if($reponse==XML_TEXT_NODE)
continue;
$numero = find_content($reponse,"numero");
$txt= find_content($reponse,"texte");
${"reponse$numero"}=$txt;
}
# fin DOM XML
# afficher les diagnostics
if ($varparc == 1) {
if (isset ($evenement)) {
if ($evenement <= 10) {
$repFinale1 = $reponse0;}
elseif ($evenement <= 20) {
$repFinale1 = $reponse1;}
elseif ($evenement > 20) {
$repFinale1 = $repons2;}
print "<font FACE ='Arial'>$repFinale1</font><BR>";
}
if (isset ($symptome)) {
if ($symptome <= 16) {
$repFinale2 = $reponse3;}
elseif ($symptome <= 32) {
$repFinale2 = $reponse4;}
elseif ($symptome > 32){
$repFinale2 = $reponse5;}
print "<font FACE ='Arial'>$repFinale2</font><BR>";
}
if (($evenement + $symptome)<=25) {
$repFinale3 = $reponse6;}
elseif (($evenement + $symptome)<=50) {
$repFinale3 = $reponse7;}
elseif (($evenement + $symptome) > 50){
$repFinale3 = $reponse8;}
print "<font FACE ='Arial'>$repFinale3</font><BR>";
}
if ($varparc == 2) {
if ($burnout <= 8) {
$repFinale1 = $reponse9;}
elseif ($burnout <= 16) {
$repFinale1 = $reponse10;}
elseif ($burnout > 16) {
$repFinale1 = $reponse11;}
print "<font FACE ='Arial'>$repFinale1</font><BR>";
}
if ($varparc == 3){
if ($tousstress <= 19){
$repFinale1 = $reponse12;}
elseif ($tousstress <= 39){
$repFinale1 = $reponse13;}
elseif ($tousstress > 39) {
$repFinale1 = $reponse14;}
print "<font FACE ='Arial'>$repFinale1</font><BR>";
}