summaryrefslogtreecommitdiff
path: root/includes/refresh_functions.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/refresh_functions.php')
-rwxr-xr-xincludes/refresh_functions.php188
1 files changed, 188 insertions, 0 deletions
diff --git a/includes/refresh_functions.php b/includes/refresh_functions.php
new file mode 100755
index 0000000..50dfec7
--- /dev/null
+++ b/includes/refresh_functions.php
@@ -0,0 +1,188 @@
+<?php
+/**
+ * $Header$
+ *
+ * @copyright (c) 2004 bitweaver.org
+ * Copyright (c) 2003 tikwiki.org
+ * Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al.
+ * All Rights Reserved. See below for details and a complete list of authors.
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See http://www.gnu.org/copyleft/lesser.html for details
+ *
+ * $Id$
+ * @author Luis Argerich (lrargerich@yahoo.com)
+ * @package search
+ * @subpackage functions
+ */
+
+/**
+ * random_refresh_index_comments
+ * I believe these functiions are from tiki. They are called every x refreshes of a browser.
+ * They appear to pick a random wiki page, comment, blog or article and index it.
+ * With the exception of blogs (blog headers not blog posts) they pick the content_id
+ * and pass it to refresh_index() to do the work.
+ */
+
+function random_refresh_index($pContentType = "") {
+ global $gBitSystem;
+ switch ($pContentType) {
+ case "articles" :
+ $table = "articles";
+ break;
+ case "wiki" :
+ $table = "wiki_pages";
+ break;
+ case "blogs" :
+ $table = "blogs";
+ break;
+ case "blog_posts" :
+ $table = "blog_posts";
+ break;
+ case "comments" :
+ $table = "liberty_comments";
+ break;
+ default :
+ $table = "";
+ }
+ if (!empty($table) && !empty($gBitSystem->mDb) ) {
+ $cant = $gBitSystem->mDb->getOne("SELECT COUNT(*) FROM `" . BIT_DB_PREFIX . $table . "`", []);
+ if($cant > 0) {
+ $query = "SELECT `content_id` FROM `" . BIT_DB_PREFIX . $table . "`";
+ $contentId = $gBitSystem->mDb->getOne($query, [], 1, rand(0, $cant - 1));
+ refresh_index($contentId);
+ }
+ }
+}
+
+/*
+ * Index Refresh Function for Liberty Content
+ * This can be called directly to force a refresh for a particular piece of tiki content.
+ * This is also called by the Random_Refresh_* indexing functions from tiki.
+ * This currently works for wiki pages, blog posts and articles.
+ */
+
+function refresh_index( $pContentObject = null ) {
+ global $gBitSystem;
+ if (is_object($pContentObject)) {
+ if ( (!isset($pContentObject->mInfo["index_data"])) and method_exists($pContentObject, 'setIndexData')) {
+ $pContentObject->setIndexData() ;
+ }
+ if (isset($pContentObject->mInfo["index_data"]) and isset($pContentObject->mContentId)) {
+ if (isset($pContentObject->mType["content_type_guid"])) {
+ $contentTypeGuid = $pContentObject->mType["content_type_guid"];
+ } elseif (isset($pContentObject->mContentTypeGuid)) {
+ $contentTypeGuid = $pContentObject->mContentTypeGuid;
+ }
+ if (isset($contentTypeGuid)) {
+ $words = prepare_words($pContentObject->mInfo["index_data"]);
+ insert_index($words, $contentTypeGuid, $pContentObject->mContentId);
+ }
+ }
+ }
+}
+
+function refresh_index_oldest(){
+ global $gBitSystem;
+ $contentId = $gBitSystem->mDb->getOne("SELECT `content_id` FROM `" . BIT_DB_PREFIX .
+ "search_index` ORDER BY `last_update`", []);
+ if ( isset($contentId) ) {
+ refresh_index($contentId);
+ }
+}
+
+function prepare_words($data) {
+ $data = strip_tags($data);
+ // split into words
+ $sstrings = preg_split("/[\W]+/", $data, -1, PREG_SPLIT_NO_EMPTY);
+ // count words
+ $words = [];
+ foreach ($sstrings as $key=>$value) {
+ if(!isset($words[strtolower($value)])) {
+ $words[strtolower($value)] = 0;
+ }
+ $words[strtolower($value)]++;
+ }
+ return $words;
+}
+
+function delete_index ($pContentId) {
+ global $gBitSystem;
+ if( !empty( $pContentId ) ) {
+ $sql = "DELETE FROM `".BIT_DB_PREFIX."search_index` WHERE `content_id`=?";
+ $gBitSystem->mDb->query($sql, [ $pContentId ]);
+ }
+}
+
+function insert_index( &$words, $location, $pContentId ) {
+ global $gBitSystem;
+ if( !empty( $pContentId ) ) {
+ delete_index($pContentId);
+ $now = $gBitSystem->getUTCTime();
+ foreach ($words as $key=>$value) {
+ if (strlen($key) >= $gBitSystem->getConfig( 'search_min_wordlength') ) {
+ // todo: stopwords + common words.
+ $query = "INSERT INTO `" . BIT_DB_PREFIX . "search_index`
+ (`content_id`,`searchword`,`i_count`,`last_update`) values (?,?,?,?)";
+ $gBitSystem->mDb->query($query, [ $pContentId, $key, (int) $value, $now ]);
+ } // What happened to location?
+ }
+ }
+}
+
+function delete_search_words_and_syllables() {
+ global $gBitSystem;
+ $gBitSystem->mDb->query( "DELETE FROM `" . BIT_DB_PREFIX . "search_words`", [] );
+ $gBitSystem->mDb->query( "DELETE FROM `" . BIT_DB_PREFIX . "search_syllable`", [] );
+}
+
+function delete_index_content_type($pContentType) {
+ global $gBitSystem;
+ $sql = "DELETE FROM `" . BIT_DB_PREFIX . "search_index`";
+ $array = [];
+ if ( $pContentType <> "pages" ) {
+ $sql .= " WHERE `content_id` IN (SELECT `content_id` FROM `" . BIT_DB_PREFIX .
+ "liberty_content` where `content_type_guid` = ?)";
+ $array = [ $pContentType ];
+ }
+ $gBitSystem->mDb->query( $sql, $array );
+}
+
+function rebuild_index($pContentType, $pUnindexedOnly = false) {
+ global $gBitSystem, $gLibertySystem;
+ $arguments = [];
+ $whereClause = "";
+ ini_set("max_execution_time", "3000");
+ if (!$pUnindexedOnly) {
+ delete_index_content_type($pContentType);
+ }
+ $query = "SELECT `content_id`, `content_type_guid` FROM `" . BIT_DB_PREFIX . "liberty_content`";
+ if( !empty( $pContentType ) && $pContentType != "pages" ) {
+ $whereClause = " WHERE `content_type_guid` = ?";
+ $arguments[] = $pContentType;
+ }
+
+ if( $pUnindexedOnly ) {
+ if (empty($whereClause)) {
+ $whereClause = " WHERE ";
+ } else {
+ $whereClause .= " AND ";
+ }
+ $whereClause .= "`content_id` NOT IN (SELECT DISTINCT `content_id` FROM `" . BIT_DB_PREFIX . "search_index`)" ;
+ }
+
+ $orderBy = " ORDER BY `content_type_guid` ";
+ $result = $gBitSystem->mDb->query( $query.$whereClause.$orderBy, $arguments );
+ $count = 0;
+ if( $result ) {
+ $count = $result->RecordCount();
+ while ($res = $result->fetchRow()) {
+ if( isset( $gLibertySystem->mContentTypes[$res["content_type_guid"]] ) ) {
+ $type = $gLibertySystem->mContentTypes[$res["content_type_guid"]];
+ require_once constant( strtoupper( $type['handler_package'] ) . '_PKG_PATH' ) . $type['handler_file'];
+ $obj = new $type['handler_class']( null, $res["content_id"] );
+ refresh_index($obj);
+ unset($obj);
+ }
+ }
+ }
+ return $count;
+}