/** * @return UUMPWSHelper */ public static function instance() { if ( !self::$instance instanceof self ) { self::$instance = new UUMPWSHelper(); } return self::$instance; }
/** * @return array * @throws Exception */ public static function login() { $db = MMDB::instance(); $corQuery = "SELECT r.code FROM bo_reference r JOIN bo_cluster_has_reference chr ON chr.cluster_identifier = '%s' WHERE r.type = 'country' AND r.id = chr.reference_id"; $cor = $db->arrayQuery( sprintf( $corQuery, ClusterTool::clusterIdentifier() ) ); if( count( $cor ) > 0 ) { $countryOfRegistration = $cor[0]['code']; } else { $countryOfRegistration = eZINI::instance('site.ini')->variable('RegionalSettings', 'CountryOfRegistration'); } $loginParameters = array( 'data' => array( 'identifier' => $_POST['username'], 'password' => $_POST['password'], 'rememberme' => 'on', 'countryOfRegistration' => $countryOfRegistration ), ); // Check login / password from ESB $esbResult = new ESBResult(); $isPopulated = ServiceLoginUUMP::populateESBResult($esbResult, UUMPWSHelper::call("login", $loginParameters)); if ( !$isPopulated ) { throw new Exception('ESB not available', 21); } elseif ( $esbResult->errorCode != 0 ) { throw new Exception($esbResult->msg, intval(strval(22) . strval($esbResult->errorCode))); } elseif ( !$esbResult->login ) { throw new Exception($esbResult->msg, 23); } if ( !$isPopulated ) { // error log caught on WS stack throw new Exception($esbResult->msg, $esbResult->errorCode); } // Log user on ESB $rememberMe = ( isset($_POST['rememberme']) && $_POST['rememberme'] == 'on' ); $loginResult = self::esbLogin($_POST['username'], $esbResult, $rememberMe, false); $registrationDate = $loginResult['params']['Registration_date']; $registrationTimestamp = strtotime($registrationDate); // Create response $out = array( 'clusterIdentifier' => ClusterTool::clusterIdentifier(), 'cookies' => array() ); $user = MMUsers::fetchByIdAndCountry($loginResult['params']['Username'], $countryOfRegistration); $loginResult['params']['mmSettings'] = $user->getMMSettings(); $loginResult['params']['unorderedAppList'] = $user->getApplicationList(); $loginResult['params']['alterboxMsgReset'] = $user->hasPreference('alterboxMsgReset') ? $user->getPreferences('alterboxMsgReset') : true; self::backendLog($loginResult['params']); $cookies = self::cookieHeaderParse(headers_list()); foreach ( $cookies as $cookie ) { $value = $cookie['value']; $out['cookies'][$value['key']] = $value['value']; } $out['profil'] = array( 'email' => $loginResult['params']['Email_address'], 'firstname' => $loginResult['params']['Firstname'], 'lastname' => $loginResult['params']['Lastname'], 'userSpeciality' => $loginResult['params']['User_specialty'], 'mainSpeciality' => $loginResult['params']['User_specialty'], 'customerType' => $loginResult['params']['Customer_type'], 'city' => $loginResult['params']['City'], 'registrationCountry' => $loginResult['params']['Country_of_registration'], 'language' => $loginResult['params']['Language'], 'postalCode' => $loginResult['params']['Postal_Code'], 'username' => $loginResult['params']['Username'], 'specialities' => $user->getSpecialities(), 'visitorSpecialtyLabel' => SolrSafeOperatorHelper::getTaxoTranslation( 'user_specialty', $loginResult['params']['User_specialty'] ), 'visitorTypeLabel' => SolrSafeOperatorHelper::getTaxoTranslation( 'customer_type', $loginResult['params']['Customer_type'] ), 'visitorValidated' => $esbResult->validated, 'registrationYear' => date('Y', $registrationTimestamp), 'registrationMonth' => date('m', $registrationTimestamp), 'registrationDate' => date('Ymd', strtotime($registrationDate)), 'registrationDSR' => ceil((time() - $registrationTimestamp)/3600/24), ); $out['common_javascript'] = self::getJavascript('home-page', 'common'); $out['session_lifetime'] = intval(eZINI::instance('merck.ini')->variable('WSMobile', 'SessionLifetime')); $applicationList = self::applicationList(); return array_merge($out, $applicationList); }