/**
* @param $name
* @param null $language
* @return
*/
public function getLocalizedValue($name, $language = null, $ignoreFallbackLanguage = false)
{
$data = null;
$language = $this->getLanguage($language);
$fieldDefinition = $this->getObject()->getClass()->getFieldDefinition("localizedfields")->getFieldDefinition($name);
if ($fieldDefinition instanceof Model\Object\ClassDefinition\Data\CalculatedValue) {
$valueData = new Model\Object\Data\CalculatedValue($fieldDefinition->getName());
$valueData->setContextualData("localizedfield", "localizedfields", null, $language);
$data = Service::getCalculatedFieldValue($this->getObject(), $valueData);
return $data;
}
if ($this->languageExists($language)) {
if (array_key_exists($name, $this->items[$language])) {
$data = $this->items[$language][$name];
}
}
// check for inherited value
$doGetInheritedValues = AbstractObject::doGetInheritedValues();
if ($fieldDefinition->isEmpty($data) && $doGetInheritedValues) {
$object = $this->getObject();
$class = $object->getClass();
$allowInherit = $class->getAllowInherit();
if ($allowInherit) {
if ($object->getParent() instanceof AbstractObject) {
$parent = $object->getParent();
while ($parent && $parent->getType() == "folder") {
$parent = $parent->getParent();
}
if ($parent && ($parent->getType() == "object" || $parent->getType() == "variant")) {
if ($parent->getClassId() == $object->getClassId()) {
$method = "getLocalizedfields";
if (method_exists($parent, $method)) {
$localizedFields = $parent->getLocalizedFields();
if ($localizedFields instanceof Localizedfield) {
if ($localizedFields->object->getId() != $this->object->getId()) {
$data = $localizedFields->getLocalizedValue($name, $language, true);
}
}
}
}
}
}
}
}
// check for fallback value
if ($fieldDefinition->isEmpty($data) && !$ignoreFallbackLanguage && self::doGetFallbackValues()) {
foreach (Tool::getFallbackLanguagesFor($language) as $l) {
if ($this->languageExists($l)) {
if (array_key_exists($name, $this->items[$l])) {
$data = $this->getLocalizedValue($name, $l);
}
}
}
}
if ($fieldDefinition && method_exists($fieldDefinition, "preGetData")) {
$data = $fieldDefinition->preGetData($this, array("data" => $data, "language" => $language, "name" => $name));
}
return $data;
}