diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 0a41969afd36d4c0877acf8222c85ddf78f98103..d1e0b9020b7f82c5a766ed8f12b605bf8db21898 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -162,7 +162,7 @@ function societe_prepare_head(Societe $object) $head[$h][2] = 'rib'; $h++; } - + // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab @@ -217,7 +217,7 @@ function societe_prepare_head(Societe $object) $upload_dir = $conf->societe->multidir_output[$object->entity] . "/" . $object->id ; $nbFiles = count(dol_dir_list($upload_dir,'files',0,'','(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); - + $head[$h][0] = DOL_URL_ROOT.'/societe/document.php?socid='.$object->id; $head[$h][1] = $langs->trans("Documents"); if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' <span class="badge">'.($nbFiles+$nbLinks).'</span>'; @@ -234,7 +234,7 @@ function societe_prepare_head(Societe $object) } $head[$h][2] = 'agenda'; $h++; - + // Log /*$head[$h][0] = DOL_URL_ROOT.'/societe/info.php?socid='.$object->id; $head[$h][1] = $langs->trans("Info"); @@ -334,7 +334,7 @@ function getCountry($searchkey,$withcode='',$dbtouse=0,$outputlangs='',$entconv= global $db,$langs; $result=''; - + // Check parameters if (empty($searchkey) && empty($searchlabel)) { @@ -421,23 +421,26 @@ function getState($id,$withcode='',$dbtouse=0) } /** - * Retourne le nom traduit ou code+nom d'une devise + * Return label of currency or code+label * - * @param string $code_iso Code iso de la devise - * @param int $withcode '1'=affiche code + nom - * @return string Nom traduit de la devise + * @param string $code_iso Code iso of currency + * @param int $withcode '1'=show code + label + * @param Translate $outputlangs Output language + * @return string Label translated of currency */ -function currency_name($code_iso,$withcode='') +function currency_name($code_iso, $withcode='', $outputlangs=null) { global $langs,$db; - // Si il existe une traduction, on peut renvoyer de suite le libelle - if ($langs->trans("Currency".$code_iso)!="Currency".$code_iso) + if (empty($outputlangs)) $outputlangs=$langs; + + // If there is a translation, we can send immediatly the label + if ($outputlangs->trans("Currency".$code_iso)!="Currency".$code_iso) { - return $langs->trans("Currency".$code_iso); + return ($withcode?$code_iso.' - ':'').$outputlangs->trans("Currency".$code_iso); } - // Si pas de traduction, on consulte le libelle par defaut en table + // If no translation, we read table to get label by default $sql = "SELECT label FROM ".MAIN_DB_PREFIX."c_currencies"; $sql.= " WHERE code_iso='".$code_iso."'"; @@ -457,8 +460,8 @@ function currency_name($code_iso,$withcode='') { return $code_iso; } - } + return 'ErrorWhenReadingCurrencyLabel'; } /** @@ -499,7 +502,7 @@ function getFormeJuridiqueLabel($code) /** * Return if a country is inside the EEC (European Economic Community) * TODO Add a field into country dictionary. - * + * * @param Object $object Object * @return boolean true = country inside EEC, false = country outside EEC */ @@ -649,7 +652,7 @@ function show_projects($conf, $langs, $db, $object, $backtopage='', $nocreatelin // Opp percent print '<td align="right">'; if ($obj->opp_percent) print price($obj->opp_percent, 1, '', 1, 0).'%'; - print '</td>'; + print '</td>'; // Status print '<td align="right">'.$projecttmp->getLibStatut(5).'</td>'; @@ -671,7 +674,7 @@ function show_projects($conf, $langs, $db, $object, $backtopage='', $nocreatelin } print "</table>"; print '</div>'; - + print "<br>\n"; } @@ -735,7 +738,7 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') print '<input type="hidden" name="sortorder" value="'.$sortorder.'">'; print '<input type="hidden" name="sortfield" value="'.$sortfield.'">'; print '<input type="hidden" name="page" value="'.$page.'">'; - + print "\n".'<table class="noborder" width="100%">'."\n"; $param="socid=".$object->id; @@ -777,44 +780,44 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') if ($num || (GETPOST('button_search') || GETPOST('button_search.x') || GETPOST('button_search_x'))) { print '<tr class="liste_titre">'; - + // Photo - Name print '<td class="liste_titre">'; print '<input type="text" class="flat" name="search_name" size="20" value="'.$search_name.'">'; print '</td>'; - + // Position print '<td class="liste_titre">'; print '</td>'; - + // Address - Phone - Email print '<td class="liste_titre"> </td>'; - + // Status print '<td class="liste_titre maxwidthonsmartphone">'; print $form->selectarray('search_status', array('-1'=>'','0'=>$contactstatic->LibStatut(0,1),'1'=>$contactstatic->LibStatut(1,1)),$search_status); print '</td>'; - + // Add to agenda if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create) { $colspan++; print '<td class="liste_titre"> </td>'; } - + // Edit print '<td class="liste_titre" align="right">'; print '<input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">'; print '</td>'; - + print "</tr>"; - + $i=0; while ($i < $num) { $obj = $db->fetch_object($result); - + $contactstatic->id = $obj->rowid; $contactstatic->ref = $obj->ref; $contactstatic->statut = $obj->statut; @@ -838,7 +841,7 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') $contactstatic->country_code = $country_code; $contactstatic->setGenderFromCivility(); - + print "<tr>"; // Photo - Name @@ -846,7 +849,7 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') print $form->showphoto('contact',$contactstatic,0,0,0,'photorefnoborder valignmiddle marginrightonly','small',1,0,1); print $contactstatic->getNomUrl(0,'',0,'&backtopage='.urlencode($backtopage)); print '</td>'; - + // Job position print '<td>'; if ($obj->poste) print $obj->poste; @@ -1036,7 +1039,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= global $form; global $param; - + // Check parameters if (! is_object($filterobj)) dol_print_error('','BadParameter'); @@ -1068,7 +1071,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= $sql.= " AND a.entity IN (".getEntity('agenda').")"; if (get_class($filterobj) == 'Societe' && $filterobj->id) $sql.= " AND a.fk_soc = ".$filterobj->id; if (get_class($filterobj) == 'Project' && $filterobj->id) $sql.= " AND a.fk_project = ".$filterobj->id; - if (get_class($filterobj) == 'Adherent') + if (get_class($filterobj) == 'Adherent') { $sql.= " AND a.fk_element = m.rowid AND a.elementtype = 'member'"; if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; @@ -1086,7 +1089,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= { if ($actioncode == 'AC_NON_AUTO') $sql.= " AND c.type != 'systemauto'"; elseif ($actioncode == 'AC_ALL_AUTO') $sql.= " AND c.type = 'systemauto'"; - else + else { if ($actioncode == 'AC_OTH') $sql.= " AND c.type != 'systemauto'"; if ($actioncode == 'AC_OTH_AUTO') $sql.= " AND c.type = 'systemauto'"; @@ -1114,7 +1117,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= while ($i < $num) { $obj = $db->fetch_object($resql); - + //if ($donetodo == 'todo') $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))"; //if ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))"; $tododone=''; @@ -1128,7 +1131,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= 'dateend'=>$db->jdate($obj->dp2), 'note'=>$obj->label, 'percent'=>$obj->percent, - + 'userid'=>$obj->user_id, 'login'=>$obj->user_login, 'userfirstname'=>$obj->user_firstname, @@ -1146,7 +1149,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= 'libelle'=>$obj->alabel, // deprecated 'apicto'=>$obj->apicto ); - + $numaction++; $i++; } @@ -1191,7 +1194,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= 'note'=>$obj->note, 'percent'=>$obj->percentage, 'acode'=>$obj->acode, - + 'userid'=>$obj->user_id, 'login'=>$obj->user_login, 'userfirstname'=>$obj->user_firstname, @@ -1213,7 +1216,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= if (! empty($conf->agenda->enabled) || (! empty($conf->mailing->enabled) && ! empty($objcon->email))) { $delay_warning=$conf->global->MAIN_DELAY_ACTIONS_TODO*24*60*60; - + require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; @@ -1222,7 +1225,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'; $formactions=new FormActions($db); - + $actionstatic=new ActionComm($db); $userstatic=new User($db); $contactstatic = new Contact($db); @@ -1243,9 +1246,9 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= $out.='<input type="hidden" name="id" value="'.$filterobj->id.'" />'; } if (get_class($filterobj) == 'Societe') $out.='<input type="hidden" name="socid" value="'.$filterobj->id.'" />'; - + $out.="\n"; - + $out.='<div class="div-table-responsive-no-min">'; $out.='<table class="noborder" width="100%">'; @@ -1270,7 +1273,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= $out.=$searchpicto; $out.='</td>'; $out.='</tr>'; - + $out.='<tr class="liste_titre">'; if ($donetodo) { @@ -1293,26 +1296,26 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= $out.=getTitleFieldOfList($langs->trans("Status"), 0, $_SERVER["PHP_SELF"], 'a.percent', '', $param, 'align="center"', $sortfield, $sortorder); $out.=getTitleFieldOfList('', 0, $_SERVER["PHP_SELF"], '', '', $param, '', $sortfield, $sortorder, 'maxwidthsearch '); $out.='</tr>'; - + foreach ($histo as $key=>$value) { - + $actionstatic->fetch($histo[$key]['id']); // TODO Do we need this, we already have a lot of data of line into $histo $out.="<tr ".$bc[$var].">"; - + // Done or todo if ($donetodo) { $out.='<td class="nowrap">'; $out.='</td>'; } - + // Ref $out.='<td class="nowrap">'; $out.=$actionstatic->getNomUrl(1, -1); $out.='</td>'; - + // Author of event $out.='<td>'; //$userstatic->id=$histo[$key]['userid']; @@ -1321,7 +1324,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= $userstatic->fetch($histo[$key]['userid']); $out.=$userstatic->getNomUrl(-1); $out.='</td>'; - + // Title $out.='<td>'; if (isset($histo[$key]['type']) && $histo[$key]['type']=='action') @@ -1360,7 +1363,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= if ($histo[$key]['percent'] > 0 && $histo[$key]['percent'] < 100 && ! $histo[$key]['dateend'] && $histo[$key]['datestart'] && $db->jdate($histo[$key]['datestart']) < ($now - $delay_warning)) $late=1; if ($late) $out.=img_warning($langs->trans("Late")).' '; $out.="</td>\n"; - + // Type $out.='<td>'; if (! empty($conf->global->AGENDA_USE_EVENT_TYPE)) @@ -1375,7 +1378,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= } else { $typelabel = $actionstatic->type; - if ($histo[$key]['acode'] != 'AC_OTH_AUTO') $typelabel = $langs->trans("ActionAC_MANUAL"); + if ($histo[$key]['acode'] != 'AC_OTH_AUTO') $typelabel = $langs->trans("ActionAC_MANUAL"); $out.=$typelabel; } $out.='</td>'; @@ -1445,7 +1448,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= // Actions $out.='<td></td>'; - + $out.="</tr>\n"; $i++; } @@ -1454,7 +1457,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= } $out.='</form>'; - + if ($noprint) return $out; else print $out; } diff --git a/test/phpunit/AdminLibTest.php b/test/phpunit/AdminLibTest.php index 7c9033fe2a68d1a7a7799c02299c384c6019a93b..5cf34e969b1e095dc5ce28eb5c6b5ef7780ebf11 100644 --- a/test/phpunit/AdminLibTest.php +++ b/test/phpunit/AdminLibTest.php @@ -115,7 +115,7 @@ class AdminLibTest extends PHPUnit_Framework_TestCase } /** - * testConvertTime2Seconds + * testVersionCompare * * @return void */ diff --git a/test/phpunit/AllTests.php b/test/phpunit/AllTests.php index a417824867b3c3f8b526594f648ff35f15f9ac83..56c5541d0bb505b1fae0e75f5a8352cbe15dd3d0 100644 --- a/test/phpunit/AllTests.php +++ b/test/phpunit/AllTests.php @@ -81,6 +81,8 @@ class AllTests //$suite->addTestSuite('CoreTest'); require_once dirname(__FILE__).'/AdminLibTest.php'; $suite->addTestSuite('AdminLibTest'); + require_once dirname(__FILE__).'/CompanyLibTest.php'; + $suite->addTestSuite('CompanyLibTest'); require_once dirname(__FILE__).'/DateLibTest.php'; $suite->addTestSuite('DateLibTest'); //require_once dirname(__FILE__).'/DateLibTzFranceTest.php'; @@ -107,7 +109,7 @@ class AllTests $suite->addTestSuite('CodingSqlTest'); require_once dirname(__FILE__).'/CodingPhpTest.php'; $suite->addTestSuite('CodingPhpTest'); - + require_once dirname(__FILE__).'/SecurityTest.php'; $suite->addTestSuite('SecurityTest'); @@ -121,7 +123,7 @@ class AllTests $suite->addTestSuite('BuildDocTest'); require_once dirname(__FILE__).'/CMailFileTest.php'; $suite->addTestSuite('CMailFileTest'); - + require_once dirname(__FILE__).'/CommonObjectTest.php'; $suite->addTestSuite('CommonObjectTest'); @@ -181,7 +183,7 @@ class AllTests $suite->addTestSuite('HolidayTest'); require_once dirname(__FILE__).'/ExpenseReportTest.php'; $suite->addTestSuite('ExpenseReportTest'); - + require_once dirname(__FILE__).'/EntrepotTest.php'; $suite->addTestSuite('EntrepotTest'); require_once dirname(__FILE__).'/MouvementStockTest.php'; @@ -192,7 +194,7 @@ class AllTests require_once dirname(__FILE__).'/RestAPIUserTest.php'; $suite->addTestSuite('RestAPIUserTest'); - + require_once dirname(__FILE__).'/WebservicesProductsTest.php'; $suite->addTestSuite('WebservicesProductsTest'); require_once dirname(__FILE__).'/WebservicesInvoicesTest.php'; diff --git a/test/phpunit/CompanyLibTest.php b/test/phpunit/CompanyLibTest.php new file mode 100644 index 0000000000000000000000000000000000000000..1d61d5925e36694ed390fcddfd9bde7db81e0910 --- /dev/null +++ b/test/phpunit/CompanyLibTest.php @@ -0,0 +1,144 @@ +<?php +/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net> + * + * 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 3 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/CompanyLibTest.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/company.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 CompanyLibTest extends PHPUnit_Framework_TestCase +{ + protected $savconf; + protected $savuser; + protected $savlangs; + protected $savdb; + + /** + * Constructor + * We save global variables into local variables + * + * @return AdminLibTest + */ + function __construct() + { + //$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"; + } + + // tear down after class + 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"; + } + + /** + * testNameCurrency + * + * @return void + */ + public function testNameCurrency() + { + global $conf,$user,$langs,$db; + $conf=$this->savconf; + $user=$this->savuser; + $langs=$this->savlangs; + $db=$this->savdb; + + $result=currency_name('USD'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('United States Dollar',$result); + + $outputlangs=new Translate('', $conf); + $outputlangs->setDefaultLang('fr_FR'); + $outputlangs->load("dict"); + + $result=currency_name('USD', 1, $outputlangs); + print __METHOD__." result=".$result."\n"; + $this->assertEquals('USD - Dollars US',$result); + + return $result; + } +}