/*+*********************************************************************************** * The contents of this file are subject to the vtiger CRM Public License Version 1.0 * ("License"); You may not use this file except in compliance with the License * The Original Code is: vtiger CRM Open Source * The Initial Developer of the Original Code is vtiger. * Portions created by vtiger are Copyright (C) vtiger. * All Rights Reserved. *************************************************************************************/ Vtiger_BasicSearch_Js("Vtiger_AdvanceSearch_Js",{ //cache will store the search data cache : {} },{ //container which will store the search elements elementContainer : false, //instance which represents advance filter advanceFilter : false, //states whether the validation is registred for filter elements filterValidationRegistered : false, //contains the filter form element filterForm : false, /** * Function which will give the container */ getContainer : function() { return this.elementContainer; }, /** *Function which is used to set the continaer *@params : container - element which represent the container *@return current instance */ setContainer : function(container) { this.elementContainer = container; return this; }, getFilterForm : function() { return jQuery('form[name="advanceFilterForm"]',this.getContainer()); }, isSearchShown : function() { return jQuery('#advanceSearchHolder').hasClass('slideDown'); }, hideSearch : function() { jQuery('#advanceSearchHolder').removeClass('slideDown'); }, isSearchHidden : function() { var advanceSearchHolder = jQuery('#advanceSearchHolder'); return (advanceSearchHolder.children().length > 0 && (!advanceSearchHolder.hasClass('slideDown'))) ? true : false; }, showSearch : function() { var advanceSearchHolder = jQuery('#advanceSearchHolder'); advanceSearchHolder.addClass('slideDown'); }, /** * Function used to get the advance search ui * @return : deferred promise */ getAdvanceSearch : function() { var aDeferred = jQuery.Deferred(); var moduleName = app.getModuleName(); var searchModule = this.getSearchModule(); //Exists in the cache if(searchModule in Vtiger_AdvanceSearch_Js.cache) { aDeferred.resolve(Vtiger_AdvanceSearch_Js.cache[searchModule]); return aDeferred.promise(); } //if you are in settings then module should be vtiger if(app.getParentModuleName().length > 0) { moduleName = 'Vtiger'; } var searchableModulesParams = { "module":moduleName, "view" : "BasicAjax", "mode" : "showAdvancedSearch", "source_module": searchModule }; app.helper.showProgress(); app.request.post({data:searchableModulesParams}).then( function(err, data){ app.helper.hideProgress(); //add to cache Vtiger_AdvanceSearch_Js.cache[searchModule] = data; aDeferred.resolve(data); }, function(error,err){ aDeferred.reject(error); } ); return aDeferred.promise(); }, showAdvanceSearch : function (data) { var aDeferred = jQuery.Deferred(); if(jQuery('#advanceSearchHolder').length >0) { jQuery('#advanceSearchHolder').removeClass('slideDown'); data = jQuery(data).find('#advanceSearchHolder').html(); jQuery('#advanceSearchHolder').html(data).addClass('slideDown'); }else{ app.helper.loadPageOverlay(data).then(function(container){ jQuery('#advanceSearchHolder').addClass('slideDown'); }); } aDeferred.resolve(); return aDeferred.promise(); }, /** * Function which intializes search */ initiateSearch : function() { var aDeferred = jQuery.Deferred(); var thisInstance = this; this.getAdvanceSearch().then( function(data){ thisInstance.showAdvanceSearch(data).then(function(){ thisInstance.setContainer(jQuery('#advanceSearchContainer')); vtUtils.showSelect2ElementView(thisInstance.getContainer().find('select.select2')); thisInstance.registerEvents(); thisInstance.advanceFilter = new Vtiger_SearchAdvanceFilter_Js(jQuery('.filterContainer')); app.helper.showVerticalScroll(jQuery('#searchResults-container'),{'setHeight' : app.helper.getViewHeight()}); aDeferred.resolve(); }) }, function(error) { aDeferred.reject(); } ) return aDeferred.promise(); }, getNameFields : function() { var form = this.getFilterForm(); return form.find('[name="labelFields"]').data('value'); }, selectBasicSearchValue : function() { var value = jQuery('.keyword-input').val(); if(value.length > 0 ) { var form = this.getFilterForm(); var labelFieldList = this.getNameFields(); if(typeof labelFieldList == 'undefined' || labelFieldList.length == 0) { return; } var anyConditionContainer = form.find('.anyConditionContainer'); for(var index in labelFieldList){ var labelFieldName = labelFieldList[index]; if(index !=0 ) { //By default one condition exits , only if you have multiple label fields you have add one more condition anyConditionContainer.find('.addCondition').find('button').trigger('click'); } var conditionRow = anyConditionContainer.find('.conditionList').find('.conditionRow:last'); var fieldSelectElemnt = conditionRow.find('select[name="columnname"]'); fieldSelectElemnt.find('option[data-field-name="'+ labelFieldName +'"]').attr('selected','selected'); fieldSelectElemnt.trigger('change').trigger('liszt:updated'); var comparatorSelectElemnt = conditionRow.find('select[name="comparator"]'); //select the contains value comparatorSelectElemnt.find('option[value="c"]').attr('selected','selected'); comparatorSelectElemnt.trigger('liszt:updated'); var valueElement = conditionRow.find('[name="'+labelFieldName+'"]'); valueElement.val(value); } } }, /** * Function which invokes search */ search : function() { var conditionValues = this.advanceFilter.getValues(); var module = this.getSearchModule(); var params = {}; params.module = module; var searchParams = new Array(); for(var index in conditionValues) { var conditionSpecificValues = conditionValues[index]['columns']; var conditionSpecificParams = new Array(); for(var i in conditionSpecificValues) { var params1 = new Array(); var fieldName = conditionSpecificValues[i]['columnname'].split(":")[2]; params1.push(fieldName); params1.push(conditionSpecificValues[i]['comparator']); params1.push(conditionSpecificValues[i]['value']); conditionSpecificParams.push(params1); } searchParams.push(conditionSpecificParams); } params.search_params = JSON.stringify(searchParams); params.nolistcache = 1; return this._search(params); }, /** * Function which shows search results in proper manner * @params : data to be shown */ showSearchResults : function(data){ var thisInstance = this; var aDeferred = jQuery.Deferred(); var postLoad = function(data) { var blockMsg = jQuery(data).closest('.blockMsg'); app.showScrollBar(jQuery(data).find('.contents')); aDeferred.resolve(data); } var unblockcd = function(){ thisInstance.getContainer().remove(); } var html = '