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