kennt jemand eine (vielleicht einfache) Möglichkeit eine Kategorie inclusive der Unterobjekte zu löschen? Mit IPS_DeleteCategory werden die Unterobjekte ja in Root verschoben.
Mir würde als Workaround nur einfallen erst die Childs mit Typ zu ermittlen und dann per IPS_DeleteScript, IPS_DeleteVariable usw. jeweils zu löschen. Natürlich verdammt umständlich… geht das vielleicht einfacher?
gruß
goran
edit: Mir fällt da gerade ein, vielleicht wäre das in „Skripte, PHP, SQL“ doch besser aufgehoben? Geht ja um ein Skript, wenn auch nicht um normale Php befehle? Wenn dem so sein sollte, dann bitte ich eine Mod das zu verschieben.
aaah, Rekursiv… danach hatte ich dann doch nicht gesucht
so ungefähr hatte ich mir das auch vorgestellt, aber als Php-legastheniker hätte ich dafür bestimmt 3 Tage gebraucht… So habe ich schon mal eine Vorlage.
Aber Scripte werden damit nicht gelöscht, oder? Macht ja nix, das bekomme sogar ich noch mit reingebastelt…
Hi, der IPSInstaller hat ebenfalls entsprechende Funktionen drinnen, hier mal der wesentliche Auszug:
/** Löschen einer Kategory inklusve Inhalt
*
* Die Funktion löscht eine Kategory, vor dem Löschen werden noch alle beinhaltenden Objekte
* aus der Kategory gelöscht.
*
* @param integer $CategoryId ID der Kategory
*
*/
function DeleteCategory($CategoryId) {
EmptyCategory($CategoryId);
Debug ("Delete Category ID=$CategoryId");
IPS_DeleteCategory($CategoryId);
}
/** Löschen eines beliebigen Objektes
*
* Die Funktion löscht ein IP-Symcon Object mit der übergebenen ID.
*
* @param integer $objectId ID des Objektes
*
*/
function DeleteObject($ObjectId) {
$Object = IPS_GetObject($ObjectId);
$ObjectType = $Object['ObjectType'];
switch ($ObjectType) {
case 0: // Category
DeleteCategory($ObjectId);
break;
case 1: // Instance
EmptyCategory($ObjectId);
IPS_DeleteInstance($ObjectId);
break;
case 2: // Variable
IPS_DeleteVariable($ObjectId);
break;
case 3: // Script
IPS_DeleteScript($ObjectId, false);
break;
case 4: // Event
IPS_DeleteEvent($ObjectId);
break;
case 5: // Media
IPS_DeleteMedia($ObjectId, true);
break;
case 6: // Link
IPS_DeleteLink($ObjectId);
break;
default:
Error ("Found unknown ObjectType $ObjectType");
}
}
/** Löschen des Inhalts einer Kategorie inklusve Inhalt
*
* Die Funktion löscht den gesamtem Inhalt einer Kategorie
*
* @param integer $CategoryId ID der Kategory
*
*/
function EmptyCategory($CategoryId) {
if ($CategoryId==0) {
Error ("Root Category could NOT ne deleted!!!");
}
$ChildrenIds = IPS_GetChildrenIDs($CategoryId);
foreach ($ChildrenIds as $ObjectId) {
DeleteObject($ObjectId);
}
Debug ("Empty Category ID=$CategoryId");
}
function Debug($msg) {
if (isset($_IPS['MODULEMANAGER'])) {
$moduleManager = $_IPS['MODULEMANAGER'];
$moduleManager->LogHandler()->Debug($msg);
} elseif (isset($_IPS['SENDER']) and $_IPS['SENDER']=='WebFront') {
} else {
echo $msg.PHP_EOL;
}
}
function Error($msg) {
if (isset($_IPS['MODULEMANAGER'])) {
$moduleManager = $_IPS['MODULEMANAGER'];
$moduleManager->LogHandler()->Error($msg);
} else {
echo $msg.PHP_EOL;
}
throw new Exception($msg);
}