[TASK] Make ViewHelpers compilable in ext:indexed_search 12/39212/4
authorWouter Wolters <typo3@wouterwolters.nl>
Sat, 2 May 2015 19:40:02 +0000 (21:40 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Sun, 3 May 2015 11:00:11 +0000 (13:00 +0200)
Resolves: #66759
Releases: master
Change-Id: I39087794f7ed18d12514f6331dfba6a9767188d7
Reviewed-on: http://review.typo3.org/39212
Reviewed-by: Frank Nägler <typo3@naegler.net>
Tested-by: Frank Nägler <typo3@naegler.net>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/indexed_search/Classes/ViewHelpers/Format/DateTimeViewHelper.php
typo3/sysext/indexed_search/Classes/ViewHelpers/Format/FlagValueViewHelper.php
typo3/sysext/indexed_search/Classes/ViewHelpers/Format/GroupListViewHelper.php
typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingResultsViewHelper.php
typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingViewHelper.php

index 5400fed..7a36896 100644 (file)
@@ -16,11 +16,13 @@ namespace TYPO3\CMS\IndexedSearch\ViewHelpers\Format;
 
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
 
 use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
+use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface;
+use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface;
 
 /**
  * DateTime viewhelper
  */
 
 /**
  * DateTime viewhelper
  */
-class DateTimeViewHelper extends AbstractViewHelper {
+class DateTimeViewHelper extends AbstractViewHelper implements CompilableInterface {
 
 
        /**
 
 
        /**
@@ -29,7 +31,22 @@ class DateTimeViewHelper extends AbstractViewHelper {
         * @return string
         */
        public function render() {
         * @return string
         */
        public function render() {
-               return htmlspecialchars(BackendUtility::datetime($this->renderChildren()));
+               return self::renderStatic(
+                       array(),
+                       $this->buildRenderChildrenClosure(),
+                       $this->renderingContext
+               );
+       }
+
+       /**
+        * @param array $arguments
+        * @param callable $renderChildrenClosure
+        * @param RenderingContextInterface $renderingContext
+        *
+        * @return string
+        */
+       static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) {
+               return htmlspecialchars(BackendUtility::datetime($renderChildrenClosure()));
        }
 
 }
        }
 
 }
index 52624ef..735739c 100644 (file)
@@ -14,10 +14,14 @@ namespace TYPO3\CMS\IndexedSearch\ViewHelpers\Format;
  * The TYPO3 project - inspiring people to share!
  */
 
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
+use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface;
+use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface;
+
 /**
  * FlagValue viewhelper
  */
 /**
  * FlagValue viewhelper
  */
-class FlagValueViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+class FlagValueViewHelper extends AbstractViewHelper implements CompilableInterface {
 
        /**
         * Render additional flag information
 
        /**
         * Render additional flag information
@@ -26,7 +30,25 @@ class FlagValueViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewH
         * @return string
         */
        public function render($flags) {
         * @return string
         */
        public function render($flags) {
-               $flags = (int)$flags;
+               return self::renderStatic(
+                       array(
+                               'flags' => $flags,
+                       ),
+                       $this->buildRenderChildrenClosure(),
+                       $this->renderingContext
+               );
+       }
+
+       /**
+        * @param array $arguments
+        * @param callable $renderChildrenClosure
+        * @param RenderingContextInterface $renderingContext
+        *
+        * @return string
+        */
+       static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) {
+               $flags = (int)$arguments['flags'];
+
                if ($flags > 0) {
                        $content = ($flags & 128 ? '<title>' : '')
                                . ($flags & 64 ? '<meta/keywords>' : '')
                if ($flags > 0) {
                        $content = ($flags & 128 ? '<title>' : '')
                                . ($flags & 64 ? '<meta/keywords>' : '')
index ea2c26f..e3b3348 100644 (file)
@@ -15,11 +15,13 @@ namespace TYPO3\CMS\IndexedSearch\ViewHelpers\Format;
  */
 
 use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
  */
 
 use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
+use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface;
+use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface;
 
 /**
  * Group list viewhelper
  */
 
 /**
  * Group list viewhelper
  */
-class GroupListViewHelper extends AbstractViewHelper {
+class GroupListViewHelper extends AbstractViewHelper implements CompilableInterface {
 
        /**
         * Render the given group information as string
 
        /**
         * Render the given group information as string
@@ -28,6 +30,25 @@ class GroupListViewHelper extends AbstractViewHelper {
         * @return string
         */
        public function render(array $groups = array()) {
         * @return string
         */
        public function render(array $groups = array()) {
+               return self::renderStatic(
+                       array(
+                               'groups' => $groups,
+                       ),
+                       $this->buildRenderChildrenClosure(),
+                       $this->renderingContext
+               );
+       }
+
+       /**
+        * @param array $arguments
+        * @param callable $renderChildrenClosure
+        * @param RenderingContextInterface $renderingContext
+        *
+        * @return string
+        */
+       static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) {
+               $groups = $arguments['groups'];
+
                $str = array();
                foreach ($groups as $row) {
                        $str[] = $row['gr_list'] === '0,-1' ? 'NL' : $row['gr_list'];
                $str = array();
                foreach ($groups as $row) {
                        $str[] = $row['gr_list'] === '0,-1' ? 'NL' : $row['gr_list'];
index 3946bc7..d1331c9 100644 (file)
@@ -14,13 +14,17 @@ namespace TYPO3\CMS\IndexedSearch\ViewHelpers;
  * The TYPO3 project - inspiring people to share!
  */
 
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
+use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface;
+use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface;
+
 /**
  * renders the header of the results page
  *
  * @author Benjamin Mack <benni@typo3.org>
  * @internal
  */
 /**
  * renders the header of the results page
  *
  * @author Benjamin Mack <benni@typo3.org>
  * @internal
  */
-class PageBrowsingResultsViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+class PageBrowsingResultsViewHelper extends AbstractViewHelper implements CompilableInterface {
 
        /**
         * main render function
 
        /**
         * main render function
@@ -31,11 +35,33 @@ class PageBrowsingResultsViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\Abs
         * @return string the content
         */
        public function render($numberOfResults, $resultsPerPage, $currentPage = 1) {
         * @return string the content
         */
        public function render($numberOfResults, $resultsPerPage, $currentPage = 1) {
+               return self::renderStatic(
+                       array(
+                               'numberOfResults' => $numberOfResults,
+                               'resultsPerPage' => $resultsPerPage,
+                               'currentPage' => $currentPage,
+                       ),
+                       $this->buildRenderChildrenClosure(),
+                       $this->renderingContext
+               );
+       }
+
+       /**
+        * @param array $arguments
+        * @param callable $renderChildrenClosure
+        * @param RenderingContextInterface $renderingContext
+        *
+        * @return string
+        */
+       static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) {
+               $numberOfResults = $arguments['numberOfResults'];
+               $resultsPerPage = $arguments['resultsPerPage'];
+               $currentPage = $arguments['currentPage'];
+
                $firstResultOnPage = $currentPage * $resultsPerPage + 1;
                $lastResultOnPage = $currentPage * $resultsPerPage + $resultsPerPage;
                $label = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('displayResults', 'indexed_search');
                $firstResultOnPage = $currentPage * $resultsPerPage + 1;
                $lastResultOnPage = $currentPage * $resultsPerPage + $resultsPerPage;
                $label = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('displayResults', 'indexed_search');
-               $content = sprintf($label, $firstResultOnPage, min(array($numberOfResults, $lastResultOnPage)), $numberOfResults);
-               return $content;
+               return sprintf($label, $firstResultOnPage, min(array($numberOfResults, $lastResultOnPage)), $numberOfResults);
        }
 
 }
        }
 
 }
index 08670c4..f60c19e 100644 (file)
@@ -14,6 +14,13 @@ namespace TYPO3\CMS\IndexedSearch\ViewHelpers;
  * The TYPO3 project - inspiring people to share!
  */
 
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Core\Utility\MathUtility;
+use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
+use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface;
+use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
+use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface;
+
 /**
  * Page browser for indexed search, and only useful here, as the
  * regular pagebrowser
 /**
  * Page browser for indexed search, and only useful here, as the
  * regular pagebrowser
@@ -23,12 +30,12 @@ namespace TYPO3\CMS\IndexedSearch\ViewHelpers;
  * @author Benjamin Mack <benni@typo3.org>
  * @internal
  */
  * @author Benjamin Mack <benni@typo3.org>
  * @internal
  */
-class PageBrowsingViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+class PageBrowsingViewHelper extends AbstractViewHelper implements CompilableInterface {
 
        /**
         * @var string
         */
 
        /**
         * @var string
         */
-       protected $prefixId = 'tx_indexedsearch';
+       static protected $prefixId = 'tx_indexedsearch';
 
        /**
         * Main render function
 
        /**
         * Main render function
@@ -41,6 +48,33 @@ class PageBrowsingViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractVi
         * @return string The content
         */
        public function render($maximumNumberOfResultPages, $numberOfResults, $resultsPerPage, $currentPage = 0, $freeIndexUid = NULL) {
         * @return string The content
         */
        public function render($maximumNumberOfResultPages, $numberOfResults, $resultsPerPage, $currentPage = 0, $freeIndexUid = NULL) {
+               return self::renderStatic(
+                       array(
+                               'maximumNumberOfResultPages' => $maximumNumberOfResultPages,
+                               'numberOfResults' => $numberOfResults,
+                               'resultsPerPage' => $resultsPerPage,
+                               'currentPage' => $currentPage,
+                               'freeIndexUid' => $freeIndexUid,
+                       ),
+                       $this->buildRenderChildrenClosure(),
+                       $this->renderingContext
+               );
+       }
+
+       /**
+        * @param array $arguments
+        * @param callable $renderChildrenClosure
+        * @param RenderingContextInterface $renderingContext
+        *
+        * @return string
+        */
+       static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) {
+               $maximumNumberOfResultPages = $arguments['maximumNumberOfResultPages'];
+               $numberOfResults = $arguments['numberOfResults'];
+               $resultsPerPage = $arguments['resultsPerPage'];
+               $currentPage = $arguments['currentPage'];
+               $freeIndexUid = $arguments['freeIndexUid'];
+
                if ($resultsPerPage <= 0) {
                        $resultsPerPage = 10;
                }
                if ($resultsPerPage <= 0) {
                        $resultsPerPage = 10;
                }
@@ -51,17 +85,17 @@ class PageBrowsingViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractVi
                }
 
                // Check if $currentPage is in range
                }
 
                // Check if $currentPage is in range
-               $currentPage = \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange($currentPage, 0, $pageCount - 1);
+               $currentPage = MathUtility::forceIntegerInRange($currentPage, 0, $pageCount - 1);
 
                $content = '';
                // prev page
                // show on all pages after the 1st one
                if ($currentPage > 0) {
 
                $content = '';
                // prev page
                // show on all pages after the 1st one
                if ($currentPage > 0) {
-                       $label = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('displayResults.previous', 'IndexedSearch');
-                       $content .= '<li>' . $this->makecurrentPageSelector_link($label, $currentPage - 1, $freeIndexUid) . '</li>';
+                       $label = LocalizationUtility::translate('displayResults.previous', 'IndexedSearch');
+                       $content .= '<li>' . self::makecurrentPageSelector_link($label, $currentPage - 1, $freeIndexUid) . '</li>';
                }
                // Check if $maximumNumberOfResultPages is in range
                }
                // Check if $maximumNumberOfResultPages is in range
-               $maximumNumberOfResultPages = \TYPO3\CMS\Core\Utility\MathUtility::forceIntegerInRange($maximumNumberOfResultPages, 1, $pageCount, 10);
+               $maximumNumberOfResultPages = MathUtility::forceIntegerInRange($maximumNumberOfResultPages, 1, $pageCount, 10);
                // Assume $currentPage is in the middle and calculate the index limits of the result page listing
                $minPage = $currentPage - (int)floor($maximumNumberOfResultPages / 2);
                $maxPage = $minPage + $maximumNumberOfResultPages - 1;
                // Assume $currentPage is in the middle and calculate the index limits of the result page listing
                $minPage = $currentPage - (int)floor($maximumNumberOfResultPages / 2);
                $maxPage = $minPage + $maximumNumberOfResultPages - 1;
@@ -73,10 +107,10 @@ class PageBrowsingViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractVi
                        $minPage -= $maxPage - $pageCount + 1;
                        $maxPage = $pageCount - 1;
                }
                        $minPage -= $maxPage - $pageCount + 1;
                        $maxPage = $pageCount - 1;
                }
-               $pageLabel = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('displayResults.page', 'IndexedSearch');
+               $pageLabel = LocalizationUtility::translate('displayResults.page', 'IndexedSearch');
                for ($a = $minPage; $a <= $maxPage; $a++) {
                        $label = trim($pageLabel . ' ' . ($a + 1));
                for ($a = $minPage; $a <= $maxPage; $a++) {
                        $label = trim($pageLabel . ' ' . ($a + 1));
-                       $label = $this->makecurrentPageSelector_link($label, $a, $freeIndexUid);
+                       $label = self::makecurrentPageSelector_link($label, $a, $freeIndexUid);
                        if ($a === $currentPage) {
                                $content .= '<li class="tx-indexedsearch-browselist-currentPage"><strong>' . $label . '</strong></li>';
                        } else {
                        if ($a === $currentPage) {
                                $content .= '<li class="tx-indexedsearch-browselist-currentPage"><strong>' . $label . '</strong></li>';
                        } else {
@@ -85,8 +119,8 @@ class PageBrowsingViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractVi
                }
                // next link
                if ($currentPage < $pageCount - 1) {
                }
                // next link
                if ($currentPage < $pageCount - 1) {
-                       $label = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('displayResults.next', 'IndexedSearch');
-                       $content .= '<li>' . $this->makecurrentPageSelector_link($label, ($currentPage + 1), $freeIndexUid) . '</li>';
+                       $label = LocalizationUtility::translate('displayResults.next', 'IndexedSearch');
+                       $content .= '<li>' . self::makecurrentPageSelector_link($label, ($currentPage + 1), $freeIndexUid) . '</li>';
                }
                return '<ul class="tx-indexedsearch-browsebox">' . $content . '</ul>';
        }
                }
                return '<ul class="tx-indexedsearch-browsebox">' . $content . '</ul>';
        }
@@ -100,12 +134,13 @@ class PageBrowsingViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractVi
         * @param string $freeIndexUid List of integers pointing to free indexing configurations to search. -1 represents no filtering, 0 represents TYPO3 pages only, any number above zero is a uid of an indexing configuration!
         * @return string Input string wrapped in <a> tag with onclick event attribute set.
         */
         * @param string $freeIndexUid List of integers pointing to free indexing configurations to search. -1 represents no filtering, 0 represents TYPO3 pages only, any number above zero is a uid of an indexing configuration!
         * @return string Input string wrapped in <a> tag with onclick event attribute set.
         */
-       public function makecurrentPageSelector_link($str, $p, $freeIndexUid) {
-               $onclick = 'document.getElementById(\'' . $this->prefixId . '_pointer\').value=\'' . $p . '\';';
+       static protected function makecurrentPageSelector_link($str, $p, $freeIndexUid) {
+               $quotedPrefixId = GeneralUtility::quoteJSvalue(self::$prefixId);
+               $onclick = 'document.getElementById(' . $quotedPrefixId . '_pointer).value=' . GeneralUtility::quoteJSvalue($p) . ';';
                if ($freeIndexUid !== NULL) {
                if ($freeIndexUid !== NULL) {
-                       $onclick .= 'document.getElementById(\'' . $this->prefixId . '_freeIndexUid\').value=\'' . rawurlencode($freeIndexUid) . '\';';
+                       $onclick .= 'document.getElementById(' . $quotedPrefixId . '_freeIndexUid).value=' . GeneralUtility::quoteJSvalue(rawurlencode($freeIndexUid)) . ';';
                }
                }
-               $onclick .= 'document.getElementById(\'' . $this->prefixId . '\').submit();return false;';
+               $onclick .= 'document.getElementById(' . $quotedPrefixId . ').submit();return false;';
                return '<a href="#" onclick="' . htmlspecialchars($onclick) . '">' . $str . '</a>';
        }
 
                return '<a href="#" onclick="' . htmlspecialchars($onclick) . '">' . $str . '</a>';
        }