[FEATURE] New token for custom post configuraton in localconf.php
authorTobias Liebig <tobias.liebig@typo3.org>
Sat, 14 Apr 2012 18:28:10 +0000 (20:28 +0200)
committerTolleiv Nietsch <tolleiv.nietsch@typo3.org>
Sun, 22 Apr 2012 13:07:01 +0000 (15:07 +0200)
Some setups require to add a require() statement at the end of the
localconf.php to be able to override the configurations. This patch
introduces a new "edit end token" similar to the existing
"edit token". Only the lines between the "edit token" and the
"edit end token" will be updated by the install tool. The code above
and below that will stay untouched.

Change-Id: I87877503fe71196a7d099f96fb9f4a3018624bd5
Resolves: #24037
Releases: 6.0
Reviewed-on: http://review.typo3.org/10492
Reviewed-by: Tolleiv Nietsch
Tested-by: Tolleiv Nietsch
t3lib/class.t3lib_install.php

index 9883ac7..53eb2ef 100644 (file)
@@ -46,7 +46,8 @@ class t3lib_install {
 
        var $dbUpdateCheckboxPrefix = 'TYPO3_INSTALL[database_update]'; // Prefix for checkbox fields when updating database.
        var $localconf_addLinesOnly = 0; // If this is set, modifications to localconf.php is done by adding new lines to the array only. If unset, existing values are recognized and changed.
-       var $localconf_editPointToken = 'INSTALL SCRIPT EDIT POINT TOKEN - all lines after this points may be changed by the install script!'; // If set and addLinesOnly is disabled, lines will be change only if they are after this token (on a single line!) in the file
+       protected $localconf_startEditPointToken = '## INSTALL SCRIPT EDIT POINT TOKEN - all lines after this points may be changed by the install script!'; // If set and addLinesOnly is disabled, lines will be change only if they are after this token (on a single line!) in the file
+       protected $localconf_endEditPointToken = '## INSTALL SCRIPT EDIT END POINT TOKEN - all lines before this points may be changed by the install script!';
        var $allowUpdateLocalConf = 0; // If TRUE, this class will allow the user to update the localconf.php file. Is set TRUE in the init.php file.
        var $backPath = '../'; // Backpath (used for icons etc.)
 
@@ -92,10 +93,11 @@ class t3lib_install {
                        // Initialize:
                $found = 0;
                $this->touchedLine = '';
-               $commentKey = '## ';
-               $inArray = in_array($commentKey . $this->localconf_editPointToken, $line_array);
-               $tokenSet = ($this->localconf_editPointToken && !$inArray); // Flag is set if the token should be set but is not yet...
-               $stopAtToken = ($this->localconf_editPointToken && $inArray);
+               $inArray = in_array($this->localconf_startEditPointToken, $line_array);
+               $tokenSet = ($this->localconf_startEditPointToken && !$inArray); // Flag is set if the token should be set but is not yet...
+               $stopAtToken = ($this->localconf_startEditPointToken && $inArray);
+               $hasEndToken = in_array($this->localconf_endEditPointToken, $line_array);
+               $respectEndToken = $hasEndToken;
                $comment = ' Modified or inserted by ' . $this->updateIdentity . '.';
                $replace = array('["', '"]');
                $search = array('[\'', '\']');
@@ -106,7 +108,14 @@ class t3lib_install {
                        $line_array = array_reverse($line_array);
                        foreach ($line_array as $k => $v) {
                                $v2 = trim($v);
-                               if ($stopAtToken && !strcmp($v2, $commentKey . $this->localconf_editPointToken)) {
+                               if ($respectEndToken) {
+                                       if (strcmp($v2, $this->localconf_endEditPointToken)) {
+                                               $respectEndToken = FALSE;
+                                       } else {
+                                               continue;
+                                       }
+                               }
+                               if ($stopAtToken && !strcmp($v2, $this->localconf_startEditPointToken)) {
                                        break;
                                } // If stopAtToken and token found, break out of the loop..
                                if (!strcmp(substr($v2, 0, strlen($variable . ' ')), $variable . ' ')) {
@@ -144,13 +153,17 @@ class t3lib_install {
                }
                if (!$found) {
                        if ($tokenSet) {
-                               $line_array[] = $commentKey . $this->localconf_editPointToken;
+                               $line_array[] = $this->localconf_startEditPointToken;
                                $line_array[] = '';
                        }
                        if ($quoteValue) {
                                $value = '\'' . $this->slashValueForSingleDashes($value) . '\'';
                        }
                        $line_array[] = $variable . " = " . $value . "; // " . $comment;
+                       if (!$hasEndToken) {
+                               $line_array[] = '';
+                               $line_array[] = $this->localconf_endEditPointToken;
+                       }
                        $this->touchedLine = -1;
                }
                if ($variable == '$typo_db_password') {
@@ -172,9 +185,9 @@ class t3lib_install {
         */
        public function setArrayValueInLocalconfFile(array &$lines, $variable, array $value) {
                $commentKey = '## ';
-               $inArray = in_array($commentKey . $this->localconf_editPointToken, $lines);
-               $tokenSet = $this->localconf_editPointToken && !$inArray; // Flag is set if the token should be set but is not yet
-               $stopAtToken = $this->localconf_editPointToken && $inArray;
+               $inArray = in_array($commentKey . $this->localconf_startEditPointToken, $lines);
+               $tokenSet = $this->localconf_startEditPointToken && !$inArray; // Flag is set if the token should be set but is not yet
+               $stopAtToken = $this->localconf_startEditPointToken && $inArray;
                $comment = 'Modified or inserted by ' . $this->updateIdentity . '.';
                $format = "%s = %s;\t// " . $comment;
 
@@ -183,7 +196,7 @@ class t3lib_install {
                if (!($this->localconf_addLinesOnly || $tokenSet)) {
                        for ($i = count($lines) - 1; $i > 0; $i--) {
                                $line = trim($lines[$i]);
-                               if ($stopAtToken && t3lib_div::isFirstPartOfStr($line, $this->localconf_editPointToken)) {
+                               if ($stopAtToken && t3lib_div::isFirstPartOfStr($line, $this->localconf_startEditPointToken)) {
                                        break;
                                }
                                if (t3lib_div::isFirstPartOfStr($line, '?>')) {
@@ -488,4 +501,4 @@ if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLA
        include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_install.php']);
 }
 
-?>
\ No newline at end of file
+?>