File "WPDA_Settings_Plugin.php"

Full Path: /home/vantageo/public_html/cache/cache/.wp-cli/wp-content/plugins/wp-data-access/WPDataAccess/Settings/WPDA_Settings_Plugin.php
File size: 42.31 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace WPDataAccess\Settings;

use WPDataAccess\Connection\WPDADB;
use WPDataAccess\Utilities\WPDA_Message_Box;
use WPDataAccess\WPDA;
class WPDA_Settings_Plugin extends WPDA_Settings {
    protected function add_content() {
        // Add datetimepicker
        wp_enqueue_style( 'datetimepicker' );
        wp_enqueue_script( 'datetimepicker' );
        if ( isset( $_REQUEST['action'] ) ) {
            $action = sanitize_text_field( wp_unslash( $_REQUEST['action'] ) );
            // input var okay.
            // Security check.
            if ( 'delete_remote_database' === $action ) {
                $wp_nonce = ( isset( $_REQUEST['_wpnoncedelrdb'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnoncedelrdb'] ) ) : '' );
                // input var okay.
                if ( !wp_verify_nonce( $wp_nonce, 'wpda-delete-remote-database-' . WPDA::get_current_user_login() ) ) {
                    wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) );
                }
                if ( isset( $_REQUEST['remote_database_name'] ) ) {
                    $remote_database_name = sanitize_text_field( wp_unslash( $_REQUEST['remote_database_name'] ) );
                    // input var okay.
                    WPDADB::del_remote_database( $remote_database_name );
                }
            } elseif ( 'update_remote_database' === $action ) {
                $wp_nonce = ( isset( $_REQUEST['_wpnonceupdrdb'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonceupdrdb'] ) ) : '' );
                // input var okay.
                if ( !wp_verify_nonce( $wp_nonce, 'wpda-update-remote-database-' . WPDA::get_current_user_login() ) ) {
                    wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) );
                }
                $database_old = ( isset( $_REQUEST['remote_database_old'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_database_old'] ) ) : '' );
                // input var okay.
                $database = ( isset( $_REQUEST['remote_database'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_database'] ) ) : '' );
                // input var okay.
                $host = ( isset( $_REQUEST['remote_host'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_host'] ) ) : '' );
                // input var okay.
                $username = ( isset( $_REQUEST['remote_user'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_user'] ) ) : '' );
                // input var okay.
                $password = ( isset( $_REQUEST['remote_passwd'] ) ? wp_unslash( $_REQUEST['remote_passwd'] ) : '' );
                // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
                $port = ( isset( $_REQUEST['remote_port'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_port'] ) ) : '' );
                // input var okay.
                $schema = ( isset( $_REQUEST['remote_schema'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_schema'] ) ) : '' );
                // input var okay.
                $enabled = ( isset( $_REQUEST['remote_enabled'] ) ? true : false );
                // Add ssl
                $remote_ssl = ( isset( $_REQUEST['remote_ssl'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_ssl'] ) ) : 'off' );
                // input var okay.
                $remote_client_key = ( isset( $_REQUEST['remote_client_key'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_client_key'] ) ) : '' );
                // input var okay.
                $remote_client_certificate = ( isset( $_REQUEST['remote_client_certificate'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_client_certificate'] ) ) : '' );
                // input var okay.
                $remote_ca_certificate = ( isset( $_REQUEST['remote_ca_certificate'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_ca_certificate'] ) ) : '' );
                // input var okay.
                $remote_certificate_path = ( isset( $_REQUEST['remote_certificate_path'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_certificate_path'] ) ) : '' );
                // input var okay.
                $remote_specified_cipher = ( isset( $_REQUEST['remote_specified_cipher'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['remote_specified_cipher'] ) ) : '' );
                // input var okay.
                if ( '' === $database_old || '' === $database || '' === $host || '' === $username || '' === $password || '' === $port || '' === $schema || '' === $enabled ) {
                    $msg = new WPDA_Message_Box(array(
                        'message_text'           => sprintf( __( 'Cannot save remote database connection [missing arguments]', 'wp-data-access' ) ),
                        'message_type'           => 'error',
                        'message_is_dismissible' => false,
                    ));
                    $msg->box();
                } else {
                    WPDADB::upd_remote_database(
                        $database,
                        $host,
                        $username,
                        $password,
                        $port,
                        $schema,
                        !$enabled,
                        $database_old,
                        $remote_ssl,
                        $remote_client_key,
                        $remote_client_certificate,
                        $remote_ca_certificate,
                        $remote_certificate_path,
                        $remote_specified_cipher
                    );
                }
            } else {
                $wp_nonce = ( isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : '' );
                // input var okay.
                if ( !wp_verify_nonce( $wp_nonce, 'wpda-plugin-settings-' . WPDA::get_current_user_login() ) ) {
                    wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) );
                }
                if ( 'save' === $action ) {
                    WPDA::set_option( WPDA::OPTION_PLUGIN_HIDE_NOTICES, ( isset( $_REQUEST['hide_foreign_notices'] ) ? 'on' : 'off' ) );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_HIDE_ADMIN_MENU, ( isset( $_REQUEST['hide_admin_menu'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['hide_admin_menu'] ) ) : 'off' ) );
                    if ( isset( $_REQUEST['panel_cookies'] ) ) {
                        WPDA::set_option( WPDA::OPTION_PLUGIN_PANEL_COOKIES, sanitize_text_field( wp_unslash( $_REQUEST['panel_cookies'] ) ) );
                    }
                    if ( !isset( $_REQUEST['secret_key'] ) || !isset( $_REQUEST['secret_iv'] ) ) {
                        // Leave both values untouched
                    } else {
                        $secret_key_old = WPDA::get_option( WPDA::OPTION_PLUGIN_SECRET_KEY );
                        $secret_iv_old = WPDA::get_option( WPDA::OPTION_PLUGIN_SECRET_IV );
                        $secret_key_new = sanitize_text_field( wp_unslash( $_REQUEST['secret_key'] ) );
                        // input var okay.
                        $secret_iv_new = sanitize_text_field( wp_unslash( $_REQUEST['secret_iv'] ) );
                        // input var okay.
                        if ( $secret_key_old !== $secret_key_new || $secret_iv_old !== $secret_iv_new ) {
                            // Update existing remote databases
                            WPDADB::load_remote_databases();
                            // load remote databases with old secret key and iv
                            WPDA::set_option( WPDA::OPTION_PLUGIN_SECRET_KEY, $secret_key_new );
                            // update secret key
                            WPDA::set_option( WPDA::OPTION_PLUGIN_SECRET_IV, $secret_iv_new );
                            // update secret iv
                            WPDADB::save_remote_databases();
                            // save remote databases with new secret key and iv
                        }
                    }
                    if ( isset( $_REQUEST['remote_database_name'] ) && isset( $_REQUEST['remote_database_enabled'] ) ) {
                        if ( is_array( $_REQUEST['remote_database_name'] ) && is_array( $_REQUEST['remote_database_enabled'] ) && count( $_REQUEST['remote_database_name'] ) === count( $_REQUEST['remote_database_enabled'] ) ) {
                            $i = 0;
                            while ( $i < count( $_REQUEST['remote_database_name'] ) ) {
                                //phpcs:ignore - 8.1 proof
                                $rdb_name = sanitize_text_field( wp_unslash( $_REQUEST['remote_database_name'][$i] ) );
                                $dbs = WPDADB::get_remote_database( $rdb_name, true );
                                if ( !$dbs ) {
                                    $msg = new WPDA_Message_Box(array(
                                        'message_text'           => __( 'Remote database connection not found', 'wp-data-access' ),
                                        'message_type'           => 'error',
                                        'message_is_dismissible' => false,
                                    ));
                                    $msg->box();
                                } else {
                                    WPDADB::upd_remote_database(
                                        $rdb_name,
                                        $dbs['host'],
                                        $dbs['username'],
                                        $dbs['password'],
                                        $dbs['port'],
                                        $dbs['database'],
                                        $_REQUEST['remote_database_enabled'][$i] === 'FALSE',
                                        false,
                                        $dbs['ssl'],
                                        $dbs['ssl_key'],
                                        $dbs['ssl_cert'],
                                        $dbs['ssl_ca'],
                                        $dbs['ssl_path'],
                                        $dbs['ssl_cipher']
                                    );
                                }
                                $i++;
                            }
                            WPDADB::save_remote_databases();
                            // save changes
                        }
                    }
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDATAACCESS_POST, ( isset( $_REQUEST['wpdataaccess_post'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wpdataaccess_post'] ) ) : 'off' ) );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDATAACCESS_PAGE, ( isset( $_REQUEST['wpdataaccess_page'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wpdataaccess_page'] ) ) : 'off' ) );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDADIEHARD_POST, ( isset( $_REQUEST['wpdadiehard_post'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wpdadiehard_post'] ) ) : 'off' ) );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDADIEHARD_PAGE, ( isset( $_REQUEST['wpdadiehard_page'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wpdadiehard_page'] ) ) : 'off' ) );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDADATAFORMS_POST, ( isset( $_REQUEST['wpdadataforms_post'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wpdadataforms_post'] ) ) : 'off' ) );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDADATAFORMS_PAGE, ( isset( $_REQUEST['wpdadataforms_page'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['wpdadataforms_page'] ) ) : 'off' ) );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_DEBUG, ( isset( $_REQUEST['debug'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['debug'] ) ) : 'off' ) );
                    if ( isset( $_REQUEST['date_format'] ) ) {
                        WPDA::set_option( WPDA::OPTION_PLUGIN_DATE_FORMAT, sanitize_text_field( wp_unslash( $_REQUEST['date_format'] ) ) );
                    }
                    if ( isset( $_REQUEST['date_placeholder'] ) ) {
                        WPDA::set_option( WPDA::OPTION_PLUGIN_DATE_PLACEHOLDER, sanitize_text_field( wp_unslash( $_REQUEST['date_placeholder'] ) ) );
                    }
                    if ( isset( $_REQUEST['time_format'] ) ) {
                        WPDA::set_option( WPDA::OPTION_PLUGIN_TIME_FORMAT, sanitize_text_field( wp_unslash( $_REQUEST['time_format'] ) ) );
                    }
                    if ( isset( $_REQUEST['time_placeholder'] ) ) {
                        WPDA::set_option( WPDA::OPTION_PLUGIN_TIME_PLACEHOLDER, sanitize_text_field( wp_unslash( $_REQUEST['time_placeholder'] ) ) );
                    }
                    if ( isset( $_REQUEST['set_format'] ) ) {
                        WPDA::set_option( WPDA::OPTION_PLUGIN_SET_FORMAT, sanitize_text_field( wp_unslash( $_REQUEST['set_format'] ) ) );
                    }
                } elseif ( 'setdefaults' === $action ) {
                    // Set all back-end settings back to default.
                    WPDA::get_option( WPDA::OPTION_PLUGIN_HIDE_NOTICES );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_HIDE_ADMIN_MENU );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_PANEL_COOKIES );
                    // DO NOT RESET SECRET KEY AND IV
                    // DO NOT RESET RDBs
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDATAACCESS_POST );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDATAACCESS_PAGE );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDADIEHARD_POST );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDADIEHARD_PAGE );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDADATAFORMS_POST );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_WPDADATAFORMS_PAGE );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_DEBUG );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_DATE_FORMAT );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_DATE_PLACEHOLDER );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_TIME_FORMAT );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_TIME_PLACEHOLDER );
                    WPDA::set_option( WPDA::OPTION_PLUGIN_SET_FORMAT );
                }
            }
            $msg = new WPDA_Message_Box(array(
                'message_text' => __( 'Settings saved', 'wp-data-access' ),
            ));
            $msg->box();
        } elseif ( isset( $_REQUEST['msg'] ) && 'ok' === $_REQUEST['msg'] ) {
            $msg = new WPDA_Message_Box(array(
                'message_text' => __( 'Settings saved', 'wp-data-access' ),
            ));
            $msg->box();
        }
        // Get options.
        $hide_foreign_notices = WPDA::get_option( WPDA::OPTION_PLUGIN_HIDE_NOTICES );
        $hide_admin_menu = WPDA::get_option( WPDA::OPTION_PLUGIN_HIDE_ADMIN_MENU );
        $panel_cookies = WPDA::get_option( WPDA::OPTION_PLUGIN_PANEL_COOKIES );
        $secret_key = WPDA::get_option( WPDA::OPTION_PLUGIN_SECRET_KEY );
        $secret_iv = WPDA::get_option( WPDA::OPTION_PLUGIN_SECRET_IV );
        $wpdataaccess_post = WPDA::get_option( WPDA::OPTION_PLUGIN_WPDATAACCESS_POST );
        $wpdataaccess_page = WPDA::get_option( WPDA::OPTION_PLUGIN_WPDATAACCESS_PAGE );
        $wpdadiehard_post = WPDA::get_option( WPDA::OPTION_PLUGIN_WPDADIEHARD_POST );
        $wpdadiehard_page = WPDA::get_option( WPDA::OPTION_PLUGIN_WPDADIEHARD_PAGE );
        $wpdadataforms_post = WPDA::get_option( WPDA::OPTION_PLUGIN_WPDADATAFORMS_POST );
        $wpdadataforms_page = WPDA::get_option( WPDA::OPTION_PLUGIN_WPDADATAFORMS_PAGE );
        $debug = WPDA::get_option( WPDA::OPTION_PLUGIN_DEBUG );
        $date_format = WPDA::get_option( WPDA::OPTION_PLUGIN_DATE_FORMAT );
        $date_placeholder = WPDA::get_option( WPDA::OPTION_PLUGIN_DATE_PLACEHOLDER );
        $time_format = WPDA::get_option( WPDA::OPTION_PLUGIN_TIME_FORMAT );
        $time_placeholder = WPDA::get_option( WPDA::OPTION_PLUGIN_TIME_PLACEHOLDER );
        $set_format = WPDA::get_option( WPDA::OPTION_PLUGIN_SET_FORMAT );
        $remote_databases = WPDADB::get_remote_databases( true );
        ?>
			<style type="text/css">
				.settings_line {
					line-height: 2.4;
				}

				.settings_label {
					display: inline-block;
					width: 7em;
					font-weight: bold;
				}

				.item_width {
					width: 14em;
				}

				.item_label {
					width: 14.9em;
					display: inline-block;
					padding-left: 0.3em;
				}

				.item_label_text {
					width: 7em;
					display: inline-block;
				}

				.item_label_format {
					width: 5em;
					padding: 0.6em;
					border-radius: 4px;
				}

				.item_label_align {
					float: right;
				}

				#wpda_update_database_popup {
					display: none;
					padding: 10px;
					position: absolute;
					top: 30px;
					left: 10px;
					color: black;
					overflow-y: auto;
					background-color: white;
					border: 1px solid #ccc;
					width: max-content;
				}

				#wpda_update_database_popup_header {
					background-color: #ccc;
					height: 30px;
					padding: 10px;
					margin-bottom: 10px;
				}
			</style>
			<script type='text/javascript'>
				jQuery(function () {
					jQuery('.radio_date_format').on('click', function() {
						jQuery('#date_format').val(jQuery(this).val());
					});

					jQuery('.radio_time_format').on('click', function() {
						jQuery('#time_format').val(jQuery(this).val());
					});

					jQuery.datetimepicker.setLocale('<?php 
        echo esc_attr( substr( get_locale(), 0, 2 ) );
        ?>');
					jQuery('#test_datetime').attr('autocomplete', 'off');
					jQuery('#init_datetime').on('click', function() {
						jQuery('#test_datetime').datetimepicker({
							format: jQuery('#date_format').val() + ' ' + jQuery('#time_format').val(),
							datepicker: true,
							timepicker: true
						});
						jQuery('#init_datetime').toggle();
						jQuery('#test_datetime').toggle();
						jQuery('#test_datetime').val('');
						jQuery('#test_datetime').attr('placeholder', jQuery('#date_placeholder').val() + ' ' + jQuery('#time_placeholder').val());
					});
					jQuery('#test_datetime').on('blur', function() {
						jQuery('#test_datetime').toggle();
						jQuery('#init_datetime').toggle();
					});
				});

				function delete_remote_database(id) {
					remote_database_name = jQuery('#remote_database_name' + id).val();
					if (confirm("<?php 
        echo __( 'Delete remote database connection from plugin repository?', 'wp-data-access' );
        ?>")) {
						jQuery('#delete_remote_database_name').val(remote_database_name);
						jQuery('#wpda_delete_database').submit();
					}
				}

				function update_rdb_setting(id) {
					if (jQuery('#remote_database' + id).is(':checked')) {
						jQuery('#remote_database_enabled' + id).val('TRUE');
					} else {
						jQuery('#remote_database_enabled' + id).val('FALSE');
					}
				}

				function edit_rdb_setting(id) {
					jQuery('#wpda_update_database_popup').show();
					jQuery('#remote_database_old').val(id);
					jQuery('#remote_database').val(id);
					jQuery('#remote_host').val(remote_databases[id].host);
					jQuery('#remote_user').val(remote_databases[id].username);
					jQuery('#remote_passwd').val(remote_databases[id].password);
					jQuery('#remote_port').val(remote_databases[id].port);
					jQuery('#remote_schema').val(remote_databases[id].database);
					jQuery('#remote_enabled').prop('checked', !remote_databases[id].disabled);
					jQuery('#remote_ssl').prop('checked', remote_databases[id].ssl==="on");//.val(remote_databases[id].ssl);
					jQuery('#remote_client_key').val(remote_databases[id].ssl_key);
					jQuery('#remote_client_certificate').val(remote_databases[id].ssl_cert);
					jQuery('#remote_ca_certificate').val(remote_databases[id].ssl_ca);
					jQuery('#remote_certificate_path').val(remote_databases[id].ssl_path);
					jQuery('#remote_specified_cipher').val(remote_databases[id].ssl_cipher);
					if (remote_databases[id].ssl==="on") {
						jQuery('#remote_database_block_ssl').show();
					} else {
						jQuery('#remote_database_block_ssl').hide();
					}
				}

				function test_remote_clear(mode = '') {
					jQuery('#' + mode + 'remote_database_block_test_content').html('');
					jQuery('#' + mode + 'remote_database_block_test').hide();
					jQuery('#' + mode + 'remote_clear_button').hide();
				}

				function test_remote_connection(mode = '') {
					host = jQuery('#remote_host').val();
					user = jQuery('#remote_user').val();
					pass = jQuery('#remote_passwd').val();
					port = jQuery('#remote_port').val();
					dbs = jQuery('#remote_schema').val();

					url = '//' + window.location.host + window.location.pathname.replace('options-general','admin') +
						'?action=wpda_check_remote_database_connection';

					jQuery('#remote_test_button').val('Testing...');

					jQuery.ajax({
						method: 'POST',
						url: url,
						data: {
							host: host,
							user: user,
							passwd: pass,
							port: port,
							schema: dbs
						}
					}).done(
						function (msg) {
							jQuery('#remote_database_block_test_content').html(msg);
							jQuery('#remote_database_block_test').show();
						}
					).fail(
						function () {
							jQuery('#remote_database_block_test_content').html('Preparing connection...<br/>Establishing connection...<br/><br/><strong>Remote database connection invalid</strong>');
							jQuery('#remote_database_block_test').show();
						}
					).always(
						function () {
							jQuery('#remote_test_button').val('Test');
							jQuery('#remote_clear_button').show();
						}
					);
				}

				jQuery(function () {
					jQuery('#remote_database').keydown(function(e) {
						var field = this;
						setTimeout(function () {
							if (field.value.indexOf('rdb:') !== 0) {
								jQuery(field).val('rdb:');
							}
						}, 1);
					});
				});

				var remote_databases = new Object();
				<?php 
        foreach ( $remote_databases as $key => $value ) {
            echo "remote_databases['{$key}'] = " . json_encode( $value ) . ';';
            // phpcs:ignore WordPress.Security.EscapeOutput
        }
        ?>
			</script>
			<div id="wpda_update_database_popup">
				<div id="wpda_update_database_popup_header">
					<span style="display:inline-block;margin-top:5px;">
						<strong>
							<?php 
        echo __( 'Edit Remote Database Connection', 'wp-data-access' );
        ?>
						</strong>
					</span>
					<span class="button" style="float:right;height:10px;"
						  onclick="jQuery('#wpda_update_database_popup').hide()">x</span><br/>
				</div>

				<form id="wpda_update_database" method="post"
					  action="?page=<?php 
        echo esc_attr( $this->page );
        ?>&tab=plugin">

					<div>
						<label for="remote_database" style="vertical-align:baseline;"
							   class="database_item_label">Database name:</label>
						<input type="text" name="remote_database" id="remote_database" value="rdb:">
						<span>(local WordPress dashboard)</span>
						<div style="height:10px;"></div>
						<label for="remote_host" style="vertical-align:baseline;" class="database_item_label">MySQL host:</label>
						<input type="text" name="remote_host" id="remote_host">
						<span>(ip address or hostname)</span>
						<br/>
						<label for="remote_user" style="vertical-align:baseline;" class="database_item_label">MySQL username:</label>
						<input type="text" name="remote_user" id="remote_user">
						<br/>
						<label for="remote_passwd" style="vertical-align:baseline;" class="database_item_label">MySQL password:</label>
						<input type="password" name="remote_passwd" id="remote_passwd" autocomplete="new-password">
						<i class="fas fa-eye" onclick="wpda_toggle_password('remote_passwd', event)" style="cursor:pointer"></i>
						<br/>
						<label for="remote_port" style="vertical-align:baseline;" class="database_item_label">MySQL port:</label>
						<input type="text" name="remote_port" id="remote_port" value="3306">
						<br/>
						<label for="remote_schema" style="vertical-align:baseline;" class="database_item_label">MySQL schema:</label>
						<input type="text" name="remote_schema" id="remote_schema">
						<br/>
						<label for="remote_schema" style="vertical-align:baseline;line-height:30px;" class="database_item_label">
							Enabled:
						</label>
						<input type="checkbox" name="remote_enabled" id="remote_enabled">

						<br/>
						<label style="line-height:30px;" for="remote_ssl" style="vertical-align:baseline;" class="database_item_label">SSL:</label>
						<input type="checkbox" name="remote_ssl" id="remote_ssl" unchecked onclick="jQuery('#remote_database_block_ssl').toggle()">
						<div id="remote_database_block_ssl">
							<label for="remote_client_key" style="vertical-align:baseline;" class="database_item_label">Client key:</label>
							<input type="text" name="remote_client_key" id="remote_client_key">
							<br/>
							<label for="remote_client_certificate" style="vertical-align:baseline;" class="database_item_label">Client certificate:</label>
							<input type="text" name="remote_client_certificate" id="remote_client_certificate">
							<br/>
							<label for="remote_ca_certificate" style="vertical-align:baseline;" class="database_item_label">CA certificate:</label>
							<input type="text" name="remote_ca_certificate" id="remote_ca_certificate">
							<br/>
							<label for="remote_certificate_path" style="vertical-align:baseline;" class="database_item_label">Certificate path:</label>
							<input type="text" name="remote_certificate_path" id="remote_certificate_path">
							<br/>
							<label for="remote_specified_cipher" style="vertical-align:baseline;" class="database_item_label">Specified Cipher:</label>
							<input type="text" name="remote_specified_cipher" id="remote_specified_cipher">
						</div>

						<div style="height:10px;"></div>
						<label class="database_item_label"></label>
						<input type="button" value="Test" onclick="test_remote_connection(); return false;"
							   id="remote_test_button" class="button">
						<input type="button" value="Clear" onclick="test_remote_clear(); return false;"
							   id="remote_clear_button" class="button" style="display:none;">
						<div style="height:10px;"></div>
					</div>
					<div id="remote_database_block_test" style="display:none;">
						<div id="remote_database_block_test_content"
							 class="remote_database_block_test_content"></div>
						<div style="height:10px;"></div>
					</div>
					<input type="hidden" name="remote_database_old" id="remote_database_old" value=""">
					<input type="hidden" name="action" value="update_remote_database"/>
					<input type="submit" class="button button-secondary" value="<?php 
        echo __( 'Save', 'wp-data-access' );
        ?>">
					<a href="javascript:void(0)"
					   onclick="jQuery('#wpda_update_database_popup').hide()"
					   class="button button-secondary">
						<?php 
        echo __( 'Cancel', 'wp-data-access' );
        ?>
					</a>
					<?php 
        $rdb_wp_nonce_action = 'wpda-update-remote-database-' . WPDA::get_current_user_login();
        $rdb_wp_nonce = wp_create_nonce( $rdb_wp_nonce_action );
        ?>
					<input type="hidden" name="_wpnonceupdrdb" value="<?php 
        echo esc_attr( $rdb_wp_nonce );
        ?>"/>
				</form>
			</div>
			<form id="wpda_delete_database" method="post" style="display:none;"
				  action="?page=<?php 
        echo esc_attr( $this->page );
        ?>&tab=plugin">
				<input type="hidden" name="remote_database_name" id="delete_remote_database_name" value=""/>
				<input type="hidden" name="action" value="delete_remote_database"/>
				<?php 
        $rdb_wp_nonce_action = 'wpda-delete-remote-database-' . WPDA::get_current_user_login();
        $rdb_wp_nonce = wp_create_nonce( $rdb_wp_nonce_action );
        ?>
				<input type="hidden" name="_wpnoncedelrdb" value="<?php 
        echo esc_attr( $rdb_wp_nonce );
        ?>"/>
			</form>
			<form id="wpda_settings_plugin" method="post"
				  action="?page=<?php 
        echo esc_attr( $this->page );
        ?>&tab=plugin">
				<table class="wpda-table-settings" id="wpda_table_plugin">
					<tr>
						<th><?php 
        echo __( 'Plugin menu', 'wp-data-access' );
        ?></th>
						<td>
							<label>
								<input type="checkbox" name="hide_admin_menu" <?php 
        echo ( 'on' === $hide_admin_menu ? 'checked="checked"' : '' );
        ?>/>
								<?php 
        echo __( 'Hide plugin menu in admin panel', 'wp-data-access' );
        ?>
							</label>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Notices', 'wp-data-access' );
        ?></th>
						<td>
							<label>
								<input type="checkbox" name="hide_foreign_notices" <?php 
        echo ( $hide_foreign_notices === 'on' ? 'checked' : '' );
        ?> />
								<?php 
        echo __( 'Hide notices of other themes and plugins on WP Data Access admin pages', 'wp-data-access' );
        ?>
							</label>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Panel cookies', 'wp-data-access' );
        ?></th>
						<td>
							<label>
								<input
									type="radio"
									name="panel_cookies"
									value="clear"
									<?php 
        echo ( 'clear' === $panel_cookies ? 'checked' : '' );
        ?>
								><?php 
        echo __( 'Clear when switching panels', 'wp-data-access' );
        ?>
							</label>
							<br/>
							<label>
								<input
									type="radio"
									name="panel_cookies"
									value="keep"
									<?php 
        echo ( 'keep' === $panel_cookies ? 'checked' : '' );
        ?>
								><?php 
        echo __( 'Keep when switching panels', 'wp-data-access' );
        ?>
							</label>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Secret key and IV' );
        ?></th>
						<td>
							<input type="text" name="secret_key" value="<?php 
        echo esc_attr( $secret_key );
        ?>"/>
							<br/>
							<input type="text" name="secret_iv" value="<?php 
        echo esc_attr( $secret_iv );
        ?>"/>
							<br/><br/>
							<span class="dashicons dashicons-info"></span><?php 
        echo __( 'Existing remote database connection settings will be converted', 'wp-data-access' );
        ?>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Remote database connections' );
        ?></th>
						<td>
							<?php 
        $i = 0;
        foreach ( $remote_databases as $remote_database => $remote_database_settings ) {
            $checked = ( isset( $remote_database_settings['disabled'] ) && $remote_database_settings['disabled'] ? '' : 'checked' );
            $enabled = ( isset( $remote_database_settings['disabled'] ) && $remote_database_settings['disabled'] ? 'FALSE' : 'TRUE' );
            ?>
								<a href="javascript:void(0)"
								   onclick="delete_remote_database('<?php 
            echo esc_attr( $i );
            ?>')"
								   style="text-decoration:none;"
								   class="wpda_tooltip"
								   title="<?php 
            echo __( 'Delete remote database connection from plugin repository', 'wp-data-access' );
            ?>">
									<span class="dashicons dashicons-trash" style="font-size:18px;"></span>
								</a>
								<label class="wpda_tooltip" title="<?php 
            echo __( 'Disable remote database connection', 'wp-data-access' );
            ?>">
									<input type="checkbox" name="remote_database[]" id="remote_database<?php 
            echo esc_attr( $i );
            ?>" onclick="update_rdb_setting('<?php 
            echo esc_attr( $i );
            ?>')" <?php 
            echo esc_attr( $checked );
            ?>>
									<input type="hidden" name="remote_database_name[]" id="remote_database_name<?php 
            echo esc_attr( $i );
            ?>" value="<?php 
            echo esc_attr( $remote_database );
            ?>">
									<input type="hidden" name="remote_database_enabled[]" id="remote_database_enabled<?php 
            echo esc_attr( $i );
            ?>" value="<?php 
            echo esc_attr( $enabled );
            ?>">
									<?php 
            echo esc_attr( $remote_database );
            ?>
								</label>
								<a href="javascript:void(0)"
								   onclick="edit_rdb_setting('<?php 
            echo esc_attr( $remote_database );
            ?>')"
								   style="text-decoration:none;"
								   class="wpda_tooltip"
								   title="<?php 
            echo __( 'Edit remote database connection', 'wp-data-access' );
            ?>">
									<span class="dashicons dashicons-edit" style="font-size:18px;"></span>
								</a><br/>
								<?php 
            $i++;
        }
        ?>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Shortcode [wpdataaccess]' );
        ?></th>
						<td>
							<label>
								<input type="checkbox" name="wpdataaccess_post" <?php 
        echo ( 'on' === $wpdataaccess_post ? 'checked="checked"' : '' );
        ?>/>
								Allow in posts
							</label>
							<br/>
							<label>
								<input type="checkbox" name="wpdataaccess_page" <?php 
        echo ( 'on' === $wpdataaccess_page ? 'checked="checked"' : '' );
        ?>/>
								Allow in pages
							</label>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Shortcode [wpdadiehard]' );
        ?></th>
						<td>
							<label>
								<input type="checkbox" name="wpdadiehard_post" <?php 
        echo ( 'on' === $wpdadiehard_post ? 'checked="checked"' : '' );
        ?>/>
								Allow in posts
							</label>
							<br/>
							<label>
								<input type="checkbox" name="wpdadiehard_page" <?php 
        echo ( 'on' === $wpdadiehard_page ? 'checked="checked"' : '' );
        ?>/>
								Allow in pages
							</label>
						</td>
					</tr>
					<?php 
        ?>
					<tr>
						<th><?php 
        echo __( 'Debug mode', 'wp-data-access' );
        ?></th>
						<td>
							<label>
								<input
									type="checkbox"
									name="debug" <?php 
        echo ( 'on' === $debug ? 'checked' : '' );
        ?>
								><?php 
        echo __( 'Enable debug mode', 'wp-data-access' );
        ?>
							</label>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Date format' );
        ?></th>
						<td>
							<span class="settings_label"><?php 
        echo __( 'Output', 'wp-data-access' );
        ?></span>
							<input type="text" value="<?php 
        echo esc_attr( get_option( 'date_format' ) );
        ?>" class="item_width"
								   readonly/>
							<?php 
        echo __( '(WordPress format)', 'wp-data-access' );
        ?>
							<br/>
							<span class="settings_line">
								<span class="settings_label"><?php 
        echo __( 'Input', 'wp-data-access' );
        ?></span>
								<label class="item_label">
									<input type="radio" name="radio_date_format" class="radio_date_format"
										   value="Y-m-d" <?php 
        echo ( 'Y-m-d' === $date_format ? 'checked="checked"' : '' );
        ?>/>
									<span class="item_label_text"><?php 
        echo esc_attr( ( new \DateTime() )->format( 'Y-m-d' ) );
        ?></span>
									<span class="item_label_align">
										<input type="text" class="item_label_format" value="Y-m-d" readonly/>
									</span>
								</label>
							</span>
							<?php 
        echo __( '(JavaScript format)', 'wp-data-access' );
        ?>
							<br/>
							<span class="settings_line">
								<span class="settings_label"></span>
								<label class="item_label">
									<input type="radio" name="radio_date_format" class="radio_date_format"
										   value="m/d/Y" <?php 
        echo ( 'm/d/Y' === $date_format ? 'checked="checked"' : '' );
        ?>/>
									<span class="item_label_text"><?php 
        echo esc_attr( ( new \DateTime() )->format( 'm/d/Y' ) );
        ?></span>
									<span class="item_label_align">
										<input type="text" class="item_label_format" value="m/d/Y" readonly/>
									</span>
								</label>
							</span>
							<br/>
							<span class="settings_line">
								<span class="settings_label"></span>
								<label class="item_label">
									<input type="radio" name="radio_date_format" class="radio_date_format"
										   value="d/m/Y" <?php 
        echo ( 'd/m/Y' === $date_format ? 'checked="checked"' : '' );
        ?>/>
									<span class="item_label_text"><?php 
        echo esc_attr( ( new \DateTime() )->format( 'd/m/Y' ) );
        ?></span>
									<span class="item_label_align">
										<input type="text" class="item_label_format" value="d/m/Y" readonly/>
									</span>
								</label>
							</span>
							<br/>
							<span class="settings_line">
								<span class="settings_label"></span>
								<label class="item_label">
									<input type="radio" name="radio_date_format" name="date_format"
										   value="custom" <?php 
        echo ( 'Y-m-d' !== $date_format && 'd/m/Y' !== $date_format && 'm/d/Y' !== $date_format ? 'checked="checked"' : '' );
        ?>/>
									<span class="item_label_text"><?php 
        echo __( 'Custom:', 'wp-data-access' );
        ?></span>
									<span class="item_label_align">
										<input class="item_label_format" type="text" name="date_format" id="date_format"
											   value="<?php 
        echo esc_attr( $date_format );
        ?>" class="item_label_format"/>
									</span>
								</label>
							</span>
							<br/>
							<span class="settings_label"><?php 
        echo __( 'Placeholder', 'wp-data-access' );
        ?></span>
							<input type="text" name="date_placeholder" id="date_placeholder"
								   value="<?php 
        echo esc_attr( $date_placeholder );
        ?>" class="item_width"/>
							<?php 
        echo __( '(user info)', 'wp-data-access' );
        ?>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Time format' );
        ?></th>
						<td>
							<span class="settings_label"><?php 
        echo __( 'Output', 'wp-data-access' );
        ?></span>
							<input type="text" value="<?php 
        echo esc_attr( get_option( 'time_format' ) );
        ?>" class="item_width"
								   readonly/>
							<?php 
        echo __( '(WordPress format)', 'wp-data-access' );
        ?>
							<br/>
							<span class="settings_line">
								<span class="settings_label"><?php 
        echo __( 'Input', 'wp-data-access' );
        ?></span>
								<label class="item_label">
									<input type="radio" name="radio_time_format" class="radio_time_format"
										   value="H:i" <?php 
        echo ( 'H:i' === $time_format ? 'checked="checked"' : '' );
        ?>/>
									<span class="item_label_text"><?php 
        echo esc_attr( ( new \DateTime() )->format( 'H:i' ) );
        ?></span>
									<span class="item_label_align">
										<input type="text" class="item_label_format" value="H:i" readonly/>
									</span>
								</label>
							</span>
							<?php 
        echo __( '(JavaScript format)', 'wp-data-access' );
        ?>
							<br/>
							<span class="settings_line">
								<span class="settings_label"></span>
								<label class="item_label">
									<input type="radio" name="radio_time_format" name="time_format"
										   value="custom" <?php 
        echo ( 'H:i' !== $time_format ? 'checked="checked"' : '' );
        ?>/>
									<span class="item_label_text"><?php 
        echo __( 'Custom:', 'wp-data-access' );
        ?></span>
									<span class="item_label_align">
										<input class="item_label_format" type="text" name="time_format" id="time_format"
											   value="<?php 
        echo esc_attr( $time_format );
        ?>" class="item_label_format"/>
									</span>
								</label>
							</span>
							<br/>
							<span class="settings_label"><?php 
        echo __( 'Placeholder', 'wp-data-access' );
        ?></span>
							<input type="text" name="time_placeholder" id="time_placeholder"
								   value="<?php 
        echo esc_attr( $time_placeholder );
        ?>" class="item_width"/>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Date/time test' );
        ?></th>
						<td>
							<input type="button" id="init_datetime" value="Test DateTimePicker" class="button item_width"/>
							<input type="text" class="item_width" id="test_datetime" style="display:none;" />
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Set format' );
        ?></th>
						<td>
							<span><?php 
        echo __( 'Show columns of data type set in list table as' );
        ?></span>
							<select name="set_format">
								<option value="csv" <?php 
        echo ( 'csv' === $set_format ? 'selected' : '' );
        ?>>Comma separated values</option>
								<option value="ul" <?php 
        echo ( 'ul' === $set_format ? 'selected' : '' );
        ?>>Unordered list</option>
								<option value="ol" <?php 
        echo ( 'ol' === $set_format ? 'selected' : '' );
        ?>>Ordered list</option>
							</select>
						</td>
					</tr>
					<tr>
						<th><span class="dashicons dashicons-info" style="float:right;font-size:300%;"></span></th>
						<td>
							<span class="dashicons dashicons-yes"></span>
							<?php 
        echo __( 'The plugin uses your WordPress general settings to format your date and time output', 'wp-data-access' );
        ?>
							<br/>
							<span class="dashicons dashicons-yes"></span>
							<a href="<?php 
        echo admin_url( 'options-general.php' );
        // phpcs:ignore WordPress.Security.EscapeOutput
        ?>?page=wpdataaccess">
								<?php 
        echo __( 'Output formats can be changed in WordPress general settings', 'wp-data-access' );
        ?>
							</a>
							<br/>
							<span class="dashicons dashicons-yes"></span>
							<?php 
        echo __( 'The plugin uses the jQuery DateTimePicker plugin for data entry validation', 'wp-data-access' );
        ?>
							<br/>
							<span class="dashicons dashicons-yes"></span>
							<a href="https://xdsoft.net/jqplugins/datetimepicker/" target="_blank">
								<?php 
        echo __( 'Input formats can be found on the XDSoft DateTimePicker page', 'wp-data-access' );
        ?>
							</a>
						</td>
					</tr>
				</table>
				<div class="wpda-table-settings-button">
					<input type="hidden" name="action" value="save"/>
					<button type="submit" class="button button-primary">
						<i class="fas fa-check wpda_icon_on_button"></i>
						<?php 
        echo __( 'Save Plugin Settings', 'wp-data-access' );
        ?>
					</button>
					<a href="javascript:void(0)"
					   onclick="if (confirm('<?php 
        echo __( 'Reset to defaults?', 'wp-data-access' );
        ?>')) {
						   jQuery('input[name=&quot;action&quot;]').val('setdefaults');
						   jQuery('#wpda_settings_plugin').trigger('submit')
						   }"
					   class="button">
						<i class="fas fa-times-circle wpda_icon_on_button"></i>
						<?php 
        echo __( 'Reset Plugin Settings To Defaults', 'wp-data-access' );
        ?>
					</a>
				</div>
				<?php 
        wp_nonce_field( 'wpda-plugin-settings-' . WPDA::get_current_user_login(), '_wpnonce', false );
        ?>
			</form>
			<?php 
    }

}