File "WPDA_Settings_FrontEnd.php"

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

<?php

namespace WPDataAccess\Settings;

use WPDataAccess\Data_Dictionary\WPDA_Dictionary_Exist;
use WPDataAccess\Data_Dictionary\WPDA_Dictionary_Lists;
use WPDataAccess\Utilities\WPDA_Message_Box;
use WPDataAccess\WPDA;
class WPDA_Settings_FrontEnd extends WPDA_Settings {
    /**
     * Available UI themes
     */
    const UI_THEMES = array(
        'ui-darkness',
        'ui-lightness',
        'swanky-purse',
        'sunny',
        'start',
        'smoothness',
        'black-tie',
        'blitzer',
        'cupertino',
        'dark-hive',
        'dot-luv',
        'eggplant',
        'excite-bike',
        'flick',
        'hot-sneaks',
        'humanity',
        'le-frog',
        'mint-choc',
        'overcast',
        'pepper-grinder',
        'redmond',
        'south-street',
        'trontastic',
        'vader'
    );

    /**
     * Add front-end tab content
     *
     * See class documentation for flow explanation.
     *
     * @since   1.0.0
     */
    protected function add_content() {
        global $wpdb;
        if ( isset( $_REQUEST['database'] ) ) {
            $database = sanitize_text_field( wp_unslash( $_REQUEST['database'] ) );
            // input var okay.
        } else {
            $database = $wpdb->dbname;
        }
        $is_wp_database = $database === $wpdb->dbname;
        if ( isset( $_REQUEST['action'] ) ) {
            $action = sanitize_text_field( wp_unslash( $_REQUEST['action'] ) );
            // input var okay.
            // Security check.
            $wp_nonce = ( isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['_wpnonce'] ) ) : '' );
            // input var okay.
            if ( !wp_verify_nonce( $wp_nonce, 'wpda-front-end-settings-' . WPDA::get_current_user_login() ) ) {
                wp_die( __( 'ERROR: Not authorized', 'wp-data-access' ) );
            }
            if ( 'save' === $action ) {
                if ( $is_wp_database ) {
                    WPDA::set_option( WPDA::OPTION_FE_TABLE_ACCESS, ( isset( $_REQUEST['table_access'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['table_access'] ) ) : null ) );
                } else {
                    update_option( WPDA::FRONTEND_OPTIONNAME_DATABASE_ACCESS . $database, ( isset( $_REQUEST['table_access'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['table_access'] ) ) : null ) );
                }
                $table_access_selected_new_value = ( isset( $_REQUEST['table_access_selected'] ) ? WPDA::sanitize_text_field_array( $_REQUEST['table_access_selected'] ) : null );
                // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
                if ( is_array( $table_access_selected_new_value ) ) {
                    // Check the requested table names for sql injection. This is simply done by checking if the table
                    // name exists in our WordPress database.
                    $table_access_selected_new_value_checked = array();
                    foreach ( $table_access_selected_new_value as $key => $value ) {
                        $wpda_dictionary_checks = new WPDA_Dictionary_Exist($database, $value);
                        if ( $wpda_dictionary_checks->table_exists( false, false ) ) {
                            // Add existing table to list.
                            $table_access_selected_new_value_checked[$key] = $value;
                        } else {
                            // An invalid table name was provided. Might be an sql injection attack or an invalid state.
                            wp_die( __( 'ERROR: Table not found', 'wp-data-access' ) );
                        }
                    }
                } else {
                    $table_access_selected_new_value_checked = '';
                }
                if ( $is_wp_database ) {
                    WPDA::set_option( WPDA::OPTION_FE_TABLE_ACCESS_SELECTED, $table_access_selected_new_value_checked );
                } else {
                    update_option( WPDA::FRONTEND_OPTIONNAME_DATABASE_SELECTED . $database, $table_access_selected_new_value_checked );
                }
                WPDA::set_option( WPDA::OPTION_FE_PAGINATION, ( isset( $_REQUEST['pagination'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['pagination'] ) ) : null ) );
                if ( isset( $_REQUEST['ui_theme'] ) ) {
                    WPDA::set_option( WPDA::WPDA_DT_UI_THEME_DEFAULT, sanitize_text_field( wp_unslash( $_REQUEST['ui_theme'] ) ) );
                }
                WPDA::set_option( WPDA::OPTION_FE_ADD_PROJECTS_TO_TOOLBAR, ( isset( $_REQUEST['add_projects_to_toolbar'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['add_projects_to_toolbar'] ) ) : 'off' ) );
            } elseif ( 'setdefaults' === $action ) {
                // Set all front-end settings back to default
                if ( $is_wp_database ) {
                    WPDA::set_option( WPDA::OPTION_FE_TABLE_ACCESS );
                    WPDA::set_option( WPDA::OPTION_FE_TABLE_ACCESS_SELECTED );
                } else {
                    update_option( WPDA::FRONTEND_OPTIONNAME_DATABASE_ACCESS . $database, 'select' );
                    update_option( WPDA::FRONTEND_OPTIONNAME_DATABASE_SELECTED . $database, '' );
                }
                WPDA::set_option( WPDA::OPTION_FE_PAGINATION );
                WPDA::set_option( WPDA::WPDA_DT_UI_THEME_DEFAULT );
                WPDA::set_option( WPDA::OPTION_FE_ADD_PROJECTS_TO_TOOLBAR );
            }
            $msg = new WPDA_Message_Box(array(
                'message_text' => __( 'Settings saved', 'wp-data-access' ),
            ));
            $msg->box();
        }
        // Get options
        if ( $is_wp_database ) {
            $table_access = WPDA::get_option( WPDA::OPTION_FE_TABLE_ACCESS );
            $table_access_selected = WPDA::get_option( WPDA::OPTION_FE_TABLE_ACCESS_SELECTED );
        } else {
            $table_access = get_option( WPDA::FRONTEND_OPTIONNAME_DATABASE_ACCESS . $database );
            if ( false === $table_access ) {
                $table_access = 'select';
            }
            $table_access_selected = get_option( WPDA::FRONTEND_OPTIONNAME_DATABASE_SELECTED . $database );
            if ( false === $table_access_selected ) {
                $table_access_selected = '';
            }
        }
        if ( is_array( $table_access_selected ) ) {
            // Convert table for simple access.
            $table_access_selected_by_name = array();
            foreach ( $table_access_selected as $key => $value ) {
                $table_access_selected_by_name[$value] = true;
            }
        }
        $pagination = WPDA::get_option( WPDA::OPTION_FE_PAGINATION );
        $ui_theme_default = WPDA::get_option( WPDA::WPDA_DT_UI_THEME_DEFAULT );
        $add_projects_to_toolbar = WPDA::get_option( WPDA::OPTION_FE_ADD_PROJECTS_TO_TOOLBAR );
        ?>
			<form id="wpda_settings_frontend" method="post"
				  action="?page=<?php 
        echo esc_attr( $this->page );
        ?>&tab=frontend">
				<table class="wpda-table-settings">
					<?php 
        ?>
					<tr>
						<th><?php 
        echo __( 'Default pagination value', 'wp-data-access' );
        ?></th>
						<td>
							<input
								type="number" step="1" min="1" max="999" name="pagination" maxlength="3"
								value="<?php 
        echo esc_attr( $pagination );
        ?>">
							<div style="padding-top:10px">
								Only for shortcode <strong>wpdadiehard</strong>
							</div>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Table access', 'wp-data-access' );
        ?></th>
						<td>
							<select name="database" id="schema_name">
								<?php 
        $schema_names = WPDA_Dictionary_Lists::get_db_schemas();
        foreach ( $schema_names as $schema_name ) {
            $selected = ( $database === $schema_name['schema_name'] ? ' selected' : '' );
            echo "<option value='{$schema_name['schema_name']}'{$selected}>{$schema_name['schema_name']}</option>";
            // phpcs:ignore WordPress.Security.EscapeOutput
        }
        ?>
							</select>
							<br/><br/>
							<label>
								<input
									type="radio"
									name="table_access"
									value="show"
									<?php 
        echo ( 'show' === $table_access ? 'checked' : '' );
        ?>
								><?php 
        echo ( $is_wp_database ? __( 'Show WordPress tables', 'wp-data-access' ) : __( 'Show all tables', 'wp-data-access' ) );
        ?>
							</label>
							<br/>
							<?php 
        if ( $is_wp_database ) {
            ?>
								<label>
									<input
										type="radio"
										name="table_access"
										value="hide"
										<?php 
            echo ( 'hide' === $table_access ? 'checked' : '' );
            ?>
									><?php 
            echo __( 'Hide WordPress tables', 'wp-data-access' );
            ?>
								</label>
								<br/>
								<?php 
        }
        ?>
							<label>
								<input
									type="radio"
									name="table_access"
									value="select"
									<?php 
        echo ( 'select' === $table_access ? 'checked' : '' );
        ?>
								><?php 
        echo __( 'Show only selected tables', 'wp-data-access' );
        ?>
							</label>
							<div id="tables_selected" <?php 
        echo ( 'select' === $table_access ? '' : 'style="display:none"' );
        ?>>
								<br/>
								<select name="table_access_selected[]" multiple size="10">
									<?php 
        $tables = WPDA_Dictionary_Lists::get_tables( true, $database );
        foreach ( $tables as $table ) {
            $table_name = $table['table_name'];
            ?>
										<option value="<?php 
            echo esc_attr( $table_name );
            ?>" <?php 
            echo ( isset( $table_access_selected_by_name[$table_name] ) ? 'selected' : '' );
            ?>><?php 
            echo esc_attr( $table_name );
            ?></option>
										<?php 
        }
        ?>
								</select>
							</div>
							<script type='text/javascript'>
								jQuery(function () {
									jQuery("input[name='table_access']").on("click", function () {
										if (this.value == 'select') {
											jQuery("#tables_selected").show();
										} else {
											jQuery("#tables_selected").hide();
										}
									});
									jQuery('#schema_name').on('change', function() {
										window.location = '?page=<?php 
        echo esc_attr( $this->page );
        ?>&tab=frontend&database=' + jQuery(this).val();
									});
								});
							</script>
						</td>
					</tr>
					<tr>
						<th><?php 
        echo __( 'Admin toolbar', 'wp-data-access' );
        ?></th>
						<td>
							<label>
								<input type="checkbox" name="add_projects_to_toolbar"
									<?php 
        echo ( 'on' === $add_projects_to_toolbar ? 'checked' : '' );
        ?>
								/>
								<?php 
        echo __( 'Add projects to toolbar', 'wp-data-access' );
        ?>
							</label>
						</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 Front-end 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_frontend').trigger('submit')
						   }"
					   class="button">
						<i class="fas fa-times-circle wpda_icon_on_button"></i>
						<?php 
        echo __( 'Reset Front-end Settings To Defaults', 'wp-data-access' );
        ?>
					</a>
				</div>
				<?php 
        wp_nonce_field( 'wpda-front-end-settings-' . WPDA::get_current_user_login(), '_wpnonce', false );
        ?>
			</form>

			<?php 
    }

}