[TASK] Add typehints for ElementBrowser usage via SOBE 91/42691/5
authorMarkus Klein <markus.klein@typo3.org>
Mon, 17 Aug 2015 22:03:33 +0000 (00:03 +0200)
committerGeorg Ringer <georg.ringer@gmail.com>
Tue, 18 Aug 2015 06:05:33 +0000 (08:05 +0200)
The TreeViews access the controllers via the global SOBE.
This patch adds typehints to easily identify those usages.

Resolves: #69139
Releases: master
Change-Id: Ib280d4f9a2eeeb347893d1a9ab761760d993cac5
Reviewed-on: http://review.typo3.org/42691
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Tested-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Reviewed-by: Daniel Goerz <ervaude@gmail.com>
Tested-by: Daniel Goerz <ervaude@gmail.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
typo3/sysext/backend/Classes/RecordList/ElementBrowserRecordList.php
typo3/sysext/backend/Classes/Tree/View/ElementBrowserFolderTreeView.php
typo3/sysext/backend/Classes/Tree/View/ElementBrowserPageTreeView.php
typo3/sysext/backend/Classes/Tree/View/FolderTreeView.php
typo3/sysext/recordlist/Classes/Controller/ElementBrowserController.php
typo3/sysext/rtehtmlarea/Classes/Controller/BrowseLinksController.php
typo3/sysext/rtehtmlarea/Classes/Controller/SelectImageController.php
typo3/sysext/rtehtmlarea/Classes/FolderTree.php

index ef8744c..5349a3e 100644 (file)
@@ -17,6 +17,7 @@ namespace TYPO3\CMS\Backend\RecordList;
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Backend\Utility\IconUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Recordlist\Browser\ElementBrowser;
 
 /**
  * Displays the page/file tree for browsing database records or files.
@@ -67,7 +68,9 @@ class ElementBrowserRecordList extends \TYPO3\CMS\Recordlist\RecordList\Database
         * @return string
         */
        public function ext_addP() {
-               $str = '&act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandPage=' . $GLOBALS['SOBE']->browser->expandPage . '&bparams=' . rawurlencode($GLOBALS['SOBE']->browser->bparams);
+               /** @var ElementBrowser $elementBrowser */
+               $elementBrowser = $GLOBALS['SOBE']->browser;
+               $str = '&act=' . $elementBrowser->act . '&mode=' . $elementBrowser->mode . '&expandPage=' . $elementBrowser->expandPage . '&bparams=' . rawurlencode($elementBrowser->bparams);
                return $str;
        }
 
index b94b92c..ca87beb 100644 (file)
@@ -13,6 +13,9 @@ namespace TYPO3\CMS\Backend\Tree\View;
  *
  * The TYPO3 project - inspiring people to share!
  */
+use TYPO3\CMS\Core\Resource\Folder;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Recordlist\Browser\ElementBrowser;
 
 /**
  * Base extension class which generates the folder tree.
@@ -41,12 +44,14 @@ class ElementBrowserFolderTreeView extends FolderTreeView {
         * Wrapping the title in a link, if applicable.
         *
         * @param string $title Title, ready for output.
-        * @param \TYPO3\CMS\Core\Resource\Folder $folderObject The "record
+        * @param Folder $folderObject The "record
         * @return string Wrapping title string.
         */
-       public function wrapTitle($title, \TYPO3\CMS\Core\Resource\Folder $folderObject) {
+       public function wrapTitle($title, Folder $folderObject) {
                if ($this->ext_isLinkable($folderObject)) {
-                       $aOnClick = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandFolder=' . rawurlencode($folderObject->getCombinedIdentifier())) . ');';
+                       /** @var ElementBrowser $elementBrowser */
+                       $elementBrowser = $GLOBALS['SOBE']->browser;
+                       $aOnClick = 'return jumpToUrl(' . GeneralUtility::quoteJSvalue($this->getThisScript() . 'act=' . $elementBrowser->act . '&mode=' . $elementBrowser->mode . '&expandFolder=' . rawurlencode($folderObject->getCombinedIdentifier())) . ');';
                        return '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '">' . $title . '</a>';
                } else {
                        return '<span class="text-muted">' . $title . '</span>';
@@ -56,10 +61,10 @@ class ElementBrowserFolderTreeView extends FolderTreeView {
        /**
         * Returns TRUE if the input "record" contains a folder which can be linked.
         *
-        * @param \TYPO3\CMS\Core\Resource\Folder $folderObject Object with information about the folder element. Contains keys like title, uid, path, _title
+        * @param Folder $folderObject Object with information about the folder element. Contains keys like title, uid, path, _title
         * @return bool TRUE is returned if the path is found in the web-part of the server and is NOT a recycler or temp folder AND if ->ext_noTempRecyclerDirs is not set.
         */
-       public function ext_isLinkable(\TYPO3\CMS\Core\Resource\Folder $folderObject) {
+       public function ext_isLinkable(Folder $folderObject) {
                if ($this->ext_noTempRecyclerDirs && (substr($folderObject->getIdentifier(), -7) === '_temp_/' || substr($folderObject->getIdentifier(), -11) === '_recycler_/')) {
                        return FALSE;
                } else {
@@ -72,7 +77,7 @@ class ElementBrowserFolderTreeView extends FolderTreeView {
         *
         * @param string $icon HTML string to wrap, probably an image tag.
         * @param string $cmd Command for 'PM' get var
-        * @param bool $bMark If set, the link will have an anchor point (=$bMark) and a name attribute (=$bMark)
+        * @param bool|string $bMark If set, the link will have an anchor point (=$bMark) and a name attribute (=$bMark)
         * @param bool $isOpen check if the item has children
         * @return string Link-wrapped input string
         * @access private
@@ -83,7 +88,7 @@ class ElementBrowserFolderTreeView extends FolderTreeView {
                        $anchor = '#' . $bMark;
                        $name = ' name="' . $bMark . '"';
                }
-               $aOnClick = 'return jumpToUrl(' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($this->getThisScript() . 'PM=' . $cmd) . ',' . \TYPO3\CMS\Core\Utility\GeneralUtility::quoteJSvalue($anchor) . ');';
+               $aOnClick = 'return jumpToUrl(' . GeneralUtility::quoteJSvalue($this->getThisScript() . 'PM=' . $cmd) . ',' . GeneralUtility::quoteJSvalue($anchor) . ');';
                return '<a href="#"' . htmlspecialchars($name) . ' onclick="' . htmlspecialchars($aOnClick) . '">' . $icon . '</a>';
        }
 
index f763941..ae48b28 100644 (file)
@@ -15,6 +15,7 @@ namespace TYPO3\CMS\Backend\Tree\View;
  */
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Frontend\Page\PageRepository;
+use TYPO3\CMS\Recordlist\Browser\ElementBrowser;
 
 /**
  * Class which generates the page tree
@@ -94,12 +95,14 @@ class ElementBrowserPageTreeView extends BrowseTreeView {
                                $classAttr .= ' list-tree-control-open';
                        }
 
+                       /** @var ElementBrowser $elementBrowser */
+                       $elementBrowser = $GLOBALS['SOBE']->browser;
                        $selected = '';
-                       if ($GLOBALS['SOBE']->browser->curUrlInfo['act'] == 'page' && $GLOBALS['SOBE']->browser->curUrlInfo['pageid'] == $treeItem['row']['uid'] && $GLOBALS['SOBE']->browser->curUrlInfo['pageid']) {
+                       if ($elementBrowser->curUrlInfo['act'] == 'page' && $elementBrowser->curUrlInfo['pageid'] == $treeItem['row']['uid'] && $elementBrowser->curUrlInfo['pageid']) {
                                $selected = ' bg-success';
                                $classAttr .= ' active';
                        }
-                       $aOnClick = 'return jumpToUrl(' . GeneralUtility::quoteJSvalue($this->getThisScript() . 'act=' . $GLOBALS['SOBE']->browser->act . '&mode=' . $GLOBALS['SOBE']->browser->mode . '&expandPage=' . $treeItem['row']['uid']) . ');';
+                       $aOnClick = 'return jumpToUrl(' . GeneralUtility::quoteJSvalue($this->getThisScript() . 'act=' . $elementBrowser->act . '&mode=' . $elementBrowser->mode . '&expandPage=' . $treeItem['row']['uid']) . ');';
                        $cEbullet = $this->ext_isLinkable($treeItem['row']['doktype'], $treeItem['row']['uid']) ? '<a href="#" class="list-tree-show" onclick="' . htmlspecialchars($aOnClick) . '"><i class="fa fa-caret-square-o-right"></i></a>' : '';
                        $out .= '
                                <li' . ($classAttr ? ' class="' . trim($classAttr) . '"' : '') . '>
index f6febb7..2fa4a93 100644 (file)
@@ -19,6 +19,7 @@ use TYPO3\CMS\Core\Messaging\FlashMessage;
 use TYPO3\CMS\Core\Resource\FolderInterface;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Lang\LanguageService;
+use TYPO3\CMS\Recordlist\Browser\ElementBrowser;
 
 /**
  * Generate a folder tree,
@@ -117,13 +118,15 @@ class FolderTreeView extends AbstractTreeView {
        public function PMiconATagWrap($icon, $cmd, $isExpand = TRUE) {
 
                if (empty($this->scope)) {
+                       /** @var ElementBrowser $elementBrowser */
+                       $elementBrowser = $GLOBALS['SOBE']->browser;
                        $this->scope = array(
                                'class' => get_class($this),
                                'script' => $this->thisScript,
                                'ext_noTempRecyclerDirs' => $this->ext_noTempRecyclerDirs,
                                'browser' => array(
-                                       'mode' => $GLOBALS['SOBE']->browser->mode,
-                                       'act' => $GLOBALS['SOBE']->browser->act,
+                                       'mode' => $elementBrowser->mode,
+                                       'act' => $elementBrowser->act,
                                ),
                        );
                }
index acc5c1f..2e498be 100644 (file)
@@ -29,22 +29,25 @@ use TYPO3\CMS\Recordlist\Browser\ElementBrowser;
 class ElementBrowserController implements \TYPO3\CMS\Core\Http\ControllerInterface {
 
        /**
-        * The mode determines the main kind of output from the element browser.
-        * There are these options for values: rte, db, file, filedrag, wizard.
-        * "rte" will show the link selector for the Rich Text Editor (see main_rte())
-        * "db" will allow you to browse for pages or records in the page tree (for TCEforms, see main_db())
-        * "file"/"filedrag" will allow you to browse for files or folders in the folder mounts (for TCEforms, main_file())
-        * "wizard" will allow you to browse for links (like "rte") which are passed back to TCEforms (see main_rte(1))
+        * The mode determines the main kind of output of the element browser.
+        * There are these options for values:
+        *  - "rte" will show the link selector for the Rich Text Editor (see main_rte())
+        *  - "wizard" will allow you to browse for links (like "rte") which are passed back to FormEngine (see main_rte(TRUE))
+        *  - "db" will allow you to browse for pages or records in the page tree for FormEngine select fields (see main_db())
+        *  - "file"/"filedrag" will allow you to browse for files in the folder mounts for FormEngine file selections (main_file())
+        *  - "folder" will allow you to browse for folders in the folder mounts for FormEngine folder selecitons (see main_folder())
         *
-        * @see main()
         * @var string
         */
        public $mode;
 
        /**
-        * Holds Instance of main browse_links class
-        * needed fo intercommunication between various classes that need access to variables via $GLOBALS['SOBE']
-        * Not the most nice solution but introduced since we don't have another general way to return class-instances or registry for now
+        * Holds an instance of ElementBrowser class or a subclass
+        *
+        * This is needed fo intercommunication between tree classes that
+        * need access to variables via $GLOBALS['SOBE'].
+        * Not the most nice solution but introduced since we don't have
+        * another general way to return class-instances or registry for now
         *
         * @var ElementBrowser
         */
index d617d40..25fc697 100644 (file)
@@ -25,11 +25,7 @@ use TYPO3\CMS\Rtehtmlarea\BrowseLinks;
 class BrowseLinksController extends ElementBrowserController {
 
        /**
-        * @var string
-        */
-       public $button = 'link';
-
-       /**
+        * Typehint needed for code completion
         * @var BrowseLinks
         */
        public $browser;
index e909ad9..70ab68a 100644 (file)
@@ -25,11 +25,7 @@ use TYPO3\CMS\Rtehtmlarea\SelectImage;
 class SelectImageController extends ElementBrowserController {
 
        /**
-        * @var string
-        */
-       public $button = 'image';
-
-       /**
+        * Typehint needed for code completion
         * @var SelectImage
         */
        public $browser;
index 572a02e..664f05f 100644 (file)
@@ -14,12 +14,14 @@ namespace TYPO3\CMS\Rtehtmlarea;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Backend\Tree\View\ElementBrowserFolderTreeView;
+use TYPO3\CMS\Core\Resource\Folder;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
  * RTE class which generates the folder tree.
  */
-class FolderTree extends \TYPO3\CMS\Backend\Tree\View\ElementBrowserFolderTreeView {
+class FolderTree extends ElementBrowserFolderTreeView {
 
        /**
         * Will create and return the HTML code for a browsable tree of folders.
@@ -29,19 +31,21 @@ class FolderTree extends \TYPO3\CMS\Backend\Tree\View\ElementBrowserFolderTreeVi
         */
        public function getBrowsableTree() {
                // TYPO3\CMS\Backend\Controller\FileSystemNavigationFrameController does not set custom parameters on an Ajax expand/collapse request
-               if (!$GLOBALS['SOBE']->browser->editorNo) {
+               /** @var BrowseLinks|SelectImage $elementBrowser */
+               $elementBrowser = $GLOBALS['SOBE']->browser;
+               if (!$elementBrowser->editorNo) {
                        $scopeData = (string)GeneralUtility::_GP('scopeData');
                        $scopeHash = (string)GeneralUtility::_GP('scopeHash');
                        if (!empty($scopeData) && GeneralUtility::hmac($scopeData) === $scopeHash) {
                                $scopeData = unserialize($scopeData);
                                if ($scopeData['browser']['editorNo']) {
-                                       $GLOBALS['SOBE']->browser->editorNo = $scopeData['browser']['editorNo'];
+                                       $elementBrowser->editorNo = $scopeData['browser']['editorNo'];
                                }
                                if ($scopeData['browser']['sys_language_content']) {
-                                       $GLOBALS['SOBE']->browser->sys_language_content = $scopeData['browser']['sys_language_content'];
+                                       $elementBrowser->sys_language_content = $scopeData['browser']['sys_language_content'];
                                }
                                if ($scopeData['browser']['contentTypo3Language']) {
-                                       $GLOBALS['SOBE']->browser->contentTypo3Language = $scopeData['browser']['contentTypo3Language'];
+                                       $elementBrowser->contentTypo3Language = $scopeData['browser']['contentTypo3Language'];
                                }
                        }
                }
@@ -52,18 +56,20 @@ class FolderTree extends \TYPO3\CMS\Backend\Tree\View\ElementBrowserFolderTreeVi
         * Wrapping the title in a link, if applicable.
         *
         * @param string $title Title, ready for output.
-        * @param \TYPO3\CMS\Core\Resource\Folder $folderObject The "record"
+        * @param Folder $folderObject The "record"
         * @return string Wrapping title string.
         */
-       public function wrapTitle($title, \TYPO3\CMS\Core\Resource\Folder $folderObject) {
+       public function wrapTitle($title, Folder $folderObject) {
                if ($this->ext_isLinkable($folderObject)) {
+                       /** @var BrowseLinks|SelectImage $elementBrowser */
+                       $elementBrowser = $GLOBALS['SOBE']->browser;
                        $aOnClick = 'return jumpToUrl(\''
                                . $this->getThisScript()
-                               . 'act=' . $GLOBALS['SOBE']->browser->act
-                               . '&mode=' . $GLOBALS['SOBE']->browser->mode
-                               . '&editorNo=' . $GLOBALS['SOBE']->browser->editorNo
-                               . ($GLOBALS['SOBE']->browser->sys_language_content ? '&sys_language_content=' . $GLOBALS['SOBE']->browser->sys_language_content : '')
-                               . ($GLOBALS['SOBE']->browser->contentTypo3Language ? '&contentTypo3Language=' . $GLOBALS['SOBE']->browser->contentTypo3Language : '')
+                               . 'act=' . $elementBrowser->act
+                               . '&mode=' . $elementBrowser->mode
+                               . '&editorNo=' . $elementBrowser->editorNo
+                               . ($elementBrowser->sys_language_content ? '&sys_language_content=' . $elementBrowser->sys_language_content : '')
+                               . ($elementBrowser->contentTypo3Language ? '&contentTypo3Language=' . $elementBrowser->contentTypo3Language : '')
                                . '&expandFolder=' . $this->getJumpToParam($folderObject)
                                . '\');';
                        return '<a href="#" onclick="' . htmlspecialchars($aOnClick) . '">' . $title . '</a>';
@@ -83,23 +89,25 @@ class FolderTree extends \TYPO3\CMS\Backend\Tree\View\ElementBrowserFolderTreeVi
         */
        public function PMiconATagWrap($icon, $cmd, $isExpand = TRUE) {
                if (empty($this->scope)) {
+                       /** @var BrowseLinks|SelectImage $elementBrowser */
+                       $elementBrowser = $GLOBALS['SOBE']->browser;
                        $this->scope = array(
                                'class' => get_class($this),
                                'script' => $this->thisScript,
                                'ext_noTempRecyclerDirs' => $this->ext_noTempRecyclerDirs,
                                'browser' => array(
-                                       'mode' => $GLOBALS['SOBE']->browser->mode,
-                                       'act' => $GLOBALS['SOBE']->browser->act
+                                       'mode' => $elementBrowser->mode,
+                                       'act' => $elementBrowser->act
                                )
                        );
-                       if ($GLOBALS['SOBE']->browser->editorNo) {
-                               $this->scope['browser']['editorNo'] = $GLOBALS['SOBE']->browser->editorNo;
+                       if ($elementBrowser->editorNo) {
+                               $this->scope['browser']['editorNo'] = $elementBrowser->editorNo;
                        }
-                       if ($GLOBALS['SOBE']->browser->sys_language_content) {
-                               $this->scope['browser']['sys_language_content'] = $GLOBALS['SOBE']->browser->sys_language_content;
+                       if ($elementBrowser->sys_language_content) {
+                               $this->scope['browser']['sys_language_content'] = $elementBrowser->sys_language_content;
                        }
-                       if ($GLOBALS['SOBE']->browser->contentTypo3Language) {
-                               $this->scope['browser']['contentTypo3Language'] = $GLOBALS['SOBE']->browser->contentTypo3Language;
+                       if ($elementBrowser->contentTypo3Language) {
+                               $this->scope['browser']['contentTypo3Language'] = $elementBrowser->contentTypo3Language;
                        }
                }
                return parent::PMiconATagWrap($icon, $cmd, $isExpand);