isDisplaySearchPanel = $this->pSet->showSearchPanel();
if( $this->pageObj->mobileTemplateMode() && !$this->isDisplaySearchPanel )
{
$advSearchFields = $this->pSet->getAdvSearchFields();
if( count( $advSearchFields ) )
$this->isDisplaySearchPanel = true;
}
$this->isFlexibleSearch = $this->pSet->isFlexibleSearch();
}
function buildSearchPanel()
{
parent::buildSearchPanel();
if ($this->isDisplaySearchPanel)
{
$this->srchPanelAttrs = $this->searchClauseObj->getSrchPanelAttrs();
$this->searchOptions = $this->pSet->getSearchPanelOptions();
$this->DisplaySearchPanel();
}
}
function searchAssign()
{
parent::searchAssign();
$searchGlobalParams = $this->searchClauseObj->getSearchGlobalParams();
$searchPanelAttrs = $this->searchClauseObj->getSrchPanelAttrs();
// show hide window
$this->xt->assign("showHideSearchWin_attrs", ' title="Floating window"');
$searchOpt_mess = ($searchPanelAttrs['srchOptShowStatus'] ? mlang_message("SEARCH_HIDE_OPTIONS") : mlang_message("SEARCH_SHOW_OPTIONS"));
$this->xt->assign("showHideSearchPanel_attrs", 'align="absmiddle" title="'.$searchOpt_mess.'" alt="'.$searchOpt_mess.'"');
$searchforAttrs = "name=\"ctlSearchFor".$this->id."\" id=\"ctlSearchFor".$this->id."\"";
if($this->isUseAjaxSuggest)
$searchforAttrs .= " autocomplete=off ";
$searchforAttrs.= ' placeholder="'.mlang_message("SEARCH_TIP").'"';
if( $this->searchClauseObj->isUsedSrch() || strlen( $searchGlobalParams["simpleSrch"] ) )
{
$valSrchFor = $searchGlobalParams["simpleSrch"];
$searchforAttrs.= " value=\"".runner_htmlspecialchars($valSrchFor)."\"";
}
$this->xt->assignbyref("searchfor_attrs", $searchforAttrs);
$this->xt->assign('searchPanelTopButtons', $this->isDisplaySearchPanel);
$selectClass = "";
if( $this->pageObj->getLayoutVersion() == BOOTSTRAP_LAYOUT )
$selectClass = "form-control";
if ($this->pSet->showSimpleSearchOptions())
{
$simpleSearchTypeCombo = '";
$this->xt->assign('simpleSearchTypeCombo', $simpleSearchTypeCombo);
$simpleSearchFieldCombo = '";
$this->xt->assign('simpleSearchFieldCombo', $simpleSearchFieldCombo);
}
}
/**
* Search panel on list template handler
*/
function DisplaySearchPanel()
{
$this->xt->assign('searchPanel', $this->isDisplaySearchPanel);
$this->xt->assign('id', $this->id);
if( !$this->isFlexibleSearch )
$this->xt->assign('controls_block_class', 'flexibleSearchPanel');
// assign the search panel radio buttons
$searchRadio = $this->searchControlBuilder->getSearchRadio();
$this->xt->assign_section("all_checkbox_label", $searchRadio['all_checkbox_label'][0], $searchRadio['all_checkbox_label'][1]);
$this->xt->assign_section("any_checkbox_label", $searchRadio['any_checkbox_label'][0], $searchRadio['any_checkbox_label'][1]);
$this->xt->assignbyref("all_checkbox",$searchRadio['all_checkbox']);
$this->xt->assignbyref("any_checkbox",$searchRadio['any_checkbox']);
// assign the 'Show/Hide options' button
$showHideOpt_mess = $this->srchPanelAttrs['ctrlTypeComboStatus'] ? mlang_message("SEARCH_HIDE_OPTIONS_BUTTON") : mlang_message("SEARCH_SHOW_OPTIONS_BUTTON");
$this->xt->assign("showHideOpt_mess", $showHideOpt_mess);
$this->xt->assign("showHideCtrlsOpt_attrs", 'style="display: none;"');
if($this->searchClauseObj->getUsedCtrlsCount() <= 0)
$this->xt->assign("bottomSearchButt_attrs", 'style="display: none;"');
$this->assignSearchBlocks();
$this->pageObj->controlsMap["search"]["searchPanelRunByUserApi"] = $this->searchClauseObj->isSearchPanelByUserApiRun();
}
/**
* Assign controls blocks for the search panel's,
* added-by-user and cached fields
*/
function assignSearchBlocks()
{
global $gLoadSearchControls;
$searchPanelFieldsBlocks = array();
$otherFieldsBlocks = array();
$notAddedFileds = array();
$srchCtrlBlocksNumber = 0;
$recId = $this->pageObj->genId();
// build search controls for each field, first we need to build used controls, because cached must have last index
foreach($this->allSearchFields as $searchField)
{
$this->pageObj->fillFieldToolTips($searchField);
$srchFields = $this->searchClauseObj->getSearchCtrlParams($searchField);
$isSrchPanelField = in_array($searchField, $this->panelSearchFields);
if( !count($srchFields) )
{
$defaultValue = $this->pSet->getDefaultValue( $searchField );
if( $isSrchPanelField )
{
$opt = '';
//set the field's option chosen for the inflexible search panel
if( !$this->isFlexibleSearch )
$opt = $this->searchOptions[$searchField];
// add a search panel field that should be always shown on the panel
$srchFields[] = array('opt' => $opt, 'not' => '', 'value1' => $defaultValue, 'value2' => '');
}
}
if( count($srchFields) )
{
if($isSrchPanelField)
$srchFields[ count($srchFields) - 1 ]['immutable'] = true;
foreach($srchFields as $srchField)
{
// build used ctrl
$block = $this->searchControlBuilder->buildSearchCtrlBlockArr($recId, $searchField, 0, $srchField['opt'], $srchField['not'],
false, $srchField['value1'], $srchField['value2'], $isSrchPanelField, $this->isFlexibleSearch, $srchField['immutable']);
if($isSrchPanelField)
$searchPanelFieldsBlocks[$searchField][] = $block;
else
$otherFieldsBlocks[] = $block;
$srchCtrlBlocksNumber++;
$this->addSearchFieldToControlsMap($searchField, $recId);
}
}
else
$notAddedFileds[] = $searchField;
}
// assign search panel fields (default and added-by-user)
foreach($searchPanelFieldsBlocks as $name => $namedBlocks)
{
$this->xt->assign_loopsection_byValue('searchCtrlBlock_'.GoodFieldName($name), $namedBlocks);
}
if(!$this->isFlexibleSearch)
return;
//add cached searhc fields
if( $srchCtrlBlocksNumber > 0 && $srchCtrlBlocksNumber < $gLoadSearchControls )
{
$otherSearchControlsMaxNumber = $gLoadSearchControls - $srchCtrlBlocksNumber + count($otherFieldsBlocks);
foreach($notAddedFileds as $searchField)
{
$defaultValue = $this->pSet->getDefaultValue( $searchField );
// add cached ctrl
$otherFieldsBlocks[] = $this->searchControlBuilder->buildSearchCtrlBlockArr($recId, $searchField, 0, '', false, true, $defaultValue, '');
$this->addSearchFieldToControlsMap($searchField, $recId);
if( count($otherFieldsBlocks) >= $otherSearchControlsMaxNumber )
break;
}
}
// assign cached and non search panel fields' blocks
$this->xt->assign_loopsection('searchCtrlBlock', $otherFieldsBlocks);
}
/**
* Add the search field block's data to the page's ControlsMap array
* Generate the new value for the recId
* @param String fName
* @param &Number recId
*/
function addSearchFieldToControlsMap($fName, &$recId)
{
$isFieldNeedSecCtrl = $this->searchControlBuilder->isNeedSecondCtrl($fName);
$searchBlock = array('fName'=>$fName, 'recId'=>$recId);
$ctrlInd = 0;
$searchBlock['ctrlsMap'][0] = $ctrlInd;
if($isFieldNeedSecCtrl)
$searchBlock['ctrlsMap'][1] = $ctrlInd + 1;
if(!$this->isFlexibleSearch)
$searchBlock['inflexSearchOption'] = $this->searchOptions[$fName];
$this->pageObj->controlsMap["search"]["searchBlocks"][] = $searchBlock;
$recId = $this->pageObj->genId();
}
/**
* Refine the open seach panel fields array:
* It removes all non search fields and each one
* of the always shown fields (search panel fields)
* from the array.
* @param Array openFilters
* @return Array
*/
function refineOpenFilters($openFilters)
{
$openFiltersRefined = array();
foreach($this->panelSearchFields as $panelFiled)
{
$key = array_search($panelFiled, $openFilters);
if($key !== FALSE)
array_splice($openFilters, $key, 1);
}
foreach($openFilters as $field)
{
if( in_array($field, $this->allSearchFields) )
$openFiltersRefined[] = $field;
}
return $openFiltersRefined;
}
}
?>