Admin_ObjectHelperController::batchAction PHP Метод

batchAction() публичный Метод

public batchAction ( )
    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]);
    }