Fix pb in dolGetFirstLineOfText. Add PHPunit
This commit is contained in:
parent
6e77dab832
commit
44023606c6
@ -323,6 +323,7 @@ function dol_dir_is_emtpy($folder)
|
||||
*
|
||||
* @param string $file Filename
|
||||
* @return int <0 if KO, Number of lines in files if OK
|
||||
* @see dol_nboflines
|
||||
*/
|
||||
function dol_count_nb_of_line($file)
|
||||
{
|
||||
|
||||
@ -4488,22 +4488,57 @@ function dol_string_nohtmltag($StringHtml,$removelinefeed=1,$pagecodeto='UTF-8')
|
||||
* Return first line of text. Cut will depends if content is HTML or not.
|
||||
*
|
||||
* @param string $text Input text
|
||||
* @param int $nboflines Nb of lines to get (default is 1 = first line only)
|
||||
* @return string Output text
|
||||
* @see dol_nboflines_bis, dol_string_nohtmltag, dol_escape_htmltag
|
||||
*/
|
||||
function dolGetFirstLineOfText($text)
|
||||
function dolGetFirstLineOfText($text, $nboflines=1)
|
||||
{
|
||||
if (dol_textishtml($text))
|
||||
if ($nboflines == 1)
|
||||
{
|
||||
$firstline=preg_replace('/<br[^>]*>.*$/s','',$text); // The s pattern modifier means the . can match newline characters
|
||||
$firstline=preg_replace('/<div[^>]*>.*$/s','',$firstline); // The s pattern modifier means the . can match newline characters
|
||||
if (dol_textishtml($text))
|
||||
{
|
||||
$firstline=preg_replace('/<br[^>]*>.*$/s','',$text); // The s pattern modifier means the . can match newline characters
|
||||
$firstline=preg_replace('/<div[^>]*>.*$/s','',$firstline); // The s pattern modifier means the . can match newline characters
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
$firstline=preg_replace('/[\n\r].*/','',$text);
|
||||
}
|
||||
return $firstline.((strlen($firstline) != strlen($text))?'...':'');
|
||||
}
|
||||
else
|
||||
{
|
||||
$firstline=preg_replace('/[\n\r].*/','',$text);
|
||||
$ishtml=0;
|
||||
if (dol_textishtml($text))
|
||||
{
|
||||
$text=preg_replace('/\n/','',$text);
|
||||
$ishtml=1;
|
||||
$repTable = array("\t" => " ", "\n" => " ", "\r" => " ", "\0" => " ", "\x0B" => " ");
|
||||
}
|
||||
else
|
||||
{
|
||||
$repTable = array("\t" => " ", "\n" => "<br>", "\r" => " ", "\0" => " ", "\x0B" => " ");
|
||||
}
|
||||
|
||||
$text = strtr($text, $repTable);
|
||||
if ($charset == 'UTF-8') { $pattern = '/(<br[^>]*>)/Uu'; } // /U is to have UNGREEDY regex to limit to one html tag. /u is for UTF8 support
|
||||
else $pattern = '/(<br[^>]*>)/U'; // /U is to have UNGREEDY regex to limit to one html tag.
|
||||
$a = preg_split($pattern, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
|
||||
|
||||
$firstline='';
|
||||
$i=0;
|
||||
$nba = count($a); // 2x nb of lines in $a because $a contains also a line for each new line separator
|
||||
while (($i < $nba) && ($i < ($nboflines * 2)))
|
||||
{
|
||||
if ($i % 2 == 0) $firstline .= $a[$i];
|
||||
elseif (($i < (($nboflines * 2) - 1)) && ($i < ($nba - 1))) $firstline .= ($ishtml?"<br>\n":"\n");
|
||||
$i++;
|
||||
}
|
||||
unset($a);
|
||||
return $firstline.(($i < $nba)?'...':'');
|
||||
}
|
||||
return $firstline.((strlen($firstline) != strlen($text))?'...':'');
|
||||
}
|
||||
|
||||
|
||||
@ -4665,7 +4700,7 @@ function dol_nboflines($s,$maxchar=0)
|
||||
|
||||
|
||||
/**
|
||||
* Return nb of lines of a formated text with \n and <br> (we can't have both \n and br)
|
||||
* Return nb of lines of a formated text with \n and <br> (WARNING: string must not have mixed \n and br separators)
|
||||
*
|
||||
* @param string $text Text
|
||||
* @param int $maxlinesize Largeur de ligne en caracteres (ou 0 si pas de limite - defaut)
|
||||
@ -4701,6 +4736,8 @@ function dol_nboflines_bis($text,$maxlinesize=0,$charset='UTF-8')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unset($a);
|
||||
return $nblines;
|
||||
}
|
||||
|
||||
|
||||
@ -120,10 +120,75 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* testDolGetFirstLineOfText
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testDolGetFirstLineOfText()
|
||||
{
|
||||
// Nb of line is same than entry text
|
||||
|
||||
$input="aaaa";
|
||||
$result=dolGetFirstLineOfText($input);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa", $result);
|
||||
|
||||
$input="aaaa\nbbbbbbbbbbbb\n";
|
||||
$result=dolGetFirstLineOfText($input, 2);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa\nbbbbbbbbbbbb", $result);
|
||||
|
||||
$input="aaaa<br>bbbbbbbbbbbb<br>";
|
||||
$result=dolGetFirstLineOfText($input, 2);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa<br>\nbbbbbbbbbbbb", $result);
|
||||
|
||||
// Nb of line is lower
|
||||
|
||||
$input="aaaa\nbbbbbbbbbbbb\ncccccc\n";
|
||||
$result=dolGetFirstLineOfText($input);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa...", $result);
|
||||
|
||||
$input="aaaa<br>bbbbbbbbbbbb<br>cccccc<br>";
|
||||
$result=dolGetFirstLineOfText($input);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa...", $result);
|
||||
|
||||
$input="aaaa\nbbbbbbbbbbbb\ncccccc\n";
|
||||
$result=dolGetFirstLineOfText($input, 2);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa\nbbbbbbbbbbbb...", $result);
|
||||
|
||||
$input="aaaa<br>bbbbbbbbbbbb<br>cccccc<br>";
|
||||
$result=dolGetFirstLineOfText($input, 2);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa<br>\nbbbbbbbbbbbb...", $result);
|
||||
|
||||
// Nb of line is higher
|
||||
|
||||
$input="aaaa<br>bbbbbbbbbbbb<br>cccccc";
|
||||
$result=dolGetFirstLineOfText($input, 100);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa<br>\nbbbbbbbbbbbb<br>\ncccccc", $result, 'dolGetFirstLineOfText with nb 100 a');
|
||||
|
||||
$input="aaaa<br>bbbbbbbbbbbb<br>cccccc<br>";
|
||||
$result=dolGetFirstLineOfText($input, 100);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa<br>\nbbbbbbbbbbbb<br>\ncccccc", $result, 'dolGetFirstLineOfText with nb 100 b');
|
||||
|
||||
$input="aaaa<br>bbbbbbbbbbbb<br>cccccc<br>\n";
|
||||
$result=dolGetFirstLineOfText($input, 100);
|
||||
print __METHOD__." result=".$result."\n";
|
||||
$this->assertEquals("aaaa<br>\nbbbbbbbbbbbb<br>\ncccccc", $result, 'dolGetFirstLineOfText with nb 100 c');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* testDolBuildPath
|
||||
*
|
||||
* @return boolean
|
||||
* @return void
|
||||
*/
|
||||
public function testDolBuildPath()
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user