[TASK] Deprecate IMGMENU/GMENU functionality 35/57435/11
authorBenni Mack <benni@typo3.org>
Tue, 3 Jul 2018 06:38:15 +0000 (08:38 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Wed, 29 Aug 2018 10:03:58 +0000 (12:03 +0200)
GraphicalMenuContentObject (GMENU/GMENUITEM) and
ImageMenuContentObject (IMGMENU/IMGMENUITEM) will
be removed in TYPO3 v10.0, and are marked as deprecated.

A lot of functionality related to HMENU in general,
previously exposed to the public, has
been migrated to be internal, now
throwing deprecation messages as well when accessed
from the public.

In addition the following TypoScript properties
will be removed in TYPO3 v10.0.

TMENU
- imgNamePrefix
- imgNameNotRandom

TMENU Item properties
- RO_chBgColor
- beforeImg
- beforeImgTagParams
- beforeImgLink
- beforeROImg
- RO
- afterImg
- afterImgTagParams
- afterImgLink
- afterROImg

Removed item states
- IFSUBRO
- ACTRO
- ACTIFSUBRO
- CURRO
- CURIFSUBRO
- USRRO
- USERDEF1RO
- USERDEF2RO

Also deprecated: TSFE->setJS('mouseOver');

Also not needed in TYPO3 v10.0 anymore:
Folder typo3temp/assets/menu/

Resolves: #85902
Releases: master
Change-Id: I1b5920e4727e97415e6527f5810c9b103c2c6fed
Reviewed-on: https://review.typo3.org/57435
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/core/Documentation/Changelog/master/Deprecation-85902-IMGMENUGMENU.rst [new file with mode: 0644]
typo3/sysext/frontend/Classes/ContentObject/Menu/AbstractMenuContentObject.php
typo3/sysext/frontend/Classes/ContentObject/Menu/GraphicalMenuContentObject.php
typo3/sysext/frontend/Classes/ContentObject/Menu/ImageMenuContentObject.php
typo3/sysext/frontend/Classes/ContentObject/Menu/TextMenuContentObject.php
typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
typo3/sysext/frontend/Tests/Unit/ContentObject/Menu/AbstractMenuContentObjectTest.php
typo3/sysext/frontend/Tests/Unit/ContentObject/Menu/MenuContentObjectFactoryTest.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85902-IMGMENUGMENU.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85902-IMGMENUGMENU.rst
new file mode 100644 (file)
index 0000000..dd43c08
--- /dev/null
@@ -0,0 +1,145 @@
+.. include:: ../../Includes.txt
+
+===================================
+Deprecation: #85902 - IMGMENU/GMENU
+===================================
+
+See :issue:`85902`
+
+Description
+===========
+
+Rendering a Hierarchical Menu via TypoScript previously allowed various rendering methods, namely textual (`TMENU`),
+but also rendering menu items as images (`GMENU`) or as a image map (`IMGMENU`). Both graphical possibilities
+have been marked as deprecated, as it is considered bad practice and usability when building websites
+nowadays - images with a fixed width, and text within images has various drawbacks in terms of accessibility and
+responsive renderings.
+
+The following PHP classes have been marked as deprecated:
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\ImageMenuContentObject`
+
+The related TypoScript menu objects (`GMENU` and `GMENUITEM` as well as `IMGMENU` and `IMGMENUITEM` have been
+marked as deprecated.
+
+On top the following TypoScript options within a MENU item, regarding TMENU have been marked as deprecated:
+* imgNamePrefix
+* imgNameNotRandom
+
+The following TMENU item properties should not be used anymore.
+- RO_chBgColor
+- beforeImg
+- beforeImgTagParams
+- beforeImgLink
+- beforeROImg
+- RO
+- afterImg
+- afterImgTagParams
+- afterImgLink
+- afterROImg
+
+The following item states have been deprecated ("RO" for "rollover" in graphics-related items).
+* IFSUBRO
+* ACTRO
+* ACTIFSUBRO
+* CURRO
+* CURIFSUBRO
+* USRRO
+* USERDEF1RO
+* USERDEF2RO
+
+The following previously public properties are now marked as internal and trigger a deprecation message,
+partly due to preparations of refactoring the PHP code once GMENU functionality is removed, and partly
+due to the highly connected functionality within the PHP classes:
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuNumber`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->entryLevel`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->spacerIDList`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->doktypeExcludeList`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alwaysActivePIDlist`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNamePrefix`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNameNotRandom`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->debug`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->GMENU_fixKey`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->MP_array`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->conf`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->mconf`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->tmpl`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->sys_page`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->id`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nextActive`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuArr`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->hash`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->result`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->rL_uidRegister`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->INPfixMD5`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->I`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMresult`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMfreezePrefix`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMmenuItems`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMsubmenuObjSuffixes`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMextraScript`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMcObj`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alternativeMenuTempArray`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nameAttribute`
+
+The following methods have changed visibility:
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->subMenu()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->link()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->procesItemStates()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->changeLinksForAccessRestrictedPages()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isNext()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isActive()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isCurrent()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isSubMenu()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isItemState()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->accessKey()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->userProcess()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->setATagParts()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getPageTitle()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getMPvar()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getDoktypeExcludeWhere()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getBannedUids()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuTypoLink()`
+
+
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_RO()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_init()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeLinking()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_afterLinking()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeAllWrap()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_finish()`
+
+
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->getBeforeAfter()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_init()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeLinking()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_afterLinking()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeAllWrap()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_finish()`
+
+The following functionality has been marked as deprecated as well:
+* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->setJS('mouseOver')`
+
+
+Impact
+======
+
+Instantiating any of the deprecated PHP classes, or calling any of the PHP methods will trigger a
+deprecation warning, as well as setting any of the previously public properties.
+
+Using `GMENU` or `IMGMENU` or any of the TypoScript settings will also raise a deprecation error.
+
+
+Affected Installations
+======================
+
+TYPO3 installations using `GMENU` or `IMGMENU` TypoScript functionality, roll-over functionality within menus
+in Frontend, or image-related functionality related to `HMENU`, or extending `HMENU` with their custom menus.
+
+
+Migration
+=========
+
+Migrate to `TMENU` by using "before" and "after" functionality to effectively render images with `GIFBUILDER`.
+
+.. index:: Frontend, TypoScript, PartiallyScanned, ext:frontend
index 65f30ab..fd40138 100644 (file)
@@ -15,6 +15,8 @@ namespace TYPO3\CMS\Frontend\ContentObject\Menu;
  */
 
 use TYPO3\CMS\Core\Cache\CacheManager;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
+use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\LanguageAspect;
 use TYPO3\CMS\Core\Database\ConnectionPool;
@@ -41,53 +43,116 @@ use TYPO3\CMS\Frontend\Typolink\PageLinkBuilder;
  */
 abstract class AbstractMenuContentObject
 {
+    use PublicPropertyDeprecationTrait;
+    use PublicMethodDeprecationTrait;
+
+    protected $deprecatedPublicProperties = [
+        'menuNumber' => 'Using $menuNumber of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'entryLevel' => 'Using $entryLevel of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'spacerIDList' => 'Using $spacerIDList of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'doktypeExcludeList' => 'Using $doktypeExcludeList of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'alwaysActivePIDlist' => 'Using $alwaysActivePIDlist of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'imgNamePrefix' => 'Using $imgNamePrefix of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'imgNameNotRandom' => 'Using $imgNameNotRandom of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'debug' => 'Using $debug of cObject HMENU from the outside is discouraged, as this variable is not in use anymore and will be removed in TYPO3 v10.0.',
+        'GMENU_fixKey' => 'Using $GMENU_fixKey of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'MP_array' => 'Using $MP_array of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'conf' => 'Using $conf of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'mconf' => 'Using $mconf of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'tmpl' => 'Using $tmpl of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'sys_page' => 'Using $sys_page of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'id' => 'Using $id of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'nextActive' => 'Using $nextActive of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'menuArr' => 'Using $menuArr of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'hash' => 'Using $hash of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'result' => 'Using $result of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'rL_uidRegister' => 'Using $rL_uidRegister of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'INPfixMD5' => 'Using $INPfixMD5 of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'I' => 'Using $I of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'WMresult' => 'Using $WMresult of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'WMfreezePrefix' => 'Using $WMfreezePrefix of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'WMmenuItems' => 'Using $WMmenuItems of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'WMsubmenuObjSuffixes' => 'Using $WMsubmenuObjSuffixes of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'WMextraScript' => 'Using $WMextraScript of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'WMcObj' => 'Using $WMcObj of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
+        'alternativeMenuTempArray' => 'Using $alternativeMenuTempArray of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+        'nameAttribute' => 'Using $nameAttribute of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
+    ];
+
+    protected $deprecatedPublicMethods = [
+        'subMenu' => 'Using subMenu() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'link' => 'Using link() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'procesItemStates' => 'Using procesItemStates() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'changeLinksForAccessRestrictedPages' => 'Using changeLinksForAccessRestrictedPages() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'isNext' => 'Using isNext() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'isActive' => 'Using isActive() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'isCurrent' => 'Using isCurrent() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'isSubMenu' => 'Using isSubMenu() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'isItemState' => 'Using isItemState() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'accessKey' => 'Using accessKey() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'userProcess' => 'Using userProcess() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'setATagParts' => 'Using setATagParts() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'getPageTitle' => 'Using getPageTitle() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'getMPvar' => 'Using getMPvar() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'getDoktypeExcludeWhere' => 'Using getDoktypeExcludeWhere() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'getBannedUids' => 'Using getBannedUids() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'menuTypoLink' => 'Using menuTypoLink() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
+        'extProc_RO' => 'Using extProc_RO() within HMENU extensions is discouraged, as rollover functionality will be removed in TYPO3 v10.0.',
+        'extProc_init' => 'Using extProc_init() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
+        'extProc_beforeLinking' => 'Using extProc_beforeLinking() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
+        'extProc_afterLinking' => 'Using extProc_afterLinking() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
+        'extProc_beforeAllWrap' => 'Using extProc_beforeAllWrap() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
+        'extProc_finish' => 'Using extProc_finish() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
+        'getBeforeAfter' => 'Using getBeforeAfter() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
+    ];
+
     /**
      * tells you which menu number this is. This is important when getting data from the setup
      *
      * @var int
      */
-    public $menuNumber = 1;
+    protected $menuNumber = 1;
 
     /**
      * 0 = rootFolder
      *
      * @var int
      */
-    public $entryLevel = 0;
+    protected $entryLevel = 0;
 
     /**
      * The doktype-number that defines a spacer
      *
      * @var string
      */
-    public $spacerIDList = '199';
+    protected $spacerIDList = '199';
 
     /**
      * Doktypes that define which should not be included in a menu
      *
      * @var string
      */
-    public $doktypeExcludeList = '6';
+    protected $doktypeExcludeList = '6';
 
     /**
      * @var int[]
      */
-    public $alwaysActivePIDlist = [];
+    protected $alwaysActivePIDlist = [];
 
     /**
      * @var string
      */
-    public $imgNamePrefix = 'img';
+    protected $imgNamePrefix = 'img';
 
     /**
      * @var int
      */
-    public $imgNameNotRandom = 0;
+    protected $imgNameNotRandom = 0;
 
     /**
      * @var bool
      */
-    public $debug = false;
+    protected $debug = false;
 
     /**
      * Loaded with the parent cObj-object when a new HMENU is made
@@ -99,45 +164,45 @@ abstract class AbstractMenuContentObject
     /**
      * @var string
      */
-    public $GMENU_fixKey = 'gmenu';
+    protected $GMENU_fixKey = 'gmenu';
 
     /**
      * accumulation of mount point data
      *
      * @var string[]
      */
-    public $MP_array = [];
+    protected $MP_array = [];
 
     /**
      * HMENU configuration
      *
      * @var array
      */
-    public $conf = [];
+    protected $conf = [];
 
     /**
      * xMENU configuration (TMENU, GMENU etc)
      *
      * @var array
      */
-    public $mconf = [];
+    protected $mconf = [];
 
     /**
      * @var \TYPO3\CMS\Core\TypoScript\TemplateService
      */
-    public $tmpl;
+    protected $tmpl;
 
     /**
      * @var \TYPO3\CMS\Frontend\Page\PageRepository
      */
-    public $sys_page;
+    protected $sys_page;
 
     /**
      * The base page-id of the menu.
      *
      * @var int
      */
-    public $id;
+    protected $id;
 
     /**
      * Holds the page uid of the NEXT page in the root line from the page pointed to by entryLevel;
@@ -145,24 +210,24 @@ abstract class AbstractMenuContentObject
      *
      * @var string
      */
-    public $nextActive;
+    protected $nextActive;
 
     /**
      * The array of menuItems which is built
      *
      * @var array[]
      */
-    public $menuArr;
+    protected $menuArr;
 
     /**
      * @var string
      */
-    public $hash;
+    protected $hash;
 
     /**
      * @var array
      */
-    public $result = [];
+    protected $result = [];
 
     /**
      * Is filled with an array of page uid numbers + RL parameters which are in the current
@@ -170,61 +235,61 @@ abstract class AbstractMenuContentObject
      *
      * @var array
      */
-    public $rL_uidRegister;
+    protected $rL_uidRegister;
 
     /**
      * @var string
      */
-    public $INPfixMD5;
+    protected $INPfixMD5;
 
     /**
      * @var mixed[]
      */
-    public $I;
+    protected $I;
 
     /**
      * @var string
      */
-    public $WMresult;
+    protected $WMresult;
 
     /**
      * @var string
      */
-    public $WMfreezePrefix;
+    protected $WMfreezePrefix;
 
     /**
      * @var int
      */
-    public $WMmenuItems;
+    protected $WMmenuItems;
 
     /**
      * @var array[]
      */
-    public $WMsubmenuObjSuffixes;
+    protected $WMsubmenuObjSuffixes;
 
     /**
      * @var string
      */
-    public $WMextraScript;
+    protected $WMextraScript;
 
     /**
      * @var ContentObjectRenderer
      */
-    public $WMcObj;
+    protected $WMcObj;
 
     /**
      * Can be set to contain menu item arrays for sub-levels.
      *
      * @var string
      */
-    public $alternativeMenuTempArray = '';
+    protected $alternativeMenuTempArray = '';
 
     /**
      * Will be 'id' in XHTML-mode
      *
      * @var string
      */
-    public $nameAttribute = 'name';
+    protected $nameAttribute = 'name';
 
     /**
      * TRUE to use cHash in generated link (normally only for the language
@@ -242,6 +307,11 @@ abstract class AbstractMenuContentObject
     protected $parentMenuArrItemKey;
 
     /**
+     * @var array
+     */
+    protected $parentMenuArr;
+
+    /**
      * The initialization of the object. This just sets some internal variables.
      *
      * @param TemplateService $tmpl The $this->getTypoScriptFrontendController()->tmpl object
@@ -1330,10 +1400,8 @@ abstract class AbstractMenuContentObject
      *
      * @param int $splitCount Number of menu items in the menu
      * @return array An array with two keys: array($NOconf,$ROconf) - where $NOconf contains the resolved configuration for each item when NOT rolled-over and $ROconf contains the ditto for the mouseover state (if any)
-     *
-     * @internal
      */
-    public function procesItemStates($splitCount)
+    protected function procesItemStates($splitCount)
     {
         // Prepare normal settings
         if (!is_array($this->mconf['NO.']) && $this->mconf['NO']) {
@@ -1592,9 +1660,8 @@ abstract class AbstractMenuContentObject
      * @param string $altTarget Alternative target
      * @param string $typeOverride Alternative type
      * @return array Returns an array with A-tag attributes as key/value pairs (HREF, TARGET and onClick)
-     * @internal
      */
-    public function link($key, $altTarget = '', $typeOverride = '')
+    protected function link($key, $altTarget = '', $typeOverride = '')
     {
         $runtimeCache = $this->getRuntimeCache();
         $cacheId = 'menu-generated-links-' . md5($key . $altTarget . $typeOverride . serialize($this->menuArr[$key]));
@@ -1781,7 +1848,7 @@ abstract class AbstractMenuContentObject
      * @param string $mainTarget Main target value
      * @param string $typeOverride Type number override if any
      */
-    public function changeLinksForAccessRestrictedPages(&$LD, $page, $mainTarget, $typeOverride)
+    protected function changeLinksForAccessRestrictedPages(&$LD, $page, $mainTarget, $typeOverride)
     {
         // If access restricted pages should be shown in menus, change the link of such pages to link to a redirection page:
         if ($this->mconf['showAccessRestrictedPages'] && $this->mconf['showAccessRestrictedPages'] !== 'NONE' && !$this->getTypoScriptFrontendController()->checkPageGroupAccess($page)) {
@@ -1807,9 +1874,8 @@ abstract class AbstractMenuContentObject
      * @param int $uid Page id of the current page for which a submenu MAY be produced (if conditions are met)
      * @param string $objSuffix Object prefix, see ->start()
      * @return string HTML content of the submenu
-     * @internal
      */
-    public function subMenu($uid, $objSuffix = '')
+    protected function subMenu($uid, $objSuffix = '')
     {
         // Setting alternative menu item array if _SUB_MENU has been defined in the current ->menuArr
         $altArray = '';
@@ -1865,10 +1931,9 @@ abstract class AbstractMenuContentObject
      * @param int $uid Page uid to evaluate.
      * @param string $MPvar MPvar for the current position of item.
      * @return bool TRUE if page with $uid is active
-     * @internal
      * @see subMenu()
      */
-    public function isNext($uid, $MPvar = '')
+    protected function isNext($uid, $MPvar = '')
     {
         // Check for always active PIDs:
         if (!empty($this->alwaysActivePIDlist) && in_array((int)$uid, $this->alwaysActivePIDlist, true)) {
@@ -1887,9 +1952,8 @@ abstract class AbstractMenuContentObject
      * @param int $uid Page uid to evaluate.
      * @param string $MPvar MPvar for the current position of item.
      * @return bool TRUE if page with $uid is active
-     * @internal
      */
-    public function isActive($uid, $MPvar = '')
+    protected function isActive($uid, $MPvar = '')
     {
         // Check for always active PIDs:
         if (!empty($this->alwaysActivePIDlist) && in_array((int)$uid, $this->alwaysActivePIDlist, true)) {
@@ -1908,9 +1972,8 @@ abstract class AbstractMenuContentObject
      * @param int $uid Page uid to evaluate.
      * @param string $MPvar MPvar for the current position of item.
      * @return bool TRUE if page $uid = $this->getTypoScriptFrontendController()->id
-     * @internal
      */
-    public function isCurrent($uid, $MPvar = '')
+    protected function isCurrent($uid, $MPvar = '')
     {
         $testUid = $uid . ($MPvar ? ':' . $MPvar : '');
         return $uid && end($this->rL_uidRegister) === 'ITEM:' . $testUid;
@@ -1922,9 +1985,8 @@ abstract class AbstractMenuContentObject
      *
      * @param int $uid Page uid for which to search for a submenu
      * @return bool Returns TRUE if there was a submenu with items found
-     * @internal
      */
-    public function isSubMenu($uid)
+    protected function isSubMenu($uid)
     {
         $cacheId = 'menucontentobject-is-submenu-decision-' . $uid;
         $runtimeCache = $this->getRuntimeCache();
@@ -1982,10 +2044,9 @@ abstract class AbstractMenuContentObject
      * @param string $kind The item state to evaluate (SPC, IFSUB, ACT etc... but no xxxRO states of course)
      * @param int $key Key pointing to menu item from ->menuArr
      * @return bool Returns TRUE if state matches
-     * @internal
      * @see procesItemStates()
      */
-    public function isItemState($kind, $key)
+    protected function isItemState($kind, $key)
     {
         $natVal = false;
         // If any value is set for ITEM_STATE the normal evaluation is discarded
@@ -2026,9 +2087,8 @@ abstract class AbstractMenuContentObject
      *
      * @param string $title Menu item title.
      * @return array Returns an array with keys "code" ("accesskey" attribute for the img-tag) and "alt" (text-addition to the "alt" attribute) if an access key was defined. Otherwise array was empty
-     * @internal
      */
-    public function accessKey($title)
+    protected function accessKey($title)
     {
         $tsfe = $this->getTypoScriptFrontendController();
         // The global array ACCESSKEY is used to globally control if letters are already used!!
@@ -2055,9 +2115,8 @@ abstract class AbstractMenuContentObject
      * @param string $mConfKey Key pointing for the property in the current ->mconf array holding possibly parameters to pass along to the function/method. Currently the keys used are "IProcFunc" and "itemArrayProcFunc".
      * @param mixed $passVar A variable to pass to the user function and which should be returned again from the user function. The idea is that the user function modifies this variable according to what you want to achieve and then returns it. For "itemArrayProcFunc" this variable is $this->menuArr, for "IProcFunc" it is $this->I
      * @return mixed The processed $passVar
-     * @internal
      */
-    public function userProcess($mConfKey, $passVar)
+    protected function userProcess($mConfKey, $passVar)
     {
         if ($this->mconf[$mConfKey]) {
             $funcConf = $this->mconf[$mConfKey . '.'];
@@ -2069,10 +2128,8 @@ abstract class AbstractMenuContentObject
 
     /**
      * Creates the <A> tag parts for the current item (in $this->I, [A1] and [A2]) based on other information in this array (like $this->I['linkHREF'])
-     *
-     * @internal
      */
-    public function setATagParts()
+    protected function setATagParts()
     {
         $params = trim($this->I['val']['ATagParams']) . $this->I['accessKey']['code'];
         $params = $params !== '' ? ' ' . $params : '';
@@ -2086,9 +2143,8 @@ abstract class AbstractMenuContentObject
      * @param string $title The current page title
      * @param string $nav_title The current value of the navigation title
      * @return string Returns the navigation title if it is NOT blank, otherwise the page title.
-     * @internal
      */
-    public function getPageTitle($title, $nav_title)
+    protected function getPageTitle($title, $nav_title)
     {
         return trim($nav_title) !== '' ? $nav_title : $title;
     }
@@ -2100,7 +2156,7 @@ abstract class AbstractMenuContentObject
      * @return string MP vars for element.
      * @see link()
      */
-    public function getMPvar($key)
+    protected function getMPvar($key)
     {
         if ($GLOBALS['TYPO3_CONF_VARS']['FE']['enable_mount_pids']) {
             $localMP_array = $this->MP_array;
@@ -2117,9 +2173,8 @@ abstract class AbstractMenuContentObject
      * Returns where clause part to exclude 'not in menu' pages
      *
      * @return string where clause part.
-     * @internal
      */
-    public function getDoktypeExcludeWhere()
+    protected function getDoktypeExcludeWhere()
     {
         return $this->doktypeExcludeList ? ' AND pages.doktype NOT IN (' . $this->doktypeExcludeList . ')' : '';
     }
@@ -2128,9 +2183,8 @@ abstract class AbstractMenuContentObject
      * Returns an array of banned UIDs (from excludeUidList)
      *
      * @return array Array of banned UIDs
-     * @internal
      */
-    public function getBannedUids()
+    protected function getBannedUids()
     {
         $excludeUidList = isset($this->conf['excludeUidList.'])
             ? $this->parent_cObj->stdWrap($this->conf['excludeUidList'], $this->conf['excludeUidList.'])
@@ -2156,7 +2210,7 @@ abstract class AbstractMenuContentObject
      * @param int|string $typeOverride "type" value, empty string means "not set"
      * @return array See linkData
      */
-    public function menuTypoLink($page, $oTarget, $no_cache, $script, $overrideArray = '', $addParams = '', $typeOverride = '')
+    protected function menuTypoLink($page, $oTarget, $no_cache, $script, $overrideArray = '', $addParams = '', $typeOverride = '')
     {
         $conf = [
             'parameter' => is_array($overrideArray) && $overrideArray['uid'] ? $overrideArray['uid'] : $page['uid']
index 1cca967..e1d8190 100644 (file)
@@ -23,9 +23,16 @@ use TYPO3\CMS\Frontend\Imaging\GifBuilder;
 
 /**
  * Extension class creating graphic based menus (PNG or GIF files)
+ *
+ * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10.0
  */
 class GraphicalMenuContentObject extends AbstractMenuContentObject
 {
+    public function __construct()
+    {
+        trigger_error('GMENU and GraphicalMenuContentObject will be removed in TYPO3 v10.0, you should build accessible websites with TMENU/Text, and optional images on top, which can be achieved with TypoScript.', E_USER_DEPRECATED);
+    }
+
     /**
      * Calls procesItemStates() so that the common configuration for the menu items are resolved into individual configuration per item.
      * Calls makeGifs() for all "normal" items and if configured for, also the "rollover" items.
@@ -470,10 +477,9 @@ class GraphicalMenuContentObject extends AbstractMenuContentObject
      * Called right before the traversing of $this->result begins.
      * Can be used for various initialization
      *
-     * @internal
      * @see writeMenu()
      */
-    public function extProc_init()
+    protected function extProc_init()
     {
     }
 
@@ -481,10 +487,9 @@ class GraphicalMenuContentObject extends AbstractMenuContentObject
      * Called after all processing for RollOver of an element has been done.
      *
      * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found OR $this->result['RO'][$key] where the configuration for that elements RO version is found!
-     * @internal
      * @see writeMenu()
      */
-    public function extProc_RO($key)
+    protected function extProc_RO($key)
     {
     }
 
@@ -492,10 +497,9 @@ class GraphicalMenuContentObject extends AbstractMenuContentObject
      * Called right before the creation of the link for the menu item
      *
      * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
-     * @internal
      * @see writeMenu()
      */
-    public function extProc_beforeLinking($key)
+    protected function extProc_beforeLinking($key)
     {
     }
 
@@ -506,10 +510,9 @@ class GraphicalMenuContentObject extends AbstractMenuContentObject
      * Further this calls the subMenu function in the parent class to create any submenu there might be.
      *
      * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
-     * @internal
      * @see writeMenu(), AbstractMenuContentObject::subMenu()
      */
-    public function extProc_afterLinking($key)
+    protected function extProc_afterLinking($key)
     {
         // Add part to the accumulated result + fetch submenus
         if (!$this->I['spacer']) {
@@ -525,10 +528,9 @@ class GraphicalMenuContentObject extends AbstractMenuContentObject
      * @param string $item The current content of the menu item, $this->I['theItem'], passed along.
      * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found (unused)
      * @return string The modified version of $item, going back into $this->I['theItem']
-     * @internal
      * @see writeMenu()
      */
-    public function extProc_beforeAllWrap($item, $key)
+    protected function extProc_beforeAllWrap($item, $key)
     {
         return $item;
     }
@@ -537,10 +539,9 @@ class GraphicalMenuContentObject extends AbstractMenuContentObject
      * Called before the writeMenu() function returns (only if a menu was generated)
      *
      * @return string The total menu content should be returned by this function
-     * @internal
      * @see writeMenu()
      */
-    public function extProc_finish()
+    protected function extProc_finish()
     {
         // stdWrap:
         if (is_array($this->mconf['stdWrap.'])) {
index be0829b..2318ee9 100644 (file)
@@ -23,9 +23,16 @@ use TYPO3\CMS\Frontend\Imaging\GifBuilder;
 
 /**
  * ImageMap based menus
+ *
+ * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10.0
  */
 class ImageMenuContentObject extends AbstractMenuContentObject
 {
+    public function __construct()
+    {
+        trigger_error('IMGMENU and ImageMenuContentObject will be removed in TYPO3 v10.0, you should build accessible websites with TMENU/Text, and optional images on top, which can be achieved with TypoScript.', E_USER_DEPRECATED);
+    }
+
     /**
      * Calls procesItemStates() so that the common configuration for the menu items are resolved into individual configuration per item.
      * Calls makeImageMap() to generate the image map image-file
index d539072..0d5fd17 100644 (file)
@@ -13,6 +13,7 @@ namespace TYPO3\CMS\Frontend\ContentObject\Menu;
  *
  * The TYPO3 project - inspiring people to share!
  */
+
 use TYPO3\CMS\Core\TypoScript\TypoScriptService;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
@@ -175,7 +176,7 @@ class TextMenuContentObject extends AbstractMenuContentObject
      * @param string $pref Can be "before" or "after" and determines which kind of image to create (basically this is the prefix of the TypoScript properties that are read from the ->I['val'] array
      * @return string The resulting HTML of the image, if any.
      */
-    public function getBeforeAfter($pref)
+    protected function getBeforeAfter($pref)
     {
         $res = '';
         if ($imgInfo = $this->WMcObj->getImgResource($this->I['val'][$pref . 'Img'], $this->I['val'][$pref . 'Img.'])) {
@@ -203,10 +204,9 @@ class TextMenuContentObject extends AbstractMenuContentObject
      * Called right before the traversing of $this->result begins.
      * Can be used for various initialization
      *
-     * @access private
      * @see writeMenu()
      */
-    public function extProc_init()
+    protected function extProc_init()
     {
     }
 
@@ -214,10 +214,9 @@ class TextMenuContentObject extends AbstractMenuContentObject
      * Called right before the creation of the link for the menu item
      *
      * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
-     * @access private
      * @see writeMenu()
      */
-    public function extProc_beforeLinking($key)
+    protected function extProc_beforeLinking($key)
     {
     }
 
@@ -226,10 +225,9 @@ class TextMenuContentObject extends AbstractMenuContentObject
      * This function MUST set $this->WMresult.=[HTML for menu item] to add the generated menu item to the internal accumulation of items.
      *
      * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
-     * @access private
      * @see writeMenu()
      */
-    public function extProc_afterLinking($key)
+    protected function extProc_afterLinking($key)
     {
         // Add part to the accumulated result + fetch submenus
         if (!$this->I['spacer']) {
@@ -245,10 +243,9 @@ class TextMenuContentObject extends AbstractMenuContentObject
      * @param string $item The current content of the menu item, $this->I['theItem'], passed along.
      * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
      * @return string The modified version of $item, going back into $this->I['theItem']
-     * @access private
      * @see writeMenu()
      */
-    public function extProc_beforeAllWrap($item, $key)
+    protected function extProc_beforeAllWrap($item, $key)
     {
         return $item;
     }
@@ -257,10 +254,9 @@ class TextMenuContentObject extends AbstractMenuContentObject
      * Called before the writeMenu() function returns (only if a menu was generated)
      *
      * @return string The total menu content should be returned by this function
-     * @access private
      * @see writeMenu()
      */
-    public function extProc_finish()
+    protected function extProc_finish()
     {
         // stdWrap:
         if (is_array($this->mconf['stdWrap.'])) {
index 7a90527..d4a504c 100644 (file)
@@ -4267,6 +4267,8 @@ class TypoScriptFrontendController implements LoggerAwareInterface
         if ($key) {
             switch ($key) {
                 case 'mouseOver':
+                    trigger_error('Calling $TSFE->setJS("mouseOver") will be removed in TYPO3 v10.0. If necessary, use setJS() with your recommended code.', E_USER_DEPRECATED);
+                    // Rollover functionality will be removed in TYPO3 v10.0
                     $this->additionalJavaScript[$key] = '              // JS function for mouse-over
                function over(name, imgObj) {   //
                        if (document[name]) {document[name].src = eval(name+"_h.src");}
index 9d3bab5..1770fb9 100644 (file)
@@ -25,6 +25,7 @@ use TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
 use TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject;
+use TYPO3\CMS\Frontend\Page\PageRepository;
 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
 /**
@@ -76,9 +77,6 @@ class AbstractMenuContentObjectTest extends UnitTestCase
         $connectionPoolProphet = $this->prophesize(ConnectionPool::class);
         $connectionPoolProphet->getConnectionForTable('tt_content')->willReturn($connectionProphet->reveal());
         GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
-
-        $this->subject->sys_page = $this->getMockBuilder(\TYPO3\CMS\Frontend\Page\PageRepository::class)->getMock();
-        $this->subject->parent_cObj = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
     }
 
     /**
@@ -87,7 +85,9 @@ class AbstractMenuContentObjectTest extends UnitTestCase
     public function sectionIndexReturnsEmptyArrayIfTheRequestedPageCouldNotBeFetched()
     {
         $this->prepareSectionIndexTest();
-        $this->subject->sys_page->expects($this->once())->method('getPage')->will($this->returnValue(null));
+        $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
+        $pageRepository->expects($this->once())->method('getPage')->will($this->returnValue(null));
+        $this->subject->_set('sys_page', $pageRepository);
         $result = $this->subject->_call('sectionIndex', 'field');
         $this->assertEquals($result, []);
     }
@@ -98,8 +98,10 @@ class AbstractMenuContentObjectTest extends UnitTestCase
     public function sectionIndexUsesTheInternalIdIfNoPageIdWasGiven()
     {
         $this->prepareSectionIndexTest();
-        $this->subject->id = 10;
-        $this->subject->sys_page->expects($this->once())->method('getPage')->will($this->returnValue(null))->with(10);
+        $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
+        $pageRepository->expects($this->once())->method('getPage')->will($this->returnValue(null))->with(10);
+        $this->subject->_set('sys_page', $pageRepository);
+        $this->subject->_set('id', 10);
         $result = $this->subject->_call('sectionIndex', 'field');
         $this->assertEquals($result, []);
     }
@@ -112,8 +114,15 @@ class AbstractMenuContentObjectTest extends UnitTestCase
         $this->expectException(\UnexpectedValueException::class);
         $this->expectExceptionCode(1337334849);
         $this->prepareSectionIndexTest();
-        $this->subject->sys_page->expects($this->once())->method('getPage')->will($this->returnValue([]));
-        $this->subject->parent_cObj->expects($this->once())->method('exec_getQuery')->will($this->returnValue(0));
+        $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
+        $pageRepository->expects($this->once())->method('getPage')->will($this->returnValue([]));
+        $this->subject->_set('sys_page', $pageRepository);
+        $this->subject->_set('id', 10);
+
+        $cObject = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
+        $cObject->expects($this->once())->method('exec_getQuery')->will($this->returnValue(0));
+        $this->subject->_set('parent_cObj', $cObject);
+
         $this->subject->_call('sectionIndex', 'field');
     }
 
@@ -126,12 +135,23 @@ class AbstractMenuContentObjectTest extends UnitTestCase
         $statementProphet->fetch()->shouldBeCalledTimes(2)->willReturn(['uid' => 0, 'header' => 'NOT_OVERLAID'], false);
 
         $this->prepareSectionIndexTest();
-        $this->subject->mconf['sectionIndex.']['type'] = 'all';
+        $this->subject->_set('mconf', [
+            'sectionIndex.' => [
+                'type' => 'all'
+            ]
+        ]);
         $context = GeneralUtility::makeInstance(Context::class);
         $context->setAspect('language', new LanguageAspect(1, 1, LanguageAspect::OVERLAYS_MIXED));
-        $this->subject->sys_page->expects($this->once())->method('getPage')->will($this->returnValue(['_PAGES_OVERLAY_LANGUAGE' => 1]));
-        $this->subject->parent_cObj->expects($this->once())->method('exec_getQuery')->willReturn($statementProphet->reveal());
-        $this->subject->sys_page->expects($this->once())->method('getRecordOverlay')->will($this->returnValue(['uid' => 0, 'header' => 'OVERLAID']));
+
+        $pageRepository = $this->getMockBuilder(PageRepository::class)->setConstructorArgs([$context])->getMock();
+        $pageRepository->expects($this->once())->method('getPage')->will($this->returnValue(['_PAGES_OVERLAY_LANGUAGE' => 1]));
+        $pageRepository->expects($this->once())->method('getRecordOverlay')->will($this->returnValue(['uid' => 0, 'header' => 'OVERLAID']));
+        $this->subject->_set('sys_page', $pageRepository);
+
+        $cObject = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
+        $cObject->expects($this->once())->method('exec_getQuery')->willReturn($statementProphet->reveal());
+        $this->subject->_set('parent_cObj', $cObject);
+
         $result = $this->subject->_call('sectionIndex', 'field');
         $this->assertEquals($result[0]['title'], 'OVERLAID');
     }
@@ -189,10 +209,21 @@ class AbstractMenuContentObjectTest extends UnitTestCase
         $statementProphet->fetch()->willReturn($dataRow, false);
 
         $this->prepareSectionIndexTest();
-        $this->subject->mconf['sectionIndex.']['type'] = 'header';
-        $this->subject->sys_page->expects($this->once())->method('getPage')->will($this->returnValue([]));
-        $this->subject->parent_cObj->expects($this->once())->method('exec_getQuery')
-            ->willReturn($statementProphet->reveal());
+        $this->subject->_set('mconf', [
+            'sectionIndex.' => [
+                'type' => 'header'
+            ]
+        ]);
+
+        $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
+        $pageRepository->expects($this->once())->method('getPage')->will($this->returnValue(['_PAGES_OVERLAY_LANGUAGE' => 1]));
+        $pageRepository->expects($this->once())->method('getPage')->will($this->returnValue([]));
+        $this->subject->_set('sys_page', $pageRepository);
+
+        $cObject = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
+        $cObject->expects($this->once())->method('exec_getQuery')->willReturn($statementProphet->reveal());
+        $this->subject->_set('parent_cObj', $cObject);
+
         $result = $this->subject->_call('sectionIndex', 'field');
         $this->assertCount($expectedAmount, $result);
     }
@@ -238,17 +269,24 @@ class AbstractMenuContentObjectTest extends UnitTestCase
         $statementProphet->fetch()->willReturn([]);
 
         $this->prepareSectionIndexTest();
-        $this->subject->sys_page->expects($this->once())->method('getPage')->will($this->returnValue([]));
-        $this->subject->mconf['sectionIndex.'] = $configuration;
+        $this->subject->_set('mconf', ['sectionIndex.' => $configuration]);
+
+        $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
+        $pageRepository->expects($this->once())->method('getPage')->will($this->returnValue([]));
+        $this->subject->_set('sys_page', $pageRepository);
+
         $queryConfiguration = [
             'pidInList' => 12,
             'orderBy' => 'field',
             'languageField' => 'sys_language_uid',
             'where' => $whereClausePrefix
         ];
-        $this->subject->parent_cObj->expects($this->once())->method('exec_getQuery')
-            ->with('tt_content', $queryConfiguration)
-            ->willReturn($statementProphet->reveal());
+
+        $cObject = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
+        $cObject->expects($this->once())->method('exec_getQuery')
+            ->with('tt_content', $queryConfiguration)->willReturn($statementProphet->reveal());
+        $this->subject->_set('parent_cObj', $cObject);
+
         $this->subject->_call('sectionIndex', 'field', 12);
     }
 
@@ -305,18 +343,21 @@ class AbstractMenuContentObjectTest extends UnitTestCase
         $runtimeCacheMock = $this->getMockBuilder(VariableFrontend::class)->setMethods(['get', 'set'])->disableOriginalConstructor()->getMock();
         $runtimeCacheMock->expects($this->once())->method('get')->with($this->anything())->willReturn(false);
         $runtimeCacheMock->expects($this->once())->method('set')->with($this->anything(), ['result' => $expectedResult]);
-        $this->subject = $this->getMockBuilder(AbstractMenuContentObject::class)->setMethods(['getRuntimeCache'])->getMockForAbstractClass();
+
+        $proxyClassName = $this->buildAccessibleProxy(AbstractMenuContentObject::class);
+        $this->subject = $this->getMockForAbstractClass($proxyClassName, [], '', true, true, true, ['getRuntimeCache']);
         $this->subject->expects($this->once())->method('getRuntimeCache')->willReturn($runtimeCacheMock);
         $this->prepareSectionIndexTest();
-        $this->subject->parent_cObj = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
 
-        $this->subject->sys_page->expects($this->once())->method('getMenu')->will($this->returnValue($menu));
-        $this->subject->menuArr = [
+        $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
+        $pageRepository->expects($this->once())->method('getMenu')->will($this->returnValue($menu));
+        $this->subject->_set('sys_page', $pageRepository);
+        $this->subject->_set('menuArr', [
             0 => ['uid' => 1]
-        ];
-        $this->subject->conf['excludeUidList'] = $excludeUidList;
+        ]);
+        $this->subject->_set('conf', ['excludeUidList' => $excludeUidList]);
 
-        $this->assertEquals($expectedResult, $this->subject->isItemState('IFSUB', 0));
+        $this->assertEquals($expectedResult, $this->subject->_call('isItemState', 'IFSUB', 0));
     }
 
     /**
@@ -557,14 +598,15 @@ class AbstractMenuContentObjectTest extends UnitTestCase
      * @param string $addParams
      * @param string $typeOverride
      */
-    public function menuTypoLinkCreatesExpectedTypoLinkConfiguration(array $expected, array $mconf, $useCacheHash = true, array $page, $oTarget, $no_cache, $script, $overrideArray = '', $addParams = '', $typeOverride = '')
+    public function menuTypoLinkCreatesExpectedTypoLinkConfiguration(array $expected, array $mconf, $useCacheHash, array $page, $oTarget, $no_cache, $script, $overrideArray = '', $addParams = '', $typeOverride = '')
     {
-        $this->subject->parent_cObj = $this->getMockBuilder(ContentObjectRenderer::class)
+        $cObject = $this->getMockBuilder(ContentObjectRenderer::class)
             ->setMethods(['typoLink'])
             ->getMock();
-        $this->subject->mconf = $mconf;
+        $cObject->expects($this->once())->method('typoLink')->with('|', $expected);
+        $this->subject->_set('parent_cObj', $cObject);
+        $this->subject->_set('mconf', $mconf);
         $this->subject->_set('useCacheHash', $useCacheHash);
-        $this->subject->parent_cObj->expects($this->once())->method('typoLink')->with('|', $expected);
-        $this->subject->menuTypoLink($page, $oTarget, $no_cache, $script, $overrideArray, $addParams, $typeOverride);
+        $this->subject->_call('menuTypoLink', $page, $oTarget, $no_cache, $script, $overrideArray, $addParams, $typeOverride);
     }
 }
index f4270bf..ab13570 100644 (file)
@@ -39,7 +39,7 @@ class MenuContentObjectFactoryTest extends \TYPO3\TestingFramework\Core\Unit\Uni
     public function getMenuObjectByTypeReturnsObjectForRegisteredMenuType()
     {
         $factory = new MenuContentObjectFactory;
-        $this->assertInternalType('object', $factory->getMenuObjectByType('GMENU'));
+        $this->assertInternalType('object', $factory->getMenuObjectByType('TMENU'));
     }
 
     /**
@@ -48,7 +48,7 @@ class MenuContentObjectFactoryTest extends \TYPO3\TestingFramework\Core\Unit\Uni
     public function getMenuObjectByTypeReturnsObjectWithLowercasedMenuType()
     {
         $factory = new MenuContentObjectFactory;
-        $this->assertInternalType('object', $factory->getMenuObjectByType('gmenu'));
+        $this->assertInternalType('object', $factory->getMenuObjectByType('tmenu'));
     }
 
     /**
@@ -58,8 +58,8 @@ class MenuContentObjectFactoryTest extends \TYPO3\TestingFramework\Core\Unit\Uni
     {
         $factory = new MenuContentObjectFactory;
         $selfClassName = static::class;
-        $factory->registerMenuType('GMENU', $selfClassName);
-        $this->assertInstanceOf($selfClassName, $factory->getMenuObjectByType('GMENU'));
+        $factory->registerMenuType('TMENU', $selfClassName);
+        $this->assertInstanceOf($selfClassName, $factory->getMenuObjectByType('TMENU'));
     }
 
     /**
index 2239150..38aa94b 100644 (file)
@@ -829,4 +829,14 @@ return [
             'Deprecation-85996-ExtensionManagerCommandController.rst'
         ],
     ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\ImageMenuContentObject' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
 ];
index 9ce7f2b..254edbd 100644 (file)
@@ -724,6 +724,167 @@ return [
             'Deprecation-68748-DeprecateAbstractContentObjectgetContentObject.rst',
         ],
     ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->subMenu' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->link' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 3,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->procesItemStates' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->changeLinksForAccessRestrictedPages' => [
+        'numberOfMandatoryArguments' => 4,
+        'maximumNumberOfArguments' => 4,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isNext' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isActive' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isCurrent' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isSubMenu' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isItemState' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->accessKey' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->userProcess' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->setATagParts' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getPageTitle' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getMPvar' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getDoktypeExcludeWhere' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getBannedUids' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuTypoLink' => [
+        'numberOfMandatoryArguments' => 4,
+        'maximumNumberOfArguments' => 7,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_RO' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_init' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeLinking' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_afterLinking' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeAllWrap' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_fisish' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
     'TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->URLqMark' => [
         'numberOfMandatoryArguments' => 2,
         'maximumNumberOfArguments' => 2,
@@ -917,6 +1078,48 @@ return [
             'Deprecation-80527-Marker-relatedMethodsInContentObjectRenderer.rst',
         ],
     ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->getBeforeAfter' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_init' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeLinking' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_afterLinking' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeAllWrap' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_finish' => [
+        'numberOfMandatoryArguments' => 0,
+        'maximumNumberOfArguments' => 0,
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
     'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->beLoginLinkIPList' => [
         'numberOfMandatoryArguments' => 0,
         'maximumNumberOfArguments' => 0,
index 3ca721d..2adca81 100644 (file)
@@ -692,4 +692,154 @@ return [
             'Deprecation-84375-ProtectedMethodsAndPropertiesInPageLayoutController.rst'
         ],
     ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuNumber' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->entryLevel' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->spacerIDList' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->doktypeExcludeList' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alwaysActivePIDList' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNamePrefix' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNameNotRandom' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->debug' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->GMENU_fixKey' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->MP_array' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->conf' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->mconf' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->tmpl' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->sys_page' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->id' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nextActive' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuArr' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->hash' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->result' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->rL_uidRegister' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->INPfixMD5' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->I' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMresult' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMfreezePrefix' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMmenuItems' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMsubmenuObjSuffixes' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMextraScript' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMcObj' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alternativeMenuTempArray' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nameAttribute' => [
+        'restFiles' => [
+            'Deprecation-85902-IMGMENUGMENU.rst',
+        ],
+    ],
 ];