Added feature #12055: Add missing sysexts to update wizard (thanks to Steffen Kamper)
authorRupert Germann <rupi@gmx.li>
Thu, 1 Oct 2009 13:19:09 +0000 (13:19 +0000)
committerRupert Germann <rupi@gmx.li>
Thu, 1 Oct 2009 13:19:09 +0000 (13:19 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@6092 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
typo3/sysext/install/ext_localconf.php
typo3/sysext/install/mod/class.tx_install.php
typo3/sysext/install/updates/class.tx_coreupdates_installnewsysexts.php [new file with mode: 0644]

index 30850d0..ea076ea 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -19,6 +19,7 @@
        * Follow-up to bug #11357: fixed a parse error in index_re.php
        * Fixed bug #11979: TCEforms suggest doesn't find everything on large sites and is slow  (thanks to Steffen Gebert)
        * Fixed bug #12092 (Follow-up to bug #9355): The errorhandling can make TYPO3 Backend unusable
+       * Added feature #12055: Add missing sysexts to update wizard  (thanks to Steffen Kamper)
 
 2009-09-30  Steffen Kamper  <info@sk-typo3.de>
 
index a5bd1b7..e207b69 100644 (file)
@@ -17,6 +17,9 @@ $TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['mergeAdvancedDoktypeCon
        // add outsourced system extensions since TYPO3 4.3
 $TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['installSystemExtensions'] = 'tx_coreupdates_installsysexts';
 
+       // new system extensions since TYPO3 4.3
+$TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['installNewSystemExtensions'] = 'tx_coreupdates_installnewsysexts';
+
        // change tt_content.imagecols=0 to 1 for proper display in TCEforms since TYPO3 4.3
 $TYPO3_CONF_VARS['SC_OPTIONS']['ext/install']['update']['changeImagecolsValue'] = 'tx_coreupdates_imagecols';
 
index 356d8ab..7787907 100755 (executable)
@@ -150,6 +150,7 @@ require_once(t3lib_extMgm::extPath('install').'updates/class.tx_coreupdates_merg
 require_once(t3lib_extMgm::extPath('install').'updates/class.tx_coreupdates_installsysexts.php');
 require_once(t3lib_extMgm::extPath('install').'updates/class.tx_coreupdates_imagescols.php');
 require_once(t3lib_extMgm::extPath('install').'updates/class.tx_coreupdates_installversioning.php');
+require_once(t3lib_extMgm::extPath('install').'updates/class.tx_coreupdates_installnewsysexts.php');
 
 /**
  * Install Tool module
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_installnewsysexts.php b/typo3/sysext/install/updates/class.tx_coreupdates_installnewsysexts.php
new file mode 100644 (file)
index 0000000..b45644f
--- /dev/null
@@ -0,0 +1,168 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2008-2009 Benjamin Mack <benni@typo3.org>
+*  (c) 2008-2009 Steffen Kamper <info@sk-typo3.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * Contains the update class for adding the system extension "simulate static".
+ *
+ * $Id$
+ *
+ * @author  Benjamin Mack <benni@typo3.org>
+ * @author  Steffen Kamper <info@sk-typo3.de>
+ */
+class tx_coreupdates_installnewsysexts {
+       public $versionNumber;  // version number coming from t3lib_div::int_from_ver()
+       protected $newSystemExtensions = array('recycler', 't3editor', 'reports', 'scheduler');
+
+       /**
+        * parent object
+        *
+        * @var tx_install
+        */
+       public $pObj;
+       public $userInput;      // user input
+
+
+       /**
+        * Checks if an update is needed
+        *
+        * @param       string          &$description: The description for the update
+        * @return      boolean         whether an update is needed (true) or not (false)
+        */
+       public function checkForUpdate(&$description) {
+               $result = false;
+               $description = 'Install the following system extensions that are new in TYPO3 4.3:<br />';
+
+               foreach($this->newSystemExtensions as $_EXTKEY) {
+                       if (!t3lib_extMgm::isLoaded($_EXTKEY)) {
+                               $EM_CONF = FALSE;
+                                       // extension may not been loaded at this point, so we can't use an API function from t3lib_extmgm
+                               require (PATH_site . 'typo3/sysext/' . $_EXTKEY . '/ext_emconf.php');
+                               $description .= '
+                                       <strong>' . $EM_CONF[$_EXTKEY]['title'] . ' [' . $_EXTKEY . ']</strong>
+                                       ' . $EM_CONF[$_EXTKEY]['description'] . '<br />';
+
+                               $result = true;
+                       }
+               }
+
+               return $result;
+       }
+
+       /**
+        * second step: get user input for installing sysextensions
+        *
+        * @param       string          input prefix, all names of form fields have to start with this. Append custom name in [ ... ]
+        * @return      string          HTML output
+        */
+       public function getUserInput($inputPrefix) {
+               $content = '<strong>Install the following system extensions that are new in TYPO3 4.3:</strong><br />';
+               foreach($this->newSystemExtensions as $_EXTKEY) {
+                       if (!t3lib_extMgm::isLoaded($_EXTKEY)) {
+                               $EM_CONF = FALSE;
+                                       // extension may not been loaded at this point, so we can't use an API function from t3lib_extmgm
+                               require (PATH_site . 'typo3/sysext/' . $_EXTKEY . '/ext_emconf.php');
+                               $content .= '
+                                       <input type="checkbox" id="' . $_EXTKEY . '" name="' . $inputPrefix . '[sysext][' . $_EXTKEY . ']" value="1" checked="checked" /><label for="' . $_EXTKEY . '">' . $EM_CONF[$_EXTKEY]['title'] . ' [' . $_EXTKEY . ']</label><br />';
+                       }
+               }
+
+               return $content;
+       }
+
+       /**
+        * Adds the extensions "about", "cshmanual" and "simulatestatic" to the extList in TYPO3_CONF_VARS
+        *
+        * @param       array           &$dbQueries: queries done in this update
+        * @param       mixed           &$customMessages: custom messages
+        * @return      boolean         whether it worked (true) or not (false)
+        */
+       public function performUpdate(&$dbQueries, &$customMessages) {
+               $result = false;
+
+               // Get extension keys that were submitted by the used to be installed and that are valid for this update wizard:
+               if (is_array($this->pObj->INSTALL['update']['installNewSystemExtensions']['sysext'])) {
+                       $extArray = array_intersect(
+                               $this->newSystemExtensions,
+                               array_keys($this->pObj->INSTALL['update']['installNewSystemExtensions']['sysext'])
+                       );
+                       $extList = $this->addExtToList($extArray);
+                       if ($extList) {
+                               $this->writeNewExtensionList($extList);
+                               $result = true;
+                       }
+               }
+
+               return $result;
+       }
+
+
+       /**
+        * Adds extension to extension list and returns new list. If -1 is returned, an error happend.
+        * Does NOT check dependencies yet.
+        *
+        * @param       array           Extension keys to add
+        * @return      string          New list of installed extensions or -1 if error
+        */
+       function addExtToList(array $extKeys) {
+                       // Get list of installed extensions and add this one.
+               $tmpLoadedExt = $GLOBALS['TYPO3_LOADED_EXT'];
+               if (isset($tmpLoadedExt['_CACHEFILE'])) {
+                       unset($tmpLoadedExt['_CACHEFILE']);
+               }
+
+               $listArr = array_keys($tmpLoadedExt);
+               $listArr = array_merge($listArr, $extKeys);
+
+                       // Implode unique list of extensions to load and return:
+               return implode(',', array_unique($listArr));
+       }
+
+
+       /**
+        * Writes the extension list to "localconf.php" file
+        * Removes the temp_CACHED* files before return.
+        *
+        * @param       string          List of extensions
+        * @return      void
+        */
+       protected function writeNewExtensionList($newExtList)   {
+                       // Instance of install tool
+               $instObj = new t3lib_install;
+               $instObj->allowUpdateLocalConf = 1;
+               $instObj->updateIdentity = 'TYPO3 Core Update Manager';
+
+                       // Get lines from localconf file
+               $lines = $instObj->writeToLocalconf_control();
+               $instObj->setValueInLocalconfFile($lines, '$TYPO3_CONF_VARS[\'EXT\'][\'extList\']', $newExtList);
+               $instObj->writeToLocalconf_control($lines);
+
+               $GLOBALS['TYPO3_CONF_VARS']['EXT']['extList'] = $newExtList;
+               t3lib_extMgm::removeCacheFiles();
+       }
+}
+?>
\ No newline at end of file