/** * Création du "médecin" indéterminé * * @return integer */ function createIndeterminateDoctor() { $sender = $this->_ref_sender; $user = new CUser(); $user->user_last_name = CAppUI::conf("hl7 indeterminateDoctor") . " {$sender->group_id}"; if (!$user->loadMatchingObjectEsc()) { $mediuser = new CMediusers(); $mediuser->_user_last_name = $user->user_last_name; return $this->createDoctor($mediuser); } return $user->loadRefMediuser()->_id; }
/** * Récupération des médecins * * @param DOMNode $node Node * @param CSejour $mbVenue Venue * * @return CSejour */ function getMedecins(DOMNode $node, CSejour $mbVenue) { $xpath = new CHPrimXPath($node->ownerDocument); $sender = $this->_ref_echange_hprim->_ref_sender; $medecins = $xpath->queryUniqueNode("hprim:medecins", $node); if ($medecins instanceof DOMElement) { $medecin = $medecins->childNodes; foreach ($medecin as $_med) { $mediuser_id = $this->getMedecin($_med); $lien = $xpath->getValueAttributNode($_med, "lien"); if ($lien == "rsp") { $mbVenue->praticien_id = $mediuser_id; } } } // Dans le cas ou la venue ne contient pas de medecin responsable // Attribution d'un medecin indeterminé if (!$mbVenue->praticien_id) { $user = new CUser(); $mediuser = new CMediusers(); $user->user_last_name = CAppUI::conf("hprimxml medecinIndetermine") . " {$sender->group_id}"; if (!$user->loadMatchingObject()) { $mediuser->_user_last_name = $user->user_last_name; $mediuser->_id = $this->createPraticien($mediuser); } else { $user->loadRefMediuser(); $mediuser = $user->_ref_mediuser; } $mbVenue->praticien_id = $mediuser->_id; } return $mbVenue; }
/** * @param CUser $user * @param array $values * * @return CUser */ static function mapTo(CUser $user, $values) { $user->user_username = self::getValue($values, "samaccountname"); $user->user_first_name = self::getValue($values, "givenname"); $user->user_last_name = self::getValue($values, "sn") ? self::getValue($values, "sn") : self::getValue($values, "samaccountname"); $user->user_phone = self::getValue($values, "telephonenumber"); $user->user_email = self::getValue($values, "mail"); $whencreated = null; if ($when_created = self::getValue($values, "whencreated")) { $whencreated = CMbDT::date(CMbDT::dateTimeFromAD($when_created)); } $accountexpires = null; if ($account_expires = self::getValue($values, "accountexpires")) { // 1000000000000000000 = 16-11-4769 01:56:35 if ($account_expires < 1000000000000000000) { $accountexpires = CMbDT::date(CMbDT::dateTimeFromLDAP($account_expires)); } } // 66048,Account: Enabled - DONT_EXPIRE_PASSWORD // 66080,Account: Enabled - DONT_EXPIRE_PASSWORD - PASSWD_NOTREQD // 66050 = Disabled $actif = self::getValue($values, "useraccountcontrol") == 66050 ? 0 : 1; $user->loadRefMediuser(); if ($user->_id) { $mediuser = $user->_ref_mediuser; $mediuser->actif = $actif; $mediuser->deb_activite = $whencreated; $mediuser->fin_activite = $accountexpires; $mediuser->_ldap_store = true; $mediuser->store(); } $user->_user_actif = $actif; $user->_user_deb_activite = $whencreated; $user->_user_fin_activite = $accountexpires; return $user; }
/** * Check wether login/password is found * Handle password attempts count * * @param CUser $user User whose password attempt to check * * @return bool True is attempt is successful */ static function checkPasswordAttempt(CUser $user) { $sibling = new CUser(); $sibling->user_username = $user->user_username; $sibling->loadMatchingObject(); $sibling->loadRefMediuser(); $mediuser = $sibling->_ref_mediuser; if ($mediuser && $mediuser->_id) { if (!$mediuser->actif) { self::setMsg("Auth-failed-user-deactivated", UI_MSG_ERROR); return false; } $today = CMbDT::date(); $deb = $mediuser->deb_activite; $fin = $mediuser->fin_activite; // Check if the user is in his activity period if ($deb && $deb > $today || $fin && $fin <= $today) { self::setMsg("Auth-failed-user-deactivated", UI_MSG_ERROR); return false; } } if ($sibling->_login_locked) { self::setMsg("Auth-failed-user-locked", UI_MSG_ERROR); return false; } // Wrong login and/or password if (!$user->_id) { self::setMsg("Auth-failed-combination", UI_MSG_ERROR); // If the user exists, but has given a wrong password let's increment his error count if ($user->loginErrorsReady() && $sibling->_id) { $sibling->user_login_errors++; $sibling->store(); $remainingAttempts = max(0, self::conf("admin CUser max_login_attempts") - $sibling->user_login_errors); self::setMsg("Auth-failed-tried", UI_MSG_ERROR, $sibling->user_login_errors, $remainingAttempts); } return false; } return true; }
} $user = new CUser(); $user->user_last_name = $results[$i]["lastname"]; $user->user_first_name = $results[$i]["firstname"]; $count = $user->countMatchingList(); if ($count == "0") { $results[$i]["error"] = "L'utilisateur n'a pas été retrouvé dans Mediboard"; $i++; continue; } elseif ($count > 1) { $results[$i]["error"] = "Plusieurs utilisateurs correspondent à cette recherche"; $i++; continue; } $user->loadMatchingObject(); $mediuser = $user->loadRefMediuser(); $mediuser->adeli = $results[$i]["adeli"]; if ($msg = $mediuser->store()) { CAppUI::setMsg($msg, UI_MSG_ERROR); $results[$i]["error"] = $msg; $i++; continue; } $i++; } } CAppUI::callbackAjax('$("systemMsg").insert', CAppUI::getMsg()); // Création du template $smarty = new CSmartyDP(); $smarty->assign("results", $results); $smarty->display("update_mediusers_csv.tpl");
/** * Return or create the doctor of the message * * @param DOMNode $node Node * * @return CMediusers|int|null */ function getDoctor($node) { $xpath = new CHPrimSanteMessageXPath($node ? $node->ownerDocument : $this); $nodeDoctor = $xpath->query("P.13", $node); $code = null; $nom = null; $prenom = null; $type_code = null; foreach ($nodeDoctor as $_node_doctor) { $code = $xpath->queryTextNode("CNA.1", $_node_doctor); $nom = $xpath->queryTextNode("CNA.2/PN.1", $_node_doctor); $prenom = $xpath->queryTextNode("CNA.2/PN.2", $_node_doctor); $type_code = $xpath->queryTextNode("CNA.3", $_node_doctor); if ($code && $nom) { break; } } $mediuser = new CMediusers(); $mediuser->_user_last_name = $nom; switch ($type_code) { case "R": $mediuser->rpps = $code; break; case "A": $mediuser->adeli = $code; break; default: if (strlen($code) == 9 && luhn($code)) { $mediuser->adeli = $code; } if (strlen($code) == 11 && luhn($code)) { $mediuser->rpps = $code; } } // Cas où l'on a aucune information sur le médecin if (!$mediuser->rpps && !$mediuser->adeli && !$mediuser->_id && !$mediuser->_user_last_name) { return null; } $sender = $this->_ref_sender; $ds = $mediuser->getDS(); $ljoin = array(); $ljoin["functions_mediboard"] = "functions_mediboard.function_id = users_mediboard.function_id"; $where = array(); $where["functions_mediboard.group_id"] = " = '{$sender->group_id}'"; if ($mediuser->rpps || $mediuser->adeli) { if ($mediuser->rpps) { $where[] = $ds->prepare("rpps = %", $mediuser->rpps); } if ($mediuser->adeli) { $where[] = $ds->prepare("adeli = %", $mediuser->adeli); } // Dans le cas où le praticien recherché par son ADELI ou RPPS est multiple if ($mediuser->countList($where, null, $ljoin) > 1) { $ljoin["users"] = "users_mediboard.user_id = users.user_id"; $where[] = $ds->prepare("users.user_last_name = %", $nom); } $mediuser->loadObject($where, null, null, $ljoin); if ($mediuser->_id) { return $mediuser; } } $user = new CUser(); $ljoin = array(); $ljoin["users_mediboard"] = "users.user_id = users_mediboard.user_id"; $ljoin["functions_mediboard"] = "functions_mediboard.function_id = users_mediboard.function_id"; $where = array(); $where["functions_mediboard.group_id"] = " = '{$sender->group_id}'"; $where[] = $ds->prepare("users.user_first_name = %", $prenom); $where[] = $ds->prepare("users.user_last_name = %", $nom); $order = "users.user_id ASC"; if ($user->loadObject($where, $order, null, $ljoin)) { return $user->loadRefMediuser(); } $mediuser->_user_first_name = $prenom; $mediuser->_user_last_name = $nom; return $this->createDoctor($mediuser); }