[Vtigercrm-developers] How to extend feature such as Global Search without core modifications ?

apcloic apcloic at gmail.com
Tue Feb 16 07:47:00 GMT 2016


Hi Preexo,

I agree with you, we need a better way to handle module development on
code.vtiger.com, let's wait for vTiger answer to your question.

I would also like to avoid modifying core file but javascript is not easy to
understand for me ;)
So, for now I manage to override basicsearch JS function with the
HEADERSCRIPT, but I don't know how to just replace getSearchResult function.

jQuery(document).ready(function () {

    jQuery(document).find("#globalSearchValue").unbind("keypress");
    var thisInstance = this;
    jQuery(document).on("keypress","#globalSearchValue", function(e) {
            if (e.which == 13) {
            e.preventDefault();
            var currentTarget = jQuery(e.currentTarget)
                labelSearch(currentTarget);
            }
        else{
            return;
        }
        e.preventDefault();
		});

    var labelSearch = function(currentTarget) {
        var val = currentTarget.val();
        if (val == '') {
            alert(app.vtranslate('JS_PLEASE_ENTER_SOME_VALUE'));
            currentTarget.focus();
            return false;
        }
        var basicSearch = new Search_BasicSearch_Js();
        var progress = jQuery.progressIndicator();
        basicSearch.search(val).then(function(data) {
            basicSearch.showSearchResults(data);
            progress.progressIndicator({
                'mode': 'hide'
            });
        });
    };


});


jQuery.Class('Search_BasicSearch_Js',{},{
	//stores the module that need to be searched
	searchModule : false,
	
	//stores the module that need to be searched which is selected by the user
	currentSearchModule : false,
	
	/**
	 * Function to get the search module
	 */
	getSearchModule : function() {
		if(this.searchModule === false) {
			//default gives current module
			var module = app.getModuleName();
			if(typeof this.getCurrentSearchModule() != 'undefined') {
				module = this.getCurrentSearchModule();
			}
			
			this.setSearchModule(module);
		}
		return this.searchModule;
	},

	/**
	 * Function to set the search module
	 */
	setSearchModule : function(moduleName) {
		this.searchModule = moduleName;
		return this;
	},
	
	/**
	 * Function to get the user selected search module
	 */
	getCurrentSearchModule : function() {
		if(this.currentSearchModule === false) {
			this.currentSearchModule = jQuery('#basicSearchModulesList').val();
		}
		return this.currentSearchModule;
	},
	
	/**
	 * Function which will perform the search
	 */
	_search : function(params) {
		var aDeferred = jQuery.Deferred();

		if(typeof params == 'undefined') {
			params = {};
		}

		params.view = 'BasicAjax';
		params.mode = 'showSearchResults';

		if(typeof params.module == 'undefined') {
			params.module = app.getModuleName();
            //if you are in Settings then module should be Vtiger for normal
text search
            if(app.getParentModuleName().length > 0) {
                params.module = 'Vtiger';
            }
		}

		AppConnector.request(params).then(
			function(data){
				aDeferred.resolve(data);
			},

			function(error,err){
				aDeferred.reject(error);
			}
		);


		return aDeferred.promise();
	},

	/**
	 * Helper function which invokes search
	 */
	search : function(value) {
//		var searchModule = this.getCurrentSearchModule();
		var searchModule = 'Search';
		var params = {};
		params.value = value;
		if(typeof searchModule != 'undefined') {
			params.searchModule = searchModule;
		}

		return this._search(params);
	},

	/**
	 * Function which shows the search results
	 */
	showSearchResults : function(data){
		var aDeferred = jQuery.Deferred();
		var postLoad = function(data) {
			var blockMsg = jQuery(data).closest('.blockMsg');
			app.showScrollBar(jQuery(data).find('.contents'));
			blockMsg.position({
				my: "left bottom",
				at: "left bottom",
				of: "#globalSearchValue",
				offset: "1 -29"
			});
			aDeferred.resolve(data);
		}
		var params = {};
		params.data = data ;

		params.cb = postLoad;
		params.css = {'width':'23%','text-align':'left'};
		//not showing overlay
		params.overlayCss = {'opacity':'0.2'};
		app.showModalWindow(params);
		return aDeferred.promise();
	}
	
});


Regards,




--
View this message in context: http://vtiger-crm.2324883.n4.nabble.com/How-to-extend-feature-such-as-Global-Search-without-core-modifications-tp18384p18435.html
Sent from the vtigercrm-developers mailing list archive at Nabble.com.


More information about the vtigercrm-developers mailing list