You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							359 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							359 lines
						
					
					
						
							11 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * The admin-specific functionality of the plugin.
 | 
						|
 *
 | 
						|
 * @link       https://kolarix.com/biztime
 | 
						|
 * @since      1.0.0
 | 
						|
 *
 | 
						|
 * @package    BizTime
 | 
						|
 * @subpackage BizTime/admin
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * The admin-specific functionality of the plugin.
 | 
						|
 *
 | 
						|
 * Defines the plugin name, version, and two examples hooks for how to
 | 
						|
 * enqueue the admin-specific stylesheet and JavaScript.
 | 
						|
 *
 | 
						|
 * @package    BizTime
 | 
						|
 * @subpackage BizTime/admin
 | 
						|
 * @author     Kolarix <biztime@kolarix.com>
 | 
						|
 */
 | 
						|
class Biztime_Admin {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The ID of this plugin.
 | 
						|
	 *
 | 
						|
	 * @since    1.0.0
 | 
						|
	 * @access   private
 | 
						|
	 * @var      string    $plugin_name    The ID of this plugin.
 | 
						|
	 */
 | 
						|
	private $plugin_name;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The version of this plugin.
 | 
						|
	 *
 | 
						|
	 * @since    1.0.0
 | 
						|
	 * @access   private
 | 
						|
	 * @var      string    $version    The current version of this plugin.
 | 
						|
	 */
 | 
						|
	private $version;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Initialize the class and set its properties.
 | 
						|
	 *
 | 
						|
	 * @since    1.0.0
 | 
						|
	 * @param      string    $plugin_name       The name of this plugin.
 | 
						|
	 * @param      string    $version    The version of this plugin.
 | 
						|
	 */
 | 
						|
	public function __construct( $plugin_name, $version ) {
 | 
						|
 | 
						|
		$this->plugin_name = $plugin_name;
 | 
						|
		$this->version = $version;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Register the stylesheets for the admin area.
 | 
						|
	 *
 | 
						|
	 * @since    1.0.0
 | 
						|
	 */
 | 
						|
	public function enqueue_styles() {
 | 
						|
 | 
						|
		/**
 | 
						|
		 * This function is provided for demonstration purposes only.
 | 
						|
		 *
 | 
						|
		 * An instance of this class should be passed to the run() function
 | 
						|
		 * defined in Biztime_Loader as all of the hooks are defined
 | 
						|
		 * in that particular class.
 | 
						|
		 *
 | 
						|
		 * The Biztime_Loader will then create the relationship
 | 
						|
		 * between the defined hooks and the functions defined in this
 | 
						|
		 * class.
 | 
						|
		 */
 | 
						|
 | 
						|
		wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/biztime-admin.css', array(), $this->version, 'all' );
 | 
						|
        wp_enqueue_style( $this->plugin_name . '-timepicker', plugin_dir_url( __FILE__ ) . 'css/timepicker.min.css', array(), $this->version, 'all' );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Register the JavaScript for the admin area.
 | 
						|
	 *
 | 
						|
	 * @since    1.0.0
 | 
						|
	 */
 | 
						|
	public function enqueue_scripts() {
 | 
						|
 | 
						|
		/**
 | 
						|
		 * This function is provided for demonstration purposes only.
 | 
						|
		 *
 | 
						|
		 * An instance of this class should be passed to the run() function
 | 
						|
		 * defined in Biztime_Loader as all of the hooks are defined
 | 
						|
		 * in that particular class.
 | 
						|
		 *
 | 
						|
		 * The Biztime_Loader will then create the relationship
 | 
						|
		 * between the defined hooks and the functions defined in this
 | 
						|
		 * class.
 | 
						|
		 */
 | 
						|
 | 
						|
		wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/biztime-admin.js', array( 'jquery' ), $this->version, false );
 | 
						|
        wp_enqueue_script( $this->plugin_name . '-timepicker', plugin_dir_url( __FILE__ ) . 'js/timepicker.min.js', array( 'jquery' ), $this->version, false );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
    /**
 | 
						|
     * Register the settings page for the admin area.
 | 
						|
     *
 | 
						|
     * @since    1.0.0
 | 
						|
     */
 | 
						|
    public function register_settings_page() {
 | 
						|
 | 
						|
        add_submenu_page(
 | 
						|
            'options-general.php',
 | 
						|
            __( 'Biztime', 'biztime' ),
 | 
						|
            __( 'Biztime', 'biztime' ),
 | 
						|
            'manage_options',
 | 
						|
            'biztime',
 | 
						|
            array( $this, 'display_settings_page' )
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Display the settings page content for the page we have created.
 | 
						|
     *
 | 
						|
     * @since    1.0.0
 | 
						|
     */
 | 
						|
    public function display_settings_page() {
 | 
						|
 | 
						|
        require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/biztime-admin-display.php';
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Register the settings for our settings page.
 | 
						|
     *
 | 
						|
     * @since    1.0.0
 | 
						|
     */
 | 
						|
    public function register_settings() {
 | 
						|
 | 
						|
        register_setting(
 | 
						|
            $this->plugin_name . '-availability',
 | 
						|
            $this->plugin_name . '-availability',
 | 
						|
            array( $this, 'biztime_register_availability' )
 | 
						|
        );
 | 
						|
 | 
						|
        add_settings_section(
 | 
						|
            $this->plugin_name . '-availability-section',
 | 
						|
            __('Availability', 'biztime' ),
 | 
						|
            array( $this, 'biztime_add_availability_section' ),
 | 
						|
            $this->plugin_name . '-availability'
 | 
						|
        );
 | 
						|
 | 
						|
        $days = array('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday');
 | 
						|
 | 
						|
        foreach ( $days as $day ) {
 | 
						|
            add_settings_field(
 | 
						|
                $day,
 | 
						|
                __( ucfirst( $day ), 'biztime' ),
 | 
						|
                array( $this, 'biztime_add_availability_fields' ),
 | 
						|
                $this->plugin_name . '-availability',
 | 
						|
                $this->plugin_name . '-availability-section',
 | 
						|
                array(
 | 
						|
                    'label_for' => $day,
 | 
						|
                    'description' => __( 'Available', 'biztime' )
 | 
						|
                )
 | 
						|
            );
 | 
						|
        };
 | 
						|
 | 
						|
        add_settings_field(
 | 
						|
            'phone-number',
 | 
						|
            __( 'Phone number', 'biztime' ),
 | 
						|
            array( $this, 'biztime_add_availability_input' ),
 | 
						|
            $this->plugin_name . '-availability',
 | 
						|
            $this->plugin_name . '-availability-section',
 | 
						|
            array(
 | 
						|
                'label_for' => 'phone-number',
 | 
						|
                'description' => __('Number to be shown in modal', 'biztime' ),
 | 
						|
                'default'   => __( '+01 123 4567', 'biztime' )
 | 
						|
            )
 | 
						|
        );
 | 
						|
 | 
						|
	    add_settings_field(
 | 
						|
		    'true-msg',
 | 
						|
		    __( 'Message when available', 'biztime' ),
 | 
						|
		    array( $this, 'biztime_add_availability_textarea' ),
 | 
						|
		    $this->plugin_name . '-availability',
 | 
						|
		    $this->plugin_name . '-availability-section',
 | 
						|
		    array(
 | 
						|
			    'label_for' => 'true-msg',
 | 
						|
			    'description' => __('Message to be displayed when user visits page during available hours', 'biztime' ),
 | 
						|
			    'default'   => __( 'We are open!', 'biztime' )
 | 
						|
		    )
 | 
						|
	    );
 | 
						|
 | 
						|
	    add_settings_field(
 | 
						|
		    'false-msg',
 | 
						|
		    __( 'Message when not available', 'biztime' ),
 | 
						|
		    array( $this, 'biztime_add_availability_textarea' ),
 | 
						|
		    $this->plugin_name . '-availability',
 | 
						|
		    $this->plugin_name . '-availability-section',
 | 
						|
		    array(
 | 
						|
			    'label_for' => 'false-msg',
 | 
						|
			    'description' => __('Message to be displayed when user visits page during unavailable hours', 'biztime' ),
 | 
						|
			    'default'   => __( 'We are currently closed!', 'biztime' )
 | 
						|
		    )
 | 
						|
	    );
 | 
						|
 | 
						|
	    add_settings_field(
 | 
						|
		    'show-next',
 | 
						|
		    __( 'Next available day', 'biztime' ),
 | 
						|
		    array( $this, 'biztime_add_availability_checkbox' ),
 | 
						|
		    $this->plugin_name . '-availability',
 | 
						|
		    $this->plugin_name . '-availability-section',
 | 
						|
		    array(
 | 
						|
			    'label_for' => 'show-next',
 | 
						|
			    'description' => __('Show the next available day?', 'biztime' )
 | 
						|
		    )
 | 
						|
	    );
 | 
						|
 | 
						|
 | 
						|
	    add_settings_field(
 | 
						|
		    'next-msg',
 | 
						|
		    __( 'Next available day message', 'biztime' ),
 | 
						|
		    array( $this, 'biztime_add_availability_textarea' ),
 | 
						|
		    $this->plugin_name . '-availability',
 | 
						|
		    $this->plugin_name . '-availability-section',
 | 
						|
		    array(
 | 
						|
			    'label_for' => 'next-msg',
 | 
						|
			    'description' => __('Message to be displayed with the next available day', 'biztime' ),
 | 
						|
			    'default'   => __( 'We are back in business on:', 'biztime' )
 | 
						|
		    )
 | 
						|
	    );
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
     * Section for the settings.
 | 
						|
     *
 | 
						|
     * @since    1.0.0
 | 
						|
     */
 | 
						|
    public function biztime_add_availability_section() {
 | 
						|
 | 
						|
        return;
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Availability fields, checkbox and two inputs with timepicker.
 | 
						|
     *
 | 
						|
     * @since    1.0.0
 | 
						|
     */
 | 
						|
    public function biztime_add_availability_fields( $args ) {
 | 
						|
 | 
						|
        $field_id = $args['label_for'];
 | 
						|
        $options = get_option( $this->plugin_name . '-availability', array(), 'no' );
 | 
						|
        $to = '';
 | 
						|
        $from = '';
 | 
						|
 | 
						|
        if ( !empty( $options[$field_id]['check'] ) ) {
 | 
						|
            $to = !empty( $options[$field_id]['to'] ) ? esc_attr( $options[$field_id]['to'] ) : '';
 | 
						|
            $from = !empty( $options[$field_id]['from'] ) ? esc_attr( $options[$field_id]['from'] ) : '';
 | 
						|
        }
 | 
						|
        ?>
 | 
						|
 | 
						|
        <input class="day-checkbox" type="checkbox" name="<?php echo $this->plugin_name . '-availability[' . $field_id . '][check]'; ?>" id="<?php echo $this->plugin_name . '-availability[' . $field_id . '][check]'; ?>" <?php checked( !empty( $options[$field_id]['check'] ), true ); ?> />
 | 
						|
 | 
						|
        <label class="label" for="<?php echo $this->plugin_name . '-availability[' . $field_id . '][from]'; ?>">
 | 
						|
            From:
 | 
						|
            <input class="timepicker" type="text" name="<?php echo $this->plugin_name . '-availability[' . $field_id . '][from]'; ?>" id="<?php echo $this->plugin_name . '-availability[' . $field_id . '][from]'; ?>" value="<?php echo $from; ?>" />
 | 
						|
        </label>
 | 
						|
 | 
						|
        <label class="label" for="<?php echo $this->plugin_name . '-availability[' . $field_id . '][to]'; ?>">
 | 
						|
            To:
 | 
						|
            <input class="timepicker" type="text" name="<?php echo $this->plugin_name . '-availability[' . $field_id . '][to]'; ?>" id="<?php echo $this->plugin_name . '-availability[' . $field_id . '][to]'; ?>" value="<?php echo $to; ?>" />
 | 
						|
        </label>
 | 
						|
 | 
						|
        <?php
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Phone number input
 | 
						|
     *
 | 
						|
     * @since    1.0.0
 | 
						|
     */
 | 
						|
    public function biztime_add_availability_input( $args ) {
 | 
						|
 | 
						|
        $field_id = $args['label_for'];
 | 
						|
        $field_description = $args['description'];
 | 
						|
        $field_default = $args['default'];
 | 
						|
 | 
						|
        $options = get_option( $this->plugin_name . '-availability', array(), 'no' );
 | 
						|
        $option = $field_default;
 | 
						|
 | 
						|
        if ( ! empty( $options[ $field_id ] ) ) {
 | 
						|
 | 
						|
            $option = $options[ $field_id ];
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        ?>
 | 
						|
 | 
						|
        <input type="text" name="<?php echo $this->plugin_name . '-availability[' . $field_id . ']'; ?>" id="<?php echo $this->plugin_name . '-availability[' . $field_id . ']'; ?>" value="<?php echo esc_attr( $option ); ?>" class="regular-text" />
 | 
						|
        <p class="description"><?php echo esc_html( $field_description ); ?></p>
 | 
						|
 | 
						|
        <?php
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Availability messages textarea
 | 
						|
	 *
 | 
						|
	 * @since    1.0.0
 | 
						|
	 */
 | 
						|
	public function biztime_add_availability_textarea( $args ) {
 | 
						|
 | 
						|
		$field_id = $args['label_for'];
 | 
						|
		$field_description = $args['description'];
 | 
						|
		$field_default = $args['default'];
 | 
						|
 | 
						|
		$options = get_option( $this->plugin_name . '-availability', array(), 'no' );
 | 
						|
		$option = $field_default;
 | 
						|
 | 
						|
		if ( ! empty( $options[ $field_id ] ) ) {
 | 
						|
 | 
						|
			$option = $options[ $field_id ];
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		?>
 | 
						|
 | 
						|
        <textarea name="<?php echo $this->plugin_name . '-availability[' . $field_id . ']'; ?>" id="<?php echo $this->plugin_name . '-availability[' . $field_id . ']'; ?>" class="regular-text" rows="4"><?php echo esc_textarea( $option ); ?></textarea>
 | 
						|
        <p class="description"><?php echo esc_html( $field_description ); ?></p>
 | 
						|
 | 
						|
		<?php
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Next available day checkbox.
 | 
						|
	 *
 | 
						|
	 * @since    1.0.0
 | 
						|
	 */
 | 
						|
	public function biztime_add_availability_checkbox( $args ) {
 | 
						|
		$field_id = $args['label_for'];
 | 
						|
		$field_description = $args['description'];
 | 
						|
		$options = get_option( $this->plugin_name . '-availability', array(), 'no' );
 | 
						|
		$option = isset( $options[ $field_id ] ) ? $options[ $field_id ] : 0;
 | 
						|
		?>
 | 
						|
 | 
						|
        <label for="<?php echo $this->plugin_name . '-availability[' . $field_id . ']'; ?>">
 | 
						|
            <input type="checkbox" name="<?php echo $this->plugin_name . '-availability[' . $field_id . ']'; ?>" id="<?php echo $this->plugin_name . '-availability[' . $field_id . ']'; ?>" <?php checked( $option, 1 ); ?> value="1" />
 | 
						|
			<?php echo esc_html( $field_description ); ?>
 | 
						|
        </label>
 | 
						|
 | 
						|
		<?php
 | 
						|
	}
 | 
						|
 | 
						|
}
 |