Mandanten kopieren...hier das fehlerfreie Script

Axel
Beiträge: 82
Registriert: Di 26. Aug 2003, 08:35
Kontaktdaten:

Mandanten kopieren...hier das fehlerfreie Script

Beitrag von Axel » Do 22. Jan 2004, 15:19

Hier also das lauffähige Script um alle Templates, Kategorien, Layouts, Container und Module eines Mandanten auf einen anderen zu kopieren.

Script als .php Datei abspeichern und in einem Ordner über dem Contenido-Verzeichnis abspeichern. Vor dem Starten des Scriptes im Broeser noch die idclient des zu kopierenden Mandanten ($old_idclient) und die des Mandanten, auf den kopiert werden soll ($new_idclient) eintragen.

Code: Alles auswählen

<?
/* Script um Kunden zu kopieren
 * Für Contenido 4.4.2 (Für andere Versionen nicht getestet)
 * Autor: Axel Womatschka
 * Datum: 21.01.2004
 
 * Dieses Script kopiert die Module, Layouts, Templates, Container und auf Wunsch auch Kategorien
 * von einem Kunden (Mandanten) ($old_idclient) auf den anderen ($new_idclient)
 * Beide müssen bereits existieren.
*/
 

/* In der config.php stehen die Basisvariablen von Contenido. In der config.php
 * werden zudem via Include noch folgende Dateien geladen
 * cfg_sql.inc.php (Hier stehen die Tabellennamen)
 * prepend.php3 (Hier werden weitere Dateien via require geladen, die das Sessions-Managment der MySQL-DB regeln
 *               unter anderem auch die my_sql.inc)
 *
*/

include "../contenido/includes/config.php"; /* Die braucht man immer */

/* MACHE DEINE INDIVIDUELLEN ANGABEN HIER*******************************************************/
    /* Neuer Kunde auf den kopiert werden soll. Dieser muss vorher angelegt werden*/
    $new_idclient=4;
    /* Kunde, der kopiert werden soll */
    $old_idclient=1;
    /*Auch die Kategorien (Menübaum) mit kopieren? */
    $CopyKategorien=1; /* 0=Nein, 1=Ja */
/***********************************************************************************************/

/* Instanz der Klasse DB_Sql (die ist in der Datei my_sql.inc zu finden)*/
$db1 = new DB_Sql();
$db1->Host    = $contenido_host;
$db1->Database    = $contenido_database;
$db1->User    = $contenido_user;
$db1->Password    = $contenido_password;

$db2 = new DB_Sql();
$db2->Host    = $contenido_host;
$db2->Database    = $contenido_database;
$db2->User    = $contenido_user;
$db2->Password    = $contenido_password;

$new_client_Name="";
$old_client_Name="";

/* Für die Layouts */
$ArrIdxAltLayout=array();
$ArrIdxNeuLayout=array();

/* Für die Module */
$ArrIdxAltModul=array();
$ArrIdxNeuModul=array();

/* Für die Templates */
$ArrIdxAltTpl=array();
$ArrIdxNeuTpl=array();
$ArrIdxAltTplConf=array();
$ArrIdxNeuTplConf=array();

/* Für die Kategorien */
$ArrIdxAltKat=array();
$ArrIdxNeuKat=array();

/* Ermittel Kundennamen und prüfe die Gültigkeit der idclient-Nummern */
$sql = "SELECT idclient, name from ".$cfg["tab"]["clients"]." where (idclient=".$old_idclient." OR idclient=".$new_idclient.")";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/
while ($db1->next_record())
    {
        if ($db1->Record[0]==$new_idclient) $new_client_Name=trim($db1->Record[1]);
        if ($db1->Record[0]==$old_idclient) $old_client_Name=trim($db1->Record[1]);
    }
if ($old_client_Name=="" OR $new_client_Name=="")
{
/* Irgendwas stimmt nicht. vermutlich sind die verwendeten idclient-Nummern falsch */
$Meldung="Zu den verwendeten Mandantennummern (idclient) ".$old_idclient." und ".$new_idclient." gibt es keinen Mandanten-Namen. Überprüfen Sie die Mandanten-Nummern (idclient) in Ihrem Script. Die Ausführung wird abgebrochen.";
echo "<hr><h3><font face='Arial' color='#ff0000'>Fehler: <BR>".$Meldung."</font></h3><hr>";
die($Meldung); /* Scriptausführung abbrechen */
}

/* Alles OK....leg los */
echo "<hr><h1><font face='Arial' color='#ff0000'>Kopiere den Mandanten >".$old_client_Name."< (idclient ".$old_idclient.") auf den Mandanten >".$new_client_Name."< (idclient ".$new_idclient."):</font></h1><hr>";

/*****************************************************************************************/
/*Module KOPIEREN*/
/* ermittel alle Module des zu kopierenden Kunden */
$sql = "SELECT * from ".$cfg["tab"]["mod"]." where idclient=".$old_idclient;
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* In der Tabelle con_sequence stehen die Werte der Indizes der Primärschlüssel !
   Lese daher erst hier den aktuelen Index-Wert für die Tabelle con_mod aus */
$MyModSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["mod"]."'";
$db2->query($sql);
if ($db2->next_record())
{
$MyModSeq=$db2->Record[0];
$MyModSeq++; /* erhöhe um 1 */
}

$sql="";
$lauf=0;
/* $db1->next_record() liefert Zeiger auf nächsten Datensatz, der noch nicht
ausgelesen wurde und gibt ein Array in der Eigenschaft Record zurück */
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die folgenden Module:</font></h2>";
while($db1->next_record())
{
  echo "<font face='Arial' color='#000000'>".$db1->Record[2]."</font><BR>"; /* Index 2 des Arrays. Entspricht dem Inhalt der 2.ten Datenspalte der Tabelle con_mod..das ist der Modulname */

  $lauf++;
  $sql = "INSERT INTO ".$cfg["tab"]["mod"]." VALUES ('".$MyModSeq."','".$new_idclient."'";

  $db1->Record[4]="YES"; /* Spalte deletable der Tabelle con_mod */
  
  /*Merke im Array $ArrIdxAltModule[] den Index (idmod) der Module des alten Mandanten */
  $ArrIdxAltModule[]=$db1->Record[0];
  /*Merke im Array $ArrIdxNeuModule[] den Index (idmod) der Module des neuen Mandanten */
  $ArrIdxNeuModule[]=$MyModSeq;
  /*Das Merken im Array ist nötig um später noch zu wissen welcher alte idmod welchem neuen idmod entspricht*/
  
  for ($i=2;$i<$db1->num_fields();$i++)
  {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','\"',$cont);

     $sql = $sql ."\"".$cont."\"";
  }

  $sql = $sql .")";
  $db2->query($sql);
  
  /* erhöhe um eins um den neuen maximalen Index-Wert zu merken, der wieder in die Tabelle con_Sequence geschrieben werden muss */
  $MyModSeq++; /* erhöhe um 1 */
}

/* schreibe nun den letzten wert von $MyModSeq bei con_mod in die Tabelle con_sequence */
$MyModSeq=$MyModSeq-1;
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyModSeq." where seq_name = '".$cfg["tab"]["mod"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Module vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["mod"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";

/*****************************************************************************************/
/*LAYOUTS KOPIEREN*/
/* ermittel alle Layouts des zu kopierenden Kunden */
$sql = "SELECT * from ".$cfg["tab"]["lay"]." where idclient=".$old_idclient;
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* In der Tabelle con_sequence stehen die Werte der Indizes der Primärschlüssel !
   Lese daher erst hier den aktuelen Index-Wert für die Tabelle con_mod aus */
$MyLaySeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["lay"]."'";
$db2->query($sql);
if ($db2->next_record())
{
$MyLaySeq=$db2->Record[0];
$MyLaySeq++; /* erhöhe um 1 */
}

$sql="";
$lauf=0;
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die folgenden Layouts:</font></h2>";
while($db1->next_record())
{
  echo "<font face='Arial' color='#000000'>".$db1->Record[2]."</font><BR>"; /* Index 2 des Arrays. Entspricht dem Inhalt der 2.ten Datenspalte der Tabelle con_lay..das ist der Layoutname */

  $lauf++;
  $sql = "INSERT INTO ".$cfg["tab"]["lay"]." VALUES ('".$MyLaySeq."','".$new_idclient."'";

  $db1->Record[4]="YES"; /* Spalte deletable der Tabelle con_lay */
  
  /*Merke im Array $ArrIdxAltLayout[] den Index (idlay) der Layouts des alten Mandanten */
  $ArrIdxAltLayout[]=$db1->Record[0];
  /*Merke im Array $ArrIdxNeuLayout[] den Index (idlay) der Layouts des neuen Mandanten */
  $ArrIdxNeuLayout[]=$MyLaySeq;
  /*Das Merken im Array ist nötig um später noch zu wissen welcher alte idlay welchem neuen idlay entspricht*/
  
  for ($i=2;$i<$db1->num_fields();$i++)
  {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','\"',$cont);

     $sql = $sql ."\"".$cont."\"";
  }

  $sql = $sql .")";
  $db2->query($sql);

  /* erhöhe um eins um den neuen maximalen Index-Wert zu merken, der wieder in die Tabelle con_Sequence geschrieben werden muss */
  $MyLaySeq++; /* erhöhe um 1 */
}

/* schreibe nun den letzten wert von $MyLaySeq bei con_lay in die Tabelle con_sequence */
$MyLaySeq=$MyLaySeq-1;
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyLaySeq." where seq_name = '".$cfg["tab"]["lay"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Layouts vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["lay"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";


/*****************************************************************************************/
/*TEMPLATES KOPIEREN*/
/* In der Tabelle con_sequence stehen die Werte der Indizes der Primärschlüssel !
   Lese daher erst hier den aktuelen Index-Wert für die Tabelle con_template aus */
$MyTplSeq=1;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["tpl"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyTplSeq=$db2->Record[0];

$MyTplConfSeq=1;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["tpl_conf"]."'";
$db2->query($sql);
if ($db2->next_record())
{
$MyTplConfSeq=$db2->Record[0];
$MyTplConfSeq++;
}

/* ermittel alle Templates des zu kopierenden Kunden */
$sql = "SELECT * from ".$cfg["tab"]["tpl"]." where idclient=".$old_idclient." order by idtpl";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/*Lese die idtpl der Templates erst mal in ein Array um sich die alten Indizes zu merken */
while($db1->next_record())
{
  /*Merke im Array $ArrIdxAltLayout[] den Index (idlay) der Layouts des alten Mandanten */
  $ArrIdxAltTpl[]=$db1->Record[2]; /* Spalte idtpl */
  $ArrIdxNeuTpl[]=$MyTplSeq;
  $MyTplSeq++; /* erhöhe um 1 */
  
  $ArrIdxAltTplConf[]=$db1->Record[3]; /* Spalte idtplcfg */
  $ArrIdxNeuTplConf[]=$MyTplConfSeq;
  $MyTplConfSeq++; /* erhöhe um 1 */
}

/*Hinweis:
  $MyTplSeq ist der Wert, der für nextid con_tpl in con_sequence eingetragen werden muss
  $MyTplConfSeq-1 ist der Wert, der für nextid con_tplConf in con_sequence eingetragen werden muss
*/

/* Nun sind alle ID's, die alten und die neuen bekannt. Kopiere nun die Daten der Tabelle con_Templates */
$sql = "SELECT * from ".$cfg["tab"]["tpl"]." where idclient=".$old_idclient." order by idtpl";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die folgenden Templates:</font></h2>";
$lauf=0;
while($db1->next_record())
{
  $lauf++;
  /* Lese nun idlay aus und stelle fest, wo dieser idlay im Array der alten Indizes steht (in ArrIdxAltLayer[]) */
  $ArrPosLay=array_search($db1->Record[1], $ArrIdxAltLayout);
  
  /* Lese nun idtpl aus und stelle fest, wo dieser idtpl im Array der alten Indizes steht (in ArrIdxAltTpl[]) */
  $ArrPosTpl=array_search($db1->Record[2], $ArrIdxAltTpl);
  
  /* dito für idtplconf */
  $ArrPosTplConf=array_search($db1->Record[3], $ArrIdxAltTplConf);
  
  $sql = "INSERT INTO ".$cfg["tab"]["tpl"]." VALUES ('".$new_idclient."'";
  $db1->Record[1]=$ArrIdxNeuLayout[$ArrPosLay];
  $db1->Record[2]=$ArrIdxNeuTpl[$ArrPosTpl];
  $db1->Record[3]=$ArrIdxNeuTplConf[$ArrPosTplConf];
  
  echo "<font face='Arial' color='#000000'>".$db1->Record[4]."</font><BR>";
  
  for ($i=1;$i<$db1->num_fields();$i++)
  {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','\"',$cont);

     $sql = $sql ."\"".$cont."\"";
  }

  $sql = $sql .")";
  $db2->query($sql);
  
  /*Neuen Datensatz auch in Tabelle tplconf */
  $sql = "INSERT INTO ".$cfg["tab"]["tpl_conf"]." (idtplcfg, idtpl, author) VALUES ('".$ArrIdxNeuTplConf[$ArrPosTplConf]."', '".$ArrIdxNeuTpl[$ArrPosTpl]."', 'admin')";
  $db2->query($sql);
}

/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyTplSeq." where seq_name = '".$cfg["tab"]["tpl"]."'";
$db2->query($sql);
$MyTplConfSeq=$MyTplConfSeq-1;
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyTplConfSeq." where seq_name = '".$cfg["tab"]["tpl_conf"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Templates vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["tpl"]." und für ".$cfg["tab"]["tpl_conf"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";

/*CONTAINER kopieren */
/* Die Container sind nur an den Index der Templates gebunden, nicht direkt an die idClient, also nicht direkt an den Mandanten */
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die Container:</font></h2>";

$sql = "SELECT * from ".$cfg["tab"]["container"]." order by idtpl";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel aus der Tabelle sequences den max. Index von con_container */
$MyContainerSeq=1;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["container"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyContainerSeq=$db2->Record[0];

$lauf=0;
while($db1->next_record())
{
  /* Lese nun idtpl aus und stelle fest, wo dieser idtpl im Array der alten Indizes steht (in ArrIdxAltTpl[]) */
  $ArrPosTpl=array_search($db1->Record[1], $ArrIdxAltTpl);
  if ($ArrPosTpl<>False)
    { /* if */
      $lauf++;
      $ArrPosModul=array_search($db1->Record[3], $ArrIdxAltModul);

      $MyContainerSeq++;
      $sql = "INSERT INTO ".$cfg["tab"]["container"]." VALUES ('".$MyContainerSeq."'";

      $db1->Record[1]=$ArrIdxNeuTpl[$ArrPosTpl];
      $db1->Record[3]=$ArrIdxNeuModul[$ArrPosModul];

      for ($i=1;$i<$db1->num_fields();$i++)
      {
         $sql = $sql .",";
         $cont = $db1->Record[$i];
             $cont = str_replace('\\','\\\\',$cont);
         $cont = str_replace('"','\"',$cont);

         $sql = $sql ."\"".$cont."\"";
      }

      $sql = $sql .")";
      $db2->query($sql);
    } /*End if */
}
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyContainerSeq." where seq_name = '".$cfg["tab"]["container"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Container vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["container"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";

/*CONTAINER CONF kopieren */
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die Container_Conf:</font></h2>";

$sql="SELECT * FROM ".$cfg["tab"]["container_conf"]." Order by idtplcfg ";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel aus der Tabelle sequences den max. Index von con_container_conf */
$MyContainerConfSeq=1;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["container_conf"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyContainerConfSeq=$db2->Record[0];

$lauf=0;
while($db1->next_record())
{
  /* Lese nun idtplcfg aus und stelle fest, wo dieser idtplcfg im Array der alten Indizes steht (in ArrIdxAltTplConf[]) */
  $ArrPosTplConf=array_search($db1->Record[1], $ArrIdxAltTplConf);
  if ($ArrPosTplConf!==False)
    { /* If */
      $lauf++;
      $MyContainerConfSeq++;
      $sql = "INSERT INTO ".$cfg["tab"]["container_conf"]." VALUES ('".$MyContainerConfSeq."'";

      $db1->Record[1]=$ArrIdxNeuTplConf[$ArrPosTplConf];

      for ($i=1;$i<$db1->num_fields();$i++)
      {
         $sql = $sql .",";
         $cont = $db1->Record[$i];
             $cont = str_replace('\\','\\\\',$cont);
         $cont = str_replace('"','\"',$cont);

         $sql = $sql ."\"".$cont."\"";
      }

      $sql = $sql .")";
      $db2->query($sql);
    } /* End if */
}
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyContainerConfSeq." where seq_name = '".$cfg["tab"]["container_conf"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Container Conf-Daten vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["container_conf"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";

if ($CopyKategorien=0) /* 0=Nein */
    {
    echo "<h1><font face='Arial' color='#ff0000'>FERTIG</font></h1>";
    die("Es wurden alle Templates, Layouts, Container und Module kopiert. Die Kategorien wurden auf Wunsch nicht mit kopiert.");
    }
/*Kategorien kopieren */
/* Die Container sind nur an den Index der Templates gebunden, nicht direkt an die idClient, also nicht direkt an den Mandanten */
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die Kategorien/Men&uuml;s:</font></h2>";
/* lese aus der Tabelle con_cat alle Kategorien des zu kopierenden Mandanten ($old_idclient) aus */
$sql = "SELECT * from ".$cfg["tab"]["cat"]." where idclient=".$old_idclient." order by idcat";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel den nächsten gültigen Index für idcat aus der Tabelle con_sequences */
$MyKatSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["cat"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyKatSeq=$db2->Record[0];

/* Lese nun die vorhanden Kategorie-IDs in das Array ein und generiere gleichzeitig das Array
 * der neuen Kategorie-IDs. Dananch ist bekannt, welche neue idcat welcher alten idcat entsprach
*/
while($db1->next_record())
{
  $MyKatSeq++; /* erhöhe um 1 */
  $ArrIdxAltKat[]=$db1->Record[0]; /* Spalte idcat */
  $ArrIdxNeuKat[]=$MyKatSeq;

  $sql = "INSERT INTO ".$cfg["tab"]["cat"]." VALUES ('".$MyKatSeq."', '".$new_idclient."'";
  for ($i=2;$i<$db1->num_fields();$i++)
  {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','\"',$cont);

     $sql = $sql ."\"".$cont."\"";
  }

  $sql = $sql .")";
  $db2->query($sql);
} /*End while */

/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyKatSeq." where seq_name = '".$cfg["tab"]["cat"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Die Kategorien wurden kopiert....kopiere nun deren Baumstruktur...</font></h3>";
echo "<hr>";
/* Die Daten der Tabelle con_cat wurden für den neuen Mandanten kopiert */

/* Nun muss die Baum-Struktur der Kategorien kopiert werden (steht in Tabelle con_cat_tree) */
/* Nur die Daten aus cat_tree, die zum zu kopierenden Mandanten gehören */
$sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." RIGHT JOIN ".$cfg["tab"]["cat"]." ON ".$cfg["tab"]["cat_tree"].".idcat = ".$cfg["tab"]["cat"].".idcat WHERE ".$cfg["tab"]["cat"].".idclient=".$old_idclient." order by idtree";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel den nächsten gültigen Index für idtree aus der Tabelle con_sequences */
$MyKatTreeSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["cat_tree"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyKatTreeSeq=$db2->Record[0];
$MyKatTreeSeq++; /* erhöhe um 1 */

while($db1->next_record())
{
    /* Lese nun idcat aus und stelle fest, wo dieser idcat im Array der alten Indizes steht (in ArrIdxAltcat[]) */
    $ArrPosKat=array_search($db1->Record[1], $ArrIdxAltKat);
    if ($ArrPosKat!==False)
    {
        $sql = "INSERT INTO ".$cfg["tab"]["cat_tree"]." VALUES ('".$MyKatTreeSeq."', '".$ArrIdxNeuKat[$ArrPosKat]."', '".$db1->Record[2]."')";
        $db2->query($sql);
        $MyKatTreeSeq++;
    } /* End if */
} /* End While */
$MyKatTreeSeq=$MyKatTreeSeq-1;
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyKatTreeSeq." where seq_name = '".$cfg["tab"]["cat_tree"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Die Baumstruktur der Kategorien wurde kopiert....kopiere nun deren Bezeichnungen und Sprache...</font></h3>";
echo "<hr>";
/* Die Baumstruktur (Tabelle con_cat_tree) wurde für den neuen Mandanten kopiert */

/* Nun müssen die Bezeichnungen der Kategorien kopiert werden (steht in Tabelle con_cat_lang) */
$sql = "SELECT * FROM ".$cfg["tab"]["cat_lang"]." order by idcat";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel den nächsten gültigen Index für idcatlang aus der Tabelle con_sequences */
$MyKatLangSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["cat_lang"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyKatLangSeq=$db2->Record[0];
$MyKatLangSeq++; /* erhöhe um 1 */

while($db1->next_record())
{
    /* Lese nun ids aus und stelle fest, wo diese im Array der alten Indizes stehen */
    $ArrPosKat=array_search($db1->Record[1], $ArrIdxAltKat);
    $ArrPosTplConf=array_search($db1->Record[3], $ArrIdxAltTplConf);
    
    $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." VALUES ('".$MyKatLangSeq."'";

    $db1->Record[1]=$ArrIdxNeuKat[$ArrPosKat]; /* Die korrespondierende neue idcat */
    if ($ArrPosTplConf!==False) $db1->Record[3]=$ArrIdxNeuTplConf[$ArrPosTplConf]; /* Die korrespondierende neue idtplcfg */

    for ($i=1;$i<$db1->num_fields();$i++)
    {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','\"',$cont);

     $sql = $sql ."\"".$cont."\"";
    }

    $sql = $sql .")";
    $db2->query($sql);
    
    $MyKatLangSeq++;
    
} /* End While */

$MyKatLangSeq=$MyKatLangSeq-1;
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyKatLangSeq." where seq_name = '".$cfg["tab"]["cat_lang"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Die Bezeichnungen der Kategorien wurden kopiert.</font></h3>";
echo "<hr>";

/*Stelle zum Schluß noch sicher, dass beide Mandanten auf die gleiche Sprache eingestellt sind */
$sql = "SELECT * FROM ".$cfg["tab"]["clients_lang"]."";
$db1->query($sql);
$langold=0;
$MandantNeuExist=0;

$MyClientLangSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["clients_lang"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyClientLangSeq=$db2->Record[0];
$MyClientLangSeq++; /* erhöhe um 1 */

while($db1->next_record())
{
    if ($db1->Record[1]==$old_idclient) $langold=$db1->Record[2];
    if ($db1->Record[1]==$new_idclient) $MandantNeuExist=1;
} /* End While */

if ($MandantNeuExist==0) /* Neuer Mandant existiert nicht in Tabelle client_lang */
    {
    $sql = "INSERT INTO ".$cfg["tab"]["clients_lang"]." VALUES ('".$MyClientLangSeq."', '".$new_idclient."', '".$langold."')";
    $db2->query($sql);
    }
else
    {
    $sql = "UPDATE ".$cfg["tab"]["clients_lang"]." Set idlang='".$langold."' where idclient='".$new_idclient."'";
    $db2->query($sql);
    }
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyClientLangSeq." where seq_name = '".$cfg["tab"]["clients_lang"]."'";
$db2->query($sql);
echo "<h1><font face='Arial' color='#ff0000'>FERTIG</font></h1>";
echo "<font face='Arial' color='#2244ff'>Es wurden alle Module, Templates, Layouts, Container und Kategorien kopiert.</font>";
?>

MikeDe
Beiträge: 11
Registriert: So 7. Dez 2003, 18:15
Kontaktdaten:

Hut ab

Beitrag von MikeDe » Di 3. Feb 2004, 15:59

Hallo Axel,

Hut ab und tiefe Verbeugung. Muß zugeben, dass ich es nicht hinbekommen hätte - und das Tool ist wirklich brauchbar :D

Eine Frage hätte ich allerdings noch:

Die Sprache
Da hatte Timo im anderen Thread noch Bedenken angemeldet. Ich würde da auch kein Problem sehen, wenn man pro Mandanten eine eigene Sprache definiert, zumal man so (wenn auch im gewissen Sinn doppelt) eine Abfragemöglichkeit hat bei diversen Suchfunktionen.

Zur Zeit erschließt sich mir der Sinn nicht, weshalb du jedem Mandanten eine zentrale Sprache zuordnen willst, lasse mich da aber gerne belehren.

@ Timo (wenn mitlesend :wink: )
Wird das Tool Einzug in die Adminoberfläche finden ? Ich würde es begrüßen, zumal dann für die Administration eines wachsenden Projekts ein erheblicher Zeitvorteil entstehen würde, wenn man einen Beispielmandanten zum kopieren vorhalten würde.
Vielleicht könntest du auch noch etwas zu der Sprache sagen. Würde ungern ein laufendes Projekt zerschießen, wenn die Sprache tatsächlich eine wichtige relevante Größe darstellt und uni pro Mandant sein sollte.

Gruß
Mike

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Di 3. Feb 2004, 16:01

Wenn es so eine Funktion geben wird, wird das sicherlich im Backend anders entwickelt werden.

Mein Bedenken zu der Sprache war (wenn ich mich recht erinnere), daß ein- und dieselbe Sprach-ID zu 2 Mandanten zugeordnet werden sollte, und dagegen wehre ich mich (auch heute noch :)).

Axel
Beiträge: 82
Registriert: Di 26. Aug 2003, 08:35
Kontaktdaten:

Re: Hut ab

Beitrag von Axel » Di 3. Feb 2004, 16:45

MikeDe hat geschrieben:Hallo Axel,

Hut ab und tiefe Verbeugung. Muß zugeben, dass ich es nicht hinbekommen hätte - und das Tool ist wirklich brauchbar :D

Eine Frage hätte ich allerdings noch:

Die Sprache
Da hatte Timo im anderen Thread noch Bedenken angemeldet. Ich würde da auch kein Problem sehen, wenn man pro Mandanten eine eigene Sprache definiert, zumal man so (wenn auch im gewissen Sinn doppelt) eine Abfragemöglichkeit hat bei diversen Suchfunktionen.

Zur Zeit erschließt sich mir der Sinn nicht, weshalb du jedem Mandanten eine zentrale Sprache zuordnen willst, lasse mich da aber gerne belehren.

@ Timo (wenn mitlesend :wink: )
Wird das Tool Einzug in die Adminoberfläche finden ? Ich würde es begrüßen, zumal dann für die Administration eines wachsenden Projekts ein erheblicher Zeitvorteil entstehen würde, wenn man einen Beispielmandanten zum kopieren vorhalten würde.
Vielleicht könntest du auch noch etwas zu der Sprache sagen. Würde ungern ein laufendes Projekt zerschießen, wenn die Sprache tatsächlich eine wichtige relevante Größe darstellt und uni pro Mandant sein sollte.

Gruß
Mike
Hi Mike,

vorausschicken möchte ich nochmal, dass ich als Contenido-Beginner das Problem hatte einen Mandanten kopieren zu müssen. Da ich bis zu diesem Zeitpunkt noch nie was mit PHP oder MySQL zu tun hatte, musste ich mich erst mal durch die Contenido-Datenbank quälen. Dieses Script war das erste was ich überhaupt mit PHP zu tun hatte...wie auch immer, bei der Sichtung der Contenido-Tabellen fiel mir halt auf, dass es eine zentrale Tabelle gibt, wo die Sprachen abgelegt sind: con_lang (bei mir heißt das suffix, was contenido vor jede Tabelle schreibt con_). Die besteht im wesentlichen nur aus einem Index (idlang) und einer Bezeichnung (name), z.B. "deutsch" mit idlang=1. Die Tabelle con_clients_lang regelt die Zuordnung der Mandanten zu einer Sprache. Aufgrund dieser Tabellen-Struktur dachte ich bei der Entwicklung des Scriptes, das ich einem neuen Mandanten nun einfach die Sprache "deutsch" dadurch zuweise, dass ich ihm auch in der Tabelle con_clients_lang die idlang=1 setze. Das funktioniert auch wunderbar.
Timos Bedenken glaube ich ihm natürlich, denn so wie es scheint, gehört er ja zu den Entwicklern, dennoch kann ich sie nicht nachvollziehen. Ich werde es also einfach so machen wie bisher und auf den von Timo prophezeiten GAU warten...in der Hoffnung den Fehler zu verstehen wenn er auftritt.

Gruß
Axel

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Di 3. Feb 2004, 18:34

Es geht nicht so sehr um den GAU, als eher um die Konzepte.

Beispiel: Du hast Mandant "www.google.de" und "www.yahoo.de". Wenn du dieselbe Sprache "Deutsch (1)" beiden Mandanten zuweist, hat "www.google.de" in Deutsch dieselbe Sprach-ID wie "www.yahoo.de" in Deutsch. Das hat zur Folge, daß alle sprachabhängigen Funktionen in beiden Mandanten zur Verfügung stehen KÖNNEN. Beispiel Keywords-Tabelle: Dort wird ein Keyword sprachenabhängig gespeichert. Ändern sich die Keywords auf "www.google.de", werden sie sich auch auf "www.yahoo.de" ändern. Dasselbe gilt für die Tabelle "rights": Wenn du auf "www.yahoo.de" rechte vergibst, werden sie sich auch auf "www.google.de" ändern.

Tim
Beiträge: 3
Registriert: Mi 4. Feb 2004, 09:12
Wohnort: OWL
Kontaktdaten:

Beitrag von Tim » Mi 4. Feb 2004, 09:34

Hi,
ähm, wie muss ich das Skript denn jetzt anpassen, damit es für den neuangelegen Mandanten die eingestellte Sprache beibehält und die nicht die sprachid des $old_idclient übernimmt?

Ich würde es wirklich ganz gerne getrennt haben (mandant 1 hat sprache 1 und 2 hat 2... klar), und habe den neuen Mandanten inklusive eigener Sprache auch schon angelegt.

Ich steig einfach durch die Abfrage nach den Sprachen im Skript nicht durch. Nen kleiner Tip? Danke
Grüße aus Herford, Tim

Axel
Beiträge: 82
Registriert: Di 26. Aug 2003, 08:35
Kontaktdaten:

AW: Es geht nicht so sehr um den GAU

Beitrag von Axel » Mi 4. Feb 2004, 09:41

timo hat geschrieben:Es geht nicht so sehr um den GAU, als eher um die Konzepte.

Beispiel: Du hast Mandant "www.google.de" und "www.yahoo.de". Wenn du dieselbe Sprache "Deutsch (1)" beiden Mandanten zuweist, hat "www.google.de" in Deutsch dieselbe Sprach-ID wie "www.yahoo.de" in Deutsch. Das hat zur Folge, daß alle sprachabhängigen Funktionen in beiden Mandanten zur Verfügung stehen KÖNNEN. Beispiel Keywords-Tabelle: Dort wird ein Keyword sprachenabhängig gespeichert. Ändern sich die Keywords auf "www.google.de", werden sie sich auch auf "www.yahoo.de" ändern. Dasselbe gilt für die Tabelle "rights": Wenn du auf "www.yahoo.de" rechte vergibst, werden sie sich auch auf "www.google.de" ändern.
Aha...es wird Licht. Danke timo...dann werde das Script mal entsprechend anpassen.

Axel
Beiträge: 82
Registriert: Di 26. Aug 2003, 08:35
Kontaktdaten:

Re: AW: Es geht nicht so sehr um den GAU

Beitrag von Axel » Mi 4. Feb 2004, 12:03

Axel hat geschrieben:
timo hat geschrieben:Es geht nicht so sehr um den GAU, als eher um die Konzepte.

Beispiel: Du hast Mandant "www.google.de" und "www.yahoo.de". Wenn du dieselbe Sprache "Deutsch (1)" beiden Mandanten zuweist, hat "www.google.de" in Deutsch dieselbe Sprach-ID wie "www.yahoo.de" in Deutsch. Das hat zur Folge, daß alle sprachabhängigen Funktionen in beiden Mandanten zur Verfügung stehen KÖNNEN. Beispiel Keywords-Tabelle: Dort wird ein Keyword sprachenabhängig gespeichert. Ändern sich die Keywords auf "www.google.de", werden sie sich auch auf "www.yahoo.de" ändern. Dasselbe gilt für die Tabelle "rights": Wenn du auf "www.yahoo.de" rechte vergibst, werden sie sich auch auf "www.google.de" ändern.
Aha...es wird Licht. Danke timo...dann werde das Script mal entsprechend anpassen.
Hier also das fertige Script inkl. der Sprachanpassung:

Code: Alles auswählen

<?
/* Script um Kunden zu kopieren
 * Für Contenido 4.4.2 (Für andere Versionen nicht getestet)
 * Autor: Axel Womatschka
 * Datum: 21.01.2004
 
 * Dieses Script kopiert die Module, Layouts, Templates, Container und auf Wunsch auch Kategorien
 * von einem Kunden (Mandanten) ($old_idclient) auf den anderen ($new_idclient)
 * Beide müssen bereits existieren.
*/
 

/* In der config.php stehen die Basisvariablen von Contenido. In der config.php
 * werden zudem via Include noch folgende Dateien geladen
 * cfg_sql.inc.php (Hier stehen die Tabellennamen)
 * prepend.php3 (Hier werden weitere Dateien via require geladen, die das Sessions-Managment der MySQL-DB regeln
 *               unter anderem auch die my_sql.inc)
 *
*/

include "../contenido/includes/config.php"; /* Die braucht man immer */

/* MACHE DEINE INDIVIDUELLEN ANGABEN HIER*******************************************************/
    /* Neuer Kunde auf den kopiert werden soll. Dieser muss vorher angelegt werden*/
    $new_idclient=4;
    /* Kunde, der kopiert werden soll */
    $old_idclient=1;
    /*Auch die Kategorien (Menübaum) mit kopieren? */
    $CopyKategorien=1; /* 0=Nein, 1=Ja */
/***********************************************************************************************/

/* Instanz der Klasse DB_Sql (die ist in der Datei my_sql.inc zu finden)*/
$db1 = new DB_Sql();
$db1->Host    = $contenido_host;
$db1->Database    = $contenido_database;
$db1->User    = $contenido_user;
$db1->Password    = $contenido_password;

$db2 = new DB_Sql();
$db2->Host    = $contenido_host;
$db2->Database    = $contenido_database;
$db2->User    = $contenido_user;
$db2->Password    = $contenido_password;

$new_client_Name="";
$old_client_Name="";

/* Für die Layouts */
$ArrIdxAltLayout=array();
$ArrIdxNeuLayout=array();

/* Für die Module */
$ArrIdxAltModul=array();
$ArrIdxNeuModul=array();

/* Für die Templates */
$ArrIdxAltTpl=array();
$ArrIdxNeuTpl=array();
$ArrIdxAltTplConf=array();
$ArrIdxNeuTplConf=array();

/* Für die Kategorien */
$ArrIdxAltKat=array();
$ArrIdxNeuKat=array();

/* Ermittel Kundennamen und prüfe die Gültigkeit der idclient-Nummern */
$sql = "SELECT idclient, name from ".$cfg["tab"]["clients"]." where (idclient=".$old_idclient." OR idclient=".$new_idclient.")";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/
while ($db1->next_record())
    {
        if ($db1->Record[0]==$new_idclient) $new_client_Name=trim($db1->Record[1]);
        if ($db1->Record[0]==$old_idclient) $old_client_Name=trim($db1->Record[1]);
    }
if ($old_client_Name=="" OR $new_client_Name=="")
{
/* Irgendwas stimmt nicht. vermutlich sind die verwendeten idclient-Nummern falsch */
$Meldung="Zu den verwendeten Mandantennummern (idclient) ".$old_idclient." und ".$new_idclient." gibt es keinen Mandanten-Namen. Überprüfen Sie die Mandanten-Nummern (idclient) in Ihrem Script. Die Ausführung wird abgebrochen.";
echo "<hr><h3><font face='Arial' color='#ff0000'>Fehler: <BR>".$Meldung."</font></h3><hr>";
die($Meldung); /* Scriptausführung abbrechen */
}

/* Prüfe nun ob beide Mandanten die gleichen SprachID haben. In einem Forumartikel Timo schrieb Timo am 3.2.2004 (Contenido Entwickler)
   das Mandanten eine eigene SprachID haben sollten, weil diese auch in den Tabellen Keywords und Rights übernommen wird */
/* Sehe dazu erst in der Tabelle con_clients_lang nach, ob der zweite Mandant dort existiert */
echo "<h3><font face='Arial' color='#ff0000'>Ermittel die Spracheinstellung des neuen Mandanten...</font></h3>";

$sql = "SELECT * FROM ".$cfg["tab"]["clients_lang"]." WHERE ((idclient=".$old_idclient.") OR (idclient=".$new_idclient."))";
$db1->query($sql);
$merk_idlang_old=0;
$MandantNeuExist=0;

while($db1->next_record())
{
    if ($db1->Record[1]==$old_idclient) $merk_idlang_old=$db1->Record[2]; /*Merke hier die SprachID des alten Mandanten */
    if ($db1->Record[1]==$new_idclient)
        /* Ja, neuer Mandant existiert in der Tabelle clients_lang...das bedeutet, der Anwender hat über Contenido selbst den Mandanzen sauber angelegt und eine neue
        Sprache zugeordnet. Merke hier die SprachID des neuen Mandanten */
        {
        $MandantNeuExist=1;
        $merk_idlang_neu=$db1->Record[2]; /*Merke hier die SprachID des neuen Mandanten */
        echo "<h3><font face='Arial' color='#ff0000'>Spracheinstellung des neuen Mandanten existiert bereits (idlang = ".$merk_idlang_neu."</font></h3>";
        echo "<hr>";
        } /*End If */
} /* End While */

echo "<h3><font face='Arial' color='#ff0000'>Spracheinstellung des alten Mandanten: idlang = ".$merk_idlang_old."</font></h3>";

/* Nein, neuer Mandant existiert nicht in der Tabelle clients_lang. Um ihn dort einzutragen brauchen wir erst eine neue SprachID
    Erzeuge neue SprachID in Tabelle con_lang und merke diese für den neuen Mandanten */

if ($MandantNeuExist==0) /* Neuer Mandant existiert nicht in Tabelle client_lang */
    {
    $sql = "SELECT * FROM ".$cfg["tab"]["lang"]." WHERE (idlang=".$merk_idlang_old.")";
    /*echo "SQL lautet: ".$sql."<br>";*/
    $db1->query($sql);
    $MyLangSeq=0;
    $sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["lang"]."'";
    $db2->query($sql);
    if ($db2->next_record()) $MyLangSeq=$db2->Record[0];
    $merk_idlang_neu=$MyLangSeq++; /* erhöhe um 1 */
    $sql = "INSERT INTO ".$cfg["tab"]["lang"]." VALUES ('".$merk_idlang_neu."'";
    $db1->next_record();
    for ($i=1;$i<$db1->num_fields();$i++)
        {
         $sql = $sql .",";
         $cont = $db1->Record[$i];
             $cont = str_replace('\\','\\\\',$cont);
         $cont = str_replace('"','"',$cont);

         $sql = $sql .""".$cont.""";
        }
    $sql = $sql .")";
    /*echo "SQL lautet: ".$sql."<br>";*/
    $db2->query($sql); /* Erzeuge hier neuen Datensatz in Tabelle con_lang */
    /*Korrigiere nun noch die Werte in der Tabelle con_sequences */
    $sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$merk_idlang_neu." where seq_name = '".$cfg["tab"]["lang"]."'";
    $db2->query($sql);

    /* Nun der neue Eintrag in con_clients_lang */
    $sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["clients_lang"]."'";
    $db2->query($sql);
    if ($db2->next_record()) $MyClientsLangSeq=$db2->Record[0];
    $MyClientsLangSeq++; /* erhöhe um 1 */
    $sql = "INSERT INTO ".$cfg["tab"]["clients_lang"]." VALUES ('".$MyClientsLangSeq."', '".$new_idclient."', '".$merk_idlang_neu."')";
    
    /*echo "SQL lautet: ".$sql."<br>";*/
    $db2->query($sql); /* Erzeuge hier neuen Datensatz in Tabelle con_lang */
    /*Korrigiere nun noch die Werte in der Tabelle con_sequences */
    $sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyClientsLangSeq." where seq_name = '".$cfg["tab"]["clients_lang"]."'";
    $db2->query($sql);
        
    echo "<h3><font face='Arial' color='#ff0000'>Spracheinstellung des neuen Mandanten existierte nicht und wurde deshalb erzeugt (idlang = ".$merk_idlang_neu.")</font></h3>";
    echo "<hr>";
} /*End If*/



/* Alles OK....leg los */
echo "<hr><h1><font face='Arial' color='#ff0000'>Kopiere den Mandanten >".$old_client_Name."< (idclient ".$old_idclient.") auf den Mandanten >".$new_client_Name."< (idclient ".$new_idclient."):</font></h1><hr>";

/*****************************************************************************************/
/*Module KOPIEREN*/
/* ermittel alle Module des zu kopierenden Kunden */
$sql = "SELECT * from ".$cfg["tab"]["mod"]." where idclient=".$old_idclient;
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* In der Tabelle con_sequence stehen die Werte der Indizes der Primärschlüssel !
   Lese daher erst hier den aktuelen Index-Wert für die Tabelle con_mod aus */
$MyModSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["mod"]."'";
$db2->query($sql);
if ($db2->next_record())
{
$MyModSeq=$db2->Record[0];
$MyModSeq++; /* erhöhe um 1 */
}

$sql="";
$lauf=0;
/* $db1->next_record() liefert Zeiger auf nächsten Datensatz, der noch nicht
ausgelesen wurde und gibt ein Array in der Eigenschaft Record zurück */
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die folgenden Module:</font></h2>";
while($db1->next_record())
{
  echo "<font face='Arial' color='#000000'>".$db1->Record[2]."</font><BR>"; /* Index 2 des Arrays. Entspricht dem Inhalt der 2.ten Datenspalte der Tabelle con_mod..das ist der Modulname */

  $lauf++;
  $sql = "INSERT INTO ".$cfg["tab"]["mod"]." VALUES ('".$MyModSeq."','".$new_idclient."'";

  $db1->Record[4]="YES"; /* Spalte deletable der Tabelle con_mod */
  
  /*Merke im Array $ArrIdxAltModule[] den Index (idmod) der Module des alten Mandanten */
  $ArrIdxAltModule[]=$db1->Record[0];
  /*Merke im Array $ArrIdxNeuModule[] den Index (idmod) der Module des neuen Mandanten */
  $ArrIdxNeuModule[]=$MyModSeq;
  /*Das Merken im Array ist nötig um später noch zu wissen welcher alte idmod welchem neuen idmod entspricht*/
  
  for ($i=2;$i<$db1->num_fields();$i++)
  {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','"',$cont);

     $sql = $sql .""".$cont.""";
  }

  $sql = $sql .")";
  $db2->query($sql);
  
  /* erhöhe um eins um den neuen maximalen Index-Wert zu merken, der wieder in die Tabelle con_Sequence geschrieben werden muss */
  $MyModSeq++; /* erhöhe um 1 */
}

/* schreibe nun den letzten wert von $MyModSeq bei con_mod in die Tabelle con_sequence */
$MyModSeq=$MyModSeq-1;
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyModSeq." where seq_name = '".$cfg["tab"]["mod"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Module vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["mod"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";

/*****************************************************************************************/
/*LAYOUTS KOPIEREN*/
/* ermittel alle Layouts des zu kopierenden Kunden */
$sql = "SELECT * from ".$cfg["tab"]["lay"]." where idclient=".$old_idclient;
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* In der Tabelle con_sequence stehen die Werte der Indizes der Primärschlüssel !
   Lese daher erst hier den aktuelen Index-Wert für die Tabelle con_mod aus */
$MyLaySeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["lay"]."'";
$db2->query($sql);
if ($db2->next_record())
{
$MyLaySeq=$db2->Record[0];
$MyLaySeq++; /* erhöhe um 1 */
}

$sql="";
$lauf=0;
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die folgenden Layouts:</font></h2>";
while($db1->next_record())
{
  echo "<font face='Arial' color='#000000'>".$db1->Record[2]."</font><BR>"; /* Index 2 des Arrays. Entspricht dem Inhalt der 2.ten Datenspalte der Tabelle con_lay..das ist der Layoutname */

  $lauf++;
  $sql = "INSERT INTO ".$cfg["tab"]["lay"]." VALUES ('".$MyLaySeq."','".$new_idclient."'";

  $db1->Record[4]="YES"; /* Spalte deletable der Tabelle con_lay */
  
  /*Merke im Array $ArrIdxAltLayout[] den Index (idlay) der Layouts des alten Mandanten */
  $ArrIdxAltLayout[]=$db1->Record[0];
  /*Merke im Array $ArrIdxNeuLayout[] den Index (idlay) der Layouts des neuen Mandanten */
  $ArrIdxNeuLayout[]=$MyLaySeq;
  /*Das Merken im Array ist nötig um später noch zu wissen welcher alte idlay welchem neuen idlay entspricht*/
  
  for ($i=2;$i<$db1->num_fields();$i++)
  {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','"',$cont);

     $sql = $sql .""".$cont.""";
  }

  $sql = $sql .")";
  $db2->query($sql);

  /* erhöhe um eins um den neuen maximalen Index-Wert zu merken, der wieder in die Tabelle con_Sequence geschrieben werden muss */
  $MyLaySeq++; /* erhöhe um 1 */
}

/* schreibe nun den letzten wert von $MyLaySeq bei con_lay in die Tabelle con_sequence */
$MyLaySeq=$MyLaySeq-1;
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyLaySeq." where seq_name = '".$cfg["tab"]["lay"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Layouts vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["lay"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";


/*****************************************************************************************/
/*TEMPLATES KOPIEREN*/
/* In der Tabelle con_sequence stehen die Werte der Indizes der Primärschlüssel !
   Lese daher erst hier den aktuelen Index-Wert für die Tabelle con_template aus */
$MyTplSeq=1;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["tpl"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyTplSeq=$db2->Record[0];

$MyTplConfSeq=1;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["tpl_conf"]."'";
$db2->query($sql);
if ($db2->next_record())
{
$MyTplConfSeq=$db2->Record[0];
$MyTplConfSeq++;
}

/* ermittel alle Templates des zu kopierenden Kunden */
$sql = "SELECT * from ".$cfg["tab"]["tpl"]." where idclient=".$old_idclient." order by idtpl";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/*Lese die idtpl der Templates erst mal in ein Array um sich die alten Indizes zu merken */
while($db1->next_record())
{
  /*Merke im Array $ArrIdxAltLayout[] den Index (idlay) der Layouts des alten Mandanten */
  $ArrIdxAltTpl[]=$db1->Record[2]; /* Spalte idtpl */
  $ArrIdxNeuTpl[]=$MyTplSeq;
  $MyTplSeq++; /* erhöhe um 1 */
  
  $ArrIdxAltTplConf[]=$db1->Record[3]; /* Spalte idtplcfg */
  $ArrIdxNeuTplConf[]=$MyTplConfSeq;
  $MyTplConfSeq++; /* erhöhe um 1 */
}

/*Hinweis:
  $MyTplSeq ist der Wert, der für nextid con_tpl in con_sequence eingetragen werden muss
  $MyTplConfSeq-1 ist der Wert, der für nextid con_tplConf in con_sequence eingetragen werden muss
*/

/* Nun sind alle ID's, die alten und die neuen bekannt. Kopiere nun die Daten der Tabelle con_Templates */
$sql = "SELECT * from ".$cfg["tab"]["tpl"]." where idclient=".$old_idclient." order by idtpl";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die folgenden Templates:</font></h2>";
$lauf=0;
while($db1->next_record())
{
  $lauf++;
  /* Lese nun idlay aus und stelle fest, wo dieser idlay im Array der alten Indizes steht (in ArrIdxAltLayer[]) */
  $ArrPosLay=array_search($db1->Record[1], $ArrIdxAltLayout);
  
  /* Lese nun idtpl aus und stelle fest, wo dieser idtpl im Array der alten Indizes steht (in ArrIdxAltTpl[]) */
  $ArrPosTpl=array_search($db1->Record[2], $ArrIdxAltTpl);
  
  /* dito für idtplconf */
  $ArrPosTplConf=array_search($db1->Record[3], $ArrIdxAltTplConf);
  
  $sql = "INSERT INTO ".$cfg["tab"]["tpl"]." VALUES ('".$new_idclient."'";
  $db1->Record[1]=$ArrIdxNeuLayout[$ArrPosLay];
  $db1->Record[2]=$ArrIdxNeuTpl[$ArrPosTpl];
  $db1->Record[3]=$ArrIdxNeuTplConf[$ArrPosTplConf];
  
  echo "<font face='Arial' color='#000000'>".$db1->Record[4]."</font><BR>";
  
  for ($i=1;$i<$db1->num_fields();$i++)
  {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','"',$cont);

     $sql = $sql .""".$cont.""";
  }

  $sql = $sql .")";
  $db2->query($sql);
  
  /*Neuen Datensatz auch in Tabelle tplconf */
  $sql = "INSERT INTO ".$cfg["tab"]["tpl_conf"]." (idtplcfg, idtpl, author) VALUES ('".$ArrIdxNeuTplConf[$ArrPosTplConf]."', '".$ArrIdxNeuTpl[$ArrPosTpl]."', 'admin')";
  $db2->query($sql);
}

/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyTplSeq." where seq_name = '".$cfg["tab"]["tpl"]."'";
$db2->query($sql);
$MyTplConfSeq=$MyTplConfSeq-1;
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyTplConfSeq." where seq_name = '".$cfg["tab"]["tpl_conf"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Templates vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["tpl"]." und für ".$cfg["tab"]["tpl_conf"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";

/*CONTAINER kopieren */
/* Die Container sind nur an den Index der Templates gebunden, nicht direkt an die idClient, also nicht direkt an den Mandanten */
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die Container:</font></h2>";

$sql = "SELECT * from ".$cfg["tab"]["container"]." order by idtpl";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel aus der Tabelle sequences den max. Index von con_container */
$MyContainerSeq=1;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["container"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyContainerSeq=$db2->Record[0];

$lauf=0;
while($db1->next_record())
{
  /* Lese nun idtpl aus und stelle fest, wo dieser idtpl im Array der alten Indizes steht (in ArrIdxAltTpl[]) */
  $ArrPosTpl=array_search($db1->Record[1], $ArrIdxAltTpl);
  if ($ArrPosTpl<>False)
    { /* if */
      $lauf++;
      $ArrPosModul=array_search($db1->Record[3], $ArrIdxAltModul);

      $MyContainerSeq++;
      $sql = "INSERT INTO ".$cfg["tab"]["container"]." VALUES ('".$MyContainerSeq."'";

      $db1->Record[1]=$ArrIdxNeuTpl[$ArrPosTpl];
      $db1->Record[3]=$ArrIdxNeuModul[$ArrPosModul];

      for ($i=1;$i<$db1->num_fields();$i++)
      {
         $sql = $sql .",";
         $cont = $db1->Record[$i];
             $cont = str_replace('\\','\\\\',$cont);
         $cont = str_replace('"','"',$cont);

         $sql = $sql .""".$cont.""";
      }

      $sql = $sql .")";
      $db2->query($sql);
    } /*End if */
}
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyContainerSeq." where seq_name = '".$cfg["tab"]["container"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Container vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["container"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";

/*CONTAINER CONF kopieren */
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die Container_Conf:</font></h2>";

$sql="SELECT * FROM ".$cfg["tab"]["container_conf"]." Order by idtplcfg ";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel aus der Tabelle sequences den max. Index von con_container_conf */
$MyContainerConfSeq=1;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["container_conf"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyContainerConfSeq=$db2->Record[0];

$lauf=0;
while($db1->next_record())
{
  /* Lese nun idtplcfg aus und stelle fest, wo dieser idtplcfg im Array der alten Indizes steht (in ArrIdxAltTplConf[]) */
  $ArrPosTplConf=array_search($db1->Record[1], $ArrIdxAltTplConf);
  if ($ArrPosTplConf!==False)
    { /* If */
      $lauf++;
      $MyContainerConfSeq++;
      $sql = "INSERT INTO ".$cfg["tab"]["container_conf"]." VALUES ('".$MyContainerConfSeq."'";

      $db1->Record[1]=$ArrIdxNeuTplConf[$ArrPosTplConf];

      for ($i=1;$i<$db1->num_fields();$i++)
      {
         $sql = $sql .",";
         $cont = $db1->Record[$i];
             $cont = str_replace('\\','\\\\',$cont);
         $cont = str_replace('"','"',$cont);

         $sql = $sql .""".$cont.""";
      }

      $sql = $sql .")";
      $db2->query($sql);
    } /* End if */
}
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyContainerConfSeq." where seq_name = '".$cfg["tab"]["container_conf"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Es wurden ".$lauf." Container Conf-Daten vom Mandanten ".$old_idclient." auf den Mandanten ".$new_idclient." kopiert. Der Eintrag für ".$cfg["tab"]["container_conf"]." wurde in der Tabelle ".$cfg["tab"]["sequence"]." korrigiert.</font></h3>";
echo "<hr>";

if ($CopyKategorien=0) /* 0=Nein */
    {
    echo "<h1><font face='Arial' color='#ff0000'>FERTIG</font></h1>";
    die("Es wurden alle Templates, Layouts, Container und Module kopiert. Die Kategorien wurden auf Wunsch nicht mit kopiert.");
    }
/*KATEGORIEN kopieren */
/* Die Container sind nur an den Index der Templates gebunden, nicht direkt an die idClient, also nicht direkt an den Mandanten */
echo "<hr><h2><font face='Arial' color='#ff0000'>Kopiere die Kategorien/Men&uuml;s:</font></h2>";
/* lese aus der Tabelle con_cat alle Kategorien des zu kopierenden Mandanten ($old_idclient) aus */
$sql = "SELECT * from ".$cfg["tab"]["cat"]." where idclient=".$old_idclient." order by idcat";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel den nächsten gültigen Index für idcat aus der Tabelle con_sequences */
$MyKatSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["cat"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyKatSeq=$db2->Record[0];

/* Lese nun die vorhanden Kategorie-IDs in das Array ein und generiere gleichzeitig das Array
 * der neuen Kategorie-IDs. Dananch ist bekannt, welche neue idcat welcher alten idcat entsprach
*/
while($db1->next_record())
{
  $MyKatSeq++; /* erhöhe um 1 */
  $ArrIdxAltKat[]=$db1->Record[0]; /* Spalte idcat */
  $ArrIdxNeuKat[]=$MyKatSeq;

  $sql = "INSERT INTO ".$cfg["tab"]["cat"]." VALUES ('".$MyKatSeq."', '".$new_idclient."'";
  for ($i=2;$i<$db1->num_fields();$i++)
  {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','"',$cont);

     $sql = $sql .""".$cont.""";
  }

  $sql = $sql .")";
  $db2->query($sql);
} /*End while */

/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyKatSeq." where seq_name = '".$cfg["tab"]["cat"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Die Kategorien wurden kopiert....kopiere nun deren Baumstruktur...</font></h3>";
echo "<hr>";
/* Die Daten der Tabelle con_cat wurden für den neuen Mandanten kopiert */

/* Nun muss die Baum-Struktur der Kategorien kopiert werden (steht in Tabelle con_cat_tree) */
/* Nur die Daten aus cat_tree, die zum zu kopierenden Mandanten gehören */
$sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." RIGHT JOIN ".$cfg["tab"]["cat"]." ON ".$cfg["tab"]["cat_tree"].".idcat = ".$cfg["tab"]["cat"].".idcat WHERE ".$cfg["tab"]["cat"].".idclient=".$old_idclient." order by idtree";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel den nächsten gültigen Index für idtree aus der Tabelle con_sequences */
$MyKatTreeSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["cat_tree"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyKatTreeSeq=$db2->Record[0];
$MyKatTreeSeq++; /* erhöhe um 1 */

while($db1->next_record())
{
    /* Lese nun idcat aus und stelle fest, wo dieser idcat im Array der alten Indizes steht (in ArrIdxAltcat[]) */
    $ArrPosKat=array_search($db1->Record[1], $ArrIdxAltKat);
    if ($ArrPosKat!==False)
    {
        $sql = "INSERT INTO ".$cfg["tab"]["cat_tree"]." VALUES ('".$MyKatTreeSeq."', '".$ArrIdxNeuKat[$ArrPosKat]."', '".$db1->Record[2]."')";
        $db2->query($sql);
        $MyKatTreeSeq++;
    } /* End if */
} /* End While */
$MyKatTreeSeq=$MyKatTreeSeq-1;
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyKatTreeSeq." where seq_name = '".$cfg["tab"]["cat_tree"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Die Baumstruktur der Kategorien wurde kopiert....kopiere nun deren Bezeichnungen und Sprache...</font></h3>";
echo "<hr>";
/* Die Baumstruktur (Tabelle con_cat_tree) wurde für den neuen Mandanten kopiert */

/* Nun müssen die Bezeichnungen der Kategorien kopiert werden (steht in Tabelle con_cat_lang) */
$sql = "SELECT * FROM ".$cfg["tab"]["cat_lang"]." order by idcat";
$db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/

/* Ermittel den nächsten gültigen Index für idcatlang aus der Tabelle con_sequences */
$MyKatLangSeq=0;
$sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["cat_lang"]."'";
$db2->query($sql);
if ($db2->next_record()) $MyKatLangSeq=$db2->Record[0];
$MyKatLangSeq++; /* erhöhe um 1 */

while($db1->next_record())
{
    /* Lese nun ids aus und stelle fest, wo diese im Array der alten Indizes stehen */
    $ArrPosKat=array_search($db1->Record[1], $ArrIdxAltKat);
    $ArrPosTplConf=array_search($db1->Record[3], $ArrIdxAltTplConf);
    
    $sql = "INSERT INTO ".$cfg["tab"]["cat_lang"]." VALUES ('".$MyKatLangSeq."'";

    $db1->Record[1]=$ArrIdxNeuKat[$ArrPosKat]; /* Die korrespondierende neue idcat */
    if ($ArrPosTplConf!==False) $db1->Record[3]=$ArrIdxNeuTplConf[$ArrPosTplConf]; /* Die korrespondierende neue idtplcfg */

    /* Achtung: Einträge der Tabelle cat_lang sind Sprachabhängig. Schreibe daher hier auch die idlang (SprachID) des neuen
    Mandanten mit rein...diese wude zu Beginn des Scripts ermittelt und in $merk_idlang_neu gemerkt */
    $db1->Record[2]=$merk_idlang_neu;
    for ($i=1;$i<$db1->num_fields();$i++)
    {
     $sql = $sql .",";
     $cont = $db1->Record[$i];
         $cont = str_replace('\\','\\\\',$cont);
     $cont = str_replace('"','"',$cont);

     $sql = $sql .""".$cont.""";
    }

    $sql = $sql .")";
    $db2->query($sql);
    
    $MyKatLangSeq++;
    
} /* End While */

$MyKatLangSeq=$MyKatLangSeq-1;
/*Korrigiere nun noch die Werte in der Tabelle con_sequences */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyKatLangSeq." where seq_name = '".$cfg["tab"]["cat_lang"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#ff0000'>Die Bezeichnungen der Kategorien wurden kopiert.</font></h3>";
echo "<hr>";

echo "<h1><font face='Arial' color='#ff0000'>FERTIG</font></h1>";
echo "<font face='Arial' color='#2244ff'>Es wurden alle Module, Templates, Layouts, Container und Kategorien kopiert.</font>";
?>

Tim
Beiträge: 3
Registriert: Mi 4. Feb 2004, 09:12
Wohnort: OWL
Kontaktdaten:

Beitrag von Tim » Do 5. Feb 2004, 14:54

danke!
und noch nen kleiner tip:
schreib doch bitte

Code: Alles auswählen

<?PHP 
/* Script um Kunden zu kopieren 
* Für Contenido 4.4.2 (Für andere Versionen nicht getestet) 
Dann können es auch die restlichen 3% von uns auf den Webservern nutzen :-), und bekommen beim ausführen keinen Müll zurück!
Grüße aus Herford, Tim

kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta » Do 5. Feb 2004, 19:28

Habe das gleich mal angetestet und bin gestolpert:

Code: Alles auswählen

$merk_idlang_neu=$MyLangSeq++; /* erhöhe um 1 */
funktionierte bei mir nicht. Erst wenn ich dies ersetze mit:

Code: Alles auswählen

$merk_idlang_neu=$MyLangSeq; /* erhöhe um 1 */ 
$merk_idlang_neu++;
wird die id hochgezählt (und somit kann dann auch ein neuer Eintrag in die db). Mir fehlt die Erfahrung mit OOP: ich nehme an, das das mit $MyLangSeq++ nicht funktioniert, weil das nicht direkt der Wert ist sondern ein "Pointer" auf das db2-Objekt. Weiter oben steht ja:

Code: Alles auswählen

$MyLangSeq=$db2->Record[0]
Korrigiert mich, wenn ich das falsch sehe..
[/code]

kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta » Do 5. Feb 2004, 19:36

.. beim kopieren der Templates fällt er dann wieder auf die Nase. Wieder Duplicate entry 'XY' for key 1. Wobei XY die next-id sein sollte aber die last-used-id ist..

Mein System:
Apache/1.3.29 (Unix) PHP/4.3.4

Sorry für das end-code-tag im vorherigen Beitrag..

kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta » Do 5. Feb 2004, 20:14

Der Fehler sieht dann so aus:
Kopiere die folgenden Templates:
Standard
Database error: Invalid SQL: INSERT INTO con_template VALUES ('5',"4","3","81","Standard","","1","","admin","20030515161225","20030515161225")
MySQL Error: 1062 (Duplicate entry '3' for key 1)
Session halted.
Womit dann auch klar wäre, warum db-backup empfehlenswert ist...

MikeDe
Beiträge: 11
Registriert: So 7. Dez 2003, 18:15
Kontaktdaten:

Beitrag von MikeDe » Do 12. Feb 2004, 23:14

Hallo Axel,

erstmal danke für die Überarbeitung bezüglich der Sprachen.

Ich kam noch nicht dazu das ganze zu testen, da einer unserer Server abgeraucht war und es etwas gedauert hat die Daten wieder auf einem neuen Server zu restaurieren :?

Den Fehler den Thomas erwähnte kann ich nachvollziehen bei einem Test den ich eben angezeigt bekam:

Code: Alles auswählen

Database error: Invalid SQL: INSERT INTO con_template_conf (idtplcfg, idtpl, author) VALUES ('339', '23', 'admin')


MySQL Error: 1062 (Duplicate entry '339' for key 1)
Session halted.
Weiß noch nicht ob es die bezeichneten Zeilen sind die den Fehler verursachen - es bricht jedenfalls nach dem Kopieren des letzten Templates ab.

Mal sehen ob ich morgen dazu komme mir das ganze mal anzusehen. Oder hast du evtl. schon einen Fix geschrieben?

Gruß
Mike

demuton
Beiträge: 10
Registriert: Sa 1. Nov 2003, 18:35
Kontaktdaten:

mandant script

Beitrag von demuton » Fr 20. Feb 2004, 19:41

hallo leute ,
ich sitze seit 10 Std. um den script durchzuführen aber es will einfach nicht.
was mache ich denn falsch!!

ich habe d. Script auf gleichem Verzeichnis wie contenido kopierert und über browser durchgeführt und siehe da bekommen ich nur weiße seite.

ich brauche hilfe
danke

mediaholic
Beiträge: 19
Registriert: Sa 29. Nov 2003, 20:56
Kontaktdaten:

Beitrag von mediaholic » Mo 23. Feb 2004, 12:28

hi axel hammer teil aber obwohl der kopiervorgang erfolgreich abschliest und alles scheint primer zu sein lässt sich die naviagation in front end des kopiertes mandanten nicht auf/zu-klappen!?.

ich bin folgend vorgegangen:
neuen mandanten erstellt
zu neuen mandanten gewechselt
neue sprache erstellt und
die folgende drei variablen geändert in:
$new_idclient=3;
$old_idclient=1;
$CopyKategorien=1;

mein system:
win 200pro ,contenido 4.4.2 ,apache 1.3.20 ,php 4.3.4, mysql 4.0.15,
dein script
* Für Contenido 4.4.2 (Für andere Versionen nicht getestet)
* Autor: Axel Womatschka
* Datum: 21.01.2004

liegt es an mir oder an den script?

hat noch jemand änliche erfahrungen gemacht oder leufts bei euch reibungslos?

Gesperrt