functions.str.php/strDeleteCategory()

calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

functions.str.php/strDeleteCategory()

Beitrag von calvini »

Die Funktion löscht zuerst die Einträge in cat_lang, um dann die gelöschten Einträge zu suchen und deren idtplcfg zum Löschen der Einträge in template_conf und container_conf zu verwenden. Dies führt logischerweise dazu, dass die Einträge in template_conf und container_conf nicht gelöscht werden.

Macht man das Ganze in korrekter Reihenfolge, klappt es auch. Mein Vorschlag wäre deshalb folgender Code:

Code: Alles auswählen

function strDeleteCategory ($idcat) {
  global $db;
  global $lang;
  global $client;
  global $cfg;
  global $area_tree;

  // Flag to rebuild the category table
  global $remakeCatTable;
  global $remakeStrTable;
  $remakeCatTable = true;
  $remakeStrTable = true;

  # Look for existing subcategories and leave with "0201" if there are any:
  $sql = "SELECT * FROM ".$cfg["tab"]["cat"]." WHERE parentid='$idcat'";
  $db->query($sql);
  if ($db->next_record()) return "0201";

  # Look for existing articles and leave with "0202" if there are any:
  $sql = "SELECT * FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='$idcat'";
  $db->query($sql);
  if ($db->next_record()) return "0202";

  # Get preid and postid for categorie:
  $sql = "SELECT * FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat'";
  $db->query($sql);
  $db->next_record();
  $tmp_preid  = $db->f("preid");
  $tmp_postid = $db->f("postid");

  ////// update pre cat set new postid
  if ($tmp_preid != 0) {
    $sql = "UPDATE ".$cfg["tab"]["cat"]." SET postid='$tmp_postid' WHERE idcat='$tmp_preid'";
    $db->query($sql);
  }

  ////// update post cat set new preid
  if ($tmp_postid != 0) {
    $sql = "UPDATE ".$cfg["tab"]["cat"]." SET preid='$tmp_preid' WHERE idcat='$tmp_postid'";
    $db->query($sql);
  }

  ////// delete entry in 'cat'-table
  $sql = "DELETE FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat' ";
  $db->query($sql);

  # Collect the idtplcfg's for categorie:
  $sql = "SELECT idtplcfg FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat'";
  $db->query($sql);
  while ($db->next_record()) $tmp_idtplcfg[] = $db->f("idtplcfg");

  # Delete all corresponding entries in tpl_conf and container_conf:
  foreach ($tmp_idtplcfg as $tmp_idtplcfg) {
    $sql = "DELETE FROM ".$cfg["tab"]["tpl_conf"]." WHERE idtplcfg='$tmp_idtplcfg'";
    $db->query($sql);
    $sql = "DELETE FROM ".$cfg["tab"]["container_conf"]." WHERE idtplcfg = '$tmp_idtplcfg'";
    $db->query($sql);
  }

  ////// delete entry in 'cat_lang'-table
  $sql = "DELETE FROM ".$cfg["tab"]["cat_lang"]." WHERE idcat='$idcat'";
  $db->query($sql);

  // delete rights for element
  cInclude ("includes", "functions.rights.php");
  deleteRightsForElement("str", $idcat);
}
Mein Code kommt mit einer Datenbankvariablen aus, da die idtplcfg zwischengespeichert werden (vielleicht hat beim alten Code jemand vermutet, durch die Verwendung einer zweiten Datenbankvariablen könnte man die unter der ersten Datenbankvariablen vollzogenen Löschungen umgehen?)
Ich habe mir außerdem noch erlaubt, die zusätzliche if-else-Verschachtelung der return-Anweisungen zu entfernen (macht den Code lesbarer).

Bitte sagt mir, ob ihr damit was anfangen könnt, oder ob ich wirklich nur genau die Code-Schnipsel ändern soll, die einen Fehler erzeugen, selbst wenn der dadurch entstehende Code dann sehr unleserlich ist.

Bei conDeleteart() passiert übrigens genau das selbe, zusätzlich werden nur die Einträge der aktuellen Sprache gelöscht (wenn es richtig herum programmiert wäre). Poste ich gleich auch noch ...
Zuletzt geändert von calvini am Mo 9. Mai 2005, 16:21, insgesamt 1-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

*** make your own tools (wishlist :: thx)
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

Sorry, komisch das es dann in meiner Version noch nicht drin war, die habe ich erst im Frebruar gezogen ...
Oder wird der aktuelle Download bei Contenido.org nicht aktualisiert?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

der code wurde nur in einer cvs_head version ergänzt...
ob es der code jemals in eine 4.4.x serie schafft wage ich zu bezweifeln...

es war auch der grund warum ich die beiden postings nicht geschlossen haben, das soll timo entscheiden...
*** make your own tools (wishlist :: thx)
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

emergence hat geschrieben:der code wurde nur in einer cvs_head version ergänzt...
ob es der code jemals in eine 4.4.x serie schafft wage ich zu bezweifeln...

es war auch der grund warum ich die beiden postings nicht geschlossen haben, das soll timo entscheiden...
Werden diese Funktionen auch intern verwendet? Oder nur von verwegenen Menschen wie mir ;)?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm ja es wird verwendet...
sagen wir mal so es fällt nur den jenigen auf die sich damit wirklich beschäftigen...

persönlich muss ich sagen verwende ich lieber die cvs version als das ich mir eine 4.4.x antue...
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Re: functions.str.php/strDeleteCategory()

Beitrag von emergence »

calvini hat geschrieben:Bitte sagt mir, ob ihr damit was anfangen könnt, oder ob ich wirklich nur genau die Code-Schnipsel ändern soll, die einen Fehler erzeugen, selbst wenn der dadurch entstehende Code dann sehr unleserlich ist.
ach ja die frage hab ich noch gar nicht beantwortet...
wenn es unleserlich wird ist es am besten die ganze geänderte funktion zu posten...
ich versuche es auch so zu handhaben... am besten noch mit ein paar anmerkungen warum und wieso ;-)
*** make your own tools (wishlist :: thx)
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

emergence hat geschrieben:persönlich muss ich sagen verwende ich lieber die cvs version als das ich mir eine 4.4.x antue...
Als Alleinunterhalter muss ich mich da mal wieder als Unwissender outen :oops:: Wie kann ich CVS-Versionen beziehen/einbauen und wie kann ich eventuell das CVS nutzen, um selbst Verbesserungsvorschläge einzubauen (damit meine ich auch und insbesondere Änderungen an Contenido, die nicht allgemein übernommen werden, die ich aber eingebaut haben möchte und die mir nicht bei der Übernahme einer neuen CVS-Version verloren gehen sollen)?
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

Einen direkten CVS-Zugang gibt es leider nicht, aber die wöchentlichen Snapshots findest du hier: http://www.contenido.org/forum/viewtopic.php?t=2089

Änderungen kannst du gerne in das Forum "Bugs 4.5.x" posten.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Tipp: Bei den CVS-Versionen sollte man nur alles in der Art *cvs* löschen, die Dateien braucht man nicht auf dem Webserver.
Wie kann ich CVS-Versionen beziehen/einbauen und wie kann ich eventuell das CVS nutzen, um selbst Verbesserungsvorschläge einzubauen (damit meine ich auch und insbesondere Änderungen an Contenido, die nicht allgemein übernommen werden, die ich aber eingebaut haben möchte und die mir nicht bei der Übernahme einer neuen CVS-Version verloren gehen sollen)?
Das ist ein relatives Problem. Es gibt die Möglichkeit, Funktionalitäten auf Basis von Plugins zu ergänzen (suche im Forum, da gibt es etliche Beiträge von emergence, Backup RC1 ist z.B. ein Plugin).

Aber auch diese sind nicht davor geschützt, mit einem Update auszufallen (z.B. bei Änderungen in genutzten Funktionen und in der DB, jedoch bleiben sie zunächst erhalten).

Führst Du Änderungen an den Contenido-Core-Dateien durch, gibt es keine Lösung, höchstens die Verwendung von Vergleichstools (z.B. ExamDiff Pro). Das macht die Sache auch so aufwendig...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

timo hat geschrieben:Einen direkten CVS-Zugang gibt es leider nicht, aber die wöchentlichen Snapshots findest du hier: http://www.contenido.org/forum/viewtopic.php?t=2089

Änderungen kannst du gerne in das Forum "Bugs 4.5.x" posten.
Da ich nicht weiß, was "on the bleeding edge" leben heißt und es damit wahrscheinlich auch nicht tue ;) und selbst wenn ich es täte, mein Chef es mit Sicherheit nicht tut, nehme ich davon vielleicht doch eher Abstand und bleibe bei der als stabil angebotenen Version mit meinen als von mir als stabil verifizierten Änderungen ...
Gleiches gilt für 4.5.x - oder ist das mittlerweile serienreif? Momentan bin ich froh, wenn ich meine Datenbankintegration mit Contenido bis zum Wochenende zum Laufen bringe :roll: ...
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

emergence hat geschrieben:ähm ja es wird verwendet...
sagen wir mal so es fällt nur den jenigen auf die sich damit wirklich beschäftigen...
So einer bin ich (leider ;)). Gibt es eigentlich sowas wie 'nen Garbagecollector für die DB (also eine Funktion, die alle nichtreferenzierten Datensätze eleminiert)? Bzw. besteht überhaupt Interesse an sowas (bevor ich wieder 'ne sinnlose Diskussion anzettele ;))?
emergence hat geschrieben:persönlich muss ich sagen verwende ich lieber die cvs version als das ich mir eine 4.4.x antue...
Wenn ich die Kommentare zu den CVS-Snapshots ernst nehme, dann möchte ich die nicht in einem Produktionssystem einsetzen :roll:...
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

calvini hat geschrieben:Wenn ich die Kommentare zu den CVS-Snapshots ernst nehme, dann möchte ich die nicht in einem Produktionssystem einsetzen :roll:...
Welche Kommentare?

On the bleeding edge bedeutet soviel wie, daß man immer die neusten Versionen testet und dann auch in der Lage ist, auftretende Probleme selbstständig zu erkennen und zu lösen. Wenn man das nicht kann, ist man mit der 4.4.x-er Serie besser aufgehoben.
calvini
Beiträge: 95
Registriert: Mo 21. Feb 2005, 12:06
Kontaktdaten:

Beitrag von calvini »

timo hat geschrieben:Welche Kommentare?
Thread 2089 hat geschrieben:- Es ist sehr warscheinlich, daß die Snapshots ohne weiteres nicht funktionieren.
- Die Snapshots sind für diejenigen gedacht, die "on the bleeding edge" leben. Wer nicht weiß, was das heißt, tut es warscheinlich nicht
- Für die Snapshots sollte man wissen, was man tut.
Würde ich nicht mit einem Produktionssystem probieren ...

Mit
Thread 2089 hat geschrieben:- Die Snapshots werden automatisiert jeden Freitag um 23 Uhr erzeugt.
könnte ich allerdings leben ;).
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

Ja richtig. Deshalb ja auch der Hinweis, daß man wissen muß, was man tut. Denn wenn ein Problem auftritt, muß man es selbst beheben können. Übrigens haben wir ziemlich viele Systeme mittlerweile auf CVS-Versionen laufen - wirklich dramatische Fehler, die "mal eben" auftreten können und die Lauffähigkeit des Gesamtsystems beeinträchtigen, gibts meiner Erfahrung nach nicht.
Gesperrt