function ajouter($lang, $ref, $prix, $ecotaxe, $promo, $prix2, $rubrique, $nouveaute, $perso, $poids, $stock, $tva, $ligne, $titre, $chapo, $description, $postscriptum)
{
    $ref = str_replace(" ", "", $ref);
    $ref = str_replace("/", "", $ref);
    $ref = str_replace("+", "", $ref);
    $ref = str_replace(".", "-", $ref);
    $ref = str_replace(",", "-", $ref);
    $ref = str_replace(";", "-", $ref);
    $ref = str_replace("'", "", $ref);
    $ref = str_replace("\n", "", $ref);
    $ref = str_replace("\"", "", $ref);
    $produit = new Produit();
    $produit->charger($ref);
    if ($produit->id) {
        redirige("produit_modifier.php?rubrique={$rubrique}&existe=1");
    }
    $produit = new Produit();
    $prix = str_replace(",", ".", $prix);
    $produit->ref = $ref;
    $produit->datemodif = date("Y-m-d H:i:s");
    $produit->prix = $prix;
    $produit->prix2 = $prix2;
    if ($produit->prix2 == "") {
        $produit->prix2 = $prix;
    }
    $produit->ecotaxe = $ecotaxe;
    $produit->rubrique = $rubrique;
    if ($promo == "on") {
        $produit->promo = 1;
    } else {
        $produit->promo = 0;
    }
    if ($nouveaute == "on") {
        $produit->nouveaute = 1;
    } else {
        $produit->nouveaute = 0;
    }
    if ($ligne == "on") {
        $produit->ligne = 1;
    } else {
        $produit->ligne = 0;
    }
    $produit->perso = $perso;
    $produit->poids = $poids;
    $produit->stock = $stock;
    $produit->tva = str_replace(",", ".", $tva);
    $lastid = $produit->add();
    $produit->id = $lastid;
    $produitdesc = new Produitdesc();
    $produitdesc->chapo = $chapo;
    $produitdesc->description = $description;
    $produitdesc->postscriptum = $postscriptum;
    $produitdesc->produit = $lastid;
    $produitdesc->lang = $lang;
    $produitdesc->titre = $titre;
    $produitdesc->chapo = str_replace("\n", "<br />", $produitdesc->chapo);
    $produitdesc->add();
    $rubcaracteristique = new Rubcaracteristique();
    $caracteristiquedesc = new Caracteristiquedesc();
    $caracval = new Caracval();
    $query = "select * from {$rubcaracteristique->table} where rubrique='" . $produit->rubrique . "'";
    $resul = mysql_query($query);
    while ($row = mysql_fetch_object($resul)) {
        $caracval = new Caracval();
        $deb = "caract";
        $deb2 = "typecaract";
        $val = $row->caracteristique;
        $var = $deb . $val;
        $var2 = $deb2 . $val;
        global ${$var};
        global ${$var2};
        $query2 = "delete from {$caracval->table} where produit='" . $produit->id . "' and caracteristique='" . $row->caracteristique . "'";
        $resul2 = mysql_query($query2);
        if (${$var} != "") {
            if (${$var2} == "c") {
                foreach (${$var} as $selectval) {
                    $caracval->produit = $lastid;
                    $caracval->caracteristique = $row->caracteristique;
                    $caracval->caracdisp = $selectval;
                    $caracval->add();
                }
            } else {
                $caracval->produit = $lastid;
                $caracval->caracteristique = $row->caracteristique;
                $caracval->valeur = ${$var};
                $caracval->add();
            }
        }
    }
    $rubdeclinaison = new Rubdeclinaison();
    $declinaisondesc = new Declinaisondesc();
    $declidisp = new Declidisp();
    $declidispdesc = new Declidispdesc();
    $query = "select * from {$rubdeclinaison->table} where rubrique='" . $rubrique . "'";
    $resul = mysql_query($query);
    while ($row = mysql_fetch_object($resul)) {
        $declinaisondesc->charger($row->declinaison);
        $query2 = "select * from {$declidisp->table} where declinaison='{$row->declinaison}'";
        $resul2 = mysql_query($query2);
        $nbres = mysql_num_rows($resul2);
        while ($row2 = mysql_fetch_object($resul2)) {
            $stock = new Stock();
            $stock->declidisp = $row2->id;
            $stock->produit = $lastid;
            $stock->valeur = 0;
            $stock->surplus = 0;
            $stock->add();
        }
    }
    $produitdesc->reecrire();
    ActionsModules::instance()->appel_module("ajoutprod", $produit);
    redirige($_SERVER['PHP_SELF'] . "?ref=" . $produit->ref . "&rubrique=" . $produit->rubrique . "&lang=" . $lang);
}
 public function duplicate($duplicateRef, $duplicateDescription, $duplicateInfos, $duplicateFeatures, $duplicateVariants, $duplicateAccessories, $autoAccessories, $duplicateAssociatedContents, $duplicatePictures, $duplicateDocuments)
 {
     $ref = self::cleanRef($duplicateRef);
     if ($ref == '' || self::exist_ref($ref)) {
         throw new TheliaAdminException("Ref already exists", TheliaAdminException::REF_ALREADY_EXISTS);
     }
     $duplicatedProduct = new Produit($this->ref);
     $duplicatedProduct->id = '';
     $duplicatedProduct->ref = $ref;
     $duplicatedProduct->datemodif = '0000-00-00 00:00:00';
     $duplicatedProduct->ligne = 0;
     $duplicatedProduct->stock = 0;
     $duplicatedProduct->classement = $this->getMaxRanking($duplicatedProduct->rubrique) + 1;
     if (!$duplicateInfos) {
         $duplicatedProduct->prix = 0;
         $duplicatedProduct->ecotaxe = 0;
         $duplicatedProduct->promo = 0;
         $duplicatedProduct->prix2 = 0;
         $duplicatedProduct->nouveaute = 0;
         $duplicatedProduct->perso = 0;
         $duplicatedProduct->garantie = 0;
         $duplicatedProduct->poids = 0;
         $duplicatedProduct->tva = 0;
     }
     $duplicatedProduct->id = $duplicatedProduct->add();
     if ($duplicateDescription) {
         foreach ($this->query_liste("SELECT * FROM " . Produitdesc::TABLE . " WHERE produit='{$this->id}'", 'Produitdesc') as $produitdesc) {
             $produitdesc->id = '';
             $produitdesc->produit = $duplicatedProduct->id;
             $produitdesc->add();
         }
     } else {
         $produitdesc = new Produitdesc();
         $produitdesc->produit = $duplicatedProduct->id;
         $produitdesc->add();
     }
     if ($duplicateFeatures) {
         foreach ($this->query_liste("SELECT * FROM " . Caracval::TABLE . " WHERE produit='{$this->id}'", 'Caracval') as $caracval) {
             $caracval->id = '';
             $caracval->produit = $duplicatedProduct->id;
             $caracval->add();
         }
     }
     if ($duplicateVariants) {
         foreach ($this->query_liste("SELECT * FROM " . Stock::TABLE . " WHERE produit='{$this->id}'", 'Stock') as $stock) {
             $stock->id = '';
             $stock->produit = $duplicatedProduct->id;
             $stock->valeur = 0;
             $stock->add();
         }
         foreach ($this->query_liste("SELECT * FROM " . Exdecprod::TABLE . " WHERE produit='{$this->id}'", 'Exdecprod') as $exdecprod) {
             $exdecprod->id = '';
             $exdecprod->produit = $duplicatedProduct->id;
             $exdecprod->add();
         }
     }
     if ($duplicateAccessories) {
         foreach ($this->query_liste("SELECT * FROM " . Accessoire::TABLE . " WHERE produit='{$this->id}'", 'Accessoire') as $accessoire) {
             $accessoire->id = '';
             $accessoire->produit = $duplicatedProduct->id;
             $accessoire->add();
         }
     }
     if ($autoAccessories) {
         $accessoire = new AccessoireAdmin();
         $accessoire->produit = $duplicatedProduct->id;
         $accessoire->accessoire = $this->id;
         $accessoire->classement = $accessoire->getMaxRanking($duplicatedProduct->id);
         $accessoire->add();
         $accessoire = new AccessoireAdmin();
         $accessoire->produit = $this->id;
         $accessoire->accessoire = $duplicatedProduct->id;
         $accessoire->classement = $accessoire->getMaxRanking($this->id);
         $accessoire->add();
     }
     if ($duplicateAssociatedContents) {
         foreach ($this->query_liste("SELECT * FROM " . Contenuassoc::TABLE . " WHERE type=1 AND objet='{$this->id}'", 'Contenuassoc') as $contenuassoc) {
             $contenuassoc->id = '';
             $contenuassoc->objet = $duplicatedProduct->id;
             $contenuassoc->add();
         }
     }
     if ($duplicatePictures) {
         foreach ($this->query_liste("SELECT * FROM " . Image::TABLE . " WHERE produit='{$this->id}'", 'ImageAdmin') as $image) {
             $imagePath = sprintf(__DIR__ . "/../../client/gfx/photos/produit/%s", $image->fichier);
             if (file_exists($imagePath)) {
                 $increment = 0;
                 do {
                     $increment++;
                     $duplicatedName = 'D' . $increment . '_' . $image->fichier;
                     $exists = file_exists($duplicatedName);
                 } while ($exists);
                 $duplicatedImagePath = sprintf(__DIR__ . "/../../client/gfx/photos/produit/%s", $duplicatedName);
                 copy($imagePath, $duplicatedImagePath);
                 $image->fichier = $duplicatedName;
                 $originalId = $image->id;
                 $image->id = '';
                 $image->produit = $duplicatedProduct->id;
                 $image->classement = $image->getMaxRanking('produit', $duplicatedProduct->id);
                 $image->id = $image->add();
                 foreach ($this->query_liste("SELECT * FROM " . Imagedesc::TABLE . " WHERE image='{$originalId}'", 'Imagedesc') as $imagedesc) {
                     $imagedesc->id = '';
                     $imagedesc->image = $image->id;
                     $imagedesc->add();
                 }
             }
         }
     }
     if ($duplicateDocuments) {
         foreach ($this->query_liste("SELECT * FROM " . Document::TABLE . " WHERE produit='{$this->id}'", 'DocumentAdmin') as $document) {
             $documentPath = sprintf(__DIR__ . "/../../client/document/%s", $document->fichier);
             if (file_exists($documentPath)) {
                 $increment = 0;
                 do {
                     $increment++;
                     $duplicatedName = 'D' . $increment . '_' . $document->fichier;
                     $exists = file_exists($duplicatedName);
                 } while ($exists);
                 $duplicatedDocumentPath = sprintf(__DIR__ . "/../../client/gfx/photos/produit/%s", $duplicatedName);
                 copy($documentPath, $duplicatedDocumentPath);
                 $document->fichier = $duplicatedName;
                 $originalId = $document->id;
                 $document->id = '';
                 $document->produit = $duplicatedProduct->id;
                 $document->classement = $document->getMaxRanking('produit', $duplicatedProduct->id);
                 $document->id = $document->add();
                 foreach ($this->query_liste("SELECT * FROM " . Documentdesc::TABLE . " WHERE document='{$originalId}'", 'Documentdesc') as $documentdesc) {
                     $documentdesc->id = '';
                     $documentdesc->document = $document->id;
                     $documentdesc->add();
                 }
             }
         }
     }
     redirige('produit_modifier.php?ref=' . $duplicatedProduct->ref . '&rubrique=' . $duplicatedProduct->rubrique);
 }