/**
     * @return UUMPWSHelper
     */
    public static function instance()
    {
        if ( !self::$instance instanceof self )
        {
            self::$instance = new UUMPWSHelper();
        }

        return self::$instance;
    }
Пример #2
0
    /**
     * @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);
    }