Seite 1 von 2
Bug: function conMoveArticles()
Verfasst: Fr 19. Mär 2004, 17:17
von emergence
contenido 4.4.x - (vermutlich auch CVS_HEAD)
in contenido/includes/functions.con.php
folgendes hab ich durch zufall gefunden:
Code: Alles auswählen
$sql = "UPDATE ".$cfg["tab"]["cart_lang"]." SET online = 0 WHERE idartlang = " . $db->f("idartlang");
sollte
Code: Alles auswählen
$sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET online = 0 WHERE idartlang = " . $db->f("idartlang");
sein...
$cfg["tab"]["cart_lang"] gibts nicht...
die andere sache, bei:
Code: Alles auswählen
/* Set all articles which are in between of our start/endtime to online */
$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart AND NOW() < dateend AND online = 0 AND timemgmt = 1";
$db->query($sql);
while ($db->next_record())
{
$sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET online = 0 WHERE idartlang = " . $db->f("idartlang");
$db2->query($sql);
}
sollte der status nicht auf online = 1 gesetzt werden (beim update) ?
sicher bin ich mir dabei aber nicht...
sollte die on offline schaltung nicht in die function conFlagOnOffline() verschoben werden... (dann hätte die funktion wenigstens ihren namen nicht umsonst...)
Verfasst: Fr 19. Mär 2004, 17:33
von timo
ja, ist im CVS schon gefixt
Verfasst: Fr 19. Mär 2004, 17:37
von emergence
nur so aus neugierde...
hast du jetzt alle 3 änderungen gemacht ?
ansonsten sehe ich es eh im snapshot...
Verfasst: Fr 19. Mär 2004, 17:39
von timo
jup, sollte.
Verfasst: Fr 19. Mär 2004, 18:11
von emergence
na ja einen hätt ich noch
Code: Alles auswählen
/* Set all articles after our endtime to offline */
$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart AND NOW() < dateend AND online = 0 AND timemgmt = 1";
sollte
Code: Alles auswählen
/* Set all articles after our endtime to offline */
$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > dateend AND timemgmt = 1";
sein...
ich glaube damit stimmt die abfrage dann wirklich...

Verfasst: Fr 19. Mär 2004, 18:32
von timo
ich habe das ding komplett umgebaut, schau dir erstmal das im snapshot an
Verfasst: Fr 19. Mär 2004, 18:53
von emergence
alles klar...
ähm genau da gibts ja so die nette geschichte das der code in der con_code nicht mit aktualisiert wird, beim verschieben der artikel
createcode sollte man noch auf 1 setzen....
ist das auch mit drin ?
schönen abend noch...
Verfasst: So 21. Mär 2004, 16:59
von emergence
hab mir das jetzt im snapshot angesehen...
wenn ich das richtig verstanden habe wird in der
function conFlagOnOffline()
werden beim ersten query alle artikel die innerhalb des bereiches liegen online geschalten... also WHERE NOW() > datestart AND NOW() < dateend
ist ok...
beim zweiten -> WHERE NOW() > datestart AND dateend = '0000-00-00 00:00:00'
versteh ich auch noch...
beim dritten ist es mir nicht mehr klar... warum bei WHERE NOW() > dateend AND dateend != '0000-00-00 00:00:00'
die artikel ebenso online geschalten werden... sollte das hier noch auf offline gesetzt werden ?
und bei
function conMoveArticles()
werden die artikel vor datestart und nach dateend offline geschalten...
ist okay -> hätt ich aber ebenfalls in die conFlagOnOffline verschoben
die conMoveArticles sollte ja nur mehr den code für die verschiebung beinhalten...
ach ja beim update query für die $cfg["tab"]["cat_art"] in der conMoveArticles sollte noch ein ,createcode = '1' ergänzt werden...
Verfasst: So 21. Mär 2004, 18:29
von emergence
irgendwie sind mir die abfragen eine spur zu kompliziert...
also in der conFlagOnOffline würde es reichen alle artikel vor datestart offline zu setzen also mittels:
Code: Alles auswählen
SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() < datestart AND timemgmt = 1
und alle nach datestart online...
Code: Alles auswählen
SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart AND timemgmt = 1
alle nach dem endzeitpunkt sollten mittels
Code: Alles auswählen
SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart > dateend AND timemgmt = 1
selektiert werden...
die letzte abfrage sollte bei der
function conMoveArticles()
ebenso verwendet werden...
ich schätze mal die abfragen dürfen somit keinen sonderfall übersehen...
ein onlineschalten bei artikel bei denen nur datestart definiert ist funktioniert ebenso...
momentan wäre es so das alle artikel bei denen keine endzeit eingetragen wurde, automatisch offline bleiben...
die andere sache die mich ein wenig irritiert... bei function conMoveArticles()
sollte bei dem ersten update nach
/* Perform after-end updates */
bereits die zeitsteuerung deaktiviert werden... dies wird sonst nur gemacht wenn time_online_move = 1 ist...
was meinst du dazu ?
Verfasst: So 21. Mär 2004, 19:27
von timo
nein, leider ist es nicht ganz so einfach...ich hab da selbst an den neuen Abfragen mehrere Stunden gesessen, bin aber noch nicht ganz zufrieden. Liegt aber auch daran, daß es keinen Prozess für die Zeitsteuerung gibt...
Verfasst: Mo 22. Mär 2004, 09:21
von timo
emergence hat geschrieben:
bereits die zeitsteuerung deaktiviert werden... dies wird sonst nur gemacht wenn time_online_move = 1 ist...
was meinst du dazu ?
habe ich gerade eingebaut. Ich bin mir aber nicht sicher, ob das jetzt alle Fälle abdeckt

Verfasst: Mo 22. Mär 2004, 10:39
von emergence
timo hat geschrieben:nein, leider ist es nicht ganz so einfach...ich hab da selbst an den neuen Abfragen mehrere Stunden gesessen, bin aber noch nicht ganz zufrieden.
ich hab damit auch meinen sonntag nachmittag verbracht... sich in die queries reinzudenken ist wirklich nicht so einfach...
deshalb dachte ich mir mach die queries wieder einfacher...
bei der on offline schaltung zu kontrollieren ob dateend korrekt eingetragen ist hat mir einfach nicht gefallen...
Verfasst: Mo 22. Mär 2004, 14:14
von emergence
also nochmal zusammengefasst:
1. alle artikel vor datestart sollen offline bleiben
2. alle artikel nach der datestart sollen online gestellt werden...
3. alle artikel wo datestart < dateend < now() sollen offline gestellt werden
oder hab ich da was übersehen... ?
bei movearticle
1. alle artikel wo datestart < dateend < now() und time_move_cat = 1
sollen erst hier verschoben und upgedatet werden...
sonderfälle:
wo dateend nicht gesetzt wurde bleiben online
wo datestart nicht gesetzt wurde sollen ab dateend offline gesetzt werden...
die frage jetzt dabei ist ab welchem zeitpunkt muss das timemanagment deaktiviert werden...
Verfasst: Mi 12. Jan 2005, 16:13
von timo
Ich habe mir dazu noch ein paar Gedanken gemacht:
emergence hat geschrieben:
1. alle artikel vor datestart sollen offline bleiben
1. Vorraussetzung datestart ist gesetzt: Alle Artikel vor datestart sollen unberücksichtigt bleiben, egal ob sie on- oder offline sind.
2. alle artikel nach der datestart sollen online gestellt werden...
Ja, sofern datestart gesetzt ist.
3. alle artikel wo datestart < dateend < now() sollen offline gestellt werden
3. Alle Artikel sollen online gestellt werden, wenn now() > dateend und dateend gesetzt ist? Eine Prüfung auf datestart bräuchte man da eigentlich nicht, oder?
Ist "move" aktiv, muß der Artikel verschoben werden. Ist "make online after move" nicht gesetzt, wird der Artikel wieder offline gestellt, ansonsten nicht.
move und make online after move werden ignoriert wenn kein Enddatum aktiv ist.
Soweit alles richtig?
Verfasst: Mi 12. Jan 2005, 16:20
von emergence

das hab ich noch gar nicht gepostet
die oben genannte variante hab ich schon umgesetzt...
damit ersparst du dir hoffentlich weitere denkarbeit
Code: Alles auswählen
/**
* Set articles on/offline for the time management function
*
* @param none
*
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
* @copyright four for business AG 2003
*/
function conFlagOnOffline()
{
global $cfg;
$db = new DB_Contenido;
$db2 = new DB_Contenido;
/* Set all articles which are before our starttime to offline */
$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() < datestart AND timemgmt = 1";
$db->query($sql);
while ($db->next_record())
{
$sql = "UPDATE ".$cfg["tab"]["art_lang"] ." SET online = 0 WHERE idartlang = ".$db->f("idartlang");
$db2->query($sql);
}
/* Set all articles which are in between of our start/endtime to online */
$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart AND NOW() < dateend AND online = 0 AND timemgmt = 1";
$db->query($sql);
while ($db->next_record())
{
$sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET online = 1 WHERE idartlang = " . $db->f("idartlang");
$db2->query($sql);
}
/* Set all articles after our endtime to offline */
$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > dateend AND dateend != '0000-00-00 00:00:00' AND timemgmt = 1";
$db->query($sql);
while ($db->next_record())
{
$sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET online = 0 WHERE idartlang = " . $db->f("idartlang");
$db2->query($sql);
}
}
/**
* Move articles for the time management function
*
* @param none
*
* @author Timo A. Hummel <Timo.Hummel@4fb.de>
* @copyright four for business AG 2003
*/
function conMoveArticles()
{
global $cfg;
$db = new DB_Contenido;
$db2 = new DB_Contenido;
/* Perform after-end updates */
$sql = "SELECT idartlang, idart, time_move_cat, time_target_cat, time_online_move FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > dateend AND dateend != '0000-00-00 00:00:00' AND timemgmt = 1";
$db->query($sql);
while ($db->next_record())
{
$sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET timemgmt = 0, online = 0 WHERE idartlang = ".$db->f("idartlang");
$db2->query($sql);
if ($db->f("time_move_cat") == "1")
{
$sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET idcat = ".$db->f("time_target_cat") . ",createcode = '1' WHERE idart = " . $db->f("idart");
$db2->query($sql);
if ($db->f("time_online_move") == "1")
{
$sql = "UPDATE ".$cfg["tab"]["art_lang"] ." SET online = 1 WHERE idart = ".$db->f("idart");
} else {
$sql = "UPDATE ".$cfg["tab"]["art_lang"] ." SET online = 0 WHERE idart = ".$db->f("idart");
}
$db2->query($sql);
}
}
}
ich setzt das jetzt ca. seit 6 monaten ein... bis jetzt ist mir da noch kein weiterer bug aufgefallen...