public function __construct()
    {
        // Guzzle RESTclient
        $wsUrl = SolrSafeOperatorHelper::clusterIni('WebService', 'BaseUrlUUMP', 'merck.ini') . SolrSafeOperatorHelper::clusterIni('WebService', 'Prefix', 'merck.ini');
        $this->client = new Client( $wsUrl );

        // Logger
        $filter           = new ezcLogFilter();
        $filter->severity = ezcLog::ERROR | ezcLog::INFO | ezcLog::WARNING;
        $this->logger     = ezcLog::getInstance();
        $this->logger->getMapper()->appendRule( new ezcLogFilterRule( $filter, new ezcLogUnixFileWriter( "var/log/", "esb_uump.log", 157286400, 3 ), true ) );
    }
Esempio n. 2
0
    public function __construct()
    {
        // Guzzle RESTclient
        $this->builder = ServiceBuilder::factory(__DIR__ . '/../../classes/service/descriptor.php');


        $this->client = $this->builder['ldap'];

        // Logger
        $filter = new ezcLogFilter();
        $filter->severity = ezcLog::ERROR | ezcLog::INFO | ezcLog::WARNING;
        $this->logger = ezcLog::getInstance();
        $logFileName = "ws.log";
        if ( SolrSafeOperatorHelper::clusterIni('WebService', 'CountrySpecificLogs', 'merck.ini') == 'enabled' )
        {
            $clusterId = ClusterTool::clusterIdentifier();
            $logFileName = "ws_{$clusterId}.log";
        }
        $this->logger->getMapper()->appendRule(new ezcLogFilterRule( $filter, new ezcLogUnixFileWriter( "var/log/", $logFileName, 157286400, 3 ), true ) );
    }
    public function __construct( $params, $outputType, $blockName, $applicationName, $applicationObject, $applicationLocalized )
    {
        $this->redirectUrl = $applicationLocalized->getCustomParameter( 'ConfirmationPageURL' );

        if ( SolrSafeOperatorHelper::featureIsActive( 'ContactForm' ) )
        {
           $this->fromEmail =  SolrSafeOperatorHelper::feature( 'ContactForm', 'fromEmail');
           $this->toEmail = SolrSafeOperatorHelper::feature( 'ContactForm', 'toEmail');
        }
        if ( !$this->fromEmail )
        {
           $this->fromEmail = SolrSafeOperatorHelper::clusterIni( self::CONTACTUS_SETTING_BLOCK_NAME, 'FromEmail', 'merck.ini' );
        }
        if ( !$this->toEmail )
        {
           $this->toEmail = SolrSafeOperatorHelper::clusterIni( self::CONTACTUS_SETTING_BLOCK_NAME, 'ToEmail', 'merck.ini' );
        }

        $this->additionalMsg = SolrSafeOperatorHelper::clusterIni( self::CONTACTUS_SETTING_BLOCK_NAME, 'AdditionalEmailParameters', 'merck.ini' );

        parent::__construct( $params, $outputType, $blockName, $applicationName, $applicationObject, $applicationLocalized );
    }
    /**
     * @param array $parameters
     * @return array
     */
    protected function callEsbWrite( $parameters = null )
    {
        if ( is_null( $parameters ) )
        {
            /* @type $availableDateParams array */
            /* @type $availableParams array */
            $esbParams                  = array();
            $formatDate                 = SolrSafeOperatorHelper::clusterIni('EsbDateConvert', 'FormatDate', 'merck.ini' );
            $availableDateParams        = SolrSafeOperatorHelper::clusterIni('EsbDateConvert', 'AvailableDateParams', 'merck.ini' );
            $availableParams            = SolrSafeOperatorHelper::clusterIni('EsbSettings', 'AvailableParams', 'merck.ini' );
            $skipParametersIfEmptyValue = SolrSafeOperatorHelper::clusterIni('SkipParametersIfEmptyValue', 'SkipParameter', 'merck.ini' );

            foreach ( $availableParams as $esbParam )
            {
                if ( isset( $_POST[$esbParam] ) )
                {
                    if( $this instanceof ServiceUserUUMP && !empty( $availableDateParams ) && isset( $availableDateParams[$esbParam] ) && !empty($_POST[$esbParam]) )
                    {
                        $esbParams[$esbParam] = $this->convertDateforUUMP( $_POST[$esbParam], $formatDate );
                    }
                    else
                    {
                        if($esbParam != 'addressLine1' && $esbParam != 'addressLine2')
                        {
                            $esbParams[$esbParam] = strip_tags($_POST[$esbParam]);
                        }
                        else
                        {
                            $esbParams[$esbParam] = $_POST[$esbParam];
                        }
                    }

                    if( $this instanceof ServiceUserUUMP && !empty( $skipParametersIfEmptyValue ) && isset( $skipParametersIfEmptyValue[$esbParam] ) && empty( $_POST[$esbParam] ) )
                    {
                        unset( $esbParams[$esbParam] );
                    }
                }
            }
            $isHtmlEntitiesAlowed = self::isAddressEncodeAllowedOnCluster();

            $addressLine1 = $this->getBusinessNameMapping( 'addressLine1' );
            if ( isset( $esbParams[$addressLine1] ) && !empty( $esbParams[$addressLine1] ) && $isHtmlEntitiesAlowed )
            {
                $esbParams[$addressLine1] = htmlentities( $esbParams[$addressLine1], ENT_QUOTES, 'UTF-8' );
            }

            $addressLine2 = $this->getBusinessNameMapping( 'addressLine2' );
            if ( isset( $esbParams[$addressLine2] ) && !empty( $esbParams[$addressLine2] ) && $isHtmlEntitiesAlowed )
            {
                $esbParams[$addressLine2] = htmlentities( $esbParams[$addressLine2], ENT_QUOTES, 'UTF-8' );
            }

            if( SolrSafeOperatorHelper::featureIsActive( 'RegistrationSettings' ) )
            {
                if( isset( $_POST['emailAddress'] ) && ClusterTool::clusterIdentifier() == 'cluster_jp' )
                {
                    $usernameField = $this->getBusinessNameMapping( 'userName' );
                    $esbParams[$usernameField] = $_POST['emailAddress'];
                }
            }

            if ( in_array(self::SUBSCRIPTION_PHONE_CONSENT, $availableParams) )
            {
                $phoneConsent = array(
                    'consentCode' => self::SUBSCRIPTION_PHONE_CONSENT,
                    'consentStatus' => !empty( $esbParams[self::SUBSCRIPTION_PHONE_CONSENT] ) ? self::SUBSCRIPTION_STATUS_SUBSCRIBED : self::SUBSCRIPTION_STATUS_UNSUBSCRIBED,
                    'consentLastUpdate' => time(),
                );
                $parametersConsent = array(
                    'data' => array(
                        'profile' => array(
                            'userId'   => $this->getUserId(),
                            'countryOfRegistration' => $this->getCountryOfRegistration(),
                            'consents' => $phoneConsent,
                            'locale' => SystemLocale::fetchByClusterAndSystem( ClusterTool::clusterIdentifier(), 'esb_locale' )
                        )
                    ),
                );
                $this->callWSHandler( $this->getEsbInterface( 'subsupdate' ), $parametersConsent );
                unset( $esbParams[self::SUBSCRIPTION_PHONE_CONSENT] );
            }
            $parameters = $this->getWriteParameters($esbParams);

            if( $this instanceof ServiceUserUUMP )
            {
                $sl = SystemLocale::fetchByClusterAndSystem( ClusterTool::clusterIdentifier(), 'esb_locale' );
                if ( !is_null( $sl ) )
                {
                    $parameters['data']['profile']['locale'] = $sl;
                }
            }
        }

        $result = $this->callWSHandler( $this->getEsbInterface( 'write' ), $parameters );

        return $result;
    }
    public function contentResultMain( $force = false )
    {
        $filters            = array();
        $evrikaCity = isset($_GET['f0']) ? $_GET['f0'] : null;
        $evrikaSpecialty = isset($_GET['f1']) ? $_GET['f1'] : null;
        $solrFilter         = $this->solrFilter(false, filter_var($_GET['year'], FILTER_VALIDATE_INT), filter_var($_GET['month'], FILTER_VALIDATE_INT), filter_var($_GET['events'], FILTER_SANITIZE_STRING),filter_var($_GET['specialty'], FILTER_VALIDATE_FLOAT), $evrikaCity, $evrikaSpecialty);
        //$solrFacetsFiler    = $this->solrFacetsFilter();

        if( $solrFilter )
            $filters[] = $solrFilter;

        /*if( $solrFacetsFiler )
            $filters[] = $solrFacetsFiler;*/

        $headlineSortKey = SolrSafeOperatorHelper::clusterIni( 'ContentListApplicationSettings' , 'HeadlineSortKey', 'merck.ini' );
        $headlineSortKey = empty( $headlineSortKey ) ? 'attr_headline_lc_s' : $headlineSortKey;

        switch ( $this->sortBy )
        {
            // @TODO: get the clusterIdentifier based on SiteAccess settings
            case self::SORT_BEST_MATCH:
                if ( trim($this->searchQuery) != '' )
                    $sort = "score desc, {$headlineSortKey} asc";
                break;
            case self::SORT_MOST_POPULAR:
                header( 'x-ez-most-popular-node: '.$this->rootNodeIds[0] );
                $sort = 'attr_content_rating_'.ClusterTool::clusterIdentifier()."_f desc, {$headlineSortKey} asc";
                break;
            case self::SORT_MOST_VIEWED:
                header( 'x-ez-most-view-node: '.$this->rootNodeIds[0] );
                $sort = 'attr_view_counter_'.ClusterTool::clusterIdentifier()."_i desc, {$headlineSortKey} asc";
                break;
            case self::SORT_ALPHABETICAL:
                $sort = "{$headlineSortKey} asc";
                break;
            case self::SORT_MOST_RECENT:
                // default sort
            default:
                // no sort provided - we default to most recent
                $sort = "attr_date_dt desc, {$headlineSortKey} asc";
                break;
        }

        $fields = array(
            'attr_headline_t',
            'attr_'.ClusterTool::clusterIdentifier().'_url_s',
            'meta_guid_ms',
            'attr_date_dt',
            'attr_promo_description_t',
            'attr_date_start_dt',
            'attr_date_end_dt',
        );

        $searchQuery = $this->searchQuery !== '' ? strip_tags( $this->searchQuery ) : '*:*';

        $params = array(
            'indent'        => 'on',
            'q'             => $searchQuery,
            'fq'            => implode(' AND ' , $filters),
            'start'         => $this->offset,
            'rows'          => $this->limit,
            'fl'            => implode(',', $fields),
            'qt'            => '',
            'explainOther'  => '',
            'hl.fl'         => '',
            'sort'          => $sort,
        );

        if( trim($this->searchQuery) != '' )
            $params = array_merge( $params, $this->solrHighlightParams() );

        if ($this->isSolrJsonDebug() )
            $this->contentList->pushResult( 'params', $params, true);

        return SolrTool::rawSearch( $params );
    }
    /**
     * @param eZTemplate $tpl
     * @param string $operatorName
     * @param array $operatorParameters
     * @param string $rootNamespace
     * @param string $currentNamespace
     * @param mixed $operatorValue
     * @param array $namedParameters
     */
    function modify($tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters)
    {
        switch ($operatorName)
        {
            /*******************************************************************************/
            /*                             Solr Safe Operators                             */
            /*******************************************************************************/

            case 'ezfind_raw_fetch':
                $operatorValue = SolrSafeOperatorHelper::ezfindRawFetch(
                    $namedParameters['params'],
                    $namedParameters['nodeIdsOnly']
                );
                break;
            case 'getUrlSolr':
                $operatorValue = SolrSafeOperatorHelper::getUrlSolr($namedParameters['solrdata']);
                break;
            case 'getDatesPDFavailable':
                $operatorValue = SolrSafeOperatorHelper::getDatesPDFavailable(
                    $namedParameters['onlineDate'],
                    $namedParameters['daysAvailable']
                );
                break;
            case 'getViewCounter':
                $operatorValue = SolrSafeOperatorHelper::getViewCounter(
                    $namedParameters['remoteId'],
                    $namedParameters['clusterIdentifier']
                );
                break;
            case 'getRatings':
                $operatorValue = SolrSafeOperatorHelper::getRatings(
                    $namedParameters['remoteId'],
                    $namedParameters['clusterIdentifier']
                );
                break;
            case 'getJavascriptFiles':
                $operatorValue = SolrSafeOperatorHelper::getJavascriptFiles(
                    $namedParameters['application_name'],
                    $namedParameters['type'],
                    $namedParameters['isConsult']
                );
                break;
            case 'getLessFiles':
                $operatorValue = SolrSafeOperatorHelper::getLessFiles(
                    $namedParameters['application_name'],
                    $namedParameters['application'],
                    $namedParameters['isConsult']
                );
                break;
            case 'getInfosApp':
                $operatorValue = SolrSafeOperatorHelper::getInfosApp($namedParameters['application_identifier']);
                break;
            case 'getHostNameFromURL':
                $operatorValue = SolrSafeOperatorHelper::getHostNameFromURL($namedParameters['url']);
                break;
            case 'context':
                $operatorValue = SolrSafeOperatorHelper::context($namedParameters['url']);
                break;
            case 'getMetas':
                $operatorValue = SolrSafeOperatorHelper::getMetas($namedParameters['applicationName']);
                break;
            case 'getSolrData':
                $operatorValue = SolrSafeOperatorHelper::getSolrData(
                    $namedParameters['remoteId'],
                    $namedParameters['clusterIdentifier'],
                    $namedParameters['extended_fields']
                );
                break;
            case 'getCustomParameter':
                $operatorValue = SolrSafeOperatorHelper::getCustomParameter(
                    $namedParameters['application'],
                    $namedParameters['parameter_name'],
                    $namedParameters['context']
                );
                break;
            case 'getAppIdentifierForIcon':
                $operatorValue = SolrSafeOperatorHelper::getAppIdentifierForIcon($namedParameters['application']);
                break;
            case 'getApplicationUrl':
                $operatorValue = SolrSafeOperatorHelper::getApplicationUrl($namedParameters['identifier']);
                break;
            case 'mappingNameSpe':
                $operatorValue = SolrSafeOperatorHelper::mappingNameSpe($namedParameters['specialtie']);
                break;
            case 'getMappingSpe':
                $operatorValue = SolrSafeOperatorHelper::getMappingSpe();
                break;
            case 'getCustomerTypes':
                $operatorValue = SolrSafeOperatorHelper::getCustomerTypes();
                break;
            case 'getMainSpecialities':
                $operatorValue = SolrSafeOperatorHelper::getMainSpecialities();
                break;
            case 'getUserSpecialities':
                $operatorValue = SolrSafeOperatorHelper::getUserSpecialities();
                break;
            case 'noSeoLink':
                $operatorValue = SolrSafeOperatorHelper::noSeoLink($operatorValue);
                break;
            case 'getTaxoTranslation':
                $operatorValue = SolrSafeOperatorHelper::getTaxoTranslation(
                    $namedParameters['identifier'],
                    $namedParameters['remote_id']
                );
                break;
            case 'cluster_ini':
                $operatorValue = SolrSafeOperatorHelper::clusterIni(
                    $namedParameters['section'],
                    $namedParameters['variable'],
                    $namedParameters['ini_file']
                );
                break;
            case 'truncateContentRelated':
                $operatorValue = SolrSafeOperatorHelper::truncateContentRelated($namedParameters['text']);
                break;
            case 'myCertificatesEnabled':
                $operatorValue = SolrSafeOperatorHelper::featureIsActive("MyCertificates");
                break;
            case 'appHasSpeciality':
                $operatorValue = SolrSafeOperatorHelper::appHasSpeciality();
                break;
            case 'setClusterIdentifier':
                // No $operatorValue modification is normal
                SolrSafeOperatorHelper::setClusterIdentifier($namedParameters['clusterIdentifier']);
                break;
            case 'featureIsActive':
                $operatorValue = SolrSafeOperatorHelper::featureIsActive($namedParameters['featureCode']);
                break;
            case 'feature':
                $operatorValue = SolrSafeOperatorHelper::feature(
                    $namedParameters['featureCode'],
                    $namedParameters['value']
                );
                break;
            case 'alphabet':
                $operatorValue = SolrSafeOperatorHelper::alphabet();
                break;
            case 'generateIso6391':
                $operatorValue = SolrSafeOperatorHelper::generateIso6391($namedParameters['regionalSettingsLocale']);
                break;
            case 'staticfile':
                $operatorValue = SolrSafeOperatorHelper::staticFile(
                    $operatorValue,
                    $namedParameters['quote'],
                    $namedParameters['skip_slash']
                );
                break;
            case 'showHelpDeskPhoneInHeader':
                $operatorValue = !(SolrSafeOperatorHelper::feature('HelpDeskSettings', 'HidePhoneNumberInHeader'));
                break;
            case 'showHelpDeskPhoneOnPage':
                $operatorValue = !(SolrSafeOperatorHelper::feature('HelpDeskSettings', 'HidePhoneNumberOnPage'));
                break;
            case 'getFooterHTML':
                $operatorValue = SolrSafeOperatorHelper::getFooterHTML($namedParameters['footerBlockIdentifier']);
                break;
            case 'getLocaleBySystemCode':
                $operatorValue = SolrSafeOperatorHelper::getLocaleBySystemCode($namedParameters['systemCode']);
                break;
            case 'buildExitUrl':
                $operatorValue = SolrSafeOperatorHelper::buildExitUrl($namedParameters['url']);
                break;
            case 'getUserToken':
                $operatorValue = SolrSafeOperatorHelper::getUserToken();
                break;
            case 'clusterHasFeaturedChannel':
                $operatorValue = SolrSafeOperatorHelper::clusterHasFeaturedChannel();
                break;
            case 'aliasDimensions':
                $operatorValue = SolrSafeOperatorHelper::aliasDimensions($namedParameters['alias']);
                break;
            case 'hasImageArticleFromSolr':
                $operatorValue = SolrSafeOperatorHelper::hasImageArticleFromSolr(
                    $namedParameters['solrdata'],
                    $namedParameters['media_case']
                );
                break;
            case 'getImageArticleUrl':
                $operatorValue = SolrSafeOperatorHelper::getImageArticleUrl(
                    $namedParameters['media_case'],
                    $namedParameters['object_id'],
                    $namedParameters['language'],
                    $namedParameters['alias']
                );
                break;
            case 'getImageArticleUrlFromSolr':
                $operatorValue = SolrSafeOperatorHelper::getImageArticleUrl(
                    $namedParameters['media_case'],
                    $namedParameters['solrdata']['object_id'],
                    $namedParameters['solrdata']['language'],
                    $namedParameters['alias']
                );
                break;
            case 'isHidden':
                $operatorValue = SolrSafeOperatorHelper::isHidden($namedParameters['contentobject_id']);
                break;
            case 'isObjectGloballyVisible':
                $operatorValue = SolrSafeOperatorHelper::isObjectGloballyVisible($namedParameters['contentobject_id']);
                break;
            case 'getClusterVisibilities':
                $operatorValue = SolrSafeOperatorHelper::getClusterVisibilities($namedParameters['contentobject_id']);
                break;
            case 'parseTranslationTagParams':
                $operatorValue = SolrSafeOperatorHelper::parseTranslationTagParams($namedParameters['params']);
                break;
            case 'isSendToColleagueDisabled':
                $operatorValue = SolrSafeOperatorHelper::featureIsActive('DisableSendToColleague')
                    ? SolrSafeOperatorHelper::feature('DisableSendToColleague', 'IsDisabled')
                    : false;
                break;
            case 'getListOfValueOptions':
                $operatorValue = SolrSafeOperatorHelper::getListOfValueOptions( $namedParameters['business_name'], $namedParameters['filter'] );
                break;
            case 'getListOfValues':
                $operatorValue = SolrSafeOperatorHelper::getListOfValues( $namedParameters['business_name'], $namedParameters['filter'] );
                break;
            case 'solrDateToStamp':
                $operatorValue = strtotime($namedParameters['date']) > 3600*24*2 ? SolrTool::getTimestampFromSolr($namedParameters['date']) : 0;
                break;
            case 'getSeoParam':
                $operatorValue = SolrSafeOperatorHelper::getSeoParam($namedParameters['applicationLocalized'], $namedParameters['name'], $namedParameters['params']);
                break;
            case 'applicationHasSeoSpeciality':
                $operatorValue = SolrSafeOperatorHelper::applicationHasSeoSpeciality($namedParameters['applicationIdentifier']);
                break;
            case 'seoIsEnabled':
                $operatorValue = SolrSafeOperatorHelper::seoIsEnabled($namedParameters['applicationIdentifier']);
                break;
            case 'includeEsi':
                $operatorValue = SolrSafeOperatorHelper::includeEsi( $namedParameters['src'], $namedParameters['debug'] );
                break;
            case 'imageDecHash':
                $operatorValue = SolrSafeOperatorHelper::imageDecHash( $operatorValue );
                break;
            case 'bannerDecHash':
                $operatorValue = SolrSafeOperatorHelper::bannerDecHash( $operatorValue );
                break;
            case 'getAndStoreGPNotebookHS':
                $operatorValue = self::getAndStoreGPNotebookHS( );
                break;
            case 'isPromoTaxonomyVisible':
                $operatorValue = SolrSafeOperatorHelper::isPromoTaxonomyVisible( $namedParameters['values'] );
                break;
            case 'translateTaxonomy':
                $operatorValue = SolrSafeOperatorHelper::translateTaxonomy( $namedParameters['code'] );
                break;
            case 'getPublisherArticleUrl':
                $operatorValue = SolrSafeOperatorHelper::getPublisherArticleUrl( $namedParameters['publisher'], $namedParameters['articleId'] );
                break;
        }
    }
                 'type'      => 'string',
                 'required'  => true,
                 'location'  => 'json'
             )
         ),
         'cr' => array(
             'location' => 'uri',
             'description' => 'Country of registration',
             'required' => true
         )
     )
 ),
 // EzP.Subs.F - Subs update
 'subsupdate' => array(
     'extends'   =>  'abstract',
     'uri'       =>  SolrSafeOperatorHelper::clusterIni('WebService', 'Prefix', 'merck.ini').'/Subs/Write?Country_of_Registration={cr}',
     'summary'   =>  'Update user subsc. in Lyris after saving consents infos',
     'parameters'=>  array(
         'Data'  =>  array(
             'type'      =>  'array',
             'required'  =>  'true',
             'location'  =>  'json',
             'items'     =>  array(
                 'Username'  =>  array(
                     'type'      =>  'string',
                     'required'  =>  true,
                     'location'  =>  'json'
                 ),
                 'Subs'  =>  array(
                     'type'      =>  'array',
                     'required'  =>  'true',
<?php

return array(
    'name' => 'Univadis',
    'apiVersion' => 0.3,
    'baseUrl' => (\SolrSafeOperatorHelper::featureIsActive('UUMP') ? \SolrSafeOperatorHelper::clusterIni('WebService', 'BaseUrlUUMP', 'merck.ini') . \SolrSafeOperatorHelper::clusterIni('WebService', 'Prefix', 'merck.ini') : \SolrSafeOperatorHelper::clusterIni('WebService', 'BaseUrl', 'merck.ini')),
    'description' => 'RESTful Webservice for ESB',
    'operations' => array(
        'abstract' => array(
            'httpMethod' => 'POST'
        ),
        'createtoken' => array(
            'extends' => 'abstract',
            'uri' => '/createtoken',
            'summary' => 'Creates token for given username',
            'parameters' => array(
                'data' => array(
                    'email' => 'string',
                    'countryOfRegistration' => 'string'
                )
            )
        )
    )
);
/**
 * up to date event recently created
*/
function updateDateEvent($_service, $_event, $_tampon) {
	try {
		//actual date
		$datetime = new DateTime('now');

		//end event date
		$end = new Google_EventDateTime();
		$end->setDateTime($datetime->format("Y-m-d\TH:i:s"));
		$end->setTimeZone('Europe/Paris');
		$_event->setEnd($end);				

		//event description (cronjob output)
		$_event->setDescription($_tampon);

		//update event
		$_service->events->update(SolrSafeOperatorHelper::clusterIni('ConfigCalendar', 'CalendarId', 'calendar.ini'), $_event->getId(), $_event);

		$cli = eZCLI::instance();
		$cli->output('Event id : ' . $_event->getId() . ' updated');	
	} catch(Exception $e) {
		$cli = eZCLI::instance();
		$cli->output($e->getMessage());
	}
}
    /**
     * @param bool $force
     * @return array
     */
    public function contentResultMain( $force = false )
    {
        $filters            = array();
        $solrFilter         = $this->solrFilter();
        $solrFacetsFiler    = $this->solrFacetsFilter();

        if( $solrFilter )
            $filters[] = $solrFilter;

        if( $solrFacetsFiler )
            $filters[] = $solrFacetsFiler;

        $headlineSortKey = SolrSafeOperatorHelper::clusterIni( 'ContentListApplicationSettings' , 'HeadlineSortKey', 'merck.ini' );
        $headlineSortKey = empty( $headlineSortKey ) ? 'attr_headline_lc_s' : $headlineSortKey;
        $sort            = '';
        // TODO: check if this check is needed:
        $rootNodeIds = $this->rootNodeIds;
        if ( isset( $this->rootNodeIds[0] ) && is_array( $this->rootNodeIds[0] ) ) {
            $rootNodeIds = $this->rootNodeIds[0];
        }

        switch ( $this->sortBy )
        {
            case self::SORT_BEST_MATCH:
                if ( trim($this->searchQuery) != '' )
                    $sort = "score desc, {$headlineSortKey} asc";
                break;
            case self::SORT_MOST_POPULAR:
                header( 'x-ez-most-popular-node: ' . 'P' . implode('PP', $rootNodeIds) . 'P' );
                $sort = 'attr_content_rating_'.ClusterTool::clusterIdentifier()."_f desc, {$headlineSortKey} asc";
                break;
            case self::SORT_MOST_VIEWED:
                header( 'x-ez-most-view-node: ' . 'P' . implode('PP', $rootNodeIds) . 'P' );
                $sort = 'attr_view_counter_'.ClusterTool::clusterIdentifier()."_i desc, {$headlineSortKey} asc";
                break;
            case self::SORT_ALPHABETICAL:
                $sort = "{$headlineSortKey} asc";
                break;
            case self::SORT_MOST_RECENT:
                // default sort
            default:
                // no sort provided - we default to most recent
                $sort = "attr_date_dt desc, {$headlineSortKey} asc";
                break;
        }

        $fields = array_values($this->getFields());

        $searchQuery = isset( $_REQUEST['q'] ) ? strip_tags( $_REQUEST['q'] ) : '*:*';

        $params = array(
            'indent'        => 'on',
            'q'             => $searchQuery,
            'fq'            => implode(' AND ' , $filters),
            'start'         => $this->offset,
            'rows'          => $this->limit,
            'fl'            => implode(',', $fields),
            'qt'            => '',
            'explainOther'  => '',
            'hl.fl'         => '',
            'sort'          => $sort,
        );

        if( trim($this->searchQuery) != '' )
            $params = array_merge( $params, $this->solrHighlightParams() );

        if ( $this->withFacets )
            $params = array_merge( $params, $this->unfilteredFacetsParams() );

        if ($this->isSolrJsonDebug() )
            $this->contentList->pushResult( 'params', $params, true);

        return SolrTool::rawSearch( $params, 'php', true, false );
    }
    /**
     * @param string $kw
     * @return array
     */
    public function keywordsAutocomplete( $kw = null )
    {
        eZDebug::accumulatorStart( __CLASS__.'::'.__FUNCTION__, 'Merck' );
        
        $solrTextAttributesSuffix = SolrSafeOperatorHelper::clusterIni( 'SolrSettings', 'TextAttributesSuffix', 'merck.ini' );

        // taken from eZFindServerCallFunctions
        $result = array();
        if( is_null($kw) )
            $kw = isset($_GET['term']) ? $_GET['term'] : '';

        $findINI = eZINI::instance( 'ezfind.ini' );
        $limit   = $findINI->variable( 'AutoCompleteSettings', 'Limit');

        if ( $this->contentList->iniMerck()->hasVariable( 'ContentListApplicationSettings', 'KeywordsAutoCompleteLimit' ) )
            $limit = $this->contentList->iniMerck()->variable( 'ContentListApplicationSettings', 'KeywordsAutoCompleteLimit' );

        $minLength = 3;
        if ( $this->contentList->iniMerck()->hasVariable( 'ContentListApplicationSettings', 'KeywordsAutoCompleteMinLength' ) )
            $minLength = SolrSafeOperatorHelper::clusterIni('ContentListApplicationSettings', 'KeywordsAutoCompleteMinLength', 'merck.ini');

        $input = mb_strtolower( $kw, 'UTF-8' );

        if ( mb_strlen( $input, 'UTF-8') < $minLength )
        {
            return array();
        }

        $this->parseRequestParams();

        $solrFilter      = $this->solrFilter();
        $solrFacetsFiler = $this->solrFacetsFilter();

        // we autocomple on portal language only
        $filters = array(
            'meta_language_code_ms:'.substr( eZINI::instance()->variable( 'RegionalSettings', 'Locale'), 0, 3).'*'
        );

        if( $solrFilter )
            $filters[] = $solrFilter;
        if( $solrFacetsFiler )
            $filters[] = $solrFacetsFiler;

        // step 1 - get autocomplete terms from solr
        $params = array( 'q'                => '*:*',
                         'qf'               => 'k_spellcheck'.$solrTextAttributesSuffix,
                         'rows'             => 0,
                         'fq'               => implode( ' AND ', array_merge( $filters, array( '-k_spellcheck'.$solrTextAttributesSuffix.':"'.$input.'"' ) ) ),
                         'json.nl'          => 'arrarr',
                         'facet'            => 'true',
                         'facet.method'     => 'enum',
                         'facet.field'      => 'k_spellcheck'.$solrTextAttributesSuffix,
                         'facet.limit'      => $limit,
                         'facet.mincount'    => 1,
                         'facet.prefix'     => $input
        );
        $solrResults = SolrTool::rawSearch( $params );
        $sourceTerms = $solrResults['facet_counts']['facet_fields']['k_spellcheck'.$solrTextAttributesSuffix];

        // step 2 - get snomed terms from autocompletion terms
        $queries        = array();
        $searchTerms    = array_keys($sourceTerms);
        $searchTerms[]  = $input; // we add the input too as the previous request will return an emtpy set if it is a complete word
        $terms          = MMGlobalSearchDictionaryTerm::fetchSolrAutocompleteTerms( $searchTerms, null, $limit * 5 );

        // step 3 - we confront the terms to the current context
        $solrHighlightParams = $this->solrHighlightParams();
        foreach( $terms as $term )
        {
            if( mb_strtolower( $term, 'utf-8' ) == $input )
                continue;

            $query = array();
            foreach( explode( ' ', $solrHighlightParams['hl.fl'] ) as $field )
                $query[] = $field.':"'.addslashes( $term ).'"';

            $queries[] = implode( ' OR ', $query );
        }

        $params = array( 'q'                => '*:*',
                         'qf'               => 'k_spellcheck'.$solrTextAttributesSuffix,
                         'rows'             => 0,
                         'fq'               => implode( ' AND ', $filters ),
                         'json.nl'          => 'arrarr',
                         'facet'            => 'true',
                         'facet.query'      => $queries,
                         'facet.mincount'    => 0,
        );

        $solrResults = SolrTool::rawSearch( $params );
        $i           = 0;

        foreach( $solrResults['facet_counts']['facet_queries'] as $solrTerm => $solrTermCount )
        {
            if( $solrTermCount )
            {
                $term = $terms[$i];
                $result[] = array(  'label'    => $term,
                                    'count'    => $solrTermCount );
                if( count( $result ) >= $limit )
                    break;
            }
            $i++;
        }
        usort( $result, function($a, $b){ return $a['count'] < $b['count']; } );

        // step 4 - complete list with regular solr search if needed

        $termsIndex = null;
        while ( count( $result ) < $limit )
        {
            if( is_null($termsIndex) )
            {
                foreach( $result as $arr )
                    $termsIndex[mb_strtolower( trim($arr['label']), 'utf-8' )] = true;
            }

            $term = each( $sourceTerms );
            if(!$term)
                break;
            $key = mb_strtolower( $term['key'], 'utf-8' );

            if( !isset( $termsIndex[$key] ) )
            {
                $result[] = array( 'label' => $term['key'],
                                   'count' => $term['value'] );
                $termsIndex[$key] = true;
            }
        }

        eZDebug::accumulatorStop( __CLASS__.'::'.__FUNCTION__ );

        return $result;
    }
 /**
  * @return string
  */
 private static function getFormSecretSeed()
 {
     return SolrSafeOperatorHelper::clusterIni('FormXSRF', 'SecretSeed', 'merck.ini');
 }
    /**
     * Renders the block (returns HTML)
     *
     * @return string HTML
     **/
    public function render()
    {
        $tpl = eZTemplate::factory();

        $tpl->setVariable( 'articles', $this->getSolrArticles() );
        $tpl->setVariable( 'additional_classes', $this->additionalClasses() );
        $tpl->setVariable( 'app', $this->applicationObject );
        $tpl->setVariable( 'app_localized', $this->applicationLocalized );
        $tpl->setVariable( 'app_url_alias', $this->appUrlAlias() );
        $tpl->setVariable( 'cluster_identifier', ClusterTool::clusterIdentifier() );
        $tpl->setVariable( 'include_app_name', SolrSafeOperatorHelper::clusterIni( 'HomePageSettings', 'ShowApplicationInMoreLink', 'merck.ini' ) );
        $tpl->setVariable( 'nb_articles', $this->nbArticles );
        $tpl->setVariable( 'publisher_logo', $this->publisherLogo() );
        $tpl->setVariable( 'view_mode', $this->viewMode() );
        $tpl->setVariable( 'application_url', SolrSafeOperatorHelper::getApplicationUrl($this->applicationObject->attribute('identifier')) );
        $tpl->setVariable( 'with_feed', $this->_application->resultHandler->withFeed );

        $blockResult = $tpl->fetch( 'design:presenters/block/applist.tpl' );
        eZTemplate::resetInstance();

        return $blockResult;
    }
    /**
     * @param eZTemplate $tpl
     * @param string $operatorName
     * @param array $operatorParameters
     * @param string $rootNamespace
     * @param string $currentNamespace
     * @param mixed $operatorValue
     * @param array $namedParameters
     */
    function modify($tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters)
    {
        switch ($operatorName)
        {
            case 'timestampToDateISO':
                $operatorValue = date('c', $namedParameters['timestamp']);
                break;
            case 'ezstr_replace':
                $operatorValue = str_replace(
                    $namedParameters['search'],
                    $namedParameters['replace'],
                    $namedParameters['text']
                );
                break;
            case 'hash_set':
                $hash                          = $namedParameters['hash'];
                $hash[$namedParameters['key']] = $namedParameters['val'];
                $operatorValue                 = $hash;
                break;
            case 'currentApplication':
                $operatorValue = ApplicationDefault::instance();
                break;
            case 'getApplicationName':
                if ($namedParameters['application'] instanceof ApplicationDefault)
                {
                    $operatorValue = $namedParameters['application']->applicationName();
                }
                break;
            case 'getTableEmbeddedName':
                $pattern = '/<td class="MMTableCellHead" ?.*>(.*)<\/td>/';
                preg_match_all($pattern, $namedParameters['htmlCode'], $matches);

                $operatorValue = $matches[1][0];
                break;
            case 'external_app_cookie_key':
                $operatorValue = ExternalApplication::createExternalApplicationCookieKey(
                    $namedParameters['localized_application']
                );
                break;
            case 'getCurrentCluster':
                $operatorValue = ClusterTool::clusterIdentifier();
                break;
            case 'checkIfSiteMatchesType':
                $contexts = array(
                    ContextTool::APP_MOBILE_DESIGN,
                    ContextTool::FRONT_DESIGN,
                    ContextTool::MOBILE_DESIGN
                );

                $operatorValue = (in_array($namedParameters['site_type'], $contexts)) ? ContextTool::instance(
                )->siteIsTypeOf($namedParameters['site_type']) : false;
                break;
            case 'import_status_xml_mdd':
                $statusXmlMdd = array(
                    1 => 'COMPLETE_SUCCESS',
                    2 => 'SUCCESS_WITH_WARNINGS',
                    3 => 'BLOCKING_ERROR',
                    4 => 'CRITICAL_ERROR',
                    5 => 'FATAL_ERROR'
                );

                $operatorValue = (isset($statusXmlMdd[$namedParameters['status']]) ? $statusXmlMdd[$namedParameters['status']] : $namedParameters['status']);
                break;
            case 'import_status_mdd_ez':
                $statusMddEz = array(
                    '-1' => 'DO_NOT_TREAT',
                    0    => 'INITIAL',
                    1    => 'SYNCHRO',
                    2    => 'ARTICLE_REF',
                    4    => 'CRITICAL_ERROR',
                    8    => 'FATAL_ERROR'
                );

                $operatorValue = (isset($statusMddEz[$namedParameters['status']]) ? $statusMddEz[$namedParameters['status']] : $namedParameters['status']);
                break;
            case 'getUserCustomerType':
                $user          = MMUsers::getCurrentUserObject();
                $operatorValue = ($user) ? $user->attribute('customer_type') : 'User not logged in';
                break;
            case 'isUserDataMissing':
                $instance      = MMUserData::instance();
                $operatorValue = $instance->isUserDataMissing($namedParameters['name']);
                break;
            case 'isMobile':
                $operatorValue = ContextTool::instance()->isMobile();
                break;
            case 'getExternalConfiguration':
                $operatorValue = ApplicationExternalConfiguration::getExternalConfiguration($namedParameters['id']);
                break;
            case 'getLocalizedApplicationByIdentifier':
                $operatorValue = CacheApplicationTool::buildLocalizedApplicationByIdentifier(
                    $namedParameters['identifier']
                );
                break;
            case 'getWebtrendsTimezone':
                $d = new DateTime('now', new DateTimeZone(eZINI::instance()->variable('TimeZoneSettings', 'TimeZone')));

                $operatorValue = ($d->getOffset() / 3600);
                break;
            case 'getChinaProvinceCity':
                $operatorValue = ChinaLocation::fetchProvincesAndCities();
                break;
            case 'isCatchUpAppNameEnabled':
                $operatorValue = MMGlobalSearch::isCatchUpAppNameEnabled();
                break;
            case 'gmdate':
                $operatorValue = gmdate($namedParameters['format'], $namedParameters['duration']);
                break;
            case 'mb_strtoupper':
                $operatorValue = mb_strtoupper($namedParameters['str']);
                break;
            case 'preg_replace':
                $operatorValue = preg_replace(
                    $namedParameters['pattern'],
                    $namedParameters['replacement'],
                    $namedParameters['subject'],
                    $namedParameters['$limit']
                );
                break;
            case 'html_entity_decode':
                $operatorValue = html_entity_decode($namedParameters['string']);
                break;
            case 'urlencode':
                $operatorValue = urlencode($namedParameters['string']);
                break;
            case 'json_encode':
                $operatorValue = json_encode($namedParameters['value']);
                break;
            case 'domain':
                $operatorValue = ContextTool::instance()->domain();
                break;
            case 'getUumpDateFormat':
                $operatorValue = SolrSafeOperatorHelper::clusterIni('EsbDateConvert', 'FormatDate', 'merck.ini' );
                break;
            case 'html_contains_image':
                $operatorValue = SolrSafeOperatorHelper::htmlContainsImage($namedParameters['string']);
                break;
            case 'preg_match':
                $operatorValue = preg_match (
                    $namedParameters['pattern'],
                    $namedParameters['subject']
                );
                break;
        }
    }
Esempio n. 15
0
 /**
  * @return bool
  */
 public static function canStore()
 {
     return (\SolrSafeOperatorHelper::clusterIni('TicketLogin', 'Log', 'merck.ini') == 'enabled');
 }
    /**
     * @param $publisherFolder PublisherFolder
     * @return string
     */
    public function publisherFolderFilter ( $publisherFolder )
    {
        $languageFilters = array();
        $path = $publisherFolder->attribute('path');

        if ( is_array($publisherFolder->attribute('languages')) )
            $languages = $publisherFolder->attribute('languages');
        else
            $languages = LocaleTool::languageList();

        if ( $publisherFolder->attribute('fallback') )
            $languageFilters = SolrTool::solrLanguageFilter( $languages );
        else
            $languageFilters[] = "meta_language_code_ms:{$languages[0]}";
        
        $publisherFilter = '( subattr_publisher_folder___source_id____s:"'.$path.'"'
                          .' AND ( ' . implode(' OR ', $languageFilters) . ' ) )';
        
        //#48332 - get content for quiz_train_your_brain from 13th August 2015 
        $dateRestrictions = SolrSafeOperatorHelper::clusterIni('MedicalQuizDateRestriction','PublisherFolderDateRestriction','merck.ini');
        if(!empty($dateRestrictions) && array_key_exists($path, $dateRestrictions)){
            if($dateRestrictions[$path]){
                $publisherFilter = '( subattr_publisher_folder___source_id____s:"'.$path.'"'
                          .' AND (attr_online_date_dt:["'.$dateRestrictions[$path].'" TO NOW])'
                          .' AND ( ' . implode(' OR ', $languageFilters) . ' ) )';
            }
        }
        return $publisherFilter;
    }
    /**
     * Logs the user in eZPublish taking the data from the ESB
     * /!\ Does not check login / password. This check needs to be done before!!!!!
     *
     * @param string $uuid
     * @param ESBResult $esbResult
     * @param boolean $rememberMe
     * @param boolean $context
     * @return array destUrl or null if error
     */
    public static function esbLogin( $uuid, $esbResult, $rememberMe = false, $context = false )
    {
        $localizedLoginApplication = CacheApplicationTool::buildLocalizedApplicationByIdentifier( 'login' );

        $validationStatus = $esbResult->getValidationStatus();
        if ( $validationStatus == 'PV' && $localizedLoginApplication->getCustomParameter( 'RestrictPendingUsers' ) == 1 )
        {
            UserLog::instance()->esb_status('Pending')->store();
            
            $redirectURL = eZINI::instance( 'site.ini' )->variable( 'SiteSettings', 'PendingUserStaticPage' );
            if( SolrSafeOperatorHelper::featureIsActive( 'GoogleAnalytics' ) )
            {
                $redirectURL = $redirectURL . '#?vs=PV';
            }
            header( "Location: $redirectURL" );
            eZExecution::cleanExit();
        }
        else if ( $validationStatus == 'RP' && $localizedLoginApplication->getCustomParameter( 'RestrictRejectedUsers' ) == 1 )
        {
            UserLog::instance()->esb_status('Rejected')->store();
            
            $redirectURL = eZINI::instance( 'site.ini' )->variable( 'SiteSettings', 'RejectedUserStaticPage' );
            if( SolrSafeOperatorHelper::featureIsActive( 'GoogleAnalytics' ) )
            {
                $redirectURL = $redirectURL . '#?vs=RP';
            }
            header( "Location: $redirectURL" );
            eZExecution::cleanExit();
        }

        if( is_null($esbResult->countryOfRegistration))
            $esbResult->countryOfRegistration = eZINI::instance()->variable( 'RegionalSettings', 'CountryOfRegistration' );

        if( is_null($esbResult->userSpecialty) )
        {
            self::logError( $uuid, null, $esbResult->toTicket(), 'Missing main specialty' );
            return null;
        }

        if( is_null( $esbResult->customerType ) )
        {
            self::logError( $uuid, null, $esbResult->toTicket(), 'Missing Customer type' );
            return null;
        }

        // temporary fix to parse forced string prepended with A
        $userSpeciality = $esbResult->userSpecialty = preg_replace( '#^A#', '', $esbResult->userSpecialty );
        $customerType = $esbResult->customerType = preg_replace( '#^A#', '', $esbResult->customerType );

        if( !preg_match('#^216\.#', $userSpeciality) )
        {
            self::logError( $uuid, null, $esbResult->toTicket(), "Invalid User specialty: $userSpeciality" );
            return null;
        }
        if( !preg_match( '#^102\.#', $customerType ) )
        {
            self::logError( $uuid, null, $esbResult->toTicket(), "Invalid Customer type: $customerType" );
            return null;
        }

        $esbResult->userName = $uuid;
        $esbResult->rememberMe = $rememberMe;
        $decodedContext = urldecode(urldecode($context));

        // If we need to check the Terms of Use for the cluster, we need to skip my-newsletters app for legal reasons (1-click unsubscribe).
        $toUToCheck = (    eZINI::instance( 'merck.ini')->hasVariable( 'LoginSettings', 'ToUCheck')
            && eZINI::instance( 'merck.ini' )->variable( 'LoginSettings', 'ToUCheck') == 'enabled'
            && !strpos($decodedContext, 'my-newsletters')
        );

        if( $toUToCheck ){
            $toUValidated = ( $esbResult->termsOfUse );
            $toUValidated &= ( $esbResult->privacyPolicy );

            if( $esbResult->forceToUValidated )
                $toUValidated = true;

            $esbResult->toUValidated = (bool)$toUValidated;
        }

        // Check if we need to check the autologin status for the cluster
        if( SolrSafeOperatorHelper::featureIsActive('RestrictAutologgedInUsers') && SolrSafeOperatorHelper::feature('RestrictAutologgedInUsers', 'Restricted')
            && in_array( $esbResult->autologin, array( 1, "yes" ) ))
        {
            $esbResult->autologin = true;
        }
        else
        {
            $esbResult->autologin = false;
        }

        if ( self::loginUser( $esbResult->toTicket() ) )
        {
            $user = MMUsers::getCurrentUserObject();

            $destUrl = ContextTool::instance()->contextUrl( $context );

            if( $toUToCheck && !$user->toUValidated() )
            {
                if( preg_match('#^(?:https?://[^/]+)'.eZINI::instance()->variable('SiteSettings', 'ToUAgreementPage').'?#', $destUrl) )
                    $destUrl = '/';
                $destUrl = preg_replace('#^https?://([^?]+)//#', '\1', $destUrl);
                $destUrl = eZINI::instance()->variable('SiteSettings', 'ToUAgreementPage')
                    .'?context='.urlencode($destUrl);
            }

            // Store user action in mm_front_user_action table
            $mmFrontUserAction = MMFrontUserAction::fetchByUsername( $esbResult->userName );
            if ( $mmFrontUserAction instanceof MMFrontUserAction )
            {
                $mmFrontUserAction->LastVisitDate = date( 'Y-m-d H:i:s' );
                $mmFrontUserAction->Processed = MMFrontUserAction::PROCESSED;
                $mmFrontUserAction->store(array('processed', 'last_visit_date'));
            }
            else
            {
                $mmFrontUserAction = MMFrontUserAction::create( array(
                        'id' => null,
                        'username' => $esbResult->userName,
                        'country_registration' => $esbResult->countryOfRegistration,
                        'processed' => MMFrontUserAction::PROCESSED,
                        'last_visit_date' => date( 'Y-m-d H:i:s' ),
                ) );
                $mmFrontUserAction->store();
            }

            if ( $rememberMe )
            {
                $userKey = !is_null($esbResult->userId) ? $esbResult->userId : $uuid;
                $cookieExpiration = time() + eZINI::instance( 'merck.ini' )->variable( 'TIBCOCookieSettings', 'TIBCOCookieExpiration' );
               
                //fix to remove the old cookie for new sso cluster #39800
                $splitDepth = eZINI::instance('merck.ini')->variable( 'CookieSettings', 'CookieDomainSplitDepth' );
                $splitDepth= 0;
                if( $splitDepth == 0 ) {
                    $cookieDomain = preg_replace('#^(https?://)?([^.]+.){1}#', '', contextTool::instance()->domain() );
                    $cookieExpirationToDelete = time() - 2000;
                    setcookie( 'remember_me', '', self::encryptText(json_encode($userKey)), $cookieExpirationToDelete, '/', $cookieDomain );
                }//end fix
                setcookie( 'remember_me', self::encryptText(json_encode($userKey)), $cookieExpiration, '/', CookieTool::getCookieDomain() );
            }
            else
            {
                $cookieExpiration = 0;
            }

            // Set cookie
            $esbSessionId = $esbResult->sessionID;
            $countryCode = '';
            if ( !empty( $esbSessionId ) )
            {
                $cookieName   = eZINI::instance( 'merck.ini' )->variable( 'TIBCOCookieSettings', 'TIBCOCookieName' );
                $esbSessionId = str_replace( ' ', '+', '"'.urldecode($esbSessionId).'"' );
                setrawcookie( $cookieName, $esbSessionId, $cookieExpiration, '/', CookieTool::getCookieDomain() );
            }
            
            // set residenceCountry country code for google tag manager
            $countryOfResidence = $esbResult->othersParams['countryOfResidence'] ? $esbResult->othersParams['countryOfResidence'] : ($esbResult->othersParams['Country_of_residence'] ? $esbResult->othersParams['Country_of_residence'] : null );
            if($countryOfResidence)
            {
                if($countryOfResidence > 2)
                {
                    $countries = SolrSafeOperatorHelper::clusterIni('CountryCode','CountryCode','merck.ini');
                    $countryCode = $countries[$esbResult->othersParams['Country_of_residence']];
                }
            }
            else
            {
                $countryCode = $esbResult->countryOfRegistration;
            }
            
            $esbResult -> setResidenceCountry($countryCode);
              
            return array(
                'destUrl' => $destUrl,
                'params'  => $esbResult->toTicket(),
            );
        }

        return null;
    }
    /**
     * @return array
     */
    public static function alphabet()
    {
        $hexFirstLetter = SolrSafeOperatorHelper::clusterIni('Alphabet', 'FirstLetterUnicode', 'merck.ini');
        $hexLastLetter = SolrSafeOperatorHelper::clusterIni('Alphabet', 'LastLetterUnicode', 'merck.ini');

        $letters = array();
        foreach ( range(hexdec($hexFirstLetter), hexdec($hexLastLetter)) as $int )
            $letters[] = mb_convert_encoding("&#x" . dechex($int) . ";", "UTF-8", "HTML-ENTITIES");

        return $letters;
    }
    /**
     * Checks if an url is valid for redirection
     * Allows urls from the current domain only
     * Excludes login pages and logff pages and register page
     * @param string $url
     * @return bool
     */
    public function checkRedirectUrl( $url )
    {
        if( self::checkRedirectDomain($url) )
        {
            $ini                    = eZINI::instance();
            $loginPage              = preg_replace('#^https?//[^/]+#', '', $ini->variable('SiteSettings', 'LoginPage'));
            $promoLoginPage         = preg_replace('#^https?://[^/]+#', '', $ini->variable('SiteSettings', 'PromoLoginPage'));
            $logoffPage             = preg_replace('#^https?://[^/]+#', '', $ini->variable('SiteSettings', 'LogoffPage'));
            $logoffConfirmationPage = preg_replace('#^https?://[^/]+#', '', $ini->variable('SiteAccessSettings', 'AfterLogoutUrl'));
            $registerUrl            = preg_replace('#^https?://[^/]+#', '', SolrSafeOperatorHelper::clusterIni( 'LoginSettings', 'RegisterUrl', 'merck.ini' ));
            $rejectedUserStaticPage = preg_replace('#^https?://[^/]+#', '', $ini->variable('SiteSettings', 'RejectedUserStaticPage'));

            // we do not want to redirect to the login page either
            if( !preg_match('#^https?://[^/]+(?:'.$loginPage.'|'.$promoLoginPage.'(?:[/\?].*)?$|'.$logoffPage.'|'.$logoffConfirmationPage.'|'.$registerUrl.'|'.$rejectedUserStaticPage.')#', $url) )
            {
                return true;
            }
        }

        return false;
    }
    'cluster' => 'Cluster'
) );

$script->startup();
$script->initialize();

if(!isset($options['cluster']) || empty($options['cluster']) || is_null($options['cluster'])) {
    echo "\nError : Cluster must be set, consult help for more informations\n";
    $script->shutdown();
    exit;
}

if(isset($options['cluster']) && !empty($options['cluster'])) {
    generateCache(array($options['cluster']), $options);
} else {
    $clusters = array_keys( SolrSafeOperatorHelper::clusterIni('DomainMappingSettings', 'ClusterDomains', 'merck.ini') );
    generateCache($clusters, $options);
}

$script->shutdown();

/**
 * @param $clusters
 * @param $options
 * @return void
 */
function generateCache($clusters, $options) {
    $cli = eZCLI::instance();

    foreach ( $clusters as $clusterPath )
    {
    protected function response( $uri )
    {
        switch( self::redirectMode() )
        {
            case self::LOGIN_REDIRECT_MODE_HTTP:
                header( "Location: $uri" );
                break;
            case self::LOGIN_REDIRECT_MODE_JS:
                header( "Content-type: application/json");
                if ( SolrSafeOperatorHelper::featureIsActive( 'UUMP' ) )
                {
                    header( "Accept: application/json");
                }
                echo json_encode( $uri );
                break;
            case self::LOGIN_REDIRECT_MODE_JSON:
                header('Content-type: application/json');

                $result = array();

                $result['status']           = $this->_isLoginSuccessful ? 0 : 1;
                $result['LoginRedirect']    = $this->_isLoginSuccessful ? $this->_destUrl : $uri;

                $mmUser = MMUsers::getCurrentUserObject();

                if ( $this->_isLoginSuccessful )
                {
                    $result['User']                     = $this->_esbResult->toArray();
                    $result['User']['mmSettings']       = $mmUser->getMMSettings();
                    $result['User']['unorderedAppList'] = $mmUser->getApplicationList();
                    $result['User']['alterboxMsgReset'] = $mmUser->hasPreference('alterboxMsgReset') ? $mmUser->getPreferences('alterboxMsgReset') : true;
                    
                    $result['cookies'] = CookieTool::setCookies();

                    $salutations    = SolrSafeOperatorHelper::clusterIni('Salutations', 'Salutation', 'merck.ini' );
                    $localeMap      = SolrSafeOperatorHelper::clusterIni('ESBSettings', 'ESBLocaleMap', 'merck.ini' );
                    $locale         = $this->_esbResult->language;
                    if ( isset($localeMap[$locale]) )
                        $locale = $localeMap[$locale];

                    $result['commonauth']       = array(
                        'user_id'           => $this->_esbResult->userName,
                        'MSDID'             => ( isset( $this->_esbResult->othersParams['crmMemberId'] ) && !empty($this->_esbResult->othersParams['crmMemberId']) ) ? $this->_esbResult->othersParams['crmMemberId'] : $this->_esbResult->countryOfRegistration.'000000X',
                        'userId'            => $this->_esbResult->userId,
                        'UUMPID'            => $this->_esbResult->userId,
                        'UVDSPam'           => null,
                        'ValidationStatus'  => $this->_esbResult->getValidationStatus(),
                        'ODMNum'            => null,
                        'ValidationDate'    => ($this->_esbResult->registrationDate) ? date('d-M-y', strtotime($this->_esbResult->registrationDate)) : null,
                        'TVFCode'           => 'MSD',
                        'Email'             => $this->_esbResult->emailAddress,
                        'cc'                => $this->_esbResult->countryOfRegistration,
                        'PhoneNum'          => isset($this->_esbResult->othersParams['phoneNumber']) ? $this->_esbResult->othersParams['phoneNumber'] : null,
                        'ZipCode'           => $this->_esbResult->postalCode,
                        'zipCode'           => $this->_esbResult->postalCode,
                        'Salutation'        => isset($salutations[$this->_esbResult->othersParams['salutation']]) ? $salutations[$this->_esbResult->othersParams['salutation']] : null,
                        'City'              => $this->_esbResult->city,
                        'Street'            => isset($this->_esbResult->othersParams['addressLine2']) ? $this->_esbResult->othersParams['addressLine2'] : null,
                        'Address'           => isset($this->_esbResult->othersParams['addressLine1']) ? $this->_esbResult->othersParams['addressLine1'] : null,
                        'Country'           => $this->_esbResult->countryOfRegistration,
                        'CustomerType'      => $this->_esbResult->customerType,
                        'SiteCRMStatus'     => null,
                        'LastName'          => $this->_esbResult->lastName,
                        'FirstName'         => $this->_esbResult->firstName,
                        'specialty'         => $this->_esbResult->userSpecialty,
                        'lng'               => LocaleTool::languageISO639Code($locale).'_'.LocaleTool::countryISO3166Code($locale),
                        'hostName'          => preg_replace('#^https?://#', '', ContextTool::instance()->domain()),
                        'LicenseNumber'     => isset($this->_esbResult->othersParams['licenseNumber']) ? $this->_esbResult->othersParams['licenseNumber'] : null,
                    );

                }
                echo json_encode($result);
                break;
        }
        eZExecution::cleanExit();
    }