wasChanged() || ! $websiteDrawBadge->badge_path) { return; } $badgeCode = pathinfo($websiteDrawBadge->badge_path, PATHINFO_FILENAME); if (! $websiteDrawBadge->published) { DB::table('users_badges') ->where('user_id', $websiteDrawBadge->user_id) ->where('badge_code', $badgeCode) ->delete(); $this->updateExternalTexts(false, $badgeCode); return; } $exists = DB::table('users_badges') ->where('user_id', $websiteDrawBadge->user_id) ->where('badge_code', $badgeCode) ->exists(); if (! $exists) { DB::table('users_badges')->insert([ 'user_id' => $websiteDrawBadge->user_id, 'slot_id' => 0, 'badge_code' => $badgeCode, ]); } $this->updateExternalTexts(true, $badgeCode, $websiteDrawBadge->badge_name, $websiteDrawBadge->badge_desc); } protected function updateExternalTexts(bool $add, string $badgeCode, ?string $name = null, ?string $desc = null): void { try { $filePath = DB::table('website_settings')->where('key', 'nitro_external_texts_file')->value('value'); if (! $filePath) { return; } $filePath = str_replace(['../', '..\\'], '', $filePath); if (! file_exists($filePath) || ! is_file($filePath) || ! is_writable($filePath)) { return; } $realPath = realpath($filePath); if ($realPath === false) { return; } $content = file_get_contents($realPath); if ($content === false) { Log::warning("Failed to read external texts file: {$realPath}"); return; } $json = json_decode($content, true); if (! is_array($json)) { Log::error("Invalid JSON in external texts file: {$realPath}"); return; } if ($add) { $json["badge_name_{$badgeCode}"] = $name; $json["badge_desc_{$badgeCode}"] = $desc; } else { unset($json["badge_name_{$badgeCode}"]); unset($json["badge_desc_{$badgeCode}"]); } $jsonContent = json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); if ($jsonContent === false) { Log::error("Failed to encode JSON for external texts file: {$realPath}"); return; } if (file_put_contents($realPath, $jsonContent, LOCK_EX) === false) { Log::error("Failed to write external texts file: {$realPath}"); } } catch (\Throwable $e) { Log::error("Error updating external texts: {$e->getMessage()}", [ 'badge_code' => $badgeCode, 'exception' => $e, ]); } } }