Added Feature #11067: Configurable $_GET params for default404Page fetching
authorchristian.futterlieb <christian.futterlieb@735d13b6-9817-0410-8766-e36946ffe9aa>
Wed, 16 Feb 2011 15:25:51 +0000 (15:25 +0000)
committerchristian.futterlieb <christian.futterlieb@735d13b6-9817-0410-8766-e36946ffe9aa>
Wed, 16 Feb 2011 15:25:51 +0000 (15:25 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Extensions/pagenotfoundehandling/trunk@43703 735d13b6-9817-0410-8766-e36946ffe9aa

class.tx_pagenotfoundhandling.php
ext_conf_template.txt
locallang_db.xml

index 4a6fb7c..e83616e 100644 (file)
@@ -125,6 +125,25 @@ class tx_pagenotfoundhandling
      */
     protected $_forbiddenHeader = '';
 
+    /**
+     * Additional _GET params
+     *
+     * These will be appended to the URL when fetching default404Page
+     *
+     * @var array
+     */
+    protected $_additional404GetParams = array();
+
+    /**
+     * Additional 403 _GET params
+     *
+     * These will be appended to the URL when fetching default404Page and
+     * $_forbiddenError is true
+     *
+     * @var array
+     */
+    protected $_additional403GetParams = array();
+
        /**
         * Main method called through tslib_fe::pageErrorHandler()
         *
@@ -293,6 +312,14 @@ class tx_pagenotfoundhandling
             $this->_defaultTemplateFile = (string) $conf['defaultTemplateFile'];
         }
 
+        if(isset($conf['additional404GetParams'])) {
+            $this->_addAdditionalGetParams($conf['additional404GetParams']);
+        }
+
+        if(isset($conf['additional403GetParams'])) {
+            $this->_addAdditional403GetParams($conf['additional403GetParams']);
+        }
+
         if(isset($conf['ignoreLanguage'])) {
             $this->_ignoreLanguage = (bool) $conf['ignoreLanguage'];
         }
@@ -346,14 +373,22 @@ class tx_pagenotfoundhandling
                        if(count($pageRow) === 1) {
                                $pageRow = current($pageRow);
                                $url = t3lib_div::locationHeaderUrl('/');
-                               $url .= 'index.php?id=' . $this->_default404Page;
-
-                               $url .= '&loopPrevention=1';
+                               $url .= 'index.php?id=' . $this->_default404Page . '&loopPrevention=1';
 
                                if(!empty($this->_forceLanguage)) {
                                        $url .= '&L=' . $this->_forceLanguage;
                                }
 
+                               if($this->_isForbiddenError) {
+                    if(count($this->_additional403GetParams)) {
+                        $url .= '&' . implode('&', $this->_additional403GetParams);
+                    }
+                               } else {
+                               if(count($this->_additional404GetParams)) {
+                                   $url .= '&' . implode('&', $this->_additional404GetParams);
+                               }
+                               }
+
                 $headers = array(
                     'User-agent: ' . t3lib_div::getIndpEnv('HTTP_USER_AGENT'),
                     'Referer: ' . t3lib_div::getIndpEnv('TYPO3_REQUEST_URL')
@@ -424,6 +459,42 @@ class tx_pagenotfoundhandling
                 break;
         }
     }
+
+    /**
+     * Add additional _GET params
+     *
+     * @param string $params  (works like additionalParams in typolink)
+     * @return void
+     */
+    protected function _addAdditionalGetParams($params)
+    {
+        $params = $this->_normalizeGetParams($params);
+        $this->_additional404GetParams = array_merge($this->_additional404GetParams, t3lib_div::trimExplode('&', $params, true));
+    }
+
+    /**
+     * Add additional 403 _GET params
+     *
+     * @param string $params  (works like additionalParams in typolink)
+     * @return void
+     */
+    protected function _addAdditional403GetParams($params)
+    {
+        $params = $this->_normalizeGetParams($params);
+        $this->_additional403GetParams = array_merge($this->_additional403GetParams, t3lib_div::trimExplode('&', $params, true));
+    }
+
+    /**
+     * Normalize the _GET params for using in the page_fetching of _getHtml()
+     *
+     * @param string $params
+     * @return void
+     */
+    protected function _normalizeGetParams($params)
+    {
+        // strip out params that will be generated in _getHtml()
+        return preg_replace('/&?(id|loopPrevention|' . $this->_languageParam . ')=[^&]*/', '', $params);
+    }
 }
 
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/pagenotfoundhandling/class.tx_pagenotfoundhandling.php']) {
index 04e69e5..0e29a27 100644 (file)
@@ -4,12 +4,18 @@ default404Page = 0
 # cat=basic/enable; type=string; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.defaultTemplateFile
 defaultTemplateFile = EXT:pagenotfoundhandling/res/defaultTemplate.tmpl
 
+# cat=basic/enable; type=string; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.additional404GetParams
+additional404GetParams = 
+
 # cat=basic/enable; type=int+; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.default403Page
 default403Page = 0
 
 # cat=basic/enable; type=string; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.default403TemplateFile
 default403TemplateFile = 
 
+# cat=basic/enable; type=string; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.additional403GetParams
+additional403GetParams = 
+
 # cat=basic/enable; type=options[Default (Do not send special headers)=0, HTTP/1.1 400 Bad Request=1, HTTP/1.1 401 Unauthorized=2, HTTP/1.1 402 Payment Required=3, HTTP/1.1 403 Forbidden=4]; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.default403Header
 default403Header = 4
 
index c2fa034..d8ba4be 100644 (file)
             
             <label index="pagenotfoundhandling.constants.forceLanguage">Force language: This language is used to fetch default404Page and/or marker substitution in defaultTemplateFile. Default: ''</label>
             <label index="pagenotfoundhandling.constants.default404Page">Default 404 Page:An uid of a page out of the page tree that will be returned as 404 page. '0' disables this feature. Default: '0'.</label>
+            <label index="pagenotfoundhandling.constants.additional404GetParams">Additional GET params:These will be appended to the URL when fetching default404Page. Default: ''</label>
             <label index="pagenotfoundhandling.constants.defaultTemplateFile">Default 404 template file: This will be rendered if no default 404 page is given. Default: 'EXT:pagenotfoundhandling/res/defaultTemplate.tmpl'</label>
             <label index="pagenotfoundhandling.constants.default403Page">Default 403 (Forbidden) page:Behaves like 'default404Page', but activates a separate handling for requests on protected pages. Leave empty to disable the feature. Default: '0'</label>
             <label index="pagenotfoundhandling.constants.default403TemplateFile">Default 403 (Forbidden) template file:Behaves like 'defaultTemplateFile', but activates a separate handling for requests on protected pages. Leave empty to disable the feature. Default: ''</label>
+            <label index="pagenotfoundhandling.constants.additional403GetParams">Additional 403 GET params:These will be appended to the URL when fetching default404Page/default403Page in case of access restriction. Default: ''</label>
             <label index="pagenotfoundhandling.constants.default403Header">HTTP Forbidden header. Sent when a pages is not found because of access restrictions. Default 'HTTP/1.1 403 Forbidden'</label>
             <label index="pagenotfoundhandling.constants.disableDomainConfig">Disable per-domain configuration:Domain dependent configurations will be ignored. The TCA of sys_domains will not be extended. Default: '0'</label>
             <label index="pagenotfoundhandling.constants.ignoreLanguage">Ignore requested language: The language parameter in the request URL will be ignored, default language will be used. Default: '0'</label>
             
             <label index="pagenotfoundhandling.constants.forceLanguage">Sprache erzwingen: Diese Sprache wird für die Ersetzung der Marker verwendet. Standard: ''</label>
             <label index="pagenotfoundhandling.constants.default404Page">Standard 404 Seite:Die Uid einer Seite im TYPO3 Seitenbaum, die als 404 Seite ausgegeben werden soll. '0' deaktiviert diese Funktion. Standard: '0'.</label>
+            <label index="pagenotfoundhandling.constants.additional404GetParams">Zusätzliche GET Parameter:Diese werden beim Holen der default404Page verwendet. Standard: ''</label>
             <label index="pagenotfoundhandling.constants.defaultTemplateFile">Standard 404 Vorlage: Diese wird gerendert, wenn keine Standard 404 seite ausgewählt oder verfügbar ist. Standard: 'EXT:pagenotfoundhandling/res/defaultTemplate.tmpl'</label>
             <label index="pagenotfoundhandling.constants.default403Page">Standard 403 (Forbidden) Seite:Funktioniert wie 'default404Page', aktiviert aber eine separate Behandlung beim Zugriff auf geschützte Seiten. Leer lassen, um die Funktion zu deaktivieren. Standard: '0'</label>
+            <label index="pagenotfoundhandling.constants.additional403GetParams">Zusätzliche 403 GET Parameter: Diese werden beim Holen der default404Page/default403Page verwendet, wenn eine Seite wegen Zugriffseinschränkungen nicht gefunden wurde. Standard: ''</label>
             <label index="pagenotfoundhandling.constants.default403TemplateFile">Default 403 (Forbidden) Vorlage:Funktioniert wie 'defaultTemplateFile', aktiviert aber eine separate Behandlung beim Zugriff auf geschützte Seiten. Leer lassen, um die Funktion zu deaktivieren. Standard: ''</label>
             <label index="pagenotfoundhandling.constants.default403Header">HTTP Forbidden header: Wird gesendet, wenn eine Seite wegen Zugriffseinschränkungen nicht gefunden wurde. Standard 'HTTP/1.1 403 Forbidden'</label>
             <label index="pagenotfoundhandling.constants.disableDomainConfig">Konfiguration pro Domain deaktivieren:Domain abhängige Konfigurationen werden ignoriert. Das TCA von sys_domain wird nicht erweitert. Standard: '0'</label>