Selaa lähdekoodia

Qual: Use a shared function to define logo heigth.
Qual: Add more phpunit tests
Fix: This also solve overlapping logos.

Laurent Destailleur 13 vuotta sitten
vanhempi
commit
46251db167

+ 21 - 0
htdocs/core/lib/pdf.lib.php

@@ -168,6 +168,27 @@ function pdf_getPDFFontSize($outputlangs)
 }
 
 
+/**
+ * Return height to use for Logo onot PDF
+ *
+ * @param	string		$logo		Full path to logo file to use
+ * @return	number
+ */
+function pdf_getHeightForLogo($logo)
+{
+    $height=22; $maxwidth=130;
+    include_once(DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php');
+    $tmp=dol_getImageSize($logo);
+    if ($tmp['height'])
+    {
+        $width=round($height*$tmp['width']/$tmp['height']);
+        if ($width > $maxwidth) $height=$height*$maxwidth/$width;
+    }
+    //print $tmp['width'].' '.$tmp['height'].' '.$width; exit;
+    return $height;
+}
+
+
 /**
  *   	Return a string with full address formated
  *

+ 2 - 1
htdocs/core/modules/commande/doc/pdf_edison.modules.php

@@ -547,7 +547,8 @@ class pdf_edison extends ModelePDFCommandes
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/commande/doc/pdf_einstein.modules.php

@@ -889,7 +889,8 @@ class pdf_einstein extends ModelePDFCommandes
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php

@@ -382,7 +382,8 @@ Class pdf_expedition_merou extends ModelePdfExpedition
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo,10, 5, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo,10, 5, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php

@@ -343,7 +343,8 @@ Class pdf_expedition_rouget extends ModelePdfExpedition
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/facture/doc/pdf_crabe.modules.php

@@ -1032,7 +1032,8 @@ class pdf_crabe extends ModelePDFFactures
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+				$pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 3
htdocs/core/modules/facture/doc/pdf_oursin.modules.php

@@ -834,9 +834,8 @@ class pdf_oursin extends ModelePDFFactures
 		{
 			if (is_readable($logo))
 			{
-				$taille=getimagesize($logo);
-				$length=$taille[0]/2.835;
-				$pdf->Image($logo, $this->marges['g'], $this->marges['h'], 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+				$pdf->Image($logo, $this->marges['g'], $this->marges['h'], 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php

@@ -444,7 +444,8 @@ class pdf_soleil extends ModelePDFFicheinter
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/livraison/pdf/pdf_typhon.modules.php

@@ -510,7 +510,8 @@ class pdf_typhon extends ModelePDFDeliveryOrder
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/project/pdf/pdf_baleine.modules.php

@@ -351,7 +351,8 @@ class pdf_baleine extends ModelePDFProjects
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/propale/doc/pdf_azur.modules.php

@@ -923,7 +923,8 @@ class pdf_azur extends ModelePDFPropales
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/propale/doc/pdf_jaune.modules.php

@@ -908,7 +908,8 @@ class pdf_jaune extends ModelePDFPropales
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php

@@ -804,7 +804,8 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 1
htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php

@@ -873,7 +873,8 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
 		{
 			if (is_readable($logo))
 			{
-				$pdf->Image($logo, $this->marge_gauche, $posy, 0, 22);	// width=0 (auto), max height=22
+			    $height=pdf_getHeightForLogo($logo);
+			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
 			}
 			else
 			{

+ 2 - 0
test/phpunit/AllTests.php

@@ -68,6 +68,8 @@ class AllTests
 		$suite->addTestSuite('DateLibTest');
 		require_once dirname(__FILE__).'/FilesLibTest.php';
 		$suite->addTestSuite('FilesLibTest');
+		require_once dirname(__FILE__).'/ImagesLibTest.php';
+		$suite->addTestSuite('ImagesLibTest');
 		require_once dirname(__FILE__).'/FunctionsTest.php';
 		$suite->addTestSuite('FunctionsTest');
 		require_once dirname(__FILE__).'/PdfDocTest.php';

+ 146 - 0
test/phpunit/ImagesLibTest.php

@@ -0,0 +1,146 @@
+<?php
+/* Copyright (C) 2010-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
+ * Copyright (C) 2012		Regis Houssin		<regis@dolibarr.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * or see http://www.gnu.org/
+ */
+
+/**
+ *      \file       test/phpunit/ImagesLibTest.php
+ *		\ingroup    test
+ *      \brief      PHPUnit test
+ *		\remarks	To run this script as CLI:  phpunit filename.php
+ */
+
+global $conf,$user,$langs,$db;
+//define('TEST_DB_FORCE_TYPE','mysql');	// This is to force using mysql driver
+require_once 'PHPUnit/Autoload.php';
+require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
+require_once dirname(__FILE__).'/../../htdocs/core/lib/images.lib.php';
+
+if (empty($user->id))
+{
+	print "Load permissions for admin user nb 1\n";
+	$user->fetch(1);
+	$user->getrights();
+}
+$conf->global->MAIN_DISABLE_ALL_MAILS=1;
+
+
+/**
+ * Class for PHPUnit tests
+ *
+ * @backupGlobals disabled
+ * @backupStaticAttributes enabled
+ * @remarks	backupGlobals must be disabled to have db,conf,user and lang not erased.
+ */
+class ImagesLibTest extends PHPUnit_Framework_TestCase
+{
+	protected $savconf;
+	protected $savuser;
+	protected $savlangs;
+	protected $savdb;
+
+	/**
+	 * Constructor
+	 * We save global variables into local variables
+	 *
+	 * @return ImagesLibTest
+	 */
+	function ImagesLibTest()
+	{
+		//$this->sharedFixture
+		global $conf,$user,$langs,$db;
+		$this->savconf=$conf;
+		$this->savuser=$user;
+		$this->savlangs=$langs;
+		$this->savdb=$db;
+
+		print __METHOD__." db->type=".$db->type." user->id=".$user->id;
+		//print " - db ".$db->db;
+		print "\n";
+	}
+
+	// Static methods
+  	public static function setUpBeforeClass()
+    {
+    	global $conf,$user,$langs,$db;
+		$db->begin();	// This is to have all actions inside a transaction even if test launched without suite.
+
+    	print __METHOD__."\n";
+    }
+    public static function tearDownAfterClass()
+    {
+    	global $conf,$user,$langs,$db;
+		$db->rollback();
+
+		print __METHOD__."\n";
+    }
+
+	/**
+	 * Init phpunit tests
+	 *
+	 * @return	void
+	 */
+    protected function setUp()
+    {
+    	global $conf,$user,$langs,$db;
+		$conf=$this->savconf;
+		$user=$this->savuser;
+		$langs=$this->savlangs;
+		$db=$this->savdb;
+
+		print __METHOD__."\n";
+    }
+	/**
+	 * End phpunit tests
+	 *
+	 * @return	void
+	 */
+    protected function tearDown()
+    {
+    	print __METHOD__."\n";
+    }
+
+   /**
+    * testDolCountNbOfLine
+    *
+    * @return	int
+    */
+    public function testgetImageSize()
+    {
+		$file=dirname(__FILE__).'/img250x50.jpg';
+		$tmp=dol_getImageSize($file);
+    	print __METHOD__." result=".$tmp['width'].'/'.$tmp['height']."\n";
+		$this->assertEquals($tmp['width'],250);
+		$this->assertEquals($tmp['height'],50);
+
+		$file=dirname(__FILE__).'/img250x20.png';
+		$tmp=dol_getImageSize($file);
+    	print __METHOD__." result=".$tmp['width'].'/'.$tmp['height']."\n";
+		$this->assertEquals($tmp['width'],250);
+		$this->assertEquals($tmp['height'],20);
+
+		/*$file=dirname(__FILE__).'/filenotfound.png';
+		$tmp=dol_getImageSize($file);
+    	print __METHOD__." result=".$tmp['width'].'/'.$tmp['height']."\n";
+		$this->assertEquals($tmp['width'],250);
+		$this->assertEquals($tmp['height'],20);*/
+
+		return $result;
+    }
+
+}
+?>

+ 16 - 0
test/phpunit/PdfDocTest.php

@@ -145,5 +145,21 @@ class PdfDocTest extends PHPUnit_Framework_TestCase
     	$this->assertEquals($result,"PIDRESS - Label 1\nThis is a description with a é accent\n(Country of origin: France)");
     }
 
+    /**
+    * testPdfGetHeightForLogo
+    *
+    * @return void
+    */
+    public function testPdfGetHeightForLogo()
+    {
+        $file=dirname(__FILE__).'/img250x50.jpg';
+        $result=pdf_getHeightForLogo($file);
+        print __METHOD__." result=".$result."\n";
+    	$this->assertEquals($result,22);
+        $file=dirname(__FILE__).'/img250x20.png';
+        $result=pdf_getHeightForLogo($file);
+        print __METHOD__." result=".$result."\n";
+    	$this->assertEquals($result,10.4);
+    }
 }
 ?>

BIN
test/phpunit/img250x50.jpg