Hi,
entweder hab ich es nicht gefunden, es braucht (fast) keiner oder was auch immer, aber bis auf eine Nachfrage gibt es wohl noch nichts zu einem Kopierscript, oder?
Also hab ich eins gebaut.
<?
// ID der Variable, wo die Quelle drin steht
$Quelle = GetValue (19601 /*[Testdatenmanipulation\Kopierer\Quelle]*/);
$Ziel = GetValue (49605 /*[Testdatenmanipulation\Kopierer\Ziel]*/);
$eigeneID = 46395;
$Rekursive = GetValueBoolean(42292);
$NeuesObjekt = '';
// Quelle auslesen
$Quellobjekt = IPS_GetObject($Quelle);
if ($Quellobjekt['ObjectType'] == 0) {
$NeueKategorie = IPS_CreateCategory();
IPS_SetName($NeueKategorie, $Quellobjekt['ObjectName']);
IPS_SetInfo($NeueKategorie, $Quellobjekt['ObjectInfo']);
IPS_SetIcon($NeueKategorie, $Quellobjekt['ObjectIcon']);
IPS_SetPosition($NeueKategorie, $Quellobjekt['ObjectPosition']);
IPS_SetHidden($NeueKategorie, $Quellobjekt['ObjectIsHidden']);
IPS_SetIdent($NeueKategorie, $Quellobjekt['ObjectIdent']);
IPS_SetParent($NeueKategorie, $Ziel);
$NeuesObjekt = $NeueKategorie;
}
if ($Quellobjekt['ObjectType'] == 1) {
$Quellinstance = IPS_GetInstance($Quelle);
$NeueInstance = IPS_CreateInstance($Quellinstance['ModuleInfo']['ModuleID']);
IPS_SetName($NeueInstance, $Quellobjekt['ObjectName']);
IPS_SetInfo($NeueInstance, $Quellobjekt['ObjectInfo']);
IPS_SetIcon($NeueInstance, $Quellobjekt['ObjectIcon']);
IPS_SetPosition($NeueInstance, $Quellobjekt['ObjectPosition']);
IPS_SetHidden($NeueInstance, $Quellobjekt['ObjectIsHidden']);
IPS_SetIdent($NeueInstance, $Quellobjekt['ObjectIdent']);
IPS_SetParent($NeueInstance, $Ziel);
$NeuesObjekt = $NeueInstance;
}
if ($Quellobjekt['ObjectType'] == 2) {
$Quellvariable = IPS_GetVariable($Quelle);
$NeueVariable = IPS_CreateVariable($Quellvariable['VariableValue']['ValueType']);
IPS_SetName($NeueVariable, $Quellobjekt['ObjectName']);
IPS_SetInfo($NeueVariable, $Quellobjekt['ObjectInfo']);
IPS_SetIcon($NeueVariable, $Quellobjekt['ObjectIcon']);
IPS_SetPosition($NeueVariable, $Quellobjekt['ObjectPosition']);
IPS_SetHidden($NeueVariable, $Quellobjekt['ObjectIsHidden']);
IPS_SetIdent($NeueVariable, $Quellobjekt['ObjectIdent']);
IPS_SetVariableCustomProfile ($NeueVariable, $Quellvariable['VariableCustomProfile']);
IPS_SetVariableCustomAction ($NeueVariable, $Quellvariable['VariableCustomAction']);
IPS_SetParent($NeueVariable, $Ziel);
$NeuesObjekt = $NeueVariable;
}
if ($Quellobjekt['ObjectType'] == 3) {
$QuellScript = IPS_GetScript($Quelle);
$NeuesScript = IPS_CreateScript($QuellScript['ScriptType']);
IPS_SetName($NeuesScript, $Quellobjekt['ObjectName']);
IPS_SetInfo($NeuesScript, $Quellobjekt['ObjectInfo']);
IPS_SetIcon($NeuesScript, $Quellobjekt['ObjectIcon']);
IPS_SetPosition($NeuesScript, $Quellobjekt['ObjectPosition']);
IPS_SetHidden($NeuesScript, $Quellobjekt['ObjectIsHidden']);
IPS_SetIdent($NeuesScript, $Quellobjekt['ObjectIdent']);
$zeilen = file (IPS_GetKernelDir()."scripts\\".$QuellScript['ScriptFile']);
$fh = fopen(IPS_GetKernelDir()."scripts\\".$NeuesScript.".ips.php", 'w') or die("can't open file");
foreach ($zeilen as $zeile) {
fwrite($fh, $zeile);
}
fclose($fh);
$ScriptPath = $NeuesScript.".ips.php"; //Skriptdatei
IPS_SetScriptFile($NeuesScript, $ScriptPath);
IPS_SetParent($NeuesScript, $Ziel);
$NeuesObjekt = $NeuesScript;
}
if ($Quellobjekt['ObjectType'] == 4) {
$QuellEreignis = IPS_GetEvent($Quelle);
$NeuesEvent = IPS_CreateEvent($QuellEreignis['EventType']);
//IPS_SetName($NeuesEvent, $Quellobjekt['ObjectName']);
IPS_SetInfo($NeuesEvent, $Quellobjekt['ObjectInfo']);
IPS_SetIcon($NeuesEvent, $Quellobjekt['ObjectIcon']);
IPS_SetPosition($NeuesEvent, $Quellobjekt['ObjectPosition']);
IPS_SetHidden($NeuesEvent, $Quellobjekt['ObjectIsHidden']);
IPS_SetIdent($NeuesEvent, $Quellobjekt['ObjectIdent']);
if ($QuellEreignis['EventType'] == 1) {
IPS_SetEventCyclic ($NeuesEvent, $QuellEreignis['CyclicDateType'],$QuellEreignis['CyclicDateValue'],$QuellEreignis['CyclicDateDay'],$QuellEreignis['CyclicDateDayValue'],$QuellEreignis['CyclicTimeType'],$QuellEreignis['CyclicTimeValue']);
} else {
echo $QuellEreignis['TriggerVariableID'];
IPS_SetEventTrigger ($NeuesEvent, $QuellEreignis['TriggerType'],$QuellEreignis['TriggerVariableID']);
}
IPS_SetEventLimit ($NeuesEvent, $QuellEreignis['EventLimit']);
IPS_SetEventScript ($NeuesEvent, $QuellEreignis['EventScript']);
IPS_SetEventActive ($NeuesEvent, $QuellEreignis['EventActive']);
IPS_SetParent($NeuesEvent, $Ziel);
$NeuesObjekt = $NeuesEvent;
}
if ($Quellobjekt['ObjectType'] == 5) {
$QuellMedia = IPS_GetMedia($Quelle);
$NeueMedia = IPS_CreateMedia($QuellMedia['MediaType']);
IPS_SetName($NeueMedia, $Quellobjekt['ObjectName']);
IPS_SetInfo($NeueMedia, $Quellobjekt['ObjectInfo']);
IPS_SetIcon($NeueMedia, $Quellobjekt['ObjectIcon']);
IPS_SetPosition($NeueMedia, $Quellobjekt['ObjectPosition']);
IPS_SetHidden($NeueMedia, $Quellobjekt['ObjectIsHidden']);
IPS_SetIdent($NeueMedia, $Quellobjekt['ObjectIdent']);
IPS_SetMediaFile($NeueMedia,$QuellMedia['MediaFile'], false);
IPS_SetParent($NeueMedia, $Ziel);
$NeuesObjekt = $NeueMedia;
}
if ($Quellobjekt['ObjectType'] == 6) {
$QuellLink = IPS_GetMedia($Quelle);
$NeuerLink = IPS_CreateLink();
IPS_SetName($NeuerLink, $Quellobjekt['ObjectName']);
IPS_SetInfo($NeuerLink, $Quellobjekt['ObjectInfo']);
IPS_SetIcon($NeuerLink, $Quellobjekt['ObjectIcon']);
IPS_SetPosition($NeuerLink, $Quellobjekt['ObjectPosition']);
IPS_SetHidden($NeuerLink, $Quellobjekt['ObjectIsHidden']);
IPS_SetIdent($NeuerLink, $Quellobjekt['ObjectIdent']);
IPS_SetLinkChild($NeuerLink,$QuellLink['LinkChildID']);
IPS_SetParent($NeuerLink, $Ziel);
$NeuesObjekt = $NeuerLink;
}
if ($Rekursive) {
$kinder = $Quellobjekt['ChildrenIDs'];
foreach ($kinder as $child ){
SetValue(19601, $child);
$merker = $NeuesObjekt;
SetValue(49605, $NeuesObjekt);
IPS_RunScriptWait($eigeneID);
$NeuesObjekt = $merker;
}
}
?>
Als Skript abspeichern, die 3 ersten Zeilen befüllen, dafür braucht ihr 3 neue Variablen, die Quelle (Integer), das Ziel (Integer) und den Rekursive-Schalter (Boolean).
In die Quelle tragt ihr ein, was ihr kopieren möchtet.
In das Ziel tragt ihr ein, wo es landen soll (also die Mutter im Tree)
Rekursive True heisst, das Ding kopiert alles was da drunter hängt, false nur den einen Eintrag.
Viel Spaß damit!
//Achtung, wichtiger Hinweis:
Das Ding kopiert alles mit Mann und Maus, so wie es in der Quelle steht. Das kann bei Links, Events und Medien vielleicht zu ungewünschten Ereignissen führen (falls z.B. der Link sich auf einen Teil des selben Baums bezog, so macht die Kopie ja wenig Sinn, weil sie sich auf den alten Baum bezieht. Genauso Events. Aber wenigstens sind sie dann da und ihr könnt sie anpassen.