+2010-11-02 Xavier Perseguers <typo3@perseguers.ch>
+
+ * Added feature #16177: Add DB structure update pre-processing hook in EM
+
2010-11-01 Steffen Gebert <steffen@steffen-gebert.de>
* Fixed bug #11957: Close Button is at the wrong place when editing a file in filelist (Thanks to Simon Schaufelberger)
<?php
$emClassesPath = PATH_site . 'typo3/sysext/em/classes/';
+$emInterfacesPath = PATH_site . 'typo3/sysext/em/interfaces/';
return array(
'sc_mod_tools_em_index' => $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
--- /dev/null
+<?php
+/***************************************************************
+* Copyright notice
+*
+* (c) 2010 Xavier Perseguers <typo3@perseguers.ch>
+* 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 <typo3@perseguers.ch>
+ * @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
$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');
$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);