/** * @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; }