| Server IP : 195.130.67.5 / Your IP : 216.73.216.231 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/inetpub/wwwroot/icd/components/com_sobi2/ |
Upload File : |
<?php
/**
* @version $Id: axsearch.class.php 5472 2010-09-23 13:07:52Z Sigrid Suski $
* @package: Sigsiu Online Business Index 2 (Sobi2)
* ===================================================
* @author
* Name: Sigrid & Radek Suski, Sigsiu.NET GmbH
* Email: sobi[at]sigsiu.net
* Url: http://www.sigsiu.net
* ===================================================
* @copyright Copyright (C) 2006 - 2010 Sigsiu.NET GmbH (http://www.sigsiu.net). All rights reserved.
* @license see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL.
* You can use, redistribute this file and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
*/
defined( '_SOBI2_' ) || exit("Restricted access");
class sobiAxSearch {
function search()
{
$config =& sobi2Config::getInstance();
$database = $config->getDb();
define("_SOBI_AJAX_SEARCH", true);
header("Content-Type: application/x-javascript; "._ISO);
$searchString = sobi2Config::request($_REQUEST, "sobi2Search");
$searchString = str_replace("%20", " ", $searchString);
$searchString = $config->stringDecode( $searchString );
$searchString = addslashes($searchString);
$phrase = $config->key("search", "phrase_value", "any");
$phrase = sobi2Config::request($_REQUEST, "searchphrase", $phrase);
$searching = false;
$dataForFields = array();
$pluginsOutput = null;
$addToCount = 0;
/* gettings the fields for search */
$fields = array();
$query = "SELECT `fieldid` FROM `#__sobi2_fields` " .
"WHERE `in_search`= 2 AND `enabled` = 1 " .
"ORDER BY position";
$database->setQuery($query);
$fieldids = $database->loadObjectList();
if ($database->getErrorNum()) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
if($fieldids) {
sobi2Config::import("field.class");
foreach($fieldids as $fieldid) {
$fields[] = new sobiField($fieldid->fieldid);
}
}
/* getting input from select boxes */
$break = false;
foreach( $fields as $field ) {
$getField = sobi2Config::request( $_REQUEST, $field->fieldname, null );
$getField = $config->stringDecode( $getField );
$getFieldCookie = $config->getSobiStr( str_replace( "\\", null, $getField ) );
$getField = $config->clearSQLinjection($getField);
$config->sobi2setcookie("sobi2SearchCookie[{$field->fieldname}]", $getFieldCookie);
if( !empty( $getField ) && $getField != 'all' ) {
$searching = true;
$dataForFields += array( $field->fieldname => $getField );
/* checkbox handling */
if( $getField == '-1' ) {
$getField = 0;
}
if( !isset( $sIDs ) ) {
$sIDs = array();
}
$now = $config->getTimeAndDate();
$ids = ( !empty($sIDs) ) ? implode( " , ", $sIDs ) : null;
if ( $ids ) {
$idTest = " AND item.itemid IN ({$ids}) ";
}
else {
$idTest = null;
}
$query = "SELECT DISTINCT item.itemid " .
"FROM `#__sobi2_fields` AS sobifields " .
"LEFT JOIN `#__sobi2_fields_data` AS sdata ON sobifields.fieldid = sdata.fieldid " .
"LEFT JOIN `#__sobi2_language` AS snames ON snames.fieldid = sobifields.fieldid " .
"LEFT JOIN `#__sobi2_item` AS item ON sdata.itemid = item.itemid " .
"WHERE (snames.langKey = '{$field->fieldname}' AND sdata.data_txt = '{$getField}') {$idTest}".
" AND item.published = 1 AND (item.publish_down > '{$now}' OR item.publish_down = '{$config->nullDate}' )";
$database->setQuery( $query );
$arr = $database->loadResultArray();
if ( $database->getErrorNum() ) {
trigger_error( "axSearchSobi2: DB reports: ".$database->stderr(), E_USER_WARNING );
}
if( is_array( $arr ) && empty( $arr ) ) {
$sIDs = array();
$break = true;
break;
}
elseif( !empty($sIDs) && is_array($arr)) {
$sIDs = array_intersect($sIDs, $arr);
}
elseif(is_array($arr)) {
$sIDs = $arr;
}
elseif(!is_array($arr) ) {
$sIDs = array();
break;
}
}
}
/* search string handling */
if( !$break && ( !empty( $searchString ) && trim( $searchString ) != trim( _SOBI2_SEARCH_INPUTBOX ) && ( !isset( $sIDs ) || !empty($sIDs)))) {
$searching = true;
$searchString = $config->clearSQLinjection( trim( $searchString ) );
switch ( $phrase ) {
case 'exact':
$words = $searchString;
$where = null;
$or = null;
if( $config->key( "search", "exact_rlike", true ) ) {
$r = "R";
$wcs = "[[:<:]]";
$wce = "[[:>:]]";
if( $words[0] == "&" ) {
$words = substr( $words, 1 );
}
}
else {
$r = null;
$wcs = "%";
$wce = "%";
}
if( $config->key( "search", "title", true ) ) {
$where .= "LOWER(title) {$r}LIKE '{$wcs}{$words}{$wce}' ";
$or = "OR";
}
if( $config->key( "search", "metakey", true ) ) {
$where .= "{$or} LOWER(metakey) {$r}LIKE '{$wcs}{$words}{$wce}' ";
$or = "OR";
}
if( $config->key( "search", "metadesc", true ) ) {
$where .= "{$or} LOWER(metadesc) {$r}LIKE '{$wcs}{$words}{$wce}' ";
}
break;
case 'all':
case 'any':
/* handling for data from checkbox group or select lists */
$str = $searchString;
$opt = explode( " ", $searchString );
if( count( $opt ) ) {
$options = array();
foreach ( $opt as $o ) {
$options[] = $config->getSobiStr( $o );
}
$opt = implode( "','", $options );
$query = "SELECT GROUP_CONCAT( DISTINCT `langKey` SEPARATOR ' ' ) FROM `#__sobi2_language` WHERE `langValue` IN('{$opt}') AND `sobi2Section` = 'field_opt'";
$database->setQuery( $query );
$opt = $database->loadResult();
if ($database->getErrorNum()) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
if( $opt ) {
$str .= " ".$opt;
}
}
/* handling for data from checkbox group or select lists */
$words = explode( ' ', $str );
if( $phrase == 'all' ) {
$where = implode( "%' AND {=|=} LIKE '%", $words );
$words = implode( "%' AND LOWER(sdata.data_txt) LIKE '%", $words );
}
elseif ( $phrase == 'any' ) {
$where = implode( "%' OR {=|=} LIKE '%", $words );
$words = implode( "%' OR LOWER(sdata.data_txt) LIKE '%", $words );
}
break;
}
if( $phrase == "exact" && $config->key( "search", "exact_rlike", true ) ) {
$words = "LOWER(sdata.data_txt) RLIKE '[[:<:]]{$words}[[:>:]]'";
} else {
$words = "LOWER(sdata.data_txt) LIKE '%{$words}%'";
}
/*
* now get the fields in there we have to looking for
*/
$query = "SELECT sobifields.fieldid " .
"FROM `#__sobi2_fields` AS sobifields " .
"WHERE ((`in_search` = 1 OR `in_search` = 2 ) AND `enabled` = 1)";
$database->setQuery( $query );
$fields = $database->loadResultArray();
if ( $database->getErrorNum() ) {
trigger_error( "DB reports: ".$database->stderr(), E_USER_WARNING );
}
if( is_array( $fields ) && !empty( $fields ) ) {
$sIDs2 = array();
foreach ( $fields as $field ) {
$query = "SELECT DISTINCT `itemid` " .
"FROM `#__sobi2_fields` AS sfield " .
"LEFT JOIN `#__sobi2_fields_data` AS sdata ON sfield.fieldid = sdata.fieldid " .
"WHERE (sfield.fieldid = '{$field}' AND ( {$words} ) )";
$database->setQuery($query);
$arr = $database->loadResultArray();
if ( $database->getErrorNum() ) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
if( !empty( $arr ) ) {
$sIDs2 = array_merge( $sIDs2, $arr );
}
}
}
/* looking in the items table self */
$title = str_replace("{=|=}", "LOWER(title)", $where);
$metakey = str_replace("{=|=}", "LOWER(metakey)", $where);
$metadesc = str_replace("{=|=}", "LOWER(metadesc)", $where);
$query_array = array();
$title = $config->key( "search", "title", true ) ? "LOWER(title) LIKE '%{$title}%'" : null;
$metakey = $config->key( "search", "metakey", true ) ? "LOWER(metakey) LIKE '%{$metakey}%'" : null;
$metadesc = $config->key( "search", "metadesc", true )? "LOWER(metadesc) LIKE '%{$metadesc}%'" : null;
if ($title)
$query_array[] = $title;
if ($metakey)
$query_array[] = $metakey;
if ($metadesc)
$query_array[] = $metadesc;
if (count($query_array)) {
$query_array = implode(' OR ', $query_array);
if( $phrase != 'exact' ) {
$query = "SELECT DISTINCT `itemid` FROM `#__sobi2_item` WHERE ($query_array)";
}
else {
$query = "SELECT DISTINCT `itemid` FROM `#__sobi2_item` WHERE ({$where})";
}
$database->setQuery( $query );
$arr = $database->loadResultArray();
if ( $database->getErrorNum() ) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
if( !empty( $arr ) && isset( $sIDs2 ) ) {
$sIDs2 = array_merge( $sIDs2, $arr );
}
else {
if (!empty( $arr ))
$sIDs2 = $arr;
}
}
}
/* here we have all ids from select boxes and all ids from string search */
/* no both results */
if( isset( $sIDs ) && isset( $sIDs2 ) ) {
$sIDs = array_intersect( $sIDs, $sIDs2 );
}
else {
/* didn't search in select boxes */
if( !isset( $sIDs ) && isset( $sIDs2 ) ) {
$sIDs = $sIDs2;
}
else if( !isset( $sIDs ) ) {
$sIDs = array();
}
}
if( !isset( $sIDs ) || empty( $sIDs ) ) {
$sIDs = array();
}
$sIDs = array_unique( $sIDs );
/* searching in categories */
$cid = (int) sobi2Config::request( $_REQUEST, "sobiCid", 0 );
$config->sobi2setcookie("sobi2SearchCookie[cid]", $cid);
if( !empty( $sIDs ) || !$searching ) {
if( $cid && $cid != 0 ) {
$searching = true;
if( !is_array( $sIDs ) || empty( $sIDs ) ) {
$itids = null;
}
else {
$ids = implode( " , ", $sIDs );
$itids = "AND itemid IN ({$ids})";
}
$cids = array();
$config->getChildCats( $cid, $cids );
$cids = implode( " , ", $cids );
$query = "SELECT itemid FROM #__sobi2_cat_items_relations WHERE catid IN({$cids}) {$itids} ;";
$database->setQuery( $query );
$sIDs = $database->loadResultArray();
if ( $database->getErrorNum() ) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
}
}
/* getting plugins modifications */
if( !empty( $sIDs ) || !$searching ) {
if( !empty( $config->S2_plugins ) ) {
foreach ( $config->S2_plugins as $plugin ) {
if( method_exists( $plugin,"onAjaxSearchResult" ) ) {
$plugin->onAjaxSearchResult( $sIDs, $dataForFields, $pluginsOutput, $addToCount );
}
}
}
}
$total = count( $sIDs );
if( $total ) {
$whereId = implode( " , ", $sIDs );
$now = $config->getTimeAndDate();
$query = "SELECT COUNT(itemid) FROM `#__sobi2_item` " .
"WHERE ( itemid IN ({$whereId}) AND `published` = 1 AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) ) ";
$database->setQuery( $query );
if( $database->loadResult() ) {
$total = $database->loadResult();
}
else {
$total = 0;
}
if( $database->getErrorNum() ) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
}
$totalStr = $total + $addToCount;
$items = array();
$page = 0;
$pages = 0;
$use_original_catid = $config->key ( "details_view", "use_original_catid", 1 );
if( $total ) {
/*
* now we have all id's from items contains search strings
*/
$limit = $config->itemsInLine * $config->lineOnSite;
$pages = ceil( $total/$limit );
$limitstart = ( int ) sobi2Config::request( $_REQUEST, "SobiSearchPage", 0 );
$config->sobi2setcookie("sobi2SearchCookie[SobiSearchPage]", $limitstart);
if( $limitstart == -1 ) {
$limitstart = $pages - 1;
}
$page = $limitstart;
$limitstart *= $limit;
$limit = $config->itemsInLine * $config->lineOnSite;
$limits = " LIMIT {$limitstart}, {$limit} ";
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$config->listingOrdering = str_replace( "itemid", 'relation.itemid', $config->listingOrdering );
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon, metadesc, publish_up FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"WHERE (`published` = '1' AND (relation.catid > 1) AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$whereId}) ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering} {$limits}";
}
else {
$config->listingOrdering = str_replace( "relation.", null, $config->listingOrdering );
$query = "SELECT itemid, title, owner, image, background, icon, metadesc, publish_up FROM `#__sobi2_item` AS items " .
"WHERE ( items.itemid IN ({$whereId}) AND `published` = 1 AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) ) " .
"ORDER BY {$config->listingOrdering} {$limits}";
}
$database->setQuery( $query );
$items = $database->loadObjectList();
if ( $database->getErrorNum() ) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
//fuer den Fall dass einer einen Eintrag geloescht hat waehrend ein anderer in den Suchergebnissen navigiert
if( !count( $items ) && $total ) {
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$query = "SELECT DISTINCT relation.itemid, relation.catid, title, owner, image, background, icon, metadesc, publish_up FROM `#__sobi2_cat_items_relations` AS relation " .
"LEFT JOIN `#__sobi2_item` AS items ON relation.itemid = items.itemid " .
"WHERE (`published` = '1' AND (relation.catid > 1) AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) AND items.itemid IN({$whereId}) ) " .
"GROUP BY items.itemid ORDER BY {$config->listingOrdering} LIMIT 0, {$limit}";
}
else {
$query = "SELECT itemid, title, owner, image, background, icon, metadesc, publish_up FROM `#__sobi2_item` AS items " .
"WHERE ( items.itemid IN ({$whereId}) AND `published` = 1 AND (`publish_down` > '{$now}' OR `publish_down` = '{$config->nullDate}' ) ) " .
"ORDER BY {$config->listingOrdering} LIMIT 0, {$limit}";
$database->setQuery($query);
$items = $database->loadObjectList();
if ($database->getErrorNum()) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
}
}
}
$searchString = str_replace( "\\", null, $searchString );
if( $total ) {
defined( '_PN_LT' ) || define('_PN_LT','<');
defined( '_PN_RT' ) || define('_PN_RT','>');
defined( '_PN_START' ) || define('_PN_START','Start');
defined( '_PN_PREVIOUS' ) || define('_PN_PREVIOUS','Previous');
defined( '_PN_NEXT' ) || define('_PN_NEXT','Next');
defined( '_PN_END' ) || define('_PN_END','End');
}
$searchString = $config->getSobiStr( $searchString );
$config->sobi2setcookie("sobi2SearchCookie[sobi2Search]", $searchString);
$config->sobi2setcookie("sobi2SearchCookie[searchphrase]", $phrase);
$config->set( "searchResults", $items );
HTML_SOBI::axSearchResults($searchString, $items, $total, $pluginsOutput, $pages, $page, $totalStr);
}
function cleanAttributes($text)
{
return (preg_replace("/((\w+)(\s*)=(\s*)[\"']?.*(\w+)(\s*)\(.*)/i", '--- Removed ---', $text ));
}
function searchSobi( $catid = 0 )
{
$config =& sobi2Config::getInstance();
$mainframe =& $config->getMainframe();
/* ursprungscode in axsearch.class.ori1.php */
$database =& $config->getDb();
$sobi2Frontend =& $config->getFrontend();
$autoSearch = false;
$cid = sobi2Config::request($_REQUEST, "sobiCid", -9);
$reset = sobi2Config::request($_REQUEST, "reset", 0 );
$cookieValues = array();
if( !$reset ) {
$cookieValues = sobi2Config::request($_COOKIE, "sobi2SearchCookie", null);
if($cookieValues) {
foreach ($cookieValues as $k => $v) {
$cookieValues[$k] = $v;
}
}
}
$selectedCats = array();
if($cid < 0 && is_array($cookieValues) && key_exists("cid", $cookieValues) && !empty($cookieValues["cid"])) {
$cid = (int) $cookieValues["cid"];
}
if( $cid > 0 ) {
$config->getParentCats($cid, $selectedCats);
$selectedCats = array_reverse($selectedCats);
}
$cid = ($cid > 0) ? $cid : 0;
$autoSearch = $cid ? true : $autoSearch;
array_unshift($selectedCats, 1);
$page = (int) sobi2Config::request($_REQUEST, "SobiSearchPage", -9);
if($page < 0 && is_array($cookieValues) && key_exists("SobiSearchPage", $cookieValues) && !empty($cookieValues["SobiSearchPage"])) {
$page = (int) $cookieValues["SobiSearchPage"];
}
else {
$page = 0;
}
$searchString = sobi2Config::request($_REQUEST, "sobi2Search", null);
$searchString = str_replace("%20", " ", $searchString);
$phrase = sobi2Config::request($_REQUEST, 'searchphrase', null);
if(!$searchString && is_array($cookieValues) && key_exists("sobi2Search", $cookieValues) && !empty($cookieValues["sobi2Search"]) && trim($cookieValues["sobi2Search"]) != trim(_SOBI2_SEARCH_INPUTBOX)) {
$searchString = stripslashes( $cookieValues["sobi2Search"] );
$searchString = $config->getSobiStr( $searchString );
}
if(!$phrase && is_array($cookieValues) && key_exists("searchphrase", $cookieValues) && !empty($cookieValues["searchphrase"])) {
$phrase = $cookieValues["searchphrase"];
}
if (!$phrase)
$phrase = $config->key("search", "phrase_value");
$autoSearch = $searchString ? true : $autoSearch;
$fieldData = array();
$fieldsNames = array();
/*
* at firts make the html mask
*/
echo $sobi2Frontend->getHeader();
/*////////////////////////////////////////////////////////////////////////////////////////////
* build drop' down lists
*////////////////////////////////////////////////////////////////////////////////////////////
$dropListsArray = array();
/*
* get all fields
*/
$fields = array();
$query = "SELECT `fieldid` FROM `#__sobi2_fields` " .
"WHERE `in_search`= 2 AND `enabled` = 1 " .
"ORDER BY position";
$database->setQuery($query);
$fieldids = $database->loadObjectList();
if ($database->getErrorNum()) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
if($fieldids) {
sobi2Config::import("field.class");
foreach($fieldids as $fieldid) {
$fields[] = new sobiField($fieldid->fieldid);
}
}
if( count( $fields ) ) {
foreach($fields as $field) {
$selected = sobi2Config::request($_REQUEST, $field->fieldname, null );
$fieldsNames[] = $field->fieldname;
if(!$selected && is_array($cookieValues) && key_exists($field->fieldname, $cookieValues) && !empty($cookieValues[$field->fieldname]) && $cookieValues[$field->fieldname] != 'all') {
$selected = stripslashes( $cookieValues[$field->fieldname] );
}
$autoSearch = $selected ? true : $autoSearch;
if(($field->fieldType == 5 || $field->fieldType == 6) && !(empty($field->definedValues))) {
$field->definedValues = $field->getListValues( null, true, true );
$options = array();
if(!$field->selectLabel) {
$options[] = sobiHTML::makeOption('all', _SOBI2_SEARCH_BOX_SELECT);
}
foreach ($field->definedValues as $option => $value) {
$options[] = sobiHTML::makeOption(sobiAxSearch::cleanAttributes($option), sobiAxSearch::cleanAttributes($value));
}
$selectList = sobiHTML::selectList( $options, $config->getSobiStr($field->fieldname), 'size="1" class="inputbox" id="'. $field->fieldname.'"', 'value', 'text', sobi2Config::request($_REQUEST, $field->fieldname, $selected ) );
$dropListsArray = $dropListsArray + array($field->label => $selectList);
}
else {
/*
* get data for this fields
*/
if( $config->ajaxSearchCatsFieldsDepend ) {
/**
* @author Richard Jones
* Selected category to displayed fields depency
*/
if ( $cid ) {
$cids = array();
$config->getChildCats($cid, $cids);
$cids = implode(" , ", $cids);
}
$results = 0;
if ($cid != 0) {
$query = "SELECT DISTINCT data_txt as fielddata, sobifields.fieldType FROM `#__sobi2_cat_items_relations` AS catitems, `#__sobi2_fields` AS sobifields " .
"LEFT JOIN `#__sobi2_fields_data` AS fielddata ON sobifields.fieldid = fielddata.fieldid " .
"LEFT JOIN `#__sobi2_language` AS labels ON sobifields.fieldid = labels.fieldid " .
"WHERE (sobifields.fieldid = {$field->fieldid} AND catitems.catid IN ({$cids}) AND fielddata.itemid = catitems.itemid) ORDER BY fielddata";
}
else {
$query = "SELECT DISTINCT data_txt as fielddata, sobifields.fieldType FROM `#__sobi2_fields` AS sobifields " .
"LEFT JOIN `#__sobi2_fields_data` AS fielddata ON sobifields.fieldid = fielddata.fieldid " .
"LEFT JOIN `#__sobi2_language` AS labels ON sobifields.fieldid = labels.fieldid " .
"WHERE sobifields.fieldid = {$field->fieldid} ORDER BY fielddata";
}
$database->setQuery( $query );
$results = $database->loadObjectList();
if ($database->getErrorNum()) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
}
else {
$query = "SELECT DISTINCT data_txt as fielddata, sobifields.fieldType FROM `#__sobi2_fields` AS sobifields " .
"LEFT JOIN `#__sobi2_fields_data` AS fielddata ON sobifields.fieldid = fielddata.fieldid " .
"LEFT JOIN `#__sobi2_language` AS labels ON sobifields.fieldid = labels.fieldid " .
"WHERE sobifields.fieldid = {$field->fieldid} ORDER BY fielddata";
$database->setQuery( $query );
$results = $database->loadObjectList();
if ($database->getErrorNum()) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
}
/*
* get all options for this field
*/
if( count( $results ) ) {
$fieldData = array();
$fieldData[] = sobiHTML::makeOption( 'all', _SOBI2_SEARCH_BOX_SELECT );
foreach($results as $result) {
if($result->fielddata) {
if($result->fieldType == 3) {
$label = $result->fielddata ? _SOBI2_CHECKBOX_YES : _SOBI2_CHECKBOX_NO;
$data = $result->fielddata ? 1 : 0;
$fieldData[] = sobiHTML::makeOption( '-1', _SOBI2_CHECKBOX_NO);
}
else {
$data = $label = $config->getSobiStr($result->fielddata);
}
$fieldData[] = sobiHTML::makeOption(sobiAxSearch::cleanAttributes($data), sobiAxSearch::cleanAttributes($label));
}
}
$selectList = array($field->label => sobiHTML::selectList( $fieldData, $config->getSobiStr($field->fieldname), 'size="1" class="inputbox" id="'. $config->getSobiStr($field->fieldname).'"', 'value', 'text', $selected ));
$dropListsArray = $dropListsArray + $selectList;
}
}
}
}
/*calling plugins*/
if(!empty($config->S2_plugins)) {
foreach($config->S2_plugins as $plugin) {
if(method_exists($plugin, "onAjaxSearchStart")) {
$plugin->onAjaxSearchStart($searchString, $phrase, $dropListsArray, $cookieValues, $fieldsNames, $autoSearch);
}
}
}
$autoSearch = ( count( $_GET ) > 5 ) ? true : $autoSearch;
$mainframe->addCustomHeadTag( sobiAxSearch::searchAjaxScript($autoSearch, $fieldsNames));
sobiAxSearch::showSearchForm($dropListsArray, $searchString, $phrase, $cid, $page, $selectedCats);
echo $sobi2Frontend->getFooter();
}
function showSearchForm($dropListsArray, $searchString, $phrase, $cid, $page, $selectedCats)
{
$config =& sobi2Config::getInstance();
$iso = defined("_ISO") ? explode( '=', _ISO ) : array( null, "UTF-8");
$index = $config->key( "search", "ajax_target_file", "index2.php" );
if(!$searchString) {
$String = _SOBI2_SEARCH_INPUTBOX;
}
else {
$String = $searchString;
}
if( $config->showComponentDescInSearch ) {
sobi2Config::import("category.class");
$sobi2Desc = new sobi2Category( 1 );
if( $config->key( "general", "com_desc_exec_mambots", true ) ) {
$sobi2Desc->description = HTML_SOBI::execMambots($sobi2Desc->description);
}
?>
<table class="sobi2CompDesc" width="100%">
<tr>
<td>
<?php if($sobi2Desc->image) { ?>
<img src="<?php echo $config->liveSite;?><?php echo $config->catImagesFolder;?><?php echo $sobi2Desc->image; ?>" style="float:<?php echo $sobi2Desc->image_position;?>" alt="<?php echo $config->componentName;?>" title="<?php echo $config->componentName;?>"/>
<?php } ?>
<?php echo $sobi2Desc->description;?>
</td>
</tr>
</table>
<?php
if(count($config->S2_plugins)) {
foreach($config->S2_plugins as $plugin) {
if(method_exists($plugin, "onShowSearchForm")) {
$plugin->onShowSearchForm();
}
}
}
}
?>
<form id="sobiSearchFormContainer" accept-charset="<?php echo $iso[1];?>" action="<?php echo $config->liveSite; ?>/<?php echo $index;?>" method="get" name="sobiSearchFormContainer">
<?php if( $config->key( "search", "do_not_show_search_form" ) ) { ?>
<div style="display:none">
<?php } ?>
<?php $show_search_box = $config->key("search", "search_box", true ); ?>
<table class="sobi2eSearchForm">
<tr>
<td id="sobi2eSearchLabel"><?php if($show_search_box) { echo _SOBI2_SEARCH_FOR; } ?></td>
<td id="sobi2eSearchBox">
<?php if($show_search_box) { ?>
<input name="sobi2Search" id="sobi2Search" class="inputbox" value="<?php echo $String; ?>" onclick="if (this.value == '<?php echo _SOBI2_SEARCH_INPUTBOX; ?>') this.value = '';" onblur="if (this.value == '') this.value = '<?php echo _SOBI2_SEARCH_INPUTBOX; ?>';"/>
<?php } ?>
</td>
<td id="sobi2eSearchButton">
<?php if($show_search_box) { ?>
<input type="submit" id="sobiSearchSubmitBt" name="search" onmousedown="$('SobiSearchPage').value = 0" onkeydown="$('SobiSearchPage').value = 0" class="button" value="<?php echo _SOBI2_SEARCH_H; ?>"/>
<?php } ?>
</td>
<td id="sobi2eSearchEmptyCell">
</td>
</tr>
<tr>
<td colspan="4" id="sobi2eSearchPhrases">
<?php if( $config->key("search", "phrase_any", true )) { ?>
<input type="radio" <?php if($phrase == 'any' || $phrase != 'all' || $phrase != 'exact' ) echo "checked=\"checked\"" ?> name="searchphrase" id="searchphraseany" value="any" />
<label for="searchphraseany"><?php echo _SOBI2_SEARCH_ANY ?></label>
<?php } ?>
<?php if( $config->key("search", "phrase_all", true )) { ?>
<input type="radio" <?php if($phrase == 'all') echo "checked=\"checked\"" ?> name="searchphrase" id="searchphraseall" value="all" />
<label for="searchphraseall"><?php echo _SOBI2_SEARCH_ALL ?></label>
<?php } ?>
<?php if( $config->key("search", "phrase_exact", true )) { ?>
<input type="radio" <?php if($phrase == 'exact') echo "checked=\"checked\"" ?> name="searchphrase" id="searchphraseexact" value="exact" />
<label for="searchphraseexact"><?php echo _SOBI2_SEARCH_EXACT ?></label>
<?php } ?>
</td>
</tr>
<tr>
<td colspan="4" id="sobi2eSearchButtonLine">
<?php if( !$show_search_box) { ?>
<input type="submit" id="sobiSearchSubmitBt" name="search" onmousedown="$('SobiSearchPage').value = 0" onkeydown="$('SobiSearchPage').value = 0" class="button" value="<?php echo _SOBI2_SEARCH_H; ?>"/>
<?php } ?>
<?php if($config->ajaxSearchUseSlider) { ?>
<input type="button" id="sobiSearchFormExtOptToggle" class="button" name="sobiSearchFormExtOptToggle" value="<?php echo _SOBI2_SEARCH_TOOGLE_EXTENDED; ?>"/>
<?php } ?>
<input type="button" id="sobiSearchFormReset" class="button" name="sobiSearchFormReset" title="<?php echo _SOBI2_SEARCH_RESET_FORM_TITLE;?>" value="<?php echo _SOBI2_SEARCH_RESET_FORM; ?>" onclick="resetSobi2SearchForm()"/>
<br/><br/>
</td>
</tr>
</table>
<div id="sobiSearchFormExtOpt">
<table class="sobi2eSearchForm">
<?php
if(!$config->ajaxSearchCatsForFields) {
if(count($dropListsArray)) {
foreach($dropListsArray as $label => $dropList) {
echo "<tr><td class=\"sobi2eSearchLabel\">{$label}</td><td colspan='2'>{$dropList}</td></tr>";
}
}
}
?>
<?php if( $config->key("search", "cats", true )) { ?>
<tr>
<td style="vertical-align:top;"><?php echo _SOBI2_SEARCH_TOOGLE_CATS; ?></td>
<td colspan='2'>
<?php if($config->ajaxSearchUseSlider) { ?>
<div id="sobiSearchFormCatsSelection" <?php if($config->ajaxSearchUseSlider) { ?> style="height:<?php echo $config->ajaxSearchCatsContHeight;?>px;" <?php } ?>>
<?php } ?>
<?php
if( !$config->key( "search", "do_not_show_search_form" ) ) {
echo sobiAxSearch::axSearchCatChooser( $selectedCats, $cid );
}
?>
<?php if($config->ajaxSearchUseSlider) { ?>
</div>
<?php } ?>
</td>
</tr>
<?php } ?>
<?php
if($config->ajaxSearchCatsForFields) {
if(count($dropListsArray)) {
foreach($dropListsArray as $label => $dropList) {
echo "<tr><td class=\"sobi2eSearchLabel\">{$label}</td><td colspan=\"2\">{$dropList}</td></tr>";
}
}
}
?>
</table>
</div>
<?php if( $config->key( "search", "do_not_show_search_form" ) ) { ?>
</div>
<?php } ?>
<input type="hidden" name="option" value="com_sobi2"/>
<input type="hidden" name="Itemid" value="<?php echo $config->sobi2Itemid; ?>"/>
<input type="hidden" name="no_html" value="1"/>
<input type="hidden" name="sobi2Task" value="axSearch"/>
<input type="hidden" name="sobiCid" id="sobiCid" value="<?php echo $cid; ?>"/>
<input type="hidden" id="SobiSearchPage" name="SobiSearchPage" value="<?php echo $page;?>"/>
<?php if(!$show_search_box) { ?>
<input type="hidden" name="sobi2Search" value="<?php echo _SOBI2_SEARCH_INPUTBOX; ?>"/>
<?php } ?>
</form>
<div id="sobiSearchResponseContainer"></div>
<?php
}
function axSearchCatChooser( $selectedCats, $cid )
{
$config =& sobi2Config::getInstance();
if( count( $selectedCats ) ) {
$dropsy = '<div id="SobiSearchForm2dropsy" style="margin-left: 0px;">';
$catsChildsJs = null;
$count = 0;
$lastBox = 0;
foreach( $selectedCats as $cid ) {
$cats = $config->getCategories( $cid );
if( is_array( $cats ) && !empty( $cats ) ) {
$dropsy .= "\n\n\n\n<div id='sdrops_{$count}'>";
$Select = array();
$Select[] = sobiHTML::makeOption( 0, _SOBI2_SEARCH_CATBOX_SELECT);
$js = "addSobiSearchFormCatBox(this.options[this.selectedIndex].value,{$count});";
foreach ($cats as $cat) {
$cat->name = str_replace("\\","",$cat->name);
$cat->name = str_replace("\\\\","",$cat->name);
$cat->name = $config->getSobiStr( $cat->name );
$Select[] = sobiHTML::makeOption( $cat->catid, $cat->name);
$c = $config->catHasChild($cat->catid) ? 1 : 0;
$catsChildsJs .= "\n SobiSearchFormCatsChilds[{$cat->catid}] = '{$c}';";
}
$selected = key_exists( $count+1, $selectedCats ) ? $selectedCats[$count+1] : $cid;
$dropsy .= sobiHTML::selectList( $Select, "SobiCatSelected_{$count}", 'id="SobiCatSelected_'.$count.'" size="1" class="inputbox catChooseBox" onchange="'.$js.'"', 'value', 'text', $selected);
$dropsy .= "</div>\n\n\n\n";
$lastBox = $count;
}
$count++;
}
$dropsy .= "\n\n<script type=\"text/javascript\">\n\n {$catsChildsJs}\n\n SobiSearchFormComboBxCounter = {$lastBox}; \n\n</script>";
$dropsy .= "</div>";
return $dropsy;
}
else {
return null;
}
}
function searchAjaxScript( $autoSearch, $fieldsNames )
{
$config =& sobi2Config::getInstance();
$pluginReset = null;
if(count($config->S2_plugins)) {
foreach($config->S2_plugins as $plugin) {
if(method_exists($plugin, "addToSearchJsResetScript")) {
$pluginReset .= $plugin->addToSearchJsResetScript();
}
}
}
if ( $config->key("search", "use_own_mootools", true ) ) {
$config->loadScript("mootools");
}
$index = $config->key( "search", "ajax_target_file", "index2.php" );
$url = "{$config->liveSite}/{$index}?option=com_sobi2&no_html=1&sobi2Task=SigsiuTreeMenu&Itemid={$config->sobi2Itemid}&catid=";
$fieldsUrl = "{$config->liveSite}/{$index}?option=com_sobi2&no_html=1&sobi2Task=GetSearchField&Itemid={$config->sobi2Itemid}&catid=";
ob_start();
?>
<script type="text/javascript">
/* <![CDATA[ */
var Sobi2FieldNames = new Array();
<?php
$c = 0;
foreach ($fieldsNames as $name) {
echo "\n\t\t\tSobi2FieldNames[{$c}] = \"{$name}\";";
$c++;
}
echo "\n";
?>
function resetSobi2SearchForm() {
<?php if( $config->ajaxSearchCatsFieldsDepend) { ?>
fieldsUrl = "<?php echo $fieldsUrl; ?>0";
SobiSearchFieldsSendRequest(fieldsUrl,0);
<?php } ?>
var SobiCookieRemove = " = 0; expires=0; path=/;";
<?php if( $config->key("search", "search_box", true )) { ?>
$('sobi2Search').value = "<?php echo _SOBI2_SEARCH_INPUTBOX; ?>";
document.cookie = "sobi2SearchCookie[sobi2Search]" + SobiCookieRemove;
<?php } ?>
document.cookie = "sobi2SearchCookie[searchphrase]" + SobiCookieRemove;
<?php if ($config->key("search", "phrase_any", true ) && ($config->key("search", "phrase_value", "any") == "any")) { ?>
$("searchphraseany").checked = true;
<?php } elseif ($config->key("search", "phrase_all", true ) && ($config->key("search", "phrase_value", "all") == "all")) { ?>
$("searchphraseall").checked = true;
<?php } elseif ($config->key("search", "phrase_exact", true ) && ($config->key("search", "phrase_value", "exact") == "exact")) { ?>
$("searchphraseexact").checked = true;
<?php } ?>
$("sobiCid").value = 0;
document.cookie = "sobi2SearchCookie[cid]" + SobiCookieRemove;
$("SobiSearchPage").value = 0;
document.cookie = "sobi2SearchCookie[SobiSearchPage]" + SobiCookieRemove;
<?php echo $pluginReset;?>
for(i=0; i < Sobi2FieldNames.length; i++) {
$(Sobi2FieldNames[i]).selectedIndex = 0;
document.cookie = "sobi2SearchCookie[" + Sobi2FieldNames[i] + "]" + SobiCookieRemove;
}
<?php if( $config->key("search", "cats", true )) { ?>
for(SobiSearchFormComboBxCounter; SobiSearchFormComboBxCounter > 0; SobiSearchFormComboBxCounter--) {
if(SobiSearchFormComboBxCounter > 0) {
chBox = document.getElementById("sdrops_" + SobiSearchFormComboBxCounter);
chBox.parentNode.removeChild(chBox);
}
}
SobiSearchFormComboBxCounter = 0;
$("SobiCatSelected_0").selectedIndex = 0;
<?php } ?>
}
window.addEvent('<?php echo $config->key( "search","mootools_event_method", "load" );?>', function() {
var sobiSearchResponseContainer = new Fx.Slide('sobiSearchResponseContainer');
<?php if($config->ajaxSearchUseSlider) { ?>
var sobiSearchFormExtOpt = new Fx.Slide('sobiSearchFormExtOpt');
<?php if($config->ajaxSearchSlidInOnStart) { ?>
sobiSearchFormExtOpt.slideOut();
<?php } ?>
$('sobiSearchFormExtOptToggle').addEvent('click', function(e){
e = new Event(e);
sobiSearchFormExtOpt.toggle();
e.stop();
});
<?php } ?>
$('sobiSearchFormContainer').addEvent('submit', function(e) {
new Event(e).stop();
var log = $('sobiSearchResponseContainer').empty().addClass('ajax-loading');
var url = "<?php echo $config->liveSite; ?>/<?php echo $index;?>?" + $('sobiSearchFormContainer').toQueryString();
var query = new Ajax(url, {
method: 'get',
onComplete: function() {
log.removeClass('ajax-loading');
},
update: log
});
query.request();
<?php if($config->ajaxSearchSlidInAfterSearch && $config->ajaxSearchUseSlider) { ?>
sobiSearchFormExtOpt.slideOut();
<?php } ?>
});
<?php if($autoSearch) { ?>
$('sobiSearchSubmitBt').click();
<?php } ?>
});
var SobiSearchFormComboBxCounter = 0;
var SobiSearchFormCatsChilds = new Array();
var SobiSearchFormCatsNames = new Array();
function addSobiSearchFormCatBox(cid, c) {
if(cid == 0) {
if(c == 0) {
$("sobiCid").value = cid;
}
else {
box = c - 1;
$("sobiCid").value = $("SobiCatSelected_" + box).options[$("SobiCatSelected_" + box).selectedIndex].value;
}
if(c < SobiSearchFormComboBxCounter) {
for(SobiSearchFormComboBxCounter; SobiSearchFormComboBxCounter > c; SobiSearchFormComboBxCounter--) {
if(SobiSearchFormComboBxCounter > 0) {
chBox = document.getElementById("sdrops_" + SobiSearchFormComboBxCounter);
chBox.parentNode.removeChild(chBox);
}
}
SobiSearchFormComboBxCounter = c;
}
}
if(cid != 0) {
$("sobiCid").value = cid;
url = "<?php echo $url; ?>" + cid;
SobiSearchFormComboSendRequest(url,c);
}
}
<?php
/**
* @author Radek Suski, Richard Jones
* Selected category to displayed fields depency
*/
if( $config->ajaxSearchCatsFieldsDepend) {
?>
function SobiSearchFieldsSendRequest(url,c)
{
var SobiSearchFormCatHttpRequest;
if (window.XMLHttpRequest) {
SobiSearchFieldsHttpRequest = new XMLHttpRequest();
if (SobiSearchFieldsHttpRequest.overrideMimeType) {
SobiSearchFieldsHttpRequest.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) {
try { SobiSearchFieldsHttpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) {
try { SobiSearchFieldsHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) {}
}
}
if (!SobiSearchFieldsHttpRequest) {
alert('Sorry but I Cannot create an XMLHTTP instance');
return false;
}
SobiSearchFieldsHttpRequest.onreadystatechange = function()
{
if (SobiSearchFieldsHttpRequest.readyState == 4 && SobiSearchFieldsHttpRequest.status == 200) {
SobiSearchFieldsFill(SobiSearchFieldsHttpRequest,c);
}
};
SobiSearchFieldsHttpRequest.open('GET', url, true);
SobiSearchFieldsHttpRequest.send(null);
}
function SobiProcessField(field)
{
var fieldId = field.getElementsByTagName('fieldId').item(0).firstChild.data;
fieldId = fieldId.replace("\\", "");
var fieldValues = field.getElementsByTagName('fieldValue');
liste = document.getElementById( fieldId );
liste.length = 0;
liste.options[0] = new Option( '', 'all', true, true );
liste.options[0].innerHTML = '<?php echo _SOBI2_SEARCH_CATBOX_SELECT;?>';
for( var i = 0; i< fieldValues.length; i++ ) {
liste.options[liste.length] = new Option( fieldValues[i].firstChild.data, fieldValues[i].firstChild.data, false, false );
}
}
function SobiSearchFieldsFill(XMLDoc,c)
{
if(!XMLDoc.responseXML) { return null; }
var r = XMLDoc.responseXML;
var fields = r.getElementsByTagName("field");
if(fields.length > 0) {
for(i = 0; i < fields.length; i++) {
var field = fields[i];
SobiProcessField(field);
}
}
}
<?php } ?>
function SobiSearchFormComboSendRequest(url,c) {
var SobiSearchFormCatHttpRequest;
if (window.XMLHttpRequest) {
SobiSearchFormCatHttpRequest = new XMLHttpRequest();
if (SobiSearchFormCatHttpRequest.overrideMimeType) {
SobiSearchFormCatHttpRequest.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) {
try { SobiSearchFormCatHttpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) {
try { SobiSearchFormCatHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) {}
}
}
if (!SobiSearchFormCatHttpRequest) {
alert('Sorry but I Cannot create an XMLHTTP instance');
return false;
}
SobiSearchFormCatHttpRequest.onreadystatechange = function() {
if (SobiSearchFormCatHttpRequest.readyState == 4 && SobiSearchFormCatHttpRequest.status == 200)
SobiSearchFormCatGetSubcats(SobiSearchFormCatHttpRequest,c);
};
SobiSearchFormCatHttpRequest.open('GET', url, true);
SobiSearchFormCatHttpRequest.send(null);
}
function SobiSearchFormCatGetSubcats(XMLDoc,c) {
if(!XMLDoc.responseXML) {
return null;
}
var r = XMLDoc.responseXML;
var categories = r.getElementsByTagName("category");
if(c < SobiSearchFormComboBxCounter) {
for(SobiSearchFormComboBxCounter; SobiSearchFormComboBxCounter > c; SobiSearchFormComboBxCounter--) {
if(SobiSearchFormComboBxCounter > 0) {
chBox = document.getElementById("sdrops_" + SobiSearchFormComboBxCounter);
chBox.parentNode.removeChild(chBox);
}
}
SobiSearchFormComboBxCounter = c;
}
if(categories.length > 0) {
SobiSearchFormComboBxCounter++;
html = "";
html = html + "<div id='sdrops_"+SobiSearchFormComboBxCounter+"'><select class='inputbox catChooseBox' id='SobiCatSelected_" + SobiSearchFormComboBxCounter + "' onchange='addSobiSearchFormCatBox(this.options[this.selectedIndex].value," + SobiSearchFormComboBxCounter + ");'><option value='0'><?php echo _SOBI2_SEARCH_CATBOX_SELECT;?></option>"
for(i = 0; i < categories.length; i++) {
var category = categories[i];
var catid = category.getElementsByTagName('catid').item(0).firstChild.data;
var name = category.getElementsByTagName('name').item(0).firstChild.data;
var childs = category.getElementsByTagName('childs').item(0).firstChild.data;
var pid = category.getElementsByTagName('parentid').item(0).firstChild.data;
name = name.replace("\\", "");
SobiSearchFormCatsNames[catid] = name;
html = html + "<option value='"+catid+"'>"+name+"</option>"
SobiSearchFormCatsChilds[catid] = childs;
}
html = html + "</select>\n\n</div>";
span = document.createElement("span");
span.innerHTML = html;
document.getElementById("SobiSearchForm2dropsy").appendChild(span);
}
<?php
/**
* @author Richard Jones
* Selected category to displayed fields depency
*/
if( $config->ajaxSearchCatsFieldsDepend) {
?>
fieldsUrl = "<?php echo $fieldsUrl; ?>" + $("sobiCid").value;
SobiSearchFieldsSendRequest(fieldsUrl,c);
<?php } ?>
}
function sobiSearchRes(page) {
$('SobiSearchPage').value = page;
$('sobiSearchSubmitBt').click();
}
/* ]]> */
</script>
<style type="text/css">
<!--
#sobiSearchResponseContainer.ajax-loading {
padding: 20px 0;
background: url(<?php echo $config->liveSite; ?>/components/com_sobi2/images/spinner.gif) no-repeat center;
}
-->
</style>
<?php
$script = ob_get_contents();
ob_end_clean();
return $script;
}
/**
* @author Richard Jones
* Selected category to displayed fields depency
* @since RC 2.8.4
* @param int $catid
*/
function getSearchFields( $cid )
{
$config =& sobi2Config::getInstance();
$database =& $config->getDb();
$fields = array();
$allFields = array();
$query = "SELECT `fieldid` FROM `#__sobi2_fields` " .
"WHERE `in_search`= 2 AND `enabled` = 1 " .
"ORDER BY position";
$database->setQuery($query);
$fieldids = $database->loadObjectList();
if ($database->getErrorNum()) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
if( count( $fieldids ) ) {
sobi2Config::import("field.class");
foreach($fieldids as $fieldid) {
$fields[] = new sobiField($fieldid->fieldid);
}
}
if( count( $fields ) ) {
foreach($fields as $field) {
if( ( $field->fieldType == 5 || $field->fieldType == 6 ) && ! ( empty( $field->definedValues ) ) ) {
if ( $cid ) {
$cids = array();
$config->getChildCats($cid, $cids);
$cids = implode(" , ", $cids);
$query = "SELECT DISTINCT data_txt as fielddata FROM `#__sobi2_cat_items_relations` AS catitems, `#__sobi2_fields` AS sobifields ,`#__sobi2_fields_data` AS fielddata WHERE (sobifields.fieldid = {$field->fieldid} AND catitems.catid IN ({$cids}) AND fielddata.itemid = catitems.itemid AND sobifields.fieldid = fielddata.fieldid ) ORDER BY fielddata";
$database->setQuery( $query );
$selVal = $database->loadResultArray();
if ($database->getErrorNum()) {
trigger_error("getSearchFields: DB reports: ".$database->stderr(), E_USER_WARNING);
}
}
$field->definedValues = $field->getListValues( null, true, true, true );
$names = array();
$fieldArray = array();
foreach ($field->definedValues as $option => $value) {
if( $cid && is_array( $selVal ) ) {
if( in_array( $option, $selVal ) ) {
$names[$option] = $value;
}
}
else {
$names[$option] = $value;
}
}
$fieldArray['fieldId'] = $field->fieldname;
$fieldArray['fieldNames'] = $names;
$allFields[] = $fieldArray;
}
else {
/*
* get data for this fields
*/
if ( $cid ) {
$cids = array();
$config->getChildCats($cid, $cids);
$cids = implode(" , ", $cids);
}
if ( $cid ) {
$query = "SELECT DISTINCT data_txt as fielddata, sobifields.fieldType FROM `#__sobi2_cat_items_relations` AS catitems, `#__sobi2_fields` AS sobifields " .
",`#__sobi2_fields_data` AS fielddata " .
"WHERE (sobifields.fieldid = {$field->fieldid} AND catitems.catid IN ({$cids}) AND fielddata.itemid = catitems.itemid AND sobifields.fieldid = fielddata.fieldid) ORDER BY fielddata";
}
else {
$query = "SELECT DISTINCT data_txt as fielddata, sobifields.fieldType FROM `#__sobi2_fields` AS sobifields " .
"LEFT JOIN `#__sobi2_fields_data` AS fielddata ON sobifields.fieldid = fielddata.fieldid " .
"LEFT JOIN `#__sobi2_language` AS labels ON sobifields.fieldid = labels.fieldid " .
"WHERE sobifields.fieldid = {$field->fieldid} ORDER BY fielddata";
}
$database->setQuery( $query );
$results = $database->loadObjectList();
if ($database->getErrorNum()) {
trigger_error("getSearchFields: DB reports: ".$database->stderr(), E_USER_WARNING);
}
/*
* get all options for this field
*/
if( count( $results ) ) {
$fieldArray = array();
$names = array();
foreach($results as $result) {
if($result->fielddata) {
if($result->fieldType == 3) {
$label = $result->fielddata ? _SOBI2_CHECKBOX_YES : _SOBI2_CHECKBOX_NO;
$data = $result->fielddata ? 1 : 0;
}
else {
$data = $label = $config->getSobiStr($result->fielddata);
}
$names[$label] = $data;
}
}
$fieldArray['fieldId'] = $field->fieldname;
$fieldArray['fieldNames'] = $names;
$allFields[] = $fieldArray;
}
}
}
}
$iso = explode( '=', _ISO );
$iso = strtoupper($iso[1]);
ob_clean();
ob_end_clean();
if(ob_get_length()) {
@ob_clean();
}
if(ob_get_length()) {
@ob_end_clean();
}
header('Content-type: application/xml');
echo "<?xml version=\"1.0\" encoding=\"{$iso}\"?>";
echo "\n<root>";
if( count( $allFields ) ) {
foreach ( $allFields as $field ) {
echo "\n\t<field>\n\t\t<fieldId>{$field['fieldId']}</fieldId>\n\t\t<fieldValues>";
foreach ($field['fieldNames'] as $fopt => $fname ) {
$fname = strip_tags( $fname );
$fname = str_replace( " ", " ", $fname );
echo "\n\t\t\t<fieldValue name=\"{$fopt}\">{$fname}</fieldValue>";
}
echo "\n\t\t</fieldValues>";
echo "</field>\n";
}
}
echo "\n</root>";
/* we don't need any others information so we can go out */
exit();
}
/**
* Enter description here...
*
* @param string $searchString
* @param array $items
* @param array $fieldData
* @param int $total
* @param string $phrase
* @param string $pluginsOutput
* @param int $pages
* @param int $currPage
*/
function axSearchResults($searchString, $items, $total, $pluginsOutput, $pages, $currPage, $totalStr )
{
$config =& sobi2Config::getInstance();
$my = &$config->getUser();
if( trim( $searchString ) == trim( _SOBI2_SEARCH_INPUTBOX ) ) {
$resultsFor = _SOBI2_SEARCH_ALL_ENTRIES;
}
else {
$resultsFor = $searchString;
}
$template = sobi2Config::translatePath( "{$config->templatesDir}|{$config->defTemplate}|sobi2.vc.tmpl" );
if( isset( $config->templates["ajax_search"] ) && $config->templates["ajax_search"] ) {
if( !$template = sobi2Config::translatePath( "{$config->templatesDir}|{$config->templates["ajax_search"]}|sobi2.vc.tmpl" ) ) {
$template = sobi2Config::translatePath( "{$config->templatesDir}|{$config->defTemplate}|sobi2.vc.tmpl" );
}
}
if( !$template ) {
$template = sobi2Config::translatePath( "{$config->templatesDir}|default|sobi2.vc.tmpl" );
}
?>
<table>
<tr>
<th class="componentheading"><?php echo _SOBI2_SEARCH_RESULTS; ?></th>
</tr>
<tr>
<td>
<?php echo _SOBI2_SEARCH_RESULTS_FOUND; ?> <?php echo $totalStr; ?>
<?php echo _SOBI2_SEARCH_RESULTS_FOUND_RESULTS; ?>
<span id="sobi2SearchResultsSerchingString"><?php echo $resultsFor; ?></span>
</td>
</tr>
</table>
<?php echo $pluginsOutput; ?>
<?php
$tdTrCounter = 0;
if( count($items) ) {
echo "\n\t <table class='sobi2Listing'> \n\t\t <tr>";
$width = 100/$config->itemsInLine;
$width = "style='width: {$width}%; ";
if($config->useDetailsView && file_exists( $template )) {
$fetchErr = intval(sobi2Config::request($_REQUEST, 'err', 0));
if( $config->debugTmpl && !$fetchErr ) {
sobi2Config::parseTemplate( $template );
}
else {
sobi2Config::import( $template, "absolute" );
}
sobiAxSearch::searchResultsWithTemplate($items,$width,$config->liveSite,$config,0,$tdTrCounter,$my);
}
else {
foreach($items as $item) {
$item->title = $config->getSobiStr($item->title);
$sobi2Data = sobiAxSearch::searchDetails($item);
$catid = 0;
$use_original_catid = $config->key ( "details_view", "use_original_catid", 1 );
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$catid =$item->catid;
}
if($tdTrCounter%$config->itemsInLine == 0 && $tdTrCounter != 0)
echo "\n\t\t </tr> \n\t\t <tr>";
$style = $width;
if($item->background && file_exists( _SOBI_FE_PATH.DS."images".DS."backgrounds".DS."{$item->background}")) {
$style = $style."background-image: url({$config->liveSite}/components/com_sobi2/images/backgrounds/{$item->background});";
}
else if(isset($config->sobi2BackgroundImg) && !(empty($config->sobi2BackgroundImg)))
$style = $style."background-image: url({$config->liveSite}/components/com_sobi2/images/backgrounds/{$config->sobi2BackgroundImg});";
if(isset($config->sobi2BorderColor) && !(empty($config->sobi2BorderColor)))
$style = $style."border-style: solid; border-color: #{$config->sobi2BorderColor}'";
else
$style = $style."'";
echo "\n\t\t\t <td {$style}>";
if(!$my->id && !$config->allowAnoDetails) {
$onClick = "onclick='alert(\""._SOBI2_JS_NOT_LOGGED_FOR_DETAILS."\"); return false;'";
$href = "#";
}
else {
$href = "index.php?option=com_sobi2&sobi2Task=sobi2Details&catid={$catid}&sobi2Id={$item->itemid}&Itemid={$config->sobi2Itemid}";
$href = sobi2Config::sef($href);
$onClick = null;
}
if( !$item->icon && $config->key( "frontpage", "default_ico" ) ) {
$item->icon = $config->key( "frontpage", "default_ico" );
}
if( !$item->image && $config->key( "frontpage", "default_img" ) ) {
$item->image = $config->key( "frontpage", "default_img" );
}
$imagesFolder = str_replace( array("\\", "\\\\", "/", "//" ), DS, $config->imagesFolder );
if($config->showIcoInVC && $item->icon && file_exists(_SOBI_CMSROOT.$imagesFolder.$item->icon)) {
$ico = $config->liveSite.$config->imagesFolder.$item->icon;
echo "\n\t\t\t\t\t<a href=\"{$href} {$onClick}\"><img src=\"{$ico}\" title=\"{$item->title}\" alt=\"{$item->title}\" /></a>";
}
if($config->showImgInVC && $item->image && file_exists(_SOBI_CMSROOT.$imagesFolder.$item->image)) {
$img = $config->liveSite.$config->imagesFolder.$item->image;
echo "\n\t\t\t\t\t<a href=\"{$href}\"><img src=\"{$img}\" title=\"{$item->title}\" alt=\"{$item->title}\" /></a>";
}
echo "\n\t\t\t\t\t<p class=\"sobi2ItemTitle\"><a href=\"{$href}\" {$onClick} title=\"{$item->title}\">{$item->title}</a></p>";
if(count($sobi2Data) != 0) {
foreach($sobi2Data as $field)
echo $field;
}
if(count($config->S2_plugins)) {
$plugins = "\n\t\t<table class='sobi2Listing_plugins'>\n\t\t\t<tr>";
foreach($config->S2_plugins as $plugin) {
if($plugin->listingStyle)
$class = "class='{$plugin->listingStyle}'";
else
$class = null;
if(method_exists($plugin,"showListing")) {
$row = "<td {$class}>".$plugin->showListing($item->itemid)."</td>";
$plugins .= $row;
}
}
$plugins .= "\n\t\t\t</tr>\n\t\t</table>";
echo $plugins;
}
echo "\n\t\t\t </td>";
$tdTrCounter++;
}
/* on end check if last <tr> have $config->itemsInLine <td>'s */
if ($tdTrCounter % $config->itemsInLine != 0) {
if (($f = $config->key ( "frontpage", "empty_cell_calback_function", false )) && function_exists ( $f )) {
$ecell = call_user_func ( $f );
} else {
$ecell = " ";
}
$colspan = $config->itemsInLine - ($tdTrCounter % $config->itemsInLine);
echo "\n\t\t\t\t<td class=\"sobi2EmptyCell\" colspan=\"{$colspan}\">{$ecell}\n\t\t\t\t</td>";
}
}
echo "\n\t\t </tr> \n\t </table>";
?>
<div id="sobi2PageNav">
<?php if($currPage > 0) { ?>
<a href="javascript:void(null);" onclick="sobiSearchRes(0);" class="pagenav"><?php echo _PN_LT; ?><?php echo _PN_LT; ?> <?php echo _PN_START; ?></a>
<a href="javascript:void(null);" onclick="sobiSearchRes(<?php echo $currPage - 1; ?>);" class="pagenav"><?php echo _PN_LT; ?> <?php echo _PN_PREVIOUS; ?></a>
<?php } else { ?>
<span class="pagenav"><?php echo _PN_LT; ?><?php echo _PN_LT; ?> <?php echo _PN_START; ?></span>
<span class="pagenav"><?php echo _PN_LT; ?> <?php echo _PN_PREVIOUS; ?></span>
<?php } ?>
<?php for($page = 0; $page < $pages; $page++) { ?>
<?php if($currPage == $page) { ?>
<span class="pagenav"><?php echo $page+1;?></span>
<?php } else { ?>
<a href="javascript:void(null);" onclick="sobiSearchRes(<?php echo $page;?>);" class="pagenav"><?php echo $page+1;?></a>
<?php } ?>
<?php } ?>
<?php if($currPage < $pages - 1) { ?>
<a href="javascript:void(null);" onclick="sobiSearchRes(<?php echo $currPage + 1;?>);" class="pagenav"><?php echo _PN_NEXT; ?> <?php echo _PN_RT; ?></a>
<a href="javascript:void(null);" onclick="sobiSearchRes(-1);" class="pagenav"><?php echo _PN_END; ?> <?php echo _PN_RT; ?><?php echo _PN_RT; ?></a>
<?php } else { ?>
<span class="pagenav"><?php echo _PN_NEXT; ?> <?php echo _PN_RT; ?></span>
<span class="pagenav"><?php echo _PN_END; ?> <?php echo _PN_RT; ?><?php echo _PN_RT; ?></span>
<?php } ?>
</div>
<?php
}
}
/**
*
* @param array $items
* @param int $width
* @param string $liveSite
* @param sobi2Config $config
* @param int $catid
* @param int $tdTrCounter
* @param mosUser $my
*/
function searchResultsWithTemplate( $items, $width, $liveSite, $config, $catid, $tdTrCounter, $my )
{
sobi2Config::import("sobi2.class");
foreach( $items as $item ) {
$item->title = $config->getSobiStr($item->title);
$sobi2Data = sobiAxSearch::searchDetails($item,false);
$fieldsFormated = $sobi2Data[0];
$fieldsObjects = $sobi2Data[1];
$plugins = array();
$use_original_catid = $config->key ( "details_view", "use_original_catid", 1 );
if ($use_original_catid) { //ermittele die catid vom Eintrag (wenn in mehreren Kategorien, den ersten in DB)
$catid =$item->catid;
}
if($tdTrCounter%$config->itemsInLine == 0 && $tdTrCounter != 0)
echo "\n\t\t </tr> \n\t\t <tr>";
$style = $width;
if($item->background && file_exists(_SOBI_FE_PATH.DS."images".DS."backgrounds".DS."{$item->background}")) {
$style = $style."background-image: url({$liveSite}/components/com_sobi2/images/backgrounds/{$item->background});";
}
else if(isset($config->sobi2BackgroundImg) && !(empty($config->sobi2BackgroundImg)))
$style = $style."background-image: url({$liveSite}/components/com_sobi2/images/backgrounds/{$config->sobi2BackgroundImg});";
if(isset($config->sobi2BorderColor) && !(empty($config->sobi2BorderColor)))
$style = $style."border-style: solid; border-color: #{$config->sobi2BorderColor}'";
else
$style = $style."'";
if(!$my->id && !$config->allowAnoDetails) {
$onClick = "onclick='alert(\""._SOBI2_JS_NOT_LOGGED_FOR_DETAILS."\"); return false;'";
$href = "#";
}
else {
$href = "index.php?option=com_sobi2&sobi2Task=sobi2Details&catid={$catid}&sobi2Id={$item->itemid}&Itemid={$config->sobi2Itemid}";
$href = sobi2Config::sef($href);
$onClick = null;
}
if( !$item->icon && $config->key( "frontpage", "default_ico" ) ) {
$item->icon = $config->key( "frontpage", "default_ico" );
}
if( !$item->image && $config->key( "frontpage", "default_img" ) ) {
$item->image = $config->key( "frontpage", "default_img" );
}
$imagesFolder = str_replace( array("\\", "\\\\", "/", "//" ), DS, $config->imagesFolder );
if($config->showIcoInVC && $item->icon && file_exists(_SOBI_CMSROOT.$imagesFolder.$item->icon)) {
$ico = $config->liveSite.$config->imagesFolder.$item->icon;
$ico = "<a href=\"{$href} {$onClick}\"><img src=\"{$ico}\" title=\"{$item->title}\" alt=\"{$item->title}\" /></a>";
}
else {
$ico = null;
}
if($config->showImgInVC && $item->image && file_exists(_SOBI_CMSROOT.$imagesFolder.$item->image)) {
$img = $liveSite.$config->imagesFolder.$item->image;
$img = "<a href=\"{$href}\"><img src=\"{$img}\" title=\"{$item->title}\" alt=\"{$item->title}\" /></a>";
}
else {
$img = null;
}
$title = "<p class='sobi2ItemTitle'><a href=\"{$href}\" {$onClick} title=\"{$item->title}\">{$item->title}</a></p>";
if(count($config->S2_plugins)) {
foreach($config->S2_plugins as $name => $plugin) {
if(method_exists($plugin,"showListing")) {
$plugins[$name] = $plugin->showListing($item->itemid);
}
}
}
sobi2VCview($item->itemid,$style, $ico, $img, $title, $fieldsObjects, $fieldsFormated, $plugins);
echo "\n\t\t\t </td>";
$tdTrCounter++;
}
/* on end check if last <tr> have $config->itemsInLine <td>'s */
if ($tdTrCounter % $config->itemsInLine != 0) {
if (($f = $config->key ( "frontpage", "empty_cell_calback_function", false )) && function_exists ( $f )) {
$ecell = call_user_func ( $f );
} else {
$ecell = " ";
}
$colspan = $config->itemsInLine - ($tdTrCounter % $config->itemsInLine);
echo "\n\t\t\t\t<td class=\"sobi2EmptyCell\" colspan=\"{$colspan}\">{$ecell}\n\t\t\t\t</td>";
}
}
/**
* getting details data (custom fields) for search results
*
* @param sobi2 $mySobi
* @global sobi2Config $config
* @global database $database
* @return array
*/
function searchDetails($mySobi,$html = true)
{
$config =& sobi2Config::getInstance();
$database = &$config->getDb();
$fieldsdata = array();
$query = "SELECT `fieldid` FROM `#__sobi2_fields` " .
"WHERE `in_vcard`= 1 AND `enabled` = 1 " .
"ORDER BY position";
$database->setQuery($query);
$fieldids = $database->loadObjectList();
if ($database->getErrorNum()) {
trigger_error("DB reports: ".$database->stderr(), E_USER_WARNING);
}
$fieldsObjects = array();
$fieldsFormated = array();
if($fieldids) {
sobi2Config::import("field.class");
foreach($fieldids as $fieldid) {
$fieldsdata[] = new sobiField($fieldid->fieldid, $mySobi->itemid);
}
}
$itemData = array();
if( count($fieldsdata) ) {
foreach($fieldsdata as $field) {
$data = null;
$field->name = $config->getSobiStr($field->fieldname);
if($field->fieldType == 2) {
$field->data = $config->getSobiStr($field->data, true);
$data = $field->data;
}
elseif( $field->fieldType == 1 || $field->fieldType == 5 || $field->fieldType == 7 ) {
$field->data = $config->getSobiStr($field->data);
if( $field->isUrl == 4 ) {
$data = $field->customCode;
}
else {
$data = $field->data;
}
}
elseif($field->fieldType == 3) {
$data = $field->data ? _SOBI2_CHECKBOX_YES : _SOBI2_CHECKBOX_NO;
$field->with_label = 1;
}
elseif($field->fieldType == 6) {
$field->data = $field->selectedValues;
if(is_array($field->data) && !empty($field->data)) {
$data .= "\n<ul class = \"sobi2Listing_{$field->fieldname}\">";
foreach ($field->data as $opt) {
$data .= "\n\t<li>{$opt}</li>";
}
$data .= "\n</ul>";
}
}
$field->label = $config->getSobiStr($field->label);
$tag = "span";
if(strlen($data) > 0) {
static $noFollows = null;
static $noFollowsCheck = false;
if( !$noFollowsCheck ) {
$noFollows = $config->key( "url", "nofollow" );
if( $noFollows ) {
$noFollows = explode( ",", $noFollows );
}
else {
$noFollows = array();
}
$noFollowsCheck = true;
}
if($field->isUrl == 1) {
if( in_array( $field->fieldid, $noFollows )) {
$noFollow = " rel=\"nofollow\" ";
}
else {
$noFollow = null;
}
$data = "<a href=\"{$data}\"{$noFollow} title=\"{$mySobi->title}\" target=\"_blank\">{$field->label}</a>";
}
else if($field->isUrl == 2) {
if(!(defined("_SOBI_AJAX_SEARCH"))) {
$data = sobiHTML::emailCloaking( $data, 1, $field->label, 0 );
}
else {
$data = "<a href=\"mailto:{$data}\" title=\"{$mySobi->title}\" target=\"_blank\">{$field->label}</a>";
}
}
else if($field->isUrl == 3) {
$data = "<img src=\"{$data}\" title=\"{$field->label}\" alt=\"{$field->label}\" />";
}
if($field->with_label) {
if( $field->fieldType != 6 ) {
$data = "<{$tag} class=\"sobi2Listing_{$field->name}\"><span class=\"sobi2Listing_{$field->name}_label\">{$field->label}:</span> {$data}</{$tag}>";
}
else {
$data = "<span class=\"sobi2Listing_{$field->name}_label\">{$field->label}:</span> {$data}";
}
}
else {
if( $field->fieldType != 6 ) {
$data = "<{$tag} class=\"sobi2Listing_{$field->name}\">{$data}</{$tag}>";
}
}
if($field->in_newline) {
$data = "<br/>".$data;
}
array_push($itemData, $data);
}
$fieldsFormated[$field->name] = $data;
$fieldsObjects[$field->name] = $field;
}
}
if(!$html) {
return array($fieldsFormated,$fieldsObjects);
}
else {
return $itemData;
}
}
}
?>