eZ\Publish\Core\Persistence\Legacy\Content\Type\ContentUpdater\Action\AddField::apply PHP Method

apply() public method

Applies the action to the given $content.
public apply ( integer $contentId )
$contentId integer
    public function apply($contentId)
    {
        $versionNumbers = $this->contentGateway->listVersionNumbers($contentId);
        $languageCodeToFieldId = array();
        $nameRows = $this->contentGateway->loadVersionedNameData(array_map(function ($versionNo) use($contentId) {
            return array('id' => $contentId, 'version' => $versionNo);
        }, $versionNumbers));
        foreach ($versionNumbers as $versionNo) {
            $contentRows = $this->contentGateway->load($contentId, $versionNo);
            $contentList = $this->contentMapper->extractContentFromRows($contentRows, $nameRows);
            $content = $contentList[0];
            $languageCodeSet = array();
            // Each subsequent Content version can have additional language(s)
            foreach ($content->fields as $field) {
                $languageCode = $field->languageCode;
                // Add once for each language per version
                if (isset($languageCodeSet[$languageCode])) {
                    continue;
                }
                $languageCodeSet[$languageCode] = true;
                // Check if field was already inserted for current language code,
                // in that case we need to preserve its ID across versions
                if (isset($languageCodeToFieldId[$languageCode])) {
                    $fieldId = $languageCodeToFieldId[$languageCode];
                } else {
                    $fieldId = null;
                }
                $languageCodeToFieldId[$languageCode] = $this->insertField($content, $this->createField($fieldId, $versionNo, $languageCode));
            }
        }
    }