[non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Cette catégorie regroupe les demandes d'aide à l'utilisation du logiciel MedshakeEHR.
marsante
Messages : 175
Inscription : 25 juil. 2020, 18:42

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par marsante »

Concernant la première erreur, en fait elle n’apparaît pas non plus avec le code original quand j'exporte manuellement le path. Le pb doit juste venir de l'exécution en cli j'imagine.

Concernant la deuxième j'ai testé la variable $params qui est vide. Mais je ne sais pas si c'est ça qu'il faut tester
marsante
Messages : 175
Inscription : 25 juil. 2020, 18:42

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par marsante »

Au final en décortiquant la ligne 305, j'ai compris que $params est un tableau, qu'il est crée grâce à la fonction privée getUserParams appliqué à l'objet clicRDV et que cette fonction privée ressemble à ça ligne 93 :

Code : Tout sélectionner

private function _getUserParams() {
        return msSQL::sql2tabKey("SELECT dt.name,od.value
        FROM data_types AS dt left join objets_data AS od
        ON od.typeID=dt.id AND od.toID='".$this->_userID."' AND od.outdated='' AND od.deleted=''
        WHERE dt.groupe='user'", 'name', 'value');
    }
j'ai remplacé le user par admin (je suppose par rapport à la dernière maj)

Code : Tout sélectionner

private function _getUserParams() {
        return msSQL::sql2tabKey("SELECT dt.name,od.value
        FROM data_types AS dt left join objets_data AS od
        ON od.typeID=dt.id AND od.toID='".$this->_userID."' AND od.outdated='' AND od.deleted=''
        WHERE dt.groupe='admin'", 'name', 'value');
    }
Plus de message d'erreur, mais ça ne fonctionne toujours pas. Je ne sais pas si c'est la bonne logique à avoir donc je vais attendre une relecture avant de pousser la modif, mais de toute façon il y a probablement encore autre chose.

Sinon concernant cette ligne présente dans tous les crons

Code : Tout sélectionner

$homepath=getcwd().'/';
,
qui est hasardeuse quand on l'exécute en cli. Est ce que ça vaut le coup que je pousse une modif

Code : Tout sélectionner

$homepath=getenv("MEDSHAKEEHRPATH").'/';
ou ça ne pose pas de problème quand c'est fait sur l'interface web ou est ce que ça devrait être géré par le fichier routes ?
Avatar de l’utilisateur
Indelog
Administrateur
Messages : 71
Inscription : 10 juil. 2020, 10:06

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par Indelog »

Arf... a vu de nez il me semble que le problème vient du fait que la fonctionnalité n'ai pas suivis les évolutions de Medshake (mais je peut pas testé j'utilise pas clicRdv donc j'en sait trop rien...).

Peut être incompatibilité avec des évolutions de l'API click to call ou les paramètres de configuration qui sont pas bien chargés. Un peut plus bas dans la méthode msClicRDV:syncEvents() y a un curl qui est effectué (ligne 329), faudrait voire ce qui est retourné.

Tu demandait comment tu peut voire le contenus de variables avec php perso j'utilise Xdebug qui fait plein de truc y compris dumper le contenus de variable avec la fonction var_dump($la_variable). Pour l'activer installe le paquet php-xdebug et redémare apache. Evite de le faire sur la prod pour des raison de sécurité. Si tu peut aussi avoir un dump de contenus de variable sans utiliser Xdebug en faisait :

Code : Tout sélectionner

echo '<pre>';
print_r($ta_variable);
echo '</pre>';

mais c'est moins détaillé.

Attention selon le moment ou tu fait ton dump le résultat peut sortir avant que la page soit rendus (et être masqué par la barre de menus de Medshake qu'il faut alors maqué pour voire la variable ou alors afficher directement le source html). Tu peut aussi stocker le contenus de la variable dont tu veux obtenir le contenus dans une globale la dumper à la fin du script public_html/index.php. Attention on peut pas déboguer les script ajax avec cette technique (d'ailleur on les fait planter car le contenus json renvoyé n'est plus correcte). Dans ce cas j'ouvre directement la requette via le débogeur Firefox en allant dans dans l’onglet Réseau et en faisant un clique doit Ouvrir dans un nouvel onblet sur la ligne de la requette. Ou en peut encore dumper le contenus sérialisé d'une variable dans une fichier avec un truc du genre :

Code : Tout sélectionner

file_put_contents('/tmp/mon_dump', serialize($ma_variable));

Pour le script cron j'ai déjà rencontré le php pour rappelsSMS-allMySMS.php et poussé un corectif mais comme je suis un peut con j'ai pas pensé à corriger les autre script...

En gros j'ai fait ça :

Code : Tout sélectionner

if (!empty($homepath=getenv("MEDSHAKEEHRPATH"))) $homepath=getenv("MEDSHAKEEHRPATH");
else $homepath=preg_replace("#cron$#", '', __DIR__);
DEMAREST Maxime (Indelog)
marsante
Messages : 175
Inscription : 25 juil. 2020, 18:42

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par marsante »

Super merci, je vais tenter d'installer ça. Bon après la fonctionnalité a quand même globalement bien suivit l'évolution, vu que la synchro dans les paramètres utilisateurs marche nickel. J'espère que je vais trouver avec l'outil de débug.

Pour le fix j'avais regardé les fichiers aux dessus et en dessous mais pas les deux derniers, donc je n'avais pas vu. (Comme la cli cet été d'ailleurs que j'ai trouvé récemment, merci pour la fonction :D )

Je prépare les autres fichiers du coup comme ça ça sera fait.

marsante
Messages : 175
Inscription : 25 juil. 2020, 18:42

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par marsante »

Bonjour à tous, j'ai enfin eu le temps de tester tout ça.

Concernant php-debug, je ne suis pas trop sûr de son utilisation. En rajoutant diverses lignes dans le php.ini et le var dump dans le msClicrdv.php en faisant suite aux variables rien n’apparaît. Quand je le place à la fin du fichier index.php j'obtiens deux valeurs null (j'ai testé la variable params (304) et la variable res (ligne 329)) mais j'imagine que ce n'est pas la bonne méthode pour dumper une variable sur une ligne spécifique. J'ai pu le tester dans une vm connectée à l'ide codium (vu que l’essentiel des tutos que je trouve l'utilisent comme ça), et là l'exécution pas à pas bloquait au niveau de la fonction private function _getUserParams() quand le dt.groupe était égal à user et ne bloquait plus quand c'était remplacé par admin sans pour autant mieux synchroniser le calendrier. Mais je me suis rendu compte aussi que je pouvais tester si les requêtes partaient en appuyant sur le bouton de synchro. Bilan, le bouton marche, des requêtes partent : https://msehr.local/agenda/3/ajax/getEvents/?start=... en GET https://msehr.local/agenda/3/ajax/synchronizeEvents/ et https://msehr.local/ajax/getPatientsOfTheDay/ en POST. Le json du synchronizeEvents renvoie : "l'opération n'a pas pu être effectuée" qui correspond à ce code :

Code : Tout sélectionner

$clicrdv=new msClicRDV();
$clicrdv->setUserID($match['params']['userID']);
$ret=$clicrdv->syncEvents();

if ($ret===false) {
    die(json_encode(array("status"=>"l'opération n'a pas pu être effectuée")));
} elseif ($ret!==true) {
    die(json_encode(array("status"=>$ret)));
}

ret qui dans le msClicrdv est utilisée dans les fonctions getRelatedPatients getLocalPatients

Code : Tout sélectionner

$ret[0]=msSQL::sql2tabKey("SELECT od.toID, od.value
              FROM objets_data AS od left join data_types AS dt
              ON od.typeID=dt.id AND od.outdated='' AND od.deleted=''
              WHERE dt.name='clicRdvPatientId'", 'toID', 'value');

clicRdvPatientId n'existe plus dans la bdd actuelle, en 2018 c'était foutue ainsi :

Code : Tout sélectionner

(513, 'admin', 'clicRdvPatientId', 'ID patient', 'ID patient', 'ID patient', '', '', 'text', '', 'base', 26, 1, '2018-01-01 00:00:00', 3600, 1),

Je ne sais pas si c'est à dessein ou pas, je vais essayer de tester ça, je vous tiens au courant. Si vous voyez autre chose n'hésitez pas à me dire que je teste.

marsante
Messages : 175
Inscription : 25 juil. 2020, 18:42

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par marsante »

Je n'avais pas eu le temps de recommencer les tests. Concernant la ligne précédente, elle manque en effet. Cela ne résout pas le problème pour autant. Je n'arrive toujours pas à faire de var_dump dans la class msClicRDV.php, par contre j'ai réussi à en faire dans le cron clicRdv.php pour la variable clicrdv et ret.
clicrdv donne :

Code : Tout sélectionner

class msClicRDV#4 (4) {
  private $_userID =>
  int(3)
  private $_groupID =>
  NULL
  private $_calID =>
  NULL
  private $_userpwd =>
  NULL
}

et ret donne : bool(false)

la fonction setUserID à l'air de bien fonctionner comme les fichiers inc-ajax-updateGroups.php, inc-ajax-updateCals.php, inc-ajax-updateConsults.php, userAjax.php, inc-ajax-userParametersClicRdv.php fonctionnent et se synchronisent par rapport à clicrdv

la fonction syncEvents, comme les fonctions modEvent, sendEvent, delEvent n'ont pas l'air de fonctionner.

les fonctions getUserParams, getInterventions getCalendars, getGroups, setUserPwd, fonctionnent.

Je n'ai pas testé les fonctions getLocalPatients et getRelatedPatients qui ont également une variable ret.

Est-ce que vous auriez des idées pour tester les fonctions restantes / est-ce qu'en lisant ces fonctions il y a un truc qui vous choque ?

Merci beaucoup

Avatar de l’utilisateur
Indelog
Administrateur
Messages : 71
Inscription : 10 juil. 2020, 10:06

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par Indelog »

marsante a écrit : 13 juil. 2021, 17:38

Cela ne résout pas le problème pour autant. Je n'arrive toujours pas à faire de var_dump dans la class msClicRDV.php

Si tu fait un var_dump() pour afficher le résultat directement dans la sortie html et que le le résultat doit provenir d'un requête ajax qui renvoie du json, ça va foirer car la sortie de var_dump() va venir "déformer" le json qui ne sera plus interprétable. Un solution peut être de sortir le contenus de la variable dans un fichier avec file_put_content() et serialize() comme ceci :

Code : Tout sélectionner

file_put_content($homepath.'mydump', serialize($la_variable_que_tu_veux));

Cela mettra le contenus de $la_variable_que_tu_veux (au format [serialize()](https://www.php.net/manual/en/function.serialize)) dans le fichier mydump du homepath de MedShake (c'est pratique pour déboguer facilement des requêtes ajax).

marsante a écrit : 13 juil. 2021, 17:38

la fonction syncEvents, comme les fonctions modEvent, sendEvent, delEvent n'ont pas l'air de fonctionner.

Au vu des méthode concernées, ce serai pas le lock qui les bloque ?

Peut tu fournir le retour de la requête sql suivante ?

Code : Tout sélectionner

SELECT value FROM `system` WHERE groupe='lock' and name='clicRDV'
marsante a écrit : 13 juil. 2021, 17:38

Est-ce que vous auriez des idées pour tester les fonctions restantes / est-ce qu'en lisant ces fonctions il y a un truc qui vous choque ?

Juste pour savoir, les paramètres de configuration clicRdv, sont ils renseignés de manière globale uniquement ou aussi au niveau de l’utilisateur ? Peut tu essayer de renseigner ces paramètres directement dans ceux de l'utilisateur si ce n'est pas le cas. (je me demande si certains paramètres ne sont pas retrouvés si ils ne sont pas directement renseigner pour l'utilisateur)

Pour essayer de voire ce qui cloche avec msClicRDV::sycEvents(), peut tu essayer d'ajouter :

Code : Tout sélectionner

file_put_content($homepath.'mydump', serialize($params));

Juste sous (c'est à la deuxième ligne de la méthode) :

Code : Tout sélectionner

$params=$this->_getUserParams();

et voire si tout les paramètres on bien une valeur (dans le fichier mydump qui sera à la racine de ton homepath MedShake).

Peut tu aussi vérifier le résultat de ce qui est envoyé par $this->_sendCurl() en obtenant de résultat de la variable $res ?

DEMAREST Maxime (Indelog)
marsante
Messages : 175
Inscription : 25 juil. 2020, 18:42

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par marsante »

Merci beaucoup.

J'avais loupé l'info pour le file_put_content. Quand je le mets en place cela entraîne une erreur 500 sur le /ajax/synchronizeEvents et le message : undefined Il y a un problème. Il faut recharger la page. Qui est à priori une conséquence de l'erreur 500. En créant le fichier mydump à l'avance pareil. Il faut recharger la page.Je dois encore mal l'utiliser.

Je l'ai fait ainsi par ex :

Code : Tout sélectionner

public function syncEvents() {
        try {
            $params=$this->_getUserParams();
			file_put_content($homepath.'mydump', serialize($params));

Pour la base de données la valeur du lock est à false

Code : Tout sélectionner

MariaDB [medshakeehr]> SELECT value FROM `system` WHERE groupe='lock' and name='clicRDV'
    -> ;
+-------+
| value |
+-------+
| false |
+-------+
1 row in set (0.001 sec)
Avatar de l’utilisateur
Indelog
Administrateur
Messages : 71
Inscription : 10 juil. 2020, 10:06

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par Indelog »

marsante a écrit : 20 juil. 2021, 19:39

Quand je le mets en place cela entraîne une erreur 500

C'est moi qui suis un peut con... $homepath n'est pas déclaré en variable global. Essai avec ceci :

Code : Tout sélectionner

global $p;
file_put_content($p['homepath'].'mydump', serialize($params));
DEMAREST Maxime (Indelog)
marsante
Messages : 175
Inscription : 25 juil. 2020, 18:42

Re: [non vraiment ;-) Résolu] Problème paramètre utilisateur lors de l'activation de clicrdv

Message non lu par marsante »

j'avais essayé et aussi avec global $homepath; sans succès :D le message d'erreur est le même

Répondre