-->Kopieren eines Mandanten

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

-->Kopieren eines Mandanten

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

Dieses Script kopiert einen bestehenden Mandanten auf einen neuen (leeren) Mandanten. Kopiert werden alle Templates, Module, Layouts, Kategorien, usw.

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>";
?>

jm
Beiträge: 1
Registriert: Di 13. Apr 2004, 11:17
Kontaktdaten:

Beitrag von jm » Di 13. Apr 2004, 12:19

Vielen Dank für das Script "copy", habe es copy.php genannt und in .../contenido (Version 4.4.4) kopiert, anschließend gestartet. Leider mit Fehlermeldung. Der erste Mandant ist Kunde(1) den 2. habe ich angelegt, einen 3. und 4. gibt es nicht!

Mache ich was falsch?

Fehler:
Zu den verwendeten Mandantennummern (idclient) 1 und 4 gibt es keinen Mandanten-Namen. Überprüfen Sie die Mandanten-Nummern (idclient) in Ihrem Script. Die Ausführung wird abgebrochen.

--------------------------------------------------------------------------------
Zu den verwendeten Mandantennummern (idclient) 1 und 4 gibt es keinen Mandanten-Namen. Überprüfen Sie die Mandanten-Nummern (idclient) in Ihrem Script. Die Ausführung wird abgebrochen.

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

Beitrag von Axel » Di 13. Apr 2004, 12:27

jm hat geschrieben:Vielen Dank für das Script "copy", habe es copy.php genannt und in .../contenido (Version 4.4.4) kopiert, anschließend gestartet. Leider mit Fehlermeldung. Der erste Mandant ist Kunde(1) den 2. habe ich angelegt, einen 3. und 4. gibt es nicht!

Mache ich was falsch?

Fehler:
Zu den verwendeten Mandantennummern (idclient) 1 und 4 gibt es keinen Mandanten-Namen. Überprüfen Sie die Mandanten-Nummern (idclient) in Ihrem Script. Die Ausführung wird abgebrochen.

--------------------------------------------------------------------------------
Zu den verwendeten Mandantennummern (idclient) 1 und 4 gibt es keinen Mandanten-Namen. Überprüfen Sie die Mandanten-Nummern (idclient) in Ihrem Script. Die Ausführung wird abgebrochen.
Hy....
Der ausgegebenen Fehlermeldung entnehme ich, dass du die Parameter idclient des "alten" und des "neuen" Kunden nicht angegeben hat.
Suche im Script nach diesem Textblock:

* 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 */
/*******************************************/

Lese diesen durch und setze deine Werte für "new_idclient" und "old_idclient"

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Di 13. Apr 2004, 12:41

Hallo Axel,

gut, dass Du gerade 'da' bist. ;-) Ich habe einfach mal geschaut, was es Neues im Forum gibt, und dabei das Posting von jm entdeckt, worauf ich auch Dein Kopierskript fand. Es kam mir sehr gelegen, weil ich gerade 3 neue Mandanten angelegt habe und gestern fluchend fuer einen Mandanten alles nach und nach per Hand angelegt habe. Das Skript macht bei mir aber leider auch Probleme (wie bei jm auch Contenido 4.4.4), vielleicht hast Du eine Idee, woran es liegen koennte. Erst hatte mein neuer Mandant noch keine Sprache, die habe ich aber angelegt. Die Client-IDs sind auch richtig. Da kam so etwas: Ermittel die Spracheinstellung des neuen Mandanten...
Spracheinstellung des neuen Mandanten existiert bereits (idlang = 4

--------------------------------------------------------------------------------

Spracheinstellung des alten Mandanten: idlang = 1
(ist das schlimm?), denn als ich den neuen Mandanten angelegt habe, musste ich einfach eine neue Sprache anlegen, obwohl die bei beiden Deutsch lautet, die haben aber unterschiedliche IDs. So, dann kam so etwas:
Kopiere die folgenden Module:
[...]
Es wurden 23 Module vom Mandanten 1 auf den Mandanten 8 kopiert. Der Eintrag für con_mod wurde in der Tabelle con_sequence korrigiert.

Kopiere die folgenden Layouts:
[...]
Es wurden 5 Layouts vom Mandanten 1 auf den Mandanten 8 kopiert. Der Eintrag für con_lay wurde in der Tabelle con_sequence korrigiert.

Das sieht schon mal nicht schlecht aus. Aber dann!
Kopiere die folgenden Templates:
MeinTemplate
Database error: Invalid SQL: INSERT INTO con_template VALUES ('8',"11","11","509","MeinTemplate","","1","","admin","20040411221041","20040411221041")


MySQL Error: 1062 (Duplicate entry '11' for key 1)
Session halted.

Was nun? :roll: NACHTRAG: ich meine, ausser dass ich die Templates doch Stueck fuer Stueck kopieren soll. ;-)

Gruss
Christa

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

Beitrag von Axel » Di 13. Apr 2004, 13:25

Halchteranerin hat geschrieben:Hallo Axel,

gut, dass Du gerade 'da' bist. ;-) Ich habe einfach mal geschaut, was es Neues im Forum gibt, und dabei das Posting von jm entdeckt, worauf ich auch Dein Kopierskript fand. Es kam mir sehr gelegen, weil ich gerade 3 neue Mandanten angelegt habe und gestern fluchend fuer einen Mandanten alles nach und nach per Hand angelegt habe. Das Skript macht bei mir aber leider auch Probleme (wie bei jm auch Contenido 4.4.4), vielleicht hast Du eine Idee, woran es liegen koennte. Erst hatte mein neuer Mandant noch keine Sprache, die habe ich aber angelegt. Die Client-IDs sind auch richtig. Da kam so etwas: Ermittel die Spracheinstellung des neuen Mandanten...
Spracheinstellung des neuen Mandanten existiert bereits (idlang = 4

--------------------------------------------------------------------------------

Spracheinstellung des alten Mandanten: idlang = 1
(ist das schlimm?), denn als ich den neuen Mandanten angelegt habe, musste ich einfach eine neue Sprache anlegen, obwohl die bei beiden Deutsch lautet, die haben aber unterschiedliche IDs. So, dann kam so etwas:
Kopiere die folgenden Module:
[...]
Es wurden 23 Module vom Mandanten 1 auf den Mandanten 8 kopiert. Der Eintrag für con_mod wurde in der Tabelle con_sequence korrigiert.

Kopiere die folgenden Layouts:
[...]
Es wurden 5 Layouts vom Mandanten 1 auf den Mandanten 8 kopiert. Der Eintrag für con_lay wurde in der Tabelle con_sequence korrigiert.

Das sieht schon mal nicht schlecht aus. Aber dann!
Kopiere die folgenden Templates:
MeinTemplate
Database error: Invalid SQL: INSERT INTO con_template VALUES ('8',"11","11","509","MeinTemplate","","1","","admin","20040411221041","20040411221041")


MySQL Error: 1062 (Duplicate entry '11' for key 1)
Session halted.

Was nun? :roll: NACHTRAG: ich meine, ausser dass ich die Templates doch Stueck fuer Stueck kopieren soll. ;-)

Gruss
Christa
Hy Christa,

hab zwar gerade Null Zeit, aber...

Der Fehler sagt, dass es in der Tabelle con_templates bereits einen Eintrag mit idtpl=11 gibt. Da das Feld idtpl ein Primärindex ist, löst der doppelte Eintrag einen Fehler aus. Das kann nur passieren, wenn du bereits für deinen "neuen" Kunden ein Template angelegt hast und erst später das Script ausgeführt hast. Wenn das Script benutzt werden soll, dann darf für den "neuen" Mandanten (Kunden) absolut nichts angelegt sein!

Einzige Lösung, die mir hier einfällt:
Aus den Tabellen der Datenbank von Hand alle Informationen zu den Templates von Hand löschen.

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Di 13. Apr 2004, 14:07

Hallo Axel,
Axel hat geschrieben: Der Fehler sagt, dass es in der Tabelle con_templates bereits einen Eintrag mit idtpl=11 gibt.
soweit war ich auch schon. :wink: Das Problem ist bloss, dass mir nicht so ganz klar ist, wie das Skript ablaeuft, deswegen wusste/weiss ich auch nicht, wie das entstanden sein kann. Denn das:
Axel hat geschrieben:Das kann nur passieren, wenn du bereits für deinen "neuen" Kunden ein Template angelegt hast und erst später das Script ausgeführt hast.
habe ich definitiv nicht getan.

Das einzige, was ich gemacht habe, war, eine neue Sprache anzulegen (es war keine vorhanden), weil sonst das Skript gleich am Anfang ins Stocken geriet.
Axel hat geschrieben:Wenn das Script benutzt werden soll, dann darf für den "neuen" Mandanten (Kunden) absolut nichts angelegt sein!
Auch keine Sprache? s.o.

Es ist schon mal etwas, dass ich nicht die ganzen Module und Layouts per Hand anlegen muss, aber ich weiss jetzt auch nicht ganz, was da noch fehlt, denn im Skript habe ich gesehen, dass nach den Kopieren der Templates noch einiges passiert, z.B. das Kopieren der Container ...

Gruss
Christa

UScharf
Beiträge: 2
Registriert: Do 3. Jun 2004, 11:35
Kontaktdaten:

Hier noch einErgänzung

Beitrag von UScharf » Do 3. Jun 2004, 11:39

Hi,
ich hatte ein ähnliches Problem wie

MySQL Error: 1062 (Duplicate entry '11' for key 1)
Session halted.

Dabei habe ich festgestellt,
dass die Variable $MyTplSeq am Anfang nicht hochgezählt wird....

Ich habe es wie folgt korrigiert: (ca. Zeile 289)
if ($db2->next_record()) $MyTplSeq=$db2->Record[0];
#*******NEU
$MyTplSeq++;

Ausserdem habe ich sicherheitshalber alle Module vorkonfiguriert ;-)

mauerblume
Beiträge: 89
Registriert: Do 12. Feb 2004, 20:42
Wohnort: Niederlausitz
Kontaktdaten:

Mandant kopieren funzt nicht

Beitrag von mauerblume » Mo 23. Aug 2004, 22:29

erhalte immer fehlermeldung:

Parse error: parse error, unexpected T_INCLUDE in mandant_kopie.php on line 21

hilfe!

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

Re: Mandant kopieren funzt nicht

Beitrag von Axel » Di 24. Aug 2004, 07:49

mauerblume hat geschrieben:erhalte immer fehlermeldung:

Parse error: parse error, unexpected T_INCLUDE in mandant_kopie.php on line 21

hilfe!
Hy,
das Script wurde seitdem mehrfach überarbeitet (Erweiterungen, Verbesserungen). Das alte Script bitte nicht verwenden. Siehe Thread http://www.contenido.de/forum/viewtopic.php?t=5377.

Hier das aktuelle Script. (Anleitung siehe Script) Hinweis: Das Script muss nun im Contenido-Ordner liegen!:

Code: Alles auswählen

<?
/* Script um Kunden zu kopieren
 * Version 2.0
 * Für Contenido 4.4.x (Getestet mit 4.4.4)
 * Autor: Axel Womatschka
 * Datum: 21.01.2004
 * Zuletzt geändert am: 23.8.2004

 * Dieses Script kopiert die Module, Layouts, Templates, Container und auf Wunsch auch Kategorien und Artikel
 * von einem Kunden (Mandanten) ($old_idclient) auf einen anderen (neuen) Mandanten ($new_idclient)
 * Beide müssen bereits existieren.
*/

/* Folgende Tabellen werden vom Script verändert. Diese daher besser vorher sichern.
* con_lang
* con_clients_lang
* con_mod
* con_lay
* con_tpl
* con_tpl_conf
* con_container
* con_container_conf
* con_cat
* con_cat_lang
* con_sequence
* con_cat_tree (wird automatisch von contenido neu erstellt)
* Wenn die Artikel kopiert werden auch folgende sichern
* con_art
* con_art_lang
* con_cat_art
*/

/* Anleitung:
* Kopiere die .php-Datei mit diesem Script den Contenido-Ordner
* z.B. contenido/kopieren.php
*
* 1. Melde dich als sysadmin an Contenido an (oder mit einem anderen Account welches das Recht hat Mandanten anzulegen)
* 2. Lege einen neuen Mandanten an
* 3. Unter "Sprachen" nun den neuen Mandanten uas der Liste auswählen und eine neue Sprache anlegen
     (Solltest du das vergessen, legt das Script automatisch eine neue Sprache an)
* 4. Merke dir den Index des neuen Mandanten (steht in () dahinter)
* 5. Öffnen dieses Script und setze direkt zu Anfang (Zeile 72) die Variable $new_idclient= Index des neuen Mandanten
     Setze (Zeile 74) die Variable $old_idclient= zu kopierender Mandant
     Angeben ob Kategorien, Artikel mit kopiert werden sollen
* 6. Abmelden von Contenido (falls noch eingeloggt)
* 7. Script starten
* 8. Wenn das Script fertig ist im Ordner contenido das Script im Browser updateseqruntime.php aufrufen (Setzt die Max-Indizes in der Tabelle con_sequence neu)
*  FERTIG
*/

/* 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)
 * conlib/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 "includes/config.php"; /* Die braucht man immer */
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'); /* Brauchen wir um Navigationsbaum für neuen Mandanten zu erzeugen */

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');

/* 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; /* Kategorien kopieren?  0=Nein, 1=Ja */
    $CopyArtikel=1; /* Artikel kopieren? (setzt $CopyKategorien=1 voraus 0=Nein, 1=Ja */
/***********************************************************************************************/

/* Instanzen der DB_Contenido */
$db1 = new DB_Contenido;
$db2 = new DB_Contenido;
$db = new DB_Contenido;
$db_str = new DB_Contenido; // wird für functions.str.php benötigt

$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();
$ArrIdxNeuParentID=array();
$ArrIdxNeuPostID=array();
$ArrIdxNeuPreID=array();

/* Für die Artikel */
$ArrIdxAltArt=array();
$ArrIdxNeuArt=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'>Prüfen: <BR>".$Meldung."</font></h3><hr>";
page_close();
die($Meldung); /* Scriptausführung abbrechen */
}

if ($CopyArtikel==1 and $CopyKategorien==0)
{
$Meldung="Artikel können nur kopiert werden wenn auch die Kategorien kopiert werden sollen. Die Ausführung wird abgebrochen.";
echo "<hr><h3><font face='Arial' color='#ff0000'>Prüfen: <BR>".$Meldung."</font></h3><hr>";
page_close();
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='#525169'>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='#525169'>Spracheinstellung des neuen Mandanten existiert bereits (idlang = ".$merk_idlang_neu."</font></h3>";
        echo "<hr>";
        } /*End If */
} /* End While */

echo "<h3><font face='Arial' color='#525169'>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='#525169'>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];
}

$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='#525169'>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 */
$sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyModSeq." where seq_name = '".$cfg["tab"]["mod"]."'";
$db2->query($sql);
echo "<h3><font face='Arial' color='#525169'>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];
}

$sql="";
$lauf=0;
echo "<hr><h2><font face='Arial' color='#525169'>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='#525169'>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];
$MyTplSeq++;

$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='#525169'>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='#525169'>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='#525169'>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='#525169'>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='#525169'>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='#525169'>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>";
/* Die Container sind nur an den Index der Templates gebunden, nicht direkt an die idClient, also nicht direkt an den Mandanten */
if ($CopyKategorien==1) /* End if ist in Zeile 696 */
{
    /*KATEGORIEN kopieren */
    echo "<hr><h2><font face='Arial' color='#525169'>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())
    {
      if ($db1->Record[0]==0)
      {
        $neueCatid=0;
      } else {
        $neueCatid=$MyKatSeq;
        $MyKatSeq++; /* erhöhe um 1 */
      }

      $ArrIdxAltKat[]=$db1->Record[0]; /* Spalte idcat */
      $ArrIdxNeuKat[]=$neueCatid;
      /* Neu am 29.7.2004 */
      /* Um die Kategorien zu kopieren, reicht es nicht nur die Werte idcat für den neuen Mandanten zu generieren
       * Es müssem auch die Werte preid, postid und parentid kopiert und angepasst werden
       * denn diese bestimmen später den Aufbau des Navigationsbaumes!
       * Die Funktion strRemakeTreeTable der Datei functions.str.php erzeugt die Einträge nach jeder Änderung  der Struktur neu.
       * Dazu werden die Werte der Tabelle con_cat ausgelesen. Hier steht zu jeder catid (Kategorie bzw. Menüpunkt)
       * die Vorgänger-Kategorie (preid) und der Nachfolger (postid). */
      /* Ende neu am 29.7.2004 */
      $ArrIdxAltParentID[]=$db1->Record[2]; /* Spalte parentid */
      $ArrIdxAltPreID[]=$db1->Record[3]; /* Spalte preid */
      $ArrIdxAltPostID[]=$db1->Record[4]; /* Spalte postid */

      $sql = "INSERT INTO ".$cfg["tab"]["cat"]." VALUES ('".$neueCatid."', '".$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 */

      /* Die neuen idcat wurden in die Datenbank geschrieben, allerdings haben die neuen Kategorien noch die Zuordnungen zu den alten
       * parentid, preid und postid
       * Das muss nun noch korrigiert werden
       * ACHTUNG: Ist parentid, preid oder postid 0, so bleibt er 0 !  */

        /* parentid: Für jeden Eintrag in $ArrIdxAltParentID[] */
        $lauf=0;
        $ArrWerte=array_values($ArrIdxAltParentID);
        foreach ($ArrWerte as $value)
        {
        /* Suche Wert in $ArrIdxAltKat[] und merke Arrayindex $i */
        if ($ArrIdxAltParentID[$lauf]==0)
        {
            $ArrIdxNeuParentID[$lauf]=0;
        } else {
            /* Hinweis: array_search(suche das, hier drin) */
            $i=array_search($ArrIdxAltParentID[$lauf], $ArrIdxAltKat);
            /* Setze nun $ArrIdxNeuParentID[]=$ArrIdxNeuKat[i] */
            $ArrIdxNeuParentID[$lauf]=$ArrIdxNeuKat[$i];
        } /* end if */
        $lauf++;
        }

        /* preid: Für jeden Eintrag in $ArrIdxAltPreID[] */
        $lauf=0;
        $ArrWerte=array_values($ArrIdxAltPreID);
        foreach ($ArrWerte as $value)
        {
        if ($ArrIdxAltPreID[$lauf]==0)
        {
            $ArrIdxNeuPreID[$lauf]=0;
        } else {
        /* Suche Wert in $ArrIdxAltKat[] und merke Arrayindex $i */
        $i=array_search($ArrIdxAltPreID[$lauf], $ArrIdxAltKat);
        /* Setze nun $ArrIdxNeuPreID[]=$ArrIdxNeuKat[i] */
        $ArrIdxNeuPreID[$lauf]=$ArrIdxNeuKat[$i];
        } /* end if */
        $lauf++;
        }

        /* postid: Für jeden Eintrag in $ArrIdxAltPostID[] */
        $lauf=0;
        $ArrWerte=array_values($ArrIdxAltPostID);
        foreach ($ArrWerte as $value)
        {
        if ($ArrIdxAltPostID[$lauf]==0)
        {
            $ArrIdxNeuPostID[$lauf]=0;
        } else {
        /* Suche Wert in $ArrIdxAltKat[] und merke Arrayindex $i */
        $i=array_search($ArrIdxAltPostID[$lauf], $ArrIdxAltKat);
        /* Setze nun $ArrIdxNeuPostID[]=$ArrIdxNeuKat[i] */
        $ArrIdxNeuPostID[$lauf]=$ArrIdxNeuKat[$i];
        } /* end if */
        $lauf++;
        }

        /* Schreibe diese nun zu den neuen idcat in die Datenbank  */
        $lauf=0;
        $ArrWerte=array_values($ArrIdxNeuKat);
        foreach ($ArrWerte as $value)
        {
        $sql="Update ".$cfg["tab"]["cat"]." set parentid=".$ArrIdxNeuParentID[$lauf].", preid=".$ArrIdxNeuPreID[$lauf].", postid=".$ArrIdxNeuPostID[$lauf]." where idcat = ".$value."";
        $db2->query($sql);
        $lauf++;
        }


    /*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='#525169'>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 */



    echo "<h3><font face='Arial' color='#525169'>Die Daten der Tabelle con_cat (Kategorien) wurde kopiert....kopiere nun deren Bezeichnungen und Sprache...</font></h3>";
    echo "<hr>";

    /* Nun müssen die Bezeichnungen der Kategorien kopiert werden (steht in Tabelle con_cat_lang) */
    $sql = "SELECT * FROM ".$cfg["tab"]["cat_lang"]." where idlang = ".$merk_idlang_old." 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];

    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='#525169'>Die Bezeichnungen der Kategorien wurden kopiert.</font></h3>";
    echo "<hr>";
} /* End if von if ($CopyKategorien==1) Zeile 513*/

/*****************************************************************************************/
/*ARTIKEL kopieren*/
if ($CopyArtikel==1 and $CopyKategorien==1)
{
    echo "<h3><font face='Arial' color='#525169'>Kopiere nun alle Artikel</font></h3>";
    /* ermittel alle Artikel des zu kopierenden Kunden */
    $sql = "SELECT * from ".$cfg["tab"]["art"]." where idclient=".$old_idclient." order by idart";
    $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_art aus */
    $MyArtSeq=0;
    $sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["art"]."'";
    $db2->query($sql);
    if ($db2->next_record())
    {
    $MyArtSeq=$db2->Record[0];
    }
    $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='#525169'>Kopiere die folgenden Artikel:</font></h2>";
    while($db1->next_record())
    {
      $lauf++;
      /*Merke im Array den Index (idart) der Artikel des alten Mandanten */
      $ArrIdxAltArt[]=$db1->Record[0];
      /*Merke im Array $ArrIdxNeuArt[] den Index (idart) der Artikel des neuen Mandanten */
      $ArrIdxNeuArt[]=$MyArtSeq;
      /*Das Merken im Array ist nötig um später noch zu wissen welche alte idart welcher neuen idart entspricht*/

      $sql = "INSERT INTO ".$cfg["tab"]["art"]." VALUES (".$MyArtSeq.", ".$new_idclient."";
      $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 */
      $MyArtSeq++; /* erhöhe um 1 */
    }

    /* schreibe nun den letzten wert von $MyArtSeq bei con_mod in die Tabelle con_sequence */
    $sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyArtSeq." where seq_name = '".$cfg["tab"]["art"]."'";
    $db2->query($sql);
    echo "<h3><font face='Arial' color='#525169'>Es wurden ".$lauf." neue Einträge in der Tabelle >".$cfg["tab"]["art"]."< erzeugt.</font></h3>";
    echo "<hr>";

    /* Jetzt noch die Einträge der Tabelle con_art_lang erzeugen - hier stehen die eigentlichen Artikelinhalte */
    /**************Tabelle CON_ART_LANG************************************************************************************************************/
    echo "<h3><font face='Arial' color='#525169'>Erzeuge nun mit diesen neuen Einträgen die neuen Texte der Artikel (Tabelle >".$cfg["tab"]["art_lang"]."<)</font></h3>";
    /* ermittel alle Einträge des zu kopierenden Kunden */
    $sql = "SELECT * from ".$cfg["tab"]["art_lang"]." where idlang = ".$merk_idlang_old."";
    $db1->query($sql); /* liefert Zeiger auf Ergebnisliste (Result Set)*/
    $lauf=0;
    while($db1->next_record())
    {
      
      /* Lese nun idart aus und stelle fest, wo dieser idart im Array der alten Indizes steht (in ArrIdxAltArt[]) */
      $ArrPosArt=array_search($db1->Record[1], $ArrIdxAltArt);
      if ($ArrPosArt!==False) /* Nötig, weil in con_art_lang auch Artikel andere Mandanten der gleichen Sprche stehen könnten */
      {
          /* An welcher Position im Array steht der Wert idtplcfg */
          $ArrPosTplConf=array_search($db1->Record[3], $ArrIdxAltTplConf);
          echo "<font face='Arial' color='#000000'>Kopiere Artikel ".$db1->Record[4]."</font><BR>";
          $lauf++;

          $sql = "INSERT INTO ".$cfg["tab"]["art_lang"]." VALUES (".$ArrIdxNeuArt[$ArrPosArt].", ".$ArrIdxNeuArt[$ArrPosArt].", ".$merk_idLang_neu.", ".$ArrIdxNeuTplConf[$ArrPosTplConf]."";

          /* im Feld time_target_cat steht die Kategorie in die nach Zeitablauf der Artikel verschoben wird. Diese ist für den neuen Mandanten auch noch anzupassen */
          $ArrPosKat=array_search($db1->Record[24], $ArrIdxAltKat);
          $db1->Record[24]=$ArrIdxNeuKat[$ArrPosKat];
          for ($i=4;$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);
        }
    }
    echo "<h3><font face='Arial' color='#525169'>Es wurden ".$lauf." neue Einträge in der Tabelle >".$cfg["tab"]["art_lang"]."< erzeugt.</font></h3><BR>";
    echo "<h3><font face='Arial' color='#525169'>Kopiere nun die Zuordnungen der Artikel zu den Kategorien (Tabelle >".$cfg["tab"]["cat_art"]."<)</font></h3>";
    $sql = "SELECT * from ".$cfg["tab"]["cat_art"]." order by idart";
    $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_cat_art aus */
    $MyCatArtSeq=0;
    $sql="Select nextid as MyNextID from ".$cfg["tab"]["sequence"]." where seq_name = '".$cfg["tab"]["cat_art"]."'";
    $db2->query($sql);
    if ($db2->next_record())
    {
    $MyCatArtSeq=$db2->Record[0];
    }
    $sql="";
    $lauf=0;
    while($db1->next_record())
    {
      /* Lese nun idart aus und stelle fest, wo dieser idart im Array der alten Indizes steht (in ArrIdxAltArt[]) */
      $ArrPosArt=array_search($db1->Record[2], $ArrIdxAltArt);
      if ($ArrPosArt!==False) /* Nötig, weil in con_cat_art auch Artikel anderer Mandanten der gleichen Sprache stehen könnten */
      {
          $lauf++;
          $ArrPosKat=array_search($db1->Record[1], $ArrIdxAltKat);
          $sql = "INSERT INTO ".$cfg["tab"]["cat_art"]." VALUES (".$MyCatArtSeq.", ".$ArrIdxNeuKat[$ArrPosKat].", ".$ArrIdxNeuArt[$ArrPosArt]."";

          for ($i=3;$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);
          $MyCatArtSeq++;
        }
    }
    /* schreibe nun den letzten wert von $MyCatArtSeq bei con_mod in die Tabelle con_sequence */
    $sql="Update ".$cfg["tab"]["sequence"]." set nextid=".$MyCatArtSeq." where seq_name = '".$cfg["tab"]["cat_art"]."'";
    $db2->query($sql);
    /*****************************************************************************************/

    echo "<h3><font face='Arial' color='#525169'>Die Artikel wurden kopiert.</font></h3>";
    echo "<hr>";
} /* End if von ($CopyArtikel==1 and $CopyKategorien==1) Zeile 704*/

echo "<h1><font face='Arial' color='#0055dd'>FERTIG</font></h1>";
echo "<font face='Arial' color='#525169'>Es wurden alle Module, Templates, Layouts, Container und Kategorien kopiert.</font>";
/* con_sequence update -aktualisiert die Tabelle con_sequence*/
class DB_Upgrade extends DB_Contenido {
}

$db = new DB_Contenido;

$sql = "SHOW TABLES";
$db->query($sql);

while ($db->next_record())
{
    dbUpdateSequence($cfg['sql']['sqlprefix']."_sequence", $db->f(0));
}

echo "<br><font face='Arial' color='#FF0022'>Tabelle con_sequence wurde aktualisiert.</font>";

/* Nun muss die Baum-Struktur der Kategorien kopiert werden (steht in Tabelle con_cat_tree) */
strRemakeTreeTable(); /* Contenido Funktion in includes\functions.str.php */

echo "<br><font face='Arial' color='#FF0022'>Die Funktion strRemakeTreeTable() aus functions.str.php wurde ausgeführt (schreibt die Tabelle con_cat_tree neu für die Navigation/Baumstruktur)</font>";

// code ends here

$cfg["debug"]["backend_exectime"]["end"] = getmicrotime();

if ($cfg["debug"]["rendering"] == true)
{
    echo "Rendering this page took: " . ($cfg["debug"]["backend_exectime"]["end"] - $cfg["debug"]["backend_exectime"]["start"])." seconds<br>";
    echo "Building the complete page took: " . ($cfg["debug"]["backend_exectime"]["end"] - $cfg["debug"]["backend_exectime"]["fullstart"])." seconds<br>";

    if (function_exists("memory_get_usage"))
    {
        echo "Include memory usage: ".human_readable_size(memory_get_usage()-$cfg["debug"]["oldmemusage"])."<br>";
        echo "Complete memory usage: ".human_readable_size(memory_get_usage())."<br>";

    }

}
page_close();
?>

mauerblume
Beiträge: 89
Registriert: Do 12. Feb 2004, 20:42
Wohnort: Niederlausitz
Kontaktdaten:

Mandanten kopieren hat funktioniert, aber WYSIWYG geht nicht

Beitrag von mauerblume » Di 24. Aug 2004, 21:29

JA, wunderbar!!!!
Bis auf die Artikel funktioniert es bestens.

Einen Fehler habe ich aber nach dem Kopieren:
Der WYSIWYG-Editor geht nicht mehr.

Ich kann im Contenido Artikel anlegen, also die Punkte: Übersicht, Eigenschaften, Konfiguration funktionieren,
aber nicht der Editor und die Vorschau!

Fehlermeldung:
The requested URL /front_content.php was not found on this server.

Was kann ich tun?

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

Re: Mandanten kopieren hat funktioniert, aber WYSIWYG geht n

Beitrag von Axel » Mi 25. Aug 2004, 08:13

mauerblume hat geschrieben:JA, wunderbar!!!!
Bis auf die Artikel funktioniert es bestens.

Einen Fehler habe ich aber nach dem Kopieren:
Der WYSIWYG-Editor geht nicht mehr.

Ich kann im Contenido Artikel anlegen, also die Punkte: Übersicht, Eigenschaften, Konfiguration funktionieren,
aber nicht der Editor und die Vorschau!

Fehlermeldung:
The requested URL /front_content.php was not found on this server.

Was kann ich tun?
:roll: Hmm...weder der Editor noch die front_content.php wird vom Script angepackt. Habe mir mal angesehen, was Contenido so macht, wenn man im BackEnd einen Artikel editieren möchte und bin auf die Berechtigungen gestoßen. :idea:
Meld dich mal als admin oder sysadmin an Contenido an, wähle den neuen Mandanten aus und prüfe mal die Berechtigungen Kategorien und Artikel zu ändern.

Was meinst du mit "bis auf die Artikel...". Wenn du den Parameter=1 setzt werden die doch alle mit kopiert, oder nicht?

mauerblume
Beiträge: 89
Registriert: Do 12. Feb 2004, 20:42
Wohnort: Niederlausitz
Kontaktdaten:

front_content.php kann nicht gefunden werden

Beitrag von mauerblume » Mi 25. Aug 2004, 08:31

Ich habe Contenido 4.4.2.
Die Artikel wurden nicht mit kopiert, obwohl ich auf "1" gestellt hatte.
Die Kategorien wurden alle ordentlich kopiert.
Natürlich bin ich als sysadmin eingeloggt und habe die richtigen Berechtigungen!!!!
Aber der Fehler mit dem WYSIWYG tritt ja nun bei allen Mandanten auf.

Nachdem ich von einem Mandanten auf den anderen kopiert hatte, ging bei keinem mehr der Editor.

Würde per Mail auch mal die URL durchgeben, zum überzeugen.

doreen@mauerblume.com

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

Re: front_content.php kann nicht gefunden werden

Beitrag von Axel » Mi 25. Aug 2004, 08:39

mauerblume hat geschrieben:Ich habe Contenido 4.4.2.
Die Artikel wurden nicht mit kopiert, obwohl ich auf "1" gestellt hatte.
Die Kategorien wurden alle ordentlich kopiert.
Natürlich bin ich als sysadmin eingeloggt und habe die richtigen Berechtigungen!!!!
Aber der Fehler mit dem WYSIWYG tritt ja nun bei allen Mandanten auf.

Nachdem ich von einem Mandanten auf den anderen kopiert hatte, ging bei keinem mehr der Editor.

Würde per Mail auch mal die URL durchgeben, zum überzeugen.

doreen@mauerblume.com
Ich weiß nicht, was sich "unter der Haube" von Version 4.4.2 auf 4.4.4 geändert hat. Steht was im error-log?
Hast du die Tabellen, wie im Script beschrieben, vorher gesichert?
Nutzt du eine Standard-Installation von Contenido oder wurden Module verändert? Nutzt du den Standard-Editor oder wurde der geändert?

Nur noch mal zur Sicherheit: Du hast einen neuen Mandanten angelegt, dann eine neue Sprache und hast dem neuen Mandanten die neue Sprache zugeordnet. Der neue Mandant ist frisch (keine Kategorien, Module oder sonst irgendwas). Der neue Mandant hat z.B. die id 12. Der Mandant den du kopieren möchtest hat die id 3. Im script hast du dann diese angegeben. Ist das so gelaufen, oder war irgendwas anders?

PS: Hab im Forum mal gesucht. Der Fehler, den du erhältst (front_content.php not found) ist recht populär, hat aber nichts mit dem Script zu tun (z.B. http://contenido.de/forum/viewtopic.php ... +php+found) Bist du sicher das es überhaupt am Script liegt?

mauerblume
Beiträge: 89
Registriert: Do 12. Feb 2004, 20:42
Wohnort: Niederlausitz
Kontaktdaten:

Beitrag von mauerblume » Mi 25. Aug 2004, 09:14

Habe wie immer mal keine Tabellen der Datenbank gesichert........leider.

Log ist voll mit Fehlern, die mir aber leider nicht so viel sagen.
Log:

[24-Aug-2004 14:11:09] Invalid SQL: INSERT INTO con_lay VALUES ('5','5',"Standard","Das Standard Layout

-HTML Code vom Layout-

[24-Aug-2004 14:11:10] Invalid SQL: INSERT INTO con_cat VALUES ('44', '5',"0","0","12","0","","0000-00-00 00:00:00","0000-00-00 00:00:00")<br><br>
[24-Aug-2004 14:11:10] Invalid SQL: INSERT INTO con_cat_lang VALUES ('40',"44","4","51","Hauptnavigation","1","1","0","","0000-00-00 00:00:00","0000-00-00 00:00:00")<br><br>
[24-Aug-2004 14:11:10] Invalid SQL: INSERT INTO con_art VALUES (31, 5)<br><br>

Im Log steht bezüglich der zu kopierenden Artikel:

[24-Aug-2004 14:11:10] Invalid SQL: INSERT INTO con_art_lang VALUES (37, 37, , 210,"Startartikel Punkt 2.1","","","2003-05-15 16:47:07","2004-03-05 23:08:58","admin","sysadmin","1","0","0","0","0","0000-00-00 00:00:00","0000-00-00 00:00:00","0","","","","0","0","44","0","0")<br><br>

Also, das steht zu jedem Artikel.

Habe die Artikel dann per Hand angelegt, das ging auch, bis auf den Editor.

weiter unten im Log:

[24-Aug-2004 14:20:17] PHP Parse error: parse error, unexpected ')' in /vrmd/homepages/u13235/ski/front_content.php(546) : eval()'d code on line 226

also, muß ich jetzt die ganze Datenbank löschen und alles neu einspielen oder gibt es noch eine Reparaturchance?

mauerblume
Beiträge: 89
Registriert: Do 12. Feb 2004, 20:42
Wohnort: Niederlausitz
Kontaktdaten:

Beitrag von mauerblume » Mi 25. Aug 2004, 09:21

ja, es ist eine standard-contenido-installation, standard editor

ich habe einen neuen mandanten angelegt
ihm dann eine prache gegeben
mir die ID gemerkt
dann das script gestartet
das script zeigte auch die richtigen mandanten an (new und old)

danach hatte der mandant alle kategorien des alten mandanten.

den cms-pfad habe ich nicht verschoben.
ich weiß nicht ob es an dem script liegt, irgendwo muß doch der pfad für den Editor hinterlegt sein.
er findet die front_content.php nicht, obwohl sie da ist!

die seite läßt sich ja aufrufen, nur kann ich nix mehr editieren!

Gesperrt