HEX
Server: Apache/2
System: Linux sv156.hostsevenplus.com 4.18.0-553.126.1.el8_10.x86_64 #1 SMP Thu May 28 06:44:09 EDT 2026 x86_64
User: npaaenew (1145)
PHP: 8.5.0
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/npaaenew/domains/npaae.com/public_html/wp-content/plugins/formlayer-pro/assets/js/admin.js
jQuery(document).ready(function($){
	
	let currentSlug = '';

	const entryState = {
		page: 1,
		total_pages: parseInt($('.formlayer-pagination-controls').data('total-pages')) || 1
	};

	function show_toast(message, type = 'success') {
		let toast = $('<div>')
			.addClass('formlayer-toast')
			.addClass(type)
			.html(`<span class="dashicons dashicons-${type === 'success' ? 'yes' : 'warning'}"></span> ${message}`);

		$('body').append(toast);

		toast.fadeIn(300).delay(3000).fadeOut(300, function () {
			toast.remove();
		});
	}

	function update_unread_count(count) {
		count = parseInt(count);
		let $badge = $('.formlayer-unread-count');
		let $menu_badge = $('#toplevel_page_formlayer .plugin-count');

		if (count > 0) {
			if ($badge.length) {
				$badge.text(count).show();
			} else {
				$('[data-tab="entries"] span').after(` <span class="formlayer-unread-count formlayer-unread-badge">${count}</span>`);
			}

			if ($menu_badge.length) {
				$menu_badge.text(count).closest('.update-plugins').show();
			}
		} else {
			$badge.hide();
			$menu_badge.closest('.update-plugins').hide();
		}
	}

	function update_entry_row_ui(entry_id, status) {
		let $row = $(`tr[data-entry-id="${entry_id}"]`);
		if (!$row.length) return;

		$row.removeClass('entry-row-unread entry-row-read').addClass(`entry-row-${status}`);
		
		let $badge = $row.find('.formlayer-badge');
		$badge.removeClass('status-unread status-read').addClass(`status-${status}`).text(status.charAt(0).toUpperCase() + status.slice(1));
		
		let $toggle = $row.find('.formlayer-toggle-status');
		let new_target_status = (status === 'read' ? 'unread' : 'read');
		$toggle.data('status', new_target_status);
		$toggle.attr('title', `Mark as ${new_target_status.charAt(0).toUpperCase() + new_target_status.slice(1)}`);
		
		let $icon = $toggle.find('.dashicons');
		$icon.removeClass('dashicons-marker dashicons-email-alt').addClass(`dashicons-${status === 'read' ? 'marker' : 'email-alt'}`);
		$toggle.css('color', status === 'read' ? '#94a3b8' : 'var(--fl-primary)');
	}

	function load_entries(page = 1) {
		const $container = $('#formlayer-entries-tbody');
		if(!$container.length) return;
		
		$container.html('<tr><td colspan="6" style="text-align:center; padding:40px;">Loading entries...</td></tr>');

		$.post(formlayer_admin.ajax_url, {
			action: 'formlayer_filter_entries',
			nonce: formlayer_admin.nonce,
			search: $('#formlayer-entries-search').val(),
			form_id: $('#formlayer-entries-filter-form').val(),
			status: $('#formlayer-entries-filter-status').val(),
			page: page
		}, function(response){
			if(response.success){
				entryState.page = page;
				entryState.total_pages = response.data.total_pages || 1;
				$container.html(response.data.html);
				
				$('#formlayer-entries-count-current').text($container.find('tr').not(':has(td[colspan])').length);
				$('#formlayer-entries-total').text(response.data.total_entries);
				
				$('#formlayer-pagination-prev').prop('disabled', entryState.page <= 1);
				$('#formlayer-pagination-next').prop('disabled', entryState.page >= entryState.total_pages);

				if (response.data.unread_count !== undefined) {
					update_unread_count(response.data.unread_count);
				}
			}else{
				$container.html('<tr><td colspan="6" style="text-align:center; padding:40px; color:#ef4444;">Error loading entries.</td></tr>');
			}
		});
	}

	window.formlayerAdminPro = window.formlayerAdminPro || {};
	window.formlayerAdminPro.load_entries = load_entries;
	window.formlayerAdminPro.entryState = entryState;

	function openModal(name, slug){
		$('#int-modal-title').text('Configure ' + name);
		$('#int-modal-desc').text('Enter your ' + name + ' credentials below.');
		
		let fieldsHtml = getFieldsHtml(slug);
		$('#int-settings-fields').html(fieldsHtml);
		
		$('#formlayer-integration-modal').show(0, function(){
			$(this).addClass('active');
		});
	}

	function getFieldsHtml(slug){
		let html = '';
		let settings = formlayer_pro.settings[slug] || {};

		switch(slug){
			case 'slack':
				html += renderField('webhook', 'Webhook URL', 'https://hooks.slack.com/services/...', settings.webhook);
				break;
			case 'mailchimp':
				html += renderField('api_key', 'API Key', 'your-api-key', settings.api_key);
				html += renderField('list_id', 'Audience ID', 'List ID', settings.list_id);
				break;
			case 'sheets':
				html += renderTextarea('service_account_json', 'Service Account JSON', 'Paste your service account JSON here', settings.service_account_json);
				html += renderField('spreadsheet_id', 'Spreadsheet ID', 'Enter your Spreadsheet ID', settings.spreadsheet_id);
				html += renderField('sheet_name', 'Sheet Name', 'Sheet1', settings.sheet_name);
				break;
			case 'notion':
				html += renderField('api_key', 'Internal Integration Token', '', settings.api_key);
				html += renderField('database_id', 'Database ID', '', settings.database_id);
				break;
			case 'trello':
				html += renderField('api_key', 'API Key', '', settings.api_key);
				html += renderField('token', 'Token', '', settings.token);
				break;
			case 'discord':
				html += renderField('webhook', 'Webhook URL', 'https://discord.com/api/webhooks/...', settings.webhook);
				break;
		}

		return html;
	}

	// Template engine helper
	const utils = {
		tmpl: function(key, data = {}) {
			let html = formlayer_pro.html_templates[key] || '';
			Object.keys(data).forEach(k => {
				const val = data[k] === undefined || data[k] === null ? '' : data[k];
				html = html.replace(new RegExp(`{{${k}}}`, 'g'), val);
			});
			return html;
		}
	};

	function renderField(name, label, placeholder, value){
		return utils.tmpl('integration_field', {
			name: name,
			label: label,
			placeholder: placeholder,
			value: value || ''
		});
	}

	function renderTextarea(name, label, placeholder, value){
		return utils.tmpl('integration_textarea', {
			name: name,
			label: label,
			placeholder: placeholder,
			value: value || ''
		});
	}

	function saveSettings(){
		let $btn = $('#save-int-settings');
		let originalText = $btn.text();
		
		let settings = {};
		$('.int-setting-input').each(function(){
			settings[$(this).attr('name')] = $(this).val();
		});

		$btn.prop('disabled', true).text('Saving...');

		$.post(formlayer_pro.ajax_url, {
			action: 'formlayer_pro_save_integration',
			integration: currentSlug,
			settings: settings,
			nonce: formlayer_pro.nonce
		}, function(response){
			if(response.success){
				alert(response.data.message);
				// Update local storage of settings
				formlayer_pro.settings[currentSlug] = settings;
				
				$('#formlayer-integration-modal').removeClass('active');
				$btn.prop('disabled', false).text(originalText);
				
				// Update button UI
				$(`.formlayer-configure-int[data-slug="${currentSlug}"]`)
					.removeClass('formlayer-btn-action')
					.addClass('formlayer-btn-outline')
					.text('Connected');
			}else{
				alert(response.data.message || 'Error saving settings');
				$btn.prop('disabled', false).text(originalText);
			}
		});
	}
	// Entries Panel
	$('#formlayer-entries-search, #formlayer-entries-filter-form, #formlayer-entries-filter-status').on('input change', function(){
		load_entries(1);
	});

	// Entry Pagination
	$('#formlayer-pagination-prev').on('click', function(){
		if(!$(this).prop('disabled') && entryState.page > 1) load_entries(entryState.page - 1);
	});

	$('#formlayer-pagination-next').on('click', function(){
		if(!$(this).prop('disabled') && entryState.page < entryState.total_pages) load_entries(entryState.page + 1);
	});

	// Entries Bulk Action
	$('#formlayer-entries-apply-bulk').on('click', function(){
		let action = $('#formlayer-entries-bulk-action').val(),
			ids = $('.entry-cb:checked').map(function(){ return $(this).val(); }).get();

		if(!action || ids.length === 0) return;

		if(!confirm('Are you sure you want to apply this action to selected entries?')) return;

		let $btn = $(this);
		$btn.prop('disabled', true);

		$.post(formlayer_admin.ajax_url, {
			action: 'formlayer_entries_bulk_action',
			bulk_action: action,
			ids: ids,
			nonce: formlayer_admin.nonce
		}, function(response){
			if(response.success){
				load_entries(entryState.page);
			}else{
				show_toast(response.data.message || 'Error applying bulk action', 'error');
			}
			$btn.prop('disabled', false);
		});
	});

	$('#formlayer-entries-select-all').on('change', function(){
		$('.entry-cb').prop('checked', $(this).prop('checked'));
	});

	// Export Entries Handler
	$('#formlayer-btn-export-entries').on('click', function(e){
		e.preventDefault();
		
		let form_id = $('#formlayer-entries-filter-form').val();
		let status = $('#formlayer-entries-filter-status').val();
		
		let $form = $('<form>', {
			action: formlayer_admin.ajax_url,
			method: 'POST'
		});
		
		$form.append($('<input>', { type: 'hidden', name: 'action', value: 'formlayer_export_csv' }));
		$form.append($('<input>', { type: 'hidden', name: 'nonce', value: formlayer_admin.nonce }));
		$form.append($('<input>', { type: 'hidden', name: 'form_id', value: form_id }));
		$form.append($('<input>', { type: 'hidden', name: 'status', value: status }));
		
		$('body').append($form);
		$form.submit();
		$form.remove();
	});

	// View Entry Handler
	$('#formlayer-entries-tbody').on('click', '.formlayer-view-entry', function(e){
		e.preventDefault();
		let entry_id = $(this).data('id') || $(this).data('entry-id');
		if(!entry_id) return;

		$('#formlayer-entry-detail-body').html('<div style="padding:40px; text-align:center;">Loading entry details...</div>');
		$('#formlayer-entry-modal').addClass('active');

		$.post(formlayer_admin.ajax_url, {
			action: 'formlayer_get_entry_details',
			entry_id: entry_id,
			nonce: formlayer_admin.nonce
		}, function(response){
			if(response.success){
				$('#formlayer-entry-detail-body').html(response.data.html);
				update_entry_row_ui(entry_id, 'read');
				if (response.data.unread_count !== undefined) {
					update_unread_count(response.data.unread_count);
				}
			}else{
				$('#formlayer-entry-detail-body').html('<div style="padding:40px; color:#ef4444;">' + (response.data.message || 'Error loading details') + '</div>');
			}
		});
	});

	// Toggle Entry Status Handler
	$('#formlayer-entries-tbody').on('click', '.formlayer-toggle-status', function(e){
		e.preventDefault();
		let $btn = $(this);
		let entry_id = $btn.data('entry-id');
		let status = $btn.data('status');
		if(!entry_id) return;

		$btn.css('opacity', '0.5');

		$.post(formlayer_admin.ajax_url, {
			action: 'formlayer_toggle_entry_status',
			entry_id: entry_id,
			status: status,
			nonce: formlayer_admin.nonce
		}, function(response){
			if(response.success){
				update_entry_row_ui(entry_id, status);
				if (response.data.unread_count !== undefined) {
					update_unread_count(response.data.unread_count);
				}
			}else{
				show_toast(response.data.message || 'Error updating status', 'error');
			}
			$btn.css('opacity', '1');
		});
	});

	// Delete Entry Handler
	$('#formlayer-entries-tbody').on('click', '.formlayer-delete-entry', function(e){
		e.preventDefault();
		const entry_id = $(this).data('id') || $(this).data('entry-id');
		if(!entry_id) return;

		if(!confirm('Are you sure you want to delete this entry?')){
			return;
		}

		const $row = $(this).closest('tr');
		$row.css('opacity', '0.5');

		$.post(formlayer_admin.ajax_url, {
			action: 'formlayer_delete_entry',
			entry_id: entry_id,
			nonce: formlayer_admin.nonce
		}, function(response){
			if(response.success){
				$row.fadeOut(300, function(){ $(this).remove(); });
				if (response.data.unread_count !== undefined) {
					update_unread_count(response.data.unread_count);
				}
			}else{
				show_toast(response.data.message || 'Error deleting entry', 'error');
				$row.css('opacity', '1');
			}
		});
	});
	// Event Listeners
	$('.formlayer-configure-int').on('click', function(e){
		e.preventDefault();
		let $btn = $(this);
		currentSlug = $btn.data('slug');
		let name = $btn.data('name');

		openModal(name, currentSlug);
	});

	$('#close-int-modal, .formlayer-modal-overlay').on('click', function(e){
		if(e.target === this || $(this).attr('id') === 'close-int-modal'){
			$('#formlayer-integration-modal').removeClass('active');
			setTimeout(function(){
				$('#formlayer-integration-modal').hide();
			}, 300);
		}
	});
	
	$('#save-int-settings'). on('click', function(e){
		saveSettings();
	});

	// Transfer (Import/Export) Logic
	$('#formlayer-btn-export-forms').on('click', function(e){
		e.preventDefault();
		
		let selectedIds = [];
		$('.formlayer-export-form-checkbox:checked').each(function(){
			selectedIds.push($(this).val());
		});
		
		let $form = $('<form>', {
			action: formlayer_pro.ajax_url,
			method: 'POST'
		});
		
		$form.append($('<input>', { type: 'hidden', name: 'action', value: 'formlayer_export_forms' }));
		$form.append($('<input>', { type: 'hidden', name: 'nonce', value: formlayer_pro.nonce }));
		
		if (selectedIds && selectedIds.length > 0) {
			selectedIds.forEach(id => {
				$form.append($('<input>', { type: 'hidden', name: 'form_ids[]', value: id }));
			});
		}
		
		$('body').append($form);
		$form.submit();
		$form.remove();
	});

	// Select All & Clear actions for form export list
	$('.formlayer-export-select-all').on('click', function(e){
		e.preventDefault();
		$('.formlayer-export-form-checkbox').prop('checked', true);
		$('.formlayer-export-form-checkbox-label').css({
			'border-color': '#3b82f6',
			'background-color': '#eff6ff'
		});
	});

	$('.formlayer-export-deselect-all').on('click', function(e){
		e.preventDefault();
		$('.formlayer-export-form-checkbox').prop('checked', false);
		$('.formlayer-export-form-checkbox-label').css({
			'border-color': '#e2e8f0',
			'background-color': '#fff'
		});
	});

	$('.formlayer-export-form-checkbox').on('click', function(){
		let $label = $(this).closest('.formlayer-export-form-checkbox-label');
		if ($(this).is(':checked')) {
			$label.css({
				'border-color': '#3b82f6',
				'background-color': '#eff6ff'
			});
		} else {
			$label.css({
				'border-color': '#e2e8f0',
				'background-color': '#fff'
			});
		}
	});

	$('#formlayer-import-file').on('change', function(){
		let file = this.files[0];
		if (file) {
			$('#formlayer-import-filename').text(file.name);
			$('#formlayer-import-file-info').css('display', 'flex');
			$('#formlayer-btn-import-forms').prop('disabled', false);
			$('.formlayer-import-dropzone').css('border-color', '#3b82f6').css('background', '#eff6ff');
		}
	});

	$('#formlayer-import-remove').on('click', function(){
		$('#formlayer-import-file').val('');
		$('#formlayer-import-file-info').hide();
		$('#formlayer-btn-import-forms').prop('disabled', true);
		$('.formlayer-import-dropzone').css('border-color', '#e2e8f0').css('background', '#f8fafc');
	});

	$('#formlayer-btn-import-forms').on('click', function(){
		let fileInput = document.getElementById('formlayer-import-file');
		let file = fileInput.files[0];
		if (!file) return;

		let formData = new FormData();
		formData.append('action', 'formlayer_import_forms');
		formData.append('nonce', formlayer_pro.nonce);
		formData.append('import_file', file);

		let $btn = $(this);
		let originalHtml = $btn.html();
		$btn.prop('disabled', true).html('<span class="dashicons dashicons-update spin"></span> Importing...');
		$('#formlayer-import-status').html('');

		$.ajax({
			url: formlayer_pro.ajax_url,
			type: 'POST',
			data: formData,
			processData: false,
			contentType: false,
			success: function(response) {
				if (response.success) {
					$('#formlayer-import-status').html('<div class="formlayer-license-notice formlayer-license-notice-success">' + response.data.message + '</div>');
					setTimeout(function() {
						window.location.reload();
					}, 2000);
				} else {
					$('#formlayer-import-status').html('<div class="formlayer-license-notice formlayer-license-notice-error">' + (response.data.message || 'Import failed') + '</div>');
					$btn.prop('disabled', false).html(originalHtml);
				}
			},
			error: function() {
				$('#formlayer-import-status').html('<div class="formlayer-license-notice formlayer-license-notice-error">Server error during import</div>');
				$btn.prop('disabled', false).html(originalHtml);
			}
		});
	});

});