/**
     * @param eZContentObjectTreeNode $node
     * @return string
     */
    public function getNodeUrl( &$node = null )
    {
    
        $merckIni = ExternalLinkHandlerBase::iniMerck();
        
        $baseUrl = $merckIni->variable( 'AustriaCodexSettings' , 'BaseLoginUrl' );
        $user = $merckIni->variable( 'AustriaCodexSettings' , 'UserLogin' );
        $pwd = $merckIni->variable( 'AustriaCodexSettings' , 'UserPassword' );
        $key = $merckIni->variable( 'AustriaCodexSettings' , 'SecretKey' );
        
        $timeStamp = time();
        
        $checkSum = $timeStamp.strtoupper($pwd).$key;
        $checkSum = md5($checkSum);
        
        $params = array(
            'p1' => $user,
            'p2' => $timeStamp,
            'p3' => $checkSum
        );

        $queryString = http_build_query($params);
        $url = $baseUrl.'&'.$queryString;

        return $url;
        
    }
    /**
     * @param eZContentObjectTreeNode $node
     * @return string
     */
    public function getNodeUrl( &$node = null )
    {
        $merckIni = ExternalLinkHandlerBase::iniMerck();
        $user = MMUsers::getCurrentUserObject();

        if ( !$user )
        {
            self::redirectToErrorPage();
        }

        $restUrl = $merckIni->variable( 'DriOnlineSettings', 'BaseLoginUrl' );

        $vectorShared = mcrypt_create_iv( self::iv_size() );

        $params = array(
            'username'      =>  $user->attribute( 'uuid' ),
            'speciality'    =>  $user->attribute( 'main_speciality' ),
            'referrer'      =>  $merckIni->variable( 'DriOnlineSettings', 'Referrer' ),
            'action'        =>  $merckIni->variable( 'DriOnlineSettings', 'Action' ),
            'request_time'  =>  time()
        );

        $encodeArray = json_encode( $params );

        $encodeArray = self::pad( $encodeArray );
        $userEncrypt = $this->encrypt( $encodeArray, $vectorShared );

        $urlParams = array(
            'v'     =>  base64_encode( $vectorShared ),
            'val'   =>  base64_encode( $userEncrypt )
        );

        return array( 'url' => $restUrl, 'params' => $urlParams );
    }
    public function __construct($applicationId)
    {
        parent::__construct($applicationId);

        $this->encryptionKey = $this->application()->getCustomParameter('EncryptionKey');
        $this->encryptionCipher = MCRYPT_3DES;
        $this->encryptionMode = MCRYPT_MODE_NOFB;
    }
    /**
     * @return eZINI
     */
    static public function iniMerck()
    {
        if(is_null(self::$_iniMerck))
        {
            self::$_iniMerck = eZINI::instance('merck.ini');
        }

        return self::$_iniMerck;
    }
    /**
     * @param eZContentObjectTreeNode $node
     * @return array
     */
    public function getNodeUrl( &$node = null )
    {
        $merckIni = ExternalLinkHandlerBase::iniMerck();
        $action = $merckIni->variable( 'AlexandriaSettings' , 'Action' );
        $referer = $merckIni->variable( 'AlexandriaSettings' , 'Referer' );
        $uuid = MMUsers::getCurrentUserObject()->uuid;
        $baseUrl = $merckIni->variable( 'AlexandriaSettings' , 'BaseLoginUrl' );
        $url = $this->application()->applicationLocalized()->external_url;
        $requestTime = time();
        
        if ( !$uuid )
        {
            self::redirectToErrorPage();
        }
        
        $vectorShared = mcrypt_create_iv( Crypter::iv_size() );
        
        $params = array(
            'username' => $uuid,
            'referer' => $referer,
            'action' => $action,
            'request_time' => $requestTime,
            'URL' => $url
        );

        $encodeArray = json_encode( $params );
        $encodeArray = Crypter::pad( $encodeArray );
        $userEncrypt = Crypter::encrypt( $encodeArray, $vectorShared );
        
        $urlParams = array(
            'v'   =>  base64_encode( $vectorShared ),
            'val' =>  base64_encode( $userEncrypt )
        );
        
        return array( 'url' => $baseUrl, 'params' => $urlParams );
    }
    /**
     * @param eZContentObjectTreeNode $node
     * @return string
     */
    public function getNodeUrl( &$node = null )
    {
        $merckIni = ExternalLinkHandlerBase::iniMerck();
        $user = MMUsers::getCurrentUserObject();

        if ( !$user )
        {
            self::redirectToErrorPage();
        }

        $esbParams = $merckIni->variable( 'EsbSettings', 'AvailableParams' );
        if ( !in_array( 'Validation_status', $esbParams ) )
        {
            $esbParams[] = 'Validation_status';
        }

        // esb part of url generating
        $parameters = array(
            'Data' => array(
                'Username' => $user->attribute( 'uuid' ),
                'Params' => $esbParams
            ),
            'cr' => $user->attribute( 'country' )
        );
        $esbResponse = WSHelper::call( 'read', $parameters );
        if ( !isset( $esbResponse['Data']['Params']['Email_address'] ) )
        {
            self::redirectToErrorPage();
        }

        $validStatuses = array(
            'VP',
            '30'
        );
        $isProperStatus = isset( $esbResponse['Data']['Params']['Validation_status'] ) && in_array( $esbResponse['Data']['Params']['Validation_status'], $validStatuses );

        // test if proper ESB response - mainly status = Success
        if ( !$isProperStatus )
        {
            self::redirectToErrorPage();
        }
        $soapUser = $esbResponse['Data']['Params']['Email_address'];
        $soapPassword = $merckIni->variable( 'MdConsultSettings', 'SoapPassword' );
        $applicationId = $merckIni->variable( 'MdConsultSettings', 'ApplicationId' );
        $apiKey = $merckIni->variable( 'MdConsultSettings', 'ApiKey' );
        $headerNamespace = $merckIni->variable( 'MdConsultSettings', 'HeaderNamespace' );
        //$soapUrl = $merckIni->variable( 'MdConsultSettings', 'SoapUrl' );
        // @dirty fix => we use a local version of the WSDL because of some type declaration duplicates
        $soapUrl = __DIR__.'/externallinkhandlerbrmdconsult.xml';
        
        $headerbody = array(
            'UsernameToken' => array(
                'Username' => $apiKey,
                'Password' => $soapPassword
            )
        );

        // soap part of url generating
        $soap = new SoapClient( $soapUrl );

        $header = new SOAPHeader( $headerNamespace, 'Security', $headerbody, false );
        $soap->__setSoapHeaders( $header );

        $params = array(
            array(
                'SiteID' => 'MSDBRZL',
                'UserName' => $soapUser,
                'ApplicationId' => $applicationId
            )
        );

        $user = '';
        $password = '';
        try
        {
            $result = $soap->__soapCall( 'GetThirdPartyCredencials', $params );

            if ( isset( $result->GetThirdPartyCredencialsResult ) && isset( $result->GetThirdPartyCredencialsResult->LOVValue ) )
            {
                $credentials = $result->GetThirdPartyCredencialsResult->LOVValue;

                if ( isset( $credentials->lovIDField ) )
                {
                    $user = $credentials->lovIDField;
                }
                else
                {
                    self::redirectToErrorPage();
                }
                if ( isset( $credentials->valueField ) )
                {
                    $password = $credentials->valueField;
                }
                else
                {
                    self::redirectToErrorPage();
                }
            }
            else
            {
                self::redirectToErrorPage();
            }
        }
        catch ( SoapFault $f )
        {
            self::redirectToErrorPage();
        }

        $url = $merckIni->variable( 'MdConsultSettings', 'MdUrl' );

        $searches = array(
            '<$md_user>',
            '<$md_password>'
        );
        $replacements = array(
            $user,
            $password
        );

        $url = str_replace( $searches, $replacements, $url );
        return $url;
    }
    /**
     * @return ExternalLinkHandlerBase
     */
    public function externalLinkHandler()
    {
        if ( !empty($this->configurationExternal) && !is_null($this->configurationExternal) )
        {
            $externalLinkHandlerName = $this->configurationExternal->externalLinkHandler();
            return ExternalLinkHandlerBase::factory( $externalLinkHandlerName, $this->attribute('id') );
        }

        return null;
    }
    /**
     * @param eZContentObjectTreeNode $node
     * @return string
     */
    public function getNodeUrl( &$node = null )
    {
        $merckIni = ExternalLinkHandlerBase::iniMerck();
        $user = MMUsers::getCurrentUserObject();

        if ( !$user )
        {
            self::redirectToErrorPage();
        }

        $restUrl = $merckIni->variable( 'MdConsultSettings', 'RestUrl' );
        eZLog::write( var_export( $restUrl, true ), 'md-consult.log' );
        $apiKey = $merckIni->variable( 'MdConsultSettings', 'ApiKey' );
        eZLog::write( var_export( $apiKey, true ), 'md-consult.log' );
        $vendorKey = $merckIni->variable( 'MdConsultSettings', 'VendorKey' );
        eZLog::write( var_export( $vendorKey, true ), 'md-consult.log' );

        $params = array(
            "apikey" => $apiKey,
            "UserId" => $user->attribute( 'uuid' ),
            "VendorKey" => $vendorKey
        );
        eZLog::write( var_export( $params, true ), 'md-consult.log' );

        $curlRessource = curl_init( $restUrl );

        $curlParams = array(
            CURLOPT_HEADER => false,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode( $params ),
            CURLOPT_HTTPHEADER => array(
                'Content-type: application/json'
            ),
            CURLOPT_RETURNTRANSFER => true
        );
        curl_setopt_array( $curlRessource, $curlParams );

        $response = curl_exec( $curlRessource );

        $out = json_decode( $response, true );
        eZLog::write( var_export( $out, true ), 'md-consult.log' );

        $validUser = isset( $out['errorCode'] ) && $out['errorCode'] == 0;
        $password = null;

        if ( $validUser )
        {
            if ( isset( $out['userId'] ) )
            {
                $user = $out['userId'];
            }
            else
            {
                self::redirectToErrorPage();
            }
            if ( isset( $out['password'] ) )
            {
                $password = $out['password'];
            }
            else
            {
                self::redirectToErrorPage();
            }
        }
        else
        {
            self::redirectToErrorPage();
        }

        $url = $merckIni->variable( 'MdConsultSettings', 'MdUrl' );

        $searches = array(
            '<$md_user>',
            '<$md_password>'
        );
        $replacements = array(
            $user,
            $password
        );

        $url = str_replace( $searches, $replacements, $url );
        return $url;
    }