[], 'values' => [], 'renderLabels' => false ]; foreach ( $groupData as $item ) { $data = $item['data']; if ( $item['type'] === 'data' ) { array_push( $horizontalGroupData['labels'], $data['label'] ); array_push( $horizontalGroupData['values'], $data['value'] ); if (!empty($data['label'])) { $horizontalGroupData['renderLabels'] = true; } } else { if ( $item['type'] === 'header' ) { $horizontalGroupData['header'] = $data['value']; } } } return $horizontalGroupData; } /** * checks if infobox item is the title or title inside the hero module * and if so, removes from it all HTML tags. * * @param string $type type of infobox item * @param array $data infobox item data * @return array infobox $data with sanitized title param if needed */ public function sanitizeInfoboxTitle( $type, $data ) { if ( $type === 'title' && !empty( $data['value']) ) { $data['value'] = trim( strip_tags( $data['value']) ); return $data; } if ( $type === 'hero-mobile' && !empty( $data['title']['value'] ) ) { $data['title']['value'] = trim( strip_tags( $data['title']['value'] ) ); return $data; } return $data; } /** * extends image data * * @param array $data * * @return bool|array */ public function extendImageData( $data ) { $thumbnail = $this->getThumbnail( $data['name'] ); if ( !$thumbnail ) { return false; } $data['height'] = $thumbnail->getHeight(); $data['width'] = $thumbnail->getWidth(); $data['thumbnail'] = $thumbnail->getUrl(); $data['key'] = urlencode($data['key']); $data['media-type'] = $data['isVideo'] ? 'video' : 'image'; return $data; } /** * checks if infobox data item is valid hero component data. * If image is smaller than MINIMAL_HERO_IMG_WIDTH const, doesn't render the hero module. * * @param array $item - infobox data item * @param array $heroData - hero component data * * @return bool */ public function isValidHeroDataItem( $item, $heroData ) { $type = $item['type']; if ( $type === 'title' && !array_key_exists( 'title', $heroData ) ) { return true; } if ( $type === 'image' && !array_key_exists( 'image', $heroData ) ) { $imageWidth = $this->getFileWidth( $item['data']['name'] ); if ( $imageWidth >= self::MINIMAL_HERO_IMG_WIDTH ) { return true; } } return false; } /** * required for testing mobile template rendering * @return bool */ public function isWikiaMobile() { return \F::app()->checkSkin( 'wikiamobile' ); } /** * check if item type is supported and logs unsupported types * * @param string $type - template type * @param array $templates - array of supported templates * * @return bool */ public function isTypeSupportedInTemplates( $type, $templates ) { $isValid = true; if ( !isset( $templates[$type] ) ) { WikiaLogger::instance()->info( self::LOGGER_LABEL, [ 'type' => $type ] ); $isValid = false; } return $isValid; } /** * return real width of the image. * @param Title $title * @return int number */ private function getFileWidth( $title ) { $file = \WikiaFileHelper::getFileFromTitle( $title ); if ($file) { return $file->getWidth(); } } /** * @desc create a thumb of the image from file title. * Height cannot be bigger than 500px * Width have to be adjusted to const for mobile or desktop infobox * @param Title $title * @return bool|MediaTransformOutput */ private function getThumbnail( $title ) { $file = \WikiaFileHelper::getFileFromTitle( $title ); if ( $file ) { $height = min( self::MAX_DESKTOP_INFOBOX_IMAGE_HEIGHT, $file->getHeight() ); $width = $this->isWikiaMobile() ? self::MOBILE_THUMBNAIL_WIDTH : self::DESKTOP_THUMBNAIL_WIDTH; $thumb = $file->transform( ['width' => $width, 'height' => $height] ); if ( !is_null( $thumb ) && !$thumb->isError() ) { return $thumb; } } return false; } }