function a587_handle_extensionpoint($_params) { global $REX, $I18N; $rexsearch = new rexsearch(); switch ($_params['extension_point']) { // delete article from index case 'ART_DELETED': $rexsearch->excludeArticle($_params['id']); break; // update meta-infos for article // update meta-infos for article case 'ART_META_UPDATED': foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'article') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['id']); } } } break; // exclude (if offline) or index (if online) article // exclude (if offline) or index (if online) article case 'ART_STATUS': if ($_params['status'] or !empty($REX['ADDON']['settings']['rexsearch']['indexoffline'])) { $rexsearch->indexArticle($_params['id'], $_params['clang']); } else { $rexsearch->excludeArticle($_params['id'], $_params['clang']); } foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'article') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['id']); } } } break; case 'ART_ADDED': foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'article') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['id']); } } } break; case 'ART_UPDATED': foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'article') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['id']); } } } break; case 'CAT_DELETED': echo rex_warning($I18N->Msg('a587_cat_deleted')); break; case 'CAT_STATUS': if ($_params['status'] or !empty($REX['ADDON']['settings']['rexsearch']['indexoffline'])) { foreach (a587_getArticles(array($_params['id'])) as $art_id => $art_name) { $rexsearch->indexArticle($art_id, $_params['clang']); } } else { foreach (a587_getArticles(array($_params['id'])) as $art_id => $art_name) { $rexsearch->excludeArticle($art_id, $_params['clang']); } } foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'article') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['id']); } } } break; case 'CAT_ADDED': foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'article') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['id']); } } } break; case 'CAT_UPDATED': foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'article') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['id']); } } } break; case 'MEDIA_ADDED': //var_dump($_params); $rexsearch->indexFile(str_replace('\\', '/', substr($rexsearch->mediaFolder, strlen($rexsearch->documentRoot))) . '/' . $_params['filename']); foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'file') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column); } } } break; case 'MEDIA_UPDATED': $rexsearch->indexFile(str_replace('\\', '/', substr($rexsearch->mediaFolder, strlen($rexsearch->documentRoot))) . '/' . $_params['filename']); foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'file') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['file_id']); } } } break; case 'MEDIA_DELETED': //var_dump($_params);exit; $rexsearch->indexFile(str_replace('\\', '/', substr($rexsearch->mediaFolder, strlen($rexsearch->documentRoot))) . '/' . $_params['filename']); foreach ($rexsearch->includeColumns as $table => $columnArray) { if ($table == $REX['TABLE_PREFIX'] . 'file') { foreach ($columnArray as $column) { $rexsearch->indexColumn($table, $column, 'id', $_params['file_id']); } } } break; case 'SLICE_UPDATED': $rexsearch->indexArticle($_params['article_id'], $_params['clang']); break; case 'SLICE_SHOW': if (strpos($_params['subject'], '<div class="rex-message"><div class="rex-info">') and (!empty($_params['function']) or !empty($_REQUEST['slice_id']) and $_REQUEST['slice_id'] == $_params['slice_id'])) { $rexsearch->indexArticle($_params['article_id'], $_params['clang']); } break; } // Cache leeren $rexsearch->deleteCache(); }
function RexSearch($_clang = false, $_loadSettings = true, $_useStopwords = true) { global $REX, $I18N; if ($_loadSettings) { foreach ($REX['ADDON']['settings']['rexsearch'] as $key => $value) { switch ($key) { case 'logicalmode': $this->setLogicalMode($value); break; case 'textmode': $this->setTextMode($value); break; case 'searchmode': $this->setSearchMode($value); break; case 'surroundtags': $this->setSurroundTags($value); break; case 'limit': $this->setLimit($value); break; case 'ci': $this->setCI($value); break; case 'blacklist': $this->setBlacklist(is_array($value) ? $value : array()); break; case 'exclude_article_ids': $this->setExcludeIDs($value); break; case 'exclude_category_ids': if (is_array($value)) { $ids = array(); foreach ($value as $catID) { foreach (a587_getArticles(array($catID)) as $id => $name) { $ids[] = $id; } $this->setExcludeIDs($ids); } } break; case 'include': $this->setIncludeColumns($value); break; case 'maxteaserchars': $this->setMaxTeaserChars($value); break; case 'maxhighlightchars': $this->setMaxHighlightedTextChars($value); break; case 'highlight': $this->setHighlightType($value); break; case 'indexmode': $this->indexViaHTTP = intval($value) == 0; $this->indexWithTemplate = intval($value) == 2; break; case 'indexoffline': $this->indexOffline = $value == '1'; break; case 'similarwordsmode': $this->similarwordsMode = intval($value); $this->similarwords = !!intval($value); break; case 'similarwords_permanent': $this->similarwordsPermanent = !!intval($value); break; case 'fileextensions': $this->fileExtensions = $value; break; case 'indexfolders': $this->includeDirectories = $value; break; case 'indexmediapool': $this->indexMediapool = !!intval($value); break; case 'ep_outputfilter': $this->ep_outputfilter = !!intval($value); break; } } } $this->setClang($_clang); $this->languages = $REX['CLANG']; $this->tablePrefix = $REX['TABLE_PREFIX']; $this->includePath = $REX['INCLUDE_PATH']; $this->generatedPath = $REX['GENERATED_PATH']; $this->documentRoot = realpath($_SERVER['DOCUMENT_ROOT']); $this->mediaFolder = $REX['MEDIAFOLDER']; $locale = 'de_de'; $langfile = new i18n($locale, $REX['INCLUDE_PATH'] . '/addons/rexsearch/lang/'); $this->ellipsis = $langfile->Msg('a587_ellipsis'); // german stopwords if ($_useStopwords) { include $this->includePath . '/addons/rexsearch/lang/stopwords.inc.php'; $this->stopwords = $german_stopwords; } }
$rexsearch->parseSearchString('"velit esse" accusam'); if ($rexsearch->highlightType == 'array') { $sampleoutput .= '<pre style="font-size:1.2em;">'; $sampleoutput .= print_r($rexsearch->getHighlightedText($sample), true); $sampleoutput .= '</pre>'; } else { $sampleoutput .= $rexsearch->getHighlightedText($sample); } $sampleoutput .= '</div></div>'; echo a587_getSettingsFormSection('a587_highlight', $I18N->Msg('a587_settings_highlight_header'), array(array('type' => 'string', 'id' => 'a587_rexsearch_surroundtags_start', 'name' => 'a587_rexsearch[surroundtags][0]', 'label' => $I18N->Msg('a587_settings_surroundtags_start'), 'value' => isset($REX['ADDON']['settings']['rexsearch']['surroundtags'][0]) ? htmlspecialchars($REX['ADDON']['settings']['rexsearch']['surroundtags'][0]) : ''), array('type' => 'string', 'id' => 'a587_rexsearch_surroundtags_end', 'name' => 'a587_rexsearch[surroundtags][1]', 'label' => $I18N->Msg('a587_settings_surroundtags_end'), 'value' => isset($REX['ADDON']['settings']['rexsearch']['surroundtags'][1]) ? htmlspecialchars($REX['ADDON']['settings']['rexsearch']['surroundtags'][1]) : ''), array('type' => 'hidden', 'name' => 'a587_rexsearch[limit][0]', 'value' => '0'), array('type' => 'string', 'id' => 'a587_rexsearch_limit', 'name' => 'a587_rexsearch[limit][1]', 'label' => $I18N->Msg('a587_settings_limit'), 'value' => isset($REX['ADDON']['settings']['rexsearch']['limit'][1]) ? intval($REX['ADDON']['settings']['rexsearch']['limit'][1]) : ''), array('type' => 'string', 'id' => 'a587_rexsearch_maxteaserchars', 'name' => 'a587_rexsearch[maxteaserchars]', 'label' => $I18N->Msg('a587_settings_maxteaserchars'), 'value' => isset($REX['ADDON']['settings']['rexsearch']['maxteaserchars']) ? intval($REX['ADDON']['settings']['rexsearch']['maxteaserchars']) : ''), array('type' => 'string', 'id' => 'a587_rexsearch_maxhighlightchars', 'name' => 'a587_rexsearch[maxhighlightchars]', 'label' => $I18N->Msg('a587_settings_maxhighlightchars'), 'value' => isset($REX['ADDON']['settings']['rexsearch']['maxhighlightchars']) ? intval($REX['ADDON']['settings']['rexsearch']['maxhighlightchars']) : ''), array('type' => 'select', 'id' => 'a587_rexsearch_highlight', 'name' => 'a587_rexsearch[highlight]', 'label' => $I18N->Msg('a587_settings_highlight_label'), 'options' => array(array('value' => 'sentence', 'selected' => $REX['ADDON']['settings']['rexsearch']['highlight'] == 'sentence', 'name' => $I18N->Msg('a587_settings_highlight_sentence')), array('value' => 'paragraph', 'selected' => $REX['ADDON']['settings']['rexsearch']['highlight'] == 'paragraph', 'name' => $I18N->Msg('a587_settings_highlight_paragraph')), array('value' => 'surroundtext', 'selected' => $REX['ADDON']['settings']['rexsearch']['highlight'] == 'surroundtext', 'name' => $I18N->Msg('a587_settings_highlight_surroundtext')), array('value' => 'surroundtextsingle', 'selected' => $REX['ADDON']['settings']['rexsearch']['highlight'] == 'surroundtextsingle', 'name' => $I18N->Msg('a587_settings_highlight_surroundtextsingle')), array('value' => 'teaser', 'selected' => $REX['ADDON']['settings']['rexsearch']['highlight'] == 'teaser', 'name' => $I18N->Msg('a587_settings_highlight_teaser')), array('value' => 'array', 'selected' => $REX['ADDON']['settings']['rexsearch']['highlight'] == 'array', 'name' => $I18N->Msg('a587_settings_highlight_array')))), array('type' => 'directoutput', 'output' => '<div class="rex-form-row">' . $sampleoutput . '</div>'))); $categories = array(); foreach (a587_getCategories() as $id => $name) { $categories[] = array('value' => $id, 'selected' => !empty($REX['ADDON']['settings']['rexsearch']['exclude_category_ids']) and is_array($REX['ADDON']['settings']['rexsearch']['exclude_category_ids']) and in_array($id, $REX['ADDON']['settings']['rexsearch']['exclude_category_ids']), 'name' => $name . ' (' . $id . ')'); } $articles = array(); foreach (a587_getArticles() as $id => $name) { $articles[] = array('value' => $id, 'selected' => !empty($REX['ADDON']['settings']['rexsearch']['exclude_article_ids']) and is_array($REX['ADDON']['settings']['rexsearch']['exclude_article_ids']) and in_array($id, $REX['ADDON']['settings']['rexsearch']['exclude_article_ids']), 'name' => $name . ' (' . $id . ')'); } echo a587_getSettingsFormSection('a587_exclude', $I18N->Msg('a587_settings_exclude'), array(array('type' => 'string', 'id' => 'a587_settings_exclude_blacklist', 'name' => 'a587_rexsearch[blacklist]', 'label' => $I18N->Msg('a587_settings_exclude_blacklist'), 'value' => isset($REX['ADDON']['settings']['rexsearch']['blacklist']) ? htmlspecialchars(implode(',', $REX['ADDON']['settings']['rexsearch']['blacklist'])) : ''), array('type' => 'multipleselect', 'id' => 'a587_rexsearch_exclude_article_ids', 'name' => 'a587_rexsearch[exclude_article_ids][]', 'label' => $I18N->Msg('a587_settings_exclude_articles'), 'size' => 15, 'options' => $articles), array('type' => 'multipleselect', 'id' => 'a587_rexsearch_exclude_category_ids', 'name' => 'a587_rexsearch[exclude_category_ids][]', 'label' => $I18N->Msg('a587_settings_exclude_categories'), 'size' => 15, 'options' => $categories))); $options = array(); $sql_tables = new rex_sql(); foreach ($sql_tables->showTables() as $table) { if (false === strpos($table, '587_search') and false === strpos($table, '587_keywords')) { $sql_columns = new rex_sql(); foreach ($sql_tables->showColumns($table) as $column) { /*switch(strtolower(substr($column['type'],0,4))) { case 'text': case 'char': case 'varc':*/ $options[] = array('value' => htmlspecialchars($table . '`.`' . $column['name']), 'checked' => in_array($column['name'], (!empty($REX['ADDON']['settings']['rexsearch']['include'][$table]) and is_array($REX['ADDON']['settings']['rexsearch']['include'][$table])) ? $REX['ADDON']['settings']['rexsearch']['include'][$table] : array()), 'name' => $table . ' . ' . $column['name'], 'id' => $table . ' . ' . $column['name']);