‪TYPO3CMS  ‪main
‪Todo List
Member TYPO3\CMS\Extbase\Persistence\Generic\Qom\ComparisonInterface::getOperand2 ()
Type this as mixed in v13.
Class TYPO3\CMS\Core\Tests\Unit\Utility\ArrayUtilityTest
When further defining the method parameter types test bench errors occur
Member TYPO3\CMS\Core\Tests\Unit\Utility\CommandUtilityTest::getConfiguredApps ($globalsBinSetup, $expected)
When specifying parameter types test bench errors occur
Class TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest
Defining the method parameter types further leads to test bench errors
Member TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager::$request
: In CLI context, BE configuration manager might be triggered without request. See comment on this in ConfigurationManager.
Member TYPO3\CMS\Extbase\Configuration\ConfigurationManager::$concreteConfigurationManager
: Make nullable and private(?) in v13.
Member TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::setConfiguration (array $configuration=[])
: It may be possible to remove this in v13?!
Member TYPO3\CMS\Extbase\Configuration\FrontendConfigurationManager::$request
: In v13, this shouldn't be nullable, FE context always has a request.
"

make private in 13.0 and expose value via getter

make private in 13.0 and expose value via getter

Member TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject::$_versionedUid
make private in 13.0 and expose value via getter
Member TYPO3\CMS\Extbase\Error\Result::recurseThroughResult (array $pathSegments)
: consider making this method protected as it will and should not be called from an outside scope
Member TYPO3\CMS\Extbase\Mvc\Dispatcher::buildRequestFromCurrentRequestAndForwardResponse (RequestInterface $currentRequest, ForwardResponse $forwardResponse)
: make this a private method again as soon as the tests, that fake the dispatching of requests, are refactored.
Member TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder::convertTransientObjectToArray (DomainObjectInterface $object)
Refactor this into convertDomainObjectsToIdentityArrays()
Member TYPO3\CMS\Extbase\Persistence\Generic\Qom\Comparison::$operand2
Type this as mixed in v13.
Class TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest
: Use fixture classes instead of mocks for the extractors to simplify the setup.
Class TYPO3\CMS\Extbase\Persistence\Generic\Query
v12: Candidate to declare final - Can be decorated or standalone class implementing the interface @template T of object
Member TYPO3\CMS\Extbase\Persistence\Generic\Query::getSelectorName ()
This has to be checked at another place
Class TYPO3\CMS\Extbase\Persistence\Generic\QueryResult
v12: Candidate to declare final - Can be decorated or standalone class implementing the interface @template TValue of object
Member TYPO3\CMS\Extbase\Persistence\Generic\Storage\BackendInterface::getUidOfAlreadyPersistedValueObject (AbstractValueObject $object)
this is the last monster in this persistence series. refactor!
Member TYPO3\CMS\Extbase\Property\TypeConverter\AbstractTypeConverter::getTargetTypeForSource ($source, string $originalTargetType, PropertyMappingConfigurationInterface $configuration=null)
The concept of this method is flawed because it enables the override of the target type depending on the structure of the source. So, technically we no longer convert type A to B but source of type A with structure X to type B defined by X. This makes a type converter non-deterministic.
Member TYPO3\CMS\Extbase\Property\TypeConverter\AbstractTypeConverter::getSourceChildPropertiesToBeConverted ($source)
this method is only used for converter sources that have children (i.e. objects). Introduce another ChildPropertyAwareTypeConverterInterface and drop this method from the main interface
Member TYPO3\CMS\Extbase\Property\TypeConverter\AbstractTypeConverter::getTypeOfChildProperty (string $targetType, string $propertyName, PropertyMappingConfigurationInterface $configuration)
this method is only used for converter sources that have children (i.e. objects). Introduce another ChildPropertyAwareTypeConverterInterface and drop this method from the main interface
Member TYPO3\CMS\Extbase\Reflection\ObjectAccess::enableExceptionOnInvalidIndex () -> getPropertyAccessor()
What to do with ArrayAccess
Member TYPO3\CMS\Extbase\Security\Cryptography\HashService::appendHmac (string $string)
Mark as API once it is more stable
Member TYPO3\CMS\Extbase\Security\Cryptography\HashService::validateAndStripHmac (string $string)
Mark as API once it is more stable
Member TYPO3\CMS\Extbase\Validation\Validator\AbstractCompositeValidator::$validatedInstancesContainer
: Properties {
Member TYPO3\CMS\Extbase\Tests\Functional\Mvc\Controller\ActionControllerArgumentTest::validationErrorReturnsToForwardedPreviousAction (string $forwardTargetAction, array $forwardTargetArguments, string $validateAction, array $expectations)
: It might be better if these tests would executeFrontendSubRequest() to setup less stuff on their own?!
Member TYPO3\CMS\Extbase\Tests\Unit\Validation\Validator\Fixture\AbstractCompositeValidatorClass::$supportedOptions
Declare the property type in the parent class
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::createAndCopyParentContentWithHotelAndOfferChildren ()
: Weird - this may / should localize the live record? What happens here?
Member TYPO3\CMS\Core\Utility\File\BasicFileUtility::sanitizeFolderPath ($theDir)
: should go into the LocalDriver in a protected way (not important to the outside world)
Member TYPO3\CMS\Core\Utility\File\BasicFileUtility::getUniqueName ($theFile, $theDest, $dontCheckForUnique=false)
: should go into the LocalDriver in a protected way (not important to the outside world)
Member TYPO3\CMS\Core\Tests\Acceptance\Application\FormEngine\ElementsBasicInputRangeCest::simpleRangeAndMd5FieldsDataProvider ()
this one probably broke with the type="number" patch 'label' => 'number_3', 'inputValue' => 'Kasper TYPO3', 'expectedValue' => '0', 'expectedInternalValue' => '0', 'expectedValueAfterSave' => '0', 'comment' => '', 'tab' => 'number', ],
Class TYPO3\CMS\Core\Tests\Functional\Command\CliCommandTest
: This test mixes commands from various extensions (like EM and install), and should be split test the command in the according extension only.
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreCsv\AbstractActionTestCase::copyParentContentToLanguageWithAllChildren ()
Test missing in workspaces!
Class TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest
: All these workspace tests on not-ws aware hotel, child and price tables are funny. Even though 'live_edit' is true, editing for instance a ws-aware pages or tt_content table and deleting / adding a hotel child raises DH warnings "Record could not be created in this workspace" or "Versioning is not supported for this table". This is technically fine. However, having an inline relation from a ws-aware table to a non-ws aware table (even with live_edit=1) and then editing relations in a workspace is logically inconsistent. We may want to scan for these scenarios in TCA and notify / deprecate it by hinting integrators on this problematic situation when ext:workspaces is loaded?! Avoiding this would relax quite a few scenarios here. Note sys_file is a special scenario here as well (not covered by the tests below, though). In the end, all these cases below need a review and thoughts. For now, we're skipping "WorkspaceDiscard", "WorkspacePublish" and "WorkspacePublishAll" tests, since "WorkspaceModify" already show enough inconsistencies.
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::copyParentContent ()
: Leads to issues with sys_refindex which does not adapt sorting field for live changes.
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::copyParentContentToDifferentPage ()
: Leads to issues with sys_refindex which does not adapt sorting field for live changes.
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::moveParentContentToDifferentPage ()
: "Trying to access array offset on value of type bool" - workspaces/Classes/Hook/DataHandlerHook.php:366
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::moveParentContentToDifferentPageTwice ()
: "Trying to access array offset on value of type bool" - workspaces/Classes/Hook/DataHandlerHook.php:366
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::moveParentContentToDifferentPageAndChangeSorting ()
: "Trying to access array offset on value of type bool" - workspaces/Classes/Hook/DataHandlerHook.php:366
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::copyPage ()
: Leads to issues with sys_refindex which does not adapt sorting field for live changes.
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::copyPageWithHotelBeforeParentContent ()
: Leads to issues with sys_refindex which does not adapt sorting field for live changes.
Member TYPO3\CMS\Extbase\Tests\Unit\Validation\Validator\Fixture\AbstractValidatorClass::$supportedOptions
Declare the property type in the parent class
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::modifyParentAndChangeHotelChildrenSorting ()
: Leads to issues with sys_refindex which does not adapt sorting field for live changes.
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::modifyAndDiscardAndModifyParentWithHotelChild ()
: This reveals another core bug "Undefined array key "t3ver_state"" in ElementEntityProcessor.php
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\IrreForeignFieldNonWs\WorkspacesModify\ActionTest::inlineLocalizeSynchronizeLocalizeMissing ()
: Weird - this may / should localize the live record? What happens here?
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\ManyToMany\AbstractActionTestCase::copyCategoryToLanguageOfRelation ()
: This action does not copy the relations with it (at least in workspaces), and should be re-evaluated
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\ManyToMany\WorkspacesDiscard\ActionTest::copyCategoryToLanguageOfRelation ()
: this is a faulty test, because the category should be discarded
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\ManyToMany\WorkspacesModify\ActionTest::localizeContentOfRelationAndAddCategoryWithLanguageSynchronization ()
: this test is faulty as it adds a lot of entries
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\Regular\AbstractActionTestCase::movePageLocalizedInLiveWorkspaceDeletedToDifferentPageTwice ()
The "deleted" t3ver_state=2 record is turned into a move placeholder so the "marked for delete" information is lost.
Member TYPO3\CMS\Core\Tests\Functional\DataScenarios\Regular\WorkspacesModify\ActionTest::changeContentSortingAndDeleteMovedRecord ()
: Publish and PublishAll for this are missing - TF throws an exception on publish due to deleted state
Member TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait::applyInstructions (InternalRequest $request, AbstractInstruction ... $instructions)
Instruction handling should be part of Testing Framework (multiple instructions per identifier, merge in interface)
Member TYPO3\CMS\Core\Tests\Unit\Database\Query\QueryBuilderTest::fromQuotesIdentifierAndDelegatesToConcreteQueryBuilder ()
: Test with alias
Member TYPO3\CMS\Core\Tests\Unit\LinkHandling\EmailLinkHandlerTest::resolveReturnsSplitParameters ($input, $expected, $finalString)
Defining the method parameter types results in test bench errors
Member TYPO3\CMS\Core\Tests\Unit\LinkHandling\EmailLinkHandlerTest::splitParametersToUnifiedIdentifier ($input, $parameters, $expected)
Defining the method parameter types results in test bench errors
Member TYPO3\CMS\Core\Tests\Unit\Pagination\SimplePaginationTest::$paginator
Specifying the type in the declaration results in a test bench error
Member TYPO3\CMS\Reactions\Form\Element\FieldMapElement::render ()
This is not how a field label should be resolved
Member TYPO3\CMS\Frontend\Typolink\PageLinkBuilder::getCurrentSite ()
: We may want to see if we can't require a site object to be always set and fail here otherwise!
Class TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\MountPointTest

add Tests for having a PageFolder as mounted page (e.g. id 10000)

Add tests for multilingual setups

Add tests with various TypoScript settings activated

Member TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\MountPointTest::mountPointPagesShowContentAsConfigured (string $uri, string $expected)
: revisit the "mount_pid_ol=1" redirect, there is some truth to it, but still would remove the context, which does not make sense. Should be revisited. See test above as well.
Member TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\SiteRequestTest::restrictedPageSendsForbiddenResponseWithUnauthorizedVisitorWithHavingPageErrorHandling (string $uri, int $frontendUserId)
Response body cannot be asserted since PageContentErrorHandler::handlePageError executes request via HTTP (not internally)
Member TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\SiteRequestTest::restrictedPageWithParentSysFolderSendsForbiddenResponseWithUnauthorizedVisitorWithHavingPageErrorHandling (string $uri, int $frontendUserId)
Response body cannot be asserted since PageContentErrorHandler::handlePageError executes request via HTTP (not internally)
Member TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\SiteRequestTest::pageRequestSendsNotFoundResponseWithInvalidCacheHashWithHavingPageErrorHandling (string $uri)
Response body cannot be asserted since PageContentErrorHandler::handlePageError executes request via HTTP (not internally)
Class TYPO3\CMS\Frontend\Tests\Unit\Http\RequestHandlerTest
: It looks as if these unit tests should be turned into functional tests
Member TYPO3\CMS\IndexedSearch\Controller\SearchController::makeDescription (array $row, bool $noMarkup=false, int $length=180)
overwork this
Member TYPO3\CMS\Install\Controller\UpgradeController::upgradeWizardsBlockingDatabaseCharsetFixAction ()
This must be reviewed and decided if we can remove this, move to reports module or if we have other issues with charset on connection and database, or if we need to escalate this down to field level.
Member TYPO3\CMS\Install\Controller\UpgradeController::upgradeWizardsBlockingDatabaseCharsetTestAction ()
This must be reviewed and decided if we can remove this, move to reports module or if we have other issues with charset on connection and database, or if we need to escalate this down to field level.
Member TYPO3\CMS\Install\Service\CoreUpdateService::setDownloadTargetPath ($downloadTargetPath)
move this to folder structure
Member TYPO3\CMS\Install\SystemEnvironment\DatabaseCheck::$databaseDriverToPlatformMapping
Check if this property can be removed after DatabaseCheck::retrieveDatabasePlatformByDriverName() could be removed.
Member TYPO3\CMS\Install\SystemEnvironment\DatabaseCheck::retrieveDatabasePlatformByDriverName (string $databaseDriverName)
This method seems to be unused. Check if it can be removed or if it needs to be deprecated.
Class TYPO3\CMS\Lowlevel\Command\MissingRelationsCommand
: The entire logic smells fishy and needs a major overhaul.
Class TYPO3\CMS\Frontend\Resource\FileCollector
The file collector is used for intermediate collection in scoped places. Therefore, the collector can't be shared. Evaluate if the collector can be build scope aware and made sharable again.
Class TYPO3\CMS\Reactions\Pagination\DemandedArrayPaginator
should be replaced with the regular ArrayPaginator
Member TYPO3\CMS\Redirects\Hooks\DataHandlerCacheFlushingHook::rebuildRedirectCacheIfNecessary (array $parameters, DataHandler $dataHandler)
This hook is called for each record which needs to clear cache, which means this gets called for other records than sys_redirects, but also for each sys_redirect record which has been modified with this DataHandler call. Even if we can narrow down to rebuild only for specific source_hosts, this still means that we eventually rebuild the "same" cache multiple times. Find a better way to aggregate them and rebuild only once at the end.
Member TYPO3\CMS\Redirects\Service\RedirectService::bootFrontendController (SiteInterface $site, array $queryParams, ServerRequestInterface $originalRequest)
: This messes quite a bit with dependencies here. RedirectService is called by an early middleware before TSFE has been set up at all. The code thus has to hop through various loops later middlewares would usually do. The overall scenario of needing a partially set up TSFE for target redirect calculation is quite unfortunate here and should be sorted out differently by further refactoring the link building and reducing TSFE dependencies.
Member TYPO3\CMS\Redirects\Service\RedirectService::cleanupTSFE ()
: Needs to vanish. The existence of this method is a side-effect of the technical debt that a TSFE has to be set up for link generation, see the comment on bootFrontendController() for more details.
Member TYPO3\CMS\Redirects\Service\SlugService::getConnectionForTable ($tableName)
Consider to provide this in Connection if use-full for different places.
Class TYPO3\CMS\Redirects\Tests\Functional\Service\SlugServiceTest
Tests in this TestCase simulates what happens in the corresponding DataHandlerSlugUpdateHook, mainly which is executed in which order. This is somehow clumsy. Either cover proper DataHandler hook execution with additional tests avoiding the simulation and testing SlugService in indirect way - or refactor them here.
Member TYPO3\CMS\Scheduler\Controller\SchedulerModuleController::stopTask (ModuleTemplate $view, int $taskUid)
find a way to really kill the running task.
Member TYPO3\CMS\Scheduler\Scheduler::cleanExecutionArrays ()
find a way to actually kill the job
Class TYPO3\CMS\Webhooks\Pagination\DemandedArrayPaginator
should be replaced with the regular ArrayPaginator
Member TYPO3\CMS\Webhooks\Tests\Functional\WebhookExecutionTest::oneMessageWithMultipleRequestsIsTriggeredAndDispatched ()
This test might not test what should be tested.
Class TYPO3\CMS\Workspaces\Controller\AjaxDispatcher
: The entire workspace modul ajax routing is a mess and needs a rewrite.
Member TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler::publishSingleRecord ($table, $t3ver_oid, $orig_uid)
What about reporting errors back to the interface? /olly/
Member TYPO3\CMS\Workspaces\Controller\Remote\ActionHandler::deleteSingleRecord ($table, $uid)
What about reporting errors back to the interface? /olly/
Member TYPO3\CMS\Form\Mvc\Property\TypeConverter\FormDefinitionArrayConverter::filterEmptyArrays (array $array)
ArrayUtility?
Class TYPO3\CMS\Extensionmanager\EventListener\ExcludeExtensionTableFromReferenceIndexEventListener
: This can be removed when TCA of that table is dropped: When Domain/Repository/ExtensionRepository no longer uses extbase.
Class TYPO3\CMS\Extensionmanager\Updates\ExtensionModel
: Declare 'final readonly' in v14 when ext:install class alias is gone.
Member TYPO3\CMS\Extensionmanager\Utility\DependencyUtility::checkExtensionDependency (Dependency $dependency)
handle exceptions / markForUpload
Member TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper::getModuleTemplate ()
: deprecate. This should be obsolete with the new ModuleTemplate view strategy.
Class TYPO3\CMS\Fluid\ViewHelpers\Be\PageInfoViewHelper
: Candidate to deprecate? The page info is typically displayed in doc header, done by ModuleTemplate in controllers.
Class TYPO3\CMS\Fluid\ViewHelpers\Be\PagePathViewHelper
: Candidate to deprecate? The page info is typically displayed in doc header, done by ModuleTemplate in controllers.
Member TYPO3\CMS\Fluid\ViewHelpers\Form\SelectViewHelper::getOptionValueScalar ($valueElement)
: Does not always return string ...
Member TYPO3\CMS\Fluid\ViewHelpers\Form\ValidationResultsViewHelper::renderStatic (array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
: Really mixed here, not string?
Member TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper::renderHiddenReferrerFields ()
filter out referrer information that is equal to the target (e.g. same packageKey)
Member TYPO3\CMS\Form\Controller\FormEditorController::transformFormDefinitionForFormEditor (array $formDefinition)
move this to FormDefinitionConversionService
Class TYPO3\CMS\Form\Domain\Model\FormDefinition
: Declare final in v12
Class TYPO3\CMS\Form\Domain\Runtime\FormRuntime
: Declare final in v12
Member TYPO3\CMS\Form\Domain\Runtime\FormRuntime::initializeFormSessionFromRequest ()
FormRuntime::$formSession is still vulnerable to session fixation unless a real cookie-based process is used
Member TYPO3\CMS\Core\Utility\ArrayUtility::flatten (array $array, string $prefix='', bool $keepDots=false)

: The current implementation isn't a generic array flatten method, but tailored for TypoScript flattening

: It should be deprecated and removed and the required specialities should be put under the domain of TypoScript parsing

Member TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::mergeTSRef (array $typoScriptArray, string $propertyName)
: It would be better if this method would get the setup object tree to resolve a ReferenceChildNode only once per node. This would however mean the object tree is moved around in the entire rendering chain, which is quite hard to achieve.
Member TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::getRequest ()
: This getRequest() is still a bit messy. Underling code depends on both, a ContentObjectRenderer instance and a request, but the API currently only passes one or the other. For instance Extbase and Fluid only pass the Request, DataProcessors only a ContentObjectRenderer. This is why getRequest() is currently public here. A potential refactoring could:
  • ‪Create interfaces to pass both where needed (or pass a combined context object)
  • ‪Deprecate access to getRequest() here afterwards A circular dependency that the instance of ContentObjectRenderer holds a request with the instance of itself as attribute must be avoided. This is currently achieved by adding a new request with $this->request->withAttribute('currentContentObject', $cObj) in code that needs it, but this new request is NOT passed back into the ContentObjectRenderer instance.
Member TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::$id
: deprecate
"
: deprecate
Member TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::$page
: deprecate
Member TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::$contentPid
: deprecate
Member TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::$sys_page
: deprecate
Member TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::$contentType
Ticket: #63642 Should be refactored to a request/response model later
Member TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::set_no_cache (string $reason='')
: deprecate
Member TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::sL (string $input)
: deprecate
Member TYPO3\CMS\Frontend\Event\ShouldUseCachedPageDataIfAvailableEvent::getController ()
: deprecate
Class TYPO3\CMS\Frontend\Page\PageInformationFactory
: This class also sets / resets the Context language aspect as not directly obvious side effect. This can't be refactored currently due to the dependency of stateful PageRepository to the stateful singleton Context.
Member TYPO3\CMS\Frontend\Page\PageInformationFactory::setSysTemplateRows (ServerRequestInterface $request, PageInformation $pageInformation)
: Even though all rootline sys_template records are fetched with only one query in below implementation, we could potentially join or sub select sys_template records already when pages rootline is queried. This will save one query. This could be done when we manage to switch PageRepository / RootlineUtility to a CTE.
Member TYPO3\CMS\Core\Database\RelationHandler::purgeLiveVersionedIds (string $tableName, array $candidateUidList, int $targetWorkspaceUid)

: It should be possible to merge this method into main query of readMM() directly to avoid the chunked query. Note purgeVersionedIds() does a similar thing when requesting live, to throw away workspace connections.

: It would be possible to filter delete placeholder rows here as well, but this needs bigger refactoring of the class, since purgeDeletePlaceholder() is public and only called on demand.

Member TYPO3\CMS\Core\Authentication\BackendUserAuthentication::backendCheckLogin (ServerRequestInterface $request=null)
deprecate
Class TYPO3\CMS\Core\Cache\Frontend\NullFrontend
: Instead a factory class should be introduced that replaces this class and \TYPO3\CMS\Core\Core\Bootstrap::createCache
Member TYPO3\CMS\Core\Composer\PackageArtifactBuilder::setTitleFromExtEmConf (Package $package)
deprecate or remove in TYPO3 v12
Member TYPO3\CMS\Core\Composer\PackageArtifactBuilder::handleRootPackage (PackageInterface $rootPackage, string $extensionKey)
: remove this method in TYPO3 v12
Class TYPO3\CMS\Core\Configuration\Richtext
When I grow up, I want to become a data provider
Member TYPO3\CMS\Core\Configuration\SiteWriter::$settingsFileName
remove, move usages to SiteSettingsFactory
Member TYPO3\CMS\Core\Configuration\SiteWriter::write (string $siteIdentifier, array $configuration, bool $protectPlaceholders=false)
enforce $protectPlaceholders with TYPO3 v13.0
Member TYPO3\CMS\Core\Configuration\Tca\TcaPreparation::prepareFileExtensions (mixed $fileExtensions)
Does not need to be static, once FlexFormTools calls configureFileReferences() directly
Class TYPO3\CMS\Core\Console\CommandNameAlreadyInUseException
: deprecate
Member TYPO3\CMS\Core\Context\SecurityAspect::provideNonce ()
this is a "comfort function", might be dropped
Member TYPO3\CMS\Core\Core\Bootstrap::loadExtTables (bool $allowCaching=true, FrontendInterface $coreCache=null)
: It would be better to remove this method and use the factory directly. Needs a pre-patch in testing-framework.
Member TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder::comparison ($leftExpression, string $operator, $rightExpression)
: Add types to signature - either mixed, or (better) string like doctrine. Similar for other methods below. Especially have a look at $value below.
Member TYPO3\CMS\Core\Database\RelationHandler::readMM ($tableName, $uid, $mmOppositeTable)
: The source record is not checked for correct workspace. Say there is a category 5 in workspace 1. setWorkspace(0) is called, after that readMM('sys_category_record_mm', 5 ...). readMM will still return the list of records connected to this workspace 1 item, even though workspace 0 has been set.
Member TYPO3\CMS\Core\Database\RelationHandler::purgeItemArray ($workspaceId=null)
: It should be possible to drop all three 'purge' methods by using a clever join within readMM - that sounds doable now with pid -1 and ws-pair records being gone since v11. It would resolve this indirect callback logic and would reduce some queries. The (workspace) mm tests should be complete enough now to verify if a change like that would do.
Member TYPO3\CMS\Core\Authentication\BackendUserAuthentication::$userTSUpdated
: Should vanish, see todo below.
Member TYPO3\CMS\Core\Database\Schema\Comparator::columnsEqual (Column $column1, Column $column2)
: Remove this override after blocking issues has been resolved in the methods Comparator::typo3DiffColumn() and Comparator::doctrineDbalMajorThreeDiffColumn().
Member TYPO3\CMS\Core\Database\Schema\Comparator::typo3DiffColumn (Column $column1, Column $column2)
Move the column length override for MariaDB/MySQL to the extended platform classes, when the the workaround here can be removed and `AbstractPlatform::columnsEqual() used. Currently blocked by the used Comparator::doctrineDbalMajorThreeDiffColumn() code which compares differently than the new platform code of doctrine. See the todo regarding the platform options in that method.
"
The whole ConnectionMigrator and comparison stack needs a refactoring. Specially, the normalization steps needs to be centralized and reworked to a more workable solution. Additionally, the reporting states are eligible for a refactoring to a more suitable solution to group into safe and unsafe operations along with database value normalization for column alterations. Further, operating on the properties for the diff classes is also suboptimal and should be refactored with care. For example, the normalize* methods should be reworked.
Member TYPO3\CMS\Core\Database\Schema\SchemaManager\PostgreSQLSchemaManager::fixedGetPortableTableColumnDefinition (array $tableColumn)
Remove along with PostgreSQMSchemaManager::parseDefaultExpression() after fixed Doctrine DBAL version has been required as minimum version, see https://github.com/doctrine/dbal/issues/6357
Member TYPO3\CMS\Core\Database\Schema\SchemaManager\PostgreSQLSchemaManager::parseDefaultExpression (?string $default)
Remove along with PostgreSQMSchemaManager::fixedGetPortableTableColumnDefinition() after fixed Doctrine DBAL version has been required as minimum version, see https://github.com/doctrine/dbal/issues/6357
Member TYPO3\CMS\Core\Database\Schema\TableDiff::__construct (public Table $oldTable, public array $addedColumns, public array $modifiedColumns, public array $droppedColumns, public array $renamedColumns, public array $addedIndexes, public array $modifiedIndexes, public array $droppedIndexes, public array $renamedIndexes, public array $addedForeignKeys, public array $modifiedForeignKeys, public array $droppedForeignKeys, public array $tableOptions=[],)
Consider to change from array to typed collections with array access support.
Member TYPO3\CMS\Core\Database\Schema\Types\EnumType::getName ()
Remove this method with doctrine/dbal 4.0 upgrade.
Member TYPO3\CMS\Core\Database\Schema\Types\SetType::getName ()
Remove this method with doctrine/dbal 4.0 upgrade.
"

: This is public to allow manipulation by hooks (e.g. workspaces). Consider introduction of a public setter setCommandMap() that checks the array shape as done in start() already. Then have a getter as well and protect this property.

: This is public to allow manipulation by hooks (e.g. workspaces). Consider introduction of a public setter setCommandMap() that checks the array shape as done in start() already. Then have a getter as well and protect this property.

Member TYPO3\CMS\Core\DataHandling\DataHandler::sortAndDeleteFlexSectionContainerElements (array $valueArray, array $dataStructure)
: It would be better if the magic _ACTION key would be a 'command array', not part of 'data array'
Member TYPO3\CMS\Core\DataHandling\DataHandler::getUnique ($table, $field, $value, $id, $newPid=0)
: consider workspaces, especially when publishing a unique value which has a unique value already in live
Member TYPO3\CMS\Core\DataHandling\DataHandler::validateValueForRequired (array $tcaFieldConfig, mixed $value)
: If this requirement is not fulfilled, DataHandler should not execute any write statements, which could be properly covered by tests then
Member TYPO3\CMS\Backend\Form\InlineStackProcessor::setAjaxConfiguration (array $config)
: Review this construct - Why can't the ajax call fetch these data on its own and transfers it to client instead?
Member TYPO3\CMS\Backend\Controller\FormInlineAjaxController::compileChild (ServerRequestInterface $request, array $parentData, $parentFieldName, $childUid, array $inlineStructure)

: This clones methods compileChild from TcaInline Provider. Find a better abstraction

: to also encapsulate the more complex scenarios with combination child and friends.

Member TYPO3\CMS\Backend\Controller\FormSlugAjaxController::suggestAction (ServerRequestInterface $request)
)
  • ‪Show a message that the old URL will stop working (possibly add a redirect via checkbox)
  • ‪If the page has subpages, show a warning that the subpages WILL NOT BE MODIFIED and keep the OLD url
Member TYPO3\CMS\Backend\Controller\LoginController::$request
: Only set for getCurrentRequest(). Should vanish.
Member TYPO3\CMS\Backend\Controller\LoginController::getLoginProviderIdentifier ()
: Ugly. This can be used by login providers, they receive an instance of $this. Unused in core, though. It should vanish when login providers receive love.
Member TYPO3\CMS\Backend\Controller\LoginController::getCurrentRequest ()
: Ugly. This can be used by login providers, they receive an instance of $this.
Member TYPO3\CMS\Backend\Controller\SiteInlineAjaxController::compileChild (ServerRequestInterface $request, array $parentData, string $parentFieldName, int $childUid, array $inlineStructure)

: This clones methods compileChild from TcaInline Provider. Find a better abstraction

: to also encapsulate the more complex scenarios with combination child and friends.

Member TYPO3\CMS\Backend\Form\Element\PasswordElement::getObfuscatedSecretValue (?string $value)
  • ‪server-side password obfuscation value is ********* (9 chars)
  • ‪client-side password obfuscation value is ******** (8 chars)
Class TYPO3\CMS\Backend\Form\FormDataProvider\ReturnUrl
: We may want to get rid of this eventually: The returnUrl should typically be set by calling controllers as initial data, since only controllers know details about current context. The fallback below is a bit of guesswork.
Member TYPO3\CMS\Backend\Form\FormDataProvider\SiteTcaInline::addInlineFirstPid (array $result)
: Find out when and if this is different from 'effectivePid'
Member TYPO3\CMS\Backend\Form\FormDataProvider\TcaInline::addInlineFirstPid (array $result)
: Find out when and if this is different from 'effectivePid'
Member TYPO3\CMS\Backend\Form\FormDataProvider\TcaInline::resolveConnectedRecordUids (array $parentConfig, $parentTableName, $parentUid, $parentFieldValue)
: Cover with unit tests
Member TYPO3\CMS\Backend\Form\FormDataProvider\TcaInline::getLiveDefaultId ($tableName, $uid)
: the workspace mess still must be resolved somehow
Member TYPO3\CMS\Backend\Form\FormDataProvider\TcaTypesShowitem::removeFieldsFromPalettes (array $result, $removeListArray)
: unit tests!
Member TYPO3\CMS\Core\DataHandling\DataHandler::undeleteRecordRelations (string $table, int $uid, array $record)
: Add functional test undelete coverage to verify details, some details seem to be missing.
Class TYPO3\CMS\Backend\Form\NodeFactory
: Declare final in v13. May require adding an interface to allow mocking in tests
Member TYPO3\CMS\Backend\Form\NodeInterface::render ()
: Declare most (if not all) implementing non-abstract core classes final in v13.
Class TYPO3\CMS\Backend\Form\Processor\SelectItemProcessor
Move additional shareable code from form-engine into here.
Class TYPO3\CMS\Backend\Form\Utility\FormEngineUtility
: These helpers are target to be dropped if further FormEngine refactoring is done
Member TYPO3\CMS\Backend\RecordList\Event\ModifyRecordListHeaderColumnsEvent::getRecordList ()
Might be replaced by a DTO in the future
Member TYPO3\CMS\Backend\RecordList\Event\ModifyRecordListRecordActionsEvent::getRecordList ()
Might be replaced by a DTO in the future
Member TYPO3\CMS\Backend\RecordList\Event\ModifyRecordListTableActionsEvent::getRecordList ()
Might be replaced by a DTO in the future
Member TYPO3\CMS\Backend\Tree\TreeNodeCollection::asort (int $flags=SORT_REGULAR)
Use return type "true" instead of bool if PHP8.3+ is minimum supported and remove #[\ReturnTypeWillChange].
Member TYPO3\CMS\Backend\View\BackendLayoutView::addBackendLayoutItems (array &$parameters)
This method should return the items array instead of using the whole parameters array as reference. This has to be adjusted, as soon as the itemsProcFunc functionality is changed in this regard.
Class TYPO3\CMS\Backend\View\Event\ModifyDatabaseQueryForRecordListingEvent
This event should contain the $addSorting value, so listener knows when to add ORDER-BY stuff.
Member TYPO3::CMS::Backend::View::PageViewMode
: we could move the "mod.defLangBinding" option as a separate View in here as well.
Member TYPO3\CMS\Beuser\Domain\Model\FileMount::getStorage ()
This should be part of the ORM not the model class
Member TYPO3\CMS\Core\Authentication\AbstractUserAuthentication::appendCookieToResponse (ResponseInterface $response, ?NormalizedParams $normalizedParams=null)
: should go into a middleware?
Member TYPO3\CMS\Core\Resource\ResourceStorage::renameFile ($file, $targetFileName, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\Folder::addUploadedFile (array $uploadedFileData, $conflictMode=DuplicationBehavior::CANCEL)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\Folder::copyTo (Folder $targetFolder, $targetFolderName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\Folder::moveTo (Folder $targetFolder, $targetFolderName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\InaccessibleFolder::addFile ($localFilePath, $fileName=null, $conflictMode=DuplicationBehavior::CANCEL)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\InaccessibleFolder::addUploadedFile (array $uploadedFileData, $conflictMode=DuplicationBehavior::CANCEL)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\InaccessibleFolder::copyTo (Folder $targetFolder, $targetFolderName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\ProcessedFileRepository::prepareTaskObject (FileInterface $fileObject, string $taskType, array $configuration)
: This should be shifted into a TaskFactory or the TaskRegistry
Member TYPO3\CMS\Core\Resource\Processing\LocalPreviewHelper::$defaultConfiguration
once preProcessConfiguration() is not needed anymore (or the whole class), this property can be removed
Member TYPO3\CMS\Core\Resource\Processing\LocalPreviewHelper::preProcessConfiguration (array $configuration)
This method is not needed anymore and will be deprecated (once the whole class can be removed)
Member TYPO3\CMS\Core\Resource\Processing\SvgImageProcessor::checkForExistingTargetFile (TaskInterface $task)
- Refactor this 80% duplicate code of LocalImageProcessor::checkForExistingTargetFile
Member TYPO3\CMS\Core\Resource\Processing\TaskInterface::fileNeedsProcessing ()
isOutdated()/needsReprocessing()?
Member TYPO3\CMS\Core\Resource\ResourceStorage::addFile ($localFilePath, Folder $targetFolder, $targetFileName='', $conflictMode=DuplicationBehavior::RENAME, $removeOriginal=true)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\ResourceStorage::copyFile (FileInterface $file, Folder $targetFolder, $targetFileName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\ResourceStorage::moveFile ($file, $targetFolder, $targetFileName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\Folder::addFile ($localFilePath, $fileName=null, $conflictMode=DuplicationBehavior::CANCEL)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\ResourceStorage::addUploadedFile (array|UploadedFile $uploadedFileData, Folder $targetFolder=null, $targetFileName=null, $conflictMode=DuplicationBehavior::CANCEL)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\ResourceStorage::getAllFileObjectsInFolder (Folder $folder)
check if this is a duplicate
Member TYPO3\CMS\Core\Resource\ResourceStorage::moveFolder (Folder $folderToMove, Folder $targetParentFolder, $newFolderName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\ResourceStorage::copyFolder (FolderInterface $folderToCopy, FolderInterface $targetParentFolder, $newFolderName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\ResourceStorage::getRootLevelFolder (bool $respectFileMounts=true)
: this is a bad method design, because the calling code can never fetch all filemounts nor traverse them.
Member TYPO3\CMS\Core\Routing\Route::getArguments ()
'_arguments' are added implicitly, make it explicit in enhancers
Class TYPO3\CMS\Core\Settings\Type\ColorType
Extract color parsing into utility including a registry for custom color spaces.
Member TYPO3\CMS\Core\Site\SiteSettingsFactory::createSettings (string $siteIdentifier, array $siteConfiguration)
This method resolves placeholders during the loading, which is okay as this is only used in context where the replacement is needed. However, this may change in the future, for example if loading is needed for implementing a GUI for the settings - which should either get a dedicated method or a flag to control if placeholder should be resolved during yaml file loading or not. The SiteConfiguration save action currently avoid calling this method.
Member TYPO3\CMS\Core\Tree\TableConfiguration\AbstractTableConfigurationTreeDataProvider::$availableItems
: This is a hack to speed up category tree calculation. See the comments in TcaCategory and AbstractItemProvider FormEngine classes.
Member TYPO3\CMS\Core\TypoScript\IncludeTree\SysTemplateRepository::getSysTemplateRowsByRootline (array $rootline, ?ServerRequestInterface $request=null)
: It's potentially possible to get rid of this method in the frontend by joining sys_template into the Page rootline resolving as soon as it uses a CTE: This would save one query in all FE requests, even for fully-cached page requests.
Member TYPO3\CMS\Core\TypoScript\TypoScriptService::convertTypoScriptArrayToPlainArray ($value)
: Usages should be removed mid-term to work on the TypoScript object tree directly.
Member TYPO3\CMS\Core\TypoScript\TypoScriptService::convertPlainArrayToTypoScriptArray (array $plainArray)
: Usages should be removed mid-term to work on the TypoScript object tree directly.
Member TYPO3\CMS\Core\TypoScript\TypoScriptService::explodeConfigurationForOptionSplit (array $originalConfiguration, int $splitCount)
: This method is a sign of bad abstraction. It should be modelled differently and located elsewhere.
Member TYPO3\CMS\Core\Imaging\IconFactory::getIconForFileExtension ($fileExtension, string|IconSize $size=IconSize::MEDIUM, $overlayIdentifier=null)
: Change $size to allow IconSize only in v14
Class TYPO3\CMS\Core\DataHandling\Model\CorrelationId
Check internal state during v10 development
Member TYPO3\CMS\Core\Domain\Repository\PageRepository::addMountPointParameterToPage (array $page)
Find a better name. The current doesn't hit the point.
Class TYPO3\CMS\Core\Error\Http\StatusException
: Rename to AbstractStatusException and declare abstract
Member TYPO3\CMS\Core\ExpressionLanguage\RequestWrapper::getSite ()
: Could be removed since 'site' variable is provided explicitly.
Member TYPO3\CMS\Core\ExpressionLanguage\RequestWrapper::getSiteLanguage ()
: Could be removed since 'siteLanguage' variable is provided explicitly.
Member TYPO3\CMS\Core\Hooks\TcaItemsProcessorFunctions::getRegisteredFlexForms (string $table)

: This approach is limited and doesn't find everything. It works for casual tt_content plugins, though:

: The data structure identifier determination depends on data row, but we don't have all rows at hand here.

: The code thus "guesses" some standard data structure identifier scenarios and tries to resolve those.

: This guessing can not be solved in a good way. A general registry of "all" possible data structures is

: probably not wanted, since that wouldn't work for truly dynamic DS calculations. Probably the only

: thing we could do here is a hook to allow extensions declaring specific data structures to

: allow backend admins to set exclude flags for certain fields in those cases.

Member TYPO3\CMS\Core\Http\Message::filter (string $value)
: Unused? And why is this public? Maybe align with zend-diactoros again
Member TYPO3\CMS\Core\Http\Message::validateHeaderName (string $name)
: Review. Should be protected / private, maybe align with zend-diactoros again
Member TYPO3\CMS\Core\Http\Message::isValidHeaderValue (string $value)
: Review. Should be protected / private, maybe align with zend-diactoros again
Member TYPO3\CMS\Core\Http\Request::$uri
It is a PSR-7 spec violation for this to be null. This should be corrected.
Member TYPO3\CMS\Core\Imaging\Icon::setSize (string|IconSize $size)
: Change $size to allow IconSize only in v14
Member TYPO3\CMS\Core\Imaging\IconFactory::getIcon ($identifier, string|IconSize $size=IconSize::MEDIUM, $overlayIdentifier=null, \TYPO3\CMS\Core\Type\Icon\IconState|IconState $state=null)
: Change $size to allow IconSize only in v14
Member TYPO3\CMS\Core\Imaging\IconFactory::getIconForRecord ($table, array $row, $size=IconSize::MEDIUM)
: Change $size to allow IconSize only in v14
Class TYPO3\CMS\Backend\CodeEditor\CodeEditor
: refactor to use DI
Member TYPO3\CMS\Core\Imaging\IconFactory::getIconForResource (ResourceInterface $resource, string|IconSize $size=IconSize::MEDIUM, $overlayIdentifier=null, array $options=[])
: Change $size to allow IconSize only in v14
Class TYPO3\CMS\Core\Log\LogRecord
: Consider declaring this DTO final
Member TYPO3\CMS\Core\Messaging\FlashMessageQueue::getUserByContext ()
: This construct needs to be removed. Methods that use this should be changed to get the user hand over explicitly from the caller! A patch should make this global access a b/w compat fallback only and adapt consuming methods accordingly.
Member TYPO3\CMS\Core\Resource\AbstractFile::getType ()
will return an instance of FileType enum in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\AbstractFile::rename (string $newName, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\AbstractFile::copyTo (Folder $targetFolder, $targetFileName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\AbstractFile::moveTo (Folder $targetFolder, $targetFileName=null, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0
Member TYPO3\CMS\Core\Resource\Driver\AbstractDriver::$supportedHashAlgorithms
: Remove this from this class. Properties of abstract classes MUST NOT be api. If all drivers need to implement this, consider creating a new method stub in the DriverInterface or consider creating a new SupportedHashAlgorithmsAwareInterface that demands implementations to provide said information. Inside this abstract class, this property is useless, however.
Member TYPO3\CMS\Core\Resource\FileReference::getTitle ()
Possibly move this to the image domain object instead
Member TYPO3\CMS\Core\Resource\FileReference::getAlternative ()
Possibly move this to the image domain object instead
Member TYPO3\CMS\Core\Resource\FileReference::getDescription ()
Possibly move this to the image domain object instead
Member TYPO3\CMS\Core\Resource\FileReference::getLink ()
Move this to the image domain object instead
Member TYPO3\CMS\Core\Resource\FileReference::rename (string $newName, $conflictMode=DuplicationBehavior::RENAME)
change $conflictMode parameter type to DuplicationBehavior in TYPO3 v14.0