From ba60545056f23fcc1d58f243b8e33a648ab63c4b Mon Sep 17 00:00:00 2001 From: Xavier Perseguers Date: Tue, 2 Nov 2010 10:32:53 +0000 Subject: [PATCH] Added feature #16177: Add DB structure update pre-processing hook in EM git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@9241 709f56b5-9817-0410-a4d7-c38de5d9e867 --- ChangeLog | 4 ++ typo3/sysext/em/ext_autoload.php | 4 +- ...face.em_index_checkdatabaseupdateshook.php | 54 +++++++++++++++++++ typo3/sysext/em/mod1/class.em_index.php | 34 +++++++++--- 4 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 typo3/sysext/em/interfaces/interface.em_index_checkdatabaseupdateshook.php diff --git a/ChangeLog b/ChangeLog index 881533cc3ea..ba738eef3db 100755 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2010-11-02 Xavier Perseguers + + * Added feature #16177: Add DB structure update pre-processing hook in EM + 2010-11-01 Steffen Gebert * Fixed bug #11957: Close Button is at the wrong place when editing a file in filelist (Thanks to Simon Schaufelberger) diff --git a/typo3/sysext/em/ext_autoload.php b/typo3/sysext/em/ext_autoload.php index ab821f318e4..6d91786e129 100644 --- a/typo3/sysext/em/ext_autoload.php +++ b/typo3/sysext/em/ext_autoload.php @@ -1,8 +1,10 @@ $emClassesPath . '../mod1/class.em_index.php', 'em_connection_exception' => $emClassesPath . 'exception/class.em_connection_exception.php', 'em_tasks_updateextensionlist' => $emClassesPath . 'tasks/class.em_tasks_updateextensionlist.php', + 'em_index_checkdatabaseupdateshook' => $emInterfacesPath . 'interface.em_index_checkdatabaseupdateshook.php', ); -?> +?> \ No newline at end of file diff --git a/typo3/sysext/em/interfaces/interface.em_index_checkdatabaseupdateshook.php b/typo3/sysext/em/interfaces/interface.em_index_checkdatabaseupdateshook.php new file mode 100644 index 00000000000..196f29be080 --- /dev/null +++ b/typo3/sysext/em/interfaces/interface.em_index_checkdatabaseupdateshook.php @@ -0,0 +1,54 @@ + +* 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! +***************************************************************/ + +/** + * Interface for hook in SC_mod_tools_em_index::checkDBupdates. + * + * @author Xavier Perseguers + * @package TYPO3 + * @subpackage em + */ +interface em_index_checkDatabaseUpdatesHook { + + /** + * Hook that allows pre-processing of database structure modifications. + * The hook implementation may return a user form that will temporarily + * replace the standard database update form. This allows additional + * operations to be performed before the database structure gets updated. + * + * @param string $extKey: Extension key + * @param array $extInfo: Extension information array + * @param array $diff: Database differences + * @param t3lib_install $instObj: Instance of the installer + * @param SC_mod_tools_em_index $parent: The calling parent object + * @return string Either empty string or a pre-processing user form + */ + public function preProcessDatabaseUpdates($extKey, array $extInfo, array $diff, t3lib_install $instObj, SC_mod_tools_em_index $parent); + +} + +?> \ No newline at end of file diff --git a/typo3/sysext/em/mod1/class.em_index.php b/typo3/sysext/em/mod1/class.em_index.php index 2ce7565707c..9132852169d 100644 --- a/typo3/sysext/em/mod1/class.em_index.php +++ b/typo3/sysext/em/mod1/class.em_index.php @@ -5525,6 +5525,7 @@ $EM_CONF[$_EXTKEY] = '.$this->arrayToCode($EM_CONF, 0).'; $dbStatus = array(); // Updating tables and fields? + $showUpdateStatements = TRUE; if (is_array($extInfo['files']) && in_array('ext_tables.sql', $extInfo['files'])) { $fileContent = t3lib_div::getUrl($this->getExtPath($extKey,$extInfo['type']).'ext_tables.sql'); @@ -5543,18 +5544,37 @@ $EM_CONF[$_EXTKEY] = '.$this->arrayToCode($EM_CONF, 0).'; $instObj->performUpdateQueries($update_statements['change'],$instObj->INSTALL['database_update']); $instObj->performUpdateQueries($update_statements['create_table'],$instObj->INSTALL['database_update']); } else { - $content .= $instObj->generateUpdateDatabaseForm_checkboxes( - $update_statements['add'], $GLOBALS['LANG']->getLL('checkDBupdates_add_fields')); - $content .= $instObj->generateUpdateDatabaseForm_checkboxes( - $update_statements['change'], $GLOBALS['LANG']->getLL('checkDBupdates_changing_fields'), 1, 0, $update_statements['change_currentValue']); - $content .= $instObj->generateUpdateDatabaseForm_checkboxes( - $update_statements['create_table'], $GLOBALS['LANG']->getLL('checkDBupdates_add_tables')); + if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/mod/tools/em/index.php']['checkDBupdates'])) { + foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/mod/tools/em/index.php']['checkDBupdates'] as $classData) { + $hookObject = t3lib_div::getUserObj($classData); + + if (!($hookObject instanceof em_index_checkDatabaseUpdatesHook)) { + throw new UnexpectedValueException('$hookObject must implement interface em_index_checkDatabaseUpdatesHook', 1288418476); + } + + /* @var $hookObject em_index_checkDatabaseUpdatesHook */ + $preprocessContent = $hookObject->preProcessDatabaseUpdates($extKey, $extInfo, $diff, $instObj, $this); + if ($preprocessContent) { + $content .= $preprocessContent; + $showUpdateStatements = FALSE; + break; + } + } + } + if ($showUpdateStatements) { + $content .= $instObj->generateUpdateDatabaseForm_checkboxes( + $update_statements['add'], $GLOBALS['LANG']->getLL('checkDBupdates_add_fields')); + $content .= $instObj->generateUpdateDatabaseForm_checkboxes( + $update_statements['change'], $GLOBALS['LANG']->getLL('checkDBupdates_changing_fields'), 1, 0, $update_statements['change_currentValue']); + $content .= $instObj->generateUpdateDatabaseForm_checkboxes( + $update_statements['create_table'], $GLOBALS['LANG']->getLL('checkDBupdates_add_tables')); + } } } } // Importing static tables? - if (is_array($extInfo['files']) && in_array('ext_tables_static+adt.sql',$extInfo['files'])) { + if ($showUpdateStatements && is_array($extInfo['files']) && in_array('ext_tables_static+adt.sql',$extInfo['files'])) { $fileContent = t3lib_div::getUrl($this->getExtPath($extKey,$extInfo['type']).'ext_tables_static+adt.sql'); $statements = $instObj->getStatementArray($fileContent,1); -- 2.20.1