/** * StorageEvents::PRE_SAVE event callback. * * @param StorageEvent $event */ public function preSave(StorageEvent $event) { $request = $this->requestStack->getCurrentRequest(); if ($request === null) { return; } $contentType = $this->boltConfig->get('contenttypes/' . $event->getContentType()); $translatableFields = $this->getTranslatableFields($contentType['fields']); /** @var Content $record */ $record = $event->getContent(); $values = $record->serialize(); $localeValues = []; if (empty($translatableFields)) { return; } $localeSlug = $request->get('_locale'); $record->set($localeSlug . 'slug', $values['slug']); $locales = $this->config->getLocales(); if ($values['_locale'] == reset($locales)->getSlug()) { $record->set($localeSlug . 'data', '[]'); return; } if ($values['id']) { /** @var Content $defaultContent */ $defaultContent = $this->query->getContent($event->getContentType(), ['id' => $values['id'], 'returnsingle' => true]); } if (in_array('templatefields', $translatableFields)) { $templateFields = $this->boltConfig->get('theme/templatefields/' . $values['template'] . '/fields'); foreach ($templateFields as $key => $field) { if ($field['type'] === 'repeater') { $values['templatefields'][$key] = json_encode($values['templatefields'][$key]); } } } foreach ($translatableFields as $field) { $localeValues[$field] = $values[$field]; if ($values['id']) { $record->set($field, $defaultContent->get($field)); } else { $record->set($field, ''); } } $localeJson = json_encode($localeValues); $record->set($localeSlug . 'data', $localeJson); }