parent
							
								
									44c220b1a6
								
							
						
					
					
						commit
						bb8c28d31c
					
				@ -1,138 +0,0 @@ | 
				
			||||
Dokeos Search Plugin Installation Guide | 
				
			||||
======================================= | 
				
			||||
 | 
				
			||||
1. Introduction | 
				
			||||
--------------- | 
				
			||||
This search plugin is composed of everything you need to get up and | 
				
			||||
running with a full-text search feature on your Dokeos portal. However, | 
				
			||||
this installation is not easy, and if you are not familiar with the | 
				
			||||
term "indexing", or with the configuration of a Linux server, we | 
				
			||||
highly recommend you seek advice from a qualified system administrator | 
				
			||||
to help you doing this. Of course, the Dokeos company, for which I am | 
				
			||||
directly working, offers this kind of services. Feel free to contact | 
				
			||||
info@dokeos.com for a quote. | 
				
			||||
 | 
				
			||||
This search plugin relies on a search server, called MnogoSearch, which | 
				
			||||
has to be installed independently on a Linux server (the Windows | 
				
			||||
version, sadly, is not GPL nor free to use). | 
				
			||||
The following installation guides you through the steps of installing | 
				
			||||
the server on a Debian or Ubuntu computer, but you might probably | 
				
			||||
succeed in installing it on other architectures. | 
				
			||||
 | 
				
			||||
Dokeos has made considerable efforts to have MnogoSearch integrated | 
				
			||||
into the latest versions of PHP, but it would never have succeeded | 
				
			||||
without the help of pierre.php@gmail.com who did all the technical | 
				
			||||
work. | 
				
			||||
 | 
				
			||||
2. Installing files | 
				
			||||
-------------------- | 
				
			||||
All the "conf" files and the "search.xml.php" file in this package | 
				
			||||
need to be revised to configure properly. Most of all, you should look | 
				
			||||
for a "DBAddr  mysql://db_user:db_pass@db_host/db_name/?dbmode=single" | 
				
			||||
line in the server files to make sure it is using the correct database | 
				
			||||
credentials. | 
				
			||||
 | 
				
			||||
Now you will see that there are two directories in this plugin. | 
				
			||||
The "client" directory needs to stay there. The "client/www" directory | 
				
			||||
contains a PHP script that needs to be copied at the root of your | 
				
			||||
Dokeos portal (this will later give the indexing server an access to | 
				
			||||
your Dokeos portal). | 
				
			||||
 | 
				
			||||
The "server" directory has to be moved on the indexing server (which | 
				
			||||
might be the same as your Dokeos portal's server if it is not too | 
				
			||||
overloaded). | 
				
			||||
 | 
				
			||||
This "server" directory contains three subdirectories. | 
				
			||||
The "server/etc" directory contains the configuration of the | 
				
			||||
mnogosearch server, which typically on Debian will be located in | 
				
			||||
/etc/mnogosearch. Once you have installed the mnogosearch server, | 
				
			||||
you can pretty much overwrite the configuration with the files | 
				
			||||
contained in "server/etc", as they are already customised for indexing | 
				
			||||
Dokeos. | 
				
			||||
 | 
				
			||||
The "server/cron.d" directory contains an optional file that you might | 
				
			||||
want to put in /etc/cron.d, so that the indexing will be run every night | 
				
			||||
5.00am. | 
				
			||||
 | 
				
			||||
The "server/www" directory contains files that should be made available | 
				
			||||
to the public, to access idexation results. Feel free to put these, for | 
				
			||||
example, in /var/www/mnogosearch on your indexing server if that's where | 
				
			||||
Apache takes its public files. | 
				
			||||
 | 
				
			||||
3. Installing the search server (MnoGoSearch) | 
				
			||||
--------------------------------------------- | 
				
			||||
The mnogosearch server installation comes in two parts: | 
				
			||||
A) installing the mnogosearch indexing server itself. This can be done | 
				
			||||
with a simple: | 
				
			||||
  sudo apt-get install mnogosearch-common mnogosearch-mysql | 
				
			||||
B) installing the PHP5-mnogosearch bindings. This can be done by using | 
				
			||||
the PECL command-line installer | 
				
			||||
  sudo pecl install mnogosearch-1.0.0 | 
				
			||||
 | 
				
			||||
Once the server is installed, you may need to install server specific | 
				
			||||
additional programs to allow your indexer to go into documents (PDF, | 
				
			||||
Word, Excel, etc) and index the contents of these documents as well. | 
				
			||||
 | 
				
			||||
You can find a list of programs supposed to be there in the | 
				
			||||
server/etc/indexer.conf file. Search for "pdftotext" and you will find | 
				
			||||
the lines nearby all define a program used to translate a document | 
				
			||||
into pure text before indexing it. Make sure you are able to launch | 
				
			||||
all of these commands on the command line. If you can't, the indexing | 
				
			||||
server is not likely to be able to do it either... | 
				
			||||
 | 
				
			||||
4. Creating the DB and Dokeos user | 
				
			||||
---------------------------------- | 
				
			||||
In order to keep the index data, mnogosearch requires a database to | 
				
			||||
store this data. It is recommended to create an alternative user, with | 
				
			||||
access to only one database to do this. | 
				
			||||
 | 
				
			||||
Once this user is configured and the DBAddr line is configured in | 
				
			||||
server/etc/indexer.conf, you can create the database structure by | 
				
			||||
calling (on the indexing server): | 
				
			||||
 indexer -Ecreate indexer.conf | 
				
			||||
 | 
				
			||||
The next step is to create a Dokeos user for the purpose of indexing | 
				
			||||
your courses (the user needs access to all courses to be able to index | 
				
			||||
them). Create a simple user in the Dokeos administration interface. Then | 
				
			||||
get his ID (you can get it by hovering the edition icon in the users | 
				
			||||
list: the user id is the number that shows after "user_id" in the URL) | 
				
			||||
and use it inside indexer_login.php to replace the 'xxx' value. | 
				
			||||
 | 
				
			||||
Also configure the IP address and the host name of the indexing server | 
				
			||||
inside this file. | 
				
			||||
 | 
				
			||||
Once these two steps are complete, you can start the first indexation | 
				
			||||
of your portal, by calling, on the command line of your indexing server: | 
				
			||||
  indexer -N10 index.conf | 
				
			||||
N10 lets you limit the number of simultaneous threads that your indexing | 
				
			||||
server will be allowed to use. More than 10 might put your Dokeos portal | 
				
			||||
in overload. You might want to reduce this number to 3 for light servers. | 
				
			||||
 | 
				
			||||
5. Installing the plugin | 
				
			||||
------------------------ | 
				
			||||
Installing the plugin is done by dispatching the files contained in | 
				
			||||
this plugin as described in "2. Installing files", and configuring the | 
				
			||||
various *.conf.php files as well as server/etc/indexer.conf and | 
				
			||||
server/www/search.xml.php | 
				
			||||
 | 
				
			||||
Once the files have been moved and configured, you will still need to | 
				
			||||
index some data, then activate the plugin inside the Dokeos | 
				
			||||
administration panel. Then, basically, you should be able to use | 
				
			||||
the plugin straight away. | 
				
			||||
 | 
				
			||||
6. International use | 
				
			||||
-------------------- | 
				
			||||
To keep this plugin small, we had to remove a considerable amount of | 
				
			||||
international-parsing helper files. If you need one for your language, | 
				
			||||
it may well be included in the default installation file for the | 
				
			||||
Debian mnogosearch-common package. | 
				
			||||
 | 
				
			||||
If not, you should check more recent versions of mnogosearch on its | 
				
			||||
website: http://www.mnogosearch.org/ | 
				
			||||
 | 
				
			||||
7. Seek help | 
				
			||||
------------ | 
				
			||||
Commercial suppport is available for the configuration and remote use | 
				
			||||
of this plugin at info@dokeos.com | 
				
			||||
If you have plenty of time to learn it by yourself or any other reason, | 
				
			||||
you might find some free help on our forums: http://forum.chamilo.org | 
				
			||||
@ -1,29 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/* See license terms in /license.txt */ | 
				
			||||
/** | 
				
			||||
 * This script defines variables in use in the search plugin for this particular host in the client scripts | 
				
			||||
 * @package chamilo.search | 
				
			||||
 * @author Yannick Warnier <yannick.warnier@beeznest.com> | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Variables | 
				
			||||
 */ | 
				
			||||
//// Addressing variables | 
				
			||||
// $search_url is the relative URL from the HTTP root of this portal, to the | 
				
			||||
// 'searchit.php' script. Something like /plugin/search/client/searchit.php | 
				
			||||
$search_url = '/plugin/search/client/searchit.php'; | 
				
			||||
// $server_url is the URL of the server containing the search engine XML | 
				
			||||
// interface (the contents of the server/www directory in this plugin package) | 
				
			||||
// and, more precisely, the absolute web path to the search.php script | 
				
			||||
$server_url = 'http://your.domain.com/subdir/search/search.php'; | 
				
			||||
 | 
				
			||||
//// Language variables | 
				
			||||
// The name to be displayed on the 'Search' button | 
				
			||||
$lang_search_button = 'Search'; | 
				
			||||
// The text to be suffixed to the number of search results found | 
				
			||||
$lang_search_found = 'résultats trouvés.'; | 
				
			||||
// The text to be suffixed to the number of seconds the search took | 
				
			||||
$lang_seconds = 'secondes'; | 
				
			||||
// the text to be shown if no results were found | 
				
			||||
$lang_no_result_found = 'La recherche n\'a pas renvoyé de résultat.'; | 
				
			||||
?> | 
				
			||||
@ -1,106 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/* See license terms in /license.txt */ | 
				
			||||
/** | 
				
			||||
 * This script declares a set of functions that will enable authorization check | 
				
			||||
 * for a user's access to a course directory, as well as course name | 
				
			||||
 * translations for search results display. | 
				
			||||
 * @package chamilo.search | 
				
			||||
 * @author Yannick Warnier <yannick.warnier@beeznest.com> | 
				
			||||
 * @uses The Dokeos database library, to access the tables using its facilities | 
				
			||||
 * @uses The Dokeos main api library to execute database queries | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Checks if a user can access a given course | 
				
			||||
 * | 
				
			||||
 * The function gets the course code from the course directory, then | 
				
			||||
 * checks in the course_user table if the user has access to that course. | 
				
			||||
 * @param integer User ID (inside Chamilo) | 
				
			||||
 * @param string  Course directory | 
				
			||||
 * @return boolean True if user has access, false otherwise | 
				
			||||
 */ | 
				
			||||
function get_boolean_user_access_to_course_dir($user_id,$course_dir){ | 
				
			||||
  if(api_is_platform_admin()){return true;} | 
				
			||||
  $course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); | 
				
			||||
  $course      = Database::get_main_table(TABLE_MAIN_COURSE); | 
				
			||||
  //Get the course code | 
				
			||||
  $sql = "SELECT code FROM $course WHERE directory = '$course_dir'"; | 
				
			||||
  $res = Database::query($sql); | 
				
			||||
  if(Database::num_rows($res)>0){ | 
				
			||||
    //Course found. Get the course code. | 
				
			||||
    $row = Database::fetch_array($res); | 
				
			||||
    $course_code = $row['code']; | 
				
			||||
    //Check user permissions | 
				
			||||
    $sql = "SELECT * FROM $course_user | 
				
			||||
    	WHERE course_code = '$course_code' | 
				
			||||
	AND user_id = '$user_id'"; | 
				
			||||
    $res = Database::query($sql); | 
				
			||||
    if(Database::num_rows($res)>0){ | 
				
			||||
      //User permission found, go further and check there is a status | 
				
			||||
      $row = Database::fetch_array($res); | 
				
			||||
      $rel = $row['status']; | 
				
			||||
      //if(!empty($rel)){ | 
				
			||||
        //Status found (we may later check this further to refine permissions) | 
				
			||||
		//Sometimes for now it appears that the status can be 0, though. | 
				
			||||
      	return true; | 
				
			||||
      //} | 
				
			||||
      //Status not found, problem, return false. | 
				
			||||
      //return false; | 
				
			||||
    }else{ | 
				
			||||
      //No course-user relation found, return false | 
				
			||||
      return false; | 
				
			||||
    } | 
				
			||||
  }else{ | 
				
			||||
    //No course found, return false | 
				
			||||
    return false; | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
/** | 
				
			||||
 * Check course URL to get a course code and check it against user permissions | 
				
			||||
 * | 
				
			||||
 * Make this function always return true when no check is to be done | 
				
			||||
 * @param	string	URL to check | 
				
			||||
 * @return	boolean	True on user having access to the course or course not found, false otherwise | 
				
			||||
 | 
				
			||||
 */ | 
				
			||||
function access_check($url,$default=true){ | 
				
			||||
  $matches = array(); | 
				
			||||
  $match1 = preg_match('/courses\/([^\/]*)\//',$url,$matches); | 
				
			||||
  if(!$match1){ | 
				
			||||
    $match2 = preg_match('/cidReq=([^&]*)/',$url,$matches); | 
				
			||||
  } | 
				
			||||
  if($match1 or $match2){ | 
				
			||||
    $has_access = get_boolean_user_access_to_course_dir($_SESSION['_user']['user_id'],$matches[1]); | 
				
			||||
    if(!$has_access){ | 
				
			||||
      //user has no access to this course, skip it | 
				
			||||
      return false; | 
				
			||||
    }//else grant access | 
				
			||||
    else | 
				
			||||
    { | 
				
			||||
      return true; | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return $default; | 
				
			||||
} | 
				
			||||
/** | 
				
			||||
 * Translates a course code into a course name into a string | 
				
			||||
 * | 
				
			||||
 * This function should only be used if needed by a funny course-name rule | 
				
			||||
 * @param	string	The string to transform | 
				
			||||
 * @return	string	The transformed string | 
				
			||||
 */ | 
				
			||||
function subst_course_code($string){ | 
				
			||||
  $matches = array(); | 
				
			||||
  if(preg_match('/(PORTAL_[0-9]{1,4})/',$string,$matches)){ | 
				
			||||
    $course      = Database::get_main_table(TABLE_MAIN_COURSE); | 
				
			||||
    //Get the course code | 
				
			||||
    $sql = "SELECT title FROM $course WHERE code = '".$matches[1]."'"; | 
				
			||||
    $res = Database::query($sql); | 
				
			||||
    if(Database::num_rows($res)>0){ | 
				
			||||
      $row = Database::fetch_array($res); | 
				
			||||
      $string = preg_replace('/(.*)\?cidReq=('.$matches[1].')(.*)/',' '.$row['title'].' - \1 \3',$string); | 
				
			||||
      $string = preg_replace('/'.$matches[1].'/',$row['title'],$string); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  return $string; | 
				
			||||
} | 
				
			||||
?> | 
				
			||||
@ -1,8 +0,0 @@ | 
				
			||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
				
			||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | 
				
			||||
<head> | 
				
			||||
</head> | 
				
			||||
<body> | 
				
			||||
<br /> | 
				
			||||
</body> | 
				
			||||
</html> | 
				
			||||
@ -1,27 +0,0 @@ | 
				
			||||
.search_info{ | 
				
			||||
	background-color: #F0F0F0; | 
				
			||||
	font-style: smaller; | 
				
			||||
	padding: 5px; | 
				
			||||
} | 
				
			||||
.result{ | 
				
			||||
	/*border: 1px dotted black;*/ | 
				
			||||
	margin: 20px; | 
				
			||||
	padding: 10px; | 
				
			||||
} | 
				
			||||
.result .title{ | 
				
			||||
	font-size: bigger; | 
				
			||||
	margin-top: -20px; | 
				
			||||
	background-color: white; | 
				
			||||
	margin-right: 100px; | 
				
			||||
	margin-left: -10px; | 
				
			||||
	margin-bottom: 5px; | 
				
			||||
} | 
				
			||||
.result .description{ | 
				
			||||
	font-decoration: none; | 
				
			||||
	width: 90%; | 
				
			||||
} | 
				
			||||
.result .highlight{ | 
				
			||||
	display: inline; | 
				
			||||
	background-color: lightblue; | 
				
			||||
	margin-right: 2px; | 
				
			||||
} | 
				
			||||
@ -1,100 +0,0 @@ | 
				
			||||
<?php //$id: $
 | 
				
			||||
/** | 
				
			||||
 * This script is the main client script. It calls the search server to get an XML document that | 
				
			||||
 * represents the list of results to the term searched. | 
				
			||||
 * It parses the XML document, checks user permissions and displays a set of results in a nice | 
				
			||||
 * format. | 
				
			||||
 * @package chamilo.plugin.search | 
				
			||||
 * @author Yannick Warnier <yannick.warnier@beeznest.com> | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Variables | 
				
			||||
 */ | 
				
			||||
require_once('../../../main/inc/global.inc.php'); | 
				
			||||
require ('filter_user.lib.php'); | 
				
			||||
require ('client.conf.php'); | 
				
			||||
api_block_anonymous_users(); | 
				
			||||
$htmlHeadXtra[] = '<link rel="stylesheet" type="text/css" href="search.css" />'; | 
				
			||||
 | 
				
			||||
$start_time = time(); | 
				
			||||
$xml_file = $server_url.'?'.$_SERVER['QUERY_STRING']; | 
				
			||||
//if(!$doc = xmldocfile($xml_file)){ | 
				
			||||
$results = simplexml_load_file($xml_file); | 
				
			||||
if($results === false) | 
				
			||||
{ | 
				
			||||
	$res = array(); | 
				
			||||
} | 
				
			||||
else | 
				
			||||
{ | 
				
			||||
	//$doc->load($xml_file); | 
				
			||||
	$subTotals = array(); | 
				
			||||
	$lasttag = ''; | 
				
			||||
	$myindex = 0; | 
				
			||||
	$level = 0; | 
				
			||||
	//$root = $doc->root(); | 
				
			||||
	//$root = $doc->documentElement; | 
				
			||||
	$my_query = $results->query; | 
				
			||||
	$my_search_info = $results->search_info; | 
				
			||||
	$my_search_term = $results->search_term; | 
				
			||||
	$my_num_found = $results->num_found; | 
				
			||||
	$my_search_time = $results->search_time; | 
				
			||||
	$elementCount = 1; | 
				
			||||
} | 
				
			||||
/** | 
				
			||||
 * This function is just a display helper. | 
				
			||||
 * @param	integer	Result ID | 
				
			||||
 * @param	string	Result title | 
				
			||||
 * @param	string	Result URL | 
				
			||||
 * @param	string	Short excerpt of the result document | 
				
			||||
 * @param	string  Date | 
				
			||||
 * @param	string  Rating | 
				
			||||
 */ | 
				
			||||
function result_output($id,$title,$url='',$excerpt='',$date='',$rating=''){ | 
				
			||||
	if(empty($id) OR empty($title)){return false;} | 
				
			||||
	$title = urldecode($title); | 
				
			||||
	$title = preg_replace('/\?cidReq=.*$/','',$title); | 
				
			||||
        $excerpt = preg_replace('/<hl>\s*(<hl>)?/','<div class="highlight">',$excerpt); | 
				
			||||
        $excerpt = preg_replace('/<\/hl>\s*(<\/hl>)?/','</div> ',$excerpt); | 
				
			||||
        $excerpt = stripslashes($excerpt); | 
				
			||||
	$string = "<div class='result'>\n" . | 
				
			||||
			"<div class='title'>$id. <a href='$url'>$title</a> - $date - $rating</div>\n" . | 
				
			||||
			"<div class='description'>$excerpt</div>\n" . | 
				
			||||
			"</div>\n"; | 
				
			||||
	//$string = "$id. <a href='$url'>$title</a> - $date<br/><i>$excerpt</i><br/><br/>"; | 
				
			||||
	return $string; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
include('../../../main/inc/header.inc.php'); | 
				
			||||
?> | 
				
			||||
 | 
				
			||||
<form method="get" action="<?php echo $search_url; ?>"><input
 | 
				
			||||
type="hidden" name="ps" value="1000"/><input | 
				
			||||
type="hidden" name="o" value="0"/><input | 
				
			||||
type="hidden" name="m" value="any"/><input | 
				
			||||
type="hidden" name="wm" value="sub"/><input | 
				
			||||
type="hidden" name="wf" value="2221"/><input | 
				
			||||
type="hidden" name="s" value="RDP"/><input | 
				
			||||
type="hidden" name="sy" value="1"/><input | 
				
			||||
type="text" name="q" value="<?php echo urldecode($my_query);?>" size="10" style="margin: 4px 6px; border: 1px solid #B6BB8C; color:#4D4F3A; height: 15px;padding:0px;"><input
 | 
				
			||||
type="submit" name="submit" value="<?php echo $lang_search_button; ?>" style="margin: 4px 6px; border: 1px solid #B6BB8C; color:#4D4F3A; height:17px;vertical-align:top;padding:0px"></form>
 | 
				
			||||
<?php | 
				
			||||
$i = 1; | 
				
			||||
$to_print = ''; | 
				
			||||
foreach($results->result as $res){ | 
				
			||||
	if(access_check($res->result_du)){ | 
				
			||||
		$to_print .= result_output($i,api_convert_encoding(urldecode($res->result_dt),$charset,'utf-8'),$res->result_du,api_html_entity_decode(urldecode($res->result_de)),api_htmlentities(urldecode($res->result_dm)),$res->result_dr); | 
				
			||||
		$i++; | 
				
			||||
	} | 
				
			||||
} | 
				
			||||
//TODO check if a time and number of results is defined | 
				
			||||
$i--; | 
				
			||||
if($to_print != ''){ | 
				
			||||
	//$time = $res['search_time'] + (time() - $start_time); | 
				
			||||
	//echo "<div class='search_info'>".$i.' '.$lang_search_found.' '.$time." $lang_seconds</div><br/>\n"; | 
				
			||||
	echo "<div class='search_info'>".$i.' '.$lang_search_found."</div><br/>\n"; | 
				
			||||
	echo $to_print; | 
				
			||||
}else{ | 
				
			||||
	echo "<div class='search_info'>".$lang_no_result_found."</div><br/>\n"; | 
				
			||||
} | 
				
			||||
include('../../../main/inc/footer.inc.php'); | 
				
			||||
?> | 
				
			||||
@ -1,8 +0,0 @@ | 
				
			||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
				
			||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | 
				
			||||
<head> | 
				
			||||
</head> | 
				
			||||
<body> | 
				
			||||
<br /> | 
				
			||||
</body> | 
				
			||||
</html> | 
				
			||||
@ -1,51 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/** | 
				
			||||
 * This file has to be placed at the root level of your Dokeos portal and has | 
				
			||||
 * to be referenced inside the indexer.conf file on your indexing server, as the | 
				
			||||
 * first URL to index on your portal. | 
				
			||||
 * @package chamilo.plugin.search | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Initialization | 
				
			||||
 */ | 
				
			||||
//the ip_address_of_search_server is the IP address from which your search | 
				
			||||
// (or indexing) server will connect to your portal to index it | 
				
			||||
$ip_address_of_search_server = '192.168.1.1'; | 
				
			||||
//the domain_name_of_search_server is the domain name from which your search | 
				
			||||
// (or indexing) server will connect to your portal to index it | 
				
			||||
$domain_name_of_search_server = 'your.domain.com'; | 
				
			||||
// indexing_user_id is the database ID of the user you created to be used by | 
				
			||||
// the indexing server to crawl your portal | 
				
			||||
$indexing_user_id = 'xxx'; | 
				
			||||
 | 
				
			||||
if($_SERVER['REMOTE_ADDR']==$ip_address_of_search_server | 
				
			||||
	or $_SERVER['REMOTE_HOST'] == $domain_name_of_search_server){ | 
				
			||||
 | 
				
			||||
  //make sure we don't display errors if the authentication does not work | 
				
			||||
  ini_set('display_errors','Off'); | 
				
			||||
  require_once('main/inc/global.inc.php'); | 
				
			||||
 | 
				
			||||
  $id = $indexing_user_id; | 
				
			||||
  //subscribe user to all courses | 
				
			||||
  $course_rel_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); | 
				
			||||
  $course = Database::get_main_table(TABLE_MAIN_COURSE); | 
				
			||||
  $sql = "DELETE FROM $course_rel_user WHERE user_id = $id"; | 
				
			||||
  $res = @Database::query($sql); | 
				
			||||
  $sql = "SELECT code FROM $course"; | 
				
			||||
  $res = @Database::query($sql); | 
				
			||||
  if(Database::num_rows($res)>0) | 
				
			||||
  { | 
				
			||||
    while ($row = Database::fetch_array($res)) | 
				
			||||
    { | 
				
			||||
      $sql2 = "INSERT INTO $course_rel_user (course_code,user_id,status)VALUES('".$row['code']."',$id,5)"; | 
				
			||||
      $res2 = @Database::query($sql2); | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
  //now login the user to the platform (put everything needed inside the | 
				
			||||
  // session) and then redirect the search engine to the courses list | 
				
			||||
  $_SESSION['_user']['user_id'] = $id; | 
				
			||||
  define('CHAMILO_HOMEPAGE', true); | 
				
			||||
  require('main/inc/global.inc.php'); | 
				
			||||
  require('user_portal.php'); | 
				
			||||
} | 
				
			||||
?> | 
				
			||||
@ -1,24 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/* See license terms in /license.txt */ | 
				
			||||
/** | 
				
			||||
 * This script is used as the entrance to the search plugin page. Due to its short form, | 
				
			||||
 * it can be included as a plugin in the Chamilo menu bar. | 
				
			||||
 * No process is operated here. Just displaying the HTML form. | 
				
			||||
 * @package chamilo.search | 
				
			||||
 * @author Yannick Warnier <yannick.warnier@beeznest.com> | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Variables | 
				
			||||
 */ | 
				
			||||
include('client/client.conf.php'); | 
				
			||||
?> | 
				
			||||
<form method="get" style='margin:0px;padding:0px;width:70px;background-color:transparent;height:20px;display:inline;margin-left: 20px;' action="<?php echo $search_url; ?>"><input
 | 
				
			||||
type="hidden" name="ps" value="1000"/><input | 
				
			||||
type="hidden" name="o" value="0"/><input | 
				
			||||
type="hidden" name="m" value="any"/><input | 
				
			||||
type="hidden" name="wm" value="sub"/><input | 
				
			||||
type="hidden" name="wf" value="2221"/><input | 
				
			||||
type="hidden" name="s" value="RDP"/><input | 
				
			||||
type="hidden" name="sy" value="1"/><input | 
				
			||||
type="text" name="q" value="<?php echo $lang_search_button; ?>..." size="10" style="margin: 0px; border: 1px solid #B6BB8C; color:#4D4F3A; height: 15px;padding:0px;" onclick="javascript:this.value='';"><!--input
 | 
				
			||||
type="submit" name="submit" value="<?php echo $lang_search_button; ?>" style="margin: 4px 6px; border: 1px solid #B6BB8C; color:#4D4F3A; height:17px;vertical-align:top;padding:0px"--></form>
 | 
				
			||||
@ -1,25 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/* See license terms in /license.txt */ | 
				
			||||
/** | 
				
			||||
 * This script is a configuration file for the search plugin. | 
				
			||||
 * You can use it as a master for other plugins. | 
				
			||||
 * These settings will be used in the administration interface for | 
				
			||||
 * plugins (Dokeos configuration settings->Plugins) | 
				
			||||
 * Make sure your read the README.txt file to understand how to use this plugin! | 
				
			||||
 * @package chamilo.plugin | 
				
			||||
 * @author Yannick Warnier <yannick.warnier@dokeos.com> | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Plugin details (must be present) | 
				
			||||
 */ | 
				
			||||
//the plugin title | 
				
			||||
$plugin_info['title']='Search'; | 
				
			||||
//the comments that go with the plugin | 
				
			||||
$plugin_info['comment']="Full-text search engine"; | 
				
			||||
//the locations where this plugin can be shown | 
				
			||||
$plugin_info['location']=array('mycourses_main', 'mycourses_menu', 'header', 'footer'); | 
				
			||||
//the plugin version | 
				
			||||
$plugin_info['version']='1.0'; | 
				
			||||
//the plugin author | 
				
			||||
$plugin_info['author']='Yannick Warnier'; | 
				
			||||
?> | 
				
			||||
@ -1 +0,0 @@ | 
				
			||||
0 5 * * * root /usr/sbin/indexer -N 2 /etc/mnogosearch/indexer.conf &>/dev/null | 
				
			||||
@ -1,8 +0,0 @@ | 
				
			||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
				
			||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | 
				
			||||
<head> | 
				
			||||
</head> | 
				
			||||
<body> | 
				
			||||
<br /> | 
				
			||||
</body> | 
				
			||||
</html> | 
				
			||||
@ -1,8 +0,0 @@ | 
				
			||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
				
			||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | 
				
			||||
<head> | 
				
			||||
</head> | 
				
			||||
<body> | 
				
			||||
<br /> | 
				
			||||
</body> | 
				
			||||
</html> | 
				
			||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						@ -1,177 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/** | 
				
			||||
 * Library for the common formatting functions | 
				
			||||
 * @package chamilo.plugin.search | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Exit, dropping the temporary tables just before that | 
				
			||||
 * @param	integer	Whether to print an error message (passed to drop_temp_table()) | 
				
			||||
 */ | 
				
			||||
function exit_local($print_err = 1) { | 
				
			||||
    drop_temp_table($print_err); | 
				
			||||
    exit; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Prints the error and the template bottom, then exit | 
				
			||||
 * @param	string	The error message | 
				
			||||
 */ | 
				
			||||
function print_error_local($str){ | 
				
			||||
    global $error; | 
				
			||||
     | 
				
			||||
    $error=$str; | 
				
			||||
 | 
				
			||||
    print_template('error'); | 
				
			||||
    print_template('bottom'); | 
				
			||||
     | 
				
			||||
    exit; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Gets the number of documents from the udm object | 
				
			||||
 * @return	mixed	An integer or "Unknown" if not found | 
				
			||||
 */ | 
				
			||||
function get_doc_count() { | 
				
			||||
    global $udm_agent; | 
				
			||||
 | 
				
			||||
    if (udm_api_version() >= 30111) { | 
				
			||||
		return(udm_get_doc_count($udm_agent)); | 
				
			||||
    } else { | 
				
			||||
    	return "Unknown"; | 
				
			||||
    }  | 
				
			||||
}  | 
				
			||||
 | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Format last modified date | 
				
			||||
 * @param	integer	UNIX Timestamp? | 
				
			||||
 * @return	string	Formatted date | 
				
			||||
 */ | 
				
			||||
function format_lastmod($lastmod) { | 
				
			||||
	$temp=$lastmod; | 
				
			||||
	if (!$temp) $temp = 'undefined'; | 
				
			||||
	elseif (udm_api_version() < 30204) $temp = strftime('%a, %d %b %Y %H:%M:%S %Z',$temp); | 
				
			||||
 | 
				
			||||
	return $temp; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Format date in seconds from a source in s,M,h,d,m,y | 
				
			||||
 * @param	string	Date | 
				
			||||
 * @return	integer	Date in seconds | 
				
			||||
 */ | 
				
			||||
function format_dp($dp) { | 
				
			||||
	$result=0; | 
				
			||||
 | 
				
			||||
	while ($dp != '') { | 
				
			||||
		$param = array(); | 
				
			||||
		if (preg_match('/^([\-\+]?\d+)([sMhdmy]?)/',$dp,$param)) {			 | 
				
			||||
			switch ($param[2]) { | 
				
			||||
				case 's':  $multiplier=1; break; | 
				
			||||
                case 'M':  $multiplier=60; break; | 
				
			||||
                case 'h':  $multiplier=3600; break; | 
				
			||||
                case 'd':  $multiplier=3600*24; break; | 
				
			||||
                case 'm':  $multiplier=3600*24*31; break; | 
				
			||||
                case 'y':  $multiplier=3600*24*365; break; | 
				
			||||
				default: $multiplier=1; | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			$result += $param[1]*$multiplier; | 
				
			||||
                        $dp=preg_replace("/^[\-\+]?\d+$param[2]/",'',$dp); | 
				
			||||
		} else { | 
				
			||||
			return 0; | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	return $result; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Formats the date using the user's settings as defined in search.html | 
				
			||||
 * @param	string	Date | 
				
			||||
 * @return	string	Formatted date | 
				
			||||
 */ | 
				
			||||
function format_userdate($date) { | 
				
			||||
	$result=0; | 
				
			||||
 | 
				
			||||
	$param = array(); | 
				
			||||
	if (preg_match('/^(\d+)\/(\d+)\/(\d+)$/',$date,$param)) { | 
				
			||||
		$day=$param[1]; | 
				
			||||
		$mon=$param[2]; | 
				
			||||
		$year=$param[3]; | 
				
			||||
 | 
				
			||||
		$result=mktime(0,0,0,$mon,$day,$year); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	return $result; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Parses the given text for the words searched and highlight the words, the returns the string | 
				
			||||
 * @param	string	Resulting document excerpt | 
				
			||||
 * @return	string	Same string but with highlight tags (as defined in search.html) | 
				
			||||
 */ | 
				
			||||
function ParseDocText($text){ | 
				
			||||
    global $all_words; | 
				
			||||
    global $hlbeg, $hlend; | 
				
			||||
        | 
				
			||||
    $str=$text; | 
				
			||||
 | 
				
			||||
    if (udm_api_version() < 30200) { | 
				
			||||
    	for ($i=0; $i<count($all_words); $i+=1) { | 
				
			||||
	    $word=$all_words[$i]; | 
				
			||||
	    $str = preg_replace("/([\s\t\r\n\~\!\@\#\$\%\^\&\*\(\)\-\_\=\+\\\|\{\}\[\]\;\:\'\"\<\>\?\/\,\.]+)($word)/i","\\1$hlbeg\\2$hlend",$str); | 
				
			||||
	    $str = preg_replace("/^($word)/i","$hlbeg\\1$hlend",$str); | 
				
			||||
    	} | 
				
			||||
    } else { | 
				
			||||
    	$str = str_replace("\2",$hlbeg,$str); | 
				
			||||
    	$str = str_replace("\3",$hlend,$str); | 
				
			||||
	while (substr_count($str,$hlbeg) > substr_count($str,$hlend)) { | 
				
			||||
	    $str.=$hlend; | 
				
			||||
	} | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    return $str; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Parses the global variable $QUERY_STRING | 
				
			||||
 */ | 
				
			||||
function ParseQString() { | 
				
			||||
    global $QUERY_STRING; | 
				
			||||
    global $ul, $ul_arr; | 
				
			||||
    global $tag, $tag_arr; | 
				
			||||
    global $cat, $cat_arr; | 
				
			||||
    global $lang, $lang_arr; | 
				
			||||
    global $type, $type_arr; | 
				
			||||
	 | 
				
			||||
    $pairs = explode("&", $QUERY_STRING); | 
				
			||||
    $ul_arr = array(); | 
				
			||||
    $tag_arr = array(); | 
				
			||||
    $cat_arr = array(); | 
				
			||||
    $lang_arr = array(); | 
				
			||||
    $type_arr = array(); | 
				
			||||
	 | 
				
			||||
    for($i=0; $i<count($pairs); $i+=1) { | 
				
			||||
	$pairs[$i]=str_replace('+',' ',$pairs[$i]); | 
				
			||||
	list($name, $value) = explode("=",$pairs[$i]); | 
				
			||||
	if ($name=='ul') { | 
				
			||||
	    $ul_arr[]=urldecode($value); | 
				
			||||
	    if (!count($ul_arr)) $ul=urldecode($value); | 
				
			||||
	} elseif ($name=='tag') { | 
				
			||||
	    $tag_arr[]=urldecode($value); | 
				
			||||
	    if (!count($tag_arr)) $tag=urldecode($value); | 
				
			||||
	} elseif ($name=='cat') { | 
				
			||||
	    $cat_arr[]=urldecode($value); | 
				
			||||
	    if (!count($cat_arr)) $cat=urldecode($value); | 
				
			||||
	} elseif ($name=='lang') { | 
				
			||||
	    $lang_arr[]=urldecode($value); | 
				
			||||
	    if (!count($lang_arr)) $lang=urldecode($value); | 
				
			||||
	} elseif ($name=='type') { | 
				
			||||
	    $type_arr[]=urldecode($value); | 
				
			||||
	    if (!count($type_arr)) $type=urldecode($value); | 
				
			||||
	} else continue; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
?> | 
				
			||||
@ -1,27 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/** | 
				
			||||
 * Mnogosearch plugin config file | 
				
			||||
 * @package chamilo.plugin.search | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Settings | 
				
			||||
 */ | 
				
			||||
// maximal page number to view | 
				
			||||
$MAX_NP=1; | 
				
			||||
 | 
				
			||||
// maximum results per page | 
				
			||||
$MAX_PS=1000; | 
				
			||||
 | 
				
			||||
// (optional) Enable autowild feature for url limits | 
				
			||||
// 'yes' - default value, can be 'yes' or 'no' | 
				
			||||
// $auto_wild='yes'; | 
				
			||||
 | 
				
			||||
// (optional) Enable language content negotiation | 
				
			||||
// 'no' - default value, can be 'yes' or 'no' | 
				
			||||
// $lang_content_negotiation='no'; | 
				
			||||
 | 
				
			||||
// (optional) Enable language url translation (file.en.ext -> file) | 
				
			||||
// 'no' - default value, can be 'yes' or 'no' | 
				
			||||
// $lang_url_translation='no'; | 
				
			||||
 | 
				
			||||
?> | 
				
			||||
@ -1,8 +0,0 @@ | 
				
			||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
				
			||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | 
				
			||||
<head> | 
				
			||||
</head> | 
				
			||||
<body> | 
				
			||||
<br /> | 
				
			||||
</body> | 
				
			||||
</html> | 
				
			||||
@ -1,544 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/** | 
				
			||||
 * Initialisation code + library of functions to process to the initialisation in | 
				
			||||
 * a varied set of ways. | 
				
			||||
 * This script is a modified version that can only be used with the php extension >= 3.2.32 | 
				
			||||
 * and PHP version 4.2 or higher | 
				
			||||
 * @package chamilo.plugin.search | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Faking the register_globals code - very bad thing - should escape all vars | 
				
			||||
 */ | 
				
			||||
if (isset ($HTTP_GET_VARS)) { | 
				
			||||
	while (list ($var, $val) = each($HTTP_GET_VARS)) { | 
				
			||||
		$$var = $val; | 
				
			||||
	} | 
				
			||||
} | 
				
			||||
if (isset ($HTTP_POST_VARS)) { | 
				
			||||
	while (list ($var, $val) = each($HTTP_POST_VARS)) { | 
				
			||||
		$$var = $val; | 
				
			||||
	} | 
				
			||||
} | 
				
			||||
if (isset ($HTTP_COOKIE_VARS)) { | 
				
			||||
	while (list ($var, $val) = each($HTTP_COOKIE_VARS)) { | 
				
			||||
		$$var = $val; | 
				
			||||
	} | 
				
			||||
} | 
				
			||||
if (isset ($HTTP_SERVER_VARS)) { | 
				
			||||
	while (list ($var, $val) = each($HTTP_SERVER_VARS)) { | 
				
			||||
		$$var = $val; | 
				
			||||
	} | 
				
			||||
} | 
				
			||||
 | 
				
			||||
$self = $PHP_SELF; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Setting default values for variables that will be used globally | 
				
			||||
 */ | 
				
			||||
if ($ps == "") | 
				
			||||
	$ps = 20; | 
				
			||||
if ($np == "") | 
				
			||||
	$np = 0; | 
				
			||||
if ($o == "") | 
				
			||||
	$o = 0; | 
				
			||||
if ($resultslimit <= 0) | 
				
			||||
	$resultslimit = 0; | 
				
			||||
 | 
				
			||||
if ($excerptsize == "") | 
				
			||||
	$excerptsize = 256; | 
				
			||||
if ($excerptpadding == "") | 
				
			||||
	$excerptsize = 40; | 
				
			||||
 | 
				
			||||
if (($dt != 'back') && ($dt != 'er') && ($dt != 'range')) | 
				
			||||
	$dt = ''; | 
				
			||||
if ($dp == "") | 
				
			||||
	$dp = 0; | 
				
			||||
if (($dx != 0) && ($dx != -1) && ($dx != 1)) | 
				
			||||
	$dx = 0; | 
				
			||||
if ($dy < 1970) | 
				
			||||
	$dy = 1970; | 
				
			||||
if (($dm < 0) || ($dm > 11)) | 
				
			||||
	$dm = 0; | 
				
			||||
if (($dd <= 0) || ($dd > 31)) | 
				
			||||
	$dd = "01"; | 
				
			||||
 | 
				
			||||
$db = urldecode($db); | 
				
			||||
$de = urldecode($de); | 
				
			||||
$type = urldecode($type); | 
				
			||||
 | 
				
			||||
$url = urldecode($url); | 
				
			||||
 | 
				
			||||
if ($db == "") | 
				
			||||
	$db = '01/01/1970'; | 
				
			||||
if ($de == "") | 
				
			||||
	$de = '31/12/2020'; | 
				
			||||
 | 
				
			||||
if ($hlbeg == "") | 
				
			||||
	$hlbeg = '<b>'; | 
				
			||||
if ($hlend == "") | 
				
			||||
	$hlend = '</b>'; | 
				
			||||
 | 
				
			||||
if ($storedocurl == "") | 
				
			||||
	$storedocurl = '/cgi-bin/storedoc.cgi'; | 
				
			||||
 | 
				
			||||
if (isset ($q)) { | 
				
			||||
	$q = urldecode($q); | 
				
			||||
	$have_query_flag = 1; | 
				
			||||
} else { | 
				
			||||
	$have_query_flag = 0; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
$query_orig = $q; | 
				
			||||
 | 
				
			||||
if (isset ($CHARSET_SAVED_QUERY_STRING)) { | 
				
			||||
	$q_local = urldecode($CHARSET_SAVED_QUERY_STRING); | 
				
			||||
	if (preg_match('/q=([^&]*)\&/', $q_local, $param)) { | 
				
			||||
		$q_local = urlencode($param[1]); | 
				
			||||
	} | 
				
			||||
	elseif (preg_match('/q=(.*)$/', $q_local, $param)) { | 
				
			||||
		$q_local = urlencode($param[1]); | 
				
			||||
	} else { | 
				
			||||
		$q_local = urlencode($q); | 
				
			||||
	} | 
				
			||||
	$q_string = $CHARSET_SAVED_QUERY_STRING; | 
				
			||||
} else { | 
				
			||||
	$q_local = urlencode(stripslashes($q)); | 
				
			||||
	$q_string = $QUERY_STRING; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
$db_local = urlencode($db); | 
				
			||||
$de_local = urlencode($de); | 
				
			||||
$type_local = urlencode($type); | 
				
			||||
 | 
				
			||||
$url_local = urlencode($url); | 
				
			||||
 | 
				
			||||
if (($MAX_NP > 0) && ($np > $MAX_NP)) | 
				
			||||
	$np = $MAX_NP; | 
				
			||||
if (($MAX_PS > 0) && ($ps > $MAX_PS)) | 
				
			||||
	$ps = $MAX_PS; | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Initialisation function. Gets the global variables defined all over and prepares | 
				
			||||
 * the udm agent accordingly. | 
				
			||||
 *  | 
				
			||||
 */ | 
				
			||||
function init() { | 
				
			||||
	global $q, $q_string, $query_orig, $have_query_flag, $have_spell_flag, $auto_wild; | 
				
			||||
	global $tag, $tag_arr, $cat, $cat_arr, $np, $ps, $lang, $lang_arr, $wm, $wf, $ul, $m; | 
				
			||||
	global $dt, $dp, $dx, $dm, $dd, $dy, $db, $de, $s, $resultslimit; | 
				
			||||
	global $trackquery, $localcharset, $browsercharset, $stopwordtable_arr, $stopwordfile_arr; | 
				
			||||
	global $minwordlength, $maxwordlength, $phrase, $cache; | 
				
			||||
	global $ispelluseprefixes, $crosswords, $ispellmode, $spell_host; | 
				
			||||
	global $affix_file, $spell_file, $vardir, $datadir, $sp, $sy; | 
				
			||||
	global $dbaddr, $dbmode, $udm_agent, $hlbeg, $hlend, $detectclones; | 
				
			||||
	global $phpver, $synonym_arr, $searchd_arr, $ul_arr; | 
				
			||||
	global $REMOTE_ADDR, $storedaddr, $type_arr, $type, $groupbysite, $site; | 
				
			||||
	global $excerptsize, $excerptpadding, $dateformat, $suggest; | 
				
			||||
	global $XMLOutput; | 
				
			||||
 | 
				
			||||
	ParseQString(); | 
				
			||||
 | 
				
			||||
	/* | 
				
			||||
	   if (preg_match("/^(\d+)\.(\d+)\.(\d+)/",phpversion(),$param)) { | 
				
			||||
		$phpver=$param[1]; | 
				
			||||
	   	if ($param[2] < 9) { | 
				
			||||
	   		$phpver .= "0$param[2]"; | 
				
			||||
	   	} else { | 
				
			||||
	   		$phpver .= "$param[2]"; | 
				
			||||
	   	} | 
				
			||||
	        if ($param[3] < 9) { | 
				
			||||
	   		$phpver .= "0$param[3]"; | 
				
			||||
	   	} else { | 
				
			||||
	   		$phpver .= "$param[3]"; | 
				
			||||
	   	} | 
				
			||||
	   } else { | 
				
			||||
	   	print "Cannot determine php version: <b>".phpversion()."</b>\n"; | 
				
			||||
	   	exit; | 
				
			||||
	   } | 
				
			||||
	*/ | 
				
			||||
	$have_spell_flag = 0; | 
				
			||||
 | 
				
			||||
	$stopwordtable_arr = array (); | 
				
			||||
	$stopwordfile_arr = array (); | 
				
			||||
	$synonym_arr = array (); | 
				
			||||
	$searchd_arr = array (); | 
				
			||||
 | 
				
			||||
	read_template(); | 
				
			||||
 | 
				
			||||
	if ($sp == '') | 
				
			||||
		$sp = 0; | 
				
			||||
	if ($sy == '') | 
				
			||||
		$sy = 0; | 
				
			||||
 | 
				
			||||
	$udm_agent = udm_alloc_agent_array($dbaddr); | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_PAGE_SIZE, $ps); | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_PAGE_NUM, $np); | 
				
			||||
 | 
				
			||||
	$trackquery = strtolower($trackquery); | 
				
			||||
	if ($trackquery == 'yes') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_TRACK_MODE, UDM_ENABLED); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_TRACK_MODE, UDM_DISABLED); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	$cache = strtolower($cache); | 
				
			||||
	if ($cache == 'yes') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_CACHE_MODE, UDM_ENABLED); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_CACHE_MODE, UDM_DISABLED); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	$ispelluseprefixes = strtolower($ispelluseprefixes); | 
				
			||||
	if ($ispelluseprefixes == 'yes') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_ISPELL_PREFIXES, UDM_ENABLED); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_ISPELL_PREFIXES, UDM_DISABLED); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	$crosswords = strtolower($crosswords); | 
				
			||||
	if ($crosswords == 'yes') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_CROSS_WORDS, UDM_ENABLED); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_CROSS_WORDS, UDM_DISABLED); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($localcharset != '') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_CHARSET, $localcharset); | 
				
			||||
		if (!udm_check_charset($udm_agent, $localcharset)) { | 
				
			||||
			print_template('top'); | 
				
			||||
			flush(); | 
				
			||||
			print_error_local("Incorrect localcharset $localcharset"); | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($localcharset == '') | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_CHARSET, 'utf-8'); | 
				
			||||
	if ($browsercharset != '') { | 
				
			||||
		if (!udm_check_charset($udm_agent, $browsercharset)) { | 
				
			||||
			print_template('top'); | 
				
			||||
			flush(); | 
				
			||||
			print_error_local("Incorrect browsercharset $browsercharset"); | 
				
			||||
		} | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_BROWSER_CHARSET, $browsercharset); | 
				
			||||
		if($XMLOutput != 1){ | 
				
			||||
			header("Content-Type: text/html; charset=$browsercharset"); | 
				
			||||
		}else{ | 
				
			||||
			header("Content-Type: text/xml"); | 
				
			||||
			echo "<?xml version='1.0' encoding=\"$browsercharset\" ?>\n";
 | 
				
			||||
		} | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_BROWSER_CHARSET, 'utf-8'); | 
				
			||||
		if($XMLOutput != 1){ | 
				
			||||
			header("Content-Type: text/html; charset=utf-8"); | 
				
			||||
		}else{ | 
				
			||||
			header("Content-Type: text/xml"); | 
				
			||||
			echo "<?xml version='1.0' encoding=\"utf-8\" ?>\n"; | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
	if ($hlbeg == '') | 
				
			||||
		$hlbeg = '<font color="000088"><b>'; | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_HLBEG, $hlbeg); | 
				
			||||
 | 
				
			||||
	if ($hlend == '') | 
				
			||||
		$hlend = '</b></font>'; | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_HLEND, $hlend); | 
				
			||||
 | 
				
			||||
	for ($i = 0; $i < count($stopwordfile_arr); $i += 1) { | 
				
			||||
		if ($stopwordfile_arr[$i] != '') { | 
				
			||||
			udm_set_agent_param($udm_agent, UDM_PARAM_STOPFILE, $stopwordfile_arr[$i]); | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($sy) { | 
				
			||||
		for ($i = 0; $i < count($synonym_arr); $i += 1) { | 
				
			||||
			if ($synonym_arr[$i] != '') { | 
				
			||||
				udm_set_agent_param($udm_agent, UDM_PARAM_SYNONYM, $synonym_arr[$i]); | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_QSTRING, $q_string); | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_REMOTE_ADDR, $REMOTE_ADDR); | 
				
			||||
 | 
				
			||||
	if ($have_query_flag) | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_QUERY, $query_orig); | 
				
			||||
	if ($storedaddr != '') | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_STORED, $storedaddr); | 
				
			||||
 | 
				
			||||
	$groupbysite = strtolower($groupbysite); | 
				
			||||
	if ($groupbysite == 'yes') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_GROUPBYSITE, UDM_ENABLED); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_GROUPBYSITE, UDM_DISABLED); | 
				
			||||
	} | 
				
			||||
	if ($site) | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_SITEID, $site); | 
				
			||||
	$detectclones = strtolower($detectclones); | 
				
			||||
	if ($detectclones == 'yes') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_DETECT_CLONES, UDM_ENABLED); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_DETECT_CLONES, UDM_DISABLED); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($m == 'any') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_SEARCH_MODE, UDM_MODE_ANY); | 
				
			||||
	} | 
				
			||||
	elseif ($m == 'all') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_SEARCH_MODE, UDM_MODE_ALL); | 
				
			||||
	} | 
				
			||||
	elseif ($m == 'bool') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_SEARCH_MODE, UDM_MODE_BOOL); | 
				
			||||
	} | 
				
			||||
	elseif ($m == 'phrase') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_SEARCH_MODE, UDM_MODE_PHRASE); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_SEARCH_MODE, UDM_MODE_ALL); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($wm == 'wrd') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_WORD_MATCH, UDM_MATCH_WORD); | 
				
			||||
	} | 
				
			||||
	elseif ($wm == 'beg') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_WORD_MATCH, UDM_MATCH_BEGIN); | 
				
			||||
	} | 
				
			||||
	elseif ($wm == 'end') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_WORD_MATCH, UDM_MATCH_END); | 
				
			||||
	} | 
				
			||||
	elseif ($wm == 'sub') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_WORD_MATCH, UDM_MATCH_SUBSTR); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_WORD_MATCH, UDM_MATCH_WORD); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($minwordlength > 0) { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_MIN_WORD_LEN, $minwordlength); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_MIN_WORD_LEN, 1); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($maxwordlength > 0) { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_MAX_WORD_LEN, $maxwordlength); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_MAX_WORD_LEN, 32); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($vardir != '') | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_VARDIR, $vardir); | 
				
			||||
	if ($datadir != '') | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_VARDIR, $datadir); | 
				
			||||
 | 
				
			||||
	if ($wf != '') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_WEIGHT_FACTOR, $wf); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	for ($i = 0; $i < count($ul_arr); $i += 1) { | 
				
			||||
		$temp_ul = $ul_arr[$i]; | 
				
			||||
		if ($temp_ul != '') { | 
				
			||||
			$auto_wild = strtolower($auto_wild); | 
				
			||||
			if (($auto_wild == 'yes') || ($auto_wild == '')) { | 
				
			||||
				if ((substr($temp_ul, 0, 7) == 'http://') || (substr($temp_ul, 0, 8) == 'https://') || (substr($temp_ul, 0, 7) == 'news://') || (substr($temp_ul, 0, 6) == 'ftp://')) { | 
				
			||||
					udm_add_search_limit($udm_agent, UDM_LIMIT_URL, "$temp_ul%"); | 
				
			||||
				} else { | 
				
			||||
					udm_add_search_limit($udm_agent, UDM_LIMIT_URL, "%$temp_ul%"); | 
				
			||||
				} | 
				
			||||
			} else { | 
				
			||||
				udm_add_search_limit($udm_agent, UDM_LIMIT_URL, $temp_ul); | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	for ($i = 0; $i < count($tag_arr); $i += 1) { | 
				
			||||
		$temp_tag = $tag_arr[$i]; | 
				
			||||
		if ($temp_tag != '') | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_TAG, $temp_tag); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	for ($i = 0; $i < count($type_arr); $i += 1) { | 
				
			||||
		$temp_type = $type_arr[$i]; | 
				
			||||
		if ($temp_type != '') | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_TYPE, $temp_type); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	for ($i = 0; $i < count($cat_arr); $i += 1) { | 
				
			||||
		$temp_cat = $cat_arr[$i]; | 
				
			||||
		if ($temp_cat != '') | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_CAT, $temp_cat); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	for ($i = 0; $i < count($lang_arr); $i += 1) { | 
				
			||||
		$temp_lang = $lang_arr[$i]; | 
				
			||||
		if ($temp_lang != '') | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_LANG, $temp_lang); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (function_exists('udm_set_agent_param_ex')) { | 
				
			||||
		if ($excerptsize > 0) | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'ExcerptSize', $excerptsize); | 
				
			||||
		if ($excerptpadding > 0) | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'ExcerptPadding', $excerptpadding); | 
				
			||||
		if ($dateformat != '') | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'DateFormat', $dateformat); | 
				
			||||
 | 
				
			||||
		if ($s != '') | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 's', $s); | 
				
			||||
		if ($resultslimit > 0) | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'resultslimit', $resultslimit); | 
				
			||||
 | 
				
			||||
		if (($dt == 'back') || ($dt == 'er') || ($dt == 'range')) { | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'dt', $dt); | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'dx', $dx); | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'dm', $dm); | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'dy', $dy); | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'dd', $dd); | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'dp', $dp); | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'db', $db); | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'de', $de); | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		$suggest = strtolower($suggest); | 
				
			||||
		if ($suggest == 'yes') | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'suggest', 'yes'); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (($dt == 'back') && ($dp != '0')) { | 
				
			||||
		$recent_time = format_dp($dp); | 
				
			||||
		if ($recent_time != 0) { | 
				
			||||
			$dl = time() - $recent_time; | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_DATE, ">$dl"); | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
	elseif ($dt == 'er') { | 
				
			||||
		$recent_time = mktime(0, 0, 0, ($dm +1), $dd, $dy); | 
				
			||||
		if ($dx == -1) { | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_DATE, "<$recent_time"); | 
				
			||||
		} | 
				
			||||
		elseif ($dx == 1) { | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_DATE, ">$recent_time"); | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
	elseif ($dt == 'range') { | 
				
			||||
		$begin_time = format_userdate($db); | 
				
			||||
		if ($begin_time) | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_DATE, ">$begin_time"); | 
				
			||||
 | 
				
			||||
		$end_time = format_userdate($de); | 
				
			||||
		if ($end_time) | 
				
			||||
			udm_add_search_limit($udm_agent, UDM_LIMIT_DATE, "<$end_time"); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	print_template('top'); | 
				
			||||
	flush(); | 
				
			||||
 | 
				
			||||
	$ispellmode = strtolower($ispellmode); | 
				
			||||
	if ($ispellmode == 'db') { | 
				
			||||
		if (!udm_load_ispell_data($udm_agent, UDM_ISPELL_TYPE_DB, '', '', 1)) { | 
				
			||||
			print_error_local(udm_error($udm_agent)); | 
				
			||||
		} else | 
				
			||||
			$have_spell_flag = 1; | 
				
			||||
	} | 
				
			||||
	elseif ($ispellmode == 'server') { | 
				
			||||
		if (!udm_load_ispell_data($udm_agent, UDM_ISPELL_TYPE_SERVER, $spell_host, '', 1)) { | 
				
			||||
			print_error_local("Error loading ispell data from server $spell_host"); | 
				
			||||
		} else | 
				
			||||
			$have_spell_flag = 1; | 
				
			||||
	} | 
				
			||||
	elseif (($ispellmode == 'text') && ($sp)) { | 
				
			||||
		reset($affix_file); | 
				
			||||
		while (list ($t_lang, $file) = each($affix_file)) { | 
				
			||||
			$param = array(); | 
				
			||||
			if (preg_match("/(.+)\;(.+)/", $file, $param)) { | 
				
			||||
				$t_charset = trim($param[1]); | 
				
			||||
				$t_file = trim($param[2]); | 
				
			||||
				if (!udm_load_ispell_data($udm_agent, UDM_ISPELL_TYPE_AFFIX, $t_lang, $t_charset, $t_file, 0)) { | 
				
			||||
					print_error_local("Error loading ispell data from file"); | 
				
			||||
				} else | 
				
			||||
					$have_spell_flag = 1; | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			$temp = $spell_file[$t_lang]; | 
				
			||||
			for ($i = 0; $i < count($temp); $i += 1) { | 
				
			||||
				if (preg_match("/(.+)\;(.+)/", $temp[$i], $param)) { | 
				
			||||
					$t_charset = trim($param[1]); | 
				
			||||
					$t_file = trim($param[2]); | 
				
			||||
					if (!udm_load_ispell_data($udm_agent, UDM_ISPELL_TYPE_SPELL, $t_lang, $t_charset, $t_file, 1)) { | 
				
			||||
						print_error_local("Error loading ispell data from file"); | 
				
			||||
					} else | 
				
			||||
						$have_spell_flag = 1; | 
				
			||||
				} | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	udm_parse_query_string($udm_agent, $q_string); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Some variation of the init function? | 
				
			||||
 *  | 
				
			||||
 */ | 
				
			||||
function init_cc() { | 
				
			||||
	global $q, $q_string, $query_orig, $have_query_flag, $have_spell_flag, $auto_wild; | 
				
			||||
	global $tag, $tag_arr, $cat, $cat_arr, $np, $ps, $lang, $lang_arr, $wm, $wf, $ul, $m; | 
				
			||||
	global $dt, $dp, $dx, $dm, $dd, $dy, $db, $de, $s, $resultslimit; | 
				
			||||
	global $trackquery, $localcharset, $browsercharset, $stopwordtable_arr, $stopwordfile_arr; | 
				
			||||
	global $minwordlength, $maxwordlength, $phrase, $cache; | 
				
			||||
	global $ispelluseprefixes, $crosswords, $ispellmode, $spell_host; | 
				
			||||
	global $affix_file, $spell_file, $vardir, $datadir, $sp, $sy; | 
				
			||||
	global $dbaddr, $dbmode, $udm_agent, $hlbeg, $hlend, $detectclones; | 
				
			||||
	global $phpver, $synonym_arr, $searchd_arr, $ul_arr; | 
				
			||||
	global $REMOTE_ADDR, $storedaddr, $type_arr, $type, $groupbysite, $site; | 
				
			||||
	global $excerptsize, $excerptpadding, $dateformat, $suggest; | 
				
			||||
 | 
				
			||||
	//parse the $QUERY_STRING global variable and puts pieces into corresponding arrays | 
				
			||||
	ParseQString(); | 
				
			||||
 | 
				
			||||
	//read the template file | 
				
			||||
	read_template(); | 
				
			||||
 | 
				
			||||
	$udm_agent = udm_alloc_agent_array($dbaddr); | 
				
			||||
 | 
				
			||||
	if ($localcharset != '') { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_CHARSET, $localcharset); | 
				
			||||
		if (!udm_check_charset($udm_agent, $localcharset)) { | 
				
			||||
			print_template('top'); | 
				
			||||
			flush(); | 
				
			||||
			print_error_local("Incorrect localcharset $localcharset"); | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if ($localcharset == '') | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_CHARSET, 'utf-8'); | 
				
			||||
	if ($browsercharset != '') { | 
				
			||||
		if (!udm_check_charset($udm_agent, $browsercharset)) { | 
				
			||||
			print_template('top'); | 
				
			||||
			flush(); | 
				
			||||
			print_error_local("Incorrect browsercharset $browsercharset"); | 
				
			||||
		} | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_BROWSER_CHARSET, $browsercharset); | 
				
			||||
		header("Content-Type: text/html; charset=$browsercharset"); | 
				
			||||
	} else { | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_BROWSER_CHARSET, 'utf-8'); | 
				
			||||
		header("Content-Type: text/html; charset=utf-8"); | 
				
			||||
	} | 
				
			||||
	if ($hlbeg == '') | 
				
			||||
		$hlbeg = '<font color="000088"><b>'; | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_HLBEG, $hlbeg); | 
				
			||||
 | 
				
			||||
	if ($hlend == '') | 
				
			||||
		$hlend = '</b></font>'; | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_HLEND, $hlend); | 
				
			||||
 | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_QSTRING, $q_string); | 
				
			||||
	udm_set_agent_param($udm_agent, UDM_PARAM_REMOTE_ADDR, $REMOTE_ADDR); | 
				
			||||
 | 
				
			||||
	if ($have_query_flag) | 
				
			||||
		udm_set_agent_param($udm_agent, UDM_PARAM_QUERY, $query_orig); | 
				
			||||
 | 
				
			||||
	if (function_exists('udm_set_agent_param_ex')) { | 
				
			||||
		if ($dateformat != '') | 
				
			||||
			udm_set_agent_param_ex($udm_agent, 'DateFormat', $dateformat); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	udm_parse_query_string($udm_agent, $q_string); | 
				
			||||
} | 
				
			||||
?> | 
				
			||||
@ -1,272 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/** | 
				
			||||
 *   mnoGoSearch-php v.3.2.10 | 
				
			||||
 *   for mnoGoSearch ( formely known as UdmSearch ) free web search engine | 
				
			||||
 *   (C) 2001 by Sergey Kartashoff <gluke@mail.ru>, | 
				
			||||
 *               mnoGoSearch Developers Team <devel@mnogosearch.org> | 
				
			||||
 *   @package chamilo.plugin.search | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Initialization | 
				
			||||
 */ | 
				
			||||
if (!extension_loaded('mnogosearch')) { | 
				
			||||
	print "<b>This script requires PHP4.3.0+ with mnoGoSearch extension</b>"; | 
				
			||||
	exit; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
define("UDM_ENABLED", 1); | 
				
			||||
define("UDM_DISABLED", 0); | 
				
			||||
 | 
				
			||||
require ('./config.inc'); | 
				
			||||
require ('./common.inc'); | 
				
			||||
require ('./template.inc'); | 
				
			||||
 | 
				
			||||
require ('./init.inc'); | 
				
			||||
//api_block_anonymous_users(); | 
				
			||||
//require ('filter_user.functions.php'); | 
				
			||||
 | 
				
			||||
if ($lang_content_negotiation == 'yes') { | 
				
			||||
	// path to template file ($lang_content_negotiation = 'yes') | 
				
			||||
	// please refer to docs on this feature before using it. | 
				
			||||
	$template_file = preg_replace("/\.php\.*/", ".xml.php", basename($SCRIPT_FILENAME)); | 
				
			||||
	$template_file = "./".$template_file; | 
				
			||||
} else { | 
				
			||||
	// path to template file ($lang_content_negotiation = 'no') | 
				
			||||
	$template_file = './search.xml.php'; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
// ----------------------------------------------- | 
				
			||||
//  M A I N | 
				
			||||
// ----------------------------------------------- | 
				
			||||
 | 
				
			||||
if (!$cc) { | 
				
			||||
	$XMLOutput = 1; | 
				
			||||
	init(); | 
				
			||||
 | 
				
			||||
	if (!$have_query_flag) { | 
				
			||||
		print_template('bottom'); | 
				
			||||
		return; | 
				
			||||
	} | 
				
			||||
	elseif ($have_query_flag && ($q == '')) { | 
				
			||||
		print_template('noquery'); | 
				
			||||
		print_template('bottom'); | 
				
			||||
		return; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	$res = udm_find($udm_agent, $q); | 
				
			||||
 | 
				
			||||
	if (!$res) { | 
				
			||||
		print_error_local(udm_error($udm_agent)); | 
				
			||||
	} else { | 
				
			||||
		$found = udm_get_res_param($res, UDM_PARAM_FOUND); | 
				
			||||
		$rows = udm_get_res_param($res, UDM_PARAM_NUM_ROWS); | 
				
			||||
		//YW commented out because broke everything | 
				
			||||
		//if (udm_api_version() >= 30231) { | 
				
			||||
		//    $wordinfo=Udm_Get_Agent_Param_Ex($udm_agent,'W'); | 
				
			||||
		//} else { | 
				
			||||
		$wordinfo = udm_get_res_param($res, UDM_PARAM_WORDINFO_ALL); | 
				
			||||
		//} | 
				
			||||
		$searchtime = udm_get_res_param($res, UDM_PARAM_SEARCHTIME); | 
				
			||||
		$first_doc = udm_get_res_param($res, UDM_PARAM_FIRST_DOC); | 
				
			||||
		$last_doc = udm_get_res_param($res, UDM_PARAM_LAST_DOC); | 
				
			||||
 | 
				
			||||
		if (!$found) { | 
				
			||||
			$ws = ''; | 
				
			||||
			if ((udm_api_version() >= 30233) && ($suggest == 'yes')) { | 
				
			||||
				$ws = udm_get_agent_param_ex($udm_agent, 'WS'); | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			print_template('notfound'); | 
				
			||||
			print_template('bottom'); | 
				
			||||
			return; | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		$from = IntVal($np) * IntVal($ps); | 
				
			||||
		$to = IntVal($np +1) * IntVal($ps); | 
				
			||||
 | 
				
			||||
		if ($to > $found) | 
				
			||||
			$to = $found; | 
				
			||||
		if (($from + $ps) < $found) | 
				
			||||
			$isnext = 1; | 
				
			||||
		$nav = make_nav($query_orig); | 
				
			||||
 | 
				
			||||
		print_template('restop'); | 
				
			||||
 | 
				
			||||
		$global_doc_res = $res; | 
				
			||||
		$my_skip = 0; | 
				
			||||
 | 
				
			||||
		for ($i = 0; $i < $rows; $i += 1) { | 
				
			||||
			$excerpt_flag = 0; | 
				
			||||
			$clonestr = ''; | 
				
			||||
 | 
				
			||||
			$rec_id = udm_get_res_field($res, $i, UDM_FIELD_URLID); | 
				
			||||
 | 
				
			||||
			$global_res_position = $i; | 
				
			||||
 | 
				
			||||
			if (udm_api_version() >= 30207) { | 
				
			||||
				$origin_id = udm_get_res_field($res, $i, UDM_FIELD_ORIGINID); | 
				
			||||
				if ($origin_id) | 
				
			||||
					continue; | 
				
			||||
				else { | 
				
			||||
					for ($j = 0; $j < $rows; $j += 1) { | 
				
			||||
						$cl_origin_id = udm_get_res_field($res, $j, UDM_FIELD_ORIGINID); | 
				
			||||
						if (($cl_origin_id) && ($cl_origin_id == $rec_id)) { | 
				
			||||
							$url = udm_get_res_field($res, $j, UDM_FIELD_URL); | 
				
			||||
							//YW | 
				
			||||
 | 
				
			||||
							/*if (!access_check($url)) { | 
				
			||||
								$my_skip ++; | 
				
			||||
								continue; | 
				
			||||
							}*/ | 
				
			||||
							//YW | 
				
			||||
							$contype = udm_get_res_field($res, $j, UDM_FIELD_CONTENT); | 
				
			||||
							$docsize = udm_get_res_field($res, $j, UDM_FIELD_SIZE); | 
				
			||||
							$lastmod = format_lastmod(udm_get_res_field($res, $j, UDM_FIELD_MODIFIED)); | 
				
			||||
							if (udm_api_version() >= 30207) { | 
				
			||||
								$pop_rank = udm_get_res_field($res, $i, UDM_FIELD_POP_RANK); | 
				
			||||
							} else | 
				
			||||
								$pop_rank = ''; | 
				
			||||
							$clonestr .= print_template('clone', 0)."\n"; | 
				
			||||
						} | 
				
			||||
					} | 
				
			||||
				} | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			if (udm_api_version() >= 30204) { | 
				
			||||
				$excerpt_flag = udm_make_excerpt($udm_agent, $res, $i); | 
				
			||||
			} | 
				
			||||
			//YW | 
				
			||||
			/* | 
				
			||||
			$ndoc = udm_get_res_field($res, $i, UDM_FIELD_ORDER) - $my_skip; | 
				
			||||
			*/ | 
				
			||||
			//YW | 
				
			||||
			$rating = udm_get_res_field($res, $i, UDM_FIELD_RATING); | 
				
			||||
			$url = udm_get_res_field($res, $i, UDM_FIELD_URL); | 
				
			||||
			//YW | 
				
			||||
			/* | 
				
			||||
			if (!access_check($url)) { | 
				
			||||
				$my_skip ++; | 
				
			||||
				continue; | 
				
			||||
			}*/ | 
				
			||||
			//YW | 
				
			||||
 | 
				
			||||
			$contype = udm_get_res_field($res, $i, UDM_FIELD_CONTENT); | 
				
			||||
			$docsize = udm_get_res_field($res, $i, UDM_FIELD_SIZE); | 
				
			||||
			$lastmod = format_lastmod(udm_get_res_field($res, $i, UDM_FIELD_MODIFIED)); | 
				
			||||
 | 
				
			||||
			$title = udm_get_res_field($res, $i, UDM_FIELD_TITLE); | 
				
			||||
			$title = ($title) ? htmlspecialchars($title) : basename($url); | 
				
			||||
 | 
				
			||||
			$title = ParseDocText($title); | 
				
			||||
			$text = ParseDocText(htmlspecialchars(udm_get_res_field($res, $i, UDM_FIELD_TEXT))); | 
				
			||||
			//$text=ParseDocText(htmlspecialchars(udm_get_res_field_ex($res,$i,"Body"))); | 
				
			||||
			$keyw = ParseDocText(htmlspecialchars(udm_get_res_field($res, $i, UDM_FIELD_KEYWORDS))); | 
				
			||||
			$desc = ParseDocText(htmlspecialchars(udm_get_res_field($res, $i, UDM_FIELD_DESC))); | 
				
			||||
 | 
				
			||||
			$crc = udm_get_res_field($res, $i, UDM_FIELD_CRC); | 
				
			||||
 | 
				
			||||
			if (udm_api_version() >= 30203) { | 
				
			||||
				$doclang = udm_get_res_field($res, $i, UDM_FIELD_LANG); | 
				
			||||
				$doccharset = udm_get_res_field($res, $i, UDM_FIELD_CHARSET); | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			if ($phpver >= 40006) { | 
				
			||||
				$category = udm_get_res_field($res, $i, UDM_FIELD_CATEGORY); | 
				
			||||
			} else { | 
				
			||||
				$category = ''; | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			reset($alias_arr); | 
				
			||||
			$save_url = $url; | 
				
			||||
			while (list ($t_alias, $t_url) = each($alias_arr)) { | 
				
			||||
				$url = str_replace($t_alias, $t_url, $url); | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			if (udm_api_version() <= 30223) { | 
				
			||||
				if (udm_api_version() >= 30204) { | 
				
			||||
					if ($excerpt_flag) { | 
				
			||||
						if (udm_api_version() >= 30216) { | 
				
			||||
							if (udm_get_res_field_ex($res, $i, "CachedCopy") != '') { | 
				
			||||
								$stored_href = "$self?cc=1"."&url=".urlencode($save_url)."&q=".urlencode($query_orig); | 
				
			||||
							} | 
				
			||||
						} | 
				
			||||
						elseif (udm_api_version() >= 30211) { | 
				
			||||
							$stored_href = "$storedocurl?rec_id=".udm_hash32($udm_agent, $save_url)."&DM=".urlencode($lastmod)."&DS=$docsize"."&L=$doclang"."&CS=$doccharset"."&DU=".urlencode($save_url)."&CT=".urlencode($contype)."&q=".urlencode($query_orig); | 
				
			||||
						} else { | 
				
			||||
							$stored_href = "$storedocurl?rec_id=".udm_CRC32($udm_agent, $save_url)."&DM=".urlencode($lastmod)."&DS=$docsize"."&L=$doclang"."&CS=$doccharset"."&DU=".urlencode($save_url)."&CT=".urlencode($contype)."&q=".urlencode($query_orig); | 
				
			||||
						} | 
				
			||||
						if ($stored_href != '') | 
				
			||||
							$storedstr = print_template('stored', 0); | 
				
			||||
					} else | 
				
			||||
						$storedstr = ''; | 
				
			||||
				} else | 
				
			||||
					$storedstr = ''; | 
				
			||||
			} else { | 
				
			||||
				if (udm_get_res_field_ex($res, $i, "CachedCopy") != '') { | 
				
			||||
					if (udm_get_res_field_ex($res, $i, "dbnum") == '') { | 
				
			||||
						$stored_href = "$self?cc=1"."&url=".urlencode($save_url)."&q=".urlencode($query_orig); | 
				
			||||
					} else { | 
				
			||||
						$stored_href = "$self?cc=1"."&dbnum=".udm_get_res_field_ex($res, $i, "dbnum")."&url=".urlencode($save_url)."&q=".urlencode($query_orig); | 
				
			||||
					} | 
				
			||||
					$storedstr = print_template('stored', 0); | 
				
			||||
				} | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			$sitelimitstr = $persite = ''; | 
				
			||||
			if ((udm_api_version() >= 30207) && ($groupbysite == 'yes')) { | 
				
			||||
				if (!$site) { | 
				
			||||
					$sitelimit_href = "$PHP_SELF?$QUERY_STRING"; | 
				
			||||
					$sitelimit_href = preg_replace("/\&np=\d*/", '', $sitelimit_href); | 
				
			||||
					$sitelimit_href .= "&np=0&site=".udm_get_res_field($res, $i, UDM_FIELD_SITEID); | 
				
			||||
					$persite = udm_get_res_field_ex($res, $i, "PerSite"); | 
				
			||||
					$sitelimitstr = print_template('site_limit', 0); | 
				
			||||
				} | 
				
			||||
			} | 
				
			||||
 | 
				
			||||
			if (udm_api_version() >= 30207) { | 
				
			||||
				$pop_rank = udm_get_res_field($res, $i, UDM_FIELD_POP_RANK); | 
				
			||||
			} else | 
				
			||||
				$pop_rank = ''; | 
				
			||||
 | 
				
			||||
			if ((substr($url, 0, 6) == "ftp://") && ($templates['ftpres'][0] != '')) { | 
				
			||||
				print_template('ftpres'); | 
				
			||||
			} | 
				
			||||
			elseif (((substr($url, 0, 7) == "http://") || (substr($url, 0, 8) == "https://")) && ($templates['httpres'][0] != '')) { | 
				
			||||
				print_template('httpres'); | 
				
			||||
			} else { | 
				
			||||
				print_template('res'); | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
		$global_doc_res = ''; | 
				
			||||
 | 
				
			||||
		print_template('resbot'); | 
				
			||||
		print_template('bottom'); | 
				
			||||
 | 
				
			||||
		// Free result | 
				
			||||
		udm_free_res($res); | 
				
			||||
	} | 
				
			||||
} else { | 
				
			||||
	/* show cached copy */ | 
				
			||||
	init_cc(); | 
				
			||||
	$res = udm_store_doc_cgi($udm_agent); | 
				
			||||
 | 
				
			||||
	$id = udm_get_agent_param_ex($udm_agent, 'ID'); | 
				
			||||
	$last_modified = udm_get_agent_param_ex($udm_agent, 'Last-Modified'); | 
				
			||||
	$content = udm_get_agent_param_ex($udm_agent, 'Content-Type'); | 
				
			||||
	$length = udm_get_agent_param_ex($udm_agent, 'Content-Length'); | 
				
			||||
	$charset = udm_get_agent_param_ex($udm_agent, 'Charset'); | 
				
			||||
 | 
				
			||||
	Header("Content-Type: text/html; charset=$charset"); | 
				
			||||
 | 
				
			||||
	print_template('storedoc_top'); | 
				
			||||
 | 
				
			||||
	if ($res) { | 
				
			||||
		$document = ParseDocText(udm_get_agent_param_ex($udm_agent, 'document')); | 
				
			||||
		print_template('storedoc'); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	print_template('storedoc_bottom'); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
udm_free_agent($udm_agent); | 
				
			||||
?> | 
				
			||||
@ -1,390 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/** | 
				
			||||
 * Template file for Mnogosearch | 
				
			||||
 * @package chamilo.plugin.search | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Redirect if not loaded by expected script | 
				
			||||
 */ | 
				
			||||
if(preg_match('/.*search\.htm/',$_SERVER['PHP_SELF'])){ | 
				
			||||
  header('location:searchit.php'); | 
				
			||||
} | 
				
			||||
?> | 
				
			||||
<!-- | 
				
			||||
 | 
				
			||||
    This is default template file for mnoGoSearch 3.2 | 
				
			||||
    (C) 1999-2002, mnoGoSearch developers team <devel@mnogosearch.org> | 
				
			||||
 | 
				
			||||
    Please rename to search.htm and edit as desired. | 
				
			||||
    See doc/README.templates for detailed information. | 
				
			||||
    You may want to keep the original file for future reference. | 
				
			||||
 | 
				
			||||
    WARNING: Use proper chmod to protect your passwords! | 
				
			||||
--> | 
				
			||||
 | 
				
			||||
<!--variables | 
				
			||||
# Database parameters are to be used with SQL backend | 
				
			||||
# and do not matter for built-in text files support | 
				
			||||
# Format (for mnogo-3.2.4 and below): <DBType>:[//[DBUser[:DBPass]@]DBHost[:DBPort]]/DBName/ | 
				
			||||
# Format (for mnogo-3.2.5+): <DBType>:[//[DBUser[:DBPass]@]DBHost[:DBPort]]/DBName/[?dbmode=mode] | 
				
			||||
DBAddr  mysql://db_user:db_pass@db_host/db_name/?dbmode=single | 
				
			||||
 | 
				
			||||
# Uncomment this line to enable search result cache | 
				
			||||
#Cache yes | 
				
			||||
 | 
				
			||||
# Uncomment this line if you want to detect and show clones | 
				
			||||
#DetectClones yes | 
				
			||||
 | 
				
			||||
# Use proper local and browser charsets | 
				
			||||
# Examples: | 
				
			||||
 | 
				
			||||
LocalCharset	iso-8859-1 | 
				
			||||
BrowserCharset	iso-8859-1 | 
				
			||||
 | 
				
			||||
#LocalCharset	utf-8 | 
				
			||||
#BrowserCharset	utf-8 | 
				
			||||
 | 
				
			||||
#LocalCharset   koi8-r | 
				
			||||
#BrowserCharset koi8-r | 
				
			||||
 | 
				
			||||
# For cache mode and built-in database | 
				
			||||
# you may choose alternative working directory | 
				
			||||
#VarDir /usr/local/mnogosearch/var | 
				
			||||
 | 
				
			||||
# Load stopwords file.  File name is either absolute | 
				
			||||
# or relative to /etc directory of mnoGoSearch installation. | 
				
			||||
# | 
				
			||||
#StopwordFile stopwords/en.sl | 
				
			||||
#StopwordFile stopwords/ru.sl | 
				
			||||
# | 
				
			||||
 | 
				
			||||
#IspellUsePrefixes yes/no | 
				
			||||
 | 
				
			||||
# a newer mnogosearch-3.2.x ispell affix commands | 
				
			||||
#Affix en us-ascii /opt/udm/ispell/en.aff | 
				
			||||
#Affix ru koi8-r /opt/udm/ispell/ru.aff | 
				
			||||
#Spell en us-ascii /opt/udm/ispell/en.dict | 
				
			||||
#Spell ru koi8-r /opt/udm/ispell/ru.dict | 
				
			||||
 | 
				
			||||
# Word lengths | 
				
			||||
MinWordLength 1 | 
				
			||||
MaxWordLength 32 | 
				
			||||
 | 
				
			||||
# | 
				
			||||
# How to hilight searched words. | 
				
			||||
# | 
				
			||||
#HlBeg	<font color="000088"><b> | 
				
			||||
#HlEnd	</b></font> | 
				
			||||
HlBeg <hl> | 
				
			||||
HlEnd </hl> | 
				
			||||
 | 
				
			||||
# Load synonyms file.  File name is either absolute | 
				
			||||
# or relative to /etc directory of mnoGoSearch installation. | 
				
			||||
# | 
				
			||||
#Synonym /opt/udm/synonym/english.syn | 
				
			||||
#Synonym /opt/udm/synonym/russian.syn | 
				
			||||
#Synonym /opt/udm/synonym/francais.syn | 
				
			||||
 | 
				
			||||
#Alias <find-prefix> <replace-prefix> | 
				
			||||
#Alias http://localhost/ http://server.domain/ | 
				
			||||
 | 
				
			||||
# Grouping results by site (requires mnogosearch-3.2.7+) | 
				
			||||
# GroupBySite yes | 
				
			||||
 | 
				
			||||
# Uncoment this line to change default maximal excerpt size. Default value is 256 | 
				
			||||
# (requires mnogosearch-3.2.16+) | 
				
			||||
ExcerptSize 512 | 
				
			||||
# | 
				
			||||
 | 
				
			||||
# Uncomment this line to change number of characters before and after search words | 
				
			||||
# in excerpts. Default value is 40. | 
				
			||||
# (requires mnogosearch-3.2.16+) | 
				
			||||
ExcerptPadding 128 | 
				
			||||
# | 
				
			||||
 | 
				
			||||
# Uncomment this line to change Last-Modified format output | 
				
			||||
# Use strftime function meta variables | 
				
			||||
#DateFormat %d %b %Y %X %Z | 
				
			||||
 | 
				
			||||
# Uncomment to limit maximum number of results | 
				
			||||
ResultsLimit 1000 | 
				
			||||
 | 
				
			||||
# Uncomment this line if you want to generate misspelled | 
				
			||||
# search word suggestions. You need to run "indexer -Ewrdstat" | 
				
			||||
# before using this feature. | 
				
			||||
# | 
				
			||||
#Suggest yes | 
				
			||||
 | 
				
			||||
#------------------------------------------------- | 
				
			||||
# obsolete (mnogosearch-3.1.x or 3.2 old versions specific parameters) | 
				
			||||
 | 
				
			||||
# Choose storage mode (for mnogosearch-3.2.4 or earlier): | 
				
			||||
#DBMode  single | 
				
			||||
#DBMode  multi | 
				
			||||
#DBMode  crc | 
				
			||||
#DBMode  crc-multi | 
				
			||||
#DBMode  cache | 
				
			||||
 | 
				
			||||
# Uncomment this line to enable query tracking facility | 
				
			||||
# Use trackquery parameter in DBAddr command if using with mnogosearch-3.2.13+ | 
				
			||||
#TrackQuery yes | 
				
			||||
 | 
				
			||||
#IspellMode text | 
				
			||||
 | 
				
			||||
# Uncomment if index was built with phrase support | 
				
			||||
#Phrase yes | 
				
			||||
 | 
				
			||||
# Load stopwords from SQL table | 
				
			||||
#StopwordTable stopword | 
				
			||||
 | 
				
			||||
# old mnogosearch-3.1.x ispell affix commands | 
				
			||||
#Affix en /opt/udm/ispell/en.aff | 
				
			||||
#Affix ru /opt/udm/ispell/ru.aff | 
				
			||||
#Spell en /opt/udm/ispell/en.dict | 
				
			||||
#Spell ru /opt/udm/ispell/ru.dict | 
				
			||||
 | 
				
			||||
# Searchd address - only for mnogosearch - 3.2.3 or earlier ! | 
				
			||||
#SearchdAddr localhost | 
				
			||||
 | 
				
			||||
# Uncomment this line to enable document presence check at stored | 
				
			||||
# (not used with mnogosearch-3.2.16+) | 
				
			||||
#StoredAddr localhost | 
				
			||||
 | 
				
			||||
# URL basis for storedoc.cgi | 
				
			||||
# (not used with mnogosearch-3.2.16+) | 
				
			||||
#StoredocURL     /cgi-bin/storedoc.cgi | 
				
			||||
 | 
				
			||||
--> | 
				
			||||
 | 
				
			||||
<!--top--> | 
				
			||||
<results> | 
				
			||||
<!--/top--> | 
				
			||||
 | 
				
			||||
<!--stored--> | 
				
			||||
<cached> | 
				
			||||
	<cached_href>$(storef_href)</cached_href> | 
				
			||||
</cached> | 
				
			||||
<!--/stored--> | 
				
			||||
 | 
				
			||||
<!--site_limit--> | 
				
			||||
<more_results_from_this_site>$(sitelimit_href)</more_results_from_this_site> | 
				
			||||
<limit_per_site>$(PerSite)</limit_per_site> | 
				
			||||
<!--/site_limit--> | 
				
			||||
 | 
				
			||||
<!--clone--> | 
				
			||||
<clone> | 
				
			||||
	<clone_du>$DU</clone_du> | 
				
			||||
	<clone_dc>$DC</clone_dc> | 
				
			||||
	<clone_dm>$DM</clone_dm> | 
				
			||||
	<clone_ds_byte>$DS</clone_ds_byte> | 
				
			||||
</clone> | 
				
			||||
<!--/clone--> | 
				
			||||
 | 
				
			||||
<!--restop--> | 
				
			||||
<search_info>$W</search_info> | 
				
			||||
<search_term>$(WS)</search_term> | 
				
			||||
<query>$Q</query> | 
				
			||||
<num_found>$t</num_found> | 
				
			||||
<search_time>$SearchTime</search_time> | 
				
			||||
<!--/restop--> | 
				
			||||
 | 
				
			||||
<!--res--> | 
				
			||||
<result> | 
				
			||||
	<result_dn>$DN</result_dn> | 
				
			||||
	<result_du>$DU</result_du> | 
				
			||||
	<result_dt>$DT</result_dt> | 
				
			||||
	<result_dr>$DR</result_dr> | 
				
			||||
	<result_pop_rank>$(Pop_Rank)</result_pop_rank> | 
				
			||||
	<result_de>$DE</result_de> | 
				
			||||
	<result_dx>$DX</result_dx> | 
				
			||||
	<result_dud>$DUD</result_dud> | 
				
			||||
	<result_dc>($DC)</result_dc> | 
				
			||||
	<result_dm>$DM</result_dm> | 
				
			||||
	<result_ds>$DS</result_ds> | 
				
			||||
	<result_cl>$CL</result_cl> | 
				
			||||
	<result_stored>$(STORED)</result_stored> | 
				
			||||
	<result_sitelimit>$(SITELIMIT)</result_sitelimit> | 
				
			||||
</result> | 
				
			||||
<!--/res--> | 
				
			||||
 | 
				
			||||
<!--ftpres--> | 
				
			||||
<result> | 
				
			||||
	<result_dn>$DN</result_dn> | 
				
			||||
	<result_du>$DU</result_du> | 
				
			||||
	<result_dt>$DT</result_dt> | 
				
			||||
	<result_dr>$DR</result_dr> | 
				
			||||
	<result_pop_rank>$(Pop_Rank)</result_pop_rank> | 
				
			||||
	<result_de>$DE</result_de> | 
				
			||||
	<result_dx>$DX</result_dx> | 
				
			||||
	<result_dud>$DUD</result_dud> | 
				
			||||
	<result_dc>($DC)</result_dc> | 
				
			||||
	<result_dm>$DM</result_dm> | 
				
			||||
	<result_ds>$DS</result_ds> | 
				
			||||
	<result_cl>$CL</result_cl> | 
				
			||||
	<result_stored>$(STORED)</result_stored> | 
				
			||||
	<result_sitelimit>$(SITELIMIT)</result_sitelimit> | 
				
			||||
</result> | 
				
			||||
<!--/ftpres--> | 
				
			||||
 | 
				
			||||
<!--resbot--> | 
				
			||||
<result_v>$V</result_v> | 
				
			||||
<!--/resbot--> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
<!--restop--> | 
				
			||||
<search_info>$W</search_info> | 
				
			||||
<search_term>$(WS)</search_term> | 
				
			||||
<query>$Q</query> | 
				
			||||
<num_found>$t</num_found> | 
				
			||||
<search_time>$SearchTime</search_time> | 
				
			||||
<!--/restop--> | 
				
			||||
<!--res--> | 
				
			||||
<result> | 
				
			||||
	<result_dn>$DN</result_dn> | 
				
			||||
	<result_du>$DU</result_du> | 
				
			||||
	<result_dt>$DT</result_dt> | 
				
			||||
	<result_dr>$DR</result_dr> | 
				
			||||
	<result_pop_rank>$(Pop_Rank)</result_pop_rank> | 
				
			||||
	<result_de>$DE</result_de> | 
				
			||||
	<result_dx>$DX</result_dx> | 
				
			||||
	<result_dud>$DUD</result_dud> | 
				
			||||
	<result_dc>($DC)</result_dc> | 
				
			||||
	<result_dm>$DM</result_dm> | 
				
			||||
	<result_ds>$DS</result_ds> | 
				
			||||
	<result_cl>$CL</result_cl> | 
				
			||||
	<result_stored>$(STORED)</result_stored> | 
				
			||||
	<result_sitelimit>$(SITELIMIT)</result_sitelimit> | 
				
			||||
</result> | 
				
			||||
<!--/res--> | 
				
			||||
<!--resbot--> | 
				
			||||
<result_v>$V</result_v> | 
				
			||||
<!--/resbot--> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
<!--restop--> | 
				
			||||
<search_info>$W</search_info> | 
				
			||||
<search_term>$(WS)</search_term> | 
				
			||||
<query>$Q</query> | 
				
			||||
<num_found>$t</num_found> | 
				
			||||
<search_time>$SearchTime</search_time> | 
				
			||||
<!--/restop--> | 
				
			||||
<!--res--> | 
				
			||||
<result> | 
				
			||||
	<result_dn>$DN</result_dn> | 
				
			||||
	<result_du>$DU</result_du> | 
				
			||||
	<result_dt>$DT</result_dt> | 
				
			||||
	<result_dr>$DR</result_dr> | 
				
			||||
	<result_pop_rank>$(Pop_Rank)</result_pop_rank> | 
				
			||||
	<result_de>$DE</result_de> | 
				
			||||
	<result_dx>$DX</result_dx> | 
				
			||||
	<result_dud>$DUD</result_dud> | 
				
			||||
	<result_dc>($DC)</result_dc> | 
				
			||||
	<result_dm>$DM</result_dm> | 
				
			||||
	<result_ds>$DS</result_ds> | 
				
			||||
	<result_cl>$CL</result_cl> | 
				
			||||
	<result_stored>$(STORED)</result_stored> | 
				
			||||
	<result_sitelimit>$(SITELIMIT)</result_sitelimit> | 
				
			||||
</result> | 
				
			||||
<!--/res--> | 
				
			||||
<!--resbot--> | 
				
			||||
<result_v>$V</result_v> | 
				
			||||
<!--/resbot--> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
<!--clone--> | 
				
			||||
<clone> | 
				
			||||
	<clone_du>$DU</clone_du> | 
				
			||||
	<clone_dud>$DUD</clone_dud> | 
				
			||||
	<clone_dc>$DC</clone_dc> | 
				
			||||
	<clone_dm>$DM</clone_dm> | 
				
			||||
	<clone_ds_byte>$DS</clone_ds_byte> | 
				
			||||
</clone> | 
				
			||||
<!--/clone--> | 
				
			||||
 | 
				
			||||
<!--navigator--> | 
				
			||||
<navigator> | 
				
			||||
	<navigator_nl>$NL</navigator_nl> | 
				
			||||
	<navigator_nb>$NB</navigator_nb> | 
				
			||||
	<navigator_nr>$NR</navigator_nr> | 
				
			||||
</navigator> | 
				
			||||
<!--/navigator--> | 
				
			||||
 | 
				
			||||
<!--navleft--> | 
				
			||||
<navleft> | 
				
			||||
	<navleft_nh>$NH</navleft_nh> | 
				
			||||
</navleft> | 
				
			||||
<!--/navleft--> | 
				
			||||
 | 
				
			||||
<!--navleft_nop--> | 
				
			||||
<!--/navleft_nop--> | 
				
			||||
 | 
				
			||||
<!--navbar1--> | 
				
			||||
<navbar1> | 
				
			||||
	<navbar1_nh>$NH</navbar1_nh> | 
				
			||||
	<navbar1_np>$NP</navbar1_np> | 
				
			||||
</navbar1> | 
				
			||||
<!--/navbar1--> | 
				
			||||
 | 
				
			||||
<!--navbar0--> | 
				
			||||
<navbar0> | 
				
			||||
	<navbar0_np>$NP</navbar0_np> | 
				
			||||
</navbar0> | 
				
			||||
<!--/navbar0--> | 
				
			||||
 | 
				
			||||
<!--navright--> | 
				
			||||
<navright> | 
				
			||||
	<navright_nh>$NH</navright_nh> | 
				
			||||
</navright> | 
				
			||||
<!--/navright--> | 
				
			||||
 | 
				
			||||
<!--navright_nop--> | 
				
			||||
<!--/navright_nop--> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
<!--notfound--> | 
				
			||||
<notfound> | 
				
			||||
	<notfound_search_time>$SearchTime</notfound_search_time> | 
				
			||||
</notfound> | 
				
			||||
<!--/notfound--> | 
				
			||||
 | 
				
			||||
<!--error--> | 
				
			||||
<error> | 
				
			||||
	<error_msg>$E</error_msg> | 
				
			||||
</error> | 
				
			||||
<!--/error--> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
<!--noquery--> | 
				
			||||
<noquery> | 
				
			||||
	<noquery_msg>No search query</noquery_msg> | 
				
			||||
</noquery> | 
				
			||||
<!--/noquery--> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
<!--bottom--> | 
				
			||||
</results> | 
				
			||||
<!--/bottom--> | 
				
			||||
 | 
				
			||||
<!--storedoc_top--> | 
				
			||||
<storedoc> | 
				
			||||
	<storedoc_url>$(URL)</storedoc_url> | 
				
			||||
	<storedoc_document_id>$(ID)</storedoc_document_id> | 
				
			||||
	<storedoc_last_modified>$(Last-Modified)</storedoc_last_modified> | 
				
			||||
	<storedoc_language>$(Content-Language)</storedoc_language> | 
				
			||||
	<storedoc_charset>$(Charset)</storedoc_charset> | 
				
			||||
	<storedoc_size_bytes>$(Content_Length)</storedoc_size_bytes> | 
				
			||||
<!--/storedoc_top--> | 
				
			||||
 | 
				
			||||
<!--storedoc--> | 
				
			||||
	<storedoc_content>$(document)</storedoc_content> | 
				
			||||
<!--/storedoc--> | 
				
			||||
 | 
				
			||||
<!--storedoc_bottom--> | 
				
			||||
</storedoc> | 
				
			||||
<!--/storedoc_bottom--> | 
				
			||||
@ -1,658 +0,0 @@ | 
				
			||||
<?php | 
				
			||||
/** | 
				
			||||
 * This is a library of functions to act on the template HTML file. | 
				
			||||
 * The functions declared here mainly read the template and write the | 
				
			||||
 * result output using this template. | 
				
			||||
 * Modified version - the PHP extension must be higher than 3.2.32 and PHP must be higher than 4.2 | 
				
			||||
 * @package chamilo.plugin.search | 
				
			||||
 */ | 
				
			||||
/** | 
				
			||||
 * Initialise arrays | 
				
			||||
 */ | 
				
			||||
$templates=array(); | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Reads the template file given and returns a string.  | 
				
			||||
 * Similar to the file_get_contents() function but using a loop to read by chunks | 
				
			||||
 * of 1024 bytes. | 
				
			||||
 * @param	string	Filename | 
				
			||||
 * @return	string	File contents  | 
				
			||||
 */ | 
				
			||||
function load_file($file){ | 
				
			||||
    if (!($fp=fopen($file, 'r'))){ | 
				
			||||
		echo "Can't open template file $template_file"; | 
				
			||||
		exit_local(1); | 
				
			||||
    }  | 
				
			||||
     | 
				
			||||
    while(!feof($fp)) { | 
				
			||||
		$str.=fgets($fp, 1024); | 
				
			||||
    } | 
				
			||||
     | 
				
			||||
    fclose($fp); | 
				
			||||
 | 
				
			||||
    return $str; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Build the navigation bar | 
				
			||||
 * @param	string	Original query ? - not used anyway | 
				
			||||
 * @return	string	Navigation bar string | 
				
			||||
 */ | 
				
			||||
function make_nav($query_orig=''){ | 
				
			||||
   global $found,$np,$isnext,$ps,$tag,$ul,$ul_arr,$self,$o,$m,$cat,$cat_arr; | 
				
			||||
   global $dt, $dp, $dx, $dm, $dy, $dd, $db, $de, $lang, $wm, $wf, $site, $sp, $sy; | 
				
			||||
   global $q_local,$db_local,$de_local,$lang_arr, $tag, $tag_arr, $type, $type_arr; | 
				
			||||
    | 
				
			||||
   $temp_ul=''; | 
				
			||||
   for($i=0; $i<count($ul_arr); $i++) { | 
				
			||||
	$temp_ul.="&ul=".urlencode($ul_arr[$i]); | 
				
			||||
   }	 | 
				
			||||
   $temp_tag=''; | 
				
			||||
   for($i=0; $i<count($tag_arr); $i++) { | 
				
			||||
	$temp_tag.="&tag=".urlencode($tag_arr[$i]); | 
				
			||||
   }	 | 
				
			||||
   $temp_lang=''; | 
				
			||||
   for($i=0; $i<count($lang_arr); $i++) { | 
				
			||||
	$temp_lang.="&lang=".urlencode($lang_arr[$i]); | 
				
			||||
   }	 | 
				
			||||
   $temp_cat=''; | 
				
			||||
   for($i=0; $i<count($cat_arr); $i++) { | 
				
			||||
	$temp_cat.="&cat=".urlencode($cat_arr[$i]); | 
				
			||||
   }	 | 
				
			||||
   $temp_type=''; | 
				
			||||
   for($i=0; $i<count($type_arr); $i++) { | 
				
			||||
	$temp_type.="&type=".urlencode($type_arr[$i]); | 
				
			||||
   }	 | 
				
			||||
 | 
				
			||||
   if($np>0){ | 
				
			||||
     $prevp=$np-1; | 
				
			||||
     $prev_href="$self?q=$q_local&np=$prevp&m=$m". | 
				
			||||
                ($ps==20?'':"&ps=$ps"). | 
				
			||||
                $temp_tag. | 
				
			||||
                $temp_ul. | 
				
			||||
                $temp_cat. | 
				
			||||
                $temp_lang. | 
				
			||||
                ($site==''?'':"&site=$site"). | 
				
			||||
		($wm==''?'':"&wm=$wm"). | 
				
			||||
		($wf==''?'':"&wf=$wf"). | 
				
			||||
                (!$o?'':"&o=$o"). | 
				
			||||
                ($dt=='back'?'':"&dt=$dt"). | 
				
			||||
                (!$dp?'':"&dp=$dp"). | 
				
			||||
                (!$dx?'':"&dx=$dx"). | 
				
			||||
                ($dd=='01'?'':"&dd=$dd"). | 
				
			||||
                (!$dm?'':"&dm=$dm"). | 
				
			||||
                ($dy=='1970'?'':"&dy=$dy"). | 
				
			||||
                ($db=='01/01/1970'?'':"&db=$db_local"). | 
				
			||||
                ($de=='31/12/2020'?'':"&de=$de_local"). | 
				
			||||
                ($sp==''?'':"&sp=$sp"). | 
				
			||||
                ($sy==''?'':"&sy=$sy"); | 
				
			||||
 | 
				
			||||
     $nav_left=print_template('navleft',0); | 
				
			||||
     $nav_left=ereg_replace('\$NH',"$prev_href",$nav_left); | 
				
			||||
   } elseif ($np==0) { | 
				
			||||
     $nav_left=print_template('navleft_nop',0); | 
				
			||||
   } | 
				
			||||
 | 
				
			||||
   if($isnext==1) { | 
				
			||||
     $nextp=$np+1; | 
				
			||||
     $next_href="$self?q=$q_local&np=$nextp&m=$m". | 
				
			||||
     		($ps==20?'':"&ps=$ps"). | 
				
			||||
                $temp_tag. | 
				
			||||
		$temp_ul. | 
				
			||||
                $temp_cat. | 
				
			||||
                $temp_lang. | 
				
			||||
                ($site==''?'':"&site=$site"). | 
				
			||||
		($wm==''?'':"&wm=$wm"). | 
				
			||||
		($wf==''?'':"&wf=$wf"). | 
				
			||||
                (!$o?'':"&o=$o"). | 
				
			||||
                ($dt=='back'?'':"&dt=$dt"). | 
				
			||||
                (!$dp?'':"&dp=$dp"). | 
				
			||||
                (!$dx?'':"&dx=$dx"). | 
				
			||||
                ($dd=='01'?'':"&dd=$dd"). | 
				
			||||
                (!$dm?'':"&dm=$dm"). | 
				
			||||
                ($dy=='1970'?'':"&dy=$dy"). | 
				
			||||
                ($db=='01/01/1970'?'':"&db=$db_local"). | 
				
			||||
                ($de=='31/12/2020'?'':"&de=$de_local"). | 
				
			||||
                ($sp==''?'':"&sp=$sp"). | 
				
			||||
                ($sy==''?'':"&sy=$sy"); | 
				
			||||
 | 
				
			||||
     $nav_right=print_template('navright',0); | 
				
			||||
     $nav_right=ereg_replace('\$NH',"$next_href",$nav_right); | 
				
			||||
   } else { | 
				
			||||
     $nav_right=print_template('navright_nop',0); | 
				
			||||
   } | 
				
			||||
 | 
				
			||||
   $nav_bar0=print_template('navbar0',0); | 
				
			||||
   $nav_bar1=print_template('navbar1',0); | 
				
			||||
 | 
				
			||||
   $tp=ceil($found/$ps); | 
				
			||||
 | 
				
			||||
   $cp=$np+1; | 
				
			||||
 | 
				
			||||
   if ($cp>5) { | 
				
			||||
      $lp=$cp-5; | 
				
			||||
   } else { | 
				
			||||
      $lp=1; | 
				
			||||
   } | 
				
			||||
 | 
				
			||||
   $rp=$lp+10-1; | 
				
			||||
   if ($rp>$tp) { | 
				
			||||
      $rp=$tp; | 
				
			||||
      $lp=$rp-10+1; | 
				
			||||
      if ($lp<1) $lp=1; | 
				
			||||
   } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
   if ($lp!=$rp) { | 
				
			||||
      for ($i=$lp; $i<=$rp;$i++) { | 
				
			||||
         $realp=$i-1; | 
				
			||||
    | 
				
			||||
         if ($i==$cp) { | 
				
			||||
            $nav_bar=$nav_bar.$nav_bar0; | 
				
			||||
         } else { | 
				
			||||
            $nav_bar=$nav_bar.$nav_bar1; | 
				
			||||
         } | 
				
			||||
          | 
				
			||||
         $href="$self?q=$q_local&np=$realp&m=$m". | 
				
			||||
               	($ps==20?'':"&ps=$ps"). | 
				
			||||
                $temp_tag. | 
				
			||||
		$temp_ul. | 
				
			||||
                $temp_cat. | 
				
			||||
                $temp_lang. | 
				
			||||
                ($site==''?'':"&site=$site"). | 
				
			||||
		($wm==''?'':"&wm=$wm"). | 
				
			||||
		($wf==''?'':"&wf=$wf"). | 
				
			||||
                (!$o?'':"&o=$o"). | 
				
			||||
                ($dt=='back'?'':"&dt=$dt"). | 
				
			||||
                (!$dp?'':"&dp=$dp"). | 
				
			||||
                (!$dx?'':"&dx=$dx"). | 
				
			||||
                ($dd=='01'?'':"&dd=$dd"). | 
				
			||||
                (!$dm?'':"&dm=$dm"). | 
				
			||||
                ($dy=='1970'?'':"&dy=$dy"). | 
				
			||||
                ($db=='01/01/1970'?'':"&db=$db_local"). | 
				
			||||
                ($de=='31/12/2020'?'':"&de=$de_local"). | 
				
			||||
                ($sp==''?'':"&sp=$sp"). | 
				
			||||
                ($sy==''?'':"&sy=$sy"); | 
				
			||||
 | 
				
			||||
         $nav_bar=ereg_replace('\$NP',"$i",$nav_bar); | 
				
			||||
         $nav_bar=ereg_replace('\$NH',"$href",$nav_bar); | 
				
			||||
      } | 
				
			||||
    | 
				
			||||
      $nav=print_template('navigator',0); | 
				
			||||
      $nav=ereg_replace('\$NL',"$nav_left",$nav); | 
				
			||||
      $nav=ereg_replace('\$NR',"$nav_right",$nav); | 
				
			||||
      $nav=ereg_replace('\$NB',"$nav_bar",$nav); | 
				
			||||
 | 
				
			||||
   } elseif ($found) { | 
				
			||||
      $nav=print_template('navigator',0); | 
				
			||||
      $nav=ereg_replace('\$NL',"$nav_left",$nav); | 
				
			||||
      $nav=ereg_replace('\$NR',"$nav_right",$nav); | 
				
			||||
      $nav=ereg_replace('\$NB',"",$nav); | 
				
			||||
   } | 
				
			||||
 | 
				
			||||
   return $nav; | 
				
			||||
} | 
				
			||||
/** | 
				
			||||
 * Prints the template on screen after substituting a lot of variables | 
				
			||||
 * from the global scope | 
				
			||||
 * @param	string	Index of the part of the template we want to use (storedoc_top, storedoc, ...) | 
				
			||||
 * @param	boolean	Whether to echo the results on screen or just return the string | 
				
			||||
 * @return	mixed	Nothing if $echo=1, the resulting string if $echo=false | 
				
			||||
 */ | 
				
			||||
function print_template($t,$echo=1){ | 
				
			||||
    global $templates, $udm_agent; | 
				
			||||
    global $first_doc, $last_doc, $found, $query_orig, $error, $self; | 
				
			||||
    global $nav, $wordinfo, $ws, $doclang, $doccharset, $storedocurl; | 
				
			||||
    global $url, $ue, $o, $cat, $storedstr, $stored_href; | 
				
			||||
    global $clonestr, $searchtime, $persite; | 
				
			||||
    global $title, $rating, $desc, $contype, $lastmod, $docsize, $ndoc; | 
				
			||||
    global $keyw, $text, $category, $pop_rank; | 
				
			||||
    global $crc, $Randoms, $rec_id, $DEBUG, $id; | 
				
			||||
    global $lang_url_translation, $phpver, $sitelimit_href, $sitelimitstr; | 
				
			||||
    global $global_doc_res, $global_res_position; | 
				
			||||
    global $last_modified, $content, $charset, $length, $document, $url; | 
				
			||||
  | 
				
			||||
    $str=$templates["$t"][$o]; | 
				
			||||
    if ($str == '') $str=$templates["$t"][0]; | 
				
			||||
     | 
				
			||||
    //variables as returned by the udm_search() function and defined in search.php | 
				
			||||
    $str=ereg_replace('\$f', "$first_doc", $str); | 
				
			||||
    $str=ereg_replace('\$l', "$last_doc", $str); | 
				
			||||
    $str=ereg_replace('\$t', "$found", $str); | 
				
			||||
    $str=ereg_replace('\$A', $self, $str); | 
				
			||||
 | 
				
			||||
    $str=ereg_replace('\$Q', urlencode(stripslashes($query_orig)), $str); | 
				
			||||
    $str=ereg_replace('\$q', urlencode($query_orig), $str); | 
				
			||||
    $str=eregi_replace('\$UE', $ue, $str); | 
				
			||||
 | 
				
			||||
    $str=ereg_replace('\$E', $error, $str); | 
				
			||||
    $str=ereg_replace('\$W', htmlspecialchars($wordinfo), $str); | 
				
			||||
    $str=ereg_replace('\$\(WS\)', htmlspecialchars($ws), $str); | 
				
			||||
 | 
				
			||||
    $str=ereg_replace('\$V', $nav, $str); | 
				
			||||
 | 
				
			||||
    if ($lang_url_translation == 'yes') { | 
				
			||||
    	$nolangurl = ereg_replace("\.[a-z]{2}\.[a-z]{2,4}$", "", $url); | 
				
			||||
        $str=ereg_replace('\$DU', htmlspecialchars($nolangurl), $str); | 
				
			||||
    } else { | 
				
			||||
    	$str=ereg_replace('\$DU', htmlspecialchars($url), $str); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    $str=ereg_replace('\$\(stored_href\)', htmlspecialchars($stored_href), $str); | 
				
			||||
    $str=ereg_replace('\$\(sitelimit_href\)', htmlspecialchars($sitelimit_href), $str); | 
				
			||||
 | 
				
			||||
    //require_once('filter_user.functions.php'); | 
				
			||||
    //$title = subst_course_code(urldecode(html_entity_decode($title))); | 
				
			||||
    $str=ereg_replace('\$DT', htmlspecialchars($title), $str); | 
				
			||||
    $str=ereg_replace('\$DR', htmlspecialchars("$rating"), $str); | 
				
			||||
    //$text = subst_course_code(html_entity_decode($text)); | 
				
			||||
    //Comment out temporarily because breaking XML file (excerpt of Word document with unknown character) | 
				
			||||
    $str=ereg_replace('\$DX', htmlspecialchars(urlencode($text)), $str); | 
				
			||||
    $str=ereg_replace('\$DE', ($desc != '')?htmlspecialchars(urlencode($desc)):htmlspecialchars(urlencode($text)), $str); | 
				
			||||
    $str=ereg_replace('\$DC', $contype, $str); | 
				
			||||
    $str=ereg_replace('\$DM', $lastmod, $str); | 
				
			||||
    $str=ereg_replace('\$DS', "$docsize", $str); | 
				
			||||
    $str=ereg_replace('\$DN', "$ndoc", $str); | 
				
			||||
    $str=ereg_replace('\$DD', htmlspecialchars($desc), $str); | 
				
			||||
    $str=ereg_replace('\$DK', htmlspecialchars($keyw), $str); | 
				
			||||
    $str=ereg_replace('\$SearchTime', "$searchtime", $str); | 
				
			||||
    $str=ereg_replace('\$\(STORED\)', htmlspecialchars("$storedstr"), $str); | 
				
			||||
    $str=ereg_replace('\$\(SITELIMIT\)', htmlspecialchars("$sitelimitstr"), $str); | 
				
			||||
    $str=ereg_replace('\$\(Pop_Rank\)', "$pop_rank", $str); | 
				
			||||
    $str=ereg_replace('\$CL', "$clonestr", $str); | 
				
			||||
    $str=ereg_replace('\$\(PerSite\)', "$persite", $str); | 
				
			||||
     | 
				
			||||
	//information on each link (header for one item) | 
				
			||||
    if ($t == 'storedoc_top') { | 
				
			||||
        $str=ereg_replace('\$\(ID\)', htmlspecialchars("$id"), $str); | 
				
			||||
        $str=ereg_replace('\$\(Last-Modified\)', htmlspecialchars("$last_modified"), $str); | 
				
			||||
        $str=ereg_replace('\$\(Content-Language\)', htmlspecialchars("$content"), $str); | 
				
			||||
		$str=ereg_replace('\$\(Charset\)', htmlspecialchars("$charset"), $str); | 
				
			||||
		$str=ereg_replace('\$\(Content-Length\)', "$length", $str); | 
				
			||||
		$str=ereg_replace('\$\(URL\)', htmlspecialchars("$url"), $str); | 
				
			||||
    } | 
				
			||||
    //link to the document | 
				
			||||
    if ($t == 'storedoc') { | 
				
			||||
		$str=ereg_replace('\$\(document\)', htmlspecialchars("$document"), $str); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
	//Categories	 | 
				
			||||
	if (ereg('\$CP',$str)) { | 
				
			||||
		if ($temp_cp_arr=udm_cat_path($udm_agent,$cat)) { | 
				
			||||
    		reset($temp_cp_arr); | 
				
			||||
        	$temp_cp=''; | 
				
			||||
        	for ($i=0; $i<count($temp_cp_arr); $i+=2) { | 
				
			||||
        		$cp_path=$temp_cp_arr[$i]; | 
				
			||||
        		$cp_name=$temp_cp_arr[$i+1]; | 
				
			||||
        		$temp_cp .= " > <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> "; | 
				
			||||
        	} | 
				
			||||
        	$str=ereg_replace('\$CP', $temp_cp, $str); | 
				
			||||
	} else $str=ereg_replace('\$CP', '', $str); | 
				
			||||
    }    	 | 
				
			||||
 | 
				
			||||
	//Categories | 
				
			||||
    if (ereg('\$CS',$str)) { | 
				
			||||
    	if ($temp_cp_arr=udm_cat_list($udm_agent,$cat)) { | 
				
			||||
        	reset($temp_cp_arr); | 
				
			||||
        	$temp_cp=''; | 
				
			||||
            for ($i=0; $i<count($temp_cp_arr); $i+=2) { | 
				
			||||
        		$cp_path=$temp_cp_arr[$i]; | 
				
			||||
        		$cp_name=$temp_cp_arr[$i+1]; | 
				
			||||
        		$temp_cp .= "<a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a><br>"; | 
				
			||||
        	} | 
				
			||||
                $str=ereg_replace('\$CS', $temp_cp, $str); | 
				
			||||
	} else $str=ereg_replace('\$CS', '', $str); | 
				
			||||
    }    	 | 
				
			||||
	 | 
				
			||||
	//Categories | 
				
			||||
    if (ereg('\$DY',$str)) { | 
				
			||||
    	if ($temp_cp_arr=udm_cat_path($udm_agent,$category)) { | 
				
			||||
        	reset($temp_cp_arr); | 
				
			||||
        	$temp_cp=''; | 
				
			||||
            for ($i=0; $i<count($temp_cp_arr); $i+=2) { | 
				
			||||
        		$cp_path=$temp_cp_arr[$i]; | 
				
			||||
        		$cp_name=$temp_cp_arr[$i+1]; | 
				
			||||
        		$temp_cp .= " > <a href=\"$PHP_SELF?cat=$cp_path\">$cp_name</a> "; | 
				
			||||
        	} | 
				
			||||
            $str=ereg_replace('\$DY', $temp_cp, $str); | 
				
			||||
		} else $str=ereg_replace('\$DY', '', $str); | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
	//Number of documents | 
				
			||||
    if (eregi('\$ndocs*',$str)) { | 
				
			||||
    	$str=preg_replace('/\$ndocs?/', get_doc_count(), $str); | 
				
			||||
    } | 
				
			||||
	//document link? | 
				
			||||
    if ($global_doc_res) { | 
				
			||||
		$str=preg_replace_callback('/\$\(([\w\.\_\-\:]+)\)/', 'res_field_callback', $str); | 
				
			||||
    } | 
				
			||||
     | 
				
			||||
    //Random? | 
				
			||||
    $sub=$str; | 
				
			||||
    while($sub=strstr($sub,'$r')){ | 
				
			||||
		$sub=substr($sub,2); | 
				
			||||
		$pos=0; | 
				
			||||
		$num=''; | 
				
			||||
		 | 
				
			||||
		while(($sub[$pos]>='0')&&($sub[$pos]<='9')){ | 
				
			||||
			$num.=$sub[$pos++]; | 
				
			||||
		} | 
				
			||||
		 | 
				
			||||
		$str=ereg_replace('\$r'.$num, ''.$Randoms[$num], $str); | 
				
			||||
    } | 
				
			||||
     | 
				
			||||
    if($echo) echo $str; else return $str; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
/** | 
				
			||||
 * Reads the template file. | 
				
			||||
 * @param	none	All the parameters are taken as globals, which is very bad. | 
				
			||||
 * @return	void	No return value everything is left in global scope | 
				
			||||
 */ | 
				
			||||
function read_template(){ | 
				
			||||
    global $Randoms; | 
				
			||||
    global $template_file; //uri of the file to open | 
				
			||||
    global $templates,$dbaddr; | 
				
			||||
    global $ps, $np, $ul, $ul_arr, $o, $tag, $tag_arr, $m, $cat, $cat_arr, $wm, $wf; | 
				
			||||
    global $dt, $dp, $dx, $dm, $dy, $dd, $db, $de; | 
				
			||||
    global $clones,$lang,$lang_arr, $sp, $sy, $s, $resultslimit; | 
				
			||||
    global $affix_file, $spell_file, $spell_host; | 
				
			||||
    global $stopwordtable_arr, $stopwordfile_arr; | 
				
			||||
    global $synonym_arr, $searchd_arr; | 
				
			||||
    global $alias_arr,$type, $type_arr; | 
				
			||||
     | 
				
			||||
    $affix_file=array(); | 
				
			||||
    $spell_file=array(); | 
				
			||||
    $alias_arr=array(); | 
				
			||||
 | 
				
			||||
	$dbaddr=array(); | 
				
			||||
 | 
				
			||||
    $names=array('top', 'bottom', 'restop', 'resbot', 'navigator', | 
				
			||||
				 'res', 'ftpres', 'httpres', 'notfound', 'error', 'variables',  | 
				
			||||
				 'clone', 'navleft_nop', 'navright_nop', 'navleft',  | 
				
			||||
				 'navbar1', 'navbar0', 'navright', 'noquery', 'site_limit',  | 
				
			||||
				 'storedoc_top','storedoc_bottom','storedoc','stored'); | 
				
			||||
 | 
				
			||||
    $where=''; | 
				
			||||
     | 
				
			||||
    //First check that the template file is available | 
				
			||||
    if (!($fp=fopen($template_file, 'r'))){ | 
				
			||||
		echo "Can't open template file $template_file"; | 
				
			||||
		exit_local(1); | 
				
			||||
    } do { | 
				
			||||
    	//The template file is there, read it  | 
				
			||||
		$str=fgets($fp, 1024); | 
				
			||||
 | 
				
			||||
		$param = array(); | 
				
			||||
        if (preg_match('/value="(.*)"[\s\t]+selected="\$ps"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $ps) { | 
				
			||||
          		$str=preg_replace('/selected="\$ps"/i',"selected",$str); | 
				
			||||
      		} else { | 
				
			||||
          		$str=preg_replace('/selected="\$ps"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
  		} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$ul"/i',$str,$param)) { | 
				
			||||
  			$found_param=0; | 
				
			||||
  			for($i=0; $i<count($ul_arr); $i++) { | 
				
			||||
				$temp_ul=$ul_arr[$i]; | 
				
			||||
      			if (($param[1]) == $temp_ul) { | 
				
			||||
          			$str=preg_replace('/selected="\$ul"/i',"selected",$str); | 
				
			||||
          			$found_param=1; | 
				
			||||
          			break; | 
				
			||||
          		} | 
				
			||||
      		}  | 
				
			||||
      		if (!$found_param) $str=preg_replace('/selected="\$ul"/i',"",$str); | 
				
			||||
  		} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$type"/i',$str,$param)) { | 
				
			||||
  			$found_param=0; | 
				
			||||
  			for($i=0; $i<count($type_arr); $i++) { | 
				
			||||
				$temp_type=$type_arr[$i]; | 
				
			||||
      			if (($param[1]) == $temp_type) { | 
				
			||||
          			$str=preg_replace('/selected="\$type"/i',"selected",$str); | 
				
			||||
          			$found_param=1; | 
				
			||||
          			break; | 
				
			||||
          		} | 
				
			||||
      		}  | 
				
			||||
      		if (!$found_param) $str=preg_replace('/selected="\$type"/i',"",$str); | 
				
			||||
        } elseif (preg_match('/value="(.*)"[\s\t]+selected="\$lang"/i',$str,$param)) { | 
				
			||||
	  		$found_param=0; | 
				
			||||
	  		for($i=0; $i<count($lang_arr); $i++) { | 
				
			||||
				$temp_lang=$lang_arr[$i]; | 
				
			||||
      			if (($param[1]) == $temp_lang) { | 
				
			||||
          			$str=preg_replace('/selected="\$lang"/i',"selected",$str); | 
				
			||||
          			$found_param=1; | 
				
			||||
          			break; | 
				
			||||
          		} | 
				
			||||
      		}  | 
				
			||||
      		if (!$found_param) $str=preg_replace('/selected="\$lang"/i',"",$str); | 
				
			||||
  		} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$o"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $o) { | 
				
			||||
          		$str=preg_replace('/selected="\$o"/i',"selected",$str); | 
				
			||||
      		} else { | 
				
			||||
          		$str=preg_replace('/selected="\$o"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
  		} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$m"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $m) { | 
				
			||||
          		$str=preg_replace('/selected="\$m"/i',"selected",$str); | 
				
			||||
      		} else { | 
				
			||||
          		$str=preg_replace('/selected="\$m"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
        } elseif (preg_match('/value="(.*)"[\s\t]+selected="\$wm"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $wm) { | 
				
			||||
          		$str=preg_replace('/selected="\$wm"/i',"selected",$str); | 
				
			||||
      		} else { | 
				
			||||
          		$str=preg_replace('/selected="\$wm"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
        } elseif (preg_match('/value="(.*)"[\s\t]+selected="\$s"/i',$str,$param)) { | 
				
			||||
      		if ($param[1] == $s) { | 
				
			||||
          		$str=preg_replace('/selected="\$s"/i',"selected",$str); | 
				
			||||
      		} else { | 
				
			||||
          		$str=preg_replace('/selected="\$s"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
        } elseif (preg_match('/value="(.*)"[\s\t]+selected="\$sp"/i',$str,$param)) { | 
				
			||||
      		if ($param[1] == $sp) { | 
				
			||||
          		$str=preg_replace('/selected="\$sp"/i',"selected",$str); | 
				
			||||
      		} else { | 
				
			||||
          		$str=preg_replace('/selected="\$sp"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
        } elseif (preg_match('/value="(.*)"[\s\t]+selected="\$sy"/i',$str,$param)) { | 
				
			||||
      		if ($param[1] == $sy) { | 
				
			||||
          		$str=preg_replace('/selected="\$sy"/i',"selected",$str); | 
				
			||||
      		} else { | 
				
			||||
          		$str=preg_replace('/selected="\$sy"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
        } elseif (preg_match('/value="(.*)"[\s\t]+selected="\$wf"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $wf) { | 
				
			||||
          		$str=preg_replace('/selected="\$wf"/i',"selected",$str); | 
				
			||||
      		} else { | 
				
			||||
          		$str=preg_replace('/selected="\$wf"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
  		} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$tag"/i',$str,$param)) { | 
				
			||||
      		$found_param=0; | 
				
			||||
			for($i=0; $i<count($tag_arr); $i++) { | 
				
			||||
				$temp_tag=$tag_arr[$i]; | 
				
			||||
      			if (($param[1]) == $temp_tag) { | 
				
			||||
          			$str=preg_replace('/selected="\$tag"/i',"selected",$str); | 
				
			||||
          			$found_param=1; | 
				
			||||
          			break; | 
				
			||||
          		} | 
				
			||||
      		}  | 
				
			||||
      		if (!$found_param) $str=preg_replace('/selected="\$tag"/i',"",$str); | 
				
			||||
  			} elseif (preg_match('/type=radio[\s\t]+name="dt"[\s\t]+value="(.*)"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $dt) { | 
				
			||||
          		$str=preg_replace("/value=\"$dt\"/i","value=\"$dt\" checked",$str); | 
				
			||||
      		} else {                                 | 
				
			||||
          		$str=preg_replace('/checked/i',"",$str); | 
				
			||||
      		} | 
				
			||||
 	 	} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$dp"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $dp) { | 
				
			||||
          		$str=preg_replace('/selected="\$dp"/i',"selected",$str); | 
				
			||||
      		} else {                                 | 
				
			||||
          		$str=preg_replace('/selected="\$dp"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
  		} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$dx"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $dx) { | 
				
			||||
          		$str=preg_replace('/selected="\$dx"/i',"selected",$str); | 
				
			||||
      		} else {                                 | 
				
			||||
          		$str=preg_replace('/selected="\$dx"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
  		} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$dm"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $dm) { | 
				
			||||
          		$str=preg_replace('/selected="\$dm"/i',"selected",$str); | 
				
			||||
      		} else {                                 | 
				
			||||
          		$str=preg_replace('/selected="\$dm"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
  		} elseif (preg_match('/value="(.*)"[\s\t]+selected="\$dy"/i',$str,$param)) { | 
				
			||||
      		if (($param[1]) == $dy) { | 
				
			||||
          		$str=preg_replace('/selected="\$dy"/i',"selected",$str); | 
				
			||||
      		} else {                                 | 
				
			||||
          		$str=preg_replace('/selected="\$dy"/i',"",$str); | 
				
			||||
      		} | 
				
			||||
  		} | 
				
			||||
 | 
				
			||||
		if (preg_match('/\$g\((\d*)\)/i',$str,$param)) {	    	     | 
				
			||||
		    $str=str_replace("\$g($param[1])",substr($tag,0,strlen($tag)-$param[1]),$str); | 
				
			||||
		} | 
				
			||||
	 | 
				
			||||
		//Replace date attributes | 
				
			||||
        $str=str_replace("\$dd",$dd,$str); | 
				
			||||
        $str=str_replace("\$dy",$dy,$str); | 
				
			||||
        $str=str_replace("\$dm",$dm,$str); | 
				
			||||
        $str=str_replace("\$db",$db,$str); | 
				
			||||
        $str=str_replace("\$de",$de,$str); | 
				
			||||
 | 
				
			||||
		//Replace page numbering | 
				
			||||
        $str=str_replace("\$ps",$ps,$str); | 
				
			||||
		$str=str_replace("\$pn",$ps*$np,$str); | 
				
			||||
        $str=str_replace("\$cat",$cat,$str); | 
				
			||||
 | 
				
			||||
		 | 
				
			||||
        if (preg_match('/\$IF\s?\((.+)\)/i',$str,$param)) { | 
				
			||||
		    $param[1]=trim($param[1]); | 
				
			||||
		    $str=preg_replace('/\$IF\s?\((.+)\)/i',load_file($param[1]),$str);	     | 
				
			||||
        } | 
				
			||||
 | 
				
			||||
		$comment_flag=0; | 
				
			||||
		 | 
				
			||||
		//If found comment tag, add empty field to the $templates array for the corresponding tag  | 
				
			||||
		if (substr($str, 0, 4) == "<!--") { | 
				
			||||
			reset($names); | 
				
			||||
			while ($name=current($names)){ | 
				
			||||
			    if (strstr($str, "<!--$name")){ | 
				
			||||
					$where=$name; | 
				
			||||
		 | 
				
			||||
					$templates["$where"][] = ''; | 
				
			||||
					 | 
				
			||||
					$comment_flag=1; | 
				
			||||
					break; | 
				
			||||
			    } elseif (strstr($str, "/$name-->")) { | 
				
			||||
					$where=''; | 
				
			||||
					$comment_flag=1; | 
				
			||||
					break; | 
				
			||||
			    } | 
				
			||||
			    next($names); | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
	 | 
				
			||||
		//if found a comment on this line, skip to the next line (do{...}) | 
				
			||||
		if ($comment_flag) continue; | 
				
			||||
 | 
				
			||||
		//if the previous line was a comment and contained 'variables' | 
				
			||||
		//'variables' is the section of the template where the configuration is | 
				
			||||
		//Once this section is over, the HTML template really begins | 
				
			||||
		if ($where=='variables') { | 
				
			||||
			//if the line starts with a #, it's a comment so skip to next line | 
				
			||||
		    if (ereg("^#",$str)) continue; | 
				
			||||
 | 
				
			||||
			//look for some characters not space or tab starting a line,  | 
				
			||||
			//followed by spaces or tabs, followed by any chars (basically any var..value couple) | 
				
			||||
		    if (preg_match("/^([^\s\t]+)[\s\t]+(.+)/",$str,$param)) { | 
				
			||||
	            $var=$param[1]; | 
				
			||||
			    $value=$param[2]; | 
				
			||||
			    $var=strtolower($var); | 
				
			||||
	 | 
				
			||||
			    $var=trim($var); | 
				
			||||
			    $value=trim($value);                  | 
				
			||||
 | 
				
			||||
			    //assign each value to the corresponding array, for reuse later | 
				
			||||
			    if ($var=='affix') { | 
				
			||||
			    	if ($sp=='') $sp=1; | 
				
			||||
			    	$GLOBALS["ispellmode"]="text"; | 
				
			||||
		       		if (preg_match("/([^\s\t]+)[\s\t]+([^\s\t]+)[\s\t]+(.+)/",$value,$param)) { | 
				
			||||
		          		$t_lang=trim($param[1]); | 
				
			||||
                        $t_charset=trim($param[2]); | 
				
			||||
		          		$file=trim($param[3]); | 
				
			||||
 | 
				
			||||
		          		$affix_file[$t_lang]="$t_charset;$file"; | 
				
			||||
		          	} else { | 
				
			||||
		          		print "Unsupported Affix command: Affix $value\n<br>"; | 
				
			||||
		          		exit; | 
				
			||||
		        	} | 
				
			||||
			    } elseif ($var=='spell') { | 
				
			||||
                       if ($sp=='') $sp=1; | 
				
			||||
                       $GLOBALS["ispellmode"]="text"; | 
				
			||||
       	           		if (preg_match("/([^\s\t]+)[\s\t]+([^\s\t]+)[\s\t]+(.+)/",$value,$param)) { | 
				
			||||
			          		$t_lang=trim($param[1]); | 
				
			||||
                            $t_charset=trim($param[2]); | 
				
			||||
			          		$file=trim($param[3]); | 
				
			||||
	 | 
				
			||||
			          		$spell_file[$t_lang][]="$t_charset;$file"; | 
				
			||||
			       		} else { | 
				
			||||
			          		print "Unsupported Spell command: Spell $value\n<br>"; | 
				
			||||
			          		exit; | 
				
			||||
			       		} | 
				
			||||
				} elseif ($var=='ispellmode') { | 
				
			||||
                       if (preg_match("/^server[\s\t]+(.+)/i",$value,$param)) { | 
				
			||||
				          $spell_host=trim($param[1]); | 
				
			||||
                          $GLOBALS["ispellmode"]="server"; | 
				
			||||
		    		   } else { | 
				
			||||
		   	 		   	  $GLOBALS["$var"]="$value"; | 
				
			||||
		   			    } | 
				
			||||
		   		} elseif ($var=='alias') { | 
				
			||||
                       if (preg_match("/^([^\s]+)\s+(.+)$/i",$value,$param)) { | 
				
			||||
                       	  $alias_arr[trim($param[1])]=trim($param[2]); | 
				
			||||
		       			} else { | 
				
			||||
		       			  $GLOBALS["$var"]="$value"; | 
				
			||||
		       			} | 
				
			||||
	            } elseif ($var=='stopwordtable') { | 
				
			||||
	               $stopwordtable_arr[]=$value; | 
				
			||||
	            } elseif ($var=='stopwordfile') { | 
				
			||||
	               $stopwordfile_arr[]=$value; | 
				
			||||
	            } elseif ($var=='synonym') { | 
				
			||||
	               if ($sy=='') $sy=1; | 
				
			||||
	               $synonym_arr[]=$value; | 
				
			||||
	            } elseif ($var=='searchdaddr') { | 
				
			||||
	                   $searchd_arr[]=$value; | 
				
			||||
			    } elseif ($var=='r') { | 
				
			||||
			       $rand=0+substr($var,1); | 
				
			||||
			       $frand=rand(); | 
				
			||||
			       $frand=$frand/getrandmax()*$value; | 
				
			||||
			       $Randoms[$rand]=floor($frand); | 
				
			||||
			    } elseif ($var=='dbaddr') { | 
				
			||||
		    		$dbaddr[]=$value; | 
				
			||||
			    } else { | 
				
			||||
			       $GLOBALS["$var"]="$value"; | 
				
			||||
			    } | 
				
			||||
	    } | 
				
			||||
	} | 
				
			||||
	else | 
				
			||||
	if ($where!=''){ | 
				
			||||
	    $templates["$where"][count($templates["$where"])-1] .= $str; | 
				
			||||
	} | 
				
			||||
	 | 
				
			||||
    } while (!feof($fp));//do this big loop until we reach the end of the file | 
				
			||||
 | 
				
			||||
    fclose($fp); | 
				
			||||
} | 
				
			||||
/** | 
				
			||||
 * Calls back the udm_get_res_field_ex() function whith the second element of | 
				
			||||
 * the given array...!? | 
				
			||||
 * @param	array	Array which second element is sent to udm_get_res_field_ex() | 
				
			||||
 * @return	string	A string | 
				
			||||
 */ | 
				
			||||
function res_field_callback($expr) { | 
				
			||||
    global $global_doc_res, $global_res_position; | 
				
			||||
 | 
				
			||||
    return 	ParseDocText(htmlspecialchars(udm_get_res_field_ex($global_doc_res,$global_res_position,$expr[1]))); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
?> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue