public function batchAction()
{
$success = true;
try {
$object = Object::getById($this->getParam("job"));
if ($object) {
$className = $object->getClassName();
$class = Object\ClassDefinition::getByName($className);
$value = $this->getParam("value");
if ($this->getParam("valueType") == "object") {
$value = \Zend_Json::decode($value);
}
$name = $this->getParam("name");
$parts = explode("~", $name);
if (substr($name, 0, 1) == "~") {
$type = $parts[1];
$field = $parts[2];
$keyid = $parts[3];
$getter = "get" . ucfirst($field);
$setter = "set" . ucfirst($field);
$keyValuePairs = $object->{$getter}();
if (!$keyValuePairs) {
$keyValuePairs = new Object\Data\KeyValue();
$keyValuePairs->setObjectId($object->getId());
$keyValuePairs->setClass($object->getClass());
}
$keyValuePairs->setPropertyWithId($keyid, $value, true);
$object->{$setter}($keyValuePairs);
} elseif (count($parts) > 1) {
// check for bricks
$brickType = $parts[0];
$brickKey = $parts[1];
$brickField = Object\Service::getFieldForBrickType($object->getClass(), $brickType);
$fieldGetter = "get" . ucfirst($brickField);
$brickGetter = "get" . ucfirst($brickType);
$valueSetter = "set" . ucfirst($brickKey);
$brick = $object->{$fieldGetter}()->{$brickGetter}();
if (empty($brick)) {
$classname = "\\Pimcore\\Model\\Object\\Objectbrick\\Data\\" . ucfirst($brickType);
$brickSetter = "set" . ucfirst($brickType);
$brick = new $classname($object);
$object->{$fieldGetter}()->{$brickSetter}($brick);
}
$brickClass = Object\Objectbrick\Definition::getByKey($brickType);
$field = $brickClass->getFieldDefinition($brickKey);
$brick->{$valueSetter}($field->getDataFromEditmode($value, $object));
} else {
// everything else
$field = $class->getFieldDefinition($name);
if ($field) {
$object->setValue($name, $field->getDataFromEditmode($value, $object));
} else {
// check if it is a localized field
if ($this->getParam("language")) {
$localizedField = $class->getFieldDefinition("localizedfields");
if ($localizedField) {
$field = $localizedField->getFieldDefinition($name);
if ($field) {
/** @var $field Pimcore\Model\Object\ClassDefinition\Data */
$object->{"set" . $name}($field->getDataFromEditmode($value, $object), $this->getParam("language"));
}
}
}
// seems to be a system field, this is actually only possible for the "published" field yet
if ($name == "published") {
if ($value == "false" || empty($value)) {
$object->setPublished(false);
} else {
$object->setPublished(true);
}
}
}
}
try {
// don't check for mandatory fields here
$object->setOmitMandatoryCheck(true);
$object->setUserModification($this->getUser()->getId());
$object->save();
$success = true;
} catch (\Exception $e) {
$this->_helper->json(["success" => false, "message" => $e->getMessage()]);
}
} else {
Logger::debug("ObjectController::batchAction => There is no object left to update.");
$this->_helper->json(["success" => false, "message" => "ObjectController::batchAction => There is no object left to update."]);
}
} catch (\Exception $e) {
Logger::err($e);
$this->_helper->json(["success" => false, "message" => $e->getMessage()]);
}
$this->_helper->json(["success" => $success]);
}