| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- <?php
- namespace App\Services\Agent;
- use App\Services\OperationAuditService;
- use App\Support\RichTextContent;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Validator;
- use Illuminate\Validation\ValidationException;
- class AgentPageConfigurationService
- {
- private const FIELDS = ['commission_plan_html', 'contact_tg_url', 'agent_backend_url'];
- public function get(): array
- {
- return $this->format(DB::table('agent_page_settings')->where('id', 1)->first());
- }
- public function save(array $input): array
- {
- $data = Validator::make($input, [
- 'commission_plan_html' => ['present', 'nullable', 'string', 'max:100000'],
- 'contact_tg_url' => ['present', 'nullable', 'string', 'max:2048'],
- 'agent_backend_url' => ['present', 'nullable', 'string', 'max:2048'],
- ], ['commission_plan_html.present' => '请提交佣金方案', 'contact_tg_url.present' => '请提交联系TG地址',
- 'agent_backend_url.present' => '请提交代理后台地址'])->validate();
- $data['commission_plan_html'] = RichTextContent::clean((string)($data['commission_plan_html'] ?? ''));
- foreach (['contact_tg_url', 'agent_backend_url'] as $field) {
- $url = trim((string)($data[$field] ?? ''));
- if ($url !== '') {
- $parts = parse_url($url);
- if (preg_match('/[\x00-\x20\x7f\\\\]/', $url) || !filter_var($url, FILTER_VALIDATE_URL) || !$parts
- || !in_array(strtolower($parts['scheme'] ?? ''), ['http', 'https'], true)
- || isset($parts['user']) || isset($parts['pass'])) {
- throw ValidationException::withMessages([$field => '请填写完整的HTTP/HTTPS地址']);
- }
- }
- $data[$field] = $url;
- }
- return DB::transaction(function () use ($data) {
- DB::table('agent_page_settings')->insertOrIgnore(['id' => 1, 'created_at' => now(), 'updated_at' => now()]);
- $before = $this->format(DB::table('agent_page_settings')->where('id', 1)->lockForUpdate()->first());
- if ($before !== $data) {
- DB::table('agent_page_settings')->where('id', 1)->update($data + ['updated_at' => now()]);
- OperationAuditService::record('agent_page_configuration', 1, 'update', $before, $data);
- }
- return $data;
- }, 3);
- }
- private function format(?object $row): array
- {
- $data = [];
- foreach (self::FIELDS as $field) $data[$field] = (string)($row->$field ?? '');
- return $data;
- }
- }
|