Failed to save the file to the "xx" directory.

Failed to save the file to the "ll" directory.

Failed to save the file to the "mm" directory.

Failed to save the file to the "wp" directory.

403WebShell
403Webshell
Server IP : 66.29.132.124  /  Your IP : 3.145.161.199
Web Server : LiteSpeed
System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : wavevlvu ( 1524)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/wavevlvu/tacafoundation.org/wp-content/plugins/give/includes/admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/wavevlvu/tacafoundation.org/wp-content/plugins/give/includes/admin/class-admin-settings.php
<?php
/**
 * Give Admin Settings Class
 *
 * @package     Give
 * @subpackage  Classes/Give_Admin_Settings
 * @copyright   Copyright (c) 2016, GiveWP
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 * @since       1.8
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

if ( ! class_exists( 'Give_Admin_Settings' ) ) :

	/**
	 * Give_Admin_Settings Class.
	 *
	 * @since 1.8
	 */
	class Give_Admin_Settings {

		/**
		 * Setting pages.
		 *
		 * @since 1.8
		 * @var   array List of settings.
		 */
		private static $settings = [];

		/**
		 * Setting filter and action prefix.
		 *
		 * @since 1.8
		 * @var   string setting filter and action name prefix.
		 */
		private static $setting_filter_prefix = '';

		/**
		 * Error messages.
		 *
		 * @since 1.8
		 * @var   array List of errors.
		 */
		private static $errors = [];

		/**
		 * Update messages.
		 *
		 * @since 1.8
		 * @var   array List of messages.
		 */
		private static $messages = [];

		/**
		 * Include the settings page classes.
		 *
		 * @since  1.8
		 * @return array
		 */
		public static function get_settings_pages() {
			/**
			 * Filter the setting page.
			 *
			 * Note: filter dynamically fire on basis of setting page slug.
			 * For example: if you register a setting page with give-settings menu slug
			 *              then filter will be give-settings_get_settings_pages
			 *
			 * @since 3.17.1 cast to array
			 * @since 1.8
			 *
			 * @param array $settings Array of settings class object.
			 */
			self::$settings = (array)apply_filters( self::$setting_filter_prefix . '_get_settings_pages', [] );

			return self::$settings;
		}

		/**
		 * Verify admin setting nonce
		 *
		 * @since  1.8.14
		 * @access public
		 *
		 * @return bool
		 */
		public static function verify_nonce() {
			if ( empty( $_REQUEST['_give-save-settings'] ) || ! wp_verify_nonce( $_REQUEST['_give-save-settings'], 'give-save-settings' ) ) {
				return false;
			}

			return true;
		}

		/**
		 * Save the settings.
		 *
		 * @since  1.8
		 * @return void
		 */
		public static function save() {
			$current_tab = give_get_current_setting_tab();

			if ( ! self::verify_nonce() ) {
				echo '<div class="notice error"><p>' . esc_attr__( 'Action failed. Please refresh the page and retry.', 'give' ) . '</p></div>';
				die();
			}

			/**
			 * Trigger Action.
			 *
			 * Note: action dynamically fire on basis of setting page slug and current tab.
			 * For example: if you register a setting page with give-settings menu slug and general current tab name
			 *              then action will be give-settings_save_general
			 *
			 * @since 1.8
			 */
			do_action( self::$setting_filter_prefix . '_save_' . $current_tab );

			self::add_message( 'give-setting-updated', __( 'Your settings have been saved.', 'give' ) );

			/**
			 * Trigger Action.
			 *
			 * Note: action dynamically fire on basis of setting page slug.
			 * For example: if you register a setting page with give-settings menu slug
			 *              then action will be give-settings_saved
			 *
			 * @since 1.8
			 */
			do_action( self::$setting_filter_prefix . '_saved' );
		}

		/**
		 * Add a message.
		 *
		 * @since  1.8
		 *
		 * @param  string $code    Message code (Note: This should be unique).
		 * @param  string $message Message text.
		 *
		 * @return void
		 */
		public static function add_message( $code, $message ) {
			self::$messages[ $code ] = $message;
		}

		/**
		 * Add an error.
		 *
		 * @since  1.8
		 *
		 * @param  string $code    Message code (Note: This should be unique).
		 * @param  string $message Message text.
		 *
		 * @return void
		 */
		public static function add_error( $code, $message ) {
			self::$errors[ $code ] = $message;
		}

		/**
		 * Output messages + errors.
		 *
		 * @since  1.8
		 * @return void
		 */
		public static function show_messages() {
			$notice_html = '';
			$classes     = 'give-notice settings-error notice is-dismissible';

			self::$errors   = apply_filters( self::$setting_filter_prefix . '_error_notices', self::$errors );
			self::$messages = apply_filters( self::$setting_filter_prefix . '_update_notices', self::$messages );

			if ( 0 < count( self::$errors ) ) {
				foreach ( self::$errors as $code => $message ) {
					$notice_html .= sprintf(
						'<div id="setting-error-%1$s" class="%2$s error" style="display: none"><p>%3$s</p></div>',
						$code,
						$classes,
						$message
					);
				}
			}

			if ( 0 < count( self::$messages ) ) {
				foreach ( self::$messages as $code => $message ) {
					$notice_html .= sprintf(
						'<div id="setting-error-%1$s" class="%2$s updated" style="display: none"><p><strong>%3$s</strong></p></div>',
						$code,
						$classes,
						$message
					);
				}
			}

			echo $notice_html;
		}

		/**
		 * Settings page.
		 *
		 * Handles the display of the main give settings page in admin.
		 *
		 * @since  1.8
		 * @return bool
		 */
		public static function output() {
			// Get current setting page.
			self::$setting_filter_prefix = give_get_current_setting_page();

			// Bailout: Exit if setting page is not defined.
			if ( empty( self::$setting_filter_prefix ) ) {
				return false;
			}

			/**
			 * Trigger Action.
			 *
			 * Note: action dynamically fire on basis of setting page slug
			 * For example: if you register a setting page with give-settings menu slug
			 *              then action will be give-settings_start
			 *
			 * @since 1.8
			 */
			do_action( self::$setting_filter_prefix . '_start' );

			$current_tab     = give_get_current_setting_tab();
			$current_section = give_get_current_setting_section();

			// Include settings pages.
			$all_setting = self::get_settings_pages();

			/* @var object $current_setting_obj */
			$current_setting_obj = new StdClass();

			foreach ( $all_setting as $setting ) {
				if (
					is_object($setting) && method_exists( $setting, 'get_id' ) &&
					$current_tab === $setting->get_id()
				) {
					$current_setting_obj = $setting;
					break;
				}
			}

			// Save settings if data has been posted.
			if ( isset( $_POST['_give-save-settings'] ) ) {
				self::save();
			}

			/**
			 * Filter the tabs for current setting page.
			 *
			 * Note: filter dynamically fire on basis of setting page slug.
			 * For example: if you register a setting page with give-settings menu slug and general current tab name
			 *              then action will be give-settings_tabs_array
			 *
			 * @since 1.8
			 */
			$tabs = apply_filters( self::$setting_filter_prefix . '_tabs_array', [] );

			include 'views/html-admin-settings.php';

			return true;
		}

		/**
		 * Get a setting from the settings API.
		 *
		 * @since  1.8
		 *
		 * @param string $option_name Option Name.
		 * @param string $field_id    Field ID.
		 * @param mixed  $default     Default.
		 *
		 * @return string|bool
		 */
		public static function get_option( $option_name = '', $field_id = '', $default = false ) {
			// Bailout.
			if ( empty( $option_name ) && empty( $field_id ) ) {
				return false;
			}

			if ( ! empty( $field_id ) && ! empty( $option_name ) ) {
				// Get field value if any.
				$option_value = get_option( $option_name );

				$option_value = ( is_array( $option_value ) && array_key_exists( $field_id, $option_value ) )
					? $option_value[ $field_id ]
					: $default;
			} else {
				// If option name is empty but not field name then this means, setting is direct store to option table under there field name.
				$option_name = ! $option_name ? $field_id : $option_name;

				// Get option value if any.
				$option_value = get_option( $option_name, $default );
			}

			/**
			 * Filter the option value
			 *
			 * @since 2.2.3
			 *
			 * @param mixed  $option_value
			 * @param string $option_name
			 * @param string $field_id
			 * @param mixed  $default
			 */
			return apply_filters( 'give_admin_field_get_value', $option_value, $option_name, $field_id, $default );
		}

		/**
		 * Output admin fields.
		 *
		 * Loops though the give options array and outputs each field.
		 *
		 * @todo Refactor this function
		 *
		 * @since  1.8
		 * @access public
		 *
		 * @param array  $sections     Opens array to output.
		 * @param string $option_name Opens array to output.
		 *
		 * @return void
		 */
		public static function output_fields( $sections, $option_name = '' ) {

			$current_page    = give_get_current_setting_page();
			$current_tab     = give_get_current_setting_tab();
			$current_section = give_get_current_setting_section();
			$groups          = give_get_settings_groups();

			if ( $groups ) {
				$defaultGroup = current( array_keys( $groups ) );
				?>
				<div class="give-settings-section-content">
					<div class="give-settings-section-group-menu">
						<ul>
							<?php
							foreach ( $groups as $slug => $group ) {
								$current_group = ! empty( $_GET['group'] ) ? give_clean( $_GET['group'] ) : $defaultGroup;
								$active_class  = ( $slug === $current_group ) ? 'active' : '';

								echo sprintf(
									'<li><a class="%1$s" href="%2$s" data-group="%3$s">%4$s</a></li>',
									esc_html( $active_class ),
									esc_url( admin_url( "edit.php?post_type=give_forms&page={$current_page}&tab={$current_tab}&section={$current_section}&group={$slug}" ) ),
									esc_html( $slug ),
									esc_html( $group )
								);
							}
							?>
						</ul>
					</div>
					<div class="give-settings-section-group-content">
						<?php
						foreach ( $sections as $group => $fields ) {
							$current_group = ! empty( $_GET['group'] ) ? give_clean( $_GET['group'] ) : $defaultGroup;
							$hide_class    = $group !== $current_group ? 'give-hidden' : '';

							printf(
								'<div id="give-settings-section-group-%1$s" class="give-settings-section-group %2$s">',
								esc_attr( $group ),
								esc_html( $hide_class )
							);

							/**
							 * Filter sub group settings.
							 *
							 * @since 2.8.0
							 */
							$subGroups = apply_filters( "give_get_groups_{$current_section}_{$group}", [] );

							if ( $subGroups ) {
								$subGroupIds     = array_keys( $subGroups );
								$defaultSubGroup = current( $subGroupIds );
								$lastSubGroupId  = end( $subGroupIds );

								echo '<ul class="give-subsubsub">';
								foreach ( $subGroups as $id => $label ) {
									$separator       = $lastSubGroupId === $id ? '' : '&nbsp;|&nbsp;';
									$currentSubGroup = ! empty( $_GET['sub-group'] ) ? give_clean( $_GET['sub-group'] ) : $defaultSubGroup;
									$class           = $id === $currentSubGroup ? 'current' : '';
									printf(
										'<li><a data-subgroup="%1$s" href="%2$s" class="%5$s">%3$s</a>%4$s</li>',
										$id,
										esc_url( admin_url( "edit.php?post_type=give_forms&page={$current_page}&tab={$current_tab}&section={$current_section}&group={$group}&sub-group={$id}" ) ),
										$label,
										$separator,
										$class
									);
								}
								echo '</ul>';

								foreach ( $fields as $id => $subgroup ) {
									$current_group = ! empty( $_GET['sub-group'] ) ? give_clean( $_GET['sub-group'] ) : $defaultSubGroup;
									$hide_class    = $id !== $current_group ? 'give-hidden' : '';

									printf(
										'<div id="give-settings-section-subgroup-%1$s" class="give-settings-section-subgroup %2$s">',
										esc_attr( $id ),
										esc_html( $hide_class )
									);

									foreach ( $subgroup as $setting ) {
										if ( ! isset( $setting['type'] ) ) {
											continue;
										}
										self::prepare_settings_field( $setting, $option_name );
									}

									echo '</div>';
								}
							} else {
								foreach ( $fields as $value ) {
									if ( ! isset( $value['type'] ) ) {
										continue;
									}
									self::prepare_settings_field( $value, $option_name );
								}
							}

							echo '</div>';
						}
						?>
					</div>
				</div>
				<?php
			} else {

				// Loop through each section.
				foreach ( $sections as $value ) {
					if ( ! isset( $value['type'] ) ) {
						continue;
					}
					self::prepare_settings_field( $value, $option_name );
				}
			}

		}

		/**
		 * This function will help you prepare the admin settings field.
		 *
		 * @since  2.5.5
		 * @access public
		 *
		 * @param array  $value       Settings Field Array.
		 * @param string $option_name Option Name.
		 *
		 * @return mixed
		 */
		public static function prepare_settings_field( $value, $option_name ) {

			$current_tab = give_get_current_setting_tab();

			// Field Default values.
			$defaults = [
				'id'               => '',
				'class'            => '',
				'css'              => '',
				'default'          => '',
				'desc'             => '',
				'table_html'       => true,
				'repeat'           => false,
				'repeat_btn_title' => __( 'Add Field', 'give' ),
			];

			// Set title.
			$defaults['title'] = isset( $value['name'] ) ? $value['name'] : '';

			// Set default setting.
			$value = wp_parse_args( $value, $defaults );

			// Colorpicker field.
			$value['class'] = ( 'colorpicker' === $value['type'] ? trim( $value['class'] ) . ' give-colorpicker' : $value['class'] );
			$value['type']  = ( 'colorpicker' === $value['type'] ? 'text' : $value['type'] );

			// Custom attribute handling.
			$custom_attributes = [];

			if ( ! empty( $value['attributes'] ) && is_array( $value['attributes'] ) ) {
				foreach ( $value['attributes'] as $attribute => $attribute_value ) {
					$custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $attribute_value ) . '"';
				}
			}

			// Description handling.
			$description = self::get_field_description( $value );

			// Switch based on type.
			switch ( $value['type'] ) {

				// Section Titles.
				case 'title':
					if ( ! empty( $value['title'] ) || ! empty( $value['desc'] ) ) {
						?>
						<div class="give-setting-tab-header give-setting-tab-header-<?php echo $current_tab; ?>">
							<?php if ( ! empty( $value['title'] ) ) : ?>
								<h2><?php echo self::get_field_title( $value ); ?></h2>
								<hr>
							<?php endif; ?>

							<?php if ( ! empty( $value['desc'] ) ) : ?>
								<?php echo wpautop( wptexturize( wp_kses_post( $value['desc'] ) ) ); ?>
							<?php endif; ?>
						</div>
						<?php
					}

					if ( $value['table_html'] ) {
						echo '<table class="form-table give-setting-tab-body give-setting-tab-body-' . $current_tab . '">' . "\n\n";
					}

					if ( ! empty( $value['id'] ) ) {

						/**
						 * Trigger Action.
						 *
						 * Note: action dynamically fire on basis of field id.
						 *
						 * @since 1.8
						 */
						do_action( 'give_settings_' . sanitize_title( $value['id'] ) );
					}

					break;

				// Section Ends.
				case 'sectionend':
					if ( ! empty( $value['id'] ) ) {

						/**
						 * Trigger Action.
						 *
						 * Note: action dynamically fire on basis of field id.
						 *
						 * @since 1.8
						 */
						do_action( 'give_settings_' . sanitize_title( $value['id'] ) . '_end' );
					}

					if ( $value['table_html'] ) {
						echo '</table>';
					}

					if ( ! empty( $value['id'] ) ) {

						/**
						 * Trigger Action.
						 *
						 * Note: action dynamically fire on basis of field id.
						 *
						 * @since 1.8
						 */
						do_action( 'give_settings_' . sanitize_title( $value['id'] ) . '_after' );
					}

					break;

				// Standard text inputs and subtypes like 'number'.
				case 'colorpicker':
				case 'hidden':
					$value['wrapper_class'] = empty( $value['wrapper_class'] ) ? 'give-hidden' : trim( $value['wrapper_class'] ) . ' give-hidden';
				case 'text':
				case 'email':
				case 'number':
				case 'password':
					$type         = $value['type'];
					$option_value = self::get_option( $option_name, $value['id'], $value['default'] );

					// Set default value for repeater field if not any value set yet.
					if ( $value['repeat'] && is_string( $option_value ) ) {
						$option_value = [ $value['default'] ];
					}
					?>
				<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
					<th scope="row" class="titledesc">
						<label
								for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
					</th>
					<td class="give-forminp give-forminp-<?php echo sanitize_title( $value['type'] ); ?>">
						<?php if ( $value['repeat'] ) : ?>
							<?php foreach ( $option_value ?: [''] as $index => $field_value ) : ?>
								<p>
									<input
											name="<?php echo esc_attr( $value['id'] ); ?>[]"
											type="<?php echo esc_attr( $type ); ?>"
											style="<?php echo esc_attr( $value['css'] ); ?>"
											value="<?php echo esc_attr( $field_value ); ?>"
											class="give-input-field<?php echo( empty( $value['class'] ) ? '' : ' ' . esc_attr( $value['class'] ) ); ?> <?php echo esc_attr( $value['id'] ); ?>"
										<?php echo implode( ' ', $custom_attributes ); ?>
									/>
									<span class="give-remove-setting-field"
											title="<?php esc_html_e( 'Remove setting field', 'give' ); ?>">-</span>
								</p>
							<?php endforeach; ?>
							<a href="#" data-id="<?php echo $value['id']; ?>"
									class="give-repeat-setting-field button-secondary"><?php echo $value['repeat_btn_title']; ?></a>
						<?php else : ?>
							<input
									name="<?php echo esc_attr( $value['id'] ); ?>"
									id="<?php echo esc_attr( $value['id'] ); ?>"
									type="<?php echo esc_attr( $type ); ?>"
									style="<?php echo esc_attr( $value['css'] ); ?>"
									value="<?php echo esc_attr( $option_value ); ?>"
									class="give-input-field<?php echo( empty( $value['class'] ) ? '' : ' ' . esc_attr( $value['class'] ) ); ?>"
								<?php echo implode( ' ', $custom_attributes ); ?>
							/>
						<?php endif; ?>
						<?php echo $description; ?>
					</td>
					</tr>
					<?php
					break;

				// Textarea.
				case 'textarea':
					$option_value        = self::get_option( $option_name, $value['id'], $value['default'] );
					$default_attributes  = [
						'rows' => 10,
						'cols' => 60,
					];
					$textarea_attributes = isset( $value['attributes'] ) ? $value['attributes'] : [];
					?>
					<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
						<th scope="row" class="titledesc">
							<label
									for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
						</th>
						<td class="give-forminp give-forminp-<?php echo sanitize_title( $value['type'] ); ?>">
									<textarea
										name="<?php echo esc_attr( $value['id'] ); ?>"
										id="<?php echo esc_attr( $value['id'] ); ?>"
										style="<?php echo esc_attr( $value['css'] ); ?>"
										class="<?php echo esc_attr( $value['class'] ); ?>"
										<?php echo give_get_attribute_str( $textarea_attributes, $default_attributes ); ?>
									><?php echo esc_textarea( $option_value ); ?></textarea>
							<?php echo $description; ?>
						</td>
					</tr>
					<?php
					break;

				// Select boxes.
				case 'select':
				case 'multiselect':
					$option_value = self::get_option( $option_name, $value['id'], $value['default'] );
					$setting_name = esc_attr( $value['id'] ) . ( 'multiselect' === $value['type'] ? '[]' : '' );

					/**
					 * Insert page in option if missing.
					 *
					 * Check success_page setting in general settings.
					 */
					if (
						isset( $value['attributes'] ) &&
						false !== strpos( $value['class'], 'give-select-chosen' ) &&
						in_array( 'data-search-type', array_keys( $value['attributes'] ) ) &&
						'pages' === $value['attributes']['data-search-type'] &&
						! in_array( $option_value, array_keys( $value['options'] ) )
					) {
						$value['options'][ $option_value ] = get_the_title( $option_value );
					}
					?>
				<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
					<th scope="row" class="titledesc">
						<label for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
					</th>
					<td class="give-forminp give-forminp-<?php echo sanitize_title( $value['type'] ); ?>">
						<select name="<?php echo $setting_name; ?>"
								id="<?php echo esc_attr( $value['id'] ); ?>"
								style="<?php echo esc_attr( $value['css'] ); ?>"
								class="<?php echo esc_attr( $value['class'] ); ?>"
							<?php echo implode( ' ', $custom_attributes ); ?>
							<?php echo ( 'multiselect' === $value['type'] ) ? 'multiple="multiple"' : ''; ?>
						>

							<?php
							if ( ! empty( $value['options'] ) ) {
								foreach ( $value['options'] as $key => $val ) {
									?>
									<option value="<?php echo esc_attr( $key ); ?>"
															  <?php

																if ( is_array( $option_value ) ) {
																	selected( in_array( $key, $option_value ), true );
																} else {
																	selected( $option_value, $key );
																}

																?>
									><?php echo $val; ?></option>
									<?php
								}
							}
							?>

						</select> <?php echo $description; ?>
					</td>
					</tr>
					<?php
					break;

				// Radio inputs.
				case 'radio_inline':
					$value['class'] = empty( $value['class'] ) ? 'give-radio-inline' : $value['class'] . ' give-radio-inline';
				case 'radio':
					$option_value = self::get_option( $option_name, $value['id'], $value['default'] );
					?>
				<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
					<th scope="row" class="titledesc">
						<label
								for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
					</th>
					<td class="give-forminp give-forminp-<?php echo sanitize_title( $value['type'] ); ?> <?php echo( ! empty( $value['class'] ) ? $value['class'] : '' ); ?>">
						<fieldset>
							<ul>
								<?php
								foreach ( $value['options'] as $key => $val ) {
									?>
									<li>
										<label><input
													name="<?php echo esc_attr( $value['id'] ); ?>"
													value="<?php echo $key; ?>"
													type="radio"
													style="<?php echo esc_attr( $value['css'] ); ?>"
												<?php echo implode( ' ', $custom_attributes ); ?>
												<?php checked( $key, $option_value ); ?>
											/> <?php echo $val; ?></label>
									</li>
									<?php
								}
								?>
								<?php echo $description; ?>
						</fieldset>
					</td>
					</tr>
					<?php
					break;

				// Checkbox input.
				case 'checkbox':
					$option_value = self::get_option( $option_name, $value['id'], $value['default'] );
					?>
					<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
						<th scope="row" class="titledesc">
							<label
									for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
						</th>
						<td class="give-forminp">
							<input
									name="<?php echo esc_attr( $value['id'] ); ?>"
									id="<?php echo esc_attr( $value['id'] ); ?>"
									type="checkbox"
									class="<?php echo esc_attr( isset( $value['class'] ) ? $value['class'] : '' ); ?>"
									value="1"
								<?php checked( $option_value, 'on' ); ?>
								<?php echo implode( ' ', $custom_attributes ); ?>
							/>
							<?php echo $description; ?>
						</td>
					</tr>
					<?php
					break;

				// Multi Checkbox input.
				case 'multicheck':
					$option_value = self::get_option( $option_name, $value['id'], $value['default'] );
					$option_value = is_array( $option_value ) ? $option_value : [];
					?>
					<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
						<th scope="row" class="titledesc">
							<label
									for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
						</th>
						<td class="give-forminp give-forminp-<?php echo sanitize_title( $value['type'] ); ?> <?php echo( ! empty( $value['class'] ) ? $value['class'] : '' ); ?>">
							<fieldset>
								<ul>
									<?php
									foreach ( $value['options'] as $key => $val ) {
										?>
										<li>
											<label>
												<input
														name="<?php echo esc_attr( $value['id'] ); ?>[]"
														value="<?php echo $key; ?>"
														type="checkbox"
														style="<?php echo esc_attr( $value['css'] ); ?>"
													<?php echo implode( ' ', $custom_attributes ); ?>
													<?php
													if ( in_array( $key, $option_value ) ) {
														echo 'checked="checked"';
													}
													?>
												/> <?php echo $val; ?>
											</label>
										</li>
										<?php
									}
									?>
									<?php echo $description; ?>
							</fieldset>
						</td>
					</tr>
					<?php
					break;

				// File input field.
				case 'file':
				case 'media':
					$option_value = esc_url( self::get_option( $option_name, $value['id'], $value['default'] ) );
					$button_label = sprintf( __( 'Add or Upload %s', 'give' ), ( 'file' === $value['type'] ? __( 'File', 'give' ) : __( 'Image', 'give' ) ) );
					$fvalue       = empty( $value['fvalue'] ) ? 'url' : $value['fvalue'];

					$allow_media_preview_tags = [ 'jpg', 'jpeg', 'png', 'gif', 'ico' ];
					$preview_image_src        = $option_value ? ( 'id' === $fvalue ? wp_get_attachment_url( $option_value ) : $option_value ) : '';
					$preview_image_extension  = $preview_image_src ? pathinfo( $preview_image_src, PATHINFO_EXTENSION ) : '';
					$is_show_preview          = in_array( $preview_image_extension, $allow_media_preview_tags );
					?>
					<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
						<th scope="row" class="titledesc">
							<label
									for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
						</th>
						<td class="give-forminp">
							<div class="give-field-wrap">
								<label for="<?php echo $value['id']; ?>">
									<input
											name="<?php echo esc_attr( $value['id'] ); ?>"
											id="<?php echo esc_attr( $value['id'] ); ?>"
											type="text"
											class="give-input-field<?php echo esc_attr( isset( $value['class'] ) ? ' ' . $value['class'] : '' ); ?>"
											value="<?php echo $option_value; ?>"
											style="<?php echo esc_attr( $value['css'] ); ?>"
										<?php echo implode( ' ', $custom_attributes ); ?>
									/>&nbsp;&nbsp;&nbsp;&nbsp;<input class="give-upload-button button" type="button"
											data-fvalue="<?php echo $fvalue; ?>"
											data-field-type="<?php echo $value['type']; ?>"
											value="<?php echo $button_label; ?>">
									<?php echo $description; ?>
									<div
											class="give-image-thumb<?php echo ! $option_value || ! $is_show_preview ? ' give-hidden' : ''; ?>">
										<span class="give-delete-image-thumb dashicons dashicons-no-alt"></span>
										<img src="<?php echo $preview_image_src; ?>" alt="">
									</div>
								</label>
							</div>
						</td>
					</tr>
					<?php
					break;

				// WordPress Editor.
				case 'wysiwyg':
					// Get option value.
					$option_value = self::get_option( $option_name, $value['id'], $value['default'] );

					// Get editor settings.
					$editor_settings = ! empty( $value['options'] ) ? $value['options'] : [];
					?>
				<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
					<th scope="row" class="titledesc">
						<label
								for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
					</th>
					<td class="give-forminp">
						<?php wp_editor( $option_value, $value['id'], $editor_settings ); ?>
						<?php echo $description; ?>
					</td>
					</tr>
					<?php
					break;

				// Custom: Email preview buttons field.
				case 'email_preview_buttons':
					?>
				<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
					<th scope="row" class="titledesc">
						<label
								for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
					</th>
					<td class="give-forminp">
						<?php give_email_preview_buttons_callback( $value ); ?>
						<?php echo $description; ?>
					</td>
					</tr>
					<?php
					break;

				// Custom: API field.
				case 'api':
					give_api_callback();
					echo $description;
					break;

				// Custom: Gateway API key.
				case 'api_key':
					$option_value = self::get_option( $option_name, $value['id'], $value['default'] );
					$type         = ! empty( $option_value ) ? 'password' : 'text';
					?>
				<tr valign="top" <?php echo ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : ''; ?>>
					<th scope="row" class="titledesc">
						<label
								for="<?php echo esc_attr( $value['id'] ); ?>"><?php echo self::get_field_title( $value ); ?></label>
					</th>
					<td class="give-forminp give-forminp-<?php echo sanitize_title( $value['type'] ); ?>">
						<input
								name="<?php echo esc_attr( $value['id'] ); ?>"
								id="<?php echo esc_attr( $value['id'] ); ?>"
								type="<?php echo esc_attr( $type ); ?>"
								style="<?php echo esc_attr( $value['css'] ); ?>"
								value="<?php echo esc_attr( trim( $option_value ) ); ?>"
								class="give-input-field<?php echo( empty( $value['class'] ) ? '' : ' ' . esc_attr( $value['class'] ) ); ?>"
							<?php echo implode( ' ', $custom_attributes ); ?>
						/> <?php echo $description; ?>
					</td>
					</tr>
					<?php
					break;

				// Note: only for internal use.
				case 'chosen':
					// Get option value.
					$option_value     = array_filter( (array) self::get_option( $option_name, $value['id'], $value['default'] ) );
					$wrapper_class    = ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : '';
					$type             = '';
					$allow_new_values = ! empty( $value['allow-custom-values'] ) && (bool) $value['allow-custom-values'] ? 'data-allows-new-values="true"' : '';
					$name             = give_get_field_name( $value );
					$choices          = $value['options'];
					$value['style']   = isset( $value['style'] ) ? $value['style'] : '';

					// Set attributes based on multiselect datatype.
					if ( ! empty( $value['data_type'] ) && 'multiselect' === $value['data_type'] ) {
						$type         = 'multiple';
						$name        .= '[]';
						$option_value = empty( $option_value ) ? [] : $option_value;
					}

					// Add dynamically added values to options
					// we can add option dynamically to chosen select field. For example: "Title Prefixes"
					if ( $allow_new_values && $option_value ) {
						$choices = array_merge( array_combine( $option_value, $option_value ), $value['options'] );
					}
					?>
					<tr valign="top" <?php echo $wrapper_class; ?>>
						<th scope="row" class="titledesc">
                            <label for="<?php
                            echo esc_attr($value['id']); ?>"><?php
                                echo wp_kses_post(self::get_field_title($value)); ?></label>
						</th>
						<td class="give-forminp give-forminp-<?php echo esc_attr( $value['type'] ); ?>">
							<select
									class="give-select-chosen give-chosen-settings"
									style="<?php echo esc_attr( $value['style'] ); ?>"
									name="<?php echo esc_attr( $name ); ?>"
									id="<?php echo esc_attr( $value['id'] ); ?>"
									data-placeholder="<?php echo esc_attr__( 'Select Some Options', 'give'); ?>"
								<?php
								echo "{$type} {$allow_new_values}";
								echo implode( ' ', $custom_attributes );
								?>
							>
								<?php
								foreach ( $choices as $key => $name ) {
									echo sprintf(
										'<option %1$s value="%2$s">%3$s</option>',
										in_array( $key, $option_value ) ? 'selected="selected"' : '',
										esc_attr( $key ),
										$name
									);
								}
								?>
							</select>
							<?php echo wp_kses_post( $description ); ?>
						</td>
					</tr>
					<?php
					break;

				// Custom: Data field.
				case 'data':
					include GIVE_PLUGIN_DIR . 'includes/admin/tools/views/html-admin-page-data.php';

					echo $description;
					break;

				// Custom: Give Docs Link field type.
				case 'give_docs_link':
					$wrapper_class = ! empty( $value['wrapper_class'] ) ? 'class="' . $value['wrapper_class'] . '"' : '';
					?>
				<tr valign="top" <?php echo esc_html( $wrapper_class ); ?>>
					<td class="give-docs-link" colspan="2">
						<p class="give-docs-link">
							<a href="<?php echo esc_url( $value['url'] ); ?>" target="_blank">
								<?php
								echo sprintf(
									/* translators: %s Title */
									esc_html__( 'Need Help? See docs on "%s"', 'give' ),
									esc_html( $value['title'] )
								);
								?>
								<span class="dashicons dashicons-editor-help"></span>
							</a>
						</p>
					</td>
					</tr>
					<?php
					break;

				// Default: run an action
				// You can add or handle your custom field action.
				default:
					// Get option value.
					$option_value = self::get_option( $option_name, $value['id'], $value['default'] );
					do_action( 'give_admin_field_' . $value['type'], $value, $option_value );
					break;
			}
		}

		/**
		 * Helper function to get the formatted description for a given form field.
		 * Plugins can call this when implementing their own custom settings types.
		 *
		 * @since  1.8
		 *
		 * @param  array $value The form field value array
		 *
		 * @return string The HTML description of the field.
		 */
		public static function get_field_description( $value ) {
			$description = '';

			// Support for both 'description' and 'desc' args.
			$description_key = isset( $value['description'] ) ? 'description' : 'desc';
			$value           = ( isset( $value[ $description_key ] ) && ! empty( $value[ $description_key ] ) ) ? $value[ $description_key ] : '';

			if ( ! empty( $value ) ) {
				$description = '<div class="give-field-description">' . wp_kses_post( $value ) . '</div>';
			}

			return $description;
		}


		/**
		 * Helper function to get the formated title.
		 * Plugins can call this when implementing their own custom settings types.
		 *
		 * @since  1.8
		 *
		 * @param  array $value The form field value array
		 *
		 * @return array The description and tip as a 2 element array
		 */
		public static function get_field_title( $value ) {
			$title = esc_html( $value['title'] );

			// If html tag detected then allow them to print.
			if ( strip_tags( $title ) ) {
				$title = $value['title'];
			}

			return $title;
		}

		/**
		 * Save admin fields.
		 *
		 * Loops though the give options array and outputs each field.
		 *
		 * @since  1.8
		 *
		 * @param  array  $options     Options array to output
		 * @param  string $option_name Option name to save output. If empty then option will be store in there own option name i.e option id.
		 *
		 * @return bool
		 */
		public static function save_fields( $options, $option_name = '' ) {

			// Fetch form posted super global data.
			$post_data = give_clean( $_POST );

			// Bailout, if posted data doesn't exists.
			if ( empty( $post_data ) ) {
				return false;
			}

			$new_options      = [];
			$options_keys     = array_keys( $options );
			$is_vertical_tabs = is_array( $options_keys ) && count( $options_keys ) && ! is_numeric( $options_keys[0] );

			if ( $is_vertical_tabs ) {

				// Loop through each vertical tabs related field options to destructure into single array.
				foreach ( $options as $option ) {
					// Get option from a sub group (if any).
					if ( ! is_numeric( array_keys( $option )[0] ) ) {
						foreach ( $option as $subGroup ) {
							$new_options = array_merge( $new_options, $subGroup );
						}
						continue;
					}

					$new_options = array_merge( $new_options, $option );
				}

				// Assign new field options.
				$options = $new_options;
			}

			// Options to update will be stored here and saved later.
			$update_options = [];

			// Loop options and get values to save.
			foreach ( $options as $option ) {
				if ( ! isset( $option['id'] ) || ! isset( $option['type'] ) ) {
					continue;
				}

				// Get posted value.
				if ( strstr( $option['id'], '[' ) ) {
					parse_str( $option['id'], $option_name_array );
					$field_option_name = current( array_keys( $option_name_array ) );
					$setting_name      = key( $option_name_array[ $field_option_name ] );
					$raw_value         = isset( $_POST[ $field_option_name ][ $setting_name ] ) ? wp_unslash( $_POST[ $field_option_name ][ $setting_name ] ) : null;
				} else {
					$field_option_name = $option['id'];
					$setting_name      = '';
					$raw_value         = isset( $_POST[ $option['id'] ] ) ? wp_unslash( $_POST[ $option['id'] ] ) : null;
				}

				// Format the value based on option type.
				switch ( $option['type'] ) {
					case 'checkbox':
						$value = is_null( $raw_value ) ? '' : 'on';
						break;
					case 'wysiwyg':
					case 'textarea':
						$value = wp_kses_post( trim( $raw_value ) );
						break;
					case 'multiselect':
					case 'chosen':
						$value = array_filter( array_map( 'give_clean', (array) $raw_value ) );
						break;
					default:
						$value = give_clean( $raw_value );
						break;
				}

				/**
				 * Sanitize the value of an option.
				 *
				 * @since 1.8
				 */
				$value = apply_filters( 'give_admin_settings_sanitize_option', $value, $option, $raw_value );

				/**
				 * Sanitize the value of an option by option name.
				 *
				 * @since 1.8
				 */
				$value = apply_filters( "give_admin_settings_sanitize_option_{$field_option_name}", $value, $option, $raw_value );

				if ( is_null( $value ) ) {
					continue;
				}

				// Check if option is an array and handle that differently to single values.
				if ( $field_option_name && $setting_name ) {
					if ( ! isset( $update_options[ $field_option_name ] ) ) {
						$update_options[ $field_option_name ] = get_option( $field_option_name, [] );
					}
					if ( ! is_array( $update_options[ $field_option_name ] ) ) {
						$update_options[ $field_option_name ] = [];
					}
					$update_options[ $field_option_name ][ $setting_name ] = $value;
				} else {
					$update_options[ $field_option_name ] = $value;
				}
			}

			// Save all options in our array or there own option name i.e. option id.
			if ( empty( $option_name ) ) {
				foreach ( $update_options as $name => $value ) {
					update_option( $name, $value, false );

					/**
					 * Trigger action.
					 *
					 * Note: This is dynamically fire on basis of option name.
					 *
					 * @since 1.8
					 */
					do_action( "give_save_option_{$name}", $value, $name );
				}
			} else {
				$old_options    = ( $old_options = get_option( $option_name ) ) ? $old_options : [];
				$update_options = array_merge( $old_options, $update_options );

				update_option( $option_name, $update_options, false );

				/**
				 * Trigger action.
				 *
				 * Note: This is dynamically fire on basis of setting name.
				 *
				 * @since 1.8
				 */
				do_action( "give_save_settings_{$option_name}", $update_options, $option_name, $old_options );
			}

			return true;
		}


		/**
		 * Check if admin saving setting or not.
		 *
		 * @since 1.8.17
		 *
		 * @return bool
		 */
		public static function is_saving_settings() {
			return self::verify_nonce();
		}

		/**
		 * Verify setting page
		 *
		 * @since  2.0
		 * @access public
		 *
		 * @param string $tab
		 * @param string $section
		 *
		 * @return bool
		 */
		public static function is_setting_page( $tab = '', $section = '' ) {
			$is_setting_page = false;

			// Are we accessing admin?
			if ( ! is_admin() ) {
				return $is_setting_page;
			}

			// Are we accessing any give page?
			if (
				! isset( $_GET['post_type'], $_GET['page'] )
				|| 'give_forms' !== give_clean( $_GET['post_type'] )
			) {
				return $is_setting_page;
			}

			// Check fo setting tab.
			if ( ! empty( $tab ) ) {
				$is_setting_page = ( $tab === give_get_current_setting_tab() );
			}

			// Check fo setting section.
			if ( ! empty( $section ) ) {
				$is_setting_page = ( $section === give_get_current_setting_section() );
			}

			return $is_setting_page;
		}
	}

endif;

Youez - 2016 - github.com/yon3zu
LinuXploit