+ public function update(Request $request, Technique $content) {
+ $this->authorize('update', $content);
+
+ $validatedData = $request->validate([
+ 'attribution' => 'string',
+ 'description' => 'string',
+ 'language' => 'string|in:de,en',
+ 'parent_id' => 'integer|exists:App\\Models\\Technique,id',
+ 'short' => 'string',
+ 'title' => 'string',
+ ]);
+
+ if ($validatedData['language'] == 'en') {
+ $this->applyLocalizedValues($validatedData, $content);
+ $content->save();
+ } else {
+ $translation = $this->getTranslation($content, $validatedData['language']);
+ $this->applyLocalizedValues($validatedData, $translation);
+ $translation->save();
+ }
+
+ $result = isset($validatedData['parent_id']) ? Technique::findOrFail($validatedData['parent_id']) : $content->fresh();
+ $result->load(['chapters', 'relations']);
+ return $result->toJson();
+ }
+
+ private function applyLocalizedValues($validatedData, $content) {
+ foreach (['attribution', 'description', 'short', 'title'] as $name) {
+ if (isset($validatedData[$name])) {
+ $content->{$name} = $validatedData[$name];
+ }
+ }
+ }
+
+ private function getTranslation(Technique $content, $language) {
+ foreach ($content->translations as $translation) {
+ if ($translation->locale == $language) {
+ return $translation;
+ }
+ }
+ $translation = new TechniqueTranslation();
+ $translation->technique_id = $content->id;
+ $translation->locale = $language;
+ return $translation;
+ }
+