# ultimate-post/1.0.6/classes/Options.php

Post Grid Gutenberg Blocks – PostX, version 1.0.6. 485 lines.

- Page: https://pluginprobe.com/plugins/ultimate-post/1.0.6/code/classes/Options.php
- Raw: https://pluginprobe.com/plugins/ultimate-post/1.0.6/raw/classes/Options.php
- Modified: 2020-01-27T15:43:50+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/ultimate-post/1.0.6/code/classes/Options.php#L10-L20`.

```php
<?php
namespace ULTP;

defined('ABSPATH') || exit;

class Options{
    public function __construct() {
        add_action( 'admin_menu', array( $this, 'menu_page_callback' ) );
        add_action( 'admin_init', array( $this, 'register_settings' ) );
    }

    public static function menu_page_callback() {
        add_menu_page(
            esc_html__( 'Ultimate Post', 'ultimate-post' ),
            esc_html__( 'Ultimate Post', 'ultimate-post' ),
            'manage_options',
            'ultp-settings',
            array( self::class, 'create_admin_page' ),
            ULTP_URL.'assets/img/menu-panel.svg'
        );
    }

    /**
     * Register a setting and its sanitization callback.
     */
    public static function register_settings() {
       register_setting( 'ultp_options', 'ultp_options', array( self::class, 'sanitize' ) );
    }

    /**
     * Sanitization callback
     */
    public static function sanitize( $options ) {
        if ($options) {
            $settings = self::get_option_settings();
            foreach ($settings as $key => $setting) {
                if (!empty($key)) {
                    $options[$key] = sanitize_text_field($options[$key]);
                }
            }
        }
        return $options;
    }

    public static function get_option_settings(){
        return array(
            'css_save_as' => array(
                'type' => 'select',
                'label' => __('CSS Save Method', 'ultimate-post'),
                'options' => array(
                    'wp_head'   => __( 'Header','ultimate-post' ),
                    'filesystem' => __( 'File System','ultimate-post' ),
                ),
                'default' => 'wp_head',
                'desc' => __('Select where you want to save CSS.', 'ultimate-post')
            ),
            'preloader_style' => array(
                'type' => 'select',
                'label' => __('Preloader Style', 'ultimate-post'),
                'options' => array(
                    'style1' => __( 'Preloader Style 1','ultimate-post' ),
                    'style2' => __( 'Preloader Style 2','ultimate-post' ),
                ),
                'default' => 'style1',
                'desc' => __('Select Preloader Style.', 'ultimate-post')
            ),
            // 'preloader_color' => array(
            //     'type' => 'color',
            //     'label' => __('Preloader Color', 'ultimate-post'),
            //     'default' => '#1740f5',
            //     'desc' => __('Select Preloader Color.', 'ultimate-post')
            // ),
            'container_width' => array(
                'type' => 'number',
                'label' => __('Container Width', 'ultimate-post'),
                'default' => '1140',
                'desc' => __('Change Container Width.', 'ultimate-post')
            ),
        );
    }

    public static function get_recommended_themes(){
        $recommended_themes = array(
            'twentynineteen' => array(
                'name'  => 'Coblog',
                'slug'  => 'coblog',
                'url'   => 'https://wordpress.org/themes/coblog/',
                'logo'  => ULTP_URL.'assets/img/WordPress.png'
            ),
        );

        $html = '';
        foreach ($recommended_themes as $key => $value) {
            $html .= '<div class="ultp-recommended-theme">';
                $html .= '<div class="ultp-recommended-image">';
                    $html .= '<img src="'.$value['logo'].'" alt="'.$value['name'].'" />';
                $html .= '</div>';
                $html .= '<div class="ultp-recommended-name">'.$value['name'].'</div>';
                $html .= '<div class="ultp-recommended-button">';
                    $html .= '<a target="_blank" href="'.$value['url'].'">'.__('Download Now').'</a>';
                $html .= '</div>';
            $html .= '</div>';
        }
        echo $html;
    }

    public static function get_changelog_data() {
        $html = '';
        $resource_data = file_get_contents(ULTP_PATH.'/readme.txt', "r");
        $data = array();
        if ($resource_data) {
            $resource_data = explode('== Changelog ==', $resource_data);
            if (isset($resource_data[1])) {
                $resource_data = $resource_data[1];
                $resource_data = explode("\n", $resource_data);
                $inner = false;
                $count = -1;
                
                foreach ($resource_data as $element) {
                    if ($element){
                        if (substr_count($element, '=') > 1) {
                            $count++;
                            $temp = trim(str_replace('=', '', $element));
                            if (strpos($temp, '-') !== false) {
                                $temp = explode('-', $temp);
                                $data[$count]['date'] = trim($temp[1]);
                                $data[$count]['version'] = trim($temp[0]);
                            }
                        }
                        if (strpos($element, '* New:') !== false) {
                            $data[$count]['new'][] = trim(str_replace('* New:', '', $element));
                        }
                        if (strpos($element, '* Fix:') !== false) {
                            $data[$count]['fix'][] = trim(str_replace('* Fix:', '', $element));
                        }
                        if (strpos($element, '* Update:') !== false) {
                            $data[$count]['update'][] = trim(str_replace('* Update:', '', $element));
                        }
                    }
                }
            }
        }
        if (!empty($data)) {
            foreach ($data as $k => $inner_data) {
                $html .= '<div class="ultp-changelog-wrap">';
                foreach ($inner_data as $key => $changelog) {
                    if ($key == 'date') {
                        $html .= '<div class="ultp-changelog-date">'.__('Released on ', 'ultimate-post').' '.$changelog.'</div>';
                    } elseif($key == 'version') {
                        $html .= '<div class="ultp-changelog-version">'.__('Version', 'ultimate-post').' : '.$changelog.'</div>';
                    } else {
                        foreach ($changelog as $keyword => $val) {
                            $html .= '<div class="ultp-changelog-title"><span class="changelog-'.$key.'">'.$key.'</span>'.$val.'</div>';
                        }
                    }
                }
                $html .= '</div>';
            }
        }
        echo $html;
    }
    
    public static function get_settings_data() {
        $html = '';
        $option_data = get_option( 'ultp_options' );
        $data = self::get_option_settings();
        $html .= '<div class="ultp-settings">';
            $html .= '<input type="hidden" name="option_page" value="ultp_options" />';
            $html .= '<input type="hidden" name="action" value="update" />';
            $html .= wp_nonce_field( "ultp_options-options" );
            foreach ($data as $key => $value) {
                $html .= '<div class="ultp-settings-wrap">';
                    $html .= '<div class="ultp-settings-label">'.$value['label'].'</div>';
                    $html .= '<div class="ultp-settings-field-wrap">';
                        switch ($value['type']) {

                            case 'select':
                                $html .= '<div class="ultp-settings-field">';
                                    $val = isset($option_data[$key]) ? $option_data[$key] : (isset($value['default']) ? $value['default'] : '');
                                    $html .= '<select name="ultp_options['.$key.']">';
                                        foreach ( $value['options'] as $id => $label ) {
                                            $html .= '<option value="'.$id.'" '.( $val == $id ? ' selected="selected"':'').'>';
                                            $html .= strip_tags( $label );
                                            $html .= '</option>';
                                        }
                                        $html .= '</select>';
                                    $html .= '<p class="description">'.$value['desc'].'</p>';
                                $html .= '</div>';
                                break;

                            case 'color':
                                $html .= '<div class="ultp-settings-field">';
                                    $val = isset($option_data[$key]) ? $option_data[$key] : (isset($value['default']) ? $value['default'] : '');
                                    $html .= '<input name="ultp_options['.$key.']" value="'.$val.'" class="ultp-color-picker" />';
                                    $html .= '<p class="description">'.$value['desc'].'</p>';
                                $html .= '</div>';
                                break;

                            case 'number':
                                $html .= '<div class="ultp-settings-field">';
                                    $val = isset($option_data[$key]) ? $option_data[$key] : (isset($value['default']) ? $value['default'] : '');
                                    $html .= '<input type="number" name="ultp_options['.$key.']" value="'.$val.'"/>';
                                    $html .= '<p class="description">'.$value['desc'].'</p>';
                                $html .= '</div>';
                                break;

                            default:
                                # code...
                                break;

                        }
                    $html .= '</div>';
                $html .= '</div>';        
            }
            $html .= '<div class="ultp-settings-wrap">';
            $html .= '<div></div>'.get_submit_button();
            $html .= '</div>';

        $html .= '</div>';

        
        
        echo '<form method="post" action="options.php">'.$html.'</form>';
    }


    public static function get_support_data() {
        $html = '';
        $html .= '<div class="ultp-settings-support-wrap">';
            $html .= '<div class="ultp-setting-header">';
                $html .= '<h2><span class="dashicons dashicons-megaphone"></span>'.__('Support', 'ultimate-post').'</h2>';
                $html .= '<p>'.esc_html__('Need help with Ultimate Post Block? Ask a question and get help from the support staff. Don not forget to read the documentation first.', 'ultimate-post').'</p>';
                $html .= '<a target="_blank" href="https://www.wpxpo.com/docs/"><span class="dashicons dashicons-book"></span> '.__('Documentation', 'ultimate-post').'</a>';
                // $html .= '<a target="_blank" href="https://www.facebook.com/"><span class="dashicons dashicons-facebook"></span> '.__('Facebook Group', 'ultimate-post').'</a>';
                $html .= '<a target="_blank" href="https://www.wpxpo.com/support/"><span class="dashicons dashicons-format-chat"></span> '.__('Submit a Ticket', 'ultimate-post').'</a>';
            $html .= '</div>';
        $html .= '</div>';
        echo $html;
    }

    /**
     * Settings page output
     */
    public static function create_admin_page() { ?>
        <style>
            /* ----Common--- */
            #wpbody-content, #wpwrap{
                background-color: #ffffff;
            }
            #wpcontent {
                padding-left: 0px;
            }
            .wrap{
                margin: 0;
                margin-top: -17px;
            }

            /* ----Header--- */
            .ultp-setting-header{
                text-align: center;
                background-color: #f5f7f9;
                padding: 50px 0;
            }
            .ultp-setting-header h2{
                font-size: 28px;
                color: #3e5667;
            }
            .ultp-setting-header h2 span{
                font-size: 30px;
                margin-right: 15px;
                line-height: 20px;
            }
            .ultp-setting-header a{
                padding: 10px 20px;
                color: rgba(46,68,83,0.8);
                background: #fff;
                border-color: #e2e6eb;
                box-shadow: 0 1px 3px rgba(0,0,0,0.07);
                margin-top: 25px;
                display: inline-block;
                border-radius: 3px;
                text-decoration: none;
                font-size: 14px;
                transition: 100ms;
                margin-right: 10px;
            }
            .ultp-setting-header a:hover{
                color: #fff;
                background: #0591c9;
                border-color: rgba(1,118,165,0.85);
                box-shadow: 0 1px 4px rgba(1,96,134,0.4);
            }
            .ultp-setting-header img{
                width: 31px;
                border-radius: 50%;
                border: 2px solid #1740f5;
                position: relative;
                bottom: -7px;
            }
            .ultp-setting-header p{
                color: #687c93;
                font-size: 16px;
                max-width: 550px;
                margin: 0 auto;
                line-height: 28px;
            }
            /* ----Tab--- */
            .ultp-tab-wrap{
                background-color: #ffffff;
            }
            .ultp-tab-title-wrap{
                background-color: #f5f7f9;
                text-align: center;
            }
            .ultp-tab-title{
                color: #3e5566;
                font-size: 15px;
                display: inline-block;
                padding: 16px 23px;
                border-radius: 3px 3px 0 0;
            }
            .ultp-tab-title:hover{
                cursor: pointer;
            }
            .ultp-tab-title.active{
                background-color: #ffffff;
            }
            .ultp-tab-content{
                display: none;
            }
            .ultp-tab-content.active{
                display: block;
            }

            /* ----Settings--- */
            .ultp-settings{
                max-width: 500px;
                margin: 50px auto;
            }
            .ultp-settings-wrap {
                margin-bottom: 20px;
                display: grid;
                grid-template-columns: 0.4fr 1fr;
            }


            /* ----Recomended--- */
            .ultp-recommended-theme{
                max-width: 500px;
                background-color: #ececec;
                margin: 50px auto;
                border-radius: 3px;
            }
            .ultp-recommended-image, .ultp-recommended-name, .ultp-recommended-button {
                display: inline-block;
                vertical-align: middle;
            }
            .ultp-recommended-name{
                font-size: 18px;
                margin-left: 20px;
                color: #3e5566;
            }
            .ultp-recommended-image img {
                width: 70px;
            }
            .ultp-recommended-button {
                float: right;
                margin: 20px 20px 0 0;
                position: relative;
            }
            .ultp-recommended-button a{
                float: right;
                padding: 7px 15px;
                border-radius: 3px;
                color: #ffffff;
                background-color: #1640f5;
                transition: 200ms;
                text-decoration: none;
            }
            .ultp-recommended-button a:hover{
                cursor: pointer;
                background-color: #0931e0;
            }

            /* ---Changelog--- */
            .ultp-changelog-wrap {
                max-width: 600px;
                background-color: #f5f7f9;
                margin: 50px auto;
                border-radius: 3px;
                padding: 25px 30px;
                position: relative;
            }
            .ultp-changelog-date{
                font-size: 14px;
                display: inline-block;
                right: 30px;
                position: absolute;
                color: #989898;
            }
            .ultp-changelog-version{
                font-size: 20px;
                color: #5f6265;
                font-weight: 700;
                margin-bottom: 15px;
            }
            .ultp-changelog-title {
                text-transform: capitalize;
                font-size: 14px;
                color: #3e5465;
                line-height: 28px;
            }
            .ultp-changelog-title > span {
                padding: 1px 10px;
                border-radius: 3px;
                margin-right: 10px;
            }
            .changelog-fix{
                color: #721c24;
                background-color: #f8d7da;
                border-color: #f5c6cb;
            }
            .changelog-update{
                color: #856404;
                background-color: #fff3cd;
                border-color: #ffeeba;
            }
            .changelog-new{
                color: #155724;
                background-color: #d4edda;
                border-color: #c3e6cb;
            }

            /* ----Support--- */
            .ultp-settings-support-wrap{
                max-width: 800px;
                margin: 0 auto;
                border-radius: 4px;
                overflow: hidden;
                margin-bottom: 50px;
            }
            
        </style>
        <div class="wrap">
            <div class="ultp-option-body">
                <div class="ultp-setting-header">
                    <h2>
                        <img src="<?php echo ULTP_URL.'assets/img/menu-panel.svg'; ?>" alt="<?php _e('Ultimate Post blocks', 'ultimate-post'); ?>">
                        <?php _e('Ultimate Post blocks', 'ultimate-post'); ?>
                    </h2>
                    <p><?php esc_html_e('Best Gutenberg Post Listing/Grid plugin. Build a fast and supercharged WordPress post blog easily and perfectly.', 'ultimate-post'); ?></p>
                </div>
                <div class="ultp-tab-wrap">
                    <div class="ultp-tab-title-wrap">
                        <div class="ultp-tab-title active"><?php _e('Settings', 'ultimate-post'); ?></div>
                        <div class="ultp-tab-title"><?php _e('Recommended Theme', 'ultimate-post'); ?></div>
                        <div class="ultp-tab-title"><?php _e('Changelog', 'ultimate-post'); ?></div>
                    </div>
                    <div class="ultp-tab-content-wrap">
                        <div class="ultp-tab-content active"><!-- #Settings Content -->
                            <?php self::get_settings_data(); ?>
                        </div>
                        <div class="ultp-tab-content"><!-- #Recommended Theme Content -->
                            <?php self::get_recommended_themes(); ?>
                        </div>
                        <div class="ultp-tab-content"><!-- #Changelog Content -->
                            <?php self::get_changelog_data(); ?>
                        </div>
                    </div>
                </div>
                <?php self::get_support_data(); ?>
                <script type="text/javascript">
                    jQuery( document ).ready(function() {
                        jQuery( document ).on( "click", '.ultp-tab-title', function(e){ 
                            jQuery(this).closest('.ultp-tab-wrap').find('.ultp-tab-title').removeClass('active').eq(jQuery(this).index()).addClass('active')
                            jQuery(this).closest('.ultp-tab-wrap').find('.ultp-tab-content').removeClass('active').eq(jQuery(this).index()).addClass('active');
                        });
                    });
                </script>
            </div>
        </div>
    <?php }
}


```
