. * * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, * California 94120-7775, or email info@knowledgetree.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. * Contributor( s): ______________________________________ */ // main library routines and defaults require_once("../config/dmsDefaults.php"); require_once(KT_LIB_DIR . "/templating/templating.inc.php"); require_once(KT_LIB_DIR . "/templating/kt3template.inc.php"); require_once(KT_LIB_DIR . "/dispatcher.inc.php"); require_once(KT_LIB_DIR . "/util/ktutil.inc"); require_once(KT_LIB_DIR . "/browse/DocumentCollection.inc.php"); require_once(KT_LIB_DIR . "/browse/BrowseColumns.inc.php"); require_once(KT_LIB_DIR . "/browse/PartialQuery.inc.php"); require_once(KT_LIB_DIR . "/foldermanagement/Folder.inc"); require_once(KT_LIB_DIR . '/browse/columnregistry.inc.php'); require_once(KT_LIB_DIR . '/actions/bulkaction.php'); require_once(KT_LIB_DIR . "/util/sanitize.inc"); class SimpleSearchTitleColumn extends TitleColumn { function setSearch($sSearch) { $this->sSearch = $sSearch; } 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(' \1 '); $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('