---
title: "Important: The timeline year fields are constrained"
manual: "Academic Profiles"
version: "main"
source: "Changelog/3.0/Important-ProfileInformationYearRange.rst"
rendered: "2026-10-02T20:47:49+00:00"
---

# Important: The timeline year fields are constrained {#important-profile-information-year-range}

## Description {#description}

The three year columns of
`tx_academicpersons_domain_model_profile_information` \-
`year`, `year_start` and `year_end` \- declared

```php
'config' => [
    'type' => 'number',
    'min' => 0,
    'max' => 9999,
    'nullable' => true,
],
```

**and enforced none of it.** `min` and `max` are options of the
TCA type `input`; the type `number` reads its bounds from
`range` alone. So the backend form rendered a number field without an
HTML `min` or `max` attribute, and `DataHandler` clamped
nothing on save.

The three columns now declare

```php
'config' => [
    'type' => 'number',
    'format' => 'integer',
    'range' => [
        'lower' => 0,
        'upper' => 9999,
    ],
    'nullable' => true,
],
```

which is what renders the HTML bounds and what `DataHandler` clamps a
submitted value against; `ext_tables.sql` declares the three columns
`int(11) unsigned DEFAULT NULL`, what the corrected TCA derives. The
palette, the labels, the property names and the frontend rendering are
unchanged.

## Impact {#impact}

The backend record editor now keeps a year within `0`-`9999`: a value
above the upper bound is clamped to `9999` on save, a negative one to `0`.
`NULL` stays the empty value.

`ext_tables.sql` declares the three columns as
`int(11) unsigned DEFAULT NULL`, matching what the corrected TCA derives.
The database analyzer therefore offers the change of signedness. An
installation that stored a negative year - which nothing in the extension ever
wrote - has to correct those rows before applying it.

## Affected Installations {#affected-installations}

Every installation of [`fgtclb/academic-persons`](https://packagist.org/packages/fgtclb/academic-persons) that edits profile
information records in the TYPO3 backend.
