Code: Alles auswählen
<?php
/* Dieses Script löscht die meisten Tabelleneinträge
* von einem Mandanten ($old_idclient) .
* Version 0.07 20060524
*
* 0.07 Bugfix: $clients_lang wurde nicht richtig gesetzt
* 0.06: Hinweistexte verbessert , toten Code entfernt (ein bisschen ist wohl noch drin), INNER JOIN Syntax weg
* 0.05: Neuaufbau von cat_tree wird auch "simuliert"
* 0.04: 20051028: mehr Tabellen: Module translations, newslettergroups und newslettergroupmembers, art_spec werden auch gelöscht.
* 0.03: nur Hinweistexte korrigiert, keine Änderungen am code
* 0.02: mehr tabellen hinzugenommen
* 0.01: minimalversion, proof-of-concept
* Für Contenido 4.5.+ , 4.6.x .
*
* 4.4.x ungetestet - sollte größtenteils auch gehen aber einige Tabellen existierten da noch nicht => Fehler (ignorierbar)
*
* Mysql DB muss auf version 4 oder höher sein. version 3.23 hat schwierigkeiten mit dem generierten SQL Code.
* Autor: Knut Behrends
* Status: FUNKTIONSFÄHIG aber möglw. unvollständig (Tabellen von installierten Plugins werden ignoriert)
* im Datenmodell bleiben dann eventuell einige mit nichts mehr verknüpfte Datensätze zurück.
*
* TODO: einbauen LOCK Tables vor jedem DELETE FROM ...
* TODO: einbauen Fallunterscheidung: Contenidoversion bestimmen => Tabellenauswahl
* TODO: alternativ: if exists Tablename ...delete from
* TODO: toten Code entfernen
* TODO: INNER JOIN Syntax ändern zu WHERE Klausel Syntax (WHERE tabA.idClient = tabB.idClient)
*
* Scriptcode z.T. auf Grundlage von CopyClient Script von A. Womatschka
* http://www.contenido.org/forum/viewtopic.php?t=5377&highlight=copy+client
*
* Datum: 2005-Sep-15
* Zuletzt geändert am: 2006-05-24
*/
/* Viele Tabellen werden vom Script verändert. Datenbank daher besser vorher sichern.
*/
/* Anleitung:
* Kopiere die .php-Datei mit diesem Script in das Contenido-Verzeichnis
* z.B. contenido/tools/deleteclient.php
* 1. Contenido db dump machen
* 2. Abmelden von Contenido (falls noch eingeloggt)
* 3. Script starten und optionen auswählen
* 4. nachschauen was wirklich passiert ist
*/
if (file_exists( '../includes/startup.php'))
{
include_once ('../includes/startup.php'); // 4.5.3
} else {
include_once ('../includes/config.php');
}
cInclude ("includes", 'functions.general.php');
$cfg["debug"]["backend_exectime"]["fullstart"] = getmicrotime();
cInclude ("includes", 'functions.i18n.php');
cInclude ("includes", 'functions.api.php');
cInclude ("includes", 'functions.general.php');
cInclude ("includes", 'functions.database.php');
cInclude ("classes", 'class.xml.php');
cInclude ("classes", 'class.navigation.php');
cInclude ("classes", 'class.template.php');
cInclude ("classes", 'class.backend.php');
cInclude ("classes", 'class.notification.php');
cInclude ("classes", 'class.area.php');
cInclude ("classes", 'class.action.php');
cInclude ("classes", 'class.layout.php');
cInclude ("classes", 'class.treeitem.php');
cInclude ("classes", 'class.user.php');
cInclude ("classes", 'class.group.php');
cInclude ("classes", 'class.cat.php');
cInclude ("classes", 'class.client.php');
cInclude ("classes", 'class.inuse.php');
cInclude ("classes", 'class.table.php');
cInclude ("includes", 'functions.str.php');
page_open(array('sess' => 'Contenido_Session',
'auth' => 'Contenido_Challenge_Crypt_Auth',
'perm' => 'Contenido_Perm'));
i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);
cInclude ("includes", 'cfg_language_de.inc.php');
/* Instanzen der DB_Contenido */
$db = new DB_Contenido; // strMakeTreeTable funktioniert nur mit globalem $db ?
$cfg["debug"]["backend_exectime"]["start"] = getmicrotime();
?>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="styles/contenido.css" />
<script type="text/javascript" src="scripts/general.js"></script>
<style type="text/css">
<!--
/* Cascading Style Sheet */
BODY,P,TD { font-family : verdana, arial, helvetica, sans-serif; }
BODY,P,TD { font-size : 11px; }
A:active,A:link,A:visited { text-decoration : none; }
A:hover { text-decoration : underline; }
P { text-align : justify; line-height: 140%; }
.red { color : #FF0000; }
.grey { color : #333333; }
.darkgrey { color : #525169; }
.blue { color : #0055dd; }
.white { color : #FFFFFF; }
-->
</style>
</head>
<body style="margin: 10px">
<h2 class="red"><b>CONTENIDO CLIENT BACKEND DELETION SCRIPT</b></h2>
<p class="red"><b>Dieses Script löscht einen Contenido Mandanten/Client aus der Mysql Datenbank.</b></p>
<ol>
<li>(notwendig) Sicherstellen dass mysql Version 4.0 oder höher ist. Script funktioniert nicht mit mysql Release 3.23!</li>
<li>(empfohlen) contenido mysql Datenbank sichern. PHP Code dieses Scripts ansehen.</li>
<li>(erledigt?) Melde dich als sysadmin an Contenido an (oder mit einem anderen Account welches Sysadmin Recht hat)</li>
<li>(optional) Merke dir zur Dokumentation den Namen und die ID des zu löschenden Mandanten. Dieses Script arbeitet mit der ID. Dieser Parameter idclient wird später nicht mehr verfügbar sein.</li>
<li>(optional) Eingeloggte User benachrichtigen, denn Kategoriebaum wird neu aufgebaut, alle Artikel in Bearbeitung entsperrt. </li>
<li>(optional) Abmelden von Contenido, falls mit anderem Browserfenster noch eingeloggt. </li>
<li>(optional) Im Formular "Simulationsmodus" + Mandanten auswählen und abschicken, SQL-Code ansehen und ggf. zur Dokumentation speichern</li>
<li> Mandanten auswählen und abschicken. Mandant wird gelöscht.</li>
</ol>
<h3>Anmerkungen:</h3>
<p>Dieses Script hat KEINE "Rückgängig machen" Funktionalität. Stattdessen alte Datenbanksicherung wieder einspielen.<br>
Das Script greift direkt auf die mysql Tabellen zu und löscht nur die von idClient abhängigen Datenbankeinträge.</p>
<p> Es werden gelöscht bzw neu aufgebaut:
</p>
<ul>
<li>Clientbezogene Backend-Nutzerrechte an Objekten</li>
<li>Cached Code</li>
<li>Statistikdaten</li>
<li>Communications Tabelle</li>
<li>Upload Tabelleneinträge</li>
<li>Plugin Registrations</li>
<li>DB Filesystem Einträge</li>
<li>User-defined Client-Properties</li>
<li>Links</li>
<li>Newsletter und Newsletter Recipients</li>
<li>Artikel (Inhalte und Metadaten, Metatags, Spezifikationen)</li>
<li>cat_tree (Kategoriebaum - betrifft ALLE Mandanten!)</li>
<li>Module Modulgeschichte, Modulsprachversionen</li>
<li>Templates</li>
<li>Layouts</li>
<li>Container </li>
<li>Kategorien </li>
<li>Newslettergroups und Newsletter-Groupmembers</li>
<li>Dem Client zugeordnete Frontendgroups und Frontend-Users sowie -Rechte</li>
<li>der Client selbst</li>
</ul>
<p>Es werden NICHT gelöscht</p>
<ul>
<li>Keywords (Löschvorgang kann recht lang dauern - PHP codezeile ist auskommentiert)</li>
<li>System Logs Tabellen (Action Log)</li>
<li>Unbenutzte (veraltete) Tabellen data, config_client, config, lang_bereich, lang_key, lang_value</li>
<li>Comments (wenn Modul comment installiert) und weitere selbst oder von Plugins angelegte Tabellen</li>
</ul>
<p>Das Directory auf dem Webserver für den gelöschten Client<br>
müsste per ftp-Tool oder von der Kommandozeile aus gelöscht werden,
um den Mandanten noch vollständiger zu entfernen.</p>
<p>Zu Tabellen siehe auch <a href="http://www.contenido.org/forum/viewtopic.php?t=4600&highlight=conkeywords">Kurzbeschreibung</a> und <a href="http://www.contenido.org/opensourcecms/de/upload/pdf/contenido.db.model.pdf">Datenbankschema.</a></p>
<?php
!isset($sim) ? $simulate = false : $simulate = true ; //default: simulate
$SessID = $sess->id;
$cinuse= $cfg["tab"]["inuse"];
$cnews= $cfg["tab"]["news"];
$cnews_rcp=$cfg["tab"]["news_rcp"];
$ccontent=$cfg["tab"]["content"];
$ccontainer=$cfg["tab"]["container"];
$clink=$cfg["tab"]["link"];
$clients_lang=$cfg["tab"]["clients_lang"];
$ccode = $cfg["tab"]["code"];
$cart_lang=$cfg["tab"]["art_lang"];
$cart=$cfg["tab"]["art"];
$cart_spec=$cfg["tab"]["art_spec"];
$ccat=$cfg["tab"]["cat"];
$ccatart=$cfg["tab"]["cat_art"];
$ccatlang=$cfg["tab"]["cat_lang"];
$cstat=$cfg["tab"]["stat"];
$cstatarchive=$cfg["tab"]["stat_archive"];
$cclients=$cfg["tab"]["clients"];
$cmetatag= $cfg["tab"]["meta_tag"];
$ccontainerconf=$cfg["tab"]["container_conf"];
$ctplconf=$cfg["tab"]["tpl_conf"];
$ctpl=$cfg["tab"]["tpl"];
$clay=$cfg["tab"]["lay"];
$cmod=$cfg["tab"]["mod"];
$crights=$cfg["tab"]["rights"];
$clang=$cfg["tab"]["lang"];
$ckeywords=$cfg["tab"]["keywords"];
$cuser_prop=$cfg["tab"]["user_prop"];
$cgroup_prop=$cfg["tab"]["group_prop"];
$cfrontendusers=$cfg["tab"]["frontendusers"];
$cfrontendpermissions=$cfg["tab"]["frontendpermissions"];
$cfrontendgroupmembers=$cfg["tab"]["frontendgroupmembers"];
$cfrontendgroups=$cfg["tab"]["frontendgroups"];
$cnews_groupmembers=$cfg["tab"]["news_groupmembers"];
$cnews_groups=$cfg["tab"]["news_groups"];
$cproperties=$cfg["tab"]["properties"];
$cdbfs=$cfg["tab"]["dbfs"];
$cupl=$cfg["tab"]["upl"];
$cmod_translations=$cfg["tab"]["mod_translations"];
$cmod_history=$cfg["tab"]["mod_history"];
$cplugins=$cfg["tab"]["plugins"];
$ccommunications=$cfg["tab"]["communications"];
$sql = "SELECT * FROM ".$cclients." ORDER BY idclient ASC";
$db->query($sql);
while ($db->next_record()) {
$ArrClients[$db->f("idclient")] = $db->f("name");
}
//$form wird 20 zeilen weiter unten benutzt
$form['table'] = '<table><tr><td width="220" align="right">%s</td><td>%s</td></tr><table>';
$form['header'] = '<select name="%s">'."\n";
$form['footer'] = '</select>';
$form['select'] = '<option value="%s"%s>%s (ID = %s)</option>'."\n";
$form['selected'] = ' selected="selected"';
if (is_array($ArrClients)) {
foreach ($ArrClients as $key => $value) {
if ($key == $old_idclient)
$form['source'] .= sprintf($form['select'], $key, $form['selected'], $value, $key);
else
$form['source'] .= sprintf($form['select'], $key, "", $value, $key);
}
}
$stop = false;
if (!isset($old_idclient) ) {
echo "Bitte wählen Sie...";
$stop = true;
}
if ($stop) {
echo '<form action="'.$PHP_SELF.'">'."\n";
echo '<input type="hidden" name="contenido" value="'.$SessID.'">'."\n";
$chksim = 'Nur Simulation <input name="sim" type="checkbox" value="on" checked>';
echo sprintf($form['table'], "CLIENT:" ,sprintf($form['header'],"old_idclient").$form['source'].$form['footer']);
echo sprintf($form['table'], $chksim , '<input type="submit" name="submit" value="Löschen!">');
echo '</form>'."\n";
page_close();
die();
}
$old_client_Name="";
/* Ermittle Kundennamen und prüfe die Gültigkeit der idclient-Nummern */
$sql = "SELECT name, idclient, frontendpath from ".$cclients." WHERE (idclient=".$old_idclient.")";
$db->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/
while ($db->next_record())
{
if ($db->f("idclient")==$old_idclient) {
$old_client_Name=trim($db->f("name"));
$frontendpath = trim($db->f("frontendpath"));
}
}
if ($old_client_Name=="")
{
/* Irgendwas stimmt nicht. vermutlich sind die verwendeten idclient-Nummern falsch */
$Meldung="Zu dem verwendeten Mandantennummern (idclient) ".$old_idclient. " gibt es keinen Mandanten-Namen. Überprüfen Sie die Mandanten-Nummer (idclient) in Ihrem Script. Die Ausführung wird abgebrochen.";
echo "<hr><h3 class='red'>Fehler: <BR>".$Meldung."</h3><hr>";
page_close();
die(); /* Scriptausführung abbrechen */
}
echo "<h3 class='grey'>Ermittlung der Spracheinstellung des Clients/Mandanten...</h3>";
$sql = "SELECT * from ".$clients_lang." WHERE (idclient=".$old_idclient.")";
$db->query($sql);
$merk_idlang_old=0;
while($db->next_record())
{
if ($db->f("idclient")==$old_idclient) $merk_idlang_old=$db->f("idlang");
/*Merke hier die SprachID des alten Mandanten */
/*Nicht benutzt*/
} /* End While */
/* echo "<h3 class='darkgrey'>Sprach-ID des Mandanten: idlang = ".$merk_idlang_old."</h3>"; */
/* Alles OK....leg los */
/* Nun die Baum-Struktur der Kategorien neu aufbauen ??? (steht in Tabelle con_cat_tree) */
/* Wirklich erforderlich für Löschvorgang? Fürs Kopieren, ja! - knb 20051010*/
if ($simulate){//aus globaler form variable
echo "<hr><h1 class='darkgrey'>Simulationsmodus: Lösche den Mandanten >".$old_client_Name."< (idclient ".$old_idclient."):</h1><hr>";
} else {
echo "<hr><h1 class='red'>Lösche den Mandanten >".$old_client_Name."< (idclient ".$old_idclient."):</h1><hr>";
}
echo "<h1 class='red'>START</h1>";
$sql = " DELETE FROM ". $cinuse;
executeSQL($sql, "Entsperre ALLE Objekte, Tabelle $cinuse", "Alle Objekte entsperrt");
$sql = " DELETE FROM ". $ccode. " where idclient = $old_idclient ;";
executeSQL($sql, "Lösche Code aus Cache..., Tabelle $ccode", "Cache geleert");
$sql = " DELETE FROM " . $cstat . " where idclient = $old_idclient ";
executeSQL($sql, "Lösche Statistiktabellen,Tabellen $cstat", "Statistiktabelle $cstat geleert");
$sql = " DELETE FROM " . $cstatarchive . " where idclient = $old_idclient; ";
executeSQL($sql, "Lösche Statistiktabellen,Tabelle $cstatarchive", "Statistiktabelle $cstatarchive geleert");
// Newsletter löschen, Newsletter recipients
$sql = <<<SQL
/* DELETE $cnews.*
FROM $cclients INNER JOIN $cnews ON $cclients.idclient = $cnews.idclient
WHERE ((($cclients.idclient)=$old_idclient));*/
DELETE $cnews.* FROM $cclients , $cnews WHERE $cclients.idclient = $cnews.idclient AND $cclients.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Newsletter für Mandanten..., Tabelle ".$cnews, "Newsletter gelöscht");
$sql = <<<SQL
/* DELETE $cnews_rcp.*
FROM $cclients INNER JOIN $cnews_rcp ON $cclients.idclient = $cnews_rcp.idclient
WHERE ((($cclients.idclient)=$old_idclient)) */
DELETE $cnews_rcp.* FROM $cclients , $cnews_rcp WHERE $cclients.idclient = $cnews_rcp.idclient AND $cclients.idclient=$old_idclient ;
SQL;
executeSQL($sql, "Lösche Newsletter Recipients für Mandanten..., Tabelle $cnews_rcp", "Newsletter Recipients gelöscht");
/*****************************************************************************************/
$sql = <<<SQL
DELETE $ccommunications.*
FROM $ccommunications
WHERE ((($ccommunications.idclient)=$old_idclient));
SQL;
executeSQL($sql, "Lösche Communications Tabelle ".$cproperties, "Communications Tabelle gelöscht");
/* Tabellen die idClient als FK haben */
//Properties
$sql = <<<SQL
DELETE $cproperties.*
FROM $cproperties
WHERE ((($cproperties.idclient)=$old_idclient));
SQL;
executeSQL($sql, "Lösche Properties..., Tabelle ".$cproperties, "Properties gelöscht");
//DB Filesystem Einträge
$sql = <<<SQL
DELETE $cdbfs.*
FROM $cdbfs
WHERE ((($cdbfs.idclient)=$old_idclient));
SQL;
executeSQL($sql, "Lösche DB Filesystem Einträge, Tabelle ".$cdbfs, "DB Filesystem Einträge gelöscht");
//Uploads
$sql = <<<SQL
DELETE $cupl.*
FROM $cupl
WHERE ((($cupl.idclient)=$old_idclient));
SQL;
executeSQL($sql, "Lösche Uploads..., Tabelle ".$cupl, "Uploads gelöscht");
//Plugins
$sql = <<<SQL
DELETE $cplugins.*
FROM $cplugins
WHERE ((($cplugins.idclient)=$old_idclient));
SQL;
executeSQL($sql, "Lösche Plugins..., Tabelle ".$cplugins, "Plugins gelöscht");
//Artikelspezifikationen
$sql = " DELETE FROM $cart_spec where client = $old_idclient ;";
executeSQL($sql, "Lösche Artikelspezifikationen..., Tabelle $cart_spec", "Artikelspezifikationen gelöscht");
//keywords
$sql = <<<SQL
/*
DELETE $ckeywords.*
FROM ($crights INNER JOIN $clang ON $crights.idlang = $clang.idlang) INNER JOIN $ckeywords ON $clang.idlang = $ckeywords.idlang
WHERE ((($crights.idclient)= $old_idclient));
*/
DELETE $ckeywords.*
FROM $crights , $clang , $ckeywords
WHERE $clang.idlang = $ckeywords.idlang AND $crights.idlang = $clang.idlang AND $crights.idclient= $old_idclient;
SQL;
// kann recht lange dauern
executeSQL($sql, "Lösche Keywords für Sprachversion der Artikel..., Tabelle ".$ckeywords, "Keywords gelöscht");
//sprachen
$sql = <<<SQL
/* DELETE $clang.*
FROM $crights INNER JOIN $clang ON $crights.idlang = $clang.idlang
WHERE ((($crights.idclient)= $old_idclient));*/
DELETE $clang.* FROM $crights , $clang WHERE $crights.idlang = $clang.idlang AND $crights.idclient= $old_idclient;
SQL;
executeSQL($sql, "Lösche Sprachen für Artikel..., Tabelle ".$clang, "Sprachen gelöscht");
//rechte in Backenduserverwaltung
$sql = <<<SQL
DELETE $crights.*
FROM $crights
WHERE ((($crights.idclient)= $old_idclient));
SQL;
executeSQL($sql, "Lösche Rechte für Objekte..., Tabelle ".$crights, "Backenduserrechte an Objekten gelöscht");
/*****************************************************************************************/
/*ARTIKEL Löschen*/
// Metatags löschen
$sql = <<<SQL
/*
DELETE $cmetatag.*
FROM ($cart_lang
INNER JOIN $cart ON $cart_lang.idart=$cart.idart)
INNER JOIN $cmetatag ON $cart_lang.idartlang=$cmetatag.idartlang
WHERE ((($cart.idclient)=$old_idclient));
*/
DELETE $cmetatag.*
FROM $cart_lang , $cart , $cmetatag
WHERE $cart_lang.idartlang=$cmetatag.idartlang AND $cart_lang.idart=$cart.idart AND $cart.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Metatags für Artikel..., Tabelle ".$cmetatag, "Metatags gelöscht");
// lösche Links zu Artikeln
$sql = <<<SQL
/* DELETE $clink.*
FROM $clink INNER JOIN $cart ON $clink.idart = $cart.idart
WHERE ((($cart.idclient)=$old_idclient));*/
DELETE $clink.* FROM $clink , $cart WHERE $clink.idart = $cart.idart AND $cart.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Links zu Artikeln..., Tabelle ".$clink, "Links gelöscht");
//Content Löschen
$sql = <<<SQL
/*
DELETE $ccontent.*
FROM ($ccontent
INNER JOIN $cart_lang ON $ccontent.idartlang = $cart_lang.idartlang)
INNER JOIN $cart ON $cart_lang.idart = $cart.idart
WHERE ((($cart.idclient)=$old_idclient)) */
DELETE $ccontent.* FROM $ccontent , $cart_lang , $cart
WHERE $cart_lang.idart = $cart.idart AND $ccontent.idartlang = $cart_lang.idartlang AND $cart.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Texte der Artikel, Tabelle ".$ccontent, "Content gelöscht");
/* ermittel alle Einträge des zu Löschenden Mandanten*/
//$sql = "DELETE from ".$cart_lang." where idlang = ".$merk_idlang_old."";
$sql = <<<SQL
/* DELETE $cart_lang.*
FROM $cart INNER JOIN $cart_lang ON $cart.idart = $cart_lang.idart
WHERE ((($cart.idclient)=$old_idclient));*/
DELETE $cart_lang.* FROM $cart , $cart_lang WHERE $cart.idart = $cart_lang.idart AND $cart.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Metadaten der Artikel, Tabelle ".$cart_lang, "Metadaten gelöscht");
/* ermittel alle Artikel des zu Löschenden Mandanten */
$sql = "DELETE from ".$cart." where idclient=".$old_idclient;
executeSQL($sql, "Lösche Artikel, Tabelle ".$cart, "Die Artikel wurden gelöscht.");
echo "<hr>";
/*****************************************************************************************/
/* KATEGORIEN Löschen */
// lösche verknüpfungen kategorie => artikel
$sql = <<<SQL
/*
DELETE $ccatart.*
FROM $cart INNER JOIN $ccatart ON $cart.idart = $ccatart.idart
WHERE ((($cart.idclient)=$old_idclient)); */
DELETE $ccatart.* FROM $cart , $ccatart WHERE $cart.idart = $ccatart.idart AND $cart.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Zuordnungen der Artikel zu den Kategorien, Tabelle ".$ccatart, "Kategorie-Zuordnungen gelöscht");
//User-defined Properties, gebunden an cat_lang
$sql = <<<SQL
/*
DELETE $cuser_prop.*
FROM ($ccat
INNER JOIN $ccatlang ON $ccat.idcat = $ccatlang.idcat)
INNER JOIN $cuser_prop ON $ccatlang.idcatlang = $cuser_prop.idcatlang
WHERE ((($ccat.idclient)=$old_idclient));
*/
DELETE $cuser_prop.* FROM $ccat , $ccatlang , $cuser_prop WHERE $ccatlang.idcatlang = $cuser_prop.idcatlang AND $ccat.idcat = $ccatlang.idcat AND $ccat.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche User-defined Properties, Tabelle ".$cuser_prop, "User-defined Properties gelöscht");
//Group-defined Properties, gebunden an cat_lang
$sql = <<<SQL
/*
DELETE $cgroup_prop.*
FROM ($ccat
INNER JOIN $ccatlang ON $ccat.idcat = $ccatlang.idcat)
INNER JOIN $cgroup_prop ON $ccatlang.idcatlang = $cgroup_prop.idcatlang
WHERE ((($ccat.idclient)=$old_idclient)); */
DELETE $cgroup_prop.*
FROM $ccat , $ccatlang , $cgroup_prop
WHERE $ccatlang.idcatlang = $cgroup_prop.idcatlang AND $ccat.idcat = $ccatlang.idcat AND $ccat.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Group-defined Properties, Tabelle ".$cgroup_prop, "Group-defined Properties gelöscht");
/* Nun müssen die Bezeichnungen der Kategorien gelöscht werden (steht in Tabelle con_cat_lang) */
$sql = <<<SQL
/* DELETE $ccatlang.*
FROM $ccat
INNER JOIN $ccatlang ON $ccat.idcat=$ccatlang.idcat
WHERE ((($ccat.idclient)=$old_idclient)); */
DELETE $ccatlang.* FROM $ccat , $ccatlang WHERE $ccat.idcat=$ccatlang.idcat AND $ccat.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Kategoriebezeichnungen , Tabelle ".$ccatlang, "Die Kategoriebezeichnungen wurden gelöscht.");
/* lese aus der Tabelle con_cat alle Kategorien des zu Löschenden Mandanten ($old_idclient) aus */
$sql = "DELETE from ".$ccat." where idclient=".$old_idclient;
executeSQL($sql, "Lösche die Kategorien/Menüs, Tabelle ".$ccat, "Die Kategorien wurden gelöscht.");
/* Nun die Baum-Struktur der Kategorien neu aufbauen ??? (steht in Tabelle con_cat_tree) */
/* Wirklich erforderlich für Löschvorgang? Fürs Kopieren, ja! - knb 20051010*/
echo "<hr><h2 class='red'>--Neuaufbau Tabelle *Cat_Tree (betrifft ALLE Mandanten)</h2><hr>"; /* Contenido Funktion in includes\functions.str.php */
if ($simulate){//aus globaler form variable
echo "<h3 class='blue'>--Simulationsmodus strRemakeTreeTable() </h3>";
echo "<h3 class='blue'>--Die Funktion strRemakeTreeTable() aus functions.str.php wurde NICHT ausgeführt</h3> (schreibt die Tabelle con_cat_tree neu für die Navigation/Baumstruktur)";
} else {
strRemakeTreeTable(); /* Contenido Funktion in includes\functions.str.php */
echo "<h3 class='red'>Die Funktion strRemakeTreeTable() aus functions.str.php wurde ausgeführt</h3> (schreibt die Tabelle con_cat_tree neu für die Navigation/Baumstruktur)";
}
echo "<h3>--Neuaufbau von *Cat_Tree abgeschlossen</h3>"; /* Contenido Funktion in includes\functions.str.php */
/*****************************************************************************************/
/*CONTAINER Löschen - sollte passieren bevor templates gelöscht werden*/
/*CONTAINER CONF Löschen - */
$sql = <<<SQL
/* DELETE $ccontainerconf.*
FROM ($ctpl
INNER JOIN $ctplconf ON $ctpl.idtplcfg = $ctplconf.idtplcfg)
INNER JOIN $ccontainerconf ON $ctplconf.idtplcfg = $ccontainerconf.idtplcfg
WHERE ((($ctpl.idclient)=$old_idclient));*/
DELETE $ccontainerconf.* FROM $ctpl , $ctplconf , $ccontainerconf
WHERE $ctplconf.idtplcfg = $ccontainerconf.idtplcfg
AND $ctpl.idtplcfg = $ctplconf.idtplcfg AND $ctpl.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche die Container Config für Templates, Tabelle ".$ccontainerconf, "Container Confs wurden gelöscht.");
/* Die Container sind nur an den Index der Templates gebunden, nicht direkt an die idClient, also nicht direkt an den Mandanten */
$sql = <<<SQL
/* DELETE $ccontainer.*
FROM $ccontainer
INNER JOIN $ctpl ON $ccontainer.idtpl = $ctpl.idtpl
WHERE ((($ctpl.idclient)=$old_idclient));
*/
DELETE $ccontainer.* FROM $ccontainer , $ctpl WHERE $ccontainer.idtpl = $ctpl.idtpl AND $ctpl.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche die Container, Tabelle ".$ccontainer, "Die Container wurden gelöscht.", "Die Bezeichnungen der Kategorien wurden gelöscht.");
/*****************************************************************************************/
/*TEMPLATES Löschen*/
$sql = <<<SQL
/* DELETE $ctplconf.*
FROM ($cclients
INNER JOIN $ctpl ON $cclients.idclient = $ctpl.idclient)
INNER JOIN $ctplconf ON $ctpl.idtplcfg = $ctplconf.idtplcfg
WHERE ((($cclients.idclient)=$old_idclient)); */
DELETE $ctplconf.* FROM $cclients , $ctpl , $ctplconf
WHERE $ctpl.idtplcfg = $ctplconf.idtplcfg AND $cclients.idclient = $ctpl.idclient AND $cclients.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Templates-Konfiguration, Tabelle ". $ctplconf, "Templates-Konfigurationen gelöscht");
/* Lösche nun die Daten der Tabelle con_Templates */
$sql = "DELETE from ".$ctpl." where idclient=".$old_idclient."";
executeSQL($sql, "Lösche Templates, Tabelle ". $ctpl, "Templates gelöscht");
/*****************************************************************************************/
/*LAYOUTS Löschen*/
$sql = "DELETE from ".$clay." where idclient=".$old_idclient;
executeSQL($sql, "Lösche Layouts, Tabelle ". $clay, "Layouts gelöscht");
/*****************************************************************************************/
/*Module Löschen*/
/* ermittel alle Module des zu Löschenden Kunden */
$sql = <<<SQL
/* DELETE $cmod_translations.*
FROM $cmod INNER JOIN $cmod_translations ON $cmod.idmod = $cmod_translations.idmod
WHERE ((($cmod.idclient)=$old_idclient));*/
DELETE $cmod_translations.*
FROM $cmod , $cmod_translations
WHERE $cmod.idmod = $cmod_translations.idmod AND $cmod.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Module Translations, Tabelle $cmod_translations" , "Module Translations gelöscht");
$sql = "DELETE $cmod_history.* FROM $cmod_history WHERE ((($cmod_history.idclient)=$old_idclient))";
executeSQL($sql, "Lösche Module History, Tabelle ". $cmod_history , "Module History gelöscht");
$sql = "DELETE from ".$cmod." where idclient=".$old_idclient;
executeSQL($sql, "Lösche Modules, Tabelle ". $cmod, "Modules gelöscht");
/* ############################################################## */
$sql = <<<SQL
/* DELETE $cnews_groupmembers.*
FROM $cnews_groupmembers INNER JOIN $cnews_groups ON $cnews_groupmembers.idnewsgroup = $cnews_groups.idnewsgroup
WHERE ((($cnews_groups.idclient)=$old_idclient));*/
DELETE $cnews_groupmembers.*
FROM $cnews_groupmembers , $cnews_groups
WHERE $cnews_groupmembers.idnewsgroup = $cnews_groups.idnewsgroup AND $cnews_groups.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Newsletter Group Members , Tabelle ". $cnews_groupmembers , "Newsletter Group Members gelöscht");
$sql = <<<SQL
DELETE $cnews_groups.*
FROM $cnews_groups
WHERE ((($cnews_groups.idclient)=$old_idclient));
SQL;
executeSQL($sql, "Lösche Newsletter Groups, Tabelle ". $cnews_groups , "Newsletter Groups gelöscht");
//idclient aus frontend* tabellen rauslöschen
$sql = <<<SQL
/* DELETE $cfrontendpermissions.*
FROM $cfrontendgroups
INNER JOIN $cfrontendpermissions ON $cfrontendgroups.idfrontendgroup = $cfrontendpermissions.idfrontendgroup
WHERE ((($cfrontendgroups.idclient)=$old_idclient));*/
DELETE $cfrontendpermissions.*
FROM $cfrontendgroups , $cfrontendpermissions
WHERE $cfrontendgroups.idfrontendgroup = $cfrontendpermissions.idfrontendgroup AND $cfrontendgroups.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Frontend Permissions, Tabelle ". $cfrontendpermissions , "Frontend Permissions gelöscht");
$sql = <<<SQL
/* DELETE $cfrontendgroupmembers.*
FROM $cfrontendgroupmembers INNER JOIN $cfrontendusers ON $cfrontendgroupmembers.idfrontenduser = $cfrontendusers.idfrontenduser
WHERE ((($cfrontendusers.idclient)=$old_idclient));*/
DELETE $cfrontendgroupmembers.*
FROM $cfrontendgroupmembers , $cfrontendusers
WHERE $cfrontendgroupmembers.idfrontenduser = $cfrontendusers.idfrontenduser AND $cfrontendusers.idclient=$old_idclient;
SQL;
executeSQL($sql, "Lösche Frontend Group Members , Tabelle ". $cfrontendgroupmembers , "Frontend Group Members gelöscht");
$sql = <<<SQL
DELETE $cfrontendgroups.*
FROM $cfrontendgroups
WHERE ((($cfrontendgroups.idclient)=$old_idclient));
SQL;
executeSQL($sql, "Lösche Frontend Groups, Tabelle ". $cfrontendgroups , "Frontend Groups history gelöscht");
$sql = <<<SQL
DELETE $cfrontendusers.*
FROM $cfrontendusers
WHERE ((($cfrontendusers.idclient)=$old_idclient));
SQL;
executeSQL($sql, "Lösche Frontendusers, Tabelle ". $cfrontendusers , "Frontendusers gelöscht");
/*****************************************************************************************/
/* Client löschen Löschen*/
$sql = "DELETE from ".$cclients." where idclient=".$old_idclient;
executeSQL($sql, "Lösche CLIENT ". $cclients, "Client gelöscht");
//echo "<p class='darkgrey'>Es wurden alle Sprachen, Nutzerrechte an Objekten, Newsletter, Links, Newsletter-Recipients, Metatags, Artikel, Kategorien, Container, Templates, Layouts, und Module gelöscht.";
//echo "<br>Und natürlich der Client selbst.<br>";
echo "<h1 class='red'>FERTIG</h1>";
echo "<h3 class='grey'>Das Directory <br>$frontendpath<br>auf dem Webserver wurde nicht gelöscht. <br>
Es sollte möglicherweise per ftp-Tool oder von der Kommandozeile aus gelöscht werden.</h3>";
?>
</body>
</html>
<?php
// simple function to wrap redundant things up
function executeSQL($sql=false, $msg1, $msg2) {
global $db, $cfg, $simulate;
if ($sql) {
echo "<hr><h2 class='grey'>--$msg1</h2><hr>\n";
//echo SQl if simulate is checked
if ($simulate){//aus globaler form variable
echo "<h3 class='grey'>--Simulationsmodus<br>$sql</h3>\n";
} else {
$db->query($sql);
echo "<h3 class='blue'>Ausgeführt: $sql</h3>\n";
}
$err = mysql_error();
if($err == ''){
echo "<h3 class='blue'>--$msg2</h3>\n";
} else {
echo "<h3 class='red'>--FAILURE of SQL<br>$sql<br> DB said:<br>$err</h3>\n";
$err="";
}
//echo "<h1><font color='#0055dd'>--...Done.</font></h1>";
}
}
?>