/** * @param string $term * @param bool $wal * @return array */ protected function mcSearch( $term, $wal ) { $session = curl_init(); curl_setopt( $session, CURLOPT_URL, $this->anonymousUrl . "/solr/$term/json" ); curl_setopt( $session, CURLOPT_HEADER, false ); curl_setopt( $session, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $session, CURLOPT_FOLLOWLOCATION, true ); $response = curl_exec( $session ); curl_close( $session ); $response = json_decode( $response, true ); $displayedTerm = mb_strlen( $term ) > 34 ? mb_substr( $term, 0, 34 ) . '...' : $term; $result = array( 'term' => str_replace( '+', ' ', $term ), 'count' => $response['count'], 'resultUrl' => $response['resultUrl'], 'mcAppUrl' => CacheApplicationTool::buildLocalizedApplicationByIdentifier( 'merck-connect' )->applicationUrl() . "#?s=$term", 'message' => ezpI18n::tr( "merck/merck_connect", "%nbresult RESULTS FOR <strong>%searchterm</strong> ON MERCK CONNECT", null, array( "%nbresult" => $response['count'], "%searchterm" => str_replace( '+', ' ', $displayedTerm ) ) ) . ' >', ); if( $wal && self::user() ) { $result['al'] = $this->anonymousUrl . '/genericsearch.xhtml?q=' . $term . '<oken=' . $this->getAutologinLink( true ); } if( $wal && !self::user() ) { $result['al'] = $this->anonymousUrl; } return $result; }
public function parseRequestParams() { parent::parseRequestParams(); $catchAppNameEnabled = MMGlobalSearch::isCatchUpAppNameEnabled(); if ( $catchAppNameEnabled ) { $applicationList = array(); $result = ApplicationSearch::search( $this->searchQuery ); if ( $result['response']['numFound'] > 0 ) { foreach ( $result['response']['docs'] as $row ) { $application = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $row['identifier_s'] ); if ( $application instanceof ApplicationLocalized ) { $applicationList[$row['identifier_s']] = array( 'identifier' => $row['identifier_s'], 'name' => $row['name_s'], 'url' => $application->applicationUrl() ); } } $this->contentList->pushResult( 'application_list' , $applicationList ); } } $this->withAllSpecialities = false; $this->withT3Facets = false; }
/** * */ public function initVars() { $this->application = CacheApplicationTool::buildLocalizedApplicationByIdentifier($this->applicationIdentifier); $tab = FacetFilteringTool::getTaxonomyTranslation('speciality'); foreach($tab as $key => $val) { $this->specialityIds[] = $key; } }
/** * @return string */ public function publishersFilter() { $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier( MerckManualShowcase::mainApplicationIdentifier() ); if ( $applicationLocalized instanceof ApplicationLocalized ) { return $applicationLocalized->getPublishersFilter(); } else { return null; } }
/** * @param string $clusterIdentifier * @param string $applicationIdentifier * @param string $bannerType * @return string */ public static function getStaticPath( $clusterIdentifier, $applicationIdentifier, $bannerType ) { if ( $clusterIdentifier !== ClusterTool::clusterIdentifier() ) { ClusterTool::setCurrentCluster($clusterIdentifier); } $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $applicationIdentifier ); if ( !($applicationLocalized instanceof ApplicationLocalized) ) { return null; } $bannerArray = $applicationLocalized->getBanners(); if( isset( $bannerArray[$bannerType] ) && !empty( $bannerArray[$bannerType] ) ) { return preg_replace( '#/extension#', 'extension/', $bannerArray[$bannerType] ); } return null; }
/** * @param array $params * @return array */ public static function rawSearch($params) { $localApplication = CacheApplicationTool::buildLocalizedApplicationByIdentifier(MerckManualShowcase::mainApplicationIdentifier()); $publishersFilters = $localApplication->getPublishersFilter(); if ( isset($params['fq']) && trim($params['fq']) != '' ) { $params['fq'] .= ' AND ' . $publishersFilters; } else { $params['fq'] = $publishersFilters; } return SolrTool::rawSearch($params); }
/** * @param array|string $applications * @param int $offset * @param string|bool $template * @param bool $ordered * @return array */ protected function fetchUserSelection( $applications = null, $offset = null, $template = false, $ordered = false ) { header("Cache-Control: no-cache, must-revalidate"); if( is_null( $applications ) && isset( $_POST['applications'] ) && $_POST['applications'] != 'null' ) { $applications = $_POST['applications']; } //TODO white liste to templates ? if( isset( $_POST['template'] ) ) { $template = $_POST['template']; } if( isset( $_POST['ordered'] ) ) { $ordered = $_POST['ordered']; } $elearningStatuses = isset( $_POST['st'] ) ? $_POST['st'] : null; if( !is_null($elearningStatuses) ) { if( !is_array($applications) ) $applications = array( 'e-learning' ); else $applications[] = 'e-learning'; } if(in_array("-1", $applications)) $applications = null; if( is_null( $offset ) ) $offset = isset( $_POST['offset'] ) ? $_POST['offset'] : 0; $managedResults = $this->manageResults( MMSelections::fetchUserSelectionByApps( null, null, $applications, $elearningStatuses, $ordered ), $offset ); $articles = array(); $fields = array( 'headline' => 'attr_headline_s', 'object_id' => 'meta_id_si', 'language' => 'meta_language_code_ms', 'has_image' => 'attr_has_image_'.ClusterTool::clusterIdentifier().'_bst', 'url' => 'attr_' . ClusterTool::clusterIdentifier() . '_url_s', 'publisher_path' => 'subattr_publisher_folder___source_id____s', 'app_identifiers' => 'subattr_parent_application___identifier____s' ); /** @var String[][] $applicationUrls */ $applicationsUrl = array(); /** @var MMSelections $item */ foreach($managedResults["items"] as $item) { $remote = $item->attribute("remote_id"); $locale = LocaleTool::mainLanguage(); $cluster = $item->attribute("cluster_identifier"); $article = array( "description" => $item->attribute("description"), "remote_id" => $remote, "cluster_identifier" => $cluster, "application" => $item->attribute("application"), "add_date" => $item->attribute("add_date"), "is_visible" => $item->attribute('is_visible'), ); $fqPrimaryLanguage = implode(" AND ", array( "meta_remote_id_ms:".$remote, "meta_language_code_ms:".$locale )); $fqSecondaryLanguages = implode(" AND ", array( "meta_remote_id_ms:".$remote, "-meta_language_code_ms:".$locale, "-meta_available_language_codes_ms:".$locale, )); $params = array( 'indent' => 'on', 'q' => '', 'start' => 0, 'rows' => 1, 'fq' => "(($fqPrimaryLanguage) OR ($fqSecondaryLanguages))", 'fl' => implode(',', array_values($fields)), 'qt' => 'ezpublish', 'explainOther' => '', 'hl.fl' => '', ); $raw = SolrTool::rawSearch($params); if(isset($raw["response"]["docs"][0])) { $rawArticle = $raw["response"]["docs"][0]; $applicationIdentifier = $item->attribute("application"); $publisherPath = $rawArticle[$fields["publisher_path"]][0]; $publisherInfo = PublisherFolderTool::getPathToIDMapping($publisherPath); $publisherFolderId = $publisherInfo['pfid']; if( !in_array($applicationIdentifier, $applicationsUrl)) { $application = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $applicationIdentifier ); if ( $application instanceof ApplicationLocalized ) { $applicationObject = $application->applicationObject(); $applicationsUrl[$applicationIdentifier]["url"] = $application->attribute('url_alias'); $applicationsUrl[$applicationIdentifier]["type"] = $applicationObject->applicationType()->attribute('type_identifier'); } else { continue; } } // since publisher refactor, we don't use the url in mm_selection_remote anymore, we use the url from solr instead $url = $rawArticle[$fields["url"]]; switch ( $applicationsUrl[$applicationIdentifier]["type"] ) { case 'evrika-calendar': case 'clinical-trials': $url = $applicationsUrl[$applicationIdentifier]["url"] . '/' . $url; break; case 'first-child': $url = $applicationsUrl[$applicationIdentifier]["url"]; break; default: $url = $applicationsUrl[$applicationIdentifier]["url"] . '/' . $publisherFolderId . '/' . $url; } $additionnalFields = array( "name" => $rawArticle[$fields["headline"]], "url" => $url, "object_id" => $rawArticle[$fields["object_id"]], "language" => $rawArticle[$fields["language"]], "has_image" => json_decode( base64_decode($rawArticle[$fields["has_image"]]) ), ); $article = array_merge($additionnalFields, $article); } $articles[] = $article; } $tpl = $this->tpl(); $tpl->setVariable( 'my_selection_list', array( 'items' => $articles ) ); $tpl->setVariable( 'facets', $managedResults['facets'] ); if(!$template) { return array( 'content' => array( 'articles' => $tpl->fetch( 'design:esibuild/app_content/my-selection/line.tpl' ), 'articles_nb' => count($articles), 'num_found' => $managedResults['total'], 'f' => $tpl->fetch( 'design:esibuild/app_content/my-selection/facet_line.tpl' ) ) ); } else { return array( 'content' => array( 'articles' => $tpl->fetch( 'design:esibuild/app_content/my-selection/' . $template . '_line.tpl' ), 'articles_nb' => count($managedResults['items']), 'num_found' => $managedResults['total'], 'f' => $tpl->fetch( 'design:esibuild/app_content/my-selection/facet_line.tpl' ) ) ); } }
/** * @return int */ public static function rootNodeId() { $merckManualAppLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier( self::mainApplicationIdentifier() ); $publisherNodeIds = $merckManualAppLocalized->publisherNodeIds(); $publisherNodeId = $publisherNodeIds[0]; return $publisherNodeId; }
public static function initVars($year, $cluster, $auto) { if($auto) { self::$autoMode = true; self::$year = date('Y', strtotime('now')); self::$month = date('m', strtotime('now')); self::$batch = self::getBatchNumberFromToday(); } else { self::$year = $year; } ClusterTool::setCurrentCluster($cluster); self::$tripApplication = CacheApplicationTool::buildLocalizedApplicationByIdentifier('trip'); self::$tripIds = self::getAllTripLocalizedIds(); $tab = FacetFilteringTool::getTaxonomyTranslation('customer_type'); foreach($tab as $key => $val) { self::$customerTypeIds[] = $key; } }
/** * @param array $uncrytedTicket * @return MMUsers */ public static function createOrUpdateMMUser( $uncrytedTicket ) { $userId = $uncrytedTicket['uuid']; $customerType = $uncrytedTicket['customerType']; if ( isset($uncrytedTicket['userSpeciality']) ) { $userSpeciality = $uncrytedTicket['userSpeciality']; } else { $userSpeciality = $uncrytedTicket['mainSpeciality']; } $state = $uncrytedTicket['state']; $country = eZIni::instance('site.ini')->variable('RegionalSettings','CountryOfRegistration'); $language = $uncrytedTicket['language']; /** * @todo: check $language entry format and parse it if needed to get an iso code on 2 chars */ $iniMapping = eZINI::instance('mercktaxonomymapping.ini'); $taxonomyType = $iniMapping->variable( 'Taxonomy', 'SpecialtiesTaxonomyType'); $specialtiesMappingINI = $iniMapping->variable( 'Taxonomy', 'Specialties' ); $customerTypesMappingINI = $iniMapping->variable( 'Taxonomy', 'CustomerTypes' ); if($taxonomyType != "transitive") { if ( isset( $customerTypesMappingINI[$customerType] ) ) { $customerType = $customerTypesMappingINI[$customerType]; } else { $customerType = $customerTypesMappingINI['Default']; self::updateDBWithEmptyValue( 'empty-CT', $userId, $country ); } if ( isset( $specialtiesMappingINI[$userSpeciality] ) ) { $userSpeciality = $specialtiesMappingINI[$userSpeciality]; } else { $userSpeciality = $specialtiesMappingINI['Default']; self::updateDBWithEmptyValue( 'empty-SPE', $userId, $country ); } } else { $customerTypesMapping = SolrSafeOperatorHelper::getCustomerTypes(); if ( !isset( $customerTypesMapping["$customerType"] ) ) { // fill with default value $customerType = $customerTypesMappingINI['Default']; self::updateDBWithEmptyValue( 'empty-CT', $userId, $country ); } $specialtiesMapping = SolrSafeOperatorHelper::getUserSpecialities(); if ( !isset( $specialtiesMapping[(string)$userSpeciality] ) ) { // fill with default value $userSpeciality = $specialtiesMappingINI['Default']; self::updateDBWithEmptyValue( 'empty-SPE', $userId, $country ); } } /** @var MMUsers $user */ $user = MMUsers::fetchByIdAndCountry( $userId, $country ); $isModifiedUser = false; if ( $user ) { if ( $customerType != $user->attribute('customer_type') ) { $user->setAttribute('customer_type', $customerType); $isModifiedUser = true; } if ( $userSpeciality !== $user->attribute('user_speciality') ) { $mainSpeciality = UserSpecialityContentSpeciality::getContentSpeciality ( $userSpeciality ); $defaultAdditionalSpecialities = MMUserLogin::getAddSpecialties($mainSpeciality); $user->setAttribute('user_speciality', $userSpeciality); // mapping main_spe additional spe $preferences = $user->getPreferences(); $userAditionalSpecialities = $preferences['specialities']; array_shift($userAditionalSpecialities); $tmp = array_diff( $userAditionalSpecialities, $defaultAdditionalSpecialities ); if( empty( $tmp ) ) // we don't modify the user spes if he has changed his selection { $preferences["specialities"] = MMUserLogin::getAddSpecialties($mainSpeciality); $user->setPreferences($preferences); } $user->setPreferences($preferences); // The user specialty has been modified, we need to update it for Quiz-type applications of the current cluster if( CacheApplicationTool::buildLocalizedApplicationByIdentifier('train-the-brain') instanceof ApplicationLocalized) { $playerScoring = QuizPlayerScoring::fetchOneBy( array( 'application_id' => (int)$app->applicationObject->id, 'uuid' => $user->attribute( 'uuid' ) ) ); // Checking if the current user has scored at least once for the application if( $playerScoring ) { foreach( FacetFilteringTool::getTaxoTranslationWithIDs( 'user_specialty' ) as $k => $t ) { if( ($k . "") === ($userSpeciality . "") ) { // Updating the user specialty id in the player scoring table $playerScoring->setAttribute( 'user_specialty', $t['id'] ); $playerScoring->store(); } } // Scheduling a ranking update QuizPendingRankingUpdate::add( $playerScoring->attribute( 'global_ranking' ), $app->applicationObject->id ); } } $isModifiedUser = true; } if ( $country != $user->attribute('country') ) { $user->setAttribute('country', $country); $isModifiedUser = true; } if( $language != $user->attribute( 'language' ) ) { $user->setAttribute('language', $language ); $isModifiedUser = true; } if ( $state != $user->attribute('state') ) { $user->setAttribute('state', $state); $isModifiedUser = true; } if ( $isModifiedUser ) { $user->setAttribute('date_update', time()); $user->store(); } // set gpnotebook hand shake data in preferences if($user->getGPNotebookHS()) { SolrSafeOperatorHelper::getAndStoreGPNotebookHS(); } } else { $mainSpeciality = UserSpecialityContentSpeciality::getContentSpeciality ( $userSpeciality ); $insertedArray = array ( 'uuid' => $userId, 'customer_type' => $customerType, 'user_speciality' => $userSpeciality, 'country' => $country, 'language' => $language, 'date_update' => time(), 'state' => $state, ); $user = new MMUsers ($insertedArray); $user->store(); // mapping main_spe additional spe $preferences = $user->getPreferences(); $preferences["specialities"] = MMUserLogin::getAddSpecialties($mainSpeciality); $user->setPreferences($preferences); $isModifiedUser = true; } if ( $isModifiedUser ) { // Tag Lyris user to be reimported : $user->tagLyrisToProcess(); } return $user; }
/** * Return the right url of a node with application name and the node * * @param string $applicationName Identifier of the application * @param eZContentObjectTreeNode $node The article * @param string|boolean $languageCode * * @return null|string */ public static function getUrlNode($applicationName, $node, $languageCode = false) { if ( !($node instanceof eZContentObjectTreeNode) ) return null; $getUrlNodeHandlers = eZINI::instance( 'merck.ini' )->variable( 'OperatorsSettings', 'getUrlNodeHandlers' ); if( isset( $getUrlNodeHandlers[$applicationName] ) ) { $method = $getUrlNodeHandlers[$applicationName]; return self::$method($applicationName, $node, $languageCode); } $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier($applicationName); if( !( $applicationLocalized instanceof ApplicationLocalized ) ) return null; $applicationObject = $applicationLocalized->applicationObject; if( !( $applicationObject instanceof ApplicationObject ) ) return null; $publisherFolderNodeId = PublisherFolderTool::getPublisherNodeIdFromArticleNode($node); if ( $publisherFolderNodeId == null ) return null; if ( $languageCode ) $node->setCurrentLanguage($languageCode); $forceExternalLink = $applicationObject->hasExternalLinkHandler(); $publisherInfo = PublisherFolderTool::getPublisherFolderInfosFromNodeId( $publisherFolderNodeId ); $url = preg_replace( '#^([^/]+/){2}#', '', $node->urlAlias() ); return $applicationLocalized->applicationUrl( $forceExternalLink ) . "/{$publisherInfo['pfid']}/" . ltrim( $url, '/' ); }
public function login() { if ( !$this->_loginParams ) { return $this->error(); } $wsHelper = self::getWSHandler(); $localizedLoginApplication = CacheApplicationTool::buildLocalizedApplicationByIdentifier( 'login' ); $esbResult = new ESBResult(); // Call the ESB Login webservice and populate the ESBResult object according to the ESB response $esbResponse = $wsHelper::call($this->_method, $this->_loginParams); static::populateESBResult($esbResult, $esbResponse); // UUMP autologin case if ( $this->_method == self::ESB_METHOD_READ ) $esbResult->login = ( $esbResult->userId == $this->_input['userId'] ); UserLog::instance()->step( 'esb' ); $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'; } $this->response($redirectURL); } elseif ( $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'; } $this->response($redirectURL); } elseif ( $esbResult->login ) { $rememberMe = ( isset( $this->_input['rememberme'] ) && $this->_input['rememberme'] == 'on' ); $context = isset( $this->_input['context'] ) ? $this->_input['context'] : false; $username = isset( $this->_input['LoginID'] ) ? $this->_input['LoginID'] : null; if ( isset( $this->_input['Username'] ) ) { $username = $this->_input['Username']; } if ( !is_null( $esbResult->userName ) && $esbResult->userName != $username ) { $username = $esbResult->userName; } if ( $this->_forceAutologin ) { $esbResult->autologin = true; } // For compatibility with UUMP which do not need read call anymore if ( method_exists( get_class( $this ), "readCall" ) ) { $isPopulated = static::populateESBResult( $esbResult, static::readCall( $username, $esbResult ) ); if ( !$isPopulated ) { UserLog::instance() ->uuid( $username ) ->esb_status( 'Error' ) ->msg('Read method call failed') ->store(); // error log caught on WS stack return $this->error(); } } $this->_esbResult = $esbResult; $loginResult = MMUserLogin::esbLogin( $username, $esbResult, $rememberMe, $context ); } if ( $loginResult ) { $this->_isLoginSuccessful = true; UserLog::instance() ->uuid( $username ) ->esb_status( 'Accepted' ) ->store(); $user = MMUsers::getCurrentUserObject(); $sl = SystemLocale::fetchByClusterAndSystem( ClusterTool::clusterIdentifier(), 'esb_language' ); $customerLanguage = !is_null( $sl ) ? $sl : eZINI::instance()->variable( 'RegionalSettings', 'ContentObjectLocale' ); if( SolrSafeOperatorHelper::featureIsActive( 'AsynchronousAnalyticsLoginCall' ) && SolrSafeOperatorHelper::feature( 'AsynchronousAnalyticsLoginCall', 'GoogleAnalytics' ) ) { $amq = new ActiveMQManager(); $domains = eZINI::instance( 'merck.ini' )->variable( 'DomainMappingSettings', 'ClusterDomains' ); $domain = isset( $domains[ClusterTool::clusterIdentifier()] ) ? $domains[ClusterTool::clusterIdentifier()] : 'unidentified.univadis.com'; $gasl = SystemLocale::fetchByClusterAndSystem( ClusterTool::clusterIdentifier(), 'ga_visitor_country' ); $gaCountry = !is_null( $gasl ) ? $gasl : $user->attribute( 'country' ); $gaParams = array( 'v' => 1, 'tid' => 'UA-41415675-6', 'uid' => $user->attribute( 'uuid' ), 't' => 'event', 'ec' => 'esb', 'ea' => 'login', 'ni' => 1, 'cd1' => $user->attribute( 'uuid' ), 'cd2' => 'logged', 'cd7' => $gaCountry, 'dh' => preg_replace( '#^.*?\.#', '', $domain ), ); $gaParams = 'https://ssl.google-analytics.com/collect?' . http_build_query( $gaParams ); $amq->sendMessageToQueue( 'portail.analytics.google', $gaParams ); } $this->_destUrl = $loginResult['destUrl']; // Stringify params $loginResult['params'][AppBarControl::COOKIE_UNORDERED_APPLIST_KEY] = $user->getApplicationList(); $loginResult['params'][MMUsers::COOKIE_KEY] = $user->getMMSettings(); $cookieUserPreferences = MMUsers::getCookieUserPreferencesValues(); foreach( $cookieUserPreferences as $key => $value ) { $loginResult['params'][$key] = $value; } $strParams = json_encode( $loginResult['params'] ); // Encrypts params $encryptedParams = MMUserLogin::encryptText( $strParams ); // Redirect to PHP-ESI $redirectURL = "/loginActions.php?context=" . urlencode( $loginResult['destUrl'] ) . "¶ms=" . urlencode( $encryptedParams ); $this->getSubsForOptin($user); // Branding reconsent check, done only if: // 1. feature ToUPPPopin enabled // 2. Always on WEB with this feature // 3. Only on mobile, whne setting showOnMobile is ON. if ( SolrSafeOperatorHelper::featureIsActive( 'ToUPPPopin') && ( !ContextTool::instance()->isMobile() || ( ContextTool::instance()->isMobile() && SolrSafeOperatorHelper::feature('ToUPPPopin','showOnMobile') ) ) ) { $displayReconsent = $this->checkTouPPPopin( $esbResponse ); // if we need to ask user for reconsent ($displayReconsent - taken fromESB response) we decide if we want page below if: // 1. On WEB and useDedicatedPage setting is ON // 2. On mobile and useDedicatedPageMobile setting is ON if ( $displayReconsent && ( ( !ContextTool::instance()->isMobile() && SolrSafeOperatorHelper::feature( 'ToUPPPopin', 'useDedicatedPage' ) ) || ( ContextTool::instance()->isMobile() && SolrSafeOperatorHelper::feature( 'ToUPPPopin', 'useDedicatedPageMobile' ) ) ) ) { CookieTool::destroyCookie( 'displayToUPPPopin' ); CookieTool::destroyCookie( 'displayToUPPPopin', '/', null ); CookieTool::setCookie( 'displayToUPPPage', 1, time() + ( 2 * 24 * 60 * 60 ) ); $touPpPageUrl = eZINI::instance( 'site.ini' )->variable( 'SiteSettings', 'ToUPPPageUrl' ) . "/#?tpc=" . urlencode( $loginResult['destUrl'] ); $redirectURL = "/loginActions.php?context=" . urlencode( $touPpPageUrl ) . "¶ms=" . urlencode( $encryptedParams ); } } // Consult Popin for France | mobile check disabled - it fails on STG if( /*ContextTool::instance()->isMobile() && */ in_array(ClusterTool::clusterIdentifier(), array( 'cluster_france' ))) { CookieTool::destroyCookie('displayConsultMobile'); CookieTool::destroyCookie('displayConsultMobile', '/', null); CookieTool::setCookie('displayConsultMobile', $user->getConsult(), time() + ( 2 * 24 * 60 * 60 )); } $this->response( $redirectURL ); } elseif ( $esbResult->errorCode === 9 ) { UserLog::instance()->esb_status( 'Error' )->msg( 'Error 9' )->store(); if ( $this->_isAutologin && isset($this->_input['context']) ) { $redirectURL = urldecode($this->_input['context']); $this->forceRedirect($redirectURL); } else { return $this->error( 1 ); } } elseif ( !$esbResult->registered ) { $errorMsg = $esbResult->msg; if ( empty($errorMsg) ) $errorMsg = 'Could not log user'; UserLog::instance()->esb_status( 'Error' )->msg( $errorMsg )->store(); if ( $this->_isAutologin && isset($this->_input['context']) ) { $redirectURL = urldecode($this->_input['context']); $this->forceRedirect($redirectURL); } //#45436 REDIRECT TO COMUNITY PAGE AFTER BAD LOG-IN if ( isset($this->_input['context']) && preg_match('/comuniti.fr/', $this->_input['context']) ) { $redirectURL = urldecode($this->_input['context']); $redirectURL = substr( urldecode( parse_url($redirectURL, PHP_URL_QUERY) ),2 ); $this->forceRedirect($redirectURL); } if ( $esbResult->errorCode > 0 && $esbResult->errorCode != 10 ) { return $this->error( $esbResult->errorCode ); } return $this->error( 3 ); } UserLog::instance() ->step( 'after_login' ) ->msg( 'Error: Unprocessed login for input: ' . print_r( $this->_input, true ) ) ->store(); return $this->error(); }
public static function getPublisherArticleUrl($publisher, $articleId) { $fields = array( 'apps' => 'subattr_local_application___source_mixed____s', 'url' => 'attr_'.ClusterTool::clusterIdentifier().'_url_s', 'publisher_path' => 'subattr_publisher_folder___source_id____s', ); $fq = array( "subattr_publisher_folder___source_id____s: \"{$publisher}\"", "attr_publisher_internal_id_s: \"{$articleId}\"", ); $params = array( 'indent' => 'on', 'q' => '', 'start' => 0, 'rows' => 1, 'fq' => implode(' AND ', $fq), 'fl' => implode(',', array_values($fields)), 'qt' => 'ezpublish', 'explainOther' => '', 'hl.fl' => '', ); $raw = SolrTool::rawSearch($params); if ($raw['response']['numFound'] == 0) { return null; } $row = $raw['response']['docs'][0]; $solrApplicationIndexes = $row[$fields['apps']]; $solrApplicationIdentifiers = array(); $solrApplicationNames = array(); foreach( $solrApplicationIndexes as $applicationIndex ) { list ( $cluster, /* unused */, $applicationId ) = explode( '##', $applicationIndex ); if ( $cluster == ClusterTool::clusterIdentifier() ) { $app = CacheApplicationTool::buildLocalizedApplicationByApplication( $applicationId ); if ( !($app instanceof ApplicationLocalized) ) continue; $solrApplicationNames[] = $app->attribute('name'); $solrApplicationIdentifiers[] = $app->applicationObject()->attribute('identifier'); } } if (empty($solrApplicationIdentifiers)) { return; } $applicationIdentifier = $solrApplicationIdentifiers[0]; $application = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $applicationIdentifier ); $applicationObject = $application->applicationObject(); $applicationType = $applicationObject->applicationType()->attribute('type_identifier'); $publisherPath = $row[$fields['publisher_path']][0]; $publisherInfo = PublisherFolderTool::getPathToIDMapping($publisherPath); $publisherFolderId = $publisherInfo['pfid']; $url = isset( $row[$fields['url']] ) ? $row[$fields['url']] : null; $url = ($applicationType == 'first-child') ? $application->attribute('url_alias') : $application->attribute('url_alias') . '/' . $publisherFolderId . '/' . $url; return $url; }
/** * @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; } }
<?php header( 'Cache-Control: no-cache, must-revalidate' ); $globalSearchURi = CacheApplicationTool::buildLocalizedApplicationByIdentifier( 'global-search' )->attribute( 'url' ); $globalSearch = ApplicationFactory::fetchByUri( $globalSearchURi ); $globalSearch->initResultHandler(); $resultHandler = $globalSearch->getResultHandler(); $responseFormat = $Params['wt']; $keyword = trim( $Params['q'] ); $filters = array(); $filters[] = $resultHandler->publishersFilter(); $additionalSolrFilters = $resultHandler->additionalSolrFilters(); foreach($additionalSolrFilters as $a) $filters[] = $a; $params = array( 'indent' => 'on', 'q' => $keyword, 'fq' => implode( ' AND ', $filters ), 'start' => '', 'rows' => '15', 'fl' => 'attr_headline_s', 'qt' => 'ezpublish', 'explainOther' => '', 'hl.fl' => '', 'sort' => 'score desc', );
public function __construct() { $this->feedArticles = array(); $this->application = CacheApplicationTool::buildLocalizedApplicationByIdentifier('bbc_feed'); }
<?php /* @type $Params string[] */ $appIdentifier = $Params['ApplicationIdentifier']; $clusterIdentifier = isset( $Params['ClusterIdentifier'] ) ? $Params['ClusterIdentifier'] : ClusterTool::clusterIdentifier(); $varDir = eZINI::instance( 'site.ini' )->variable( 'FileSettings', 'VarDir' ); $outputFile = "{$varDir}/images/common/apps/icon/{$appIdentifier}/{$clusterIdentifier}_ico.png"; $spriteImgPath = StaticData::clusterFilePath(false, "apps/{$appIdentifier}/ico_sprite.png"); $backgroundFilePath = './extension/ezoscar/design/oscar/images/common/appicon/background.png'; $fileUtils = eZClusterFileHandler::instance($outputFile); ClusterTool::setCurrentCluster( $clusterIdentifier ); $app = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $appIdentifier ); ClusterTool::resetCurrentCluster(); if ( !$app instanceof ApplicationLocalized ) { eZDebug::writeError( "Application not found: {$appIdentifier}" ); header('HTTP/1.0 404 Not Found'); eZExecution::cleanExit(); } if ( $fileUtils->fileExists( $outputFile ) ) { $appIcon = $fileUtils->fetchContents(); }
/** * @param string $taxonomyCategory * @param float $taxonomyValue * @param int $limit * @param boolean $includeAllValues * @return array */ public function getRelatedContent($taxonomyCategory, $taxonomyValue, $limit, $includeAllValues, $nodeId) { $fields = $this->mappingFieldsSolr; $filters = array(); if ($includeAllValues) { foreach ($taxonomyValue as $tv) { $filters[] = "subattr_{$taxonomyCategory}___source_id____s: \"{$tv}\""; } } else { $filter = "subattr_{$taxonomyCategory}___source_id____s: (%s)"; $taxonomyValue = array_map( function($v) { return "\"{$v}\""; }, $taxonomyValue); $filter = sprintf($filter, implode(' OR ', $taxonomyValue)); $filters[] = $filter; } $filters[] = '-meta_node_id_si: ' . $nodeId; $locale = LocaleTool::languageFromLocale(); $filters[] = "meta_language_code_ms:".$locale.'*'; $params = array( 'indent' => 'on', 'q' => '*:*', 'fq' => implode(' AND ' , $filters), 'start' => $this->offset, 'rows' => $limit, 'fl' => implode(',',$fields), 'qt' => 'ezpublish', 'explainOther' => '', 'hl.fl' => '', 'sort' => "attr_online_date_dt desc", ); $solrResult = SolrTool::rawSearch( $params, 'php', true, false ); foreach ( $solrResult['response']['docs'] as $doc ) { $nodeId = $doc['meta_node_id_si'][0]; $articleNodeIDs[] = $nodeId; $solrApplicationIndexes = isset ( $doc[$fields['apps']] ) ? $doc[$fields['apps']] : array(); $solrApplicationNames = array(); $solrApplicationIdentifiers = array(); $app = null; foreach( $solrApplicationIndexes as $applicationIndex ) { list ( $cluster, /* unused */, $applicationId ) = explode( '##', $applicationIndex ); if ( $cluster == ClusterTool::clusterIdentifier() ) { $app = CacheApplicationTool::buildLocalizedApplicationByApplication( $applicationId ); if ( !($app instanceof ApplicationLocalized) ) continue; $solrApplicationNames[] = $app->attribute('name'); $solrApplicationIdentifiers[] = $app->applicationObject()->attribute('identifier'); } } $url = isset( $doc[$fields['url']] ) ? $doc[$fields['url']] : null; if ( empty( $solrApplicationIdentifiers ) ) { eZDebug::writeError( "Could not get application id for cluster for node $nodeId - Falling back to current application" ); $solrApplicationIdentifiers = array( $this->contentList->applicationObject()->attribute('identifier') ); } $masterApps = $this->contentList->iniMerck()->hasSection('MasterAppSettings') && $this->contentList->iniMerck()->hasVariable( 'MasterAppSettings', 'MasterAppList' ) ? $this->contentList->iniMerck()->variable( 'MasterAppSettings', 'MasterAppList' ) : array(); $applicationIdentifier = $solrApplicationIdentifiers[0]; if (!empty($masterApps)) { foreach ($solrApplicationIdentifiers as $solrApplicationIdentifierKey => $solrApplicationIdentifier) { if (in_array($solrApplicationIdentifier, $masterApps)) { $applicationIdentifier = $solrApplicationIdentifier; unset( $solrApplicationIdentifiers[$solrApplicationIdentifierKey] ); $solrApplicationIdentifiers = array_merge( array( $applicationIdentifier ), $solrApplicationIdentifiers ); break; } } } $application = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $applicationIdentifier ); $applicationObject = $application->applicationObject(); $applicationType = $applicationObject->applicationType()->attribute('type_identifier'); $publisherPath = $doc[$fields['publisher_path']][0]; $publisherInfo = PublisherFolderTool::getPathToIDMapping($publisherPath); $publisherFolderId = $publisherInfo['pfid']; $onlineDateStamp = strtotime($doc[$fields['online_date']]) > 3600*24*2 ? SolrTool::getTimestampFromSolr($doc[$fields['online_date']]) : 0; $mediaTypes = isset( $doc[$fields['media_types']] ) ? json_decode( base64_decode($doc[$fields['media_types']]), true ) : array(); $mediaCount = 0; $hasImage = isset( $doc[$fields['has_image']] ) ? json_decode( base64_decode($doc[$fields['has_image']]), true ) : array(); $url = ($applicationType == 'first-child') ? $application->attribute('url_alias') : $application->attribute('url_alias') . '/' . $publisherFolderId . '/' . $url; $result[$nodeId] = array( 'object_id' => isset( $doc[$fields['object_id']] ) ? $doc[$fields['object_id']] : null, 'language' => isset( $doc[$fields['language']] ) ? $doc[$fields['language']] : null, 'headline' => isset( $doc[$fields['headline']] ) ? $doc[$fields['headline']] : null, 'promo_description' => isset( $doc[$fields['promo_description']] ) ? $doc[$fields['promo_description']] : null, 'online_date' => strtotime($doc[$fields['online_date']]) > 3600*24*2 ? SolrTool::getDateFromSolr($doc[$fields['online_date']]) : 0, 'has_image' => $hasImage, 'url' => $url, 'node_id' => $nodeId, 'internal_id' => isset( $doc[$fields['internal_id']] ) ? $doc[$fields['internal_id']] : null, 'application' => $application, ); } return $result; }
public function run() { $type = isset( $this->options['type'] ) ? $this->options['type'] : null; $types = array( 'login', 'autologin' ); if ( !in_array( $type, $types ) ) { $typeAnswer = $this->cli->askQuestion( "Action type", $types ); $type = $types[$typeAnswer]; } $this->actionType = $type; $credentials = $this->getCredentials(); $this->cli->cli->output( var_export($credentials, true) ); if ( !$this->domain() ) { $domainsList = array_keys( $this->domains ); sort($domainsList); $domainAnswer = $this->cli->askQuestion( "For which domain?", $domainsList ); $domain = $domainsList[$domainAnswer]; $this->domain( $domain ); } $this->cli->cli->output( "\nChecking ESB Login" ); $esbResponse = isset($credentials['t']) ? $this->checkAutoLogin( $credentials['t'] ) : $this->checkLogin( $credentials['login'], $credentials['password'] ); $data = $esbResponse['data']; if( !isset( $data['Login']) || $data['Login'] != 'yes' ) $this->script->shutdown( 1, "Could not log in:\n".print_r( $esbResponse, true ) ); if( !isset( $data['Username']) || empty( $data['Username'] ) ) $this->script->shutdown(1, "No Username returned\n".print_r( $esbResponse, true ) ); /* @var $localizedLoginApplication \ApplicationLocalized */ $localizedLoginApplication = \CacheApplicationTool::buildLocalizedApplicationByIdentifier( 'login' ); if ( $data['Data']['Validated'] == 'PV' && $localizedLoginApplication->getCustomParameter( 'RestrictPendingUsers') ) $this->script->shutdown( 1, "Pending user: \n".print_r( $esbResponse, true) ); if ( $data['Data']['Validated'] == 'RP' && $localizedLoginApplication->getCustomParameter( 'RestrictRejectedUsers' ) ) $this->script->shutdown( 1, "Rejected user: \n".print_r( $esbResponse, true) ); $this->cli->cli->output( "Login looks to be OK" ); if( $this->script->verboseOutputLevel() ) $this->cli->cli->output( print_r( $esbResponse, true ) ); $this->cli->cli->output( "\nChecking ESB Read" ); $esbResponse = $this->checkRead( $data['Username'] ); if( $this->script->verboseOutputLevel() ) $this->cli->cli->output( print_r( $esbResponse, true ) ); $this->script->shutdown( 0 ); }
/** * The modify method gets the current content object AND the list of * Solr Docs (for each available language version). * * @param eZContentObject $contentObject * @param eZSolrDoc[] $docList */ public function modify( eZContentObject $contentObject, &$docList ) { /* @var eZContentObjectTreeNode $contentMainNode */ $contentMainNode = $contentObject->mainNode(); $contentObjectLanguages = $contentObject->allLanguages(); $articleLanguageArray = array_keys($contentObjectLanguages); $publisherFolderNodeId = PublisherFolderTool::getPublisherNodeIdFromArticleNode($contentMainNode); $isMerckManualShowcase = false; // Depth : 0 => father article, 1+ => child article $articleRelativeDepth = $contentMainNode->attribute('depth') - 4; if ( is_null($publisherFolderNodeId) ) return; $publisherFolderInfos = PublisherFolderTool::getPublisherFolderInfosFromNodeId($publisherFolderNodeId); if ( !$publisherFolderInfos ) return; $publisherFolderRelations = PublisherFolderTool::getPublisherFolderRelations($publisherFolderInfos['path']); if ( !$publisherFolderRelations || count($publisherFolderRelations['clusters']) === 0 ) return; // node remote $remote = $contentMainNode->attribute("remote_id"); $this->addValueToDoc( $docList, 'attr_node_remote_s', $remote); $this->addValueToDoc( $docList, 'attr_relative_depth_i', $articleRelativeDepth); foreach ( $publisherFolderRelations['clusters'] as $cluster => $applications ) { ClusterTool::setCurrentCluster( $cluster ); $applicationIdentifier = $applications[0]; /* @var $applicationLocalized ApplicationLocalized */ $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $applicationIdentifier ); if ( !($applicationLocalized instanceof ApplicationLocalized) ) { if (count($applications) == 1) { unset($publisherFolderRelations['clusters'][$cluster]); continue; } $applicationIdentifier = $applications[1]; $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $applicationIdentifier ); if ( !($applicationLocalized instanceof ApplicationLocalized) ) { unset($publisherFolderRelations['clusters'][$cluster]); continue; } $publisherFolderRelations['clusters'][$cluster] = array ($applicationIdentifier); } // visibility per cluster $isVisible = ObjectVisibilityManager::isVisible($contentMainNode->attribute('contentobject_id'), $cluster); $this->addValueToDoc( $docList, 'attr_is_invisible_' . $cluster . '_b', !$isVisible ); if (!isset(self::$_applicationIdentifierToId[$applicationIdentifier])) self::$_applicationIdentifierToId[$applicationIdentifier] = $applicationLocalized->applicationObject()->attribute ('id'); $publisherFolder = $applicationLocalized->getPublisherFolderFromPath($publisherFolderInfos['path']); $publisherLanguages = $publisherFolder->getLanguages(); $publisherAndArticleLanguages = array_intersect($publisherLanguages, $articleLanguageArray); if ( count($publisherAndArticleLanguages) == 0 ) continue; $primaryLanguage = reset($publisherAndArticleLanguages); $contentMainNode->setCurrentLanguage($primaryLanguage); // publisher folder languages $languageKey = 'subattr_language_' . $cluster . '____s'; $formatedLanguages = array_map( array('kezfSolrArticleIndex', 'languageCode') , $publisherAndArticleLanguages ); $indexLanguages = array_unique( $formatedLanguages ); $this->addValueToDoc( $docList, $languageKey, $indexLanguages, true, false ); // Meck manual sections if( $applicationIdentifier == MerckManualShowcase::mainApplicationIdentifier() ) $isMerckManualShowcase = true; // url computation /* @var eZContentObjectAttribute[] $dataMap */ $dataMap = $contentMainNode->dataMap(); ClusterTool::setCurrentCluster( $cluster ); if( $applicationIdentifier == MerckManualShowcase::mainApplicationIdentifier() ) { $urlContent = preg_replace( '#^([^/]+/){2}#', '', MerckManualFunctionCollection::getMerckManualNodeUrl( $applicationIdentifier, $contentMainNode, $primaryLanguage ) ); } else $urlContent = preg_replace( '#^([^/]+/){2}#', '', $contentMainNode->urlAlias() ); $this->addValueToDoc( $docList, 'attr_' . $cluster . '_url_s', $urlContent); $hasImage = array(); for ( $mediaCase = 0; $mediaCase<=2; $mediaCase++ ) { $hasImage[$mediaCase] = NodeOperatorHelper::hasImageArticle($contentMainNode, $mediaCase); } self::addValueToDoc( $docList, 'attr_has_image_' . $cluster . '_bst', base64_encode(json_encode($hasImage)) ); $db = MMDB::instance(); // index rating $row = $db->arrayQuery(sprintf("SELECT * FROM mm_rating_remote WHERE cluster_identifier = '%s' AND remote_id = '%s'", $cluster, $contentObject->remoteID())); if(count($row) && $row[0]["counter"] > 5 ) { self::addValueToDoc( $docList, 'attr_content_rating_'.$cluster.'_f', $row[0]["total"]/$row[0]["counter"] ); //update to_reindex $db->query(sprintf("UPDATE mm_rating_remote SET to_reindex=0 WHERE cluster_identifier = '%s' AND remote_id = '%s'", $cluster, $contentObject->remoteID())); } // index views $row = $db->arrayQuery(sprintf("SELECT * FROM mm_readcount_remote WHERE cluster_identifier = '%s' AND remote_id = '%s'", $cluster, $contentObject->remoteID())); if(count($row) && $row[0]["count"] > 0 ) { self::addValueToDoc( $docList, 'attr_view_counter_'.$cluster.'_i', $row[0]["count"] ); //update to_reindex $db->query(sprintf("UPDATE mm_readcount_remote SET to_reindex=0 WHERE cluster_identifier = '%s' AND remote_id = '%s'", $cluster, $contentObject->remoteID())); } if( $dataMap && $dataMap['media_content']->hasContent() ) { $mediaContent = $dataMap['media_content']->content(); $mediaRelationList = $mediaContent['relation_list']; $entries = array(); $firstLink = true; $totalQuizzes = 0; foreach ( $mediaRelationList as $mediaRelation ) { $mediaObjectId = $mediaRelation['contentobject_id']; $mediaClass = $mediaRelation['contentclass_identifier']; /******************************************************************************* * TODO : Adapt after PF Refactor *******************************************************************************/ if ( !in_array($mediaClass, array('image', 'quiz', 'link')) ) continue; if ( $mediaClass === 'image' ) { if ( count( $entries ) >= 3 ) continue; // Language is DEPRECATED, Fake Language instead $entries[] = $mediaObjectId . ";dep-DP"; /******************************************************************************* * TODO : End : Adapt after PF Refactor *******************************************************************************/ } elseif ( ( $mediaClass === 'link' && $firstLink ) || $mediaClass === 'quiz' ) { $mediaObject = eZContentObject::fetch( $mediaObjectId ); if ( !$mediaObject ) continue; /* @var eZContentObjectAttribute[] $mediaDatamap */ $mediaDatamap = $mediaObject->dataMap(); if ( !is_array($mediaDatamap) ) continue; if ( $mediaClass === 'link' ) { if (!$mediaDatamap['url']->hasContent()) continue; $firstLink = false; self::addValueToDoc( $docList, 'attr_media_content_link_' . $cluster . '____ms', $mediaDatamap['url']->content(), false ); } elseif ( $mediaClass === 'quiz' ) { if ( $mediaDatamap['replies']->hasContent() ) { $quizReplies = $mediaDatamap['replies']->content(); $quizReplies = $quizReplies->attribute('columns'); $quizReplies = $quizReplies['sequential'][1]['rows']; if ( count($quizReplies) > 0 ) self::addValueToDoc( $docList, 'attr_media_content_quiz_replies_' . $cluster . '____ms', $quizReplies, true); } if ( !empty($mediaDatamap['question']->DataText) ) { self::addValueToDoc( $docList, 'attr_media_content_quiz_question_' . $cluster . '_ms', trim(strip_tags($mediaDatamap['question']->DataText)), false ); } if ( !$mediaDatamap['points']->hasContent() ) continue; $totalQuizzes+= $mediaDatamap['points']->content(); } } } $withMediaDuration = true; $typeMedias = NodeOperatorHelper::getPictosMedia( $contentMainNode, $withMediaDuration ); $typeMediasSerialized = base64_encode( json_encode($typeMedias) ); // getPictosMedia as solr field self::addValueToDoc( $docList, 'attr_media_content_types_' . $cluster . '_bst', $typeMediasSerialized, false ); // getMediaCount as solr field $mediaCount = NodeOperatorHelper::getMediaCount($contentMainNode); self::addValueToDoc( $docList, 'attr_media_content_count_' . $cluster . '_i', $mediaCount, false ); // Used only for Quizz if ( $totalQuizzes > 0 ) self::addValueToDoc( $docList, 'attr_media_content_quiz_points_' . $cluster . '_i', $totalQuizzes, false ); } unset($isHidden); } ClusterTool::resetCurrentCluster(); $concernedNode = $contentMainNode; $concernedNode->setCurrentLanguage($articleLanguageArray[0]); if ( $contentMainNode->attribute('depth') > 4 ) { $concernedNode = $contentMainNode->fetchParent(); $concernedNode->setCurrentLanguage($articleLanguageArray[0]); } /* @type $concernedDM eZContentObjectAttribute[] */ $concernedDM = $concernedNode->dataMap(); $tags = $concernedDM['tags']; $MerckManualAboutSectionId = eZIni::instance('merck.ini')->variable('MerckManualAboutSettings', 'SectionSourceId'); $taxonomiesAttribute = $concernedDM['serialized_taxonomies']; if( $taxonomiesAttribute instanceof eZContentObjectAttribute && $taxonomiesAttribute->hasContent() ) { $taxonomies = $taxonomiesAttribute->content(); foreach( array_keys($publisherFolderRelations['clusters']) as $cluster ) { self::addValueToDoc( $docList, "attr_exclude_from_search_{$cluster}_b", $MerckManualAboutSectionId && in_array($MerckManualAboutSectionId, $taxonomies['section']), false ); } } if( $tags instanceof eZContentObjectAttribute && $tags->hasContent() ) self::addValueToDoc( $docList, 'subattr_tags____ms', explode("|", $tags->content()) ); if ( $isMerckManualShowcase ) $this->processSpecificMerckManual($docList, $concernedNode, $concernedDM, $publisherFolderRelations); foreach ( $publisherFolderRelations['clusters'] as $cluster => $applications ) { ClusterTool::setCurrentCluster( $cluster ); foreach( $applications as $key => $applicationIdentifier ) { if ( !isset(self::$_applicationIdentifierToId[$applicationIdentifier]) ) { $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $applicationIdentifier ); if( !($applicationLocalized instanceof ApplicationLocalized) ) { eZDebug::writeError( sprintf('Cluster: %s; Identifier: %s; ObjectId: %s', $cluster, $applicationIdentifier, $contentObject->attribute('id') ), 'Error getting application localized' ); unset( $publisherFolderRelations['clusters'][$cluster][$key] ); } else self::$_applicationIdentifierToId[$applicationIdentifier] = $applicationLocalized->applicationObject()->attribute('id'); } } } ClusterTool::resetCurrentCluster(); $applicationIds = array(); foreach ( $publisherFolderRelations['clusters'] as $cluster => $applications ) foreach( $applications as $applicationIdentifier ) $applicationIds[] = self::$_applicationIdentifierToId[$applicationIdentifier]; $uniqueApplicationIds = array_unique($applicationIds); foreach( $docList as $languageCode => $doc ) { $dataMap = $contentObject->fetchDataMap(false, $languageCode); $headline = $dataMap['headline']->content(); $headlineLowerCase = mb_strtolower( StringTool::removeAccents($headline, 'utf-8', false), 'utf-8' ); $unaccentedFirstLetter = mb_substr($headlineLowerCase, 0, 1, 'utf-8'); $doc->addField( 'attr_headline_first_letter_lc_s', $unaccentedFirstLetter ); $doc->addField( 'attr_headline_lc_s', $headlineLowerCase ); foreach( $uniqueApplicationIds as $id ) { $doc->addField( 'subattr_local_application___source_id____s', $id ); } foreach( $publisherFolderRelations['clusters'] as $cluster => $applications ) { foreach( $applications as $applicationIdentifier ) { $doc->addField('subattr_local_application___source_mixed____s', $cluster . '##unused##' . self::$_applicationIdentifierToId[$applicationIdentifier]); } } } }
/** * @see ezfSolrDocumentFieldBase::getData() * @return array */ public function getData() { $data = parent::getData(); $content = $this->ContentObjectAttribute->content(); /* @var $content array */ foreach ( array_merge( self::taxonomyAttribute(), array_keys($content) ) as $taxonomyIdentifier ) { $taxonomyValues = isset( $content[$taxonomyIdentifier] ) ? $content[$taxonomyIdentifier] : array(); $subattrSourceIdValues = array(); $subattrSourceIdFieldName = self::getCustomSubattributeFieldName( $taxonomyIdentifier, 'source_id'); foreach ( $taxonomyValues as $taxonomyValue ) { if( preg_match( '#^symptom_.*$#', $taxonomyValue ) ) { $sourceKey = $taxonomyValue; $subattrSourceIdValues[] = $sourceKey; // we need a few more things for the symptoms /* @type $node eZContentObjectTreeNode */ $contentObject = $this->ContentObjectAttribute->object(); $node = $contentObject->mainNode(); $clusters = NodeTool::getArticleClusters($node); foreach( $clusters as $cluster ) { ClusterTool::setCurrentCluster($cluster); $ini = eZINI::fetchFromFile('extension/'.$cluster.'/settings/site.ini'); $node->setCurrentLanguage( $ini->variable('RegionalSettings', 'ContentObjectLocale') ); $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier( MerckManualShowcase::mainApplicationIdentifier() ); if ( !$applicationLocalized ) continue; $customSymptomAttributeKey = 'attr_custom_symptom_'.$cluster.'_s'; $labelTranslations = FacetFilteringTool::getTaxonomyTranslation( 'symptom' ); $label = $labelTranslations[$sourceKey]; $url = preg_replace( '#^[^/]+#', '', MerckManualFunctionCollection::getMerckManualNodeUrl( 'meck-manual-showcase', $node, $ini->variable('RegionalSettings', 'ContentObjectLocale') ) ); ClusterTool::resetCurrentCluster(); $customSymptomAttributeValueParts = array( mb_strtolower(mb_substr(StringTool::removeAccents( StringTool::CJK2Pinyin($label) ), 0, 1)), $label, $url ); $data[$customSymptomAttributeKey] = implode( '##', $customSymptomAttributeValueParts ); } } else if ( preg_match('#^222\.[0-9]+$#', $taxonomyValue ) ) { $sourceKey = $taxonomyValue; $subattrSourceIdValues[] = $sourceKey; /* @type $node eZContentObjectTreeNode */ /* @type $dataMap eZContentObjectAttribute[] */ $contentObject = $this->ContentObjectAttribute->object(); $node = $contentObject->mainNode(); $clusters = NodeTool::getArticleClusters($node); $customSymptomAttributeValueParts = array( $content['layer_natom'][0], $content['sub_layer_natom'][0], ); foreach( $clusters as $cluster ) { ClusterTool::setCurrentCluster($cluster); $customSymptomAttributeKey = 'attr_custom_layer_sublayer_natom_'.$cluster.'_s'; $data[$customSymptomAttributeKey] = implode( '##', $customSymptomAttributeValueParts ); ClusterTool::resetCurrentCluster(); } } else $subattrSourceIdValues[] = trim( $taxonomyValue ); } $data[$subattrSourceIdFieldName] = empty($subattrSourceIdValues) ? '' : $subattrSourceIdValues; } return $data; }
/** * @return array */ public static function selectionList() { $userSelections = array(); $selections = MMSelections::fetchUserSelection(null, null, false); /* @type $selection MMSelections */ while ( list(, $selection) = each($selections) ) { $object = eZContentObject::fetchByRemoteID($selection->attribute('remote_id')); if ( $object instanceof eZContentObject ) { $node = $object->mainNode(); /* @type $dataMap eZContentObjectAttribute[] */ $dataMap = $node->dataMap(); // Get first promo_image $image = false; if ( isset($dataMap['promo_image']) && $dataMap['promo_image']->hasContent() ) { $content = $dataMap['promo_image']->content(); $relationList = $content['relation_list']; if ( isset($relationList[0]['node_id']) ) { /* @type $imageDataMap eZContentObjectAttribute[] */ $imageNode = eZContentObjectTreeNode::fetch($relationList[0]['node_id']); $imageDataMap = $imageNode->dataMap(); if ( isset($imageDataMap['file']) && $imageDataMap['file']->hasContent() ) { /* @type $imageFileContent eZImageAliasHandler */ $imageFileContent = $imageDataMap['file']->content(); $imageFileAlias = $imageFileContent->imageAlias('original'); $image = $imageFileAlias['url']; } } } $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByIdentifier($selection->attribute('application')); $applicationObject = $applicationLocalized->applicationObject(); $userSelections[] = array( 'headline' => $node->getName(), 'nodeId' => $selection->attribute('node_id'), 'date' => date(DATE_ATOM, $selection->attribute('add_date')), 'application' => $applicationObject->attribute('id'), 'applicationName' => $applicationLocalized->attribute("name"), 'description' => $selection->attribute('description'), 'image' => '/' . $image, 'url' => NodeOperatorHelper::getUrlNode($selection->attribute('application'), $node) ); } } return array( 'selection' => $userSelections, 'count' => MMSelections::countTotalFromUserSelection() ); }
/** * @param string $type * @param int $offset * @param bool $includeAllFacets * @return array */ protected function fetchUserLearningTracker( $type = null, $offset = 0, $includeAllFacets = false ) { if( isset( $_POST['type'] ) && !is_null( $_POST['type'] ) && $_POST['type'] != 'null' ) { $type = $_POST['type']; } if( isset( $_POST['offset'] ) && !is_null( $_POST['offset'] ) ) { $offset = $_POST['offset']; } if( isset( $_POST['iaf'] ) && !is_null( $_POST['iaf'] ) && $_POST['iaf'] != 'false' ) { $includeAllFacets = $_POST['iaf']; } $showResults = SolrSafeOperatorHelper::feature( 'MyLearningTracker', 'showResults' ); $managedResults = $this->manageResults( $type, $offset, $includeAllFacets ); if( $type == 'certificates' && $includeAllFacets ) { $allManagedResults = $this->manageResults( null, 0, true ); $managedResults['facetCounts'] = array_merge( $managedResults['facetCounts'], $allManagedResults['facetCounts'] ); $managedResults['userCourses'] = $allManagedResults['userCourses']; } $this->tpl()->setVariable( 'items', $managedResults['items'] ); $lineTemplate = 'design:esibuild/app_content/learning-tracker/line.tpl'; if( $type == 'certificates' ) { $this->tpl()->setVariable( 'current_localized', CacheApplicationTool::buildLocalizedApplicationByIdentifier( 'certificates' ) ); $lineTemplate = 'design:esibuild/app_content/certificates/line.tpl'; } $this->tpl()->setVariable( 'features', array( 'line' => array('course-duration', 'credits', 'date', 'views', 'rating') ) ); $this->tpl()->setVariable( 'is_learning_tracker', true ); $this->tpl()->setVariable( 'cluster_identifier', ClusterTool::clusterIdentifier() ); $articleResult = $this->tpl()->fetch( $lineTemplate ); if( $includeAllFacets ) { foreach( array( 'ongoing', 'planned', 'completed', 'certificates', 'passed' ) as $facetType ) { if( !isset( $managedResults['facetCounts'][$facetType] ) ) { if($showResults && $facetType == 'completed'){ $managedResults['facetCounts'][$facetType] = intval($managedResults['facetCounts']['passed']) + intval($managedResults['facetCounts']['failed']); } else{ $managedResults['facetCounts'][$facetType] = 0; } } } } return array( 'content' => array( 'articles' => $articleResult, 'articles_nb' => count( $managedResults['items'] ), 'num_found' => $managedResults['total'], 'custom_f' => $managedResults['facetCounts'], 'userCourses' => $managedResults['userCourses'], 'show_filter' => ( $type == 'completed' ? true : false ), ) ); }
/** * @param array $solrResult * @param FacetBase[] $facets * @return array */ public function articleResult(&$solrResult, $facets) { $returnArray = array(); $articleNodeIDs = array(); $articleSolrData = array(); $articleData = array(); $fields = $this->getFields(); foreach ( $solrResult['response']['docs'] as $doc ) { $nodeId = $doc['meta_guid_ms']; $article = array( 'headline' => isset ( $doc[$fields['headline']] ) ? $doc[$fields['headline']] : array(), 'url' => isset ( $doc[$fields['url']] ) ? $doc[$fields['url']] : array(), 'status' => isset ( $doc[$fields['status']] ) ? $doc[$fields['status']] : array(), 'condition' => isset ( $doc[$fields['condition']] ) ? $doc[$fields['condition']] : array(), 'gender' => isset ( $doc[$fields['gender']] ) ? $doc[$fields['gender']] : array(), 'min_age' => isset ( $doc[$fields['min_age']] ) ? $doc[$fields['min_age']] : array(), 'max_age' => isset ( $doc[$fields['max_age']] ) ? $doc[$fields['max_age']] : array(), 'country' => isset ( $doc[$fields['country']] ) ? $doc[$fields['country']] : array(), ); switch (reset($article['status'])) { case '231.2': // case ClinicalTrialsImportManager::STATUS_RECRUITING: $article['status'] = 'RECRUITING'; break; case '231.1': // case ClinicalTrialsImportManager::STATUS_NOT_RECRUITING: $article['status'] = 'NOT RECRUITING'; break; default: $article['status'] = 'NOT AVAILABLE'; break; } switch (count($article['gender'])) { case 0: $article['gender'] = 'NOT AVAILABLE'; break; case 1: if ($article['gender'][0] == '') { $article['gender'] = 'NOT AVAILABLE'; } else { $article['gender'] = 'GENDER_' . $article['gender'][0]; } break; case 2: $article['gender'] = 'GENDER_BOTH'; break; } if ($article['min_age'] == 0) { $article['min_age'] = 'NOT AVAILABLE'; } if ($article['max_age'] == 0) { $article['max_age'] = 'NOT AVAILABLE'; } $articleData[] = $article; $solrApplicationIndexes = isset ( $doc[$fields['apps']] ) ? $doc[$fields['apps']] : array(); $solrApplicationNames = array(); $solrApplicationIdentifiers = array(); foreach( $solrApplicationIndexes as $applicationIndex ) { list ( $cluster, $void, $applicationId ) = explode( '##', $applicationIndex ); if ( $cluster == ClusterTool::clusterIdentifier() ) { $app = CacheApplicationTool::buildLocalizedApplicationByApplication( $applicationId ); if ( !($app instanceof ApplicationLocalized) ) continue; $solrApplicationNames[] = $app->attribute('name'); $solrApplicationIdentifiers[] = $app->applicationObject()->attribute('identifier'); } } $url = isset( $doc[$fields['url']] ) ? $doc[$fields['url']] : null; if ( empty( $solrApplicationIdentifiers ) ) { eZDebug::writeError( "Could not get application id for cluster for node $nodeId - Falling back to current application" ); $solrApplicationIdentifiers = array( $this->contentList->applicationObject()->attribute('identifier') ); } $masterApps = $this->contentList->iniMerck()->hasSection('MasterAppSettings') && $this->contentList->iniMerck()->hasVariable( 'MasterAppSettings', 'MasterAppList' ) ? $this->contentList->iniMerck()->variable( 'MasterAppSettings', 'MasterAppList' ) : array(); $applicationIdentifier = $solrApplicationIdentifiers[0]; if (!empty($masterApps)) { foreach ($solrApplicationIdentifiers as $solrApplicationIdentifierKey => $solrApplicationIdentifier) { if (in_array($solrApplicationIdentifier, $masterApps)) { $applicationIdentifier = $solrApplicationIdentifier; unset( $solrApplicationIdentifiers[$solrApplicationIdentifierKey] ); $solrApplicationIdentifiers = array_merge( array( $applicationIdentifier ), $solrApplicationIdentifiers ); break; } } } $application = CacheApplicationTool::buildLocalizedApplicationByIdentifier( $applicationIdentifier ); $applicationObject = $application->applicationObject(); $applicationType = $applicationObject->applicationType()->attribute('type_identifier'); $url = ($applicationType == 'first-child') ? '/' . $application->attribute('url') : '/'.$application->attribute('url').'/'.$url; $articleSolrData[$nodeId] = array( 'url' => $url, 'headline' => isset( $doc[$fields['headline']] ) ? $doc[$fields['headline']] : null, 'promo_description' => isset( $doc[$fields['promo_description']] ) ? $doc[$fields['promo_description']] : null, 'apps' => $solrApplicationNames, 'app_identifiers' => $solrApplicationIdentifiers, 'trip_speciality' => isset( $doc[$fields['trip_speciality']] ) ? $doc[$fields['trip_speciality']] : null, 'trip_url' => isset( $doc[$fields['trip_url']] ) ? $doc[$fields['trip_url']] : null, 'trip_publication' => isset( $doc[$fields['trip_publication']] ) ? $doc[$fields['trip_publication']] : null ); } if( $this->withArticles ) { $articleInformations = array( 'articles' => $articleData, 'articles_solrdata' => $articleSolrData, 'features' => $this->features, 'with_feed' => $this->withFeed, 'content_service_configuration' => ( isset($app) ? $app->applicationObject->configurationContentService : array() ), ); $returnArray['article_informations'] = $articleInformations; $returnArray['articles_nb'] = count($articleNodeIDs); if( trim($this->searchQuery) != '' ) { if( isset( $solrResult['spellcheck']['suggestions']) ) $returnArray['kw_suggestion'] = $solrResult['spellcheck']['suggestions']['collation']; } if( isset( $solrResult['highlighting'] ) ) { $highlights = $this->parseSolrHighlights( $solrResult ); if( $highlights ) $returnArray['highlights'] = $highlights; } } if ( $this->withAllSpecialities ) { $facet = null; foreach($this->contentList->facets as $f) { if( $f instanceof FacetFieldTagSpeciality ) { $facet = $facets[$f->key]['list']; break; } } $main_speciality = ''; $specialities = array(); $first = true; foreach( $facet as $lbl => $arr ) { if( $first ) { $main_speciality = $lbl; $first = false; } else $specialities[$lbl] = $arr; } $allSpecialitiesInformations = array( 'main_speciality' => $main_speciality, 'specialities' => $specialities, 'all_specialities' => $this->allSpecialitiesFacet() ); $returnArray['all_specialities_informations'] = $allSpecialitiesInformations; } if( $this->withMostPopularKeywords ) $returnArray['most_popular_kw'] = $this->keywordsAutocomplete(''); if ( $this->withT3Facets ) { $t3FacetInformations = array(); foreach($this->contentList->facets as $index => $f) { if( $f instanceof FacetFieldTagType3 ) { $t3FacetInformations['t3_facets'] = $facets[$f->key]['list']; $t3FacetInformations['t3_name'] = $f->key; $t3FacetInformations['t3_key'] = 'f'.$index; break; } } $returnArray['t3_facet_informations'] = $t3FacetInformations; } return $returnArray; }