Servus,
also ich kann den Bug bestätigen. Der Bug lässt sich allerdings relativ einfach beheben.
Öffne die Datei
includes/functions.con.php und suche folgende Quelltext-Zeilen der Funktion
conSyncArticle (Zeile 1536 ff in 4.9.9)
Code: Alles auswählen
if ($srcArtLang->get('idtplcfg') != 0) {
$newidtplcfg = tplcfgDuplicate($srcArtLang->get('idtplcfg'));
} else {
$newidtplcfg = 0;
}
// Create an article language entry for destination language
$artLangColl = new cApiArticleLanguageCollection();
$fieldsToOverwrite = array(
'idart' => $idart,
'idlang' => $dstlang,
'artspec' => 0,
'online' => 0,
'created' => date('Y-m-d H:i:s'),
'lastmodified' => date('Y-m-d H:i:s'),
'modifiedby' => $auth->auth['uname'],
'published' => '',
'publishedby' => '',
'timemgmt' => 0,
'datestart' => '',
'dateend' => '',
'status' => 0,
'time_move_cat' => 0,
'time_target_cat' => 0,
'time_online_move' => 0,
'free_use_01' => '',
'free_use_02' => '',
'free_use_03' => ''
);
$artLang = $artLangColl->copyItem($srcArtLang, $fieldsToOverwrite);
if (!is_object($artLang)) {
return;
}
hier wird der Eintrag in
con_art_lang kopiert, wobei im Array
$fieldsToOverwrite die zu ändernden Felder des neuen Eintrages übergeben werden. Dabei wird, wie schon richtig hier im Thread bemerkt, vergessen die '
idtplcfg' der neuen Template-Konfiguration anzugeben, die kurz davor bereits kopiert wurde und in der Variablen
$newidtplcfg gespeichert ist.
Folgende Änderung, die das Array entsprechend ergänzt, fixt daher diesen Bug
Code: Alles auswählen
if ($srcArtLang->get('idtplcfg') != 0) {
$newidtplcfg = tplcfgDuplicate($srcArtLang->get('idtplcfg'));
} else {
$newidtplcfg = 0;
}
// Create an article language entry for destination language
$artLangColl = new cApiArticleLanguageCollection();
$fieldsToOverwrite = array(
'idart' => $idart,
'idlang' => $dstlang,
'idtplcfg' => $newidtplcfg,
'artspec' => 0,
'online' => 0,
'created' => date('Y-m-d H:i:s'),
'lastmodified' => date('Y-m-d H:i:s'),
'modifiedby' => $auth->auth['uname'],
'published' => '',
'publishedby' => '',
'timemgmt' => 0,
'datestart' => '',
'dateend' => '',
'status' => 0,
'time_move_cat' => 0,
'time_target_cat' => 0,
'time_online_move' => 0,
'free_use_01' => '',
'free_use_02' => '',
'free_use_03' => ''
);
$artLang = $artLangColl->copyItem($srcArtLang, $fieldsToOverwrite);
if (!is_object($artLang)) {
return;
}
Generell sollte man sich aber gerade in den Bereichen Sync und Copy auch mal Gedanken machen ob man, nach Prüfung der vorhandenen DB-Tabellen, nicht für InnoDB auf Transaktionen setzen möchte und das entsprechend im DB-Treiber, hier evtl. in der genericDB, abbildet, falls diese Tabellen eingesetzt werden.
Gruß aus Franken
Ortwin