oc-server3/htdocs/search1.php
2013-07-26 23:12:04 +02:00

2151 lines
78 KiB
PHP

<?php
/***************************************************************************
For license information see doc/license.txt
Unicode Reminder メモ
Search options will be loaded from
- a saved or caches query in queries table, if either 'queryid' parameter
or 'lastqueryid' cookie is present and the query exists; otherwise from
- supplied HTTP parameters or
- hard-coded default values
'showresult' parameter triggers building the SQL query from search options
and calling the module specified by the 'output' parameter, which will
execute the SQL and process the results.
If 'showresult' != 1, the query options form is presented to the user.
****************************************************************************/
require_once('./lib/common.inc.php');
require_once('./lib/search1/search.inc.php');
//=========================================================
// 1. Database initialization
//=========================================================
// SQL-Debug?
$sqldebug = false;
global $sql_debug;
$sql_debug = $sqldebug;
// output for map-server must be sent to the master!
// (obsolete code for old map.php)
if (isset($_REQUEST['output']) && ($_REQUEST['output'] == 'map'))
db_connect_primary_slave();
if ($sql_debug == true)
{
require_once('./lib/sqldebugger.inc.php');
sqldbg_begin();
}
if ($error == false) // what is $error ?
{
//=========================================================
// 2. initialize searching and template variables
//=========================================================
$tplname = 'search1/search';
require($stylepath . '/search1/search.inc.php');
// km => target-unit
$multiplier['km'] = 1;
$multiplier['sm'] = 0.62137;
$multiplier['nm'] = 0.53996;
// Determine if search.php was called by a search function ('Caches' menu,
// stored query etc.) or for other purpose (e.g. user profile cache lists):
if (isset($_REQUEST['calledbysearch']) && !$_REQUEST['calledbysearch'])
tpl_set_var('search_headline_caches', 'display:none');
else
tpl_set_var('search_headline_caches','');
// default template variables
tpl_set_var('search_in_gm', $search_in_gm);
tpl_set_var('search_in_gm_zip', $search_in_gm_zip);
if (isset($_REQUEST['queryid']) || isset($_REQUEST['showresult']))
{ // Ocprop: showresult, queryid
$bCookieQueryid = false;
$queryid = isset($_REQUEST['queryid']) ? $_REQUEST['queryid'] : 0;
if ($queryid)
{
tpl_set_var('search_in_gm', '');
tpl_set_var('search_in_gm_zip', '');
}
}
else
{
$bCookieQueryid = true;
$queryid = get_cookie_setting('lastqueryid');
if ($queryid == false) $queryid = 0;
if ($queryid != 0)
{
// check if query exists
$rsCount = sql("SELECT COUNT(*) `count` FROM `queries` WHERE id='&1'", $queryid);
$rCount = sql_fetch_array($rsCount);
mysql_free_result($rsCount);
if ($rCount['count'] == 0)
$queryid = 0;
}
newquery:
if ($queryid == 0)
{
// initialize search form with defaults, as we have no parameters
// or saved query to start from
$_REQUEST['cache_attribs'] = '';
$rs = sql('SELECT `id` FROM `cache_attrib` WHERE `default`=1 AND NOT IFNULL(`hidden`, 0)=1');
while ($r = sql_fetch_assoc($rs))
{
if ($_REQUEST['cache_attribs'] != '') $_REQUEST['cache_attribs'] .= ';';
$_REQUEST['cache_attribs'] .= $r['id'];
}
mysql_free_result($rs);
$_REQUEST['cache_attribs_not'] = '';
$rs = sql('SELECT `id` FROM `cache_attrib` WHERE `default`=2 AND NOT IFNULL(`hidden`, 0)=1');
while ($r = sql_fetch_assoc($rs))
{
if ($_REQUEST['cache_attribs_not'] != '') $_REQUEST['cache_attribs_not'] .= ';';
$_REQUEST['cache_attribs_not'] .= $r['id'];
}
mysql_free_result($rs);
}
}
$queryid = $queryid + 0;
//=========================================================
// 3. Build search options ($options) array
//=========================================================
if ($queryid != 0)
{
// load search options from saved/cached query
$query_rs = sql("
SELECT `user_id`, `options`
FROM `queries`
WHERE id='&1' AND (`user_id`=0 OR `user_id`='&2')",
$queryid, $usr['userid']+0);
if (mysql_num_rows($query_rs) == 0)
{
// can happen if logged out after query was created (fix for RT #3915)
$queryid = 0;
goto newquery; // goto needs PHP 5.3
/*
$tplname = 'error';
tpl_set_var('tplname', 'search1.php');
tpl_set_var('error_msg', $error_query_not_found);
tpl_BuildTemplate();
exit;
*/
}
else
{
$record = sql_fetch_array($query_rs);
$options = unserialize($record['options']);
if ($record['user_id'] != 0)
$options['userid'] = $record['user_id'];
mysql_free_result($query_rs);
$options['queryid'] = $queryid;
sql("UPDATE `queries` SET `last_queried`=NOW() WHERE `id`='&1'", $queryid);
// overwrite variable options
if (isset($_REQUEST['output']))
$options['output'] = $_REQUEST['output'];
if (isset($_REQUEST['showresult']))
{
$options['showresult'] = $_REQUEST['showresult'];
}
else
{
if ($bCookieQueryid == true)
{
$options['showresult'] = 0;
}
}
// get findername from finderid
$options['finderid'] = isset($options['finderid']) ? $options['finderid'] + 0 : 0; // Ocprop
if(isset($options['finder']) && $options['finderid'] > 0)
{
$rs_name = sql("SELECT `username` FROM `user` WHERE `user_id`='&1'", $options['finderid']);
if(mysql_num_rows($rs_name) == 1)
{
$record_name = sql_fetch_array($rs_name);
$options['finder'] = $record_name['username'];
}
unset($record_name);
mysql_free_result($rs_name);
}
// get ownername from ownerid
$options['ownerid'] = isset($options['ownerid']) ? $options['ownerid'] + 0 : 0; // Ocprop
if(isset($options['owner']) && $options['ownerid'] > 0)
{
$rs_name = sql("SELECT `username` FROM `user` WHERE `user_id`='&1'", $options['ownerid']);
if(mysql_num_rows($rs_name) == 1)
{
$record_name = sql_fetch_array($rs_name);
$options['owner'] = $record_name['username'];
}
unset($record_name);
mysql_free_result($rs_name);
}
}
}
else // $queryid == 0
{
// build search options from GET/POST parameters or default values
// hack
if(isset($_REQUEST['searchto']) && ($_REQUEST['searchto'] != ''))
{
unset($_REQUEST['searchbyname']);
unset($_REQUEST['searchbydistance']);
unset($_REQUEST['searchbyowner']);
unset($_REQUEST['searchbyfinder']);
unset($_REQUEST['searchbyplz']);
unset($_REQUEST['searchbyort']);
unset($_REQUEST['searchbyfulltext']);
unset($_REQUEST['searchbynofilter']);
$_REQUEST[$_REQUEST['searchto']] = "hoho";
}
// get the search options parameters and store them in the queries table (to view "the next page")
$options['f_userowner'] = isset($_REQUEST['f_userowner']) ? $_REQUEST['f_userowner'] : 0; // Ocprop
$options['f_userfound'] = isset($_REQUEST['f_userfound']) ? $_REQUEST['f_userfound'] : 0; // Ocprop
$options['f_disabled'] = isset($_REQUEST['f_disabled']) ? $_REQUEST['f_disabled'] : 0;
$options['f_inactive'] = isset($_REQUEST['f_inactive']) ? $_REQUEST['f_inactive'] : 1; // Ocprop
// f_inactive formerly was used for both, archived and disabled caches.
// After adding the separate f_disabled option, it is used only for archived
// caches, but keeps its name for compatibility with existing stored or
// external searches.
$options['f_ignored'] = isset($_REQUEST['f_ignored']) ? $_REQUEST['f_ignored'] : 1;
$options['f_otherPlatforms'] = isset($_REQUEST['f_otherPlatforms']) ? $_REQUEST['f_otherPlatforms'] : 0;
$options['expert'] = isset($_REQUEST['expert']) ? $_REQUEST['expert'] : 0; // Ocprop: 0
$options['showresult'] = isset($_REQUEST['showresult']) ? $_REQUEST['showresult'] : 0;
$options['output'] = isset($_REQUEST['output']) ? $_REQUEST['output'] : 'HTML'; // Ocprop: HTML
$options['bbox'] = isset($_REQUEST['bbox']) ? $_REQUEST['bbox'] : false;
if (isset($_REQUEST['cache_attribs']))
{
if ($_REQUEST['cache_attribs'] != '')
{
$aAttribs = mb_split(';', $_REQUEST['cache_attribs']);
for ($i = 0; $i < count($aAttribs); $i++)
$options['cache_attribs'][$aAttribs[$i]+0] = $aAttribs[$i]+0;
unset($aAttribs);
}
else
$options['cache_attribs'] = array();
}
else
$options['cache_attribs'] = array();
if (isset($_REQUEST['cache_attribs_not']))
{
if ($_REQUEST['cache_attribs_not'] != '')
{
$aAttribs = mb_split(';', $_REQUEST['cache_attribs_not']);
for ($i = 0; $i < count($aAttribs); $i++)
$options['cache_attribs_not'][$aAttribs[$i]+0] = $aAttribs[$i]+0;
unset($aAttribs);
}
else
$options['cache_attribs_not'] = array();
}
else
$options['cache_attribs_not'] = array();
if (!isset($_REQUEST['unit']))
{
$options['unit'] = 'km';
}
elseif (mb_strtolower($_REQUEST['unit']) == 'sm')
{
$options['unit'] = 'sm';
}
elseif (mb_strtolower($_REQUEST['unit']) == 'nm')
{
$options['unit'] = 'nm';
}
else
{
$options['unit'] = 'km';
}
if (isset($_REQUEST['searchbyname']))
{
$options['searchtype'] = 'byname';
$options['cachename'] = isset($_REQUEST['cachename']) ? stripslashes($_REQUEST['cachename']) : '';
if (!isset($_REQUEST['utf8']))
$options['cachename'] = iconv("ISO-8859-1", "UTF-8", $options['cachename']);
}
elseif (isset($_REQUEST['searchbyowner'])) // Ocprop
{
$options['searchtype'] = 'byowner';
$options['ownerid'] = isset($_REQUEST['ownerid']) ? $_REQUEST['ownerid'] : 0;
$options['owner'] = isset($_REQUEST['owner']) ? stripslashes($_REQUEST['owner']) : '';
}
elseif (isset($_REQUEST['searchbyfinder'])) // Ocprop
{
$options['searchtype'] = 'byfinder';
$options['finderid'] = isset($_REQUEST['finderid']) ? $_REQUEST['finderid'] : 0;
$options['finder'] = isset($_REQUEST['finder']) ? stripslashes($_REQUEST['finder']) : '';
$options['logtype'] = isset($_REQUEST['logtype']) ? $_REQUEST['logtype'] : '1,7'; // Ocprop
}
elseif (isset($_REQUEST['searchbyort']))
{
$options['searchtype'] = 'byort';
$options['ort'] = isset($_REQUEST['ort']) ? stripslashes($_REQUEST['ort']) : '';
$options['locid'] = isset($_REQUEST['locid']) ? $_REQUEST['locid'] : 0;
$options['locid'] = $options['locid'] + 0;
}
elseif (isset($_REQUEST['searchbyplz']))
{
$options['searchtype'] = 'byplz';
$options['plz'] = isset($_REQUEST['plz']) ? stripslashes($_REQUEST['plz']) : '';
$options['locid'] = isset($_REQUEST['locid']) ? $_REQUEST['locid'] : 0;
$options['locid'] = $options['locid'] + 0;
}
elseif (isset($_REQUEST['searchbydistance']))
{
$options['searchtype'] = 'bydistance';
// Ocprop: all of the following options
if (isset($_REQUEST['lat']) && isset($_REQUEST['lon']))
{
$options['lat'] = $_REQUEST['lat']+0;
$options['lon'] = $_REQUEST['lon']+0;
}
else
{
$options['latNS'] = isset($_REQUEST['latNS']) ? $_REQUEST['latNS'] : 'N';
$options['lonEW'] = isset($_REQUEST['lonEW']) ? $_REQUEST['lonEW'] : 'E';
$options['lat_h'] = isset($_REQUEST['lat_h']) ? $_REQUEST['lat_h'] : 0;
$options['lon_h'] = isset($_REQUEST['lon_h']) ? $_REQUEST['lon_h'] : 0;
$options['lat_min'] = isset($_REQUEST['lat_min']) ? $_REQUEST['lat_min'] : 0;
$options['lon_min'] = isset($_REQUEST['lon_min']) ? $_REQUEST['lon_min'] : 0;
}
$options['distance'] = isset($_REQUEST['distance']) ? $_REQUEST['distance'] : 0;
}
elseif (isset($_REQUEST['searchbyfulltext']))
{
$options['searchtype'] = 'byfulltext';
$options['ft_name'] = isset($_REQUEST['ft_name']) ? $_REQUEST['ft_name']+0 : 0;
$options['ft_desc'] = isset($_REQUEST['ft_desc']) ? $_REQUEST['ft_desc']+0 : 0;
$options['ft_logs'] = isset($_REQUEST['ft_logs']) ? $_REQUEST['ft_logs']+0 : 0;
$options['ft_pictures'] = isset($_REQUEST['ft_pictures']) ? $_REQUEST['ft_pictures']+0 : 0;
$options['fulltext'] = isset($_REQUEST['fulltext']) ? $_REQUEST['fulltext'] : '';
}
elseif (isset($_REQUEST['searchbycacheid']))
{
$options['searchtype'] = 'bycacheid';
$options['cacheid'] = isset($_REQUEST['cacheid']) ? $_REQUEST['cacheid'] : 0;
if (!is_numeric($options['cacheid'])) $options['cacheid'] = 0;
}
elseif (isset($_REQUEST['searchbywp']))
{
$options['searchtype'] = 'bywp';
$options['wp'] = isset($_REQUEST['wp']) ? $_REQUEST['wp'] : '';
}
elseif (isset($_REQUEST['searchbynofilter']))
{
$options['searchtype'] = 'bynofilter';
}
else
{
if (isset($_REQUEST['showresult']))
tpl_errorMsg('search', 'Unknown search option');
else
{
// Set default search type; this prevents errors in outputSearchForm()
// when initializing searchtype-dependent options:
$options['searchtype'] = 'byname';
$options['cachename'] = '';
}
}
$options['sort'] = isset($_REQUEST['sort']) ? $_REQUEST['sort'] : 'bydistance';
if (isset($_REQUEST['orderRatingFirst']) && $_REQUEST['orderRatingFirst']==1)
$options['orderRatingFirst'] = true;
$options['country'] = isset($_REQUEST['country']) ? $_REQUEST['country'] : '';
$options['cachetype'] = isset($_REQUEST['cachetype']) ? $_REQUEST['cachetype'] : '';
$options['cachesize'] = isset($_REQUEST['cachesize']) ? $_REQUEST['cachesize'] : '';
$options['difficultymin'] = isset($_REQUEST['difficultymin']) ? $_REQUEST['difficultymin']+0 : 0;
$options['difficultymax'] = isset($_REQUEST['difficultymax']) ? $_REQUEST['difficultymax']+0 : 0;
$options['terrainmin'] = isset($_REQUEST['terrainmin']) ? $_REQUEST['terrainmin']+0 : 0;
$options['terrainmax'] = isset($_REQUEST['terrainmax']) ? $_REQUEST['terrainmax']+0 : 0;
$options['recommendationmin'] = isset($_REQUEST['recommendationmin']) ? $_REQUEST['recommendationmin']+0 : 0;
$options['queryid'] = 0;
} // $queryid == 0
//=========================================================
// 4. query caching
//=========================================================
$bRememberQuery = isset($_REQUEST['skipqueryid']) ? !$_REQUEST['skipqueryid'] : true;
// This is used by the map, which implements its own query-caching.
if ($bRememberQuery)
{
if ($queryid == 0 && $options['showresult'] != 0) // 'showresult' = "execute query"
{
sql("INSERT INTO `queries` (`user_id`, `options`, `last_queried`) VALUES (0, '&1', NOW())", serialize($options));
$options['queryid'] = mysql_insert_id();
}
set_cookie_setting('lastqueryid', $options['queryid']);
}
// remove old queries (after 1 hour without use);
// execute only every 50 search calls
if (rand(1, 50) == 1)
{
sql("DELETE FROM `queries` WHERE `last_queried` < NOW() - INTERVAL 1 HOUR AND `user_id`=0");
}
//=========================================================
// 5. set defaults for new search options
// which may not be present in a stored/cached query
//=========================================================
if (!isset($options['orderRatingFirst'])) $options['orderRatingFirst'] = false;
if (!isset($options['f_otherPlatforms'])) $options['f_otherPlatforms'] = 0;
if (!isset($options['difficultymin'])) $options['difficultymin'] = 0;
if (!isset($options['difficultymax'])) $options['difficultymax'] = 0;
if (!isset($options['terrainmin'])) $options['terrainmin'] = 0;
if (!isset($options['terrainmax'])) $options['terrainmax'] = 0;
if (!isset($options['recommendationmin'])) $options['recommendationmin'] = 0;
if (!isset($options['cachetype'])) $options['cachetype'] = '';
if (!isset($options['cachesize'])) $options['cachesize'] = '';
if (!isset($options['bbox'])) $options['bbox'] = false;
if (!isset($options['f_disabled'])) $options['f_disabled'] = 0;
if (!isset($options['showresult'])) $options['showresult'] = 0;
if ($options['showresult'] == 1)
{
//===============================================================
// X6. build SQL statement from search options
//===============================================================
$cachesFilter = '';
if(!isset($options['output'])) $options['output']='';
if ((mb_strpos($options['output'], '.') !== false) ||
(mb_strpos($options['output'], '/') !== false) ||
(mb_strpos($options['output'], '\\') !== false)
)
{
$options['output'] = 'HTML';
}
// make a list of cache-ids that are in the result
if(!isset($options['expert'])) $options['expert']='';
if ($options['expert'] == 0) // Ocprop
{
$sql_select = array();
$sql_from = '';
$sql_innerjoin = array();
$sql_leftjoin = array();
$sql_where = array();
$sql_having = array();
$sql_group = array();
//check the entered data and build SQL
if(!isset($options['searchtype'])) $options['searchtype']='';
if ($options['searchtype'] == 'byname')
{
$sql_select[] = '`caches`.`cache_id` `cache_id`';
$sql_from = '`caches`';
$sql_where[] = '`caches`.`name` LIKE \'%' . sql_escape($options['cachename']) . '%\'';
}
elseif ($options['searchtype'] == 'byowner')
{
if ($options['ownerid'] != 0)
{
$sql_select[] = '`caches`.`cache_id` `cache_id`';
$sql_from = '`caches`';
$sql_where[] = '`user_id`=\'' . sql_escape($options['ownerid']) . '\'';
}
else
{
$sql_select[] = '`caches`.`cache_id` `cache_id`';
$sql_from = '`caches`';
$sql_innerjoin[] = '`user` ON `caches`.`user_id`=`user`.`user_id`';
$sql_where[] = '`user`.`username`=\'' . sql_escape($options['owner']) . '\'';
}
}
elseif (($options['searchtype'] == 'byplz') || ($options['searchtype'] == 'byort'))
{
$locid = $options['locid'];
if ($options['searchtype'] == 'byplz')
{
if ($locid == 0)
{
$plz = $options['plz'];
$sql = "SELECT `loc_id` FROM `geodb_textdata` WHERE `text_type`=500300000 AND `text_val`='" . sql_escape($plz) . "'";
$rs = sql($sql);
if (mysql_num_rows($rs) == 0)
{
$options['error_plz'] = true;
outputSearchForm($options);
exit;
}
elseif (mysql_num_rows($rs) == 1)
{
$r = sql_fetch_array($rs);
mysql_free_result($rs);
$locid = $r['loc_id'];
}
else
{
// ok, viele locations ... alle auflisten ...
outputLocidSelectionForm($sql, $options);
exit;
}
}
// ok, wir haben einen ort ... koordinaten ermitteln
$locid = $locid + 0;
$rs = sql('SELECT `lon`, `lat` FROM `geodb_coordinates` WHERE `loc_id`=' . $locid . ' AND coord_type=200100000');
if ($r = sql_fetch_array($rs))
{
// ok ... wir haben koordinaten ...
$lat = $r['lat'] + 0;
$lon = $r['lon'] + 0;
$distance_unit = 'km';
$distance = 75;
// ab hier selber code wie bei bydistance ... TODO: in funktion auslagern
//all target caches are between lat - max_lat_diff and lat + max_lat_diff
$max_lat_diff = $distance / (111.12 * $multiplier[$distance_unit]);
//all target caches are between lon - max_lon_diff and lon + max_lon_diff
//TODO: check!!!
$max_lon_diff = $distance * 180 / (abs(sin((90 - $lat) * 3.14159 / 180 )) * 6378 * $multiplier[$distance_unit] * 3.14159);
$lon_rad = $lon * 3.14159 / 180;
$lat_rad = $lat * 3.14159 / 180;
$cachesFilter =
'CREATE TEMPORARY TABLE result_caches ENGINE=MEMORY
SELECT
(' . getSqlDistanceFormula($lon, $lat, $distance, $multiplier[$distance_unit]) . ') `distance`,
`caches`.`cache_id` `cache_id`
FROM `caches` FORCE INDEX (`latitude`)
WHERE `longitude` > ' . ($lon - $max_lon_diff) . '
AND `longitude` < ' . ($lon + $max_lon_diff) . '
AND `latitude` > ' . ($lat - $max_lat_diff) . '
AND `latitude` < ' . ($lat + $max_lat_diff) . '
HAVING `distance` < ' . ($distance+0);
sql_slave($cachesFilter);
sql_slave('ALTER TABLE result_caches ADD PRIMARY KEY ( `cache_id` )');
$sql_select[] = '`result_caches`.`cache_id`';
$sql_from = '`result_caches`';
$sql_innerjoin[] = '`caches` ON `caches`.`cache_id`=`result_caches`.`cache_id`';
}
else
{
$options['error_locidnocoords'] = true;
outputSearchForm($options);
exit;
}
}
else if ($options['searchtype'] == 'byort')
{
if ($locid == 0)
{
require_once($opt['rootpath'] . 'lib/search1/search.inc.php');
$ort = $options['ort'];
$simpletexts = search_text2sort($ort);
$simpletextsarray = explode_multi($simpletexts, ' -/,');
$sqlhashes = '';
$wordscount = 0;
foreach ($simpletextsarray AS $text)
{
if ($text != '')
{
$searchstring = search_text2simple($text);
if ($sqlhashes != '') $sqlhashes .= ' OR ';
$sqlhashes .= '`gns_search`.`simplehash`=' . sprintf("%u", crc32($searchstring));
$wordscount++;
}
}
if ($sqlhashes == '')
{
$options['error_noort'] = true;
outputSearchForm($options);
}
// temporäre tabelle erstellen und dann einträge entfernen, die nicht mindestens so oft vorkommen wie worte gegeben wurden
sql_slave('CREATE TEMPORARY TABLE tmpuniids (`uni_id` int(11) NOT NULL, `cnt` int(11) NOT NULL, `olduni` int(11) NOT NULL, `simplehash` int(11) NOT NULL) ENGINE=MEMORY SELECT `gns_search`.`uni_id` `uni_id`, 0 `cnt`, 0 `olduni`, `simplehash` FROM `gns_search` WHERE ' . $sqlhashes);
sql_slave('ALTER TABLE `tmpuniids` ADD INDEX (`uni_id`)');
// BUGFIX: dieser Code sollte nur ausgeführt werden, wenn mehr als ein Suchbegriff eingegeben wurde
// damit alle Einträge gefiltert, die nicht alle Suchbegriffe enthalten
// nun wird dieser Quellcode auch ausgeführt, um mehrfache uni_id's zu filtern
// Notwendig, wenn nach Baden gesucht wird => Baden-Baden war doppelt in der Liste
// if ($wordscount > 1)
// {
sql_slave('CREATE TEMPORARY TABLE `tmpuniids2` (`uni_id` int(11) NOT NULL, `cnt` int(11) NOT NULL, `olduni` int(11) NOT NULL) ENGINE=MEMORY SELECT `uni_id`, COUNT(*) `cnt`, 0 olduni FROM `tmpuniids` GROUP BY `uni_id` HAVING `cnt` >= ' . $wordscount);
sql_slave('ALTER TABLE `tmpuniids2` ADD INDEX (`uni_id`)');
sql_slave('DROP TABLE `tmpuniids`');
sql_slave('ALTER TABLE `tmpuniids2` RENAME `tmpuniids`');
// }
// add: SELECT g2.uni FROM `tmpuniids` JOIN gns_locations g1 ON tmpuniids.uni_id=g1.uni JOIN gns_locations g2 ON g1.ufi=g2.ufi WHERE g1.nt!='N' AND g2.nt='N'
// remove: SELECT g1.uni FROM `tmpuniids` JOIN gns_locations g1 ON tmpuniids.uni_id=g1.uni JOIN gns_locations g2 ON g1.ufi=g2.ufi WHERE g1.nt!='N' AND g2.nt='N'
// und jetzt noch alle englischen bezeichnungen durch deutsche ersetzen (wo möglich) ...
sql_slave('CREATE TEMPORARY TABLE `tmpuniidsAdd` (`uni` int(11) NOT NULL, `olduni` int(11) NOT NULL, PRIMARY KEY (`uni`)) ENGINE=MEMORY SELECT g2.uni uni, g1.uni olduni FROM `tmpuniids` JOIN gns_locations g1 ON tmpuniids.uni_id=g1.uni JOIN gns_locations g2 ON g1.ufi=g2.ufi WHERE g1.nt!=\'N\' AND g2.nt=\'N\' GROUP BY uni');
sql_slave('CREATE TEMPORARY TABLE `tmpuniidsRemove` (`uni` int(11) NOT NULL, PRIMARY KEY (`uni`)) ENGINE=MEMORY SELECT DISTINCT g1.uni uni FROM `tmpuniids` JOIN gns_locations g1 ON tmpuniids.uni_id=g1.uni JOIN gns_locations g2 ON g1.ufi=g2.ufi WHERE g1.nt!=\'N\' AND g2.nt=\'N\'');
sql_slave('DELETE FROM tmpuniids WHERE uni_id IN (SELECT uni FROM tmpuniidsRemove)');
sql_slave('DELETE FROM tmpuniidsAdd WHERE uni IN (SELECT uni_id FROM tmpuniids)');
sql_slave('INSERT INTO tmpuniids (uni_id, olduni) SELECT uni, olduni FROM tmpuniidsAdd');
sql_slave('DROP TABLE tmpuniidsAdd');
sql_slave('DROP TABLE tmpuniidsRemove');
$rs = sql_slave('SELECT `uni_id` FROM tmpuniids');
if (mysql_num_rows($rs) == 0)
{
mysql_free_result($rs);
$options['error_ort'] = true;
outputSearchForm($options);
exit;
}
elseif (mysql_num_rows($rs) == 1)
{
$r = sql_fetch_array($rs);
mysql_free_result($rs);
// wenn keine 100%ige übereinstimmung nochmals anzeigen
$locid = $r['uni_id'] + 0;
$rsCmp = sql_slave('SELECT `full_name` FROM `gns_locations` WHERE `uni`=' . $locid . ' LIMIT 1');
$rCmp = sql_fetch_array($rsCmp);
mysql_free_result($rsCmp);
if (mb_strtolower($rCmp['full_name']) != mb_strtolower($ort))
{
outputUniidSelectionForm('SELECT `uni_id`, `olduni` FROM `tmpuniids`', $options);
}
}
else
{
mysql_free_result($rs);
outputUniidSelectionForm('SELECT `uni_id`, `olduni` FROM `tmpuniids`', $options);
exit;
}
}
// ok, wir haben einen ort ... koordinaten ermitteln
$locid = $locid + 0;
$rs = sql_slave('SELECT `lon`, `lat` FROM `gns_locations` WHERE `uni`=' . $locid . ' LIMIT 1');
if ($r = sql_fetch_array($rs))
{
// ok ... wir haben koordinaten ...
$lat = $r['lat'] + 0;
$lon = $r['lon'] + 0;
$lon_rad = $lon * 3.14159 / 180;
$lat_rad = $lat * 3.14159 / 180;
$distance_unit = 'km';
$distance = 75;
// ab hier selber code wie bei bydistance ... TODO: in funktion auslagern
//all target caches are between lat - max_lat_diff and lat + max_lat_diff
$max_lat_diff = $distance / (111.12 * $multiplier[$distance_unit]);
//all target caches are between lon - max_lon_diff and lon + max_lon_diff
//TODO: check!!!
$max_lon_diff = $distance * 180 / (abs(sin((90 - $lat) * 3.14159 / 180 )) * 6378 * $multiplier[$distance_unit] * 3.14159);
$cachesFilter =
'CREATE TEMPORARY TABLE result_caches ENGINE=MEMORY
SELECT
(' . getSqlDistanceFormula($lon, $lat, $distance, $multiplier[$distance_unit]) . ') `distance`,
`caches`.`cache_id` `cache_id`
FROM `caches` FORCE INDEX (`latitude`)
WHERE `longitude` > ' . ($lon - $max_lon_diff) . '
AND `longitude` < ' . ($lon + $max_lon_diff) . '
AND `latitude` > ' . ($lat - $max_lat_diff) . '
AND `latitude` < ' . ($lat + $max_lat_diff) . '
HAVING `distance` < ' . ($distance+0);
sql_slave($cachesFilter);
sql_slave('ALTER TABLE result_caches ADD PRIMARY KEY ( `cache_id` )');
$sql_select[] = '`result_caches`.`cache_id`';
$sql_from = '`result_caches`';
$sql_innerjoin[] = '`caches` ON `caches`.`cache_id`=`result_caches`.`cache_id`';
}
else
{
$options['error_locidnocoords'] = true;
outputSearchForm($options);
exit;
}
}
}
elseif ($options['searchtype'] == 'byfinder')
{
if ($options['finderid'] != 0)
{
$finder_id = $options['finderid'];
}
else
{
//get the userid
$rs = sql_slave("SELECT `user_id` FROM `user` WHERE `username`='&1'", $options['finder']);
$finder_record = sql_fetch_array($rs);
$finder_id = $finder_record['user_id'];
mysql_free_result($rs);
}
if (!isset($options['logtype'])) $options['logtype'] = '1,7';
$sql_select[] = 'distinct `caches`.`cache_id` `cache_id`';
// needs distinct because there can be multiple matching logs per cache
$sql_from = '`caches`';
$sql_innerjoin[] = '`cache_logs` ON `caches`.`cache_id`=`cache_logs`.`cache_id`';
$sql_where[] = '`cache_logs`.`user_id`=\'' . sql_escape($finder_id) . '\'';
if ($options['logtype'] != '0') // 0 = all types
{
$ids = explode(',', $options['logtype']);
$idNumbers = '0';
foreach ($ids AS $id)
{
if ($idNumbers != '') $idNumbers .= ',';
$idNumbers .= ($id+0);
}
$sql_where[] = '`cache_logs`.`type` IN (' . $idNumbers . ')';
}
}
elseif ($options['searchtype'] == 'bydistance') // Ocprop
{
//check the entered data
if (isset($options['lat']) && isset($options['lon']))
{
$lat = $options['lat']+0;
$lon = $options['lon']+0;
}
else
{
$latNS = $options['latNS'];
$lonEW = $options['lonEW'];
$lat_h = $options['lat_h'];
$lon_h = $options['lon_h'];
$lat_min = $options['lat_min'];
$lon_min = $options['lon_min'];
if (is_numeric($lon_h) && is_numeric($lon_min))
{
if (($lon_h >= 0) && ($lon_h < 180) && ($lon_min >= 0) && ($lon_min < 60))
{
$lon = $lon_h + $lon_min / 60;
if ($lonEW == 'W') $lon = -$lon;
}
}
if (is_numeric($lat_h) && is_numeric($lat_min))
{
if (($lat_h >= 0) && ($lat_h < 90) && ($lat_min >= 0) && ($lat_min < 60))
{
$lat = $lat_h + $lat_min / 60;
if ($latNS == 'S') $lat = -$lat;
}
}
}
$distance = $options['distance'];
$distance_unit = $options['unit'];
if ((!isset($lon)) || (!isset($lat)) || (!is_numeric($distance)))
{
outputSearchForm($options);
exit;
}
//make the sql-String
//all target caches are between lat - max_lat_diff and lat + max_lat_diff
$max_lat_diff = $distance / (111.12 * $multiplier[$distance_unit]);
//all target caches are between lon - max_lon_diff and lon + max_lon_diff
//TODO: check!!!
$max_lon_diff = $distance * 180 / (abs(sin((90 - $lat) * 3.14159 / 180 )) * 6378 * $multiplier[$distance_unit] * 3.14159);
$lon_rad = $lon * 3.14159 / 180;
$lat_rad = $lat * 3.14159 / 180;
$cachesFilter =
'CREATE TEMPORARY TABLE result_caches ENGINE=MEMORY
SELECT
(' . getSqlDistanceFormula($lon, $lat, $distance, $multiplier[$distance_unit]) . ') `distance`,
`caches`.`cache_id` `cache_id`
FROM `caches` FORCE INDEX (`latitude`)
WHERE `longitude` > ' . ($lon - $max_lon_diff) . '
AND `longitude` < ' . ($lon + $max_lon_diff) . '
AND `latitude` > ' . ($lat - $max_lat_diff) . '
AND `latitude` < ' . ($lat + $max_lat_diff) . '
HAVING `distance` < ' . ($distance+0);
sql_slave($cachesFilter);
sql_slave('ALTER TABLE result_caches ADD PRIMARY KEY ( `cache_id` )');
$sql_select[] = '`result_caches`.`cache_id`';
$sql_from = '`result_caches`';
$sql_innerjoin[] = '`caches` ON `caches`.`cache_id`=`result_caches`.`cache_id`';
}
elseif ($options['searchtype'] == 'bycacheid')
{
$sql_select[] = '`caches`.`cache_id` `cache_id`';
$sql_from = '`caches`';
$sql_where[] = '`caches`.`cache_id`=\'' . sql_escape($options['cacheid']) . '\'';
}
elseif ($options['searchtype'] == 'bywp')
{
$sql_select[] = '`caches`.`cache_id` `cache_id`';
$sql_from = '`caches`';
$sql_where[] = '`caches`.`wp_oc`=\'' . sql_escape($options['wp']) . '\'';
}
elseif ($options['searchtype'] == 'byfulltext')
{
require_once($opt['rootpath'] . 'lib/search1/ftsearch.inc.php');
$fulltext = $options['fulltext'];
$hashes = ftsearch_hash($fulltext);
if (count($hashes) == 0)
{
$options['error_nofulltext'] = true;
outputSearchForm($options);
}
else if (count($hashes) > 50)
{
$options['error_fulltexttoolong'] = true;
outputSearchForm($options);
}
$ft_types = array();
if (isset($options['ft_name']) && $options['ft_name'])
$ft_types[] = 2;
if (isset($options['ft_logs']) && $options['ft_logs'])
$ft_types[] = 1;
if (isset($options['ft_desc']) && $options['ft_desc'])
$ft_types[] = 3;
if (isset($options['ft_pictures']) && $options['ft_pictures'])
$ft_types[] = 6;
if (count($ft_types) == 0)
$ft_types[] = 0;
$sql_select[] = '`caches`.`cache_id` `cache_id`';
$sql_from = '`caches`';
$n = 1;
foreach ($hashes AS $k => $h)
{
if ($n > 1)
$sql_innerjoin[] = '`search_index` AS `s' . $n . '` ON `s' . ($n-1) . '`.`cache_id`=`s' . $n . '`.`cache_id`';
else
$sql_innerjoin[] = '`search_index` AS `s1` ON `s1`.`cache_id`=`caches`.`cache_id`';
$sql_where[] = '`s' . $n . '`.`hash`=\'' . sql_escape($h) . '\'';
$sql_where[] = '`s' . $n . '`.`object_type` IN (' . implode(',', $ft_types) . ')';
$n++;
}
$sqlFilter = 'SELECT DISTINCT ' . implode(',', $sql_select) .
' FROM ' . $sql_from .
' INNER JOIN ' . implode(' INNER JOIN ', $sql_innerjoin) .
' WHERE ' . implode(' AND ', $sql_where);
sql_slave('CREATE TEMPORARY TABLE `tmpFTCaches` (`cache_id` int (11) PRIMARY KEY) ' . $sqlFilter);
$sql_select = array();
$sql_from = '';
$sql_innerjoin = array();
$sql_leftjoin = array();
$sql_where = array();
$sql_select[] = '`caches`.`cache_id` `cache_id`';
$sql_from = '`tmpFTCaches`';
$sql_innerjoin[] = '`caches` ON `caches`.`cache_id`=`tmpFTCaches`.`cache_id`';
}
elseif ($options['searchtype'] == 'bynofilter')
{
$sql_select[] = '`caches`.`cache_id` `cache_id`';
$sql_from = '`caches`';
}
else
{
tpl_errorMsg('search', $unknown_searchtype);
}
// additional options
if (!isset($options['f_userowner'])) $options['f_userowner']='0'; // Ocprop
if ($options['f_userowner'] != 0) { $sql_where[] = '`caches`.`user_id`!=\'' . $usr['userid'] .'\''; }
if (!isset($options['f_userfound'])) $options['f_userfound']='0'; // Ocprop
if ($options['f_userfound'] != 0)
{
$sql_where[] = '`caches`.`cache_id` NOT IN (SELECT `cache_logs`.`cache_id` FROM `cache_logs` WHERE `cache_logs`.`user_id`=\'' . sql_escape($usr['userid']) . '\' AND `cache_logs`.`type` IN (1, 7))';
}
if (!isset($options['f_inactive'])) $options['f_inactive']='0'; // Ocprop
if ($options['f_inactive'] != 0) $sql_where[] = '`caches`.`status` NOT IN (3,6,7)';
// f_inactive formerly was used for both, archived and disabled caches.
// After adding the separate f_disabled option, it is used only for archived
// caches, but keeps its name for compatibility with existing stored or
// external searches.
if (!isset($options['f_disabled'])) $options['f_disabled']='0';
if ($options['f_disabled'] != 0) $sql_where[] = '`caches`.`status`<>2';
if (isset($usr))
{
if (!isset($options['f_ignored'])) $options['f_ignored']='0';
if($options['f_ignored'] != 0)
{
// only use this filter, if it is realy needed - this enables better caching in map2.php with ignored-filter
if (sql_value_slave("SELECT COUNT(*) FROM `cache_ignore` WHERE `user_id`='" . sql_escape($usr['userid']) . "'", 0) > 0)
{
$sql_where[] = '`caches`.`cache_id` NOT IN (SELECT `cache_ignore`.`cache_id`
FROM `cache_ignore`
WHERE `cache_ignore`.`user_id`=\'' . sql_escape($usr['userid']) . '\')';
}
}
}
if (!isset($options['f_otherPlatforms'])) $options['f_otherPlatforms']='0';
if ($options['f_otherPlatforms'] != 0)
{
// $sql_where[] = '`caches`.`wp_nc`=\'\' AND `caches`.`wp_gc`=\'\'';
// ignore NC listings, which are mostly unmaintained or dead
$sql_where[] = "`caches`.`wp_gc_maintained`=''";
}
if (!isset($options['country'])) $options['country']='';
if ($options['country'] != '')
{
$sql_where[] = '`caches`.`country`=\'' . sql_escape($options['country']) . '\'';
}
if ($options['cachetype'] != '')
{
$types = explode(';', $options['cachetype']);
if (count($types) < sql_value_slave("SELECT COUNT(*) FROM `cache_type`", 0))
{
for ($i = 0; $i < count($types); $i++) $types[$i] = "'" . sql_escape($types[$i]) . "'";
$sql_where[] = '`caches`.`type` IN (' . implode(',', $types) . ')';
}
}
if ($options['cachesize'] != '')
{
$sizes = explode(';', $options['cachesize']);
if (count($sizes) < sql_value_slave("SELECT COUNT(*) FROM `cache_size`", 0))
{
for ($i = 0; $i < count($sizes); $i++) $sizes[$i] = "'" . sql_escape($sizes[$i]) . "'";
$sql_where[] = '`caches`.`size` IN (' . implode(',', $sizes) . ')';
}
}
if ($options['difficultymin'] != 0)
{
$sql_where[] = '`caches`.`difficulty`>=\'' . sql_escape($options['difficultymin']) . '\'';
}
if ($options['difficultymax'] != 0)
{
$sql_where[] = '`caches`.`difficulty`<=\'' . sql_escape($options['difficultymax']) . '\'';
}
if ($options['terrainmin'] != 0)
{
$sql_where[] = '`caches`.`terrain`>=\'' . sql_escape($options['terrainmin']) . '\'';
}
if ($options['terrainmax'] != 0)
{
$sql_where[] = '`caches`.`terrain`<=\'' . sql_escape($options['terrainmax']) . '\'';
}
if ($options['recommendationmin'] > 0)
{
$sql_innerjoin[] = '`stat_caches` ON `caches`.`cache_id`=`stat_caches`.`cache_id`';
$sql_where[] = '`stat_caches`.`toprating`>=\'' . sql_escape($options['recommendationmin']) . '\'';
}
if (isset($options['cache_attribs']) && count($options['cache_attribs']) > 0)
{
foreach ($options['cache_attribs'] AS $attr)
{
$sql_innerjoin[] = '`caches_attributes` AS `a' . ($attr+0) . '` ON `a' . ($attr+0) . '`.`cache_id`=`caches`.`cache_id`';
$sql_where[] = '`a' . ($attr+0) . '`.`attrib_id`=' . ($attr+0);
}
}
if (isset($options['cache_attribs_not']) && count($options['cache_attribs_not']) > 0)
{
foreach ($options['cache_attribs_not'] AS $attr)
{
$sql_where[] = 'NOT EXISTS (SELECT `caches_attributes`.`cache_id` FROM `caches_attributes` WHERE `caches_attributes`.`cache_id`=`caches`.`cache_id` AND `caches_attributes`.`attrib_id`=\'' . sql_escape($attr+0) . '\')';
}
}
if (isset($options['bbox']) && ($options['bbox']!==false))
{
// bbox=<lon_from>,<lat_from>,<lon_to>,<lat_to>
$coords = explode(',', $options['bbox']);
if (count($coords) == 4)
{
$sql_where[] = '`caches`.`longitude`>=' . ($coords[0]+0) . ' AND `caches`.`latitude`>=' . ($coords[1]+0) . ' AND `caches`.`longitude`<=' . ($coords[2]+0) . ' AND `caches`.`latitude`<=' . ($coords[3]+0);
}
}
$sql_innerjoin[] = '`cache_status` ON `caches`.`status`=`cache_status`.`id`';
if (isset($usr['userid']))
$sql_where[] = '(`cache_status`.`allow_user_view`=1 OR `caches`.`user_id`=' . sql_escape($usr['userid']) . ' OR (`caches`.`status`<>5 AND '. sql_escape($login->admin & ADMIN_USER) . '>0))';
else
$sql_where[] = '`cache_status`.`allow_user_view`=1';
//do the search
$innerjoin = sizeof($sql_innerjoin) ? ' INNER JOIN ' . implode(' INNER JOIN ', $sql_innerjoin) : '';
$leftjoin = sizeof($sql_leftjoin) ? ' LEFT JOIN ' . implode(' LEFT JOIN ', $sql_leftjoin) : '';
$group = sizeof($sql_group) ? ' GROUP BY ' . implode(', ', $sql_group) : '';
$having = sizeof($sql_having) ? ' HAVING ' . implode(' AND ', $sql_having) : '';
$sqlFilter = 'SELECT ' . implode(',', $sql_select) .
' FROM ' . $sql_from .
$innerjoin .
$leftjoin .
' WHERE ' . implode(' AND ', $sql_where) .
$group .
$having;
// echo "DEBUG ".$sqlFilter." DEBUG<br>";
}
else
{
tpl_errorMsg('search', 'Unbekannter Suchtyp');
}
//=================================================================
// X7. verify output selection and prepare SQL query
//=================================================================
$output_module = mb_strtolower($options['output']); // Ocprop: HTML, gpx
$map2_bounds = ($output_module == 'map2bounds');
if ($map2_bounds)
$output_module = 'map2';
if ($map2_bounds && $options['queryid'] == 0)
{
tpl_set_var('tplname', $tplname);
$tplname = 'error';
tpl_set_var('error_msg', 'map2bounds requires queryid');
}
elseif (!file_exists($opt['rootpath'] . 'lib/search1/search.' . $output_module . '.inc.php'))
{
tpl_set_var('tplname', $tplname);
$tplname = 'error';
tpl_set_var('error_msg', $outputformat_notexist);
}
if ($tplname != 'error')
{
$caches_per_page = 20;
// Default parameters; may be modified by output modules
$content_type_plain = 'application/octet-stream';
$content_type_zipped = 'application/zip';
$zip_threshold = $caches_per_page;
$add_to_zipfile = true;
$sAddJoin = '';
$sAddGroupBy = '';
$sAddFields = '';
$sGroupBy = '';
// *** load output module ***
//
// (map2 module will exit after executing)
require($opt['rootpath'] . 'lib/search1/search.' . $output_module . '.inc.php');
if (!isset($search_output_file_download))
die("search_output_file_download not set for '$output_module' search");
// *** prepare SQL query ***
$sql = '';
// If no distance unit is preselected by distance search, use 'km'.
// The unit will be shown e.g. in HTML and XML search results.
if (!isset($distance_unit))
$distance_unit = 'km';
if (isset($lat_rad) && isset($lon_rad))
{
$sql .= getSqlDistanceFormula($lon_rad * 180 / 3.14159, $lat_rad * 180 / 3.14159, 0, $multiplier[$distance_unit]) . ' `distance`, ';
}
else
{
if ($usr === false)
{
$sql .= 'NULL distance, ';
}
else
{
// get the user's home coords
$rs_coords = sql_slave("SELECT `latitude`, `longitude` FROM `user` WHERE `user_id`='&1'", $usr['userid']);
$record_coords = sql_fetch_array($rs_coords);
if ($record_coords['latitude'] == 0 && $record_coords['longitude'] == 0)
{
$sql .= 'NULL distance, ';
}
else
{
$lon_rad = $record_coords['longitude'] * 3.14159 / 180;
$lat_rad = $record_coords['latitude'] * 3.14159 / 180;
$sql .= getSqlDistanceFormula($record_coords['longitude'], $record_coords['latitude'], 0, $multiplier[$distance_unit]) . ' `distance`, ';
}
mysql_free_result($rs_coords);
}
}
if ($options['sort'] == 'bylastlog' || $options['sort'] == 'bymylastlog')
{
$sAddFields .= ', MAX(`cache_logs`.`date`) AS `lastLog`';
$sAddJoin .= ' LEFT JOIN `cache_logs` ON `caches`.`cache_id`=`cache_logs`.`cache_id`';
if ($options['sort'] == 'bymylastlog')
$sAddJoin .= ' AND `cache_logs`.`user_id`=' . sql_escape($usr === false ? 0 : $usr['userid']);
$sGroupBy .= ' GROUP BY `caches`.`cache_id`';
}
$sql .= '`caches`.`cache_id`,
`caches`.`status`,
`caches`.`type`,
`caches`.`size`,
`caches`.`longitude`, `caches`.`latitude`,
`caches`.`user_id`,
IF(IFNULL(`stat_caches`.`toprating`,0)>3, 4, IFNULL(`stat_caches`.`toprating`, 0)) `ratingvalue`' .
$sAddFields
. ' FROM `caches`
LEFT JOIN `stat_caches` ON `caches`.`cache_id`=`stat_caches`.`cache_id`' .
$sAddJoin
. ' WHERE `caches`.`cache_id` IN (' . $sqlFilter . ')' .
$sGroupBy;
$sortby = $options['sort'];
$sql .= ' ORDER BY ';
if ($options['orderRatingFirst'])
$sql .= '`ratingvalue` DESC, ';
if ($sortby == 'bylastlog' || $options['sort'] == 'bymylastlog')
{
$sql .= '`lastLog` DESC, ';
$sortby = 'bydistance';
}
if (isset($lat_rad) && isset($lon_rad) && ($sortby == 'bydistance'))
{
$sql .= '`distance` ASC';
}
else if ($sortby == 'bycreated')
{
$sql .= '`caches`.`date_created` DESC';
}
else // by name
{
// Some names start with spaces ...
// caches.name is not indexed, so ltrimming won't cost performance.
$sql .= 'LTRIM(`caches`.`name`) ASC';
}
// range of output
$startat = isset($_REQUEST['startat']) ? $_REQUEST['startat'] : 0;
if (!is_numeric($startat)) $startat = 0;
if (isset($_REQUEST['count'])) // Ocprop
$count = $_REQUEST['count'];
else
$count = $caches_per_page;
if ($count == 'max') $count = 500;
if (!is_numeric($count)) $count = 0;
if ($count < 1) $count = 1;
if ($count > 500) $count = 500;
$sqlLimit = ' LIMIT ' . $startat . ', ' . $count;
if ($search_output_file_download)
{
//=================================================================
// X8a. run query and output for file downloads (GPX, KML, OVL ...)
//=================================================================
sql_slave('CREATE TEMPORARY TABLE `searchtmp` SELECT ' . $sql . $sqlLimit,
$sqldebug);
$rsCount = sql_slave('SELECT COUNT(*) `count` FROM `searchtmp`');
$rCount = sql_fetch_array($rsCount);
mysql_free_result($rsCount);
if ($rCount['count'] == 1)
{
$rsName = sql_slave('
SELECT `caches`.`wp_oc` `wp_oc`
FROM `searchtmp`, `caches`
WHERE `searchtmp`.`cache_id`=`caches`.`cache_id` LIMIT 1'
);
$rName = sql_fetch_array($rsName);
mysql_free_result($rsName);
$sFilebasename = $rName['wp_oc'];
}
else
$sFilebasename = 'ocde' . $options['queryid'];
$bUseZip = ($rCount['count'] > $zip_threshold) ||
(isset($_REQUEST['zip']) && ($_REQUEST['zip'] == '1'));
if ($bUseZip)
{
require_once($opt['rootpath'] . 'lib2/ss_zip.class.php');
$phpzip = new ss_zip('',6);
}
if (!$sqldebug)
{
if ($bUseZip)
{
header('Content-type: ' . $content_type_zipped);
header('Content-disposition: attachment; filename="' . $sFilebasename . '.zip"');
}
else
{
header('Content-type: '.$content_type_plain);
header('Content-disposition: attachment; filename="' . $sFilebasename . '.' . $output_module .'"');
}
}
// helper function for output modules
function append_output($str)
{
global $content, $bUseZip, $sqldebug;
if (!$sqldebug)
{
if ($bUseZip)
$content .= $str;
else
echo $str;
}
}
// *** run output module ***
//
// Modules will use these variables from search.php:
//
// $phpzip
// $bUseZip
$content = '';
search_output();
if ($sqldebug) sqldbg_end();
sql_slave('DROP TABLE `searchtmp`');
// output zip file
if ($bUseZip)
{
if ($add_to_zipfile)
{
$phpzip->add_data($sFilebasename . '.' . $output_module, $content);
}
echo $phpzip->save($sFilebasename . '.zip', 'r');
}
}
else
{
//=================================================================
// X8b. run other output module (XML, HTML, Map)
//
// The following variables from search.php are used by output modules:
//
// $distance_unit
// $lat_rad, $lon_rad
// $startat
// $count
// $caches_per_page
// $sql
// $sqlLimit
// $options['sort']
// $options['queryid']
// $cachesFilter
// $map2_bounds
//=================================================================
search_output();
}
exit;
}
}
else // $options['showresult'] == 0
{
//=============================================================
// F6. present search options form to the user
//=============================================================
$options['show_all_countries'] = isset($_REQUEST['show_all_countries']) ? $_REQUEST['show_all_countries'] : 0;
if (isset($_REQUEST['show_all_countries_submit']))
{
$options['show_all_countries'] = 1;
}
//return the search form
if ($options['expert'] == 1)
{
//expert mode
tpl_set_var('formmethod', 'post');
}
else
{
outputSearchForm($options);
exit;
}
}
} // $error != false
//=============================================================
// F8. show search options form or error message
//=============================================================
tpl_BuildTemplate();
//=============================================================
// F7. prepare search options form
//=============================================================
function outputSearchForm($options)
{
global $login;
global $stylepath, $usr, $error_plz, $error_locidnocoords, $error_ort, $error_noort, $error_nofulltext, $error_fulltexttoolong;
global $default_lang, $search_all_countries, $cache_attrib_jsarray_line;
global $cache_attrib_group, $cache_attrib_img_line1, $cache_attrib_img_line2, $locale;
//simple mode (only one easy filter)
//$filters = read_file($stylepath . '/search.simple.tpl.php');
//tpl_set_var('filters', $filters, false);
tpl_set_var('formmethod', 'get');
// checkboxen
tpl_set_var('disable_nologin', $usr === false ? 'disabled' : '');
tpl_set_var('grey_nologin', $usr === false ? 'style="color:grey"' : '');
$homecoords = ($login->userid>0 && sql_value_slave("SELECT `latitude`+`longitude` FROM user WHERE `user_id`='&1'", $login->userid) <> 0);
if (!$homecoords && isset($options['sort']) && $options['sort'] == 'bydistance')
$options['sort'] = 'byname';
tpl_set_var('bydistance_enabled', ($homecoords ? "" : 'disabled="disabled"'));
if (isset($options['sort']))
$bBynameChecked = ($options['sort'] == 'byname'); // Ocprop
else
$bBynameChecked = ($usr['userid'] == 0);
tpl_set_var('byname_checked', ($bBynameChecked == true) ? ' checked="checked"' : '');
if (isset($options['sort']))
$bBydistanceChecked = ($options['sort'] == 'bydistance');
else
$bBydistanceChecked = ($usr['userid'] != 0);
tpl_set_var('bydistance_checked', ($bBydistanceChecked == true) ? ' checked="checked"' : '');
if (isset($options['sort']))
$bBycreatedChecked = ($options['sort'] == 'bycreated');
else
$bBycreatedChecked = ($usr['userid'] == 0);
tpl_set_var('bycreated_checked', ($bBycreatedChecked == true) ? ' checked="checked"' : '');
if (isset($options['sort']))
$bBylastlogChecked = ($options['sort'] == 'bylastlog');
else
$bBylastlogChecked = ($usr['userid'] != 0);
tpl_set_var('bylastlog_checked', ($bBylastlogChecked == true) ? ' checked="checked"' : '');
if (isset($options['sort']))
$bBymylastlogChecked = ($options['sort'] == 'bymylastlog');
else
$bBymylastlogChecked = ($usr['userid'] != 0);
tpl_set_var('bymylastlog_checked', ($bBymylastlogChecked == true) ? ' checked="checked"' : '');
tpl_set_var('hidopt_sort', $options['sort']);
tpl_set_var('orderRatingFirst_checked', ($options['orderRatingFirst'] == true) ? ' checked="checked"' : '');
tpl_set_var('hidopt_orderRatingFirst', ($options['orderRatingFirst'] == true) ? '1' : '0');
tpl_set_var('f_userfound_disabled', ($usr['userid'] == 0) ? ' disabled="disabled"' : '');
if ($usr['userid'] != 0)
tpl_set_var('f_userfound_disabled', ($options['f_userfound'] == 1) ? ' checked="checked"' : '');
tpl_set_var('hidopt_userfound', ($options['f_userfound'] == 1) ? '1' : '0');
tpl_set_var('f_userowner_disabled', ($usr['userid'] == 0) ? ' disabled="disabled"' : '');
if ($usr['userid'] != 0)
tpl_set_var('f_userowner_disabled', ($options['f_userowner'] == 1) ? ' checked="checked"' : '');
tpl_set_var('hidopt_userowner', ($options['f_userowner'] == 1) ? '1' : '0');
tpl_set_var('f_inactive_checked', ($options['f_inactive'] == 1) ? ' checked="checked"' : '');
tpl_set_var('hidopt_inactive', ($options['f_inactive'] == 1) ? '1' : '0');
tpl_set_var('f_disabled_checked', ($options['f_disabled'] == 1) ? ' checked="checked"' : '');
tpl_set_var('hidopt_disabled', ($options['f_disabled'] == 1) ? '1' : '0');
tpl_set_var('f_ignored_disabled', ($usr['userid'] == 0) ? ' disabled="disabled"' : '');
if ($usr['userid'] != 0)
tpl_set_var('f_ignored_disabled', ($options['f_ignored'] == 1) ? ' checked="checked"' : '');
tpl_set_var('hidopt_ignored', ($options['f_ignored'] == 1) ? '1' : '0');
tpl_set_var('f_otherPlatforms_checked', ($options['f_otherPlatforms'] == 1) ? ' checked="checked"' : '');
tpl_set_var('hidopt_otherPlatforms', ($options['f_otherPlatforms'] == 1) ? '1' : '0');
if (isset($options['country']))
{
tpl_set_var('country', htmlspecialchars($options['country'], ENT_COMPAT, 'UTF-8'));
}
else
{
tpl_set_var('country', '');
}
if (isset($options['cachetype']))
{
tpl_set_var('cachetype', htmlspecialchars($options['cachetype'], ENT_COMPAT, 'UTF-8'));
}
else
{
tpl_set_var('cachetype', '');
}
// cachename
tpl_set_var('cachename', isset($options['cachename']) ? htmlspecialchars($options['cachename'], ENT_COMPAT, 'UTF-8') : '');
// koordinaten
if (!isset($options['lat_h']))
{
if ($usr !== false)
{
$rs = sql('SELECT `latitude`, `longitude` FROM `user` WHERE `user_id`=\'' . sql_escape($usr['userid']) . '\'');
$record = sql_fetch_array($rs);
$lon = $record['longitude'];
$lat = $record['latitude'];
mysql_free_result($rs);
if ($lon < 0)
{
tpl_set_var('lonE_sel', '');
tpl_set_var('lonW_sel', ' selected="selected"');
$lon = -$lon;
}
else
{
tpl_set_var('lonE_sel', ' selected="selected"');
tpl_set_var('lonW_sel', '');
}
if ($lat < 0)
{
tpl_set_var('latN_sel', '');
tpl_set_var('latS_sel', ' selected="selected"');
$lat = -$lat;
}
else
{
tpl_set_var('latN_sel', ' selected="selected"');
tpl_set_var('latS_sel', '');
}
$lon_h = floor($lon);
$lat_h = floor($lat);
$lon_min = ($lon - $lon_h) * 60;
$lat_min = ($lat - $lat_h) * 60;
tpl_set_var('lat_h', $lat_h);
tpl_set_var('lon_h', $lon_h);
tpl_set_var('lat_min', sprintf("%02.3f", $lat_min));
tpl_set_var('lon_min', sprintf("%02.3f", $lon_min));
}
else
{
tpl_set_var('lat_h', '00');
tpl_set_var('lon_h', '000');
tpl_set_var('lat_min', '00.000');
tpl_set_var('lon_min', '00.000');
}
}
else
{
tpl_set_var('lat_h', isset($options['lat_h']) ? $options['lat_h'] : '00');
tpl_set_var('lon_h', isset($options['lon_h']) ? $options['lon_h'] : '000');
tpl_set_var('lat_min', isset($options['lat_min']) ? $options['lat_min'] : '00.000');
tpl_set_var('lon_min', isset($options['lon_min']) ? $options['lon_min'] : '00.000');
if ($options['lonEW'] == 'W')
{
tpl_set_var('lonE_sel', '');
tpl_set_var('lonW_sel', 'selected="selected"');
}
else
{
tpl_set_var('lonE_sel', 'selected="selected"');
tpl_set_var('lonW_sel', '');
}
if ($options['latNS'] == 'S')
{
tpl_set_var('latS_sel', 'selected="selected"');
tpl_set_var('latN_sel', '');
}
else
{
tpl_set_var('latS_sel', '');
tpl_set_var('latN_sel', 'selected="selected"');
}
}
tpl_set_var('distance', isset($options['distance']) ? $options['distance'] : 75);
if (!isset($options['unit'])) $options['unit'] = 'km';
if ($options['unit'] == 'km')
{
tpl_set_var('sel_km', 'selected="selected"');
tpl_set_var('sel_sm', '');
tpl_set_var('sel_nm', '');
}
else if ($options['unit'] == 'sm')
{
tpl_set_var('sel_km', '');
tpl_set_var('sel_sm', 'selected="selected"');
tpl_set_var('sel_nm', '');
}
else if ($options['unit'] == 'nm')
{
tpl_set_var('sel_km', '');
tpl_set_var('sel_sm', '');
tpl_set_var('sel_nm', 'selected="selected"');
}
// plz
tpl_set_var('plz', isset($options['plz']) ? htmlspecialchars($options['plz'], ENT_COMPAT, 'UTF-8') : '');
tpl_set_var('ort', isset($options['ort']) ? htmlspecialchars($options['ort'], ENT_COMPAT, 'UTF-8') : '');
// owner
tpl_set_var('owner', isset($options['owner']) ? htmlspecialchars($options['owner'], ENT_COMPAT, 'UTF-8') : '');
// finder
tpl_set_var('finder', isset($options['finder']) ? htmlspecialchars($options['finder'], ENT_COMPAT, 'UTF-8') : '');
//countryoptions
$countriesoptions = $search_all_countries;
$rs = sql("SELECT IFNULL(`sys_trans_text`.`text`, `countries`.`name`) AS `name`, `countries`.`short` FROM `countries` LEFT JOIN `sys_trans` ON `countries`.`trans_id`=`sys_trans`.`id` AND `sys_trans`.`text`=`countries`.`name` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' WHERE `countries`.`short` IN (SELECT DISTINCT `country` FROM `caches`) ORDER BY `name` ASC", $locale);
for ($i = 0; $i < mysql_num_rows($rs); $i++)
{
$record = sql_fetch_array($rs);
if ($record['short'] == $options['country'])
$countriesoptions .= '<option value="' . htmlspecialchars($record['short'], ENT_COMPAT, 'UTF-8') . '" selected="selected">' . htmlspecialchars($record['name'], ENT_COMPAT, 'UTF-8') . '</option>';
else
$countriesoptions .= '<option value="' . htmlspecialchars($record['short'], ENT_COMPAT, 'UTF-8') . '">' . htmlspecialchars($record['name'], ENT_COMPAT, 'UTF-8') . '</option>';
$countriesoptions .= "\n";
}
tpl_set_var('countryoptions', $countriesoptions);
// cachetype + cachesize
$nCount = sqlValue("SELECT COUNT(*) FROM `cache_type`", 0);
for ($n = 1; $n <= $nCount; $n++)
tpl_set_var('cachetype' . $n . 'checked', ((strpos(';' . $options['cachetype'] . ';', ';' . $n . ';') !== false) || ($options['cachetype']=='')) ? ' checked="checked"' : '');
$nCount = sqlValue("SELECT COUNT(*) FROM `cache_size`", 0);
tpl_set_var('cachesizes', $nCount);
for ($n = 1; $n <= $nCount; $n++)
tpl_set_var('cachesize' . $n . 'checked', ((strpos(';' . $options['cachesize'] . ';', ';' . $n . ';') !== false) || ($options['cachesize']=='')) ? ' checked="checked"' : '');
tpl_set_var('cachetype', $options['cachetype']);
tpl_set_var('cachesize', $options['cachesize']);
// difficulty + terrain
$difficultymin_options = '<option value="0"' . (($options['difficultymin']==0) ? ' selected="selected"' : '') . '>-</option>' . "\n";
$difficultymax_options = '<option value="0"' . (($options['difficultymax']==0) ? ' selected="selected"' : '') . '>-</option>' . "\n";
$terrainmin_options = '<option value="0"' . (($options['terrainmin']==0) ? ' selected="selected"' : '') . '>-</option>' . "\n";
$terrainmax_options = '<option value="0"' . (($options['terrainmax']==0) ? ' selected="selected"' : '') . '>-</option>' . "\n";
for ($n = 2; $n <= 10; $n++)
{
$difficultymin_options .= '<option value="' . $n . '"' . (($options['difficultymin']==$n) ? ' selected="selected"' : '') . '>' . sprintf('%01.1f', $n/2) . '</option>' . "\n";
$difficultymax_options .= '<option value="' . $n . '"' . (($options['difficultymax']==$n) ? ' selected="selected"' : '') . '>' . sprintf('%01.1f', $n/2) . '</option>' . "\n";
$terrainmin_options .= '<option value="' . $n . '"' . (($options['terrainmin']==$n) ? ' selected="selected"' : '') . '>' . sprintf('%01.1f', $n/2) . '</option>' . "\n";
$terrainmax_options .= '<option value="' . $n . '"' . (($options['terrainmax']==$n) ? ' selected="selected"' : '') . '>' . sprintf('%01.1f', $n/2) . '</option>' . "\n";
}
tpl_set_var('difficultymin_options', $difficultymin_options);
tpl_set_var('difficultymax_options', $difficultymax_options);
tpl_set_var('terrainmin_options', $terrainmin_options);
tpl_set_var('terrainmax_options', $terrainmax_options);
tpl_set_var('difficultymin', $options['difficultymin']);
tpl_set_var('difficultymax', $options['difficultymax']);
tpl_set_var('terrainmin', $options['terrainmin']);
tpl_set_var('terrainmax', $options['terrainmax']);
// logtypen
$logtype_options = '';
$rs = sql("
SELECT `id`,
IFNULL(`sys_trans_text`.`text`, `log_types`.`name`) AS `name`
FROM (
SELECT `id`,`name`,`trans_id` FROM `log_types`
UNION
SELECT 0,'all',(SELECT id FROM sys_trans WHERE `text`='all')
) `log_types`
LEFT JOIN `sys_trans_text` ON `sys_trans_text`.`trans_id`=`log_types`.`trans_id` AND `sys_trans_text`.`lang`='&1'
ORDER BY `log_types`.`id` ASC", $locale);
for ($i = 0; $i < mysql_num_rows($rs); $i++)
{
$record = sql_fetch_array($rs);
if (isset($options['logtype']) && $record['id'] == $options['logtype'])
$logtype_options .= '<option value="' . htmlspecialchars($record['id'], ENT_COMPAT, 'UTF-8') . '" selected="selected">' . htmlspecialchars($record['name'], ENT_COMPAT, 'UTF-8') . '</option>';
else
$logtype_options .= '<option value="' . htmlspecialchars($record['id'], ENT_COMPAT, 'UTF-8') . '">' . htmlspecialchars($record['name'], ENT_COMPAT, 'UTF-8') . '</option>';
$logtype_options .= "\n";
}
tpl_set_var('logtype_options', $logtype_options);
// cache-attributes
$attributes_jsarray = '';
$bBeginLine2 = true;
$nPrevLineAttrCount2 = 0;
$nLineAttrCount2 = 0;
$attributes_img2 = '';
/* perpare 'all attributes' */
$rsAttrGroup = sql("SELECT `attribute_groups`.`id`, IFNULL(`sys_trans_text`.`text`, `attribute_groups`.`name`) AS `name`, `attribute_categories`.`color` FROM `attribute_groups` INNER JOIN `attribute_categories` ON `attribute_groups`.`category_id`=`attribute_categories`.`id` LEFT JOIN `sys_trans` ON `attribute_groups`.`trans_id`=`sys_trans`.`id` AND `sys_trans`.`text`=`attribute_groups`.`name` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' ORDER BY `attribute_groups`.`category_id` ASC, `attribute_groups`.`id` ASC", $locale);
while ($rAttrGroup = sql_fetch_assoc($rsAttrGroup))
{
$group_line = '';
$rs = sql("SELECT `cache_attrib`.`id`, IFNULL(`ttname`.`text`, `cache_attrib`.`name`) AS `name`, `cache_attrib`.`icon_large`, `cache_attrib`.`icon_no`, `cache_attrib`.`icon_undef`, `cache_attrib`.`search_default`, IFNULL(`ttdesc`.`text`, `cache_attrib`.`html_desc`) AS `html_desc`
FROM `cache_attrib`
LEFT JOIN `sys_trans` AS `tname` ON `cache_attrib`.`trans_id`=`tname`.`id` AND `cache_attrib`.`name`=`tname`.`text`
LEFT JOIN `sys_trans_text` AS `ttname` ON `tname`.`id`=`ttname`.`trans_id` AND `ttname`.`lang`='&1'
LEFT JOIN `sys_trans` AS `tdesc` ON `cache_attrib`.`html_desc_trans_id`=`tdesc`.`id` AND `cache_attrib`.`html_desc`=`tdesc`.`text`
LEFT JOIN `sys_trans_text` AS `ttdesc` ON `tdesc`.`id`=`ttdesc`.`trans_id` AND `ttdesc`.`lang`='&1'
WHERE `cache_attrib`.`group_id`='&2' AND `selectable`
AND NOT IFNULL(`cache_attrib`.`hidden`, 0)=1
ORDER BY `cache_attrib`.`id`", $locale, $rAttrGroup['id']);
while ($record = sql_fetch_array($rs))
{
// icon specified
$line = $cache_attrib_jsarray_line;
$line = mb_ereg_replace('{id}', $record['id'], $line);
if (!isset($options['cache_attribs']))
{
$line = mb_ereg_replace('{state}', 0, $line);
}
else if (array_search($record['id'], $options['cache_attribs']) === false)
{
if (array_search($record['id'], $options['cache_attribs_not']) === false)
$line = mb_ereg_replace('{state}', 0, $line);
else
$line = mb_ereg_replace('{state}', 2, $line);
}
else
$line = mb_ereg_replace('{state}', 1, $line);
$line = mb_ereg_replace('{text_long}', escape_javascript($record['name']), $line);
$line = mb_ereg_replace('{icon}', $record['icon_large'], $line);
$line = mb_ereg_replace('{icon_no}', $record['icon_no'], $line);
$line = mb_ereg_replace('{icon_undef}', $record['icon_undef'], $line);
$line = mb_ereg_replace('{search_default}', $record['search_default'], $line);
if ($attributes_jsarray != '') $attributes_jsarray .= ",\n";
$attributes_jsarray .= $line;
$line = $cache_attrib_img_line1;
$line = mb_ereg_replace('{id}', $record['id'], $line);
$line = mb_ereg_replace('{text_long}', escape_javascript($record['name']), $line);
if (!isset($options['cache_attribs']))
{
$line = mb_ereg_replace('{icon}', $record['icon_undef'], $line);
}
else if (array_search($record['id'], $options['cache_attribs']) === false)
{
if (array_search($record['id'], $options['cache_attribs_not']) === false)
$line = mb_ereg_replace('{icon}', $record['icon_undef'], $line);
else
$line = mb_ereg_replace('{icon}', $record['icon_no'], $line);
}
else
$line = mb_ereg_replace('{icon}', $record['icon_large'], $line);
$line = mb_ereg_replace('{html_desc}', escape_javascript($record['html_desc']), $line);
$line = mb_ereg_replace('{name}', escape_javascript($record['name']), $line);
$line = mb_ereg_replace('{color}', $rAttrGroup['color'], $line);
$group_line .= $line;
$nLineAttrCount2++;
}
sql_free_result($rs);
if ($group_line != '')
{
$group_img = $cache_attrib_group;
$group_img = mb_ereg_replace('{color}', $rAttrGroup['color'], $group_img);
$group_img = mb_ereg_replace('{attribs}', $group_line, $group_img);
$group_img = mb_ereg_replace('{name}', htmlspecialchars($rAttrGroup['name'], ENT_COMPAT, 'UTF-8'), $group_img);
if ($bBeginLine2 == true)
{
$attributes_img2 .= '<div id="attribs2">';
$bBeginLine2 = false;
}
$attributes_img2 .= $group_img;
$nPrevLineAttrCount2 += $nLineAttrCount2;
$nLineAttrCount2 = 0;
}
}
sql_free_result($rsAttrGroup);
if ($bBeginLine2 == false)
$attributes_img2 .= '</div>';
/* prepare default attributes */
$bBeginLine1 = true;
$nPrevLineAttrCount1 = 0;
$nLineAttrCount1 = 0;
$attributes_img1 = '';
$rsAttrGroup = sql("SELECT `attribute_groups`.`id`, IFNULL(`sys_trans_text`.`text`, `attribute_groups`.`name`) AS `name`, `attribute_categories`.`color` FROM `attribute_groups` INNER JOIN `attribute_categories` ON `attribute_groups`.`category_id`=`attribute_categories`.`id` LEFT JOIN `sys_trans` ON `attribute_groups`.`trans_id`=`sys_trans`.`id` AND `sys_trans`.`text`=`attribute_groups`.`name` LEFT JOIN `sys_trans_text` ON `sys_trans`.`id`=`sys_trans_text`.`trans_id` AND `sys_trans_text`.`lang`='&1' ORDER BY `attribute_groups`.`category_id` ASC, `attribute_groups`.`id` ASC", $locale);
while ($rAttrGroup = sql_fetch_assoc($rsAttrGroup))
{
$group_line = '';
$rs = sql("SELECT `cache_attrib`.`id`, IFNULL(`ttname`.`text`, `cache_attrib`.`name`) AS `name`, `cache_attrib`.`icon_large`, `cache_attrib`.`icon_no`, `cache_attrib`.`icon_undef`, `cache_attrib`.`search_default`, IFNULL(`ttdesc`.`text`, `cache_attrib`.`html_desc`) AS `html_desc`
FROM `cache_attrib`
LEFT JOIN `sys_trans` AS `tname` ON `cache_attrib`.`trans_id`=`tname`.`id` AND `cache_attrib`.`name`=`tname`.`text`
LEFT JOIN `sys_trans_text` AS `ttname` ON `tname`.`id`=`ttname`.`trans_id` AND `ttname`.`lang`='&1'
LEFT JOIN `sys_trans` AS `tdesc` ON `cache_attrib`.`html_desc_trans_id`=`tdesc`.`id` AND `cache_attrib`.`html_desc`=`tdesc`.`text`
LEFT JOIN `sys_trans_text` AS `ttdesc` ON `tdesc`.`id`=`ttdesc`.`trans_id` AND `ttdesc`.`lang`='&1'
WHERE `cache_attrib`.`group_id`='&2'
AND `cache_attrib`.`search_default`=1 AND `selectable`
AND NOT IFNULL(`cache_attrib`.`hidden`, 0)=1
ORDER BY `cache_attrib`.`id`", $locale, $rAttrGroup['id']);
while ($record = sql_fetch_array($rs))
{
$line = $cache_attrib_img_line2;
$line = mb_ereg_replace('{id}', $record['id'], $line);
$line = mb_ereg_replace('{text_long}', escape_javascript($record['name']), $line);
if (!isset($options['cache_attribs']))
{
$line = mb_ereg_replace('{icon}', $record['icon_undef'], $line);
}
else if (array_search($record['id'], $options['cache_attribs']) === false)
{
if (array_search($record['id'], $options['cache_attribs_not']) === false)
$line = mb_ereg_replace('{icon}', $record['icon_undef'], $line);
else
$line = mb_ereg_replace('{icon}', $record['icon_no'], $line);
}
else
$line = mb_ereg_replace('{icon}', $record['icon_large'], $line);
$line = mb_ereg_replace('{html_desc}', escape_javascript($record['html_desc']), $line);
$line = mb_ereg_replace('{name}', escape_javascript($record['name']), $line);
$line = mb_ereg_replace('{color}', $rAttrGroup['color'], $line);
$group_line .= $line;
$nLineAttrCount1++;
}
sql_free_result($rs);
if ($group_line != '')
{
$group_img = $cache_attrib_group;
$group_img = mb_ereg_replace('{color}', $rAttrGroup['color'], $group_img);
$group_img = mb_ereg_replace('{attribs}', $group_line, $group_img);
$group_img = mb_ereg_replace('{name}', htmlspecialchars($rAttrGroup['name'], ENT_COMPAT, 'UTF-8'), $group_img);
if ($bBeginLine1 == true)
{
$attributes_img1 .= '<div id="attribs1">';
$bBeginLine1 = false;
}
$attributes_img1 .= $group_img;
$nPrevLineAttrCount1 += $nLineAttrCount1;
$nLineAttrCount1 = 0;
}
}
sql_free_result($rsAttrGroup);
if ($bBeginLine1 == false)
$attributes_img1 .= '</div>';
tpl_set_var('cache_attribCat1_list', $attributes_img1);
tpl_set_var('cache_attribCat2_list', $attributes_img2);
tpl_set_var('attributes_jsarray', $attributes_jsarray);
tpl_set_var('hidopt_attribs', isset($options['cache_attribs']) ? implode(';', $options['cache_attribs']) : '');
tpl_set_var('hidopt_attribs_not', isset($options['cache_attribs_not']) ? implode(';', $options['cache_attribs_not']) : '');
tpl_set_var('fulltext', '');
tpl_set_var('ft_name_checked', 'checked="checked"');
tpl_set_var('ft_desc_checked', '');
tpl_set_var('ft_logs_checked', '');
tpl_set_var('ft_pictures_checked', '');
// fulltext options
if ($options['searchtype'] == 'byfulltext')
{
if (!isset($options['fulltext'])) $options['fulltext'] = '';
tpl_set_var('fulltext', htmlspecialchars($options['fulltext'], ENT_COMPAT, 'UTF-8'));
if (isset($options['ft_name']) && $options['ft_name']==1)
tpl_set_var('ft_name_checked', 'checked="checked"');
else
tpl_set_var('ft_name_checked', '');
if (isset($options['ft_desc']) && $options['ft_desc']==1)
tpl_set_var('ft_desc_checked', 'checked="checked"');
else
tpl_set_var('ft_desc_checked', '');
if (isset($options['ft_logs']) && $options['ft_logs']==1)
tpl_set_var('ft_logs_checked', 'checked="checked"');
else
tpl_set_var('ft_logs_checked', '');
if (isset($options['ft_pictures']) && $options['ft_pictures']==1)
tpl_set_var('ft_pictures_checked', 'checked="checked"');
else
tpl_set_var('ft_pictures_checked', '');
}
// errormeldungen
tpl_set_var('ortserror', '');
if (isset($options['error_plz']))
tpl_set_var('ortserror', $error_plz);
else if (isset($options['error_ort']))
tpl_set_var('ortserror', $error_ort);
else if (isset($options['error_locidnocoords']))
tpl_set_var('ortserror', $error_locidnocoords);
else if (isset($options['error_noort']))
tpl_set_var('ortserror', $error_noort);
tpl_set_var('fulltexterror', '');
if (isset($options['error_nofulltext']))
tpl_set_var('fulltexterror', $error_nofulltext);
else if (isset($options['error_fulltexttoolong']))
tpl_set_var('fulltexterror', $error_fulltexttoolong);
tpl_BuildTemplate();
exit;
}
//=============================================================
// Prompt the user with a list of locations when the entered
// 'ort' or 'plz' is not unique.
//=============================================================
function outputUniidSelectionForm($uniSql, $urlparams)
{
global $tplname, $locline, $stylepath, $bgcolor1, $bgcolor2, $gns_countries;
global $secondlocationname;
require_once($stylepath . '/search1/selectlocid.inc.php');
unset($urlparams['queryid']);
unset($urlparams['locid']);
$urlparams['searchto'] = 'search' . $urlparams['searchtype'];
unset($urlparams['searchtype']);
$tplname = 'search1/selectlocid';
// urlparams zusammenbauen
$urlparamString = '';
foreach ($urlparams AS $name => $param)
{
// workaround for attribs
if (is_array($param))
{
$pnew = '';
foreach ($param AS $p)
if ($pnew != '')
$pnew .= ';' . $p;
else
$pnew .= $p;
$param = $pnew;
}
if ($urlparamString != '')
$urlparamString .= '&' . $name . '=' . urlencode($param);
else
$urlparamString = $name . '=' . urlencode($param);
}
$urlparamString .= '';
sql_slave('CREATE TEMPORARY TABLE `uniids` ENGINE=MEMORY ' . $uniSql);
sql_slave('ALTER TABLE `uniids` ADD PRIMARY KEY (`uni_id`)');
// locidsite
$locidsite = isset($_REQUEST['locidsite']) ? $_REQUEST['locidsite'] : 0;
if (!is_numeric($locidsite)) $locidsite = 0;
$rsCount = sql_slave('SELECT COUNT(*) `count` FROM `uniids`');
$rCount = sql_fetch_array($rsCount);
mysql_free_result($rsCount);
tpl_set_var('resultscount', $rCount['count']);
// seitennummern erstellen
$maxsite = ceil($rCount['count'] / 20) - 1;
$pages = '';
if ($locidsite > 0)
$pages .= '<a href="search1.php?' . $urlparamString . '&locidsite=0">&lt;&lt;</a> <a href="search1.php?' . $urlparamString . '&locidsite=' . ($locidsite - 1) . '">&lt;</a> ';
else
$pages .= '&lt;&lt; &lt; ';
$frompage = $locidsite - 3;
if ($frompage < 1) $frompage = 1;
$topage = $frompage + 8;
if ($topage > $maxsite) $topage = $maxsite + 1;
for ($i = $frompage; $i <= $topage; $i++)
{
if (($locidsite + 1) == $i)
{
$pages .= '<b>' . $i . '</b> ';
}
else
{
$pages .= '<a href="search1.php?' . $urlparamString . '&locidsite=' . ($i - 1) . '">' . $i . '</a> ';
}
}
if ($locidsite < $maxsite)
$pages .= '<a href="search1.php?' . $urlparamString . '&locidsite=' . ($locidsite + 1) . '">&gt;</a> <a href="search1.php?' . $urlparamString . '&locidsite=' . $maxsite . '">&gt;&gt;</a> ';
else
$pages .= '&gt; &gt;&gt; ';
tpl_set_var('pages', $pages);
$rs = sql_slave('SELECT `gns_locations`.`rc` `rc`, `gns_locations`.`cc1` `cc1`, `gns_locations`.`admtxt1` `admtxt1`, `gns_locations`.`admtxt2` `admtxt2`, `gns_locations`.`admtxt3` `admtxt3`, `gns_locations`.`admtxt4` `admtxt4`, `gns_locations`.`uni` `uni_id`, `gns_locations`.`lon` `lon`, `gns_locations`.`lat` `lat`, `gns_locations`.`full_name` `full_name`, `uniids`.`olduni` `olduni` FROM `gns_locations`, `uniids` WHERE `uniids`.`uni_id`=`gns_locations`.`uni` ORDER BY `gns_locations`.`full_name` ASC LIMIT ' . ($locidsite * 20) . ', 20');
$nr = $locidsite * 20 + 1;
$locations = '';
while ($r = sql_fetch_array($rs))
{
$thislocation = $locline;
// locationsdings zusammenbauen
$locString = '';
if ($r['admtxt1'] != '')
{
if ($locString != '') $locString .= ' &gt; ';
$locString .= htmlspecialchars($r['admtxt1'], ENT_COMPAT, 'UTF-8');
}
if ($r['admtxt2'] != '')
{
if ($locString != '') $locString .= ' &gt; ';
$locString .= htmlspecialchars($r['admtxt2'], ENT_COMPAT, 'UTF-8');
}
/* if ($r['admtxt3'] != '')
{
if ($locString != '') $locString .= ' &gt; ';
$locString .= htmlspecialchars($r['admtxt3'], ENT_COMPAT, 'UTF-8');
}
*/ if ($r['admtxt4'] != '')
{
if ($locString != '') $locString .= ' &gt; ';
$locString .= htmlspecialchars($r['admtxt4'], ENT_COMPAT, 'UTF-8');
}
$thislocation = mb_ereg_replace('{parentlocations}', $locString, $thislocation);
// koordinaten ermitteln
$coordString = help_latToDegreeStr($r['lat']) . ' ' . help_lonToDegreeStr($r['lon']);
$thislocation = mb_ereg_replace('{coords}', htmlspecialchars($coordString, ENT_COMPAT, 'UTF-8'), $thislocation);
if ($r['olduni'] != 0)
{
// der alte name wurde durch den native-wert ersetzt
$thissecloc = $secondlocationname;
$r['olduni'] = $r['olduni'] + 0;
$rsSecLoc = sql_slave('SELECT full_name FROM gns_locations WHERE uni=' . $r['olduni']);
$rSecLoc = sql_fetch_assoc($rsSecLoc);
$thissecloc = mb_ereg_replace('{secondlocationname}', htmlspecialchars($rSecLoc['full_name'], ENT_COMPAT, 'UTF-8'), $thissecloc);
mysql_free_result($rsSecLoc);
$thislocation = mb_ereg_replace('{secondlocationname}', $thissecloc, $thislocation);
}
else
$thislocation = mb_ereg_replace('{secondlocationname}', '', $thislocation);
$thislocation = mb_ereg_replace('{locationname}', htmlspecialchars($r['full_name'], ENT_COMPAT, 'UTF-8'), $thislocation);
$thislocation = mb_ereg_replace('{urlparams}', $urlparamString . '&locid={locid}', $thislocation);
$thislocation = mb_ereg_replace('{locid}', urlencode($r['uni_id']), $thislocation);
$thislocation = mb_ereg_replace('{nr}', $nr, $thislocation);
if ($nr % 2)
$thislocation = mb_ereg_replace('{bgcolor}', $bgcolor1, $thislocation);
else
$thislocation = mb_ereg_replace('{bgcolor}', $bgcolor2, $thislocation);
$nr++;
$locations .= $thislocation . "\n";
}
mysql_free_result($rs);
tpl_set_var('locations', $locations);
tpl_BuildTemplate();
exit;
}
function outputLocidSelectionForm($locSql, $urlparams)
{
global $tplname, $locline, $stylepath, $bgcolor1, $bgcolor2;
require_once($stylepath . '/search1/selectlocid.inc.php');
unset($urlparams['queryid']);
unset($urlparams['locid']);
$urlparams['searchto'] = 'search' . $urlparams['searchtype'];
unset($urlparams['searchtype']);
$tplname = 'search1/selectlocid';
// urlparams zusammenbauen
$urlparamString = '';
foreach ($urlparams AS $name => $param)
{
// workaround for attribs
if (is_array($param))
{
$pnew = '';
foreach ($param AS $p)
if ($pnew != '')
$pnew .= ';' . $p;
else
$pnew .= $p;
$param = $pnew;
}
if ($urlparamString != '')
$urlparamString .= '&' . $name . '=' . urlencode($param);
else
$urlparamString = $name . '=' . urlencode($param);
}
$urlparamString .= '&locid={locid}';
sql_slave('CREATE TEMPORARY TABLE `locids` ENGINE=MEMORY ' . $locSql);
sql_slave('ALTER TABLE `locids` ADD PRIMARY KEY (`loc_id`)');
$rs = sql_slave('SELECT `geodb_textdata`.`loc_id` `loc_id`, `geodb_textdata`.`text_val` `text_val` FROM `geodb_textdata`, `locids` WHERE `locids`.`loc_id`=`geodb_textdata`.`loc_id` AND `geodb_textdata`.`text_type`=500100000 ORDER BY `text_val`');
$nr = 1;
$locations = '';
while ($r = sql_fetch_array($rs))
{
$thislocation = $locline;
// locationsdings zusammenbauen
$locString = '';
$land = landFromLocid($r['loc_id']);
if ($land != '') $locString .= htmlspecialchars($land, ENT_COMPAT, 'UTF-8');
$rb = regierungsbezirkFromLocid($r['loc_id']);
if ($rb != '') $locString .= ' &gt; ' . htmlspecialchars($rb, ENT_COMPAT, 'UTF-8');
$lk = landkreisFromLocid($r['loc_id']);
if ($lk != '') $locString .= ' &gt; ' . htmlspecialchars($lk, ENT_COMPAT, 'UTF-8');
$thislocation = mb_ereg_replace('{parentlocations}', $locString, $thislocation);
// koordinaten ermitteln
$r['loc_id'] = $r['loc_id'] + 0;
$rsCoords = sql_slave('SELECT `lon`, `lat` FROM `geodb_coordinates` WHERE loc_id=' . $r['loc_id'] . ' LIMIT 1');
if ($rCoords = sql_fetch_array($rsCoords))
$coordString = help_latToDegreeStr($rCoords['lat']) . ' ' . help_lonToDegreeStr($rCoords['lon']);
else
$coordString = '[keine Koordinaten vorhanden]';
$thislocation = mb_ereg_replace('{coords}', htmlspecialchars($coordString, ENT_COMPAT, 'UTF-8'), $thislocation);
$thislocation = mb_ereg_replace('{locationname}', htmlspecialchars($r['text_val'], ENT_COMPAT, 'UTF-8'), $thislocation);
$thislocation = mb_ereg_replace('{urlparams}', $urlparamString, $thislocation);
$thislocation = mb_ereg_replace('{locid}', urlencode($r['loc_id']), $thislocation);
$thislocation = mb_ereg_replace('{nr}', $nr, $thislocation);
$thislocation = mb_ereg_replace('{secondlocationname}', '', $thislocation);
if ($nr % 2)
$thislocation = mb_ereg_replace('{bgcolor}', $bgcolor1, $thislocation);
else
$thislocation = mb_ereg_replace('{bgcolor}', $bgcolor2, $thislocation);
$nr++;
$locations .= $thislocation . "\n";
}
tpl_set_var('locations', $locations);
tpl_set_var('resultscount', mysql_num_rows($rs));
tpl_set_var('pages', '&lt;&lt; &lt; 1 &gt; &gt;&gt;');
tpl_BuildTemplate();
exit;
}
?>