function RulesState::applyDataSelector
Returns an entity metadata wrapper as specified in the selector.
Parameters
string $selector: The selector string, e.g. "node:author:mail".
string $langcode: (optional) The language code used to get the argument value if the argument value should be translated. Defaults to LANGUAGE_NONE.
Return value
EntityMetadataWrapper The wrapper for the given selector.
Throws
RulesEvaluationException Throws a RulesEvaluationException in case the selector cannot be applied.
File
-
includes/
rules.state.inc, line 299
Class
- RulesState
- The rules evaluation state.
Code
public function applyDataSelector($selector, $langcode = LANGUAGE_NONE) {
$parts = explode(':', str_replace('-', '_', $selector), 2);
$wrapper = $this->get($parts[0]);
if (count($parts) == 1) {
return $wrapper;
}
elseif (!$wrapper instanceof EntityMetadataWrapper) {
throw new RulesEvaluationException('Unable to apply data selector %selector. The specified variable is not wrapped correctly.', array(
'%selector' => $selector,
));
}
try {
foreach (explode(':', $parts[1]) as $name) {
if ($wrapper instanceof EntityListWrapper || $wrapper instanceof EntityStructureWrapper) {
// Make sure we are using the right language. Wrappers might be cached
// and have previous langcodes set, so always set the right language.
if ($wrapper instanceof EntityStructureWrapper) {
$wrapper->language($langcode);
}
$wrapper = $wrapper->get($name);
}
else {
throw new RulesEvaluationException('Unable to apply data selector %selector. The specified variable is not a list or a structure: %wrapper.', array(
'%selector' => $selector,
'%wrapper' => $wrapper,
));
}
}
} catch (EntityMetadataWrapperException $e) {
// In case of an exception, re-throw it.
throw new RulesEvaluationException('Unable to apply data selector %selector: %error', array(
'%selector' => $selector,
'%error' => $e->getMessage(),
));
}
return $wrapper;
}