/**
  *  Write the object to document file to disk
  *
  *	@param	Don			$don	        Donation object
  *  @param  Translate	$outputlangs    Lang object for output language
  *	@return	int             			>0 if OK, <0 if KO
  */
 function write_file($don, $outputlangs)
 {
     global $user, $conf, $langs, $mysoc;
     $now = dol_now();
     $id = !is_object($don) ? $don : '';
     if (!is_object($outputlangs)) {
         $outputlangs = $langs;
     }
     $outputlangs->load("main");
     $outputlangs->load("dict");
     $outputlangs->load("companies");
     $outputlangs->load("bills");
     $outputlangs->load("products");
     $outputlangs->load("donations");
     if (!empty($conf->don->dir_output)) {
         // Definition de l'objet $don (pour compatibilite ascendante)
         if (!is_object($don)) {
             $don = new Don($this->db);
             $ret = $don->fetch($id);
             $id = $don->id;
         }
         // Definition de $dir et $file
         if (!empty($don->specimen)) {
             $dir = $conf->don->dir_output;
             $file = $dir . "/SPECIMEN.html";
         } else {
             $donref = dol_sanitizeFileName($don->ref);
             $dir = $conf->don->dir_output . "/" . get_exdir($donref, 2);
             $file = $dir . "/" . $donref . ".html";
         }
         if (!file_exists($dir)) {
             if (dol_mkdir($dir) < 0) {
                 $this->error = $langs->trans("ErrorCanNotCreateDir", $dir);
                 return -1;
             }
         }
         if (file_exists($dir)) {
             $formclass = new Form($this->db);
             //This is not the proper way to do it but $formclass->form_modes_reglement
             //prints the translation instead of returning it
             if ($don->modepaiementid) {
                 $formclass->load_cache_types_paiements();
                 $paymentmode = $formclass->cache_types_paiements[$don->modepaiementid]['label'];
             } else {
                 $paymentmode = '';
             }
             // Defini contenu
             $donmodel = DOL_DOCUMENT_ROOT . "/core/modules/dons/html_cerfafr.html";
             $form = implode('', file($donmodel));
             $form = str_replace('__REF__', $don->id, $form);
             $form = str_replace('__DATE__', dol_print_date($don->date, 'day', false, $outputlangs), $form);
             //$form = str_replace('__IP__',$user->ip,$form); // TODO $user->ip not exist
             $form = str_replace('__AMOUNT__', $don->amount, $form);
             $form = str_replace('__CURRENCY__', $outputlangs->transnoentitiesnoconv("Currency" . $conf->currency), $form);
             $form = str_replace('__CURRENCYCODE__', $conf->currency, $form);
             $form = str_replace('__MAIN_INFO_SOCIETE_NOM__', $mysoc->name, $form);
             $form = str_replace('__MAIN_INFO_SOCIETE_ADDRESS__', $mysoc->address, $form);
             $form = str_replace('__MAIN_INFO_SOCIETE_ZIP__', $mysoc->zip, $form);
             $form = str_replace('__MAIN_INFO_SOCIETE_TOWN__', $mysoc->town, $form);
             $form = str_replace('__DONATOR_FIRSTNAME__', $don->firstname, $form);
             $form = str_replace('__DONATOR_LASTNAME__', $don->lastname, $form);
             $form = str_replace('__DONATOR_ADDRESS__', $don->address, $form);
             $form = str_replace('__DONATOR_ZIP__', $don->zip, $form);
             $form = str_replace('__DONATOR_TOWN__', $don->town, $form);
             $form = str_replace('__PAYMENTMODE_LIB__ ', $paymentmode, $form);
             $form = str_replace('__NOW__', dol_print_date($now, '', false, $outputlangs), $form);
             $form = str_replace('__DonationRef__', $outputlangs->trans("DonationRef"), $form);
             $form = str_replace('__DonationReceipt__', $outputlangs->trans("DonationReceipt"), $form);
             $form = str_replace('__DonationRecipient__', $outputlangs->trans("DonationRecipient"), $form);
             $form = str_replace('__DatePayment__', $outputlangs->trans("DatePayment"), $form);
             $form = str_replace('__PaymentMode__', $outputlangs->trans("PaymentMode"), $form);
             $form = str_replace('__Name__', $outputlangs->trans("Name"), $form);
             $form = str_replace('__Address__', $outputlangs->trans("Address"), $form);
             $form = str_replace('__Zip__', $outputlangs->trans("Zip"), $form);
             $form = str_replace('__Town__', $outputlangs->trans("Town"), $form);
             $form = str_replace('__Donor__', $outputlangs->trans("Donor"), $form);
             $form = str_replace('__Date__', $outputlangs->trans("Date"), $form);
             $form = str_replace('__Signature__', $outputlangs->trans("Signature"), $form);
             $form = str_replace('__ThankYou__', $outputlangs->trans("ThankYou"), $form);
             $form = str_replace('__IConfirmDonationReception__', $outputlangs->trans("IConfirmDonationReception"), $form);
             $frencharticle = '';
             if (preg_match('/fr/i', $outputlangs->defaultlang)) {
                 $frencharticle = '<font size="+1"><b>(Article 200-5 du Code Général des Impôts)</b></font><br>+ article 238 bis';
             }
             $form = str_replace('__FrenchArticle__', $frencharticle, $form);
             // Sauve fichier sur disque
             dol_syslog("html_cerfafr::write_file {$file}");
             $handle = fopen($file, "w");
             fwrite($handle, $form);
             fclose($handle);
             if (!empty($conf->global->MAIN_UMASK)) {
                 @chmod($file, octdec($conf->global->MAIN_UMASK));
             }
             return 1;
         } else {
             $this->error = $langs->trans("ErrorCanNotCreateDir", $dir);
             return 0;
         }
     } else {
         $this->error = $langs->trans("ErrorConstantNotDefined", "DON_OUTPUTDIR");
         return 0;
     }
     $this->error = $langs->trans("ErrorUnknown");
     return 0;
     // Erreur par defaut
 }
 /**
  *  Write the object to document file to disk
  *
  *	@param	Don			$don	        Donation object
  *  @param  Translate	$outputlangs    Lang object for output language
  *	@return	int             			>0 if OK, <0 if KO
  */
 function write_file($don, $outputlangs)
 {
     global $user, $conf, $langs, $mysoc;
     $now = dol_now();
     $id = !is_object($don) ? $don : '';
     if (!is_object($outputlangs)) {
         $outputlangs = $langs;
     }
     $outputlangs->load("main");
     $outputlangs->load("dict");
     $outputlangs->load("companies");
     $outputlangs->load("bills");
     $outputlangs->load("products");
     $outputlangs->load("donations");
     if (!empty($conf->don->dir_output)) {
         // Definition of the object don (for upward compatibility)
         if (!is_object($don)) {
             $don = new Don($this->db);
             $ret = $don->fetch($id);
             $id = $don->id;
         }
         // Definition of $dir and $file
         if (!empty($don->specimen)) {
             $dir = $conf->don->dir_output;
             $file = $dir . "/SPECIMEN.html";
         } else {
             $donref = dol_sanitizeFileName($don->ref);
             $dir = $conf->don->dir_output . "/" . get_exdir($donref, 2);
             $file = $dir . "/" . $donref . ".html";
         }
         if (!file_exists($dir)) {
             if (dol_mkdir($dir) < 0) {
                 $this->error = $langs->trans("ErrorCanNotCreateDir", $dir);
                 return -1;
             }
         }
         if (file_exists($dir)) {
             $formclass = new Form($this->db);
             // This is not the proper way to do it but $formclass->form_modes_reglement
             // prints the translation instead of returning it
             if ($don->modepaiementid) {
                 $formclass->load_cache_types_paiements();
                 $paymentmode = $formclass->cache_types_paiements[$don->modepaiementid]['label'];
             } else {
                 $paymentmode = '';
             }
             // Define contents
             $donmodel = DOL_DOCUMENT_ROOT . "/core/modules/dons/html_cerfafr.html";
             $form = implode('', file($donmodel));
             $form = str_replace('__REF__', $don->id, $form);
             $form = str_replace('__DATE__', dol_print_date($don->date, 'day', false, $outputlangs), $form);
             //$form = str_replace('__IP__',$user->ip,$form); // TODO $user->ip not exist
             $form = str_replace('__AMOUNT__', $don->amount, $form);
             $form = str_replace('__CURRENCY__', $outputlangs->transnoentitiesnoconv("Currency" . $conf->currency), $form);
             $form = str_replace('__CURRENCYCODE__', $conf->currency, $form);
             $form = str_replace('__MAIN_INFO_SOCIETE_NOM__', $mysoc->name, $form);
             $form = str_replace('__MAIN_INFO_SOCIETE_ADDRESS__', $mysoc->address, $form);
             $form = str_replace('__MAIN_INFO_SOCIETE_ZIP__', $mysoc->zip, $form);
             $form = str_replace('__MAIN_INFO_SOCIETE_TOWN__', $mysoc->town, $form);
             $form = str_replace('__DONATOR_FIRSTNAME__', $don->firstname, $form);
             $form = str_replace('__DONATOR_LASTNAME__', $don->lastname, $form);
             $form = str_replace('__DONATOR_ADDRESS__', $don->address, $form);
             $form = str_replace('__DONATOR_ZIP__', $don->zip, $form);
             $form = str_replace('__DONATOR_TOWN__', $don->town, $form);
             $form = str_replace('__PAYMENTMODE_LIB__ ', $paymentmode, $form);
             $form = str_replace('__NOW__', dol_print_date($now, 'day', false, $outputlangs), $form);
             $form = str_replace('__DonationRef__', $outputlangs->trans("DonationRef"), $form);
             $form = str_replace('__DonationTitle__', $outputlangs->trans("DonationTitle"), $form);
             $form = str_replace('__DonationReceipt__', $outputlangs->trans("DonationReceipt"), $form);
             $form = str_replace('__DonationRecipient__', $outputlangs->trans("DonationRecipient"), $form);
             $form = str_replace('__DonationDatePayment__', $outputlangs->trans("DonationDatePayment"), $form);
             $form = str_replace('__PaymentMode__', $outputlangs->trans("PaymentMode"), $form);
             $form = str_replace('__Name__', $outputlangs->trans("Name"), $form);
             $form = str_replace('__Address__', $outputlangs->trans("Address"), $form);
             $form = str_replace('__Zip__', $outputlangs->trans("Zip"), $form);
             $form = str_replace('__Town__', $outputlangs->trans("Town"), $form);
             $form = str_replace('__Object__', $outputlangs->trans("Object"), $form);
             $form = str_replace('__Donor__', $outputlangs->trans("Donor"), $form);
             $form = str_replace('__Date__', $outputlangs->trans("Date"), $form);
             $form = str_replace('__Signature__', $outputlangs->trans("Signature"), $form);
             $form = str_replace('__Message__', $outputlangs->trans("Message"), $form);
             $form = str_replace('__IConfirmDonationReception__', $outputlangs->trans("IConfirmDonationReception"), $form);
             $form = str_replace('__DonationMessage__', $conf->global->DONATION_MESSAGE, $form);
             $frencharticle = '';
             if (preg_match('/fr/i', $outputlangs->defaultlang)) {
                 $frencharticle = '<font size="+1">Article 200, 238 bis et 885-0 V bis A du code général des impôts (CGI)</font>';
             }
             $form = str_replace('__FrenchArticle__', $frencharticle, $form);
             $frencheligibility = '';
             if (preg_match('/fr/i', $outputlangs->defaultlang)) {
                 $frencheligibility = 'Le bénéficiaire certifie sur l\'honneur que les dons et versements qu\'il reçoit ouvrent droit à la réduction d\'impôt prévue à l\'article :';
             }
             $form = str_replace('__FrenchEligibility__', $frencheligibility, $form);
             $art200 = '';
             if (preg_match('/fr/i', $outputlangs->defaultlang)) {
                 if ($conf->global->DONATION_ART200 >= 1) {
                     $art200 = '<input type="checkbox" checked="checked">200 du CGI';
                 } else {
                     $art200 = '<input type="checkbox">200 du CGI';
                 }
             }
             $form = str_replace('__ARTICLE200__', $art200, $form);
             $art238 = '';
             if (preg_match('/fr/i', $outputlangs->defaultlang)) {
                 if ($conf->global->DONATION_ART238 >= 1) {
                     $art238 = '<input type="checkbox" checked="checked">238 bis du CGI';
                 } else {
                     $art238 = '<input type="checkbox">238 bis du CGI';
                 }
             }
             $form = str_replace('__ARTICLE238__', $art238, $form);
             $art885 = '';
             if (preg_match('/fr/i', $outputlangs->defaultlang)) {
                 if ($conf->global->DONATION_ART885 >= 1) {
                     $art885 = '<input type="checkbox" checked="checked">885-0 V bis du CGI';
                 } else {
                     $art885 = '<input type="checkbox">885-0 V bis du CGI';
                 }
             }
             $form = str_replace('__ARTICLE885__', $art885, $form);
             // Save file on disk
             dol_syslog("html_cerfafr::write_file {$file}");
             $handle = fopen($file, "w");
             fwrite($handle, $form);
             fclose($handle);
             if (!empty($conf->global->MAIN_UMASK)) {
                 @chmod($file, octdec($conf->global->MAIN_UMASK));
             }
             return 1;
         } else {
             $this->error = $langs->trans("ErrorCanNotCreateDir", $dir);
             return 0;
         }
     } else {
         $this->error = $langs->trans("ErrorConstantNotDefined", "DON_OUTPUTDIR");
         return 0;
     }
     $this->error = $langs->trans("ErrorUnknown");
     return 0;
     // Error by default
 }