Properly cut long case log entries before encoding them in HTML.

SVN:trunk[3779]
This commit is contained in:
Denis Flaven
2015-09-22 12:52:28 +00:00
parent e94282459e
commit 5c9b221b4c
3 changed files with 23 additions and 6 deletions

View File

@@ -622,27 +622,36 @@ class CMDBChangeOpSetAttributeCaseLog extends CMDBChangeOpSetAttribute
$oObj = $oMonoObjectSet->Fetch();
$oCaseLog = $oObj->Get($this->Get('attcode'));
$iMaxVisibleLength = MetaModel::getConfig()->Get('max_history_case_log_entry_length', 0);
$sTextEntry = str_replace(array("\r\n", "\n", "\r"), "<br/>", htmlentities($oCaseLog->GetEntryAt($this->Get('lastentry')), ENT_QUOTES, 'UTF-8'));
$sTextEntry = $oCaseLog->GetEntryAt($this->Get('lastentry'));
if (($iMaxVisibleLength > 0) && (strlen($sTextEntry) > $iMaxVisibleLength))
{
if (function_exists('mb_strcut'))
{
// Safe with multi-byte strings
$sBefore = mb_strcut($sTextEntry, 0, $iMaxVisibleLength);
$sAfter = mb_strcut($sTextEntry, $iMaxVisibleLength);
$sBefore = $this->ToHtml(mb_strcut($sTextEntry, 0, $iMaxVisibleLength, 'UTF-8'));
$sAfter = $this->ToHtml(mb_strcut($sTextEntry, $iMaxVisibleLength, null, 'UTF-8'));
}
else
{
// Let's hpe we have no multi-byte characters around the cuttting point...
$sBefore = substr($sTextEntry, 0, $iMaxVisibleLength);
$sAfter = substr($sTextEntry, $iMaxVisibleLength);
// Let's hope we have no multi-byte characters around the cuttting point...
$sBefore = $this->ToHtml(substr($sTextEntry, 0, $iMaxVisibleLength));
$sAfter = $this->ToHtml(substr($sTextEntry, $iMaxVisibleLength));
}
$sTextEntry = '<span class="case-log-history-entry">'.$sBefore.'<span class="case-log-history-entry-end">'.$sAfter.'<span class="case-log-history-entry-toggle ui-icon ui-icon-circle-minus"></span></span><span class="case-log-history-entry-more">...<span class="case-log-history-entry-toggle ui-icon ui-icon-circle-plus"></span></span></span>';
}
else
{
$sTextEntry = $this->ToHtml($sTextEntry);
}
$sResult = Dict::Format('Change:AttName_EntryAdded', $sAttName, $sTextEntry);
}
return $sResult;
}
protected function ToHtml($sRawText)
{
return str_replace(array("\r\n", "\n", "\r"), "<br/>", htmlentities($sRawText, ENT_QUOTES, 'UTF-8'));
}
}
/**

View File

@@ -2101,6 +2101,11 @@ span.refresh-button {
}
.case-log-history-entry {
display: block;
}
.case-log-history-entry-end {
display: none;
}

View File

@@ -1550,6 +1550,9 @@ span.refresh-button {
cursor: pointer;
background: transparent url(../images/refresh-fff.png) left center no-repeat;
}
.case-log-history-entry {
display: block;
}
.case-log-history-entry-end {
display: none;
}