. */ declare(strict_types=1); namespace FireflyIII\Http\Requests; use FireflyIII\Models\LinkType; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; /** * Class JournalLink. */ class JournalLinkRequest extends FormRequest { use ChecksLogin; use ConvertsDataTypes; /** * Returns the data required by the controller. */ public function getLinkInfo(): array { $return = []; $linkType = $this->get('link_type'); $parts = explode('_', $linkType); $return['link_type_id'] = (int) $parts[0]; $return['transaction_journal_id'] = $this->convertInteger('opposing'); $return['notes'] = $this->convertString('notes'); $return['direction'] = $parts[1]; return $return; } /** * Rules for this request. */ public function rules(): array { // all possible combinations of link types and inward / outward: $combinations = []; $linkTypes = LinkType::get(['id']); /** @var LinkType $type */ foreach ($linkTypes as $type) { $combinations[] = sprintf('%d_inward', $type->id); $combinations[] = sprintf('%d_outward', $type->id); } $string = implode(',', $combinations); // fixed return [ 'link_type' => sprintf('required|in:%s', $string), 'opposing' => 'belongsToUser:transaction_journals', ]; } public function withValidator(Validator $validator): void { if ($validator->fails()) { Log::channel('audit')->error(sprintf('Validation errors in %s', __CLASS__), $validator->errors()->toArray()); } } }