33 protected $title =
'Ensures the database integrity for File Abstraction records';
42 $description =
'Checks if there are file references that are on the root level. ' .
43 'This could have happened due to a misconfigured previous migration. ' .
44 'This migration will also remove references to tables that no longer exist.';
57 if (isset($updates[
'referenceToMissingTables'])) {
58 foreach ($updates[
'referenceToMissingTables'] as $missingTable) {
59 $deleteQuery =
$GLOBALS[
'TYPO3_DB']->DELETEquery(
61 'tablenames=' .
$GLOBALS[
'TYPO3_DB']->fullQuoteStr($missingTable,
'sys_file_reference')
63 $GLOBALS[
'TYPO3_DB']->sql_query($deleteQuery);
64 $dbQueries[] = $deleteQuery;
67 if (isset($updates[
'improperConnectedFileReferences'])) {
68 foreach ($updates[
'improperConnectedFileReferences'] as $fileReferenceRecord) {
69 if ($fileReferenceRecord[
'newpid'] > 0) {
70 $updateQuery =
$GLOBALS[
'TYPO3_DB']->UPDATEquery(
72 'uid=' . (
int)$fileReferenceRecord[
'uid'],
73 array(
'pid' => $fileReferenceRecord[
'newpid'])
75 $GLOBALS[
'TYPO3_DB']->sql_query($updateQuery);
76 $dbQueries[] = $updateQuery;
89 $requiredUpdates = array();
91 if (count($referenceToMissingTables) > 0) {
92 $requiredUpdates[
'referenceToMissingTables'] = $referenceToMissingTables;
95 if (count($improperConnectedFileReferences) > 0) {
96 $requiredUpdates[
'improperConnectedFileReferences'] = $improperConnectedFileReferences;
98 return $requiredUpdates;
107 $existingTables = array_flip(array_keys(
$GLOBALS[
'TYPO3_DB']->admin_get_tables()));
108 $missingTables = array();
109 $res =
$GLOBALS[
'TYPO3_DB']->exec_SELECTquery(
'DISTINCT tablenames',
'sys_file_reference',
'');
110 while ($row =
$GLOBALS[
'TYPO3_DB']->sql_fetch_assoc($res)) {
111 $thisTablename = $row[
'tablenames'];
112 if (!isset($existingTables[$thisTablename])) {
113 $missingTables[] = $thisTablename;
116 return $missingTables;
125 $fileReferences =
$GLOBALS[
'TYPO3_DB']->exec_SELECTgetRows(
126 'uid, pid, uid_local AS fileuid, uid_foreign AS targetuid, tablenames AS targettable',
127 'sys_file_reference',
128 'pid=0 AND deleted=0' 130 if (!is_array($fileReferences)) {
135 return $fileReferences;
146 $improperConnectedReferences = array();
149 foreach ($sysFileReferences as $fileReferenceRecord) {
150 $tableName = $fileReferenceRecord[
'targettable'];
151 if (in_array($tableName, $skipTables)) {
156 $whereClause =
'uid=' . (int)$fileReferenceRecord[
'targetuid'];
157 if ($fileReferenceRecord[
'targettable'] ===
'pages') {
158 $isPageReference = TRUE;
160 $isPageReference = FALSE;
161 $whereClause .=
' AND pid<>0';
164 $targetRecord =
$GLOBALS[
'TYPO3_DB']->exec_SELECTgetSingleRow(
170 if ($targetRecord !== NULL) {
171 $fileReferenceRecord[
'newpid'] = ($isPageReference ? $targetRecord[
'uid'] : $targetRecord[
'pid']);
172 $improperConnectedReferences[] = $fileReferenceRecord;
175 return $improperConnectedReferences;
getImproperConnectedFileReferences(array $skipTables=array())
getFileReferencesPointingToMissingTables()
getFileReferencesOnRootlevel()
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]
performUpdate(array &$dbQueries, &$customMessages)
checkForUpdate(&$description)