/** * @param string$clusterIdentifier * @param bool $backupExisting * @param bool $includeTimestamp * @return array * @throws Exception */ public function generateSpriteForCluster($clusterIdentifier, $backupExisting = true, $includeTimestamp = true) { $outputFile = $this->buildFilePath($this->outputPath, array($clusterIdentifier)); $timestampOutputFile = $this->generateFileName($outputFile, $includeTimestamp); $generatedSpriteName = substr($timestampOutputFile, strrpos($timestampOutputFile, '/') + 1); ClusterTool::setCurrentCluster( $clusterIdentifier ); $lessPath = "extension/{$clusterIdentifier}/design/oscar/stylesheets/"; $icoSprite = "/ico_sprite.png"; $offsetStep = 95; $crop = $offsetStep * 2; $mobileStep = 83; $spriteConvertOptions = " -crop x{$crop}+0+0 "; $globalConvertOptions = " -append -quality 80%"; $applicationList = CacheApplicationTool::clusterApplications(); $cssList = array(); $icoList = array(); foreach( $applicationList as $application ) { $icoCss = 'ico_'.SolrSafeOperatorHelper::getAppIdentifierForIcon( $application->applicationObject->identifier ); $icoFile = StaticData::clusterFilePath( $clusterIdentifier, 'apps/'.$application->applicationObject->identifier.$icoSprite, true, true ); if ( ! file_exists( $icoFile ) ) { $icoFile = StaticData::clusterFilePath( 'default', 'apps/'.$application->applicationObject->identifier.$icoSprite, true, true ); } if ( file_exists( $icoFile ) && ! in_array( $icoCss, $cssList ) ) { $cssList[] = $icoCss; $icoList[] = $icoFile; } } if (empty($icoList)) { throw new \Exception("No icons found for cluster {$clusterIdentifier}", 0); } if ($backupExisting && file_exists($outputFile)) { rename($outputFile, $outputFile . '.bak'); } $convertBinPath = $this->convertBinPath; $cmd = 'export PATH=$PATH:' . $convertBinPath . '; convert ' . implode( $spriteConvertOptions, $icoList ) . "{$spriteConvertOptions} {$globalConvertOptions} {$outputFile}"; $cmdStatus = 0; $cmdOutput = array(); exec($cmd, $cmdOutput, $cmdStatus); if ($cmdStatus != 0) { return array( 'errorCode' => $cmdStatus, 'generateSpriteCommand' => $cmd, 'error' => implode('\n', $cmdOutput), ); } $css = " #app-catalog a.app-bar-access-app-library .poster{ background-image: none !important; } #app-catalog a .poster, #hide-app a .poster, .item-apps .batch .wrap > a .poster, .item-related-app .batch .wrap > a .poster{ background-image:url(/esibuild/static/{$clusterIdentifier}/{$generatedSpriteName}); background-repeat: no-repeat; } "; $cssMobile = " #app-catalog a.app-bar-access-app-library .poster{ background-image: none !important; } #app-catalog a .poster, #hide-app a .poster, .item-apps .batch .wrap > a .poster, .item-related-app .batch .wrap > a .poster{ background-image:url(/esibuild/static/{$clusterIdentifier}/{$generatedSpriteName}); background-repeat: no-repeat; background-size: {$mobileStep}px auto !important; } "; $offset = 0; $offsetMobile = 0; foreach( $cssList as $key => $cssStyle ) { $css .= " #app-catalog a .poster.$cssStyle, #hide-app a .poster.$cssStyle, .item-apps .batch .wrap > a .poster.$cssStyle, .item-related-app .batch .wrap > a .poster.$cssStyle{ background-position: 0 -{$offset}px !important; } "; $cssMobile .= " #app-catalog a .poster.$cssStyle, #hide-app a .poster.$cssStyle, .item-apps .batch .wrap > a .poster.$cssStyle{ background-position: 0 -{$offsetMobile}px !important; } "; $offset += $offsetStep; $offsetMobile += $mobileStep; $css .= " #app-catalog a:hover .poster.$cssStyle, #app-catalog a:active .poster.$cssStyle, #app-catalog a.active .poster.$cssStyle, #hide-app a:active .poster.$cssStyle, #hide-app a.active .poster.$cssStyle, .item-apps .batch:hover .wrap > a .poster.$cssStyle, .item-related-app .batch:hover .wrap > a .poster.$cssStyle{ background-position: 0 -{$offset}px !important; } "; $cssMobile .= " #app-catalog a:hover .poster.$cssStyle, #app-catalog a:active .poster.$cssStyle, #app-catalog a.active .poster.$cssStyle, #hide-app a:active .poster.$cssStyle, #hide-app a.active .poster.$cssStyle, .item-apps .batch:hover .wrap > a .poster.$cssStyle, .item-related-app .batch:hover .wrap > a .poster.$cssStyle{ background-position: 0 -{$offsetMobile}px !important; } "; $offset += $offsetStep; $offsetMobile += $mobileStep; } if ( ! file_exists( $lessPath ) ) { mkdir( $lessPath, 0755 ); } if ( is_dir( $lessPath ) ) { $lessFile = $lessPath."mod.icosprite.less"; file_put_contents( $lessFile, $css ); $lessFileMobile = $lessPath."mod.icosprite.mobile.less"; file_put_contents( $lessFileMobile, $cssMobile ); eZCache::clearByID( array('ezjscore-packer'), 'template-block' ); } return array( 'errorCode' => 0, 'generateSpriteCommand' => $cmd ); }
/** * @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; } }