| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- <?php
- /*
- * Reference : http://codex.wordpress.org/Settings_API
- * Reference : http://codex.wordpress.org/Function_Reference/add_settings_field
- */
- add_filter('booked_admin_booked_screens', array('Booked_WC_Settings_Hooks', 'booked_admin_booked_screens'), 10, 1);
- class Booked_WC_Settings {
- private function __construct() {
- }
- protected function _setup() {
- add_action('admin_menu', array($this, 'add_admin_menu_page') );
- add_action('admin_init', array('Booked_WC_Settings_Fields', 'register') );
- }
- public static function setup() {
- $settings = new self();
- $settings->_setup();
- }
- public function add_admin_menu_page () {
- add_submenu_page(
- BOOKED_WC_APPOINTMENTS_PAGE,
- __('WooCommerce', 'booked-woocommerce-payments'),
- __('WooCommerce', 'booked-woocommerce-payments'),
- 'manage_booked_options',
- BOOKED_WC_PLUGIN_PREFIX . 'payment_options',
- array($this, 'render_payment_options_page')
- );
- }
- public function render_payment_options_page() {
- Booked_WC_Fragments::load('settings', 'payment-options');
- }
- public static function get_option($option_name) {
- $options = get_option(BOOKED_WC_PLUGIN_PREFIX . 'payment_options');
- if ( isset($options[$option_name]) ) {
- return $options[$option_name];
- }
- }
- }
- class Booked_WC_Settings_Hooks {
- public static function booked_admin_booked_screens( $screens ) {
- $screens[] = BOOKED_WC_PLUGIN_PREFIX . 'payment_options';
- return $screens;
- }
- }
- class Booked_WC_Settings_Fields {
- protected $options_name;
- private function __construct() {
- $this->options_name = BOOKED_WC_PLUGIN_PREFIX . 'payment_options';
- $this->register_fields();
- }
- public static function register() {
- return new self();
- }
- protected function register_fields() {
- // Sets the defaults if settings aren't saved yet.
- $settings = get_option($this->options_name);
- if ( !$settings ) {
- $default_settings['email_confirmations'] = 'after_complete';
- $default_settings['enable_thumbnails'] = 'enable';
- $default_settings['enable_auto_cleanup'] = 'disable';
- $default_settings['cleanup_mode'] = 'twicedaily';
- update_option($this->options_name, $default_settings);
- }
- add_settings_section(
- $this->options_name,
- '',
- array($this, 'field_section'),
- $this->options_name
- );
- add_settings_field(
- 'email_confirmations',
- __('Email Confirmations', 'booked-woocommerce-payments'),
- array($this, 'email_confirmations'),
- $this->options_name,
- $this->options_name
- );
- add_settings_field(
- 'enable_thumbnails',
- __('Enable Thumbnails', 'booked-woocommerce-payments'),
- array($this, 'enable_thumbnails'),
- $this->options_name,
- $this->options_name
- );
- add_settings_field(
- 'enable_auto_cleanup',
- __('Enable Auto-Cleanup', 'booked-woocommerce-payments'),
- array($this, 'enable_auto_cleanup'),
- $this->options_name,
- $this->options_name
- );
- add_settings_field(
- 'cleanup_mode',
- __('Cleanup Schedule', 'booked-woocommerce-payments'),
- array($this, 'field_modes'),
- $this->options_name,
- $this->options_name
- );
- add_settings_field(
- 'redirect_page',
- __('Redirect After Booking', 'booked-woocommerce-payments'),
- array($this, 'redirect_page'),
- $this->options_name,
- $this->options_name
- );
- // Register our setting so that $_POST handling is done for us and
- // our callback function just has to echo the <input>
- register_setting($this->options_name, $this->options_name);
- }
- public function field_section() {
- //
- }
- public function email_confirmations() {
- $options = get_option($this->options_name);
- $field_value = isset($options['email_confirmations']) ? $options['email_confirmations'] : 'after_complete';
- $radio_options = array(
- 'after_complete' => __('Send Booked confirmation emails ONLY after payment is marked as "complete".', 'booked-woocommerce-payments'),
- 'before_complete' => __('Send Booked confirmation emails right away.', 'booked-woocommerce-payments')
- );
- ?>
- <p><?php echo __('When do you want Booked to send out its confirmation emails?', 'booked-woocommerce-payments') ?></p>
- <?php foreach ($radio_options as $option_value => $option_label): ?>
- <div>
- <input name="<?php echo $this->options_name ?>[email_confirmations]" type="radio" value="<?php echo $option_value ?>" <?php echo checked($field_value, $option_value) ?> />
- <p for="<?php echo $this->options_name ?>" style="display:inline-block; margin:0; padding:0; position:relative; top:-1px;"><?php echo $option_label ?></p>
- </div>
- <?php endforeach ?>
- <?php
- }
- public function enable_thumbnails() {
- $options = get_option($this->options_name);
- $field_value = isset($options['enable_thumbnails']) ? $options['enable_thumbnails'] : 'enable';
- $radio_options = array(
- 'enable' => __('Enable', 'booked-woocommerce-payments'),
- 'disable' => __('Disable', 'booked-woocommerce-payments')
- );
- ?>
- <p><?php echo __('Enable this to show product thumbnails for Booked items (on the cart/checkout screens).', 'booked-woocommerce-payments') ?></p>
- <?php foreach ($radio_options as $option_value => $option_label): ?>
- <div>
- <input name="<?php echo $this->options_name ?>[enable_thumbnails]" type="radio" value="<?php echo $option_value ?>" <?php echo checked($field_value, $option_value) ?> />
- <p for="<?php echo $this->options_name ?>" style="display:inline-block; margin:0; padding:0; position:relative; top:-1px;"><?php echo $option_label ?></p>
- </div>
- <?php endforeach ?>
- <?php
- }
- public function enable_auto_cleanup() {
- $options = get_option($this->options_name);
- $field_value = isset($options['enable_auto_cleanup']) ? $options['enable_auto_cleanup'] : 'enable';
- $radio_options = array(
- 'enable' => __('Enable', 'booked-woocommerce-payments'),
- 'disable' => __('Disable', 'booked-woocommerce-payments')
- );
- ?>
- <p><?php echo __('Automatically cleans up all non-paid appointments at a specific time interval. For example, when someone chooses a day and product but does not pay for the appointment, then it will continue to be "booked" unless removed manually. This removes that step with an automated option.', 'booked-woocommerce-payments') ?></p>
- <?php foreach ($radio_options as $option_value => $option_label): ?>
- <div>
- <input name="<?php echo $this->options_name ?>[enable_auto_cleanup]" type="radio" value="<?php echo $option_value ?>" <?php echo checked($field_value, $option_value) ?> />
- <p for="<?php echo $this->options_name ?>" style="display:inline-block; margin:0; padding:0; position:relative; top:-1px;"><?php echo $option_label ?></p>
- </div>
- <?php endforeach ?>
- <?php
- }
- public function redirect_page() {
- $options = get_option($this->options_name);
- $field_value = isset($options['redirect_page']) ? $options['redirect_page'] : 'checkout';
- $radio_options = array(
- 'checkout' => __('Checkout Page (default)', 'booked-woocommerce-payments'),
- 'cart' => __('Cart Page', 'booked-woocommerce-payments')
- );
- ?>
- <p><?php echo __('You can choose to have Booked redirect to the Checkout page (default) or the Cart page instead.', 'booked-woocommerce-payments') ?></p>
- <?php foreach ($radio_options as $option_value => $option_label): ?>
- <div>
- <input name="<?php echo $this->options_name ?>[redirect_page]" type="radio" value="<?php echo $option_value ?>" <?php echo ($option_value == 'checkout' && !$field_value ? 'checked="checked"' : checked($field_value, $option_value)); ?> />
- <p for="<?php echo $this->options_name ?>" style="display:inline-block; margin:0; padding:0; position:relative; top:-1px;"><?php echo $option_label ?></p>
- </div>
- <?php endforeach ?>
- <?php
- }
- public function field_modes() {
- $options = get_option($this->options_name);
- $field_value = isset($options['cleanup_mode']) ? $options['cleanup_mode'] : false;
- $available_schedules = wp_get_schedules();
- $schedules = array();
- foreach ($available_schedules as $name => $data) {
- $interval = (int)$data['interval'];
- if ( !isset($schedules[$interval]) ){
- $schedules[$interval] = array_merge(
- array('name' => $name),
- $data
- );
- }
- }
- usort($schedules, array($this, 'booked_schedule_sort'));
- ?>
- <p><?php echo __('More schedule intervals can be added with a plugin like <a href="https://wordpress.org/plugins/wp-crontrol/" target="_blank">WP Crontrol</a>.', 'booked-woocommerce-payments') ?> <?php echo __('The currently available schedules are listed below.', 'booked-woocommerce-payments') ?></p>
- <?php foreach ($schedules as $index => $schedule_data): ?>
- <div>
- <input id="<?php echo $schedule_data['name'] ?>" name="<?php echo $this->options_name ?>[cleanup_mode]" type="radio" value="<?php echo $schedule_data['name'] ?>" <?php echo checked($field_value, $schedule_data['name']) ?> />
- <p for="<?php echo $schedule_data['name'] ?>" style="display:inline-block; margin:0; padding:0; position:relative; top:-1px;"><?php echo $schedule_data['display'] ?></p>
- </div>
- <?php endforeach ?>
- <?php
- }
- public function booked_schedule_sort($a, $b) {
- return $a['interval'] - $b['interval'];
- }
- }
|