---
title: "Breaking: The content type academicprograms_programfinder is taken"
manual: "Academic Programs"
version: "main"
source: "Changelog/3.0/Breaking-ProgramFinderRegisteredUpstream.rst"
rendered: "2026-09-27T09:40:45+00:00"
---

# Breaking: The content type academicprograms_programfinder is taken {#breaking-program-finder-registered-upstream}

## Description {#description}

This extension now registers the content element **Program Finder**
itself, as the content type `academicprograms_programfinder` with the Extbase
plugin `ProgramFinder` of the extension `AcademicPrograms`, and the FlexForm
field `settings.listPid` for its target page. See
[The program finder](../../Configuration/Index.html#program-finder).

Those are the names projects used when they registered a finder of their own in
the plugin namespace of this extension.

## Impact {#impact}

A project that registers `academicprograms_programfinder` itself, usually in an
extension loaded after this one, collides with this registration. What the
editor and the visitor get depends on how the project registered it:

-   A type item added with `ExtensionManagementUtility::addPlugin()` or
    `ExtensionUtility::registerPlugin()` replaces the one of this
    extension. One added with `addTcaSelectItem()`, or written into the
    items array directly, is added a second time, and the type select offers
    the element twice.
-   A FlexForm data structure the project assigns replaces the one of this
    extension, so the backend shows the fields of the project finder and not
    **Filter types** and **Preselected categories**.
-   A `configurePlugin()` call for `ProgramFinder` that names the
    `ProgramController` of this extension replaces the actions of the
    finder, and its list of uncached actions with them: the project action
    keeps rendering the element, cached unless the project lists it as
    uncached.
-   One that names a controller of its own only adds it: the controller of this
    extension stays the default, and the finder of this extension renders the
    element with its own options. A template of the project is used only when
    it is the `Program/Finder.html` of the last bullet.
-   A class that extends or replaces `ProgramController` \- a subclass, an
    XCLASS or a service alias - and declares a `finderAction()` of its own
    now overrides the action of this extension. With a signature that is not
    compatible (a required parameter, another return type) PHP refuses to load
    the class, which takes the program list down as well.
-   A template `Program/Finder.html` of the project in the template root
    path of `plugin.tx_academicprograms` is now rendered by the
    action of this extension, with its variables.

Stored finder records keep their content type and their `settings.listPid`, and
render with the finder of this extension once the project registration is gone.

## Affected Installations {#affected-installations}

Installations that register the content type `academicprograms_programfinder`,
configure the plugin `ProgramFinder` of the extension `AcademicPrograms`, or
declare a `finderAction()` in a class that extends or replaces
`ProgramController`, in a site package or project extension.

Installations with a finder under a content type of their own are not affected;
they can migrate to this element, see below.

## Migration {#migration}

Remove from the project:

-   the type item of `academicprograms_programfinder` in the TCA of
    `tt_content` (`ExtensionManagementUtility::addPlugin()`,
    `addTcaSelectItem()` or a direct write), and the `pi_flexform`
    data structure assigned to it;
-   the `ExtensionUtility::configurePlugin()` call for `ProgramFinder`;
-   the FlexForm file of the finder;
-   the controller code of the finder - a `finderAction()` in a class that
    extends or replaces `ProgramController`, or a branch on the content
    type in an overridden `Program/List.html`;
-   the page TSconfig that enables the type and adds its wizard entry.

Then enable the finder set `fgtclb/academic-programs-program-finder`, or depend
on the aggregate set `fgtclb/academic-programs`.

A hard-coded preselected category becomes the field
**Preselected categories**. A project template
`Program/Finder.html` already is an override of the template of this
extension: adapt it to the variables `{filterTypes}`,
`{categories}`, `{preselection}`, `{listUri}` and
`{data}`, or delete it.

The upgrade check `academic:upgrade:check` of **EXT:academic_base**
reports an XCLASS of the controller; it does not report a project registration
of the content type.

A finder under a content type of its own migrates by changing the content type
of its records to `academicprograms_programfinder` and storing its target page
as `settings.listPid` in `pi_flexform`.
