Oops. Forget to publish this. Commit again.

This commit is contained in:
Laurent Destailleur 2011-10-14 16:02:18 +02:00
parent 86de567f64
commit d23fc2b8e5
7 changed files with 397 additions and 212 deletions

View File

@ -144,7 +144,7 @@ if ($action == 'create')
// Label // Label
print '<tr><td class="fieldrequired" required>'.$langs->trans("Label").'</td><td class="valeur"><input type="text" name="label" size="40" value="'.GETPOST('label').'"></td></tr>'; print '<tr><td class="fieldrequired" required>'.$langs->trans("Label").'</td><td class="valeur"><input type="text" name="label" size="40" value="'.GETPOST('label').'"></td></tr>';
// Code // Code
print '<tr><td class="fieldrequired" required>'.$langs->trans("AttributeCode").' ('.$langs->trans("AlphaNumOnlyCharsAndNoSpace").')</td><td class="valeur"><input type="text" name="attrname" size="10" value"'.GETPOST('attrname').'"></td></tr>'; print '<tr><td class="fieldrequired" required>'.$langs->trans("AttributeCode").' ('.$langs->trans("AlphaNumOnlyCharsAndNoSpace").')</td><td class="valeur"><input type="text" name="attrname" size="10" value="'.GETPOST('attrname').'"></td></tr>';
// Type // Type
print '<tr><td class="fieldrequired" required>'.$langs->trans("Type").'</td><td class="valeur">'; print '<tr><td class="fieldrequired" required>'.$langs->trans("Type").'</td><td class="valeur">';
print $form->selectarray('type',$type2label,GETPOST('type')); print $form->selectarray('type',$type2label,GETPOST('type'));

View File

@ -43,13 +43,25 @@ llxHeader('','','EN:Backups|FR:Sauvegardes|ES:Copias_de_seguridad');
?> ?>
<script type="text/javascript" language="javascript"> <script type="text/javascript" language="javascript">
jQuery(document).ready(function() { jQuery(document).ready(function() {
function hideoptions () {
jQuery("#mysql_options").hide(); jQuery("#mysql_options").hide();
jQuery("#mysql_options_nobin").hide();
jQuery("#postgresql_options").hide(); jQuery("#postgresql_options").hide();
}
hideoptions();
jQuery("#radio_dump_mysql").click(function() { jQuery("#radio_dump_mysql").click(function() {
hideoptions();
jQuery("#mysql_options").show(); jQuery("#mysql_options").show();
}); });
jQuery("#radio_dump_mysql_nobin").click(function() {
hideoptions();
jQuery("#mysql_options_nobin").show();
});
jQuery("#radio_dump_postgresql").click(function() { jQuery("#radio_dump_postgresql").click(function() {
hideoptions();
jQuery("#postgresql_options").show(); jQuery("#postgresql_options").show();
}); });
}); });
@ -79,7 +91,7 @@ if ($_GET["msg"])
name="token" value="<?php echo $_SESSION['newtoken']; ?>" /> <input name="token" value="<?php echo $_SESSION['newtoken']; ?>" /> <input
type="hidden" name="export_type" value="server" /> type="hidden" name="export_type" value="server" />
<fieldset id="fieldsetexport"><!-- LDR --> <fieldset id="fieldsetexport">
<?php print '<legend>'.$langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b></legend>'; ?> <?php print '<legend>'.$langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b></legend>'; ?>
<table> <table>
<tr> <tr>
@ -94,8 +106,13 @@ if ($_GET["msg"])
<div class="formelementrow"><input type="radio" name="what" value="mysql" id="radio_dump_mysql" /> <div class="formelementrow"><input type="radio" name="what" value="mysql" id="radio_dump_mysql" />
<label for="radio_dump_mysql">MySQL Dump (mysqldump)</label> <label for="radio_dump_mysql">MySQL Dump (mysqldump)</label>
</div> </div>
<?php if (! empty($conf->global->MAIN_FEATURES_LEVEL)) { ?>
<div class="formelementrow"><input type="radio" name="what" value="mysqlnobin" id="radio_dump_mysql_nobin" />
<label for="radio_dump_mysql">MySQL Dump (php) <?php print img_warning('Backup can\'t be guaranted with this method. Prefer previous one'); ?></label>
</div>
<?php <?php
} }
}
else if ($db->label == 'PostgreSQL') else if ($db->label == 'PostgreSQL')
{ {
?> ?>
@ -327,7 +344,6 @@ print "\n";
$result=$formfile->show_documents('systemtools','backup',$conf->admin->dir_output.'/backup',$_SERVER['PHP_SELF'],0,1,'',1,0,0,54,0,'',$langs->trans("PreviousDumpFiles")); $result=$formfile->show_documents('systemtools','backup',$conf->admin->dir_output.'/backup',$_SERVER['PHP_SELF'],0,1,'',1,0,0,54,0,'',$langs->trans("PreviousDumpFiles"));
//if ($result) print '<br><br>'; //if ($result) print '<br><br>';
$db->close();
llxFooter(); llxFooter();
?>
$db->close();

View File

@ -31,8 +31,7 @@ $file=isset($_POST['filename_template']) ? $_POST['filename_template'] : '';
$langs->load("admin"); $langs->load("admin");
if (! $user->admin) if (! $user->admin) accessforbidden();
accessforbidden();
if ($file && ! $what) if ($file && ! $what)
@ -212,6 +211,30 @@ if ($what == 'mysql')
// Fin execution commande // Fin execution commande
} }
if ($what == 'mysqlnobin')
{
$outputdir = $conf->admin->dir_output.'/backup';
$outputfile = $outputdir.'/'.$file;
$outputfiletemp = $outputfile.'-TMP.sql';
// for compression format, we add extension
$compression=isset($_POST['compression']) ? $_POST['compression'] : 'none';
if ($compression == 'gz') $outputfile.='.gz';
if ($compression == 'bz') $outputfile.='.bz2';
$outputerror = $outputfile.'.err';
dol_mkdir($conf->admin->dir_output.'/backup');
if ($compression == 'gz' or $compression == 'bz')
{
backup_tables($outputfiletemp);
dol_compress_file($outputfiletemp, $outputfile, $compression);
unlink($outputfiletemp);
}
else
{
backup_tables($outputfile);
}
}
// POSTGRESQL // POSTGRESQL
if ($what == 'postgresql') if ($what == 'postgresql')
{ {
@ -315,4 +338,118 @@ print '<br>';
$time_end = time(); $time_end = time();
llxFooter(); llxFooter();
$db->close();
// MYSQL NO BINARIES (only php)
/** Backup the db OR just a table without mysqldump binary (does not require any exec permission)
* Author: David Walsh (http://davidwalsh.name/backup-mysql-database-php)
* Updated and enhanced by Stephen Larroque (lrq3000) and by the many commentators from the blog
*
* @param string $outputfile Output file name
* @param string $tables Table name or '*' for all
* @return int <0 if KO, >0 if OK
*
* FIXME Must add directives to have restore working even with constraints not loaded into correct order, etc...
*/
function backup_tables($outputfile, $tables='*')
{
global $db, $langs;
global $errormsg;
// Set to UTF-8
$db->query('SET NAMES utf8');
$db->query('SET CHARACTER SET utf8');
//get all of the tables
if ($tables == '*')
{
$tables = array();
$result = $db->query('SHOW FULL TABLES WHERE Table_type = \'BASE TABLE\'');
while($row = $db->fetch_row($result))
{
$tables[] = $row[0];
}
}
else
{
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
//cycle through
$handle = fopen($outputfile, 'w+');
if (fwrite($handle, '') === FALSE)
{
$langs->load("errors");
dol_syslog("Failed to open file ".$outputfile,LOG_ERR);
$errormsg=$langs->trans("ErrorFailedToWriteInDir");
return -1;
}
foreach($tables as $table)
{
$sql='SELECT * FROM '.$table;
$result = $db->query($sql);
$num_fields = $db->num_rows($result);
fwrite($handle,'DROP TABLE IF EXISTS '.$table);
$resqldrop=$db->query('SHOW CREATE TABLE '.$table);
$row2 = $db->fetch_row($resqldrop);
fwrite($handle,"\n\n".$row2[1].";\n\n");
while($row = $db->fetch_row($result))
{
fwrite($handle,'INSERT INTO '.$table.' VALUES(');
$columns = count($row);
for($j=0; $j<$columns; $j++)
{
$row[$j] = addslashes($row[$j]);
$row[$j] = preg_replace("#\n#", "\\n", $row[$j]);
if (isset($row[$j])) { fwrite($handle,'"'.$row[$j].'"'); } else { fwrite($handle,'""'); }
if (isset($row[$j]))
{
if ($row[$j] == null)
{
fwrite($handle,'"null"');
}
else
{
fwrite($handle,'"'.$row[$j].'"');
}
}
else
{
fwrite($handle,'""');
}
if ($j<($num_fields-1)) { fwrite($handle,','); }
}
fwrite($handle,");\n");
}
fwrite($handle,"\n\n\n");
}
/* Backup Procedure structure*/
/*
$result = $db->query('SHOW PROCEDURE STATUS');
if ($db->num_rows($result) > 0)
{
while ($row = $db->fetch_row($result)) { $procedures[] = $row[1]; }
foreach($procedures as $proc)
{
fwrite($handle,"DELIMITER $$\n\n");
fwrite($handle,"DROP PROCEDURE IF EXISTS '$name'.'$proc'$$\n");
$resqlcreateproc=$db->query("SHOW CREATE PROCEDURE '$proc'");
$row2 = $db->fetch_row($resqlcreateproc);
fwrite($handle,"\n".$row2[2]."$$\n\n");
fwrite($handle,"DELIMITER ;\n\n");
}
}
*/
/* Backup Procedure structure*/
fclose($handle);
return 1;
}
?> ?>

View File

@ -297,7 +297,7 @@ class pdf_crabe extends ModelePDFFactures
// Total HT ligne // Total HT ligne
$total_excl_tax = pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails, $hookmanager); $total_excl_tax = pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails, $hookmanager);
$pdf->SetXY($this->postotalht, $curY); $pdf->SetXY($this->postotalht, $curY);
$pdf->MultiCell(26, 3, $total_excl_tax, 0, 'R', 0); $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht, 3, $total_excl_tax, 0, 'R', 0);
// Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva
$tvaligne=$object->lines[$i]->total_tva; $tvaligne=$object->lines[$i]->total_tva;

View File

@ -279,7 +279,7 @@ class pdf_propale_azur extends ModelePDFPropales
// Total HT ligne // Total HT ligne
$total_excl_tax = pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails, $hookmanager); $total_excl_tax = pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails, $hookmanager);
$pdf->SetXY($this->postotalht, $curY); $pdf->SetXY($this->postotalht, $curY);
$pdf->MultiCell(26, 4, $total_excl_tax, 0, 'R', 0); $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht, 4, $total_excl_tax, 0, 'R', 0);
// Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva
$tvaligne=$object->lines[$i]->total_tva; $tvaligne=$object->lines[$i]->total_tva;

View File

@ -873,9 +873,11 @@ function dol_remove_file_process($filenb,$donotupdatesession=0,$donotdeletefile=
} }
/** /**
* Convert file to image * Convert an image file into antoher format.
* @param file Input file name * This need Imagick php extension.
* @param ext Extension of target file *
* @param string $file Input file name
* @param string $ext Extension of target file
*/ */
function dol_convert_file($file,$ext='png') function dol_convert_file($file,$ext='png')
{ {
@ -906,4 +908,34 @@ function dol_convert_file($file,$ext='png')
return 1; return 1;
} }
/**
* Compress a file
*
* @param string $inputfile Source file name
* @param string $outputfile Target file name
* @param string $mode 'gz' or 'bz'
*/
function dol_compress_file($inputfile, $outputfile, $mode="gz")
{
try
{
$data = implode("", file($inputfile));
if ($mode == 'gz') $compressdata = gzencode($data, 9);
elseif ($mode == 'bz') $compressdata = bzcompress($data, 9);
$fp = fopen($outputfile, "w");
fwrite($fp, $compressdata);
fclose($fp);
}
catch (Exception $e)
{
global $langs, $errormsg;
$langs->load("errors");
dol_syslog("Failed to open file ".$outputfile,LOG_ERR);
$errormsg=$langs->trans("ErrorFailedToWriteInDir");
return -1;
}
}
?> ?>

View File

@ -144,7 +144,7 @@ if ($action == 'create')
// Label // Label
print '<tr><td class="fieldrequired" required>'.$langs->trans("Label").'</td><td class="valeur"><input type="text" name="label" size="40" value="'.GETPOST('label').'"></td></tr>'; print '<tr><td class="fieldrequired" required>'.$langs->trans("Label").'</td><td class="valeur"><input type="text" name="label" size="40" value="'.GETPOST('label').'"></td></tr>';
// Code // Code
print '<tr><td class="fieldrequired" required>'.$langs->trans("AttributeCode").' ('.$langs->trans("AlphaNumOnlyCharsAndNoSpace").')</td><td class="valeur"><input type="text" name="attrname" size="10" value"'.GETPOST('attrname').'"></td></tr>'; print '<tr><td class="fieldrequired" required>'.$langs->trans("AttributeCode").' ('.$langs->trans("AlphaNumOnlyCharsAndNoSpace").')</td><td class="valeur"><input type="text" name="attrname" size="10" value="'.GETPOST('attrname').'"></td></tr>';
// Type // Type
print '<tr><td class="fieldrequired" required>'.$langs->trans("Type").'</td><td class="valeur">'; print '<tr><td class="fieldrequired" required>'.$langs->trans("Type").'</td><td class="valeur">';
print $form->selectarray('type',$type2label,GETPOST('type')); print $form->selectarray('type',$type2label,GETPOST('type'));