Ich habe nun mal ein bischen gebastelt, damit sich auch der Dateiname ändert, wenn man eine Datei im Medienpool aktualisiert. Modifikationen habe ich in der function_rex_mediapool.inc.php eingefügt (redaxo-Version 4.3.2):
Code: Alles auswählen
// ..... ab Zeile 216:
if($size = @getimagesize($REX['MEDIAFOLDER'] .'/'. $FILEINFOS["filename"]))
{
$FILESQL->setValue('width',$size[0]);
$FILESQL->setValue('height',$size[1]);
}
// ################ MODIFIKATION DATEI UMBENENNEN Start ##########################
// alter Dateiname
$old_file_name = $FILEINFOS["filename"];
// neue Namen
$new_orig_name = $_FILES['file_new']['name'];
$new_file_name = rex_mediapool_filename($new_orig_name);
// Deburg
// echo 'old_file_name: '.$old_file_name.'<br>';
// echo 'new_orig_name: '.$new_orig_name.'<br>';
// echo 'new_file_name: '.$new_file_name.'<br>';
// SQL
$FILESQL->setValue('originalname',$new_orig_name);
$FILESQL->setValue('filename',$new_file_name);
//Datei im files-Ordner umbenennen
rename("../files/$old_file_name","../files/$new_file_name");
// Alle Vorkommen in der DB suchen
// ###### meta-files werden noch nicht beruecksichtigt! ######
// ###### hier nur fuer filelist1, andere werden nicht verwendet! ######
// Suchen inkl. "files/" bzw. "," um Eindeutigkeit zu gewaehrleisten
// ( "%test.pdf%" wuerde auch in "zweitertest.pdf" gefunden )
$check_DB = rex_sql::factory();
// $check_DB->debugsql = 1;
$check_DB->setQuery('SELECT * FROM '.$REX['TABLE_PREFIX'].'article_slice WHERE
value1 LIKE "%files/'.$old_file_name.'%" OR
value2 LIKE "%files/'.$old_file_name.'%" OR
value3 LIKE "%files/'.$old_file_name.'%" OR
value4 LIKE "%files/'.$old_file_name.'%" OR
value5 LIKE "%files/'.$old_file_name.'%" OR
value6 LIKE "%files/'.$old_file_name.'%" OR
value7 LIKE "%files/'.$old_file_name.'%" OR
value8 LIKE "%files/'.$old_file_name.'%" OR
value9 LIKE "%files/'.$old_file_name.'%" OR
value10 LIKE "%files/'.$old_file_name.'%" OR
value11 LIKE "%files/'.$old_file_name.'%" OR
value12 LIKE "%files/'.$old_file_name.'%" OR
value13 LIKE "%files/'.$old_file_name.'%" OR
value14 LIKE "%files/'.$old_file_name.'%" OR
value15 LIKE "%files/'.$old_file_name.'%" OR
value16 LIKE "%files/'.$old_file_name.'%" OR
value17 LIKE "%files/'.$old_file_name.'%" OR
value18 LIKE "%files/'.$old_file_name.'%" OR
value19 LIKE "%files/'.$old_file_name.'%" OR
value20 LIKE "%files/'.$old_file_name.'%" OR
file1 = "'.$old_file_name.'" OR
file2 = "'.$old_file_name.'" OR
file3 = "'.$old_file_name.'" OR
file4 = "'.$old_file_name.'" OR
file5 = "'.$old_file_name.'" OR
file6 = "'.$old_file_name.'" OR
file7 = "'.$old_file_name.'" OR
file8 = "'.$old_file_name.'" OR
file9 = "'.$old_file_name.'" OR
file10 = "'.$old_file_name.'" OR
filelist1 LIKE "%,'.$old_file_name.'%" OR filelist1 LIKE "'.$old_file_name.'%"
');
for($i=0;$i<$check_DB->getRows();$i++){
// IDs fuer Kontroll-Links und um Artikel neu zu generieren
$article_id[$i]= $check_DB->getValue('article_id');
$slice_id[$i]= $check_DB->getValue('id');
$clang[$i]= $check_DB->getValue('clang');
// Ausgabe Kontroll-Links
echo '<div class="hinweis">Datei kommt vor in <a href="../index.php?article_id='.$article_id[$i].'&clang='.$clang[$i].'" target="_blank">Artikel ID: '.$article_id[$i].'</a></div>';
// DB updaten
$check_DB1 = rex_sql::factory();
// $check_DB1->debugsql = 1;
$check_DB1->setQuery('UPDATE '.$REX['TABLE_PREFIX'].'article_slice SET
value1 = REPLACE( value1 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value2 = REPLACE( value2 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value3 = REPLACE( value3 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value4 = REPLACE( value4 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value5 = REPLACE( value5 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value6 = REPLACE( value6 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value7 = REPLACE( value7 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value8 = REPLACE( value8 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value9 = REPLACE( value9 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value10 = REPLACE( value10 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value11 = REPLACE( value11 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value12 = REPLACE( value12 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value13 = REPLACE( value13 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value14 = REPLACE( value14 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value15 = REPLACE( value15 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value16 = REPLACE( value16 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value17 = REPLACE( value17 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value18 = REPLACE( value18 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value19 = REPLACE( value19 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
value20 = REPLACE( value20 , "files/'.$old_file_name.'" , "files/'.$new_file_name.'"),
file1 = REPLACE( file1 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file2 = REPLACE( file2 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file3 = REPLACE( file3 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file4 = REPLACE( file4 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file5 = REPLACE( file5 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file6 = REPLACE( file6 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file7 = REPLACE( file7 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file8 = REPLACE( file8 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file9 = REPLACE( file9 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
file10 = REPLACE( file10 , "'.$old_file_name.'" , "'.$new_file_name.'" ),
filelist1 = REPLACE( filelist1,",'.$old_file_name.'",",'.$new_file_name.'") WHERE id="'.$slice_id[$i].'"
');
// zweiter Check, falls an erster Stelle der filelist
$check_DB2 = rex_sql::factory();
// $check_DB2->debugsql = 1;
$check_DB2->setQuery('UPDATE '.$REX['TABLE_PREFIX'].'article_slice SET
filelist1 = REPLACE( filelist1,"'.$old_file_name.'","'.$new_file_name.'") WHERE filelist1 LIKE "'.$old_file_name.'%" AND id="'.$slice_id[$i].'"
');
// ----- Artikel neu generieren und Updatefields aktualisieren
$EA = rex_sql::factory();
$EA->setTable($REX['TABLE_PREFIX'] . 'article');
$EA->setWhere('id='. $article_id[$i] .' AND clang='. $clang[$i]);
$EA->addGlobalUpdateFields();
$EA->update();
rex_deleteCacheArticle($article_id[$i]);
rex_register_extension_point('ART_CONTENT_UPDATED', '',
array (
'id' => $article_id[$i],
'clang' => $clang[$i]
)
);
$check_DB->next();
}
// ... und hoffen, das nichts zerschossen wird ;)
// ################ MODIFIKATION DATEI UMBENENNEN Ende #########################
@chmod($REX['MEDIAFOLDER'].'/'. $FILEINFOS["filename"], $REX['FILEPERM']);
$updated = true;
.......... u.s.w. .....................
Sicher kann man die Querys noch etwas eleganter verbinden, hab ich aber nicht hingekriegt.
Sieht hier jemand irgendwelche Probleme, die durch diese Erweiterung auftreten könnten?