1000000, 'yearly' => 365, 'one_year' => 1000000]; $settings = config('article_likes.'.$type); if (! is_array($settings)) { throw new InvalidArgumentException('Missing article like defaults: '.$type); } $result = []; foreach ($limits as $key => $max) { // Site settings are authoritative, including zero. Incoming values // remain accepted for API compatibility but cannot change the policy. $value = $settings[$key] ?? null; if (is_array($value)) { if (count($value) !== 2 || ! array_is_list($value) || ! is_int($value[0]) || ! is_int($value[1]) || $value[0] < 0 || $value[1] > $max || $value[0] > $value[1]) { throw new InvalidArgumentException('Invalid article like range: '.$type.'.'.$key); } $value = random_int($value[0], $value[1]); } // Legacy callers historically submit numeric strings. if (is_string($value) && ctype_digit($value)) { $value = (int) $value; } if (! is_int($value) || $value < 0 || $value > $max) { throw new InvalidArgumentException('Invalid article like value: '.$type.'.'.$key); } $result[$key] = $value; } return $result; } public function newArticleFields(string $type, array $overrides = []): array { $values = $this->resolve($type, $overrides); return ['i7like' => $values['seven_day'], 'i365like' => $values['yearly'], 'iYearLikeTarget' => $values['one_year'], 'iYearLikeAdded' => 0, 'sYearLikeStartedAt' => $values['one_year'] > 0 ? now() : null]; } }