public function PathautoPattern::applies in Pathauto 8
Determines if this pattern can apply a given object.
Parameters
$object: The object used to determine if this plugin can apply.
Return value
bool
Overrides PathautoPatternInterface::applies
File
- src/
Entity/ PathautoPattern.php, line 336
Class
- PathautoPattern
- Defines the Pathauto pattern entity.
Namespace
Drupal\pathauto\EntityCode
public function applies($object) {
if ($this
->getAliasType()
->applies($object)) {
$definitions = $this
->getAliasType()
->getContextDefinitions();
if (count($definitions) > 1) {
throw new \Exception("Alias types do not support more than one context.");
}
$keys = array_keys($definitions);
// Set the context object on our Alias plugin before retrieving contexts.
$this
->getAliasType()
->setContextValue($keys[0], $object);
/** @var \Drupal\Core\Plugin\Context\ContextInterface[] $base_contexts */
$contexts = $this
->getContexts();
/** @var \Drupal\Core\Plugin\Context\ContextHandler $context_handler */
$context_handler = \Drupal::service('context.handler');
$conditions = $this
->getSelectionConditions();
foreach ($conditions as $condition) {
// As the context object is kept and only the value is switched out,
// it can over time grow to a huge number of cache contexts. Reset it
// if there are 100 cache tags to prevent cache tag merging getting too
// slow.
foreach ($condition
->getContextDefinitions() as $name => $context_definition) {
if (count($condition
->getContext($name)
->getCacheTags()) > 100) {
$condition
->setContext($name, new Context($context_definition));
}
}
if ($condition instanceof ContextAwarePluginInterface) {
try {
$context_handler
->applyContextMapping($condition, $contexts);
} catch (ContextException $e) {
watchdog_exception('pathauto', $e);
return FALSE;
}
}
$result = $condition
->execute();
if ($this
->getSelectionLogic() == 'and' && !$result) {
return FALSE;
}
elseif ($this
->getSelectionLogic() == 'or' && $result) {
return TRUE;
}
}
return TRUE;
}
return FALSE;
}