class TransformerFactory in Facebook Instant Articles 3.x
Factory class for creating Transformer objects.
Using the factory will ensure that default transformer rules, and any added by other module authors are used. Also handling for logs.
Hierarchy
- class \Drupal\fb_instant_articles\TransformerFactory
Expanded class hierarchy of TransformerFactory
3 files declare their use of TransformerFactory
- FieldItemListNormalizer.php in src/
Normalizer/ FieldItemListNormalizer.php - SubtitleFormatter.php in src/
Plugin/ Field/ FieldFormatter/ SubtitleFormatter.php - TransformerFormatter.php in src/
Plugin/ Field/ FieldFormatter/ TransformerFormatter.php
1 string reference to 'TransformerFactory'
1 service uses TransformerFactory
File
- src/
TransformerFactory.php, line 17
Namespace
Drupal\fb_instant_articlesView source
class TransformerFactory {
/**
* Transformer rules manager service.
*
* @var \Drupal\fb_instant_articles\TransformerRulesManager
*/
protected $transformerRulesManager;
/**
* Config factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/**
* Log output from transformer instances when asked.
*
* @var \Psr\Log\LoggerInterface
*/
protected $logger;
/**
* TransformerFactory constructor.
*
* @param \Drupal\fb_instant_articles\TransformerRulesManager $transformer_rules_manager
* Transformer rules manager service.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* Config factory service.
* @param \Psr\Log\LoggerInterface $logger
* Logger for transformer messages.
*/
public function __construct(TransformerRulesManager $transformer_rules_manager, ConfigFactoryInterface $config_factory, LoggerInterface $logger) {
$this->transformerRulesManager = $transformer_rules_manager;
$this->configFactory = $config_factory;
$this->logger = $logger;
$this
->setTransformerLogLevel();
}
/**
* Create a new instance of Transformer.
*
* @return \Facebook\InstantArticles\Transformer\Transformer
* A new Transformer instance loaded with the rules from the transformer
* rules manager.
*
* @throws \ReflectionException
*/
public function getTransformer() : Transformer {
$transformer = new Transformer();
// Override the default timezone according to the site wide timezone.
$config_data_default_timezone = $this->configFactory
->get('system.date')
->get('timezone.default');
$default_time_zone = !empty($config_data_default_timezone) ? $config_data_default_timezone : @date_default_timezone_get();
$transformer
->setDefaultDateTimeZone(new \DateTimeZone($default_time_zone));
$this
->addRules($transformer);
return $transformer;
}
/**
* Flush the logs for the given Transformer instance if any.
*
* @todo This is kind of conflating the responsibility of this class. Consider
* breaking it out into it's own service.
*
* @param \Facebook\InstantArticles\Transformer\Transformer $transformer
* A Transformer instance that may or may not have log output.
*/
public function flushTransformerLogs(Transformer $transformer) {
$level_map = [
TransformerLog::DEBUG => LogLevel::DEBUG,
TransformerLog::ERROR => LogLevel::ERROR,
TransformerLog::INFO => LogLevel::INFO,
];
if ($logs = $transformer
->getLogs()) {
foreach ($logs as $log) {
$this->logger
->log($level_map[$log
->getLevel()], $log
->getMessage());
}
}
}
/**
* Set the transformer log level according to the configured logging level.
*/
protected function setTransformerLogLevel() {
if ($log_level = $this->configFactory
->get('fb_instant_articles.settings')
->get('transformer_logging_level')) {
TransformerLog::setLevel($log_level);
}
else {
TransformerLog::setLevel(TransformerLog::ERROR);
}
}
/**
* Adds rules to the given transformer from the transformer rules manager.
*
* @param \Facebook\InstantArticles\Transformer\Transformer $transformer
* A transformer instance to add rules to.
*
* @throws \ReflectionException
* When something goes wrong calling the static createFrom method on
* Transformer Rules objects.
*
* @see \Facebook\InstantArticles\Transformer\Transformer::loadRules()
*/
protected function addRules(Transformer $transformer) {
foreach ($this->transformerRulesManager
->getRules() as $rule) {
$class = $rule['class'];
$factory_method = NULL;
try {
$factory_method = new \ReflectionMethod($class, 'createFrom');
} catch (\ReflectionException $e) {
try {
$factory_method = new \ReflectionMethod('Facebook\\InstantArticles\\Transformer\\Rules\\' . $class, 'createFrom');
} catch (\ReflectionException $e) {
// @todo This error message could be more descriptive.
$this->logger
->error('Could not create transformer rule from rule configuration, skipping.');
}
}
if ($factory_method) {
$transformer
->addRule($factory_method
->invoke(NULL, $rule));
}
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
TransformerFactory:: |
protected | property | Config factory. | |
TransformerFactory:: |
protected | property | Log output from transformer instances when asked. | |
TransformerFactory:: |
protected | property | Transformer rules manager service. | |
TransformerFactory:: |
protected | function | Adds rules to the given transformer from the transformer rules manager. | |
TransformerFactory:: |
public | function | Flush the logs for the given Transformer instance if any. | |
TransformerFactory:: |
public | function | Create a new instance of Transformer. | |
TransformerFactory:: |
protected | function | Set the transformer log level according to the configured logging level. | |
TransformerFactory:: |
public | function | TransformerFactory constructor. |