From 413ee7ec784701891ca7fd55eade32de51db8301 Mon Sep 17 00:00:00 2001 From: fhenry Date: Sat, 20 Apr 2013 10:44:01 +0200 Subject: [PATCH] Add hidden option MAIN_ODT_AS_PDF to save ODT as PDF (only if libreoffice/jodconverter/exec shell right) --- .../doc/doc_generic_order_odt.modules.php | 8 +++- .../doc/doc_generic_invoice_odt.modules.php | 8 +++- .../pdf/doc_generic_project_odt.modules.php | 10 +++-- .../doc/doc_generic_proposal_odt.modules.php | 8 +++- .../societe/doc/doc_generic_odt.modules.php | 8 +++- htdocs/includes/odtphp/odf.php | 42 ++++++++++++++++--- htdocs/includes/odtphp/odt2pdf.sh | 4 +- 7 files changed, 70 insertions(+), 18 deletions(-) mode change 100644 => 100755 htdocs/includes/odtphp/odt2pdf.sh diff --git a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php index 00658b7b9cb..3330f491e70 100644 --- a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php +++ b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php @@ -519,8 +519,12 @@ class doc_generic_order_odt extends ModelePDFCommandes $reshook=$hookmanager->executeHooks('beforeODTSave',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks // Write new file - //$result=$odfHandler->exportAsAttachedFile('toto'); - $odfHandler->saveToDisk($file); + if (!empty($conf->global->MAIN_ODT_AS_PDF)) { + $odfHandler->exportAsAttachedPDF($file); + } + else { + $odfHandler->saveToDisk($file); + } if (! empty($conf->global->MAIN_UMASK)) @chmod($file, octdec($conf->global->MAIN_UMASK)); diff --git a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php index 512bf98be8b..8aa417c83c0 100644 --- a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php +++ b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php @@ -497,8 +497,12 @@ class doc_generic_invoice_odt extends ModelePDFFactures $reshook=$hookmanager->executeHooks('beforeODTSave',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks // Write new file - //$result=$odfHandler->exportAsAttachedFile('toto'); - $odfHandler->saveToDisk($file); + if (!empty($conf->global->MAIN_ODT_AS_PDF)) { + $odfHandler->exportAsAttachedPDF($file); + } + else { + $odfHandler->saveToDisk($file); + } if (! empty($conf->global->MAIN_UMASK)) @chmod($file, octdec($conf->global->MAIN_UMASK)); diff --git a/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php b/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php index 1fbd02bbe6f..4c81babaa55 100644 --- a/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php +++ b/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php @@ -650,7 +650,7 @@ class doc_generic_project_odt extends ModelePDFProjects //Time ressources $sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note"; - $sql.= ", u.name, u.firstname"; + $sql.= ", u.lastname, u.firstname"; $sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t"; $sql .= " , ".MAIN_DB_PREFIX."user as u"; $sql .= " WHERE t.fk_task =".$task->id; @@ -973,8 +973,12 @@ class doc_generic_project_odt extends ModelePDFProjects // Write new file - $odfHandler->saveToDisk($file); - //$odfHandler->exportAsAttachedPDF($file); + if (!empty($conf->global->MAIN_ODT_AS_PDF)) { + $odfHandler->exportAsAttachedPDF($file); + } + else { + $odfHandler->saveToDisk($file); + } if (! empty($conf->global->MAIN_UMASK)) @chmod($file, octdec($conf->global->MAIN_UMASK)); diff --git a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php index 26d67f09a32..d4e485562a4 100644 --- a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php +++ b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php @@ -482,8 +482,12 @@ class doc_generic_proposal_odt extends ModelePDFPropales $reshook=$hookmanager->executeHooks('beforeODTSave',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks // Write new file - //$result=$odfHandler->exportAsAttachedFile('toto'); - $odfHandler->saveToDisk($file); + if (!empty($conf->global->MAIN_ODT_AS_PDF)) { + $odfHandler->exportAsAttachedPDF($file); + } + else { + $odfHandler->saveToDisk($file); + } if (! empty($conf->global->MAIN_UMASK)) @chmod($file, octdec($conf->global->MAIN_UMASK)); diff --git a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php index acf14c67139..ca93ab1880e 100644 --- a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php +++ b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php @@ -313,8 +313,12 @@ class doc_generic_odt extends ModeleThirdPartyDoc $reshook=$hookmanager->executeHooks('beforeODTSave',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks // Write new file - //$result=$odfHandler->exportAsAttachedFile('toto'); - $odfHandler->saveToDisk($file); + if (!empty($conf->global->MAIN_ODT_AS_PDF)) { + $odfHandler->exportAsAttachedPDF($file); + } + else { + $odfHandler->saveToDisk($file); + } if (! empty($conf->global->MAIN_UMASK)) @chmod($file, octdec($conf->global->MAIN_UMASK)); diff --git a/htdocs/includes/odtphp/odf.php b/htdocs/includes/odtphp/odf.php index 7e72eb6f7e2..41b64343bc1 100644 --- a/htdocs/includes/odtphp/odf.php +++ b/htdocs/includes/odtphp/odf.php @@ -450,10 +450,39 @@ IMG; { if( $name == "" ) $name = md5(uniqid()); - $this->saveToDisk("$name.odt"); - exec("./odt2pdf.sh $name",$output,$ret_val); - if($ret_val == 0) - { + dol_syslog(get_class($this).'::exportAsAttachedPDF $name='.$name, LOG_DEBUG); + $this->saveToDisk($name); + + $execmethod=(empty($conf->global->MAIN_EXEC_USE_POPEN)?1:2); // 1 or 2 + $command = DOL_DOCUMENT_ROOT.'/includes/odtphp/odt2pdf.sh '.$name; + dol_syslog('$execmethod='.$execmethod.' Run command='.$command); + if ($execmethod == 1) + { + exec($command, $output_arr, $retval); + } + if ($execmethod == 2) + { + $ok=0; + $handle = fopen($outputfile, 'w'); + if ($handle) + { + dol_syslog("Run command ".$command); + $handlein = popen($command, 'r'); + while (!feof($handlein)) + { + $read = fgets($handlein); + fwrite($handle,$read); + $output_arr[]=$read; + } + pclose($handlein); + fclose($handle); + } + if (! empty($conf->global->MAIN_UMASK)) @chmod($outputfile, octdec($conf->global->MAIN_UMASK)); + } + + if($retval == 0) + { + dol_syslog(get_class($this).'::exportAsAttachedPDF $ret_val='.$retval, LOG_DEBUG); if (headers_sent($filename, $linenum)) { throw new OdfException("headers already sent ($filename at $linenum)"); } @@ -464,9 +493,12 @@ IMG; unlink("$name.odt"); unlink("$name.pdf"); } else { + dol_syslog(get_class($this).'::exportAsAttachedPDF $ret_val='.$retval, LOG_DEBUG); + dol_syslog(get_class($this).'::exportAsAttachedPDF $output_arr='.var_export($output_arr,true), LOG_DEBUG); echo "Error occured:
"; - foreach($output as $line) + foreach($output_arr as $line) echo $line."
"; + dol_syslog(get_class($this).'::exportAsAttachedPDF ERROR $line='.$line, LOG_DEBUG); } } diff --git a/htdocs/includes/odtphp/odt2pdf.sh b/htdocs/includes/odtphp/odt2pdf.sh old mode 100644 new mode 100755 index b9710682465..a2bd617dfa8 --- a/htdocs/includes/odtphp/odt2pdf.sh +++ b/htdocs/includes/odtphp/odt2pdf.sh @@ -1,7 +1,7 @@ #!/bin/bash # @copyright GPL License 2010 - Vikas Mahajan - http://vikasmahajan.wordpress.com -if [ -f "$1.odt" ] +if [ -f $1 ] then pgrep -U `id -u` soffice if [ $? -ne 0 ] @@ -9,7 +9,7 @@ then soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard sleep 2 fi -jodconverter "$1.odt" "$1.pdf" +jodconverter $1 "$1.pdf" if [ $? -ne 0 ] then echo "Error while converting odt to pdf"