function KTUnitTitleColumn($sName) { $this->sName = $sName; parent::TitleColumn("Unit", "title"); }
function KTDocumentCopyColumn($sLabel, $sName, $oDocument) { $this->oDocument = $oDocument; parent::TitleColumn($sLabel, $sName); }
function renderData($aDataRow) { $iDocumentId =& $aDataRow['document']->getId(); $aLocs = array(); $bFound = true; $iLastFound = 0; $iNumFound = 0; while ($bFound && $iNumFound < 5) { $sQuery = "SELECT LOCATE(?, document_text, ?) AS posi FROM document_searchable_text WHERE document_id = ?"; $aParams = array($this->sSearch, $iLastFound + 1, $iDocumentId); $res = DBUtil::getOneResultKey(array($sQuery, $aParams), 'posi'); if (PEAR::isError($res)) { var_dump($res); exit(0); } if (empty($res)) { break; } $iNumFound++; $iLastFound = $res; $bFound = $res; if ($iLastFound) { $aLocs[] = $iLastFound; } } $iBack = 20; $iForward = 50; $aTexts = array(); foreach ($aLocs as $iLoc) { $iThisForward = $iForward; $iThisBack = $iBack; if ($iLoc - $iBack < 0) { $iThisForward = $iForward + $iLoc; $iThisBack = 0; $iLoc = 1; } $sQuery = "SELECT SUBSTRING(document_text FROM ? FOR ?) AS text FROM document_searchable_text WHERE document_id = ?"; $aParams = array($iLoc - $iThisBack, $iThisForward + $iThisBack, $iDocumentId); $res = DBUtil::getOneResultKey(array($sQuery, $aParams), 'text'); if (PEAR::isError($res)) { var_dump($res); exit(0); } $res = htmlentities($res); $aSearch = array(sprintf('#(%s)#i', $this->sSearch)); $aReplace = array(' <span class="searchresult" style="color: red">\\1</span> '); $sText = preg_replace($aSearch, $aReplace, $res); $aFirstSpace = array(strpos($sText, " "), strpos($sText, "\n")); $iFirstSpace = false; foreach ($aFirstSpace as $iPos) { if ($iFirstSpace === false) { $iFirstSpace = $iPos; continue; } if ($iPos === false) { continue; } if ($iPos < $iFirstSpace) { $iFirstSpace = $iPos; } } if ($iFirstSpace === false) { $iFirstSpace = -1; } $iLastSpace = strrpos($sText, " "); $sText = substr($sText, $iFirstSpace + 1, $iLastSpace - $iFirstSpace - 1); $sText = str_replace(" ", "", $sText); $sText = str_replace(" ", "", $sText); $aTexts[] = $sText; } $sFullTexts = join(" … ", $aTexts); return sprintf('<div>%s</div><div class="searchresults" style="margin-top: 0.5em; color: grey">%s</div>', parent::renderData($aDataRow), $sFullTexts); }